26 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
28 TString vmcWorkdir = getenv(
"VMCWORKDIR");
31 gSystem->Load(
"libGeoBase");
32 gSystem->Load(
"libParBase");
33 gSystem->Load(
"libBase");
34 gSystem->Load(
"libPndData");
35 gSystem->Load(
"libPassive");
63 Double_t bbox_hlen = 0.5*(bbox_zdown - bbox_zup);
64 Double_t bbox_shift = bbox_zup + bbox_hlen;
79 Double_t sob_shift = -bbox_hlen + bbox_shift - sob_len;
80 Double_t sob_Rout = radius + hthick + sob_len*tan(sob_angle/180.*pi)/
cos(pi/bbnum/2.);
82 Double_t bbAngle = ( 180. - 2.*pipehAngle - bbGap/radius/pi*180.*(bbnum/2.-1.) )/(bbnum/2.);
84 cout<<
"bbAngle = "<<bbAngle<<
", bbX = "<<bbX<<endl;
88 Double_t dphi = (180.-2.*pipehAngle)/bbnum*2.;
100 Double_t pheight = 2.*phlength * tan(pangle/180.*pi);
102 Double_t sob_Rprizm = radius + hthick + poffset + pheight + EVoffset + (sob_len-2.*phlength)*tan(60./180.*pi);
104 Double_t GlueHeight = GlueLayer/
cos(3.1415/2. - sob_angleB/180.*3.1415);
105 Double_t PDHeight = PDthick/
cos(3.1415/2. - sob_angleB/180.*3.1415);
106 cout<<
"prizm length = "<<phlength*2.<<endl;
107 cout<<
"prizm height = "<<2.*phlength * tan(pangle/180.*pi)<<endl;
115 TString fGeoFile1= Form(
"prototype_MCPs",fFocusingSystem, fprizm);
119 TFile*
fi =
new TFile(fGeoFile,
"RECREATE");
120 cout<<
"Output file = "<<fGeoFile<<endl;
125 Int_t nel, numed, nz;
127 new TGeoManager(
"Drc",
"Drc");
133 TGeoMixture *
air =
new TGeoMixture(
"air", nel,density);
134 aa = 14.010000; z = 7.000000; w = 0.780000;
135 air->DefineElement(0,aa,z,w);
136 aa = 16.000000; z = 8.000000; w = 0.210000;
137 air->DefineElement(1,aa,z,w);
138 aa = 39.950000; z = 18.000000; w = 0.010000;
139 air->DefineElement(2,aa,z,w);
151 TGeoMedium *air_m =
new TGeoMedium(
"air", numed,air, par);
156 TGeoMixture *DIRCairNoSens =
new TGeoMixture(
"DIRCairNoSens", nel,density);
157 aa = 14.010000; z = 7.000000; w = 0.780000;
158 DIRCairNoSens->DefineElement(0,aa,z,w);
159 aa = 16.000000; z = 8.000000; w = 0.210000;
160 DIRCairNoSens->DefineElement(1,aa,z,w);
161 aa = 39.950000; z = 18.000000; w = 0.010000;
162 DIRCairNoSens->DefineElement(2,aa,z,w);
174 TGeoMedium *DIRCairNoSens_m =
new TGeoMedium(
"DIRCairNoSens", numed,DIRCairNoSens, par);
182 TGeoMaterial *DIRCcarbonFiber =
new TGeoMaterial(
"DIRCcarbonFiber", aa,z,density,radl,absl);
194 TGeoMedium *DIRCcarbonFiber_m =
new TGeoMedium(
"DIRCcarbonFiber", numed,DIRCcarbonFiber, par);
199 TGeoMixture* FusedSil =
new TGeoMixture(
"FusedSil", nel,density);
200 aa = 28.090000; z = 14.000000; w = 0.467475;
201 FusedSil->DefineElement(0,aa,z,w);
202 aa = 15.999400; z = 8.000000; w = 0.532525;
203 FusedSil->DefineElement(1,aa,z,w);
215 TGeoMedium *FusedSil_m =
new TGeoMedium(
"FusedSil", numed,FusedSil, par);
220 TGeoMixture* Epotek =
new TGeoMixture(
"Epotek", nel,density);
221 aa = 28.090000; z = 14.000000; w = 0.467475;
222 Epotek->DefineElement(0,aa,z,w);
223 aa = 15.999400; z = 8.000000; w = 0.532525;
224 Epotek->DefineElement(1,aa,z,w);
236 TGeoMedium *Epotek_m =
new TGeoMedium(
"Epotek", numed, Epotek, par);
241 TGeoMixture* OpticalGrease =
new TGeoMixture(
"OpticalGrease", nel,density);
242 aa = 28.090000; z = 14.000000; w = 0.467475;
243 OpticalGrease->DefineElement(0,aa,z,w);
244 aa = 15.999400; z = 8.000000; w = 0.532525;
245 OpticalGrease->DefineElement(1,aa,z,w);
257 TGeoMedium *OpticalGrease_m =
new TGeoMedium(
"OpticalGrease", numed, OpticalGrease, par);
262 TGeoMixture* Mirror =
new TGeoMixture(
"Mirror", nel,density);
263 aa = 28.090000; z = 14.000000; w = 0.467475;
264 Mirror->DefineElement(0,aa,z,w);
265 aa = 15.999400; z = 8.000000; w = 0.532525;
266 Mirror->DefineElement(1,aa,z,w);
278 TGeoMedium *Mirror_m =
new TGeoMedium(
"Mirror", numed,Mirror, par);
283 TGeoMixture *Marcol82 =
new TGeoMixture(
"Marcol82", nel,density);
284 aa = 1.007940; z = 1.000000; w = 0.148605;
285 Marcol82->DefineElement(0,aa,z,w);
286 aa = 12.010700; z = 6.000000; w = 0.851395;
287 Marcol82->DefineElement(1,aa,z,w);
299 TGeoMedium *Marcol82_m =
new TGeoMedium(
"Marcol82", numed,Marcol82, par);
304 TGeoMixture *Marcol82_7 =
new TGeoMixture(
"Marcol82-7", nel,density);
305 aa = 1.007940; z = 1.000000; w = 0.148605;
306 Marcol82_7->DefineElement(0,aa,z,w);
307 aa = 12.010700; z = 6.000000; w = 0.851395;
308 Marcol82_7->DefineElement(1,aa,z,w);
320 TGeoMedium *Marcol82_7_m =
new TGeoMedium(
"Marcol82-7", numed,Marcol82_7, par);
326 TGeoMixture *NLAK33A =
new TGeoMixture(
"NLAK33A", nel, density);
327 aa = 28.090000; z = 14.000000; w = 0.467475;
328 NLAK33A->DefineElement(0,aa,z,w);
329 aa = 15.999400; z = 8.000000; w = 0.532525;
330 NLAK33A->DefineElement(1,aa,z,w);
342 TGeoMedium *NLAK33A_m =
new TGeoMedium(
"NLAK33A", numed,NLAK33A, par);
349 if(fFocusingSystem == 0){
352 fSlabEnd = -bbox_hlen + bbox_shift + len;
353 cout<<
"bar ends at = "<<fSlabEnd<<endl;
354 cout<<
"no focusing, len = grease = "<<len<<endl;
356 TGeoBBox* lay =
new TGeoBBox(
"lay", barWidth/2., hthick, GreaseLayer/2.);
357 TGeoVolume* grBar =
new TGeoVolume(
"greaseBar", lay,
gGeoManager->GetMedium(
"OpticalGrease"));
358 grBar->SetLineColor(kBlue);
359 grBar->SetTransparency(60);
362 Double_t fdz_grease = -(bbox_hlen)+len/2.;
365 if (fFocusingSystem == 1){
374 cout<<
" DIRC a,b = "<<a<<
" "<<b<<endl;
387 len = b + 0.2 + b3 + 0.5;
389 cout<<
"lens focusing, DIRC len= "<<len<<endl;
391 fSlabEnd = -bbox_hlen + bbox_shift + len;
392 cout<<
"bar ends at = "<<fSlabEnd<<endl;
399 TGeoSphere* logicSphere=
new TGeoSphere(
"S",0.,r, 0. ,180.,0.,360.);
400 TGeoBBox* lBox =
new TGeoBBox(
"B", barWidth/2., hthick, b/2.);
401 TGeoTranslation *tr1 =
new TGeoTranslation(
"tr1", 0.,0., t);
402 tr1->RegisterYourself();
403 TGeoCompositeShape *cs =
new TGeoCompositeShape(
"cs",
"S*(B:tr1)");
404 TGeoVolume *lens1 =
new TGeoVolume(
"DrcLENS1",cs,
gGeoManager->GetMedium(
"FusedSil"));
405 lens1->SetLineColor(kRed-8);
406 lens1->SetTransparency(40);
412 fdz_lens1 = -(bbox_hlen)+len -(-r+b);
417 TGeoSphere* logicSphere2 =
new TGeoSphere(
"S2",0 ,r2, 0. ,180.,0.,360.);
418 TGeoBBox* lBox2 =
new TGeoBBox(
"B2", barWidth/2., hthick, b2/2.);
419 TGeoTranslation *tr2 =
new TGeoTranslation(
"tr2", 0.,0., t2);
420 tr2->RegisterYourself();
421 TGeoCompositeShape *cs2 =
new TGeoCompositeShape(
"cs2",
"(B2:tr2)-S2");
422 TGeoVolume *lens2 =
new TGeoVolume(
"DrcLENS2",cs2,
gGeoManager->GetMedium(
"NLAK33A"));
423 lens2->SetLineColor(kRed+2);
424 lens2->SetTransparency(40);
432 fdz_lens2 = -(bbox_hlen)+len -(-r2) -
b;
436 TGeoSphere* logicSphere3=
new TGeoSphere(
"S3",0.,r3, 0. ,180.,0.,360.);
437 TGeoBBox* lBox3 =
new TGeoBBox(
"B3", barWidth/2., hthick, b3/2.);
438 TGeoTranslation *tr3 =
new TGeoTranslation(
"tr3", 0.,0., t3);
439 tr3->RegisterYourself();
440 TGeoCompositeShape *cs3 =
new TGeoCompositeShape(
"cs3",
"S3*(B3:tr3)");
441 TGeoVolume *lens3 =
new TGeoVolume(
"DrcLENS3",cs3,
gGeoManager->GetMedium(
"NLAK33A"));
442 lens3->SetLineColor(kRed-6);
443 lens3->SetTransparency(40);
452 fdz_lens3 = -(bbox_hlen)+len -(-r3+b3) -b - b2/2. ;
458 if (fFocusingSystem == 2){
464 len = -130. + zpos + 1.;
470 Double_t focal_length = 2. * bbox_hlen + sob_len -
fabs(len) + len1;
471 Double_t mirror_radius = 2. * focal_length;
473 cout<<
" mirror radius: "<<mirror_radius<<endl;
478 TGeoSphere* logicSphere =
new TGeoSphere(
"S",0.,mirror_radius, 0. ,180.,0.,360.);
479 TGeoBBox* lBox =
new TGeoBBox(
"B", barWidth/2., hthick,
fabs(len1)/2.);
481 Double_t t = mirror_radius - len1/2.;
483 TGeoTranslation *tr1 =
new TGeoTranslation(
"tr1", 0.,0., t);
484 tr1->RegisterYourself();
485 TGeoCompositeShape *cs =
new TGeoCompositeShape(
"cs",
"S*(B:tr1)");
487 TGeoVolume *block1 =
new TGeoVolume(
"DrcBlock1",cs,
gGeoManager->GetMedium(
"FusedSil"));
488 block1->SetLineColor(kRed);
489 block1->SetTransparency(40);
492 Double_t shift1 = len1-mirror_radius;
493 shift1 += bbox_hlen-
fabs(len)-2.*mirr_hthick;
505 TGeoSphere* logicSphere2 =
new TGeoSphere(
"S2",0,mirror_radius, 0. ,180.,0.,360.);
506 TGeoBBox* lBox2 =
new TGeoBBox(
"B2", barWidth/2., hthick,
fabs(len2)/2.);
509 Double_t t2 = mirror_radius + len2/2 - 1;
511 TGeoTranslation *tr2 =
new TGeoTranslation(
"tr2", 0.,0., t2);
512 tr2->RegisterYourself();
513 TGeoCompositeShape *cs2 =
new TGeoCompositeShape(
"cs2",
"(B2:tr2)-S2");
515 TGeoVolume *block2 =
new TGeoVolume(
"DrcBlock2",cs2,
gGeoManager->GetMedium(
"Mirror"));
516 block2->SetLineColor(kGreen);
517 block2->SetTransparency(40);
521 shift2 += bbox_hlen-
fabs(len)-2*mirr_hthick;
522 shift2 += len1 + gap;
541 fSlabEnd = -bbox_hlen + bbox_shift + flen;
542 cout<<
"bar ends at = "<<fSlabEnd<<endl;
551 TGeoBBox* lTop =
new TGeoBBox(400,400,600);
552 cave =
new TGeoVolume(
"DIRC", lTop, air_m);
557 TGeoPcon*
shape =
new TGeoPcon(
"BarrelDIRCShape", 0, 360., 4);
558 shape->DefineSection(0, bbox_zdown, 35., 85.);
559 shape->DefineSection(1, bbox_zup, 35., 85.);
560 shape->DefineSection(2, bbox_zup - sob_len, 35., sob_Rout+poffset+pheight+EVoffset+PDHeight+GlueHeight);
561 shape->DefineSection(3, bbox_zup - sob_len - PDthick - GlueLayer-eps, 35., sob_Rout+poffset+pheight+EVoffset+PDHeight+GlueHeight);
562 vLocalMother =
new TGeoVolume(
"BarrelDIRC", shape, air_m);
563 cave->AddNode(vLocalMother, 0,0);
566 cout<<
"bbox length = "<<2.*(bbox_hlen-0.5*(boxgap+boxthick))<<
", prizm length = "<<2.*(phlength+0.5*(boxgap+boxthick))<<endl;
567 cout<<
"prizm shift = "<<-bbox_hlen+0.5*(boxgap+boxthick)-phlength<<endl;
572 if(fprizm == kFALSE){
573 logicbbL =
new TGeoBBox(
"logicbbL", barWidth/2.+boxgap+boxthick, (2.*hthick+boxgap+boxthick+EVdrop+EVoffset)/2., bbox_hlen);
574 TGeoTrap*logicSepEVBox =
new TGeoTrap(
"logicSepEVBox", sob_len/2.,
577 (2.*hthick+boxgap+boxthick+EVdrop+EVoffset +sob_len*tan(sob_angle*pi/180.))/2.,
578 EVwidth/2.+boxthick+eps,
579 EVwidth/2.+boxthick+eps,
581 (2.*hthick+boxgap+boxthick+EVdrop+EVoffset)/2.,
582 EVwidth/2.+boxthick+eps,
583 EVwidth/2.+boxthick+eps,
585 TGeoTranslation* trseb =
new TGeoTranslation(
"trseb", 0., sob_len/2.*tan(sob_angle*pi/180./2.), -bbox_hlen-sob_len/2.);
586 trseb->RegisterYourself();
587 TGeoCompositeShape* bboxL =
new TGeoCompositeShape(
"bboxL",
"logicbbL + logicSepEVBox:trseb");
589 bbox =
new TGeoVolume(
"DrcBarBox", bboxL,DIRCcarbonFiber_m);
591 bbox->SetLineColor(4);
596 if(fprizm == kFALSE){
597 logicbbS =
new TGeoBBox(
"logicbbS", barWidth/2.+boxgap, (2.*hthick+boxgap+EVdrop+EVoffset)/2., bbox_hlen);
598 TGeoTrap* logicSepEVContainer =
new TGeoTrap(
"logicSepEVContainer", sob_len/2.,
601 (2.*hthick+boxgap+EVdrop+EVoffset +sob_len*tan(sob_angle*pi/180.))/2.,
605 (2.*hthick+boxgap+EVdrop+EVoffset)/2.,
609 TGeoCompositeShape* bboxS =
new TGeoCompositeShape(
"bboxS",
"logicbbS + logicSepEVContainer:trseb");
611 abox =
new TGeoVolume(
"DrcAirBox", bboxS, DIRCairNoSens_m);
612 bbox->AddNode(abox, 0,
new TGeoCombiTrans(0., 0., 0.,
new TGeoRotation(0)));
614 abox->SetLineColor(2);
617 TGeoTrap* logicEVs =
new TGeoTrap(
"logicEVs", sob_len/2.,
620 (2.*hthick+EVdrop+EVoffset +sob_len*tan(sob_angle*pi/180.))/2.,
624 (2.*hthick+EVdrop+EVoffset)/2.,
628 TGeoVolume *smallEVs =
new TGeoVolume(
"DrcEVSensor", logicEVs, FusedSil_m);
629 smallEVs->SetLineColor(kMagenta+2);
630 smallEVs->SetTransparency(40);
635 Double_t dx_bbox, dy_bbox, dz_bbox, phi_curr;
637 for(Int_t
m = 0;
m < bbnum;
m ++){
638 phi_curr = (90. - phi0 - dphi*
m)/180.*pi;
639 if(
m > bbnum/2-1){ phi_curr = (90. - phi0 - dphi*
m - 2.*pipehAngle)/180.*pi; }
640 dx_bbox = radius *
cos(phi_curr);
641 dy_bbox = radius *
sin(phi_curr);
643 dz_bbox = bbox_shift;
646 dz_bbox = bbox_shift + 0.5*(boxgap+boxthick);
648 TGeoRotation rot_bbox;
649 rot_bbox.RotateZ( -phi0 -
m*dphi - (TMath::Floor(2.*
m/bbnum))*(2.*pipehAngle));
650 vLocalMother->AddNode(bbox,
m+1,
new TGeoCombiTrans(dx_bbox, dy_bbox, dz_bbox,
new TGeoRotation(rot_bbox)));
652 cout<<
"bar width = "<<barWidth/2. <<
", bar with gaps = "<<(bbX/barnum)<<endl;
653 cout<<
"barboxL width = "<<bbX/2.+boxgap+boxthick<<
", barboxS width = "<<bbX/2.+boxgap<<endl;
654 cout<<
"x="<<(((bbX/barnum)/2.)-bargap)*2<<
", y="<<hthick*2<<
", z="<<(bbox_hlen-
fabs(len)/2.-mirr_hthick)*2<<endl<<endl;
657 TGeoBBox* logicBar =
new TGeoBBox(
"logicBar", barWidth/2., hthick, bbox_hlen-
fabs(len)/2.-mirr_hthick);
659 if(fprizm == kFALSE){
660 bar =
new TGeoVolume(
"DrcBarSensor",logicBar, FusedSil_m );
663 bar->SetLineColor(kCyan-9);
664 bar->SetTransparency(60);
667 TGeoBBox* logicMirror =
new TGeoBBox(
"logicMirror", barWidth/2., hthick, mirr_hthick);
668 TGeoVolume *mirr =
new TGeoVolume(
"DrcMirr", logicMirror, Mirror_m);
669 mirr->SetLineColor(5);
673 for(Int_t j=0; j<barnum; j++){
674 dx = - (bbX/2.) + (bbX/barnum)/2. + j * (bbX/barnum);
676 if(fprizm == kFALSE){
677 dz_bar =
fabs(len)/2.-mirr_hthick;
678 dz_mirr = bbox_hlen - mirr_hthick;
679 if(fFocusingSystem == 1){
680 abox->AddNode(lens1, 1+j,
new TGeoCombiTrans(dx, dy, fdz_lens1,
new TGeoRotation (0)));
681 abox->AddNode(lens2, 1+j,
new TGeoCombiTrans(dx, dy, fdz_lens2,
new TGeoRotation (0)));
682 abox->AddNode(lens3, 1+j,
new TGeoCombiTrans(dx, dy, fdz_lens3,
new TGeoRotation (0)));
684 if(fFocusingSystem == 2){
685 abox->AddNode(block1, 1+j,
new TGeoCombiTrans(dx, dy, fdz_mirr1,
new TGeoRotation (0)));
686 abox->AddNode(block2, 1+j,
new TGeoCombiTrans(dx, dy, fdz_mirr2,
new TGeoRotation (0)));
688 if(fFocusingSystem == 0){
693 if(fFocusingSystem == 0){
694 dz_bar = -mirr_hthick - 0.5*boxgap;
695 dz_mirr = bbox_hlen -0.5*boxgap - mirr_hthick;
697 if(fFocusingSystem == 2){
698 dz_bar = -mirr_hthick - 0.5*boxgap + len/2.;
699 abox->AddNode(block1, 1+j,
new TGeoCombiTrans(dx, dy, fdz_mirr1,
new TGeoRotation (0)));
700 abox->AddNode(block2, 1+j,
new TGeoCombiTrans(dx, dy, fdz_mirr2,
new TGeoRotation (0)));
703 abox->AddNode(smallEVs, 1+j,
new TGeoCombiTrans(dx,dy + sob_len/2.*tan(sob_angle*pi/180./2.),-bbox_hlen-sob_len/2.,
new TGeoRotation(0)));
704 abox->AddNode(bar, 1+j,
new TGeoCombiTrans(dx, dy, dz_bar,
new TGeoRotation(0)));
705 if(fFocusingSystem != 2){
706 abox->AddNode(mirr, 1+j,
new TGeoCombiTrans(dx, dy, dz_mirr,
new TGeoRotation(0)));
715 TGeoPgon* logicEV1, * logicEV2, *logicEV3, * logicEV4;
716 cosFactor1 =
cos(pipehAngle/180.*pi)/
cos(dphi/180.*pi/2.);
718 TGeoPgon *logicPD1 =
new TGeoPgon(
"logicPD1", 93.6, 172.8, bbnum/2, 2);
719 TGeoPgon *logicPD2 =
new TGeoPgon(
"logicPD2", -86.4, 172.8, bbnum/2, 2);
720 TGeoPgon *logicPD3 =
new TGeoPgon(
"logicPD3", 86.4, 7.2, 1, 2);
721 TGeoPgon *logicPD4 =
new TGeoPgon(
"logicPD4", -93.6, 7.2, 1, 2);
723 if(fprizm == kFALSE){
724 if(sob_angleB == 90.){
725 cout<<
"sob_angleB == 90"<<endl;
726 logicPD1->DefineSection(0, 0., radius-hthick-EVdrop, sob_Rout+EVoffset);
727 logicPD1->DefineSection(1, PDthick, radius-hthick-EVdrop, sob_Rout+EVoffset);
728 logicPD2->DefineSection(0, 0., radius-hthick-EVdrop, sob_Rout+EVoffset);
729 logicPD2->DefineSection(1, PDthick, radius-hthick-EVdrop, sob_Rout+EVoffset);
730 logicPD3->DefineSection(0, 0., (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
731 logicPD3->DefineSection(1, PDthick, (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
732 logicPD4->DefineSection(0, 0., (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
733 logicPD4->DefineSection(1, PDthick, (radius-hthick-EVdrop)*cosFactor1, (sob_Rout+EVoffset)*cosFactor1);
736 if(sob_angleB != 90.){
737 logicPD1->DefineSection(0, 0., radius-hthick+eps, radius-hthick+eps+0.1);
738 logicPD1->DefineSection(1, xEV, sob_Rout - xEV*tan(sob_angle/180.*pi), sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1);
739 logicPD2->DefineSection(0, 0., radius-hthick+eps, radius-hthick+eps+0.1);
740 logicPD2->DefineSection(1, xEV, sob_Rout - xEV*tan(sob_angle/180.*pi), sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1);
741 logicPD3->DefineSection(0, 0., (radius-hthick+eps)*cosFactor1, (radius-hthick+eps+0.1)*cosFactor1);
742 logicPD3->DefineSection(1, xEV, (sob_Rout - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
743 logicPD4->DefineSection(0, 0., (radius-hthick+eps)*cosFactor1, (radius-hthick+eps+0.1)*cosFactor1);
744 logicPD4->DefineSection(1, xEV, (sob_Rout - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rout- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
750 if(sob_angleB == 90.){
751 logicPD1->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
752 logicPD1->DefineSection(1, PDthick, radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
753 logicPD2->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
754 logicPD2->DefineSection(1, PDthick, radius-hthick-pdrop-EVdrop+eps, sob_Rprizm);
755 logicPD3->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
756 logicPD3->DefineSection(1, PDthick, (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
757 logicPD4->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
758 logicPD4->DefineSection(1, PDthick, (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, sob_Rprizm*cosFactor1);
761 if(sob_angleB != 90.){
762 logicPD1->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, radius-hthick-pdrop-EVdrop+eps+0.1);
763 logicPD1->DefineSection(1, xEV, sob_Rprizm - xEV*tan(sob_angle/180.*pi), sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1);
764 logicPD2->DefineSection(0, 0., radius-hthick-pdrop-EVdrop+eps, radius-hthick-pdrop-EVdrop+eps+0.1);
765 logicPD2->DefineSection(1, xEV, sob_Rprizm - xEV*tan(sob_angle/180.*pi), sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1);
766 logicPD3->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, (radius-hthick-pdrop-EVdrop+eps+0.1)*cosFactor1);
767 logicPD3->DefineSection(1, xEV, (sob_Rprizm - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
768 logicPD4->DefineSection(0, 0., (radius-hthick-pdrop-EVdrop+eps)*cosFactor1, (radius-hthick-pdrop-EVdrop+eps+0.1)*cosFactor1);
769 logicPD4->DefineSection(1, xEV, (sob_Rprizm - xEV*tan(sob_angle/180.*pi))*cosFactor1, (sob_Rprizm- xEV*tan(sob_angle/180.*pi)+0.1)*cosFactor1);
773 TGeoCompositeShape *logicPD =
new TGeoCompositeShape(
"logicPD",
"logicPD1 + logicPD2 + logicPD3 + logicPD4");
774 TGeoVolume *pd =
new TGeoVolume(
"DrcPDSensor", logicPD, FusedSil_m);
775 pd->SetLineColor(kGreen);
778 TGeoBBox* logicMcp =
new TGeoBBox(
"logicMcp", 5.3/2., 5.3/2., PDthick/2.);
779 TGeoBBox* logicMcpGlue =
new TGeoBBox(
"logicMcpGlue", 5.3/2., 5.3/2., GlueLayer/2.);
780 TGeoTranslation* trmcp[9];
781 TGeoTranslation* trmcpg[9];
782 for(Int_t itr=0; itr<3; itr++){
783 Double_t dy_row = MCPside/2. - (hthick+EVdrop) + itr*(MCPside + PDgap1);
784 for(Int_t jtr=0; jtr<3; jtr++){
785 Double_t dx_row = (EVwidth/2.) - MCPside/2. - jtr*(MCPside + PDgap2);
786 TString trname = Form(
"trmcp%d", itr*3+jtr);
787 TString trgname = Form(
"trmcpg%d", itr*3+jtr);
788 trmcp[itr*3 + jtr] =
new TGeoTranslation(trname, dx_row, dy_row, dz_bbox-bbox_hlen-sob_len-GlueLayer-PDthick/2.);
789 trmcp[itr*3 + jtr]->RegisterYourself();
790 trmcpg[itr*3 + jtr] =
new TGeoTranslation(trgname, dx_row, dy_row, dz_bbox-bbox_hlen-sob_len-GlueLayer/2.);
791 trmcpg[itr*3 + jtr]->RegisterYourself();
792 cout<<
"translation "<<trmcp[itr*3 + jtr]->GetName()<<endl;
795 TGeoCompositeShape *logicMcpMap =
new TGeoCompositeShape(
"logicMcpMap",
"logicMcp:trmcp0 + logicMcp:trmcp1 + logicMcp:trmcp2 + logicMcp:trmcp3 + logicMcp:trmcp4 + logicMcp:trmcp5 + logicMcp:trmcp6 + logicMcp:trmcp7 + logicMcp:trmcp8") ;
796 TGeoVolume* Mcp =
new TGeoVolume(
"DrcPDSensor", logicMcpMap, FusedSil_m);
797 Mcp->SetLineColor(kGreen+3);
799 TGeoCompositeShape *logicMcpGlueMap =
new TGeoCompositeShape(
"logicMcpGlueMap",
"logicMcpGlue:trmcpg0 + logicMcpGlue:trmcpg1 + logicMcpGlue:trmcpg2 + logicMcpGlue:trmcpg3 + logicMcpGlue:trmcpg4 + logicMcpGlue:trmcpg5 + logicMcpGlue:trmcpg6 + logicMcpGlue:trmcpg7 + logicMcpGlue:trmcpg8");
800 TGeoVolume* McpGlue =
new TGeoVolume(
"DrcMcpGlue", logicMcpGlueMap, OpticalGrease_m);
801 McpGlue->SetLineColor(4);
802 McpGlue->SetTransparency(40);
804 if(sob_angleB == 90.){
805 for(Int_t
m = 0;
m < bbnum;
m ++){
806 phi_curr = (90. - phi0 - dphi*
m)/180.*pi;
807 if(
m > bbnum/2-1){ phi_curr = (90. - phi0 - dphi*
m - 2.*pipehAngle)/180.*pi; }
808 dx_bbox = radius *
cos(phi_curr);
809 dy_bbox = radius *
sin(phi_curr);
811 TGeoRotation rot_bbox;
812 rot_bbox.RotateZ( -phi0 -
m*dphi - (TMath::Floor(2.*
m/bbnum))*(2.*pipehAngle));
814 rot_EV.RotateZ(-90.-phi0 -
m*dphi - (TMath::Floor(2.*
m/bbnum))*(2.*pipehAngle));
816 vLocalMother->AddNode(Mcp,
m,
new TGeoCombiTrans(dx_bbox, dy_bbox, 0.,
new TGeoRotation(rot_bbox)));
826 if(sob_angleB != 90.){
835 cave->CheckOverlaps(0.1,
"");
839 TObjArray *listOfOverlaps =
gGeoManager->GetListOfOverlaps();
840 cout<<listOfOverlaps->GetEntries()<<endl;
841 listOfOverlaps->Print();
static T ASin(const T &x)
friend F32vec4 cos(const F32vec4 &a)
friend F32vec4 sin(const F32vec4 &a)
TGeoManager * gGeoManager
double eps(TVector3 v1, TVector3 v2)
friend F32vec4 fabs(const F32vec4 &a)