14 const Int_t kNofDisks = 3;
16 const Double_t kDiskVolInnerRadius[kNofDisks] = { 4.50, 4.50, 4.50 };
17 const Double_t kDiskVolOuterRadius[kNofDisks] = { 45.00, 56.00, 74.0 };
18 const Double_t kDiskZPosition [kNofDisks] = { 119.40, 155.40, 188.50 };
21 const Int_t kDiskNFoils [kNofDisks] = { 2 , 2 , 4 };
22 const Double_t kMiddleROBarHfTh[kNofDisks] = { 2.35, 2.35, 2.35 };
23 const Double_t kHalfStationThickness = 6.00;
25 const Double_t carbonRingInnerRadius[kNofDisks] = { 40.0, 51.0, 69.0 };
26 const Double_t carbonRingOuterRadius[kNofDisks] = { 40.2, 51.2, 69.2 };
27 const Double_t carbonRingHalfThickness = 1.5;
29 const Double_t copperRingInnerRadius[kNofDisks] = { 39.9, 50.9, 68.9 };
30 const Double_t copperRingOuterRadius[kNofDisks] = { 40.1, 51.1, 69.1 };
31 const Double_t copperRingHalfThickness = 3.75;
33 const Double_t AlRingInnerRadius[kNofDisks] = { 40.1, 51.1, 69.1 };
34 const Double_t AlRingOuterRadius[kNofDisks] = { 44.7, 55.7, 73.7 };
35 const Double_t AlRingHalfThickness = 3.75;
37 const Double_t SegmentHalfThickness = 0.25;
38 const Int_t NofSegments = 24;
40 const Double_t FirstSegmentAngle = 7.5;
41 const TString newsegment [NofSegments] = {
"seg1" ,
"seg2" ,
"seg3" ,
"seg4" ,
"seg5" ,
"seg6" ,
"seg7" ,
"seg8" ,
42 "seg9" ,
"seg10",
"seg11",
"seg12",
"seg13",
"seg14",
"seg15",
"seg16",
43 "seg17",
"seg18",
"seg19",
"seg20",
"seg21",
"seg22",
"seg23",
"seg24" };
45 const Double_t moduleRingInnerRadius[kNofDisks] = { 40.15, 51.15, 69.15 };
46 const Double_t moduleRingOuterRadius[kNofDisks] = { 44.65, 55.65, 73.65 };
47 const Double_t moduleRingHalfThickness = 3.75;
49 const Double_t moduleSegmentHalfThickness = 1.30;
50 const Int_t NofmoduleSegments = 24;
52 const Double_t FirstmoduleSegmentAngle = 0.0 ;
53 const TString newmodulesegment [NofmoduleSegments] = {
"moduleseg1" ,
"moduleseg2" ,
"moduleseg3" ,
"moduleseg4" ,
"moduleseg5" ,
"moduleseg6" ,
"moduleseg7" ,
"moduleseg8" ,
54 "moduleseg9" ,
"moduleseg10",
"moduleseg11",
"moduleseg12",
"moduleseg13",
"moduleseg14",
"moduleseg15",
"moduleseg16",
55 "moduleseg17",
"moduleseg18",
"moduleseg19",
"moduleseg20",
"moduleseg21",
"moduleseg22",
"moduleseg23",
"moduleseg24" };
57 const Double_t AlumiRingInnerRadius[kNofDisks] = { 44.7, 55.7, 73.7 };
58 const Double_t AlumiRingOuterRadius[kNofDisks] = { 45.0, 56.0, 74.0 };
59 const Double_t AlumiRingHalfThickness = 3.75;
61 const Double_t coverRingInnerRadius[kNofDisks] = { 39.9, 50.9, 68.9 };
62 const Double_t coverRingOuterRadius[kNofDisks] = { 45.0, 56.0, 74.0 };
63 const Double_t coverRingHalfThickness = 0.2;
67 const Double_t rcopperbarHalfThickness = 17.0;
71 const Double_t lcopperbarHalfThickness = 16.0;
74 const Int_t kNofLayers = 47;
75 const TString kLayerName [kNofLayers] = {
"window_foil_out_aluminium",
"WindowF_kapton",
77 "WindowF_aluminium",
"CathodeF_kapton",
"CathodeF_aluminium",
79 "Gem1_Sensor_GEMmixture",
81 "Gem1F_copper",
"Gem1_kapton",
"Gem1B_copper",
83 "Gem2F_copper",
"Gem2_kapton",
"Gem2B_copper",
85 "Gem3F_copper",
"Gem3_kapton",
"Gem3B_copper",
88 "PadF_copper",
"Pad_kapton",
"PadB_copper",
91 "Gem4F_copper",
"Gem4_kapton",
"Gem4B_copper",
93 "Gem5F_copper",
"Gem5_kapton",
"Gem5B_copper",
95 "Gem6F_copper",
"Gem6_kapton",
"Gem6B_copper",
97 "Gem6_Sensor_GEMmixture",
99 "CathodeB_aluminium",
"CathodeB_kapton",
"WindowB_aluminium",
101 "WindowB_kapton",
"window_foil_in_aluminium" };
102 const Double_t kLayerThick[kNofLayers] = { 0.0001, 0.0007,
104 0.0001, 0.0007, 0.0001,
108 0.0005, 0.0050, 0.0005,
110 0.0005, 0.0050, 0.0005,
112 0.0005, 0.0050, 0.0005,
118 0.0005, 0.0050, 0.0005,
120 0.0005, 0.0050, 0.0005,
122 0.0005, 0.0050, 0.0005,
126 0.0001, 0.0007, 0.0001,
129 const Double_t kDiskOuterRadius[kNofLayers][kNofDisks] = { 38.95, 49.95, 67.95, 39.40, 50.40, 68.40,
131 38.45, 49.45, 67.45, 39.40, 50.40, 68.40, 38.45, 49.45, 67.45,
135 38.10, 49.45, 67.45, 39.05, 50.40, 68.40, 38.10, 49.45, 67.45,
137 38.10, 49.45, 67.45, 39.05, 50.40, 68.40, 38.10, 49.45, 67.45,
139 38.10, 49.45, 67.45, 39.05, 50.40, 68.40, 38.10, 49.45, 67.45,
142 44.90, 55.90, 73.90, 44.90, 55.90, 73.90, 44.90, 55.90, 73.90,
145 38.10, 49.45, 67.45, 39.05, 50.40, 68.40, 38.10, 49.45, 67.45,
147 38.10, 49.45, 67.45, 39.05, 50.40, 68.40, 38.10, 49.45, 67.45,
149 38.10, 49.45, 67.45, 39.05, 50.40, 68.40, 38.10, 49.45, 67.45,
153 38.45, 49.45, 67.45, 39.40, 50.40, 68.40, 38.45, 49.45, 67.45,
155 39.40, 50.40, 68.40, 38.95, 49.45, 67.95 };
156 const Double_t kDiskInnerRadius[kNofLayers][kNofDisks] = { 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
158 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
162 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
164 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
166 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
169 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
172 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
174 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
176 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
180 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50,
182 4.50, 4.50, 4.50, 4.50, 4.50, 4.50 };
189 const Int_t NofHLayers = 14;
190 const TString HLayersName [NofHLayers] = {
"windowF_ring_carbon",
191 "cathodeF_ring_GlassFiber",
192 "gem_ring1_GlassFiber",
193 "gem_ring2_GlassFiber",
194 "gem_ring3_GlassFiber",
195 "gem_ring4_GlassFiber",
196 "padplaneF_support_GlassFiber",
197 "padplaneB_support_GlassFiber",
198 "gem_ring5_GlassFiber",
199 "gem_ring6_GlassFiber",
200 "gem_ring7_GlassFiber",
201 "gem_ring8_GlassFiber",
202 "cathodeB_ring_GlassFiber",
203 "windowB_ring_carbon" };
204 const Double_t HLayersThick[NofHLayers] = { 1.00,
218 const Double_t HZPosition[NofHLayers][kNofDisks] = { -1.9426, -1.9426, -1.9426,
219 -1.5417, -1.5417, -1.5417,
220 -0.1372, -0.1372, -0.1372,
221 -0.1262, -0.1262, -0.1262,
222 -0.1152, -0.1152, -0.1152,
223 -0.1042, -0.1042, -0.1042,
224 -0.0517, -0.0517, -0.0517,
225 0.0517, 0.0517, 0.0517,
226 0.1042, 0.1042, 0.1042,
227 0.1152, 0.1152, 0.1152,
228 0.1262, 0.1262, 0.1262,
229 0.1372, 0.1372, 0.1372,
230 1.5417, 1.5417, 1.5417,
231 1.9426, 1.9426, 1.9426 };
232 const Double_t HOuterRadius[NofHLayers][kNofDisks] = { 39.90, 50.90, 68.90,
245 39.90, 50.90, 68.90 };
246 const Double_t HInnerRadius[NofHLayers][kNofDisks] = { 39.65, 50.65, 68.65,
259 39.65, 50.65, 68.65 };
267 const Double_t HTY[NofHLayers][kNofDisks] = { 25.0, 45.0, 65.0,
282 const Int_t kSensorStripType [2] = { 3 , 2 };
284 const Double_t kSensorStripAngle[2][2] = { 0. , 0. , 0. , 0. };
285 const Double_t kSensorStripPitch[2][2] = { 0.04, 0.04, 0.04, 0.04};
289 for ( Int_t ilayer = 0 ; ilayer < kNofLayers ; ilayer++ ) {
290 cout << kLayerName[ilayer].Data() <<
" -> " << kLayerThick[ilayer] << endl;
291 firstLayerOffset += kLayerThick[ilayer];
294 cout <<
"total thickness is " << firstLayerOffset << endl;
295 firstLayerOffset = firstLayerOffset/2.;
296 firstLayerOffset = -0.001*(TMath::Floor(1000.*firstLayerOffset));
297 cout <<
"first layer offset is " << firstLayerOffset << endl;
300 TString vmcWorkdir = getenv(
"VMCWORKDIR");
302 TString outfile=
"../../geometry/gem_3Stations_realistic_v1.root";
305 TFile*
fi =
new TFile(outfile,
"RECREATE");
307 cout <<
"created output file" << endl;
308 FairGeoLoader*
geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
309 FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
310 cout <<
"geoface setmediafile" << endl;
311 geoFace->setMediaFile(
"../../geometry/media_pnd.geo");
312 cout <<
"geoface readmedia" << endl;
313 geoFace->readMedia();
314 cout <<
"geoface print" << endl;
316 cout <<
"geoface done" << endl;
318 FairGeoMedia *
Media = geoFace->getMedia();
319 FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
325 FairGeoMedium *CbmMediumCopper = Media->getMedium(
"copper");
326 FairGeoMedium *CbmMediumKapton = Media->getMedium(
"kapton");
327 FairGeoMedium *CbmMediumArCO2 = Media->getMedium(
"GEMmixture");
328 FairGeoMedium *CbmMediumUranium = Media->getMedium(
"uranium");
329 FairGeoMedium *CbmMediumGlassFiber= Media->getMedium(
"GlassFiber");
331 Int_t
nmed=geobuild->createMedium(CbmMediumAir);
332 nmed=geobuild->createMedium(CbmMediumPWO);
333 nmed=geobuild->createMedium(CbmMediumCarbon);
334 nmed=geobuild->createMedium(CbmMediumAluminium);
335 nmed=geobuild->createMedium(CbmMediumCopper);
336 nmed=geobuild->createMedium(CbmMediumKapton);
337 nmed=geobuild->createMedium(CbmMediumArCO2);
338 nmed=geobuild->createMedium(CbmMediumUranium);
339 nmed=geobuild->createMedium(CbmMediumGlassFiber);
342 TGeoManager*
gGeoMan = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
344 TGeoVolume *
top =
new TGeoVolumeAssembly(
"Gem");
346 gGeoMan->SetTopVolume(top);
348 cout <<
"-------------------------------------------------------------------" << endl;
349 TList* mediaList = (TList*)gGeoMan->GetListOfMedia();
351 cout <<
"media known: " << mediaList->GetEntries() <<
"." << endl;
352 for ( Int_t itemp = 0 ; itemp < mediaList->GetEntries() ; itemp++ ) {
353 TGeoMedium*
medium = (TGeoMedium*)mediaList->At(itemp);
354 cout <<
"medium " << itemp <<
" name is " << medium->GetName() << endl;
356 cout <<
"-------------------------------------------------------------------" << endl;
358 TGeoRotation*
dummyrot =
new TGeoRotation();
360 TGeoVolumeAssembly*
SubunitVol =
new TGeoVolumeAssembly(
"Gem_Disks");
363 TGeoShape *DiskShape[kNofDisks];
364 TGeoVolume *DiskVol [kNofDisks];
365 TGeoTranslation *DiskTrans[kNofDisks];
366 TGeoCombiTrans *DiskCombi[kNofDisks];
368 TGeoShape *carbonRingShape[kNofDisks];
369 TGeoVolume *carbonRingVol [kNofDisks];
370 TGeoTranslation *carbonRingTrans[kNofDisks];
371 TGeoCombiTrans *carbonRingCombi[kNofDisks];
373 TGeoShape *copperRingShape[kNofDisks];
374 TGeoVolume *copperRingVol [kNofDisks];
375 TGeoTranslation *copperRingTrans[kNofDisks];
376 TGeoCombiTrans *copperRingCombi[kNofDisks];
378 TGeoShape *coverRingShape[kNofDisks];
379 TGeoVolume *coverRingVol [kNofDisks];
380 TGeoTranslation *coverRingTrans[kNofDisks];
381 TGeoCombiTrans *coverRingCombi[kNofDisks];
383 TGeoShape *tAcopperbarShape;
384 TGeoVolume *tAcopperbarVol ;
385 TGeoTranslation *tAcopperbarTrans;
386 TGeoRotation *tAcopperbarRot;
387 TGeoCombiTrans *tAcopperbarCombi;
389 TGeoShape *tBcopperbarShape;
390 TGeoVolume *tBcopperbarVol ;
391 TGeoTranslation *tBcopperbarTrans;
392 TGeoRotation *tBcopperbarRot;
393 TGeoCombiTrans *tBcopperbarCombi;
395 TGeoShape *dAcopperbarShape;
396 TGeoVolume *dAcopperbarVol ;
397 TGeoTranslation *dAcopperbarTrans;
398 TGeoRotation *dAcopperbarRot;
399 TGeoCombiTrans *dAcopperbarCombi;
401 TGeoShape *dBcopperbarShape;
402 TGeoVolume *dBcopperbarVol ;
403 TGeoTranslation *dBcopperbarTrans;
404 TGeoRotation *dBcopperbarRot;
405 TGeoCombiTrans *dBcopperbarCombi;
407 TGeoShape *AlRingShape[kNofDisks][NofSegments];
408 TGeoVolume *AlRingVol [kNofDisks][NofSegments];
409 TGeoTranslation *AlRingTrans[kNofDisks][NofSegments];
410 TGeoCombiTrans *AlRingCombi[kNofDisks][NofSegments];
412 TGeoShape *moduleRingShape[kNofDisks][NofmoduleSegments];
413 TGeoVolume *moduleRingVol [kNofDisks][NofmoduleSegments];
414 TGeoTranslation *moduleRingTrans[kNofDisks][NofmoduleSegments];
415 TGeoCombiTrans *moduleRingCombi[kNofDisks][NofmoduleSegments];
417 TGeoShape *AlumiRingShape[kNofDisks];
418 TGeoVolume *AlumiRingVol [kNofDisks];
419 TGeoTranslation *AlumiRingTrans[kNofDisks];
420 TGeoCombiTrans *AlumiRingCombi[kNofDisks];
422 TGeoShape *DiskLayersShapeA [kNofLayers][kNofDisks][4];
423 TGeoShape *DiskLayersShapeB [kNofLayers][kNofDisks][4];
424 TGeoSubtraction *DiskLayersSubtr [kNofLayers][kNofDisks][4];
425 TGeoShape *DiskLayersShapeC [kNofLayers][kNofDisks][4];
426 TGeoShape *DiskLayersShapeHole [kNofLayers][kNofDisks][4];
427 TGeoCompositeShape *DiskLayersShapecompos[kNofLayers][kNofDisks][4];
428 TGeoVolume *DiskLayersVol [kNofLayers][kNofDisks][4];
429 TGeoTranslation *DiskLayersTranshA [kNofLayers][kNofDisks][4];
430 TGeoTranslation *DiskLayersTranshB [kNofLayers][kNofDisks][4];
431 TGeoTranslation *DiskLayersTrans [kNofLayers][kNofDisks][4];
432 TGeoCombiTrans *DiskLayersCombi [kNofLayers][kNofDisks][4];
434 TGeoShape *HLayersShapeTube [NofHLayers][kNofDisks];
435 TGeoShape *HLayersShapeBox [NofHLayers][kNofDisks];
436 TGeoShape *HLayersShapePlate [NofHLayers][kNofDisks];
437 TGeoShape *HLayersShapeHT [NofHLayers][kNofDisks];
438 TGeoShape *HLayersShapeHTM [NofHLayers][kNofDisks];
439 TGeoShape *HLayersShapeHTD [NofHLayers][kNofDisks];
440 TGeoCompositeShape *HLayersShapecompos[NofHLayers][kNofDisks];
441 TGeoVolume *HLayersVolcomp [NofHLayers][kNofDisks];
442 TGeoTranslation *HLayersTranstA [NofHLayers][kNofDisks];
443 TGeoTranslation *HLayersTranstB [NofHLayers][kNofDisks];
444 TGeoTranslation *HLayersTranstC [NofHLayers][kNofDisks];
445 TGeoTranslation *HLayersTranstD [NofHLayers][kNofDisks];
446 TGeoTranslation *HLayersTranstE [NofHLayers][kNofDisks];
447 TGeoTranslation *HLayersTranstF [NofHLayers][kNofDisks];
448 TGeoRotation *HLayersRotrA [NofHLayers][kNofDisks];
449 TGeoShape *HLayersShape [NofHLayers][kNofDisks];
450 TGeoVolume *HLayersVol [NofHLayers][kNofDisks];
451 TGeoTranslation *HLayersTrans [NofHLayers][kNofDisks];
452 TGeoCombiTrans *HLayersCombi [NofHLayers][kNofDisks];
454 TGeoShape *RiddleShapeTubeA ;
455 TGeoShape *RiddleShapeTubeB ;
456 TGeoShape *RiddleShapeCone ;
457 TGeoShape *RiddleShapeTubeC ;
458 TGeoShape *RiddleShapeTubeD ;
459 TGeoShape *RiddleShapeTubeE ;
460 TGeoShape *RiddleShapeTubeF ;
461 TGeoSubtraction *RiddleSubtr ;
462 TGeoCompositeShape *RiddleShapecompos;
463 TGeoVolume *RiddleVolcomp ;
464 TGeoTranslation *RiddleTrans ;
465 TGeoTranslation *RiddleTransTubeA ;
466 TGeoTranslation *RiddleTransCone ;
467 TGeoTranslation *RiddleTransTubeC ;
468 TGeoTranslation *RiddleTransTubeD ;
469 TGeoTranslation *RiddleTransTubeE ;
470 TGeoCombiTrans *RiddleCombi ;
471 TGeoTranslation *RiddleTransTubeF[4][100] ;
472 TGeoCombiTrans *RiddleCombiTranshole[4][100] ;
473 TGeoRotation *RiddleRothole[4][100] ;
475 TString outParFileName = Form(
"%s/macro/params/gem_3Stations_realistic_v1.digi.par",vmcWorkdir.Data());
478 cout <<
"parameter file = \"" << outParFileName.Data() <<
"\"" << endl;
480 ofstream pout(outParFileName.Data());
481 pout.setf(ios::fixed);
483 pout <<
"#################################################################" << endl;
484 pout <<
"# Digitization parameters for GEM " << endl;
485 pout <<
"# with 3 Stations " << endl;
486 pout <<
"# Format: " << endl;
487 pout <<
"# Description of parameters: " << endl;
488 pout <<
"# [PndGemDetectors] " << endl;
489 pout <<
"# parameters:d station_number, ZPos, rotation_angle, number_of_sensors, \\" << endl;
490 pout <<
"# sensor_number, sensor_type, pos_x, pos_y, pos_z, rotAngle, inn_rad, out_rad, thick, str_ang_0, str_ang_1, barWidth, pitch_0, pitch_1, \\" << endl;
491 pout <<
"# sensor_number, ...." << endl;
492 pout <<
"# station_number, ..." << endl;
493 pout <<
"#################################################################" << endl;
494 pout <<
"[PndGemDetectors]" << setprecision(4) << endl;
496 pout <<
"parameters:Double_t \\" << endl;
498 for ( Int_t istat = 0 ; istat < kNofDisks ; istat++ ) {
500 pout <<
" " << istat+1 <<
", "
501 << setw(9) << kDiskZPosition[istat]
502 <<
", 0.0, " << 2 <<
", \\" << endl;
504 DiskShape[istat] =
new TGeoTube (Form(
"disk%dshape",istat+1),kDiskVolInnerRadius[istat],kDiskVolOuterRadius[istat],kHalfStationThickness);
505 DiskVol [istat] =
new TGeoVolume(Form(
"Gem_Disk%d_Volume",istat+1),DiskShape[istat],gGeoMan->GetMedium(
"GEMmixture"));
506 DiskTrans[istat] =
new TGeoTranslation(0.,0.,kDiskZPosition[istat]);
507 cout <<
"station " << kDiskVolInnerRadius[istat] <<
" " << kDiskVolOuterRadius[istat] <<
" at " << kDiskZPosition[istat] << endl;
508 DiskCombi[istat] =
new TGeoCombiTrans(*DiskTrans[istat],*dummyrot);
509 DiskCombi[istat]->SetName(Form(
"Gem_Disk%d_Volume",istat+1));
510 DiskCombi[istat]->RegisterYourself();
511 DiskVol[istat]->SetLineColor(kYellow);
514 carbonRingShape[istat] =
new TGeoTube (Form(
"carbonRing%dshape",istat+1),carbonRingInnerRadius[istat],carbonRingOuterRadius[istat],carbonRingHalfThickness);
515 carbonRingVol [istat] =
new TGeoVolume(Form(
"Gem_carbonRing%d_Volume",istat+1),carbonRingShape[istat],gGeoMan->GetMedium(
"carbon"));
516 carbonRingTrans[istat] =
new TGeoTranslation(0.,0.,-1.5);
517 cout <<
"carbonRing " << carbonRingInnerRadius[istat] <<
" " << carbonRingOuterRadius[istat] << endl;
518 carbonRingCombi[istat] =
new TGeoCombiTrans(*carbonRingTrans[istat],*dummyrot);
519 carbonRingCombi[istat]->SetName(Form(
"Gem_carbonRing%d_Volume",istat+1));
520 carbonRingCombi[istat]->RegisterYourself();
521 carbonRingVol[istat]->SetLineColor(kMagenta);
523 DiskVol[istat]->AddNode(carbonRingVol [istat],0,carbonRingCombi[istat]);
526 copperRingShape[istat] =
new TGeoTube (Form(
"copperRing%dshape",istat+1),copperRingInnerRadius[istat],copperRingOuterRadius[istat],copperRingHalfThickness);
527 copperRingVol [istat] =
new TGeoVolume(Form(
"Gem_copperRing%d_Volume",istat+1),copperRingShape[istat],gGeoMan->GetMedium(
"copper"));
528 copperRingTrans[istat] =
new TGeoTranslation(0.,0.,3.75);
529 cout <<
"copperRing " << copperRingInnerRadius[istat] <<
" " << copperRingOuterRadius[istat] << endl;
530 copperRingCombi[istat] =
new TGeoCombiTrans(*copperRingTrans[istat],*dummyrot);
531 copperRingCombi[istat]->SetName(Form(
"Gem_copperRing%d_Volume",istat+1));
532 copperRingCombi[istat]->RegisterYourself();
533 copperRingVol[istat]->SetLineColor(kYellow-5);
535 DiskVol[istat]->AddNode(copperRingVol [istat],0,copperRingCombi[istat]);
538 Double_t segmentAngularSize = SegmentHalfThickness/AlRingInnerRadius[istat]*360.;
539 for ( Int_t isegm = 0 ; isegm < NofSegments ; isegm++ ) {
540 cout <<
" Segment " << isegm <<
" with name " << newsegment[isegm] <<
" will be put at " << FirstSegmentAngle+isegm*SegmentDeltaAngle <<
" (in fact from " << FirstSegmentAngle+isegm*SegmentDeltaAngle-segmentAngularSize/2. <<
" to " << FirstSegmentAngle+isegm*SegmentDeltaAngle+segmentAngularSize/2. <<
")" << endl;
541 AlRingShape[istat][isegm] =
new TGeoTubeSeg (Form(
"AlRing%dshape",istat+1,isegm+1),AlRingInnerRadius[istat],AlRingOuterRadius[istat],AlRingHalfThickness,FirstSegmentAngle+isegm*SegmentDeltaAngle-segmentAngularSize/2.,FirstSegmentAngle+isegm*SegmentDeltaAngle+segmentAngularSize/2. );
542 AlRingVol[istat][isegm] =
new TGeoVolume (Form(
"Gem_AlRing%d_Volume",istat+1,isegm+1),AlRingShape[istat][isegm],gGeoMan->GetMedium(
"aluminium"));
543 AlRingTrans[istat][isegm] =
new TGeoTranslation (0.,0.,3.75);
544 cout <<
"AlRing " << AlRingInnerRadius[istat] <<
" " << AlRingOuterRadius[istat] << endl;
545 AlRingCombi[istat][isegm] =
new TGeoCombiTrans (*AlRingTrans[istat][isegm],*dummyrot);
546 AlRingCombi[istat][isegm]->SetName(Form(
"Gem_AlRing%d_Volume",istat+1,isegm+1));
547 AlRingCombi[istat][isegm]->RegisterYourself();
548 AlRingVol[istat][isegm]->SetLineColor(kCyan-9);
550 DiskVol[istat]->AddNode(AlRingVol[istat][isegm],0,AlRingCombi[istat][isegm]);
555 Double_t modulesegmentAngularSize = moduleSegmentHalfThickness/moduleRingInnerRadius[istat]*360.;
556 for ( Int_t imodulesegm = 0 ; imodulesegm < NofmoduleSegments ; imodulesegm++ ) {
557 cout <<
" moduleSegment " << imodulesegm <<
" with name " << newmodulesegment[imodulesegm] <<
" will be put at " << FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle <<
" (in fact from " << FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle-modulesegmentAngularSize/2. <<
" to " << FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle+modulesegmentAngularSize/2. <<
")" << endl;
558 moduleRingShape[istat][imodulesegm] =
new TGeoTubeSeg (Form(
"moduleRing%dshape",istat+1,imodulesegm+1),moduleRingInnerRadius[istat],moduleRingOuterRadius[istat],moduleRingHalfThickness,FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle-modulesegmentAngularSize/2.,FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle+modulesegmentAngularSize/2. );
559 moduleRingVol[istat][imodulesegm] =
new TGeoVolume (Form(
"Gem_moduleRing%d_Volume",istat+1,imodulesegm+1),moduleRingShape[istat][imodulesegm],gGeoMan->GetMedium(
"copper"));
560 moduleRingTrans[istat][imodulesegm] =
new TGeoTranslation (0.,0.,3.65);
561 cout <<
"moduleRing " << moduleRingInnerRadius[istat] <<
" " << moduleRingOuterRadius[istat] << endl;
562 moduleRingCombi[istat][imodulesegm] =
new TGeoCombiTrans (*moduleRingTrans[istat][imodulesegm],*dummyrot);
563 moduleRingCombi[istat][imodulesegm]->SetName(Form(
"Gem_moduleRing%d_Volume",istat+1,imodulesegm+1));
564 moduleRingCombi[istat][imodulesegm]->RegisterYourself();
565 moduleRingVol[istat][imodulesegm]->SetLineColor(kGreen);
567 DiskVol[istat]->AddNode(moduleRingVol[istat][imodulesegm],0,moduleRingCombi[istat][imodulesegm]);
571 AlumiRingShape[istat] =
new TGeoTube (Form(
"AlumiRing%dshape",istat+1),AlumiRingInnerRadius[istat],AlumiRingOuterRadius[istat],AlumiRingHalfThickness);
572 AlumiRingVol [istat] =
new TGeoVolume(Form(
"Gem_AlumiRing%d_Volume",istat+1),AlumiRingShape[istat],gGeoMan->GetMedium(
"aluminium"));
573 AlumiRingTrans[istat] =
new TGeoTranslation(0.,0.,3.75);
574 cout <<
"AlumiRing " << AlumiRingInnerRadius[istat] <<
" " << AlumiRingOuterRadius[istat] << endl;
575 AlumiRingCombi[istat] =
new TGeoCombiTrans(*AlumiRingTrans[istat],*dummyrot);
576 AlumiRingCombi[istat]->SetName(Form(
"Gem_AlumiRing%d_Volume",istat+1));
577 AlumiRingCombi[istat]->RegisterYourself();
578 AlumiRingVol[istat]->SetLineColor(kCyan-9);
580 DiskVol[istat]->AddNode(AlumiRingVol[istat],0,AlumiRingCombi[istat]);
583 coverRingShape[istat] =
new TGeoTube (Form(
"coverRing%dshape",istat+1),coverRingInnerRadius[istat],coverRingOuterRadius[istat],coverRingHalfThickness);
584 coverRingVol [istat] =
new TGeoVolume(Form(
"Gem_coverRing%d_Volume",istat+1),coverRingShape[istat],gGeoMan->GetMedium(
"GlassFiber"));
585 coverRingTrans[istat] =
new TGeoTranslation(0.,0.,7.75);
586 cout <<
"coverRing " << coverRingInnerRadius[istat] <<
" " << coverRingOuterRadius[istat] << endl;
587 coverRingCombi[istat] =
new TGeoCombiTrans(*coverRingTrans[istat],*dummyrot);
588 coverRingCombi[istat]->SetName(Form(
"Gem_coverRing%d_Volume",istat+1));
589 coverRingCombi[istat]->RegisterYourself();
590 coverRingVol[istat]->SetLineColor(kGreen+3);
592 DiskVol[istat]->AddNode(coverRingVol [istat],0,coverRingCombi[istat]);
595 for ( Int_t jlay = 0 ; jlay < NofHLayers ; jlay++ ) {
597 cout <<
"doing Hlayers " << jlay << endl;
599 HLayersShapeTube[jlay][istat] =
new TGeoTube (Form(
"T%dT%s",istat+1,HLayersName[jlay].Data()),HInnerRadius[jlay][istat],HOuterRadius[jlay][istat],HLayersThick[jlay]);
600 HLayersShapeHT[jlay][istat] =
new TGeoTube (Form(
"H%dH%s",istat+1,HLayersName[jlay].Data()),0.0,4.60,HLayersThick[jlay]);
601 HLayersShapeHTM[jlay][istat] =
new TGeoTube (Form(
"HTM%dHTM%s",istat+1,HLayersName[jlay].Data()),0.0,4.40,HLayersThick[jlay]+0.0002);
602 HLayersShapeHTD[jlay][istat] =
new TGeoTube (Form(
"HTD%dHTD%s",istat+1,HLayersName[jlay].Data()),0.0,1.90,HLayersThick[jlay]+0.0001);
603 cout <<
"Tube name is " << HLayersShapeTube[jlay][istat]->GetName() << endl;
605 HLayersShapeBox[jlay][istat] =
new TGeoBBox(Form(
"B%dB%s",istat+1,HLayersName[jlay].Data()),HXBoxWidth[jlay][istat],HOuterRadius[jlay][istat],HLayersThick[jlay]);
606 HLayersShapePlate[jlay][istat] =
new TGeoBBox(Form(
"P%dP%s",istat+1,HLayersName[jlay].Data()),HXPlateWidth[jlay][istat],HYPlateWidth[jlay][istat],HLayersThick[jlay]+0.0001);
608 HLayersTranstA[jlay][istat] =
new TGeoTranslation(
"tA",HTX,HTY[jlay][istat],HTZ);
609 HLayersTranstA[jlay][istat] ->RegisterYourself();
610 HLayersTranstB[jlay][istat] =
new TGeoTranslation(
"tB",HTX,-HTY[jlay][istat],HTZ);
611 HLayersTranstB[jlay][istat] ->RegisterYourself();
612 HLayersTranstC[jlay][istat] =
new TGeoTranslation(
"tC",HTX,HTY[jlay][istat]+9.0,HTZ);
613 HLayersTranstC[jlay][istat] ->RegisterYourself();
614 HLayersTranstD[jlay][istat] =
new TGeoTranslation(
"tD",HTX,HTY[jlay][istat]-9.0,HTZ);
615 HLayersTranstD[jlay][istat] ->RegisterYourself();
616 HLayersTranstE[jlay][istat] =
new TGeoTranslation(
"tE",HTX,-HTY[jlay][istat]+9.0,HTZ);
617 HLayersTranstE[jlay][istat] ->RegisterYourself();
618 HLayersTranstF[jlay][istat] =
new TGeoTranslation(
"tF",HTX,-HTY[jlay][istat]-9.0,HTZ);
619 HLayersTranstF[jlay][istat] ->RegisterYourself();
621 HLayersShapecompos[jlay][istat] =
new TGeoCompositeShape(Form(
"compos%dcompos%s",istat+1,HLayersName[jlay].Data()),
622 Form(
"T%dT%s+B%dB%s+H%dH%s-HTM%dHTM%s-(P%dP%s:tA)-(HTD%dHTD%s:tC)-(HTD%dHTD%s:tD)-(P%dP%s:tB)-(HTD%dHTD%s:tE)-(HTD%dHTD%s:tF)",
623 istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),
624 istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),
625 istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data()));
627 cout <<
"composite name is " << HLayersShapecompos[jlay][istat] -> GetName() << endl;
629 TString HlayersMaterial = HLayersName[jlay].Data();
630 HlayersMaterial.Remove(0,HlayersMaterial.Last(
'_')+1);
631 cout <<
"THE HMATERIAL IS \"" << HlayersMaterial.Data() <<
"\"" << endl;
632 HLayersVolcomp[jlay][istat] =
new TGeoVolume(Form(
"GEMHLayersCOMP%dGEMHLayersCOMP%s",istat+1,HLayersName[jlay].Data()),HLayersShapecompos[jlay][istat],gGeoMan->GetMedium(HlayersMaterial.Data()));
633 cout <<
"COMP name is " << HLayersVolcomp[jlay][istat] -> GetName() << endl;
634 cout <<
"Hlayersmaterial = " << HlayersMaterial.Data() << endl;
636 if ( HlayersMaterial.Contains(
"carbon" ) )
638 if ( HlayersMaterial.Contains(
"GlassFiber" ) )
641 cout <<
"STATION " << istat <<
" LAYER " << jlay <<
" POSITION " << HZPosition[jlay][istat] << endl;
643 HLayersTrans[jlay][istat] =
new TGeoTranslation(0.0,0.0,HZPosition[jlay][istat]);
644 HLayersCombi[jlay][istat] =
new TGeoCombiTrans(*HLayersTrans[jlay][istat],*dummyrot);
645 HLayersCombi[jlay][istat]->SetName(Form(
"GEMHLayersCOMP%dGEMHLayersCOMP%s",istat+1,HLayersName[jlay].Data()));
646 HLayersCombi[jlay][istat]->RegisterYourself();
647 DiskVol[istat]->AddNode( HLayersVolcomp[jlay][istat],0,HLayersCombi[jlay][istat] );
651 Double_t layerPosition = firstLayerOffset;
653 Int_t sensorNumber = 0;
655 for ( Int_t ilay = 0 ; ilay < kNofLayers ; ilay++ ) {
656 cout <<
"doing layer " << ilay << endl;
657 layerPosition += kLayerThick[ilay]/2.;
658 if ( kLayerName[ilay].Contains(
"space") && kLayerThick[ilay] > 0.7 ) {
659 cout <<
"***** THE THICK SPACE LAYER IS AT " << layerPosition << endl;
661 if ( kLayerName[ilay].Contains(
"space") && kLayerName[ilay].Length() == 5 ) {
662 layerPosition += kLayerThick[ilay]/2.;
666 cout <<
" HAHA, got layer " << kLayerName[ilay].Data() << endl;
670 cout <<
"will do loop over segments" << endl;
671 for ( Int_t iseg = 0 ; iseg < 1 ; iseg++ ) {
672 cout <<
"segment " << iseg << endl;
673 DiskLayersShapeA[ilay][istat][iseg] =
new TGeoTube(Form(
"disk%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
674 kDiskInnerRadius[ilay][istat],kDiskOuterRadius[ilay][istat],
675 kLayerThick[ilay]/2.);
676 DiskLayersShapeB[ilay][istat][iseg] =
new TGeoBBox (Form(
"robo%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
677 kMiddleROBarHfTh[istat]/2.,
678 kDiskOuterRadius[ilay][istat],
680 DiskLayersSubtr[ilay][istat][iseg] =
new TGeoSubtraction(DiskLayersShapeA[ilay][istat][iseg],
681 DiskLayersShapeB[ilay][istat][iseg]);
684 DiskLayersShapeC[ilay][istat][iseg] =
new TGeoCompositeShape(Form(
"comp%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
685 DiskLayersSubtr[ilay][istat][iseg]);
686 segBegin += segPhiSpan;
687 cout <<
" segBegin " << segBegin << endl;
689 DiskLayersShapeHole[ilay][istat][iseg] =
new TGeoTube(Form(
"Hole%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),0.0,3.80,kLayerThick[ilay]+0.001);
691 DiskLayersTranshA[ilay][istat][iseg] =
new TGeoTranslation(
"hA",HoleTX,HoleTY,HoleTZ);
692 DiskLayersTranshA[ilay][istat][iseg] ->RegisterYourself();
693 DiskLayersTranshB[ilay][istat][iseg] =
new TGeoTranslation(
"hB",HoleTX,-HoleTY,HoleTZ);
694 DiskLayersTranshB[ilay][istat][iseg] ->RegisterYourself();
696 DiskLayersShapecompos[ilay][istat][iseg] =
new TGeoCompositeShape(Form(
"compos%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
697 Form(
"comp%dseg%d%sshape-(Hole%dseg%d%sshape:hA)-(Hole%dseg%d%sshape:hB)",
698 istat+1,iseg+1,kLayerName[ilay].Data(),istat+1,iseg+1,kLayerName[ilay].Data(),istat+1,iseg+1,kLayerName[ilay].Data()));
701 TString layerMaterial = kLayerName[ilay].Data();
702 layerMaterial.Remove(0,layerMaterial.Last(
'_')+1);
703 cout <<
"THE MATERIAL IS \"" << layerMaterial.Data() <<
"\"" << endl;
704 DiskLayersVol[ilay][istat][iseg] =
new TGeoVolume(Form(
"Gem_Disk%d_Seg%d_%s",istat+1,iseg+1,kLayerName[ilay].Data()),
705 DiskLayersShapecompos[ilay][istat][iseg],
706 gGeoMan->GetMedium(layerMaterial.Data()));
709 cout <<
"layer material = " << layerMaterial.Data() << endl;
710 if ( layerMaterial.Contains(
"air" ) )
711 DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kGray+1);
712 if ( layerMaterial.Contains(
"copper" ) )
713 DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kOrange+1);
714 if ( layerMaterial.Contains(
"kapton" ) )
715 DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kOrange+2);
716 if ( layerMaterial.Contains(
"aluminium" ) )
717 DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kCyan-9);
718 if ( layerMaterial.Contains(
"GEMmixture" ) )
719 DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kYellow);
720 if ( layerMaterial.Contains(
"carbon" ) )
722 if ( layerMaterial.Contains(
"GlassFiber" ) )
723 DiskLayersVol[jlay][istat][iseg]->
SetLineColor(kGreen+3);
725 DiskLayersTrans[ilay][istat][iseg] =
new TGeoTranslation(0.,0.,layerPosition);
726 DiskLayersCombi[ilay][istat][iseg] =
new TGeoCombiTrans(*DiskLayersTrans[ilay][istat][iseg],*dummyrot);
727 DiskLayersCombi[ilay][istat][iseg]->SetName(Form(
"Gem_Disk%d_Seg%d_%s",istat+1,iseg+1,kLayerName[ilay].Data()));
728 DiskLayersCombi[ilay][istat][iseg]->RegisterYourself();
729 DiskVol[istat]->AddNode(DiskLayersVol[ilay][istat][iseg],0,DiskLayersCombi[ilay][istat][iseg]);
733 cout <<
"volume " << kLayerName[ilay] <<
" from "
734 << setprecision(10) << kDiskZPosition[istat]+layerPosition-kLayerThick[ilay]/2. <<
" to "
735 << setprecision(10) << kDiskZPosition[istat]+layerPosition+kLayerThick[ilay]/2. << endl;
737 if ( kLayerName[ilay].Contains(
"Gem") && kLayerName[ilay].Contains(
"Sensor") ) {
738 Double_t newRadius = kDiskInnerRadius[ilay][istat];
741 cout <<
"rad = " << kDiskInnerRadius[ilay][istat] <<
" pitch = " << kSensorStripPitch[sensorNumber][0] <<
" for sensor " << sensorNumber << endl;
742 if ( kSensorStripType[sensorNumber] != 2 ) {
743 nofStrips = TMath::Ceil(2.*
TMath::Pi()*kDiskInnerRadius[ilay][istat]/kSensorStripPitch[sensorNumber][0]);
744 newRadius = nofStrips*kSensorStripPitch[sensorNumber][0]/2./
TMath::Pi();
746 cout <<
"!!!! " << istat <<
" " << ilay <<
" > there shall be " << nofStrips <<
" strips here so the radius should be " << newRadius << endl;
747 pout <<
" " << sensorNumber+1 <<
", " << kSensorStripType[sensorNumber] <<
", "
748 << setw(9) << 0. <<
", "
749 << setw(9) << 0. <<
", "
750 << setw(9) << kDiskZPosition[istat]+layerPosition <<
", "
751 << setw(9) << 0. <<
", "
752 << setw(9) << newRadius <<
", "
753 << setw(9) << kDiskOuterRadius[ilay][istat] <<
", "
754 << setw(9) << kLayerThick[ilay] <<
", "
755 << setw(9) << kSensorStripAngle[sensorNumber][0] <<
", "
757 << setw(9) << kMiddleROBarHfTh[istat] <<
", "
758 << setw(9) << kSensorStripPitch[sensorNumber][0] <<
", "
759 << setw(9) << kSensorStripPitch[sensorNumber][1] << ((istat==kNofDisks-1&&sensorNumber==1)?
"":
", \\")
764 layerPosition += kLayerThick[ilay]/2.;
767 SubunitVol->AddNode(DiskVol[istat],0,DiskCombi[istat]);
771 pout <<
"TrackFinderOnHits_ParThetaA: Double_t 59.4" << endl
772 <<
"TrackFinderOnHits_ParThetaB: Double_t -0.02" << endl
773 <<
"TrackFinderOnHits_ParTheta0: Double_t 56.1372" << endl
774 <<
"TrackFinderOnHits_ParTheta1: Double_t -0.000564362" << endl
775 <<
"TrackFinderOnHits_ParTheta2: Double_t -0.181828" << endl
776 <<
"TrackFinderOnHits_ParTheta3: Double_t 0.284289" << endl
777 <<
"TrackFinderOnHits_ParRadPhi0:Double_t 0.9944432" << endl
778 <<
"TrackFinderOnHits_ParRadPhi2:Double_t -0.000590706" << endl
779 <<
"TrackFinderOnHits_ParMat0: Double_t \\" << endl
781 <<
" -2.32143e-6, 0.00067270, 0.10209" << endl
782 <<
"TrackFinderOnHits_ParMat1: Double_t \\" << endl
784 <<
" -7.49458e-10, -6.6929e-7, 0.000739251" << endl
785 <<
"##########################################################################################" << flush;
788 RiddleShapeTubeA =
new TGeoTube (
"TubeA" , 44.0, 47.0, 0.5 );
789 RiddleShapeTubeB =
new TGeoTube (
"TubeB" , 47.0, 47.1, 10.0 );
790 RiddleShapeCone =
new TGeoCone (
"Cone" , 20.0, 47.0, 47.1, 71.0, 71.1 );
791 RiddleShapeTubeC =
new TGeoTube (
"TubeC" , 71.0, 74.5, 0.5 );
792 RiddleShapeTubeD =
new TGeoTube (
"TubeD" , 74.5, 75.0, 10.1 );
793 RiddleShapeTubeE =
new TGeoTube (
"TubeE" , 71.5, 75.0, 0.5 );
794 RiddleShapeTubeF =
new TGeoTube (
"TubeF" , 0.0, 8.0, 2.0 );
796 RiddleTransTubeA =
new TGeoTranslation(
"trA",0.0,0.0,9.50);
797 RiddleTransTubeA ->RegisterYourself();
798 RiddleTransCone =
new TGeoTranslation(
"trB",0.0,0.0,39.50);
799 RiddleTransCone ->RegisterYourself();
800 RiddleTransTubeC =
new TGeoTranslation(
"trC",0.0,0.0,60.0);
801 RiddleTransTubeC ->RegisterYourself();
802 RiddleTransTubeD =
new TGeoTranslation(
"trD",0.0,0.0,69.50);
803 RiddleTransTubeD ->RegisterYourself();
804 RiddleTransTubeE =
new TGeoTranslation(
"trE",0.0,0.0,79.50);
805 RiddleTransTubeE ->RegisterYourself();
811 const Int_t NofHoles = 16.0;
813 const Int_t NofHolesRows = 4;
815 Double_t holePosR[4] = {46,52,64,75};
816 Double_t holePosD[4] = {90,-60,-60,90};
817 Double_t holePosZ[4] = {10,30,50,70};
819 TString RiddleshapeFormula =
"TubeA+(TubeB:trA)+(Cone:trB)+(TubeC:trC)+(TubeD:trD)+(TubeE:trE)" ;
822 for ( Int_t irow = 0 ; irow < NofHolesRows ; irow++ ) {
823 for ( Int_t ihole= 0 ; ihole < NofHoles ; ihole++ ) {
825 Double_t holePosA = ihole*rotDeltaAngle;
829 RiddleTransTubeF[irow][ihole] =
new TGeoTranslation(Form(
"trF%d_%d",irow+1, ihole+1) , holePosX, holePosY,holePosZ[irow]);
830 RiddleTransTubeF[irow][ihole] ->RegisterYourself();
832 RiddleRothole[irow][ihole] =
new TGeoRotation(Form(
"ro%d_%d" , irow+1, ihole+1) ,holePosA+90, holePosD[irow],20);
833 RiddleRothole[irow][ihole] ->RegisterYourself();
835 RiddleCombiTranshole[irow][ihole] =
new TGeoCombiTrans( *RiddleTransTubeF[irow][ihole] , *RiddleRothole[irow][ihole] );
837 RiddleCombiTranshole[irow][ihole] ->SetName(Form(
"TR%d_%d",irow+1, ihole+1));
838 RiddleCombiTranshole[irow][ihole] ->RegisterYourself();
840 RiddleshapeFormula += Form(
"-(TubeF:TR%d_%d)" , irow+1,ihole+1 );
844 cout<<
" RiddleshapeFormula = \"" <<RiddleshapeFormula.Data()<<
"\""<< endl;
846 RiddleShapecompos =
new TGeoCompositeShape(
"riddle", RiddleshapeFormula );
850 RiddleVolcomp =
new TGeoVolume(
"GEMriddleCOMP", RiddleShapecompos,gGeoMan->GetMedium(
"carbon"));
853 RiddleTrans =
new TGeoTranslation(0.0,0.0,117.0);
854 RiddleCombi =
new TGeoCombiTrans(*RiddleTrans,*dummyrot);
855 RiddleCombi->SetName(
"GEMriddleCOMP");
856 RiddleCombi->RegisterYourself();
857 RiddleVolcomp->SetLineColor(kGray+1);
858 SubunitVol->AddNode(RiddleVolcomp,0,RiddleCombi);
861 tAcopperbarShape =
new TGeoBBox (
"tAcopperbarshape",lcopperbarx,lcopperbary,lcopperbarHalfThickness);
862 tAcopperbarVol =
new TGeoVolume(
"GEM_tAcopperbarVolume",tAcopperbarShape,gGeoMan->GetMedium(
"copper"));
863 tAcopperbarTrans =
new TGeoTranslation(0.,46.1,141.);
864 tAcopperbarRot =
new TGeoRotation(
"tAcopperbarrot",0.0,-25.0,0.0);
865 tAcopperbarRot ->RegisterYourself();
866 tAcopperbarCombi =
new TGeoCombiTrans(*tAcopperbarTrans,*tAcopperbarRot);
867 tAcopperbarCombi->SetName(
"GEM_tAcopperbar_Volume");
868 tAcopperbarCombi->RegisterYourself();
869 tAcopperbarVol->SetLineColor(kOrange+1);
870 SubunitVol->AddNode(tAcopperbarVol,0,tAcopperbarCombi);
872 tBcopperbarShape =
new TGeoBBox (
"tBcopperbarshape",rcopperbarx,rcopperbary,rcopperbarHalfThickness);
873 tBcopperbarVol =
new TGeoVolume(
"GEM_tBcopperbarVolume",tBcopperbarShape,gGeoMan->GetMedium(
"copper"));
874 tBcopperbarTrans =
new TGeoTranslation(0.,62.5,175.);
875 tBcopperbarRot =
new TGeoRotation(
"tBcopperbarrot",0.0,-35.0,0.0);
876 tBcopperbarRot ->RegisterYourself();
877 tBcopperbarCombi =
new TGeoCombiTrans(*tBcopperbarTrans,*tBcopperbarRot);
878 tBcopperbarCombi->SetName(
"GEM_tBcopperbar_Volume");
879 tBcopperbarCombi->RegisterYourself();
880 tBcopperbarVol->SetLineColor(kOrange+1);
881 SubunitVol->AddNode(tBcopperbarVol,0,tBcopperbarCombi);
883 dAcopperbarShape =
new TGeoBBox (
"dAcopperbarshape",lcopperbarx,lcopperbary,lcopperbarHalfThickness);
884 dAcopperbarVol =
new TGeoVolume(
"GEM_dAcopperbarVolume",dAcopperbarShape,gGeoMan->GetMedium(
"copper"));
885 dAcopperbarTrans =
new TGeoTranslation(0.,-46.1,141.);
886 dAcopperbarRot =
new TGeoRotation(
"dAcopperbarrot",0.0,25.0,0.0);
887 dAcopperbarRot ->RegisterYourself();
888 dAcopperbarCombi =
new TGeoCombiTrans(*dAcopperbarTrans,*dAcopperbarRot);
889 dAcopperbarCombi->SetName(
"GEM_dAcopperbar_Volume");
890 dAcopperbarCombi->RegisterYourself();
891 dAcopperbarVol->SetLineColor(kOrange+1);
892 SubunitVol->AddNode(dAcopperbarVol,0,dAcopperbarCombi);
894 dBcopperbarShape =
new TGeoBBox (
"dBcopperbarshape",rcopperbarx,rcopperbary,rcopperbarHalfThickness);
895 dBcopperbarVol =
new TGeoVolume(
"GEM_dBcopperbarVolume",dBcopperbarShape,gGeoMan->GetMedium(
"copper"));
896 dBcopperbarTrans =
new TGeoTranslation(0.,-62.5,175.);
897 dBcopperbarRot =
new TGeoRotation(
"dBcopperbarrot",0.0,35.0,0.0);
898 dBcopperbarRot ->RegisterYourself();
899 dBcopperbarCombi =
new TGeoCombiTrans(*dBcopperbarTrans,*dBcopperbarRot);
900 dBcopperbarCombi->SetName(
"GEM_dBcopperbar_Volume");
901 dBcopperbarCombi->RegisterYourself();
902 dBcopperbarVol->SetLineColor(kOrange+1);
903 SubunitVol->AddNode(dBcopperbarVol,0,dBcopperbarCombi);
906 top->AddNode(SubunitVol,0,
new TGeoCombiTrans());
921 gGeoMan->CloseGeometry();
FairGeoMedium * CbmMediumCarbon
FairGeoMedium * CbmMediumAluminium
FairGeoBuilder * geobuild
FairGeoMedium * CbmMediumAir
FairGeoMedium * CbmMediumPWO
FairGeoInterface * geoFace
vDisk SetLineColor(colYellow)