BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_GEMS_RunSRC2021_detailed.C
Go to the documentation of this file.
1/*
2 * Use this macro to create detailed
3 * ROOT geometry for the SRC GEMs in the future configuration
4 * including passive volumes (frames, al. cable supports, ...)
5 *
6 * Author: Baranov D.
7 * Created: 17.08.2021
8 * Updated: ---
9 */
10
11#include "TGeoVolume.h"
12
13// Set Parameters of GEMS -------------------------------------------------------
14const Int_t NStations = 2; // stations in the detector
15const Int_t NMaxModules = 1; // max. number of modules in a station
16
17//(X-Y-Z)Positions of stations (distances from the origin to the side (not sens.) which is nearest to the target)
19 +57.684 + 0.5055 /* +58.1895 */, // station 0 (left-arm GEM)
20 -57.684 + 0.5055 /* -57.1785 */ // station 1 (right-arm GEM)
21};
23 +0.0 - 4.623, // station 0 (left-arm GEM)
24 +0.0 - 4.623 // station 1 (right-arm GEM)
25};
27 +96.003 - 576.2 /* −480.197 */, // station 0 (left-arm GEM)
28 +96.003 - 576.2 /* -480.197 */ // station 1 (right-arm GEM)
29};
30//------------------------------------------------------------------------------
31
32//(X-Y-Z)Shifts of modules in each station -------------------------------------
34 {0.0}, // station 0 (left-arm GEM)
35 {0.0} // station 1 (right-arm GEM)
36};
38 {0.0}, // station 0 (left-arm GEM)
39 {0.0} // station 1 (right-arm GEM)
40};
42 {+0.7 /*distance from the side to the sensor*/}, // station 0 (left-arm GEM)
43 {+0.7 /*distance from the side to the sensor*/} // station 1 (right-arm GEM)
44};
45
46// rotations of stations around y-axis by 180 deg.
47// const Bool_t YStationRotations[NStations] = {false/*0*/, false/*1*/};
48
49// rotations of stations around x-axis by 180 deg.
50// const Bool_t XStationRotations[NStations] = {false/*0*/, false/*1*/};
51//------------------------------------------------------------------------------
52
53// GEM plane sizes (66x41 type) -------------------------------------------------
57const Double_t ZGEMSize_Station66x41 = 2.3; // common thickness of GEM (including sens. vol)
58
62//------------------------------------------------------------------------------
63
64// GEM plane sizes (163x45 type) ------------------------------------------------
67const Double_t ZModuleSize_Station163x45 = 0.9; // sensitive volume
68const Double_t ZGEMSize_Station163x45 = 4.1; // common thickness of GEM (including sens. vol)
69
73//------------------------------------------------------------------------------
74
75// GeoManager
77
78// media
91
92class FairGeoMedia;
93class FairGeoBuilder;
94
95TGeoVolume* CreateStation(TString station_name);
96
97TGeoVolume* CreateModule_Station66x41(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize);
102
104 Double_t xsize,
105 Double_t ysize,
106 Double_t zsize,
107 Double_t hole_radius);
110 Double_t dx,
111 Double_t dy,
112 Double_t dz,
113 Double_t hole_radius);
115
116void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
117{
118
119 // air medium
120 FairGeoMedium* mAir = geoMedia->getMedium("air");
121 if (!mAir)
122 Fatal("Main", "FairMedium air not found");
123 geoBuild->createMedium(mAir);
124 pMedAir = gGeoManager->GetMedium("air");
125 if (!pMedAir)
126 Fatal("Main", "Medium air not found");
127
128 // carbon medium
129 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
130 if (!mCarbon)
131 Fatal("Main", "FairMedium carbon not found");
132 geoBuild->createMedium(mCarbon);
133 pMedCarbon = gGeoManager->GetMedium("carbon");
134 if (!pMedCarbon)
135 Fatal("Main", "Medium carbon not found");
136
137 // fiberglass medium
138 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
139 if (!mFiberGlass)
140 Fatal("Main", "FairMedium fiberglass not found");
141 geoBuild->createMedium(mFiberGlass);
142 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
143 if (!pMedFiberGlass)
144 Fatal("Main", "Medium fiberglass not found");
145
146 // copper medium
147 FairGeoMedium* mCopper = geoMedia->getMedium("copper");
148 if (!mCopper)
149 Fatal("Main", "FairMedium copper not found");
150 geoBuild->createMedium(mCopper);
151 pMedCopper = gGeoManager->GetMedium("copper");
152 if (!pMedCopper)
153 Fatal("Main", "Medium copper not found");
154
155 // arco27020 medium
156 FairGeoMedium* mArCO27030 = geoMedia->getMedium("arco27030");
157 if (!mArCO27030)
158 Fatal("Main", "FairMedium arco27030 not found");
159 geoBuild->createMedium(mArCO27030);
160 pMedArCO27030 = gGeoManager->GetMedium("arco27030");
161 if (!pMedArCO27030)
162 Fatal("Main", "Medium arco27030 not found");
163
164 // aluminium medium
165 FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium");
166 if (!mAluminium)
167 Fatal("Main", "FairMedium aluminium not found");
168 geoBuild->createMedium(mAluminium);
169 pMedAluminium = gGeoManager->GetMedium("aluminium");
170 if (!pMedAluminium)
171 Fatal("Main", "Medium aluminium not found");
172
173 // epoxide compound (for GEM frames)
174 FairGeoMedium* mEpoxideCompound = geoMedia->getMedium("polyurethane_hd");
175 if (!mEpoxideCompound)
176 Fatal("Main", "FairMedium epoxideCompound not found");
177 geoBuild->createMedium(mEpoxideCompound);
178 pMedEpoxideCompound = gGeoManager->GetMedium("polyurethane_hd");
180 Fatal("Main", "Medium epoxideCompound not found");
181
182 // glue
183 FairGeoMedium* mGlue = geoMedia->getMedium("acrylic_glue");
184 if (!mGlue)
185 Fatal("Main", "FairMedium acrylic_glue not found");
186 geoBuild->createMedium(mGlue);
187 pMedGlue = gGeoManager->GetMedium("acrylic_glue");
188 if (!pMedGlue)
189 Fatal("Main", "Medium acrylic_glue not found");
190
191 // brass medium
192 FairGeoMedium* mBrass = geoMedia->getMedium("brass");
193 if (!mBrass)
194 Fatal("Main", "FairMedium brass not found");
195 geoBuild->createMedium(mBrass);
196 pMedBrass = gGeoManager->GetMedium("brass");
197 if (!pMedBrass)
198 Fatal("Main", "Medium brass not found");
199
200 // steel medium
201 FairGeoMedium* mSteel = geoMedia->getMedium("steel");
202 if (!mSteel)
203 Fatal("Main", "FairMedium steel not found");
204 geoBuild->createMedium(mSteel);
205 pMedSteel = gGeoManager->GetMedium("steel");
206 if (!pMedSteel)
207 Fatal("Main", "Medium steel not found");
208
209 // honeycomb medium
210 FairGeoMedium* mHoneyComb = geoMedia->getMedium("AramidHoneyComb");
211 if (!mHoneyComb)
212 Fatal("Main", "FairMedium AramidHoneyComb not found");
213 geoBuild->createMedium(mHoneyComb);
214 pMedHoneyComb = gGeoManager->GetMedium("AramidHoneyComb");
215 if (!pMedHoneyComb)
216 Fatal("Main", "Medium AramidHoneyComb not found");
217
218 // polyamide medium
219 FairGeoMedium* mPolyamide = geoMedia->getMedium("polyamide");
220 if (!mPolyamide)
221 Fatal("Main", "FairMedium polyamide not found");
222 geoBuild->createMedium(mPolyamide);
223 pMedPolyamide = gGeoManager->GetMedium("polyamide");
224 if (!pMedPolyamide)
225 Fatal("Main", "Medium polyamide not found");
226}
227
229{
230
231 // ---- set working directory --------------------------------------------
232 TString gPath = gSystem->Getenv("VMCWORKDIR");
233
234 // ------- Geometry file name (output) ----------------------------------
235 const TString geoDetectorName = "GEMS";
236 const TString geoDetectorVersion = "RunSRC2021_detailed";
237 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
238
239 // ---- global geometry parameters ---------------------------------------
240 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
241 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
242
243 // ------- Load media from media file ----------------------------------
244 TString medFile = gPath + "/geometry/media.geo";
245 geoFace->setMediaFile(medFile);
246 geoFace->readMedia();
247 FairGeoMedia* geoMedia = geoFace->getMedia();
248 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
249
250 DefineRequiredMedia(geoMedia, geoBuild);
251 // -------------------------------------------------------------------------
252
253 // -------------- Create geometry and top volume -------------------------
254 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
255 gGeoMan->SetName(geoDetectorName + "_geom");
256 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
257 top->SetMedium(pMedAir);
258 gGeoMan->SetTopVolume(top);
259 // gGeoMan->SetTopVisible(1);
260 // --------------------------------------------------------------------------
261
262 // Define TOP Geometry
263 TGeoVolume* GEMS = new TGeoVolumeAssembly(geoDetectorName);
264 GEMS->SetMedium(pMedAir);
265
266 // station 0 (small 66x41 GEM: left-arm)
267 if (1) {
268 Int_t stationNum = 0; // station number
269
270 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
271 TGeoVolume* module0 =
272 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
274 TGeoVolume* frame0 = CreateDetailedFrameForModule_Station66x41(TString("frame0_") + station->GetName());
275
276 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
277 module0_transform->RotateZ(-90.0); // deg
278 module0_transform->RotateY(180.0); // deg
279 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
280 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
281 module0_transform->RotateY(+31.0); // deg
282
283 TGeoCombiTrans* frame0_transform = new TGeoCombiTrans();
284 frame0_transform->RotateZ(-90.0); // deg
285 frame0_transform->RotateY(180.0); // deg
286 frame0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
287 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
288 frame0_transform->RotateY(+31.0); // deg
289
290 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
291 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
292 ZStationPositions[stationNum]);
293
294 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
295 station->AddNode(frame0, 0, new TGeoCombiTrans(*frame0_transform)); // frame
296
297 GEMS->AddNode(station, 0, station_transform);
298 }
299
300 // station 1 (small 66x41 GEM: right-arm)
301 if (1) {
302 Int_t stationNum = 1; // station number
303
304 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
305 TGeoVolume* module0 =
306 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
308 TGeoVolume* frame0 = CreateDetailedFrameForModule_Station66x41(TString("frame0_") + station->GetName());
309
310 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
311 module0_transform->RotateZ(-90.0); // deg
312 // module0_transform->RotateY(180.0); //deg
313 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
314 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
315 module0_transform->RotateY(-31.0); // deg
316
317 TGeoCombiTrans* frame0_transform = new TGeoCombiTrans();
318 frame0_transform->RotateZ(-90.0); // deg
319 // frame0_transform->RotateY(180.0); //deg
320 frame0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
321 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
322 frame0_transform->RotateY(-31.0); // deg
323
324 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
325 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
326 ZStationPositions[stationNum]);
327
328 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
329 station->AddNode(frame0, 0, new TGeoCombiTrans(*frame0_transform)); // frame
330
331 GEMS->AddNode(station, 0, station_transform);
332 }
333
334 top->AddNode(GEMS, 0);
336
337 // --------------- Finish -----------------------------------------------
338 gGeoMan->CloseGeometry();
339 gGeoMan->CheckOverlaps(0.0001);
340 gGeoMan->PrintOverlaps();
341 gGeoMan->Test();
342 // gGeoMan->RestoreMasterVolume();
343
344 TFile* geoFile = new TFile(geoFileName, "RECREATE");
345 top->Write();
346 geoFile->Close();
347 top->Draw("ogl");
348}
349//------------------------------------------------------------------------------
350
352{
353
354 TGeoVolume* stationA = new TGeoVolumeAssembly(station_name);
355 stationA->SetMedium(pMedAir);
356
357 return stationA;
358}
359
361{
362
363 // module shape
364 TGeoShape* moduleS = new TGeoBBox("moduleS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
365
366 // module volume
367 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
368
369 // medium
370 if (pMedArCO27030)
371 moduleV->SetMedium(pMedArCO27030);
372 else
373 Fatal("Main", "Invalid medium for sensitive modules!");
374
375 // visual parameters
376 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
377 moduleV->SetTransparency(20);
378
379 return moduleV;
380}
381
383{
384
385 // frame volumes
386 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
387 layers->SetMedium(pMedAir);
388
389 // Common parameters for all layers
390 Double_t layerFront_XSize = 66.0; // cm
391 Double_t layerFront_YSize = 41.0; // cm
392 Double_t layerFront_XShift = 0.0; // cm
393 Double_t layerFront_YShift = 0.0; // cm
394
395 Double_t layerBack_XSize = 66.0; // cm
396 Double_t layerBack_YSize = 41.0; // cm
397 Double_t layerBack_XShift = 0.0; // cm
398 Double_t layerBack_YShift = 0.0; // cm
399 Double_t layerBack_ZShift = 0.0; // cm
400
401 if (layer_name == "layer0_station3")
402 layerBack_ZShift = +0.2; // z-shift for an extended module
403
404 // copper layer -------------------------------------------------------------
405 Double_t copperLayer_ZSize = 0.00655; // cm;
406 Double_t copperLayerHole_Radius = 6.0; // cm
407
408 // layer shape
409 TGeoShape* copperLayerFrontS =
410 new TGeoBBox(TString("copperLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
411 layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
412 TGeoShape* copperLayerBackS = new TGeoBBox(TString("copperLayerBackBlankS") += TString("_") + layers->GetName(),
413 layerBack_XSize * 0.5, layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
414
415 TGeoVolume* copperLayerFrontV =
416 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
417 TGeoVolume* copperLayerBackV =
418 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
419
420 // volume medium
421 TGeoMedium* copperLayerV_medium = pMedCopper;
422 if (copperLayerV_medium) {
423 copperLayerFrontV->SetMedium(copperLayerV_medium);
424 copperLayerBackV->SetMedium(copperLayerV_medium);
425 } else
426 Fatal("Main", "Invalid medium for copperLayerV!");
427
428 // volume visual property (transparency)
429 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
430 copperLayerFrontV->SetTransparency(0);
431 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
432 copperLayerBackV->SetTransparency(0);
433
434 TGeoCombiTrans* copperLayerFront_transf[1];
435
436 copperLayerFront_transf[0] = new TGeoCombiTrans();
437 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
438 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
439 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize * 0.5);
440
441 TGeoCombiTrans* copperLayerBack_transf[1];
442
443 copperLayerBack_transf[0] = new TGeoCombiTrans();
444 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
445 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
446 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize * 0.5 + layerBack_ZShift);
447
448 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
449 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
450 //--------------------------------------------------------------------------
451
452 // glue layer ---------------------------------------------------------------
453 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
454 Double_t glueLayerHole_Radius = 6.0; // cm
455
456 // layer shape
457 TGeoShape* glueLayerFrontS = new TGeoBBox(TString("glueLayerFrontBlankS") += TString("_") + layers->GetName(),
458 layerFront_XSize * 0.5, layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
459 TGeoShape* glueLayerBackS = new TGeoBBox(TString("glueLayerBackBlankS") += TString("_") + layers->GetName(),
460 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
461
462 TGeoVolume* glueLayerFrontV =
463 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
464 TGeoVolume* glueLayerBackV =
465 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
466
467 // volume medium
468 TGeoMedium* glueLayerV_medium = pMedGlue;
469 if (glueLayerV_medium) {
470 glueLayerFrontV->SetMedium(glueLayerV_medium);
471 glueLayerBackV->SetMedium(glueLayerV_medium);
472 } else
473 Fatal("Main", "Invalid medium for glueLayerV!");
474
475 // volume visual property (transparency)
476 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
477 glueLayerFrontV->SetTransparency(0);
478 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
479 glueLayerBackV->SetTransparency(0);
480
481 TGeoCombiTrans* glueLayerFront_transf[1];
482
483 glueLayerFront_transf[0] = new TGeoCombiTrans();
484 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
485 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
486 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
487
488 TGeoCombiTrans* glueLayerBack_transf[1];
489
490 glueLayerBack_transf[0] = new TGeoCombiTrans();
491 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
492 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
493 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize * 0.5
494 + layerBack_ZShift);
495
496 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
497 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
498 //--------------------------------------------------------------------------
499
500 // epoxide layer ------------------------------------------------------------
501 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
502 Double_t epoxideLayerHole_Radius = 6.0; // cm
503
504 // layer shape
505 TGeoShape* epoxideLayerFrontS =
506 new TGeoBBox(TString("epoxideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
507 layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
508 TGeoShape* epoxideLayerBackS = new TGeoBBox(TString("epoxideLayerBackBlankS") += TString("_") + layers->GetName(),
509 layerBack_XSize * 0.5, layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
510
511 TGeoVolume* epoxideLayerFrontV =
512 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
513 TGeoVolume* epoxideLayerBackV =
514 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
515
516 // volume medium
517 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
518 if (epoxideLayerV_medium) {
519 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
520 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
521 } else
522 Fatal("Main", "Invalid medium for epoxideLayerV!");
523
524 // volume visual property (transparency)
525 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
526 epoxideLayerFrontV->SetTransparency(0);
527 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
528 epoxideLayerBackV->SetTransparency(0);
529
530 TGeoCombiTrans* epoxideLayerFront_transf[1];
531
532 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
533 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
534 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
535 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
536 + epoxideLayer_ZSize * 0.5);
537
538 TGeoCombiTrans* epoxideLayerBack_transf[1];
539
540 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
541 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
542 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
543 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
544 - epoxideLayer_ZSize * 0.5 + layerBack_ZShift);
545
546 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
547 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
548 //--------------------------------------------------------------------------
549
550 // honeycomb layer ----------------------------------------------------------
551 // Double_t honeycombLayer_ZSize = 1.5-(0.05+0.00055+0.005+0.0125); //cm; half-thickness of all honeycomb layers
552 // Double_t honeycombLayer_ZSize = 1.5-(0.06805); //cm; half-thickness of all honeycomb layers
553 Double_t honeycombLayer_ZSize = 0.56; // cm; half-thickness of all honeycomb layers
554 Double_t honeycombLayerHole_Radius = 6.0; // cm
555
556 // layer shape
557 TGeoShape* honeycombLayerFrontS =
558 new TGeoBBox(TString("honeycombLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
559 layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
560 TGeoShape* honeycombLayerBackS =
561 new TGeoBBox(TString("honeycombLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
562 layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
563
564 TGeoVolume* honeycombLayerFrontV =
565 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
566 TGeoVolume* honeycombLayerBackV =
567 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
568
569 // volume medium
570 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
571 if (honeycombLayerV_medium) {
572 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
573 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
574 } else
575 Fatal("Main", "Invalid medium for honeycombLayerV!");
576
577 // volume visual property (transparency)
578 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
579 honeycombLayerFrontV->SetTransparency(0);
580 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
581 honeycombLayerBackV->SetTransparency(0);
582
583 TGeoCombiTrans* honeycombLayerFront_transf[1];
584
585 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
586 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
587 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
588 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
589 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
590
591 TGeoCombiTrans* honeycombLayerBack_transf[1];
592
593 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
594 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
595 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
596 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
597 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5 + layerBack_ZShift);
598
599 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
600 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
601 //--------------------------------------------------------------------------
602
603 // polyamide layer ----------------------------------------------------------
604 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
605 Double_t polyamideLayerHole_Radius = 6.0; // cm
606
607 // layer shape
608 TGeoShape* polyamideLayerFrontS =
609 new TGeoBBox(TString("polyamideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
610 layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
611 TGeoShape* polyamideLayerBackS =
612 new TGeoBBox(TString("polyamideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
613 layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
614
615 TGeoVolume* polyamideLayerFrontV =
616 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
617 TGeoVolume* polyamideLayerBackV =
618 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
619
620 // volume medium
621 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
622 if (polyamideLayerV_medium) {
623 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
624 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
625 } else
626 Fatal("Main", "Invalid medium for polyamideLayerV!");
627
628 // volume visual property (transparency)
629 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
630 polyamideLayerFrontV->SetTransparency(0);
631 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
632 polyamideLayerBackV->SetTransparency(0);
633
634 TGeoCombiTrans* polyamideLayerFront_transf[1];
635
636 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
637 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
638 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
639 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
640 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
641
642 TGeoCombiTrans* polyamideLayerBack_transf[1];
643
644 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
645 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
646 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
647 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
648 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5
649 + layerBack_ZShift);
650
651 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
652 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
653 //--------------------------------------------------------------------------
654
655 return layers;
656}
657
659{
660
661 // frame shapes
662 TGeoShape* vertical_frameS =
663 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station66x41 * 0.5 + dy, dz * 0.5);
664 TGeoShape* horizontal_frameS =
665 new TGeoBBox("horizontal_frameS", XModuleSize_Station66x41 * 0.5, dy * 0.5, dz * 0.5);
666
667 // frame volumes
668 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
669 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
670 TGeoVolume* horizontal_frameV = new TGeoVolume(frame_name + "_horizontal_frameV", horizontal_frameS);
671
672 // media
673 TGeoMedium* frame_medium = pMedCarbon; // set medium
674 if (pMedCarbon) {
675 vertical_frameV->SetMedium(frame_medium);
676 horizontal_frameV->SetMedium(frame_medium);
677 } else
678 Fatal("Main", "Invalid medium for frames!");
679 if (pMedAir) {
680 composite_frameV->SetMedium(pMedAir);
681 } else
682 Fatal("Main", "Invalid medium for frames!");
683
684 // visual parameters
685 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
686 horizontal_frameV->SetLineColor(TColor::GetColor("#9999ff"));
687
688 // frame part positions in the frame
689 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
690 left_vertical_frame_position->SetTranslation(XModuleSize_Station66x41 * 0.5 + dXFrame_Station66x41 * 0.5, 0.0, 0.0);
691
692 TGeoCombiTrans* right_vertical_frame_position = new TGeoCombiTrans();
693 right_vertical_frame_position->SetTranslation(-XModuleSize_Station66x41 * 0.5 - dXFrame_Station66x41 * 0.5, 0.0,
694 0.0);
695
696 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
697 bottom_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station66x41 * 0.5 + dYFrame_Station66x41 * 0.5,
698 0.0);
699
700 TGeoCombiTrans* lower_horizontal_frame_position = new TGeoCombiTrans();
701 lower_horizontal_frame_position->SetTranslation(0.0, -YModuleSize_Station66x41 * 0.5 - dYFrame_Station66x41 * 0.5,
702 0.0);
703
704 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
705 composite_frameV->AddNode(vertical_frameV, 1, right_vertical_frame_position);
706 composite_frameV->AddNode(horizontal_frameV, 0, bottom_horizontal_frame_position);
707 composite_frameV->AddNode(horizontal_frameV, 1, lower_horizontal_frame_position);
708
709 return composite_frameV;
710}
711
713{
714
715 // frame volumes
716 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
717 frames->SetMedium(pMedAir);
718
719 // back epoxide frame -------------------------------------------------------
720 Double_t backEpoxideFramePart_XSize = 75.1; // cm
721 Double_t backEpoxideFramePart_YSize = 48.5; // cm
722 Double_t backEpoxideFramePart_ZSize = 0.7; // cm
723
724 // layer shape
725 TGeoShape* backEpoxideFramePartS = new TGeoBBox(
726 TString("backEpoxideFramePartS") += TString("_") + frames->GetName(), backEpoxideFramePart_XSize * 0.5,
727 backEpoxideFramePart_YSize * 0.5, backEpoxideFramePart_ZSize * 0.5);
728 TGeoShape* backEpoxideActiveAreaS =
729 new TGeoBBox(TString("backEpoxideActiveAreaS") += TString("_") + frames->GetName(),
731
732 TGeoTranslation* backEpoxideFramePart_pos = new TGeoTranslation();
733 backEpoxideFramePart_pos->SetName("backEpoxideFramePart_pos");
734 backEpoxideFramePart_pos->SetDx(-2.75 /*shift*/);
735 backEpoxideFramePart_pos->SetDy(+2.05 /*shift*/);
736 backEpoxideFramePart_pos->SetDz(0.0);
737 backEpoxideFramePart_pos->RegisterYourself();
738
739 TGeoCompositeShape* backEpoxideFrameS = new TGeoCompositeShape();
740 backEpoxideFrameS->SetName(TString("backEpoxideFrameS") += TString("_") + frames->GetName());
741 {
742 TString expression = "backEpoxideFramePartS";
743 expression += TString("_") + frames->GetName();
744 expression += ":backEpoxideFramePart_pos";
745 expression += "-backEpoxideActiveAreaS";
746 expression += TString("_") + frames->GetName();
747
748 backEpoxideFrameS->MakeNode(expression);
749 backEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
750 }
751
752 TGeoVolume* backEpoxideFrameV =
753 new TGeoVolume(TString("backEpoxideFrameV") += TString("_") + frames->GetName(), backEpoxideFrameS);
754
755 // volume medium
756 TGeoMedium* backEpoxideFrameV_medium = pMedEpoxideCompound;
757 if (backEpoxideFrameV_medium) {
758 backEpoxideFrameV->SetMedium(backEpoxideFrameV_medium);
759 } else
760 Fatal("Main", "Invalid medium for backEpoxideFrameV!");
761
762 // volume visual property (transparency)
763 backEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
764 backEpoxideFrameV->SetTransparency(0);
765
766 TGeoCombiTrans* backEpoxideFrame_transf[1];
767
768 backEpoxideFrame_transf[0] = new TGeoCombiTrans();
769 backEpoxideFrame_transf[0]->SetDx(0.0);
770 backEpoxideFrame_transf[0]->SetDy(0.0);
771 backEpoxideFrame_transf[0]->SetDz(+(ZModuleSize_Station66x41 - backEpoxideFramePart_ZSize) * 0.5
772 + backEpoxideFramePart_ZSize);
773
774 frames->AddNode(backEpoxideFrameV, 0, backEpoxideFrame_transf[0]);
775 //--------------------------------------------------------------------------
776
777 // middle epoxide frame -----------------------------------------------------
778 Double_t middleEpoxideFrameBigPart_XSize = 69.3; // cm
779 Double_t middleEpoxideFrameBigPart_YSize = 44.7; // cm
780 Double_t middleEpoxideFrameBigPart_ZSize = 0.9; // cm
781
782 Double_t middleEpoxideFrameSmallPart_XSize = 3.4; // cm
783 Double_t middleEpoxideFrameSmallPart_YSize = 16.8; // cm
784 Double_t middleEpoxideFrameSmallPart_ZSize = 0.9; // cm
785
786 Double_t middleEpoxideFrameHoleArea_XSize = 66.5; // cm
787 Double_t middleEpoxideFrameHoleArea_YSize = 41.9; // cm
788 Double_t middleEpoxideFrameHoleArea_ZSize = 0.9 + 0.1; // cm
789
790 // layer shape
791 TGeoShape* middleEpoxideFrameBigPartS =
792 new TGeoBBox(TString("middleEpoxideFrameBigPartS") += TString("_") + frames->GetName(),
793 middleEpoxideFrameBigPart_XSize * 0.5, middleEpoxideFrameBigPart_YSize * 0.5,
794 middleEpoxideFrameBigPart_ZSize * 0.5);
795 TGeoShape* middleEpoxideFrameSmallPartS =
796 new TGeoBBox(TString("middleEpoxideFrameSmallPartS") += TString("_") + frames->GetName(),
797 middleEpoxideFrameSmallPart_XSize * 0.5, middleEpoxideFrameSmallPart_YSize * 0.5,
798 middleEpoxideFrameSmallPart_ZSize * 0.5);
799 TGeoShape* middleEpoxideHoleAreaS = new TGeoBBox(
800 TString("middleEpoxideHoleAreaS") += TString("_") + frames->GetName(), middleEpoxideFrameHoleArea_XSize * 0.5,
801 middleEpoxideFrameHoleArea_YSize * 0.5, middleEpoxideFrameHoleArea_ZSize * 0.5);
802
803 TGeoTranslation* middleEpoxideFrameBigPart_pos = new TGeoTranslation();
804 middleEpoxideFrameBigPart_pos->SetName("middleEpoxideFrameBigPart_pos");
805 middleEpoxideFrameBigPart_pos->SetDx(0.0 /*shift*/);
806 middleEpoxideFrameBigPart_pos->SetDy(+0.15 /*shift*/);
807 middleEpoxideFrameBigPart_pos->SetDz(0.0);
808 middleEpoxideFrameBigPart_pos->RegisterYourself();
809
810 TGeoTranslation* middleEpoxideFrameSmallPart_pos = new TGeoTranslation();
811 middleEpoxideFrameSmallPart_pos->SetName("middleEpoxideFrameSmallPart_pos");
812 middleEpoxideFrameSmallPart_pos->SetDx(
813 -(middleEpoxideFrameBigPart_XSize * 0.5 + middleEpoxideFrameSmallPart_XSize * 0.5));
814 middleEpoxideFrameSmallPart_pos->SetDy(middleEpoxideFrameBigPart_YSize * 0.5
815 - middleEpoxideFrameSmallPart_YSize * 0.5 + 0.15 /*shift*/);
816 middleEpoxideFrameSmallPart_pos->SetDz(0.0);
817 middleEpoxideFrameSmallPart_pos->RegisterYourself();
818
819 TGeoCompositeShape* middleEpoxideFrameS = new TGeoCompositeShape();
820 middleEpoxideFrameS->SetName(TString("middleEpoxideFrameS") += TString("_") + frames->GetName());
821 {
822 TString expression = "middleEpoxideFrameBigPartS";
823 expression += TString("_") + frames->GetName();
824 expression += ":middleEpoxideFrameBigPart_pos";
825 expression += "-middleEpoxideHoleAreaS";
826 expression += TString("_") + frames->GetName();
827 expression += "+middleEpoxideFrameSmallPartS";
828 expression += TString("_") + frames->GetName();
829 expression += ":middleEpoxideFrameSmallPart_pos";
830
831 middleEpoxideFrameS->MakeNode(expression);
832 middleEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
833 }
834
835 TGeoVolume* middleEpoxideFrameV =
836 new TGeoVolume(TString("middleEpoxideFrameV") += TString("_") + frames->GetName(), middleEpoxideFrameS);
837
838 // volume medium
839 TGeoMedium* middleEpoxideFrameV_medium = pMedEpoxideCompound;
840 if (middleEpoxideFrameV_medium) {
841 middleEpoxideFrameV->SetMedium(middleEpoxideFrameV_medium);
842 } else
843 Fatal("Main", "Invalid medium for middleEpoxideFrameV!");
844
845 // volume visual property (transparency)
846 middleEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
847 middleEpoxideFrameV->SetTransparency(0);
848
849 TGeoCombiTrans* middleEpoxideFrame_transf[1];
850
851 middleEpoxideFrame_transf[0] = new TGeoCombiTrans();
852 middleEpoxideFrame_transf[0]->SetDx(0.0);
853 middleEpoxideFrame_transf[0]->SetDy(0.0);
854 middleEpoxideFrame_transf[0]->SetDz(0.0);
855
856 frames->AddNode(middleEpoxideFrameV, 0, middleEpoxideFrame_transf[0]);
857 //--------------------------------------------------------------------------
858
859 // front epoxide frame -----------------------------------------------------
860 Double_t frontEpoxideFrameBigPart_XSize = 69.5; // cm
861 Double_t frontEpoxideFrameBigPart_YSize = 44.7; // cm
862 Double_t frontEpoxideFrameBigPart_ZSize = 0.7; // cm
863
864 Double_t frontEpoxideFrameSmallPart_XSize = 3.2; // cm
865 Double_t frontEpoxideFrameSmallPart_YSize = 16.8; // cm
866 Double_t frontEpoxideFrameSmallPart_ZSize = 0.7; // cm
867
868 Double_t frontEpoxideFrameHoleArea_XSize = 66.0; // cm
869 Double_t frontEpoxideFrameHoleArea_YSize = 41.1; // cm
870 Double_t frontEpoxideFrameHoleArea_ZSize = 0.9 + 0.1; // cm
871
872 // layer shape
873 TGeoShape* frontEpoxideFrameBigPartS = new TGeoBBox(
874 TString("frontEpoxideFrameBigPartS") += TString("_") + frames->GetName(), frontEpoxideFrameBigPart_XSize * 0.5,
875 frontEpoxideFrameBigPart_YSize * 0.5, frontEpoxideFrameBigPart_ZSize * 0.5);
876 TGeoShape* frontEpoxideFrameSmallPartS =
877 new TGeoBBox(TString("frontEpoxideFrameSmallPartS") += TString("_") + frames->GetName(),
878 frontEpoxideFrameSmallPart_XSize * 0.5, frontEpoxideFrameSmallPart_YSize * 0.5,
879 frontEpoxideFrameSmallPart_ZSize * 0.5);
880 TGeoShape* frontEpoxideHoleAreaS = new TGeoBBox(
881 TString("frontEpoxideHoleAreaS") += TString("_") + frames->GetName(), frontEpoxideFrameHoleArea_XSize * 0.5,
882 frontEpoxideFrameHoleArea_YSize * 0.5, frontEpoxideFrameHoleArea_ZSize * 0.5);
883
884 TGeoTranslation* frontEpoxideFrameBigPart_pos = new TGeoTranslation();
885 frontEpoxideFrameBigPart_pos->SetName("frontEpoxideFrameBigPart_pos");
886 frontEpoxideFrameBigPart_pos->SetDx(0.0 /*shift*/);
887 frontEpoxideFrameBigPart_pos->SetDy(+0.15 /*shift*/);
888 frontEpoxideFrameBigPart_pos->SetDz(0.0);
889 frontEpoxideFrameBigPart_pos->RegisterYourself();
890
891 TGeoTranslation* frontEpoxideFrameSmallPart_pos = new TGeoTranslation();
892 frontEpoxideFrameSmallPart_pos->SetName("frontEpoxideFrameSmallPart_pos");
893 frontEpoxideFrameSmallPart_pos->SetDx(
894 -(frontEpoxideFrameBigPart_XSize * 0.5 + frontEpoxideFrameSmallPart_XSize * 0.5));
895 frontEpoxideFrameSmallPart_pos->SetDy(frontEpoxideFrameBigPart_YSize * 0.5 - frontEpoxideFrameSmallPart_YSize * 0.5
896 + 0.15 /*shift*/);
897 frontEpoxideFrameSmallPart_pos->SetDz(0.0);
898 frontEpoxideFrameSmallPart_pos->RegisterYourself();
899
900 TGeoCompositeShape* frontEpoxideFrameS = new TGeoCompositeShape();
901 frontEpoxideFrameS->SetName(TString("frontEpoxideFrameS") += TString("_") + frames->GetName());
902 {
903 TString expression = "frontEpoxideFrameBigPartS";
904 expression += TString("_") + frames->GetName();
905 expression += ":frontEpoxideFrameBigPart_pos";
906 expression += "-frontEpoxideHoleAreaS";
907 expression += TString("_") + frames->GetName();
908 expression += "+frontEpoxideFrameSmallPartS";
909 expression += TString("_") + frames->GetName();
910 expression += ":frontEpoxideFrameSmallPart_pos";
911
912 frontEpoxideFrameS->MakeNode(expression);
913 frontEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
914 }
915
916 TGeoVolume* frontEpoxideFrameV =
917 new TGeoVolume(TString("frontEpoxideFrameV") += TString("_") + frames->GetName(), frontEpoxideFrameS);
918
919 // volume medium
920 TGeoMedium* frontEpoxideFrameV_medium = pMedEpoxideCompound;
921 if (frontEpoxideFrameV_medium) {
922 frontEpoxideFrameV->SetMedium(frontEpoxideFrameV_medium);
923 } else
924 Fatal("Main", "Invalid medium for frontEpoxideFrameV!");
925
926 // volume visual property (transparency)
927 frontEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
928 frontEpoxideFrameV->SetTransparency(0);
929
930 TGeoCombiTrans* frontEpoxideFrame_transf[1];
931
932 frontEpoxideFrame_transf[0] = new TGeoCombiTrans();
933 frontEpoxideFrame_transf[0]->SetDx(0.0);
934 frontEpoxideFrame_transf[0]->SetDy(0.0);
935 frontEpoxideFrame_transf[0]->SetDz(-(ZModuleSize_Station66x41 - frontEpoxideFrameBigPart_ZSize) * 0.5
936 - frontEpoxideFrameBigPart_ZSize);
937
938 frames->AddNode(frontEpoxideFrameV, 0, frontEpoxideFrame_transf[0]);
939 //--------------------------------------------------------------------------
940
941 return frames;
942}
943//------------------------------------------------------------------------------
944
946{
947
948 // frame volumes
949 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
950 frames->SetMedium(pMedAir);
951
952 // center fiberglass frame -------------------------------------------------
953 Double_t centerFiberGlassFrameSidePart_XSize = 1.45; // cm
954 Double_t centerFiberGlassFrameSidePart_YSize = 44.6; // cm
955 Double_t centerFiberGlassFrameSidePart_ZSize = 0.89; // cm
956
957 Double_t centerFiberGlassFrameLongPart_XSize = 66.5; // cm
958 Double_t centerFiberGlassFrameLongPart_YSize = 1.45; // cm
959 Double_t centerFiberGlassFrameLongPart_ZSize = 0.89; // cm
960
961 Double_t distanceBetweenFiberGlassFrameSideParts = 66.5; // cm
962 Double_t distanceBetweenFiberGlassFrameLongParts = 41.7; // cm
963
964 TGeoShape* centerFiberGlassFrameSidePartS =
965 new TGeoBBox(TString("centerFiberGlassFrameSidePartS") += TString("_") + frames->GetName(),
966 centerFiberGlassFrameSidePart_XSize * 0.5, centerFiberGlassFrameSidePart_YSize * 0.5,
967 centerFiberGlassFrameSidePart_ZSize * 0.5);
968 TGeoShape* centerFiberGlassFrameLongPartS =
969 new TGeoBBox(TString("centerFiberGlassFrameLongPartS") += TString("_") + frames->GetName(),
970 centerFiberGlassFrameLongPart_XSize * 0.5, centerFiberGlassFrameLongPart_YSize * 0.5,
971 centerFiberGlassFrameLongPart_ZSize * 0.5);
972
973 TGeoTranslation* centerFiberGlassFrameSidePart_pos1 = new TGeoTranslation();
974 centerFiberGlassFrameSidePart_pos1->SetName(TString("centerFiberGlassFrameSidePart_pos1") +=
975 TString("_") + frames->GetName());
976 centerFiberGlassFrameSidePart_pos1->SetDx(
977 +(distanceBetweenFiberGlassFrameSideParts + centerFiberGlassFrameSidePart_XSize) * 0.5);
978 centerFiberGlassFrameSidePart_pos1->SetDy(0.0);
979 centerFiberGlassFrameSidePart_pos1->SetDz(0.0);
980 centerFiberGlassFrameSidePart_pos1->RegisterYourself();
981
982 TGeoTranslation* centerFiberGlassFrameSidePart_pos2 = new TGeoTranslation();
983 centerFiberGlassFrameSidePart_pos2->SetName(TString("centerFiberGlassFrameSidePart_pos2") +=
984 TString("_") + frames->GetName());
985 centerFiberGlassFrameSidePart_pos2->SetDx(
986 -(distanceBetweenFiberGlassFrameSideParts + centerFiberGlassFrameSidePart_XSize) * 0.5);
987 centerFiberGlassFrameSidePart_pos2->SetDy(0.0);
988 centerFiberGlassFrameSidePart_pos2->SetDz(0.0);
989 centerFiberGlassFrameSidePart_pos2->RegisterYourself();
990
991 TGeoTranslation* centerFiberGlassFrameLongPart_top = new TGeoTranslation();
992 centerFiberGlassFrameLongPart_top->SetName(TString("centerFiberGlassFrameLongPart_top") +=
993 TString("_") + frames->GetName());
994 centerFiberGlassFrameLongPart_top->SetDx(0.0);
995 centerFiberGlassFrameLongPart_top->SetDy(
996 +(distanceBetweenFiberGlassFrameLongParts + centerFiberGlassFrameLongPart_YSize) * 0.5);
997 centerFiberGlassFrameLongPart_top->SetDz(0.0);
998 centerFiberGlassFrameLongPart_top->RegisterYourself();
999
1000 TGeoTranslation* centerFiberGlassFrameLongPart_bottom = new TGeoTranslation();
1001 centerFiberGlassFrameLongPart_bottom->SetName(TString("centerFiberGlassFrameLongPart_bottom") +=
1002 TString("_") + frames->GetName());
1003 centerFiberGlassFrameLongPart_bottom->SetDx(0.0);
1004 centerFiberGlassFrameLongPart_bottom->SetDy(
1005 -(distanceBetweenFiberGlassFrameLongParts + centerFiberGlassFrameLongPart_YSize) * 0.5);
1006 centerFiberGlassFrameLongPart_bottom->SetDz(0.0);
1007 centerFiberGlassFrameLongPart_bottom->RegisterYourself();
1008
1009 TGeoCompositeShape* centerFiberGlassFrameS = new TGeoCompositeShape();
1010 centerFiberGlassFrameS->SetName(TString("centerFiberGlassFrameS") += TString("_") + frames->GetName());
1011 {
1012 TString expression = "centerFiberGlassFrameSidePartS";
1013 expression += TString("_") + frames->GetName();
1014 expression += ":centerFiberGlassFrameSidePart_pos1";
1015 expression += TString("_") + frames->GetName();
1016 expression += "+centerFiberGlassFrameSidePartS";
1017 expression += TString("_") + frames->GetName();
1018 expression += ":centerFiberGlassFrameSidePart_pos2";
1019 expression += TString("_") + frames->GetName();
1020 expression += "+centerFiberGlassFrameLongPartS";
1021 expression += TString("_") + frames->GetName();
1022 expression += ":centerFiberGlassFrameLongPart_top";
1023 expression += TString("_") + frames->GetName();
1024 expression += "+centerFiberGlassFrameLongPartS";
1025 expression += TString("_") + frames->GetName();
1026 expression += ":centerFiberGlassFrameLongPart_bottom";
1027 expression += TString("_") + frames->GetName();
1028
1029 centerFiberGlassFrameS->MakeNode(expression);
1030 centerFiberGlassFrameS->ComputeBBox(); // need to compute a bounding box
1031 }
1032
1033 TGeoVolume* centerFiberGlassFrameV =
1034 new TGeoVolume(TString("centerFiberGlassFrameV") += TString("_") + frames->GetName(), centerFiberGlassFrameS);
1035
1036 // volume medium
1037 TGeoMedium* centerFiberGlassFrameV_medium = pMedFiberGlass;
1038 if (centerFiberGlassFrameV_medium) {
1039 centerFiberGlassFrameV->SetMedium(centerFiberGlassFrameV_medium);
1040 } else
1041 Fatal("Main", "Invalid medium for centerFiberGlassFrameV!");
1042
1043 // volume visual property (transparency)
1044 centerFiberGlassFrameV->SetLineColor(TColor::GetColor("#ccffcc"));
1045 centerFiberGlassFrameV->SetTransparency(0);
1046
1047 TGeoCombiTrans* centerFiberGlassFrame_transf[1];
1048
1049 centerFiberGlassFrame_transf[0] = new TGeoCombiTrans();
1050 centerFiberGlassFrame_transf[0]->SetDx(0.0);
1051 centerFiberGlassFrame_transf[0]->SetDy(0.0);
1052 centerFiberGlassFrame_transf[0]->SetDz(0.0);
1053
1054 frames->AddNode(centerFiberGlassFrameV, 0, centerFiberGlassFrame_transf[0]);
1055 //--------------------------------------------------------------------------
1056
1057 // center brass frame ------------------------------------------------------
1058 Double_t centerBrassFrameSidePart_XSize = 1.45; // cm
1059 Double_t centerBrassFrameSidePart_YSize = 44.6; // cm
1060 Double_t centerBrassFrameSidePart_ZSize = 0.005; // cm
1061
1062 Double_t centerBrassFrameLongPart_XSize = 66.5; // cm
1063 Double_t centerBrassFrameLongPart_YSize = 1.45; // cm
1064 Double_t centerBrassFrameLongPart_ZSize = 0.005; // cm
1065
1066 Double_t distanceBetweenBrassFrameSideParts = 66.5; // cm
1067 Double_t distanceBetweenBrassFrameLongParts = 41.7; // cm
1068
1069 TGeoShape* centerBrassFrameSidePartS = new TGeoBBox(
1070 TString("centerBrassFrameSidePartS") += TString("_") + frames->GetName(), centerBrassFrameSidePart_XSize * 0.5,
1071 centerBrassFrameSidePart_YSize * 0.5, centerBrassFrameSidePart_ZSize * 0.5);
1072 TGeoShape* centerBrassFrameLongPartS = new TGeoBBox(
1073 TString("centerBrassFrameLongPartS") += TString("_") + frames->GetName(), centerBrassFrameLongPart_XSize * 0.5,
1074 centerBrassFrameLongPart_YSize * 0.5, centerBrassFrameLongPart_ZSize * 0.5);
1075
1076 TGeoTranslation* centerBrassFrameSidePart_pos1 = new TGeoTranslation();
1077 centerBrassFrameSidePart_pos1->SetName(TString("centerBrassFrameSidePart_pos1") +=
1078 TString("_") + frames->GetName());
1079 centerBrassFrameSidePart_pos1->SetDx(+(distanceBetweenBrassFrameSideParts + centerBrassFrameSidePart_XSize) * 0.5);
1080 centerBrassFrameSidePart_pos1->SetDy(0.0);
1081 centerBrassFrameSidePart_pos1->SetDz(0.0);
1082 centerBrassFrameSidePart_pos1->RegisterYourself();
1083
1084 TGeoTranslation* centerBrassFrameSidePart_pos2 = new TGeoTranslation();
1085 centerBrassFrameSidePart_pos2->SetName(TString("centerBrassFrameSidePart_pos2") +=
1086 TString("_") + frames->GetName());
1087 centerBrassFrameSidePart_pos2->SetDx(-(distanceBetweenBrassFrameSideParts + centerBrassFrameSidePart_XSize) * 0.5);
1088 centerBrassFrameSidePart_pos2->SetDy(0.0);
1089 centerBrassFrameSidePart_pos2->SetDz(0.0);
1090 centerBrassFrameSidePart_pos2->RegisterYourself();
1091
1092 TGeoTranslation* centerBrassFrameLongPart_top = new TGeoTranslation();
1093 centerBrassFrameLongPart_top->SetName(TString("centerBrassFrameLongPart_top") += TString("_") + frames->GetName());
1094 centerBrassFrameLongPart_top->SetDx(0.0);
1095 centerBrassFrameLongPart_top->SetDy(+(distanceBetweenBrassFrameLongParts + centerBrassFrameLongPart_YSize) * 0.5);
1096 centerBrassFrameLongPart_top->SetDz(0.0);
1097 centerBrassFrameLongPart_top->RegisterYourself();
1098
1099 TGeoTranslation* centerBrassFrameLongPart_bottom = new TGeoTranslation();
1100 centerBrassFrameLongPart_bottom->SetName(TString("centerBrassFrameLongPart_bottom") +=
1101 TString("_") + frames->GetName());
1102 centerBrassFrameLongPart_bottom->SetDx(0.0);
1103 centerBrassFrameLongPart_bottom->SetDy(-(distanceBetweenBrassFrameLongParts + centerBrassFrameLongPart_YSize)
1104 * 0.5);
1105 centerBrassFrameLongPart_bottom->SetDz(0.0);
1106 centerBrassFrameLongPart_bottom->RegisterYourself();
1107
1108 TGeoCompositeShape* centerBrassFrameS = new TGeoCompositeShape();
1109 centerBrassFrameS->SetName(TString("centerBrassFrameS") += TString("_") + frames->GetName());
1110 {
1111 TString expression = "centerBrassFrameSidePartS";
1112 expression += TString("_") + frames->GetName();
1113 expression += ":centerBrassFrameSidePart_pos1";
1114 expression += TString("_") + frames->GetName();
1115 expression += "+centerBrassFrameSidePartS";
1116 expression += TString("_") + frames->GetName();
1117 expression += ":centerBrassFrameSidePart_pos2";
1118 expression += TString("_") + frames->GetName();
1119 expression += "+centerBrassFrameLongPartS";
1120 expression += TString("_") + frames->GetName();
1121 expression += ":centerBrassFrameLongPart_top";
1122 expression += TString("_") + frames->GetName();
1123 expression += "+centerBrassFrameLongPartS";
1124 expression += TString("_") + frames->GetName();
1125 expression += ":centerBrassFrameLongPart_bottom";
1126 expression += TString("_") + frames->GetName();
1127
1128 centerBrassFrameS->MakeNode(expression);
1129 centerBrassFrameS->ComputeBBox(); // need to compute a bounding box
1130 }
1131
1132 TGeoVolume* centerBrassFrameV =
1133 new TGeoVolume(TString("centerBrassFrameV") += TString("_") + frames->GetName(), centerBrassFrameS);
1134
1135 // volume medium
1136 TGeoMedium* centerBrassFrameV_medium = pMedBrass;
1137 if (centerBrassFrameV_medium) {
1138 centerBrassFrameV->SetMedium(centerBrassFrameV_medium);
1139 } else
1140 Fatal("Main", "Invalid medium for centerBrassFrameV!");
1141
1142 // volume visual property (transparency)
1143 centerBrassFrameV->SetLineColor(TColor::GetColor("#f07422"));
1144 centerBrassFrameV->SetTransparency(0);
1145
1146 TGeoCombiTrans* centerBrassFrame_transf[1];
1147
1148 centerBrassFrame_transf[0] = new TGeoCombiTrans();
1149 centerBrassFrame_transf[0]->SetDx(0.0);
1150 centerBrassFrame_transf[0]->SetDy(0.0);
1151 centerBrassFrame_transf[0]->SetDz(
1152 -(centerFiberGlassFrameSidePart_ZSize * 0.5 + centerBrassFrameSidePart_ZSize * 0.5));
1153
1154 frames->AddNode(centerBrassFrameV, 0, centerBrassFrame_transf[0]);
1155 //--------------------------------------------------------------------------
1156
1157 // center steel frame ------------------------------------------------------
1158 Double_t centerSteelFrameSidePart_XSize = 1.45; // cm
1159 Double_t centerSteelFrameSidePart_YSize = 44.6; // cm
1160 Double_t centerSteelFrameSidePart_ZSize = 0.005; // cm
1161
1162 Double_t centerSteelFrameLongPart_XSize = 66.5; // cm
1163 Double_t centerSteelFrameLongPart_YSize = 1.45; // cm
1164 Double_t centerSteelFrameLongPart_ZSize = 0.005; // cm
1165
1166 Double_t distanceBetweenSteelFrameSideParts = 66.5; // cm
1167 Double_t distanceBetweenSteelFrameLongParts = 41.7; // cm
1168
1169 TGeoShape* centerSteelFrameSidePartS = new TGeoBBox(
1170 TString("centerSteelFrameSidePartS") += TString("_") + frames->GetName(), centerSteelFrameSidePart_XSize * 0.5,
1171 centerSteelFrameSidePart_YSize * 0.5, centerSteelFrameSidePart_ZSize * 0.5);
1172 TGeoShape* centerSteelFrameLongPartS = new TGeoBBox(
1173 TString("centerSteelFrameLongPartS") += TString("_") + frames->GetName(), centerSteelFrameLongPart_XSize * 0.5,
1174 centerSteelFrameLongPart_YSize * 0.5, centerSteelFrameLongPart_ZSize * 0.5);
1175
1176 TGeoTranslation* centerSteelFrameSidePart_pos1 = new TGeoTranslation();
1177 centerSteelFrameSidePart_pos1->SetName(TString("centerSteelFrameSidePart_pos1") +=
1178 TString("_") + frames->GetName());
1179 centerSteelFrameSidePart_pos1->SetDx(+(distanceBetweenSteelFrameSideParts + centerSteelFrameSidePart_XSize) * 0.5);
1180 centerSteelFrameSidePart_pos1->SetDy(0.0);
1181 centerSteelFrameSidePart_pos1->SetDz(0.0);
1182 centerSteelFrameSidePart_pos1->RegisterYourself();
1183
1184 TGeoTranslation* centerSteelFrameSidePart_pos2 = new TGeoTranslation();
1185 centerSteelFrameSidePart_pos2->SetName(TString("centerSteelFrameSidePart_pos2") +=
1186 TString("_") + frames->GetName());
1187 centerSteelFrameSidePart_pos2->SetDx(-(distanceBetweenSteelFrameSideParts + centerSteelFrameSidePart_XSize) * 0.5);
1188 centerSteelFrameSidePart_pos2->SetDy(0.0);
1189 centerSteelFrameSidePart_pos2->SetDz(0.0);
1190 centerSteelFrameSidePart_pos2->RegisterYourself();
1191
1192 TGeoTranslation* centerSteelFrameLongPart_top = new TGeoTranslation();
1193 centerSteelFrameLongPart_top->SetName(TString("centerSteelFrameLongPart_top") += TString("_") + frames->GetName());
1194 centerSteelFrameLongPart_top->SetDx(0.0);
1195 centerSteelFrameLongPart_top->SetDy(+(distanceBetweenSteelFrameLongParts + centerSteelFrameLongPart_YSize) * 0.5);
1196 centerSteelFrameLongPart_top->SetDz(0.0);
1197 centerSteelFrameLongPart_top->RegisterYourself();
1198
1199 TGeoTranslation* centerSteelFrameLongPart_bottom = new TGeoTranslation();
1200 centerSteelFrameLongPart_bottom->SetName(TString("centerSteelFrameLongPart_bottom") +=
1201 TString("_") + frames->GetName());
1202 centerSteelFrameLongPart_bottom->SetDx(0.0);
1203 centerSteelFrameLongPart_bottom->SetDy(-(distanceBetweenSteelFrameLongParts + centerSteelFrameLongPart_YSize)
1204 * 0.5);
1205 centerSteelFrameLongPart_bottom->SetDz(0.0);
1206 centerSteelFrameLongPart_bottom->RegisterYourself();
1207
1208 TGeoCompositeShape* centerSteelFrameS = new TGeoCompositeShape();
1209 centerSteelFrameS->SetName(TString("centerSteelFrameS") += TString("_") + frames->GetName());
1210 {
1211 TString expression = "centerSteelFrameSidePartS";
1212 expression += TString("_") + frames->GetName();
1213 expression += ":centerSteelFrameSidePart_pos1";
1214 expression += TString("_") + frames->GetName();
1215 expression += "+centerSteelFrameSidePartS";
1216 expression += TString("_") + frames->GetName();
1217 expression += ":centerSteelFrameSidePart_pos2";
1218 expression += TString("_") + frames->GetName();
1219 expression += "+centerSteelFrameLongPartS";
1220 expression += TString("_") + frames->GetName();
1221 expression += ":centerSteelFrameLongPart_top";
1222 expression += TString("_") + frames->GetName();
1223 expression += "+centerSteelFrameLongPartS";
1224 expression += TString("_") + frames->GetName();
1225 expression += ":centerSteelFrameLongPart_bottom";
1226 expression += TString("_") + frames->GetName();
1227
1228 centerSteelFrameS->MakeNode(expression);
1229 centerSteelFrameS->ComputeBBox(); // need to compute a bounding box
1230 }
1231
1232 TGeoVolume* centerSteelFrameV =
1233 new TGeoVolume(TString("centerSteelFrameV") += TString("_") + frames->GetName(), centerSteelFrameS);
1234
1235 // volume medium
1236 TGeoMedium* centerSteelFrameV_medium = pMedSteel;
1237 if (centerSteelFrameV_medium) {
1238 centerSteelFrameV->SetMedium(centerSteelFrameV_medium);
1239 } else
1240 Fatal("Main", "Invalid medium for centerSteelFrameV!");
1241
1242 // volume visual property (transparency)
1243 centerSteelFrameV->SetLineColor(TColor::GetColor("#42aaff"));
1244 centerSteelFrameV->SetTransparency(0);
1245
1246 TGeoCombiTrans* centerSteelFrame_transf[1];
1247
1248 centerSteelFrame_transf[0] = new TGeoCombiTrans();
1249 centerSteelFrame_transf[0]->SetDx(0.0);
1250 centerSteelFrame_transf[0]->SetDy(0.0);
1251 centerSteelFrame_transf[0]->SetDz(-(centerFiberGlassFrameSidePart_ZSize * 0.5 + centerSteelFrameSidePart_ZSize
1252 + centerSteelFrameSidePart_ZSize * 0.5));
1253
1254 frames->AddNode(centerSteelFrameV, 0, centerSteelFrame_transf[0]);
1255 //--------------------------------------------------------------------------
1256
1257 // upper fiberglass side block ----------------------------------------------
1258 Double_t upperFiberGlassSideBlock_XSize = 3.3; // cm
1259 Double_t upperFiberGlassSideBlock_YSize = 16.8; // cm
1260 Double_t upperFiberGlassSideBlock_ZSize = 1.6; // cm
1261
1262 TGeoShape* upperFiberGlassSideBlockS = new TGeoBBox(
1263 TString("upperFiberGlassSideBlockS") += TString("_") + frames->GetName(), upperFiberGlassSideBlock_XSize * 0.5,
1264 upperFiberGlassSideBlock_YSize * 0.5, upperFiberGlassSideBlock_ZSize * 0.5);
1265
1266 TGeoVolume* upperFiberGlassSideBlockV = new TGeoVolume(
1267 TString("upperFiberGlassSideBlockV") += TString("_") + frames->GetName(), upperFiberGlassSideBlockS);
1268
1269 // volume medium
1270 TGeoMedium* upperFiberGlassSideBlockV_medium = pMedFiberGlass;
1271 if (upperFiberGlassSideBlockV_medium) {
1272 upperFiberGlassSideBlockV->SetMedium(upperFiberGlassSideBlockV_medium);
1273 } else
1274 Fatal("Main", "Invalid medium for upperFiberGlassSideBlockV!");
1275
1276 // volume visual property (transparency)
1277 upperFiberGlassSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1278 upperFiberGlassSideBlockV->SetTransparency(0);
1279
1280 TGeoCombiTrans* upperFiberGlassSideBlock_transf[1];
1281
1282 upperFiberGlassSideBlock_transf[0] = new TGeoCombiTrans();
1283 upperFiberGlassSideBlock_transf[0]->SetDx(-(distanceBetweenFiberGlassFrameSideParts * 0.5
1284 + centerFiberGlassFrameSidePart_XSize
1285 + upperFiberGlassSideBlock_XSize * 0.5));
1286 upperFiberGlassSideBlock_transf[0]->SetDy(
1287 +(centerFiberGlassFrameSidePart_YSize * 0.5 - upperFiberGlassSideBlock_YSize * 0.5));
1288 upperFiberGlassSideBlock_transf[0]->SetDz(
1289 -(upperFiberGlassSideBlock_ZSize * 0.5 - centerFiberGlassFrameSidePart_ZSize * 0.5));
1290
1291 frames->AddNode(upperFiberGlassSideBlockV, 0, upperFiberGlassSideBlock_transf[0]);
1292 //--------------------------------------------------------------------------
1293
1294 // FRONT COVER =============================================================
1295 Double_t frontFiberGlassCover_XSize = 69.4; // cm
1296 Double_t frontFiberGlassCover_YSize = 44.6; // cm
1297 Double_t frontFiberGlassCover_ZSize = 0.692; // cm
1298
1299 Double_t frontCover_dXshift = 0.0; // cm
1300 Double_t frontCover_dYshift = +0.1 * 0.5 /*shift*/; // cm
1301 Double_t frontCover_dZshift = -centerFiberGlassFrameSidePart_ZSize * 0.5 - centerSteelFrameSidePart_ZSize
1302 - centerSteelFrameSidePart_ZSize; // cm
1303
1304 // small epoxide inner layer ------------------------------------------------
1305 Double_t smallEpoxideInnerLayer_XSize = 65.6; // cm
1306 Double_t smallEpoxideInnerLayer_YSize = 41.6; // cm
1307 Double_t smallEpoxideInnerLayer_ZSize = 0.05 + 0.01 * 0.5; // cm
1308
1309 TGeoShape* smallEpoxideInnerLayerS = new TGeoBBox(
1310 TString("smallEpoxideInnerLayerS") += TString("_") + frames->GetName(), smallEpoxideInnerLayer_XSize * 0.5,
1311 smallEpoxideInnerLayer_YSize * 0.5, smallEpoxideInnerLayer_ZSize * 0.5);
1312
1313 TGeoVolume* smallEpoxideInnerLayerV =
1314 new TGeoVolume(TString("smallEpoxideInnerLayerV") += TString("_") + frames->GetName(), smallEpoxideInnerLayerS);
1315
1316 // volume medium
1317 TGeoMedium* smallEpoxideInnerLayerV_medium = pMedEpoxideCompound;
1318 if (smallEpoxideInnerLayerV_medium) {
1319 smallEpoxideInnerLayerV->SetMedium(smallEpoxideInnerLayerV_medium);
1320 } else
1321 Fatal("Main", "Invalid medium for smallEpoxideInnerLayerV!");
1322
1323 // volume visual property (transparency)
1324 smallEpoxideInnerLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1325 smallEpoxideInnerLayerV->SetTransparency(0);
1326
1327 TGeoCombiTrans* smallEpoxideInnerLayer_transf[1];
1328
1329 smallEpoxideInnerLayer_transf[0] = new TGeoCombiTrans();
1330 smallEpoxideInnerLayer_transf[0]->SetDx(frontCover_dXshift);
1331 smallEpoxideInnerLayer_transf[0]->SetDy(frontCover_dYshift);
1332 smallEpoxideInnerLayer_transf[0]->SetDz(-smallEpoxideInnerLayer_ZSize * 0.5 + frontCover_dZshift);
1333
1334 frames->AddNode(smallEpoxideInnerLayerV, 0, smallEpoxideInnerLayer_transf[0]);
1335 //--------------------------------------------------------------------------
1336
1337 // small honeycomb layer ----------------------------------------------------
1338 Double_t smallHoneyCombLayer_XSize = 65.6; // cm
1339 Double_t smallHoneyCombLayer_YSize = 41.6; // cm
1340 Double_t smallHoneyCombLayer_ZSize = 0.592; // cm
1341
1342 TGeoShape* smallHoneyCombLayerS =
1343 new TGeoBBox(TString("smallHoneyCombLayerS") += TString("_") + frames->GetName(),
1344 smallHoneyCombLayer_XSize * 0.5, smallHoneyCombLayer_YSize * 0.5, smallHoneyCombLayer_ZSize * 0.5);
1345
1346 TGeoVolume* smallHoneyCombLayerV =
1347 new TGeoVolume(TString("smallHoneyCombLayerV") += TString("_") + frames->GetName(), smallHoneyCombLayerS);
1348
1349 // volume medium
1350 TGeoMedium* smallHoneyCombLayerV_medium = pMedHoneyComb;
1351 if (smallHoneyCombLayerV_medium) {
1352 smallHoneyCombLayerV->SetMedium(smallHoneyCombLayerV_medium);
1353 } else
1354 Fatal("Main", "Invalid medium for smallHoneyCombLayerV!");
1355
1356 // volume visual property (transparency)
1357 smallHoneyCombLayerV->SetLineColor(TColor::GetColor("#ffdf84"));
1358 smallHoneyCombLayerV->SetTransparency(0);
1359
1360 TGeoCombiTrans* smallHoneyCombLayer_transf[1];
1361
1362 smallHoneyCombLayer_transf[0] = new TGeoCombiTrans();
1363 smallHoneyCombLayer_transf[0]->SetDx(frontCover_dXshift);
1364 smallHoneyCombLayer_transf[0]->SetDy(frontCover_dYshift);
1365 smallHoneyCombLayer_transf[0]->SetDz(-smallHoneyCombLayer_ZSize * 0.5 - smallEpoxideInnerLayer_ZSize
1366 + frontCover_dZshift);
1367
1368 frames->AddNode(smallHoneyCombLayerV, 0, smallHoneyCombLayer_transf[0]);
1369 //--------------------------------------------------------------------------
1370
1371 // small epoxide outer layer ------------------------------------------------
1372 Double_t smallEpoxideOuterLayer_XSize = 65.6; // cm
1373 Double_t smallEpoxideOuterLayer_YSize = 41.6; // cm
1374 Double_t smallEpoxideOuterLayer_ZSize = 0.05; // cm
1375
1376 TGeoShape* smallEpoxideOuterLayerS = new TGeoBBox(
1377 TString("smallEpoxideOuterLayerS") += TString("_") + frames->GetName(), smallEpoxideOuterLayer_XSize * 0.5,
1378 smallEpoxideOuterLayer_YSize * 0.5, smallEpoxideOuterLayer_ZSize * 0.5);
1379
1380 TGeoVolume* smallEpoxideOuterLayerV =
1381 new TGeoVolume(TString("smallEpoxideOuterLayerV") += TString("_") + frames->GetName(), smallEpoxideOuterLayerS);
1382
1383 // volume medium
1384 TGeoMedium* smallEpoxideOuterLayerV_medium = pMedEpoxideCompound;
1385 if (smallEpoxideOuterLayerV_medium) {
1386 smallEpoxideOuterLayerV->SetMedium(smallEpoxideOuterLayerV_medium);
1387 } else
1388 Fatal("Main", "Invalid medium for smallEpoxideOuterLayerV!");
1389
1390 // volume visual property (transparency)
1391 smallEpoxideOuterLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1392 smallEpoxideOuterLayerV->SetTransparency(0);
1393
1394 TGeoCombiTrans* smallEpoxideOuterLayer_transf[1];
1395
1396 smallEpoxideOuterLayer_transf[0] = new TGeoCombiTrans();
1397 smallEpoxideOuterLayer_transf[0]->SetDx(frontCover_dXshift);
1398 smallEpoxideOuterLayer_transf[0]->SetDy(frontCover_dYshift);
1399 smallEpoxideOuterLayer_transf[0]->SetDz(-smallEpoxideOuterLayer_ZSize * 0.5 - smallHoneyCombLayer_ZSize
1400 - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1401
1402 frames->AddNode(smallEpoxideOuterLayerV, 0, smallEpoxideOuterLayer_transf[0]);
1403 //--------------------------------------------------------------------------
1404
1405 // small fiberglass frame ---------------------------------------------------
1406 Double_t smallFiberGlassFrameLowerPart_XSize = 65.6; // cm
1407 Double_t smallFiberGlassFrameLowerPart_YSize = 1.55; // cm
1408 Double_t smallFiberGlassFrameLowerPart_ZSize = 0.692; // cm
1409
1410 Double_t smallFiberGlassFrameUpperPart_XSize = 65.6; // cm
1411 Double_t smallFiberGlassFrameUpperPart_YSize = 1.45; // cm
1412 Double_t smallFiberGlassFrameUpperPart_ZSize = 0.692; // cm
1413
1414 Double_t smallFiberGlassFrameSidePart_XSize = 1.9; // cm
1415 Double_t smallFiberGlassFrameSidePart_YSize = 44.6; // cm
1416 Double_t smallFiberGlassFrameSidePart_ZSize = 0.692; // cm
1417
1418 TGeoShape* smallFiberGlassFrameLowerPartS =
1419 new TGeoBBox(TString("smallFiberGlassFrameLowerPartS") += TString("_") + frames->GetName(),
1420 smallFiberGlassFrameLowerPart_XSize * 0.5, smallFiberGlassFrameLowerPart_YSize * 0.5,
1421 smallFiberGlassFrameLowerPart_ZSize * 0.5);
1422 TGeoShape* smallFiberGlassFrameUpperPartS =
1423 new TGeoBBox(TString("smallFiberGlassFrameUpperPartS") += TString("_") + frames->GetName(),
1424 smallFiberGlassFrameUpperPart_XSize * 0.5, smallFiberGlassFrameUpperPart_YSize * 0.5,
1425 smallFiberGlassFrameUpperPart_ZSize * 0.5);
1426 TGeoShape* smallFiberGlassFrameSidePartS =
1427 new TGeoBBox(TString("smallFiberGlassFrameSidePartS") += TString("_") + frames->GetName(),
1428 smallFiberGlassFrameSidePart_XSize * 0.5, smallFiberGlassFrameSidePart_YSize * 0.5,
1429 smallFiberGlassFrameSidePart_ZSize * 0.5);
1430
1431 TGeoTranslation* smallFiberGlassFrameLowerPart_pos = new TGeoTranslation();
1432 smallFiberGlassFrameLowerPart_pos->SetName(TString("smallFiberGlassFrameLowerPart_pos") +=
1433 TString("_") + frames->GetName());
1434 smallFiberGlassFrameLowerPart_pos->SetDx(0.0);
1435 smallFiberGlassFrameLowerPart_pos->SetDy(-smallEpoxideInnerLayer_YSize * 0.5
1436 - smallFiberGlassFrameLowerPart_YSize * 0.5);
1437 smallFiberGlassFrameLowerPart_pos->SetDz(0.0);
1438 smallFiberGlassFrameLowerPart_pos->RegisterYourself();
1439
1440 TGeoTranslation* smallFiberGlassFrameUpperPart_pos = new TGeoTranslation();
1441 smallFiberGlassFrameUpperPart_pos->SetName(TString("smallFiberGlassFrameUpperPart_pos") +=
1442 TString("_") + frames->GetName());
1443 smallFiberGlassFrameUpperPart_pos->SetDx(0.0);
1444 smallFiberGlassFrameUpperPart_pos->SetDy(smallEpoxideInnerLayer_YSize * 0.5
1445 + smallFiberGlassFrameUpperPart_YSize * 0.5);
1446 smallFiberGlassFrameUpperPart_pos->SetDz(0.0);
1447 smallFiberGlassFrameUpperPart_pos->RegisterYourself();
1448
1449 TGeoTranslation* smallFiberGlassFrameSidePart_pos1 = new TGeoTranslation();
1450 smallFiberGlassFrameSidePart_pos1->SetName(TString("smallFiberGlassFrameSidePart_pos1") +=
1451 TString("_") + frames->GetName());
1452 smallFiberGlassFrameSidePart_pos1->SetDx(smallEpoxideInnerLayer_XSize * 0.5
1453 + smallFiberGlassFrameSidePart_XSize * 0.5);
1454 smallFiberGlassFrameSidePart_pos1->SetDy((smallFiberGlassFrameUpperPart_YSize - smallFiberGlassFrameLowerPart_YSize)
1455 * 0.5);
1456 smallFiberGlassFrameSidePart_pos1->SetDz(0.0);
1457 smallFiberGlassFrameSidePart_pos1->RegisterYourself();
1458
1459 TGeoTranslation* smallFiberGlassFrameSidePart_pos2 = new TGeoTranslation();
1460 smallFiberGlassFrameSidePart_pos2->SetName(TString("smallFiberGlassFrameSidePart_pos2") +=
1461 TString("_") + frames->GetName());
1462 smallFiberGlassFrameSidePart_pos2->SetDx(
1463 -(smallEpoxideInnerLayer_XSize * 0.5 + smallFiberGlassFrameSidePart_XSize * 0.5));
1464 smallFiberGlassFrameSidePart_pos2->SetDy((smallFiberGlassFrameUpperPart_YSize - smallFiberGlassFrameLowerPart_YSize)
1465 * 0.5);
1466 smallFiberGlassFrameSidePart_pos2->SetDz(0.0);
1467 smallFiberGlassFrameSidePart_pos2->RegisterYourself();
1468
1469 TGeoCompositeShape* smallFiberGlassFrameS = new TGeoCompositeShape();
1470 smallFiberGlassFrameS->SetName(TString("smallFiberGlassFrameS") += TString("_") + frames->GetName());
1471 {
1472 TString expression = "smallFiberGlassFrameLowerPartS";
1473 expression += TString("_") + frames->GetName();
1474 expression += ":smallFiberGlassFrameLowerPart_pos";
1475 expression += TString("_") + frames->GetName();
1476 expression += "+smallFiberGlassFrameUpperPartS";
1477 expression += TString("_") + frames->GetName();
1478 expression += ":smallFiberGlassFrameUpperPart_pos";
1479 expression += TString("_") + frames->GetName();
1480 expression += "+smallFiberGlassFrameSidePartS";
1481 expression += TString("_") + frames->GetName();
1482 expression += ":smallFiberGlassFrameSidePart_pos1";
1483 expression += TString("_") + frames->GetName();
1484 expression += "+smallFiberGlassFrameSidePartS";
1485 expression += TString("_") + frames->GetName();
1486 expression += ":smallFiberGlassFrameSidePart_pos2";
1487 expression += TString("_") + frames->GetName();
1488
1489 smallFiberGlassFrameS->MakeNode(expression);
1490 smallFiberGlassFrameS->ComputeBBox(); // need to compute a bounding box
1491 }
1492
1493 TGeoVolume* smallFiberGlassFrameV =
1494 new TGeoVolume(TString("smallFiberGlassFrameV") += TString("_") + frames->GetName(), smallFiberGlassFrameS);
1495
1496 // volume medium
1497 TGeoMedium* smallFiberGlassFrameV_medium = pMedFiberGlass;
1498 if (smallFiberGlassFrameV_medium) {
1499 smallFiberGlassFrameV->SetMedium(smallFiberGlassFrameV_medium);
1500 } else
1501 Fatal("Main", "Invalid medium for smallFiberGlassFrameV!");
1502
1503 // volume visual property (transparency)
1504 smallFiberGlassFrameV->SetLineColor(TColor::GetColor("#ccffcc"));
1505 smallFiberGlassFrameV->SetTransparency(0);
1506
1507 TGeoCombiTrans* smallFiberGlassFrame_transf[1];
1508
1509 smallFiberGlassFrame_transf[0] = new TGeoCombiTrans();
1510 smallFiberGlassFrame_transf[0]->SetDx(frontCover_dXshift);
1511 smallFiberGlassFrame_transf[0]->SetDy(frontCover_dYshift);
1512 smallFiberGlassFrame_transf[0]->SetDz(-smallFiberGlassFrameLowerPart_ZSize * 0.5 + frontCover_dZshift);
1513
1514 frames->AddNode(smallFiberGlassFrameV, 0, smallFiberGlassFrame_transf[0]);
1515 //--------------------------------------------------------------------------
1516
1517 // small glue layer ---------------------------------------------------------
1518 Double_t smallGlueLayer_XSize = 69.4; // cm
1519 Double_t smallGlueLayer_YSize = 44.6; // cm
1520 Double_t smallGlueLayer_ZSize = 0.005 + 0.005; // cm (total one side thickness)
1521
1522 TGeoShape* smallGlueLayerS =
1523 new TGeoBBox(TString("smallGlueLayerS") += TString("_") + frames->GetName(), smallGlueLayer_XSize * 0.5,
1524 smallGlueLayer_YSize * 0.5, smallGlueLayer_ZSize * 0.5);
1525
1526 TGeoVolume* smallGlueLayerV =
1527 new TGeoVolume(TString("smallGlueLayerV") += TString("_") + frames->GetName(), smallGlueLayerS);
1528
1529 // volume medium
1530 TGeoMedium* smallGlueLayerV_medium = pMedGlue;
1531 if (smallGlueLayerV_medium) {
1532 smallGlueLayerV->SetMedium(smallGlueLayerV_medium);
1533 } else
1534 Fatal("Main", "Invalid medium for smallGlueLayerV!");
1535
1536 // volume visual property (transparency)
1537 smallGlueLayerV->SetLineColor(TColor::GetColor("#eeeeee"));
1538 smallGlueLayerV->SetTransparency(0);
1539
1540 TGeoCombiTrans* smallGlueLayer_transf[1];
1541
1542 smallGlueLayer_transf[0] = new TGeoCombiTrans();
1543 smallGlueLayer_transf[0]->SetDx(0.0);
1544 smallGlueLayer_transf[0]->SetDy(0.0);
1545 smallGlueLayer_transf[0]->SetDz(-smallGlueLayer_ZSize * 0.5 - smallEpoxideOuterLayer_ZSize
1546 - smallHoneyCombLayer_ZSize - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1547
1548 frames->AddNode(smallGlueLayerV, 0, smallGlueLayer_transf[0]);
1549 //--------------------------------------------------------------------------
1550
1551 // small polyamide layer ----------------------------------------------------
1552 Double_t smallPolyamideLayer_XSize = 69.4; // cm
1553 Double_t smallPolyamideLayer_YSize = 44.6; // cm
1554 Double_t smallPolyamideLayer_ZSize = 0.02 * 0.5; // cm
1555
1556 TGeoShape* smallPolyamideLayerS =
1557 new TGeoBBox(TString("smallPolyamideLayerS") += TString("_") + frames->GetName(),
1558 smallPolyamideLayer_XSize * 0.5, smallPolyamideLayer_YSize * 0.5, smallPolyamideLayer_ZSize * 0.5);
1559
1560 TGeoVolume* smallPolyamideLayerV =
1561 new TGeoVolume(TString("smallPolyamideLayerV") += TString("_") + frames->GetName(), smallPolyamideLayerS);
1562
1563 // volume medium
1564 TGeoMedium* smallPolyamideLayerV_medium = pMedPolyamide;
1565 if (smallPolyamideLayerV_medium) {
1566 smallPolyamideLayerV->SetMedium(smallPolyamideLayerV_medium);
1567 } else
1568 Fatal("Main", "Invalid medium for smallPolyamideLayerV!");
1569
1570 // volume visual property (transparency)
1571 smallPolyamideLayerV->SetLineColor(TColor::GetColor("#fefe22"));
1572 smallPolyamideLayerV->SetTransparency(0);
1573
1574 TGeoCombiTrans* smallPolyamideLayer_transf[1];
1575
1576 smallPolyamideLayer_transf[0] = new TGeoCombiTrans();
1577 smallPolyamideLayer_transf[0]->SetDx(0.0);
1578 smallPolyamideLayer_transf[0]->SetDy(0.0);
1579 smallPolyamideLayer_transf[0]->SetDz(-smallPolyamideLayer_ZSize * 0.5 - smallGlueLayer_ZSize
1580 - smallEpoxideOuterLayer_ZSize - smallHoneyCombLayer_ZSize
1581 - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1582
1583 frames->AddNode(smallPolyamideLayerV, 0, smallPolyamideLayer_transf[0]);
1584 //--------------------------------------------------------------------------
1585
1586 // small copper layer ------------------------------------------------
1587 Double_t smallCopperLayer_XSize = 69.4; // cm
1588 Double_t smallCopperLayer_YSize = 44.6; // cm
1589 Double_t smallCopperLayer_ZSize = 0.0035 + 0.0061 * 0.5 /*inside gem*/; // cm
1590
1591 TGeoShape* smallCopperLayerS =
1592 new TGeoBBox(TString("smallCopperLayerS") += TString("_") + frames->GetName(), smallCopperLayer_XSize * 0.5,
1593 smallCopperLayer_YSize * 0.5, smallCopperLayer_ZSize * 0.5);
1594
1595 TGeoVolume* smallCopperLayerV =
1596 new TGeoVolume(TString("smallCopperLayerV") += TString("_") + frames->GetName(), smallCopperLayerS);
1597
1598 // volume medium
1599 TGeoMedium* smallCopperLayerV_medium = pMedCopper;
1600 if (smallCopperLayerV_medium) {
1601 smallCopperLayerV->SetMedium(smallCopperLayerV_medium);
1602 } else
1603 Fatal("Main", "Invalid medium for smallCopperLayerV!");
1604
1605 // volume visual property (transparency)
1606 smallCopperLayerV->SetLineColor(TColor::GetColor("#ff7538"));
1607 smallCopperLayerV->SetTransparency(0);
1608
1609 TGeoCombiTrans* smallCopperLayer_transf[1];
1610
1611 smallCopperLayer_transf[0] = new TGeoCombiTrans();
1612 smallCopperLayer_transf[0]->SetDx(0.0);
1613 smallCopperLayer_transf[0]->SetDy(0.0);
1614 smallCopperLayer_transf[0]->SetDz(-smallCopperLayer_ZSize * 0.5 - smallPolyamideLayer_ZSize - smallGlueLayer_ZSize
1615 - smallEpoxideOuterLayer_ZSize - smallHoneyCombLayer_ZSize
1616 - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1617
1618 frames->AddNode(smallCopperLayerV, 0, smallCopperLayer_transf[0]);
1619 //--------------------------------------------------------------------------
1620 //==========================================================================
1621
1622 // BACK COVER ===============================================================
1623 Double_t backFiberGlassCover_XSize = 75.3; // cm
1624 Double_t backFiberGlassCover_YSize = 48.5; // cm
1625 Double_t backFiberGlassCover_ZSize = 0.662; // cm
1626
1627 Double_t backCover_dXshift = -0.075 /*shift*/; // cm
1628 Double_t backCover_dYshift = -0.125 /*shift*/; // cm
1629 Double_t backCover_dZshift = centerFiberGlassFrameSidePart_ZSize * 0.5 + 0.005; // cm
1630
1631 // big epoxide inner layer ------------------------------------------------
1632 Double_t bigEpoxideInnerLayer_XSize = 65.95; // cm
1633 Double_t bigEpoxideInnerLayer_YSize = 40.85; // cm
1634 Double_t bigEpoxideInnerLayer_ZSize = 0.05 + 0.01 * 0.5; // cm
1635
1636 TGeoShape* bigEpoxideInnerLayerS = new TGeoBBox(
1637 TString("bigEpoxideInnerLayerS") += TString("_") + frames->GetName(), bigEpoxideInnerLayer_XSize * 0.5,
1638 bigEpoxideInnerLayer_YSize * 0.5, bigEpoxideInnerLayer_ZSize * 0.5);
1639
1640 TGeoVolume* bigEpoxideInnerLayerV =
1641 new TGeoVolume(TString("bigEpoxideInnerLayerV") += TString("_") + frames->GetName(), bigEpoxideInnerLayerS);
1642
1643 // volume medium
1644 TGeoMedium* bigEpoxideInnerLayerV_medium = pMedEpoxideCompound;
1645 if (bigEpoxideInnerLayerV_medium) {
1646 bigEpoxideInnerLayerV->SetMedium(bigEpoxideInnerLayerV_medium);
1647 } else
1648 Fatal("Main", "Invalid medium for bigEpoxideInnerLayerV!");
1649
1650 // volume visual property (transparency)
1651 bigEpoxideInnerLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1652 bigEpoxideInnerLayerV->SetTransparency(0);
1653
1654 TGeoCombiTrans* bigEpoxideInnerLayer_transf[1];
1655
1656 bigEpoxideInnerLayer_transf[0] = new TGeoCombiTrans();
1657 bigEpoxideInnerLayer_transf[0]->SetDx(backCover_dXshift);
1658 bigEpoxideInnerLayer_transf[0]->SetDy(backCover_dYshift);
1659 bigEpoxideInnerLayer_transf[0]->SetDz(bigEpoxideInnerLayer_ZSize * 0.5 + backCover_dZshift);
1660
1661 frames->AddNode(bigEpoxideInnerLayerV, 0, bigEpoxideInnerLayer_transf[0]);
1662 //--------------------------------------------------------------------------
1663
1664 // big honeycomb layer ----------------------------------------------------
1665 Double_t bigHoneyCombLayer_XSize = 65.95; // cm
1666 Double_t bigHoneyCombLayer_YSize = 40.85; // cm
1667 Double_t bigHoneyCombLayer_ZSize = 0.562; // cm
1668
1669 TGeoShape* bigHoneyCombLayerS =
1670 new TGeoBBox(TString("bigHoneyCombLayerS") += TString("_") + frames->GetName(), bigHoneyCombLayer_XSize * 0.5,
1671 bigHoneyCombLayer_YSize * 0.5, bigHoneyCombLayer_ZSize * 0.5);
1672
1673 TGeoVolume* bigHoneyCombLayerV =
1674 new TGeoVolume(TString("bigHoneyCombLayerV") += TString("_") + frames->GetName(), bigHoneyCombLayerS);
1675
1676 // volume medium
1677 TGeoMedium* bigHoneyCombLayerV_medium = pMedHoneyComb;
1678 if (bigHoneyCombLayerV_medium) {
1679 bigHoneyCombLayerV->SetMedium(bigHoneyCombLayerV_medium);
1680 } else
1681 Fatal("Main", "Invalid medium for bigHoneyCombLayerV!");
1682
1683 // volume visual property (transparency)
1684 bigHoneyCombLayerV->SetLineColor(TColor::GetColor("#ffdf84"));
1685 bigHoneyCombLayerV->SetTransparency(0);
1686
1687 TGeoCombiTrans* bigHoneyCombLayer_transf[1];
1688
1689 bigHoneyCombLayer_transf[0] = new TGeoCombiTrans();
1690 bigHoneyCombLayer_transf[0]->SetDx(backCover_dXshift);
1691 bigHoneyCombLayer_transf[0]->SetDy(backCover_dYshift);
1692 bigHoneyCombLayer_transf[0]->SetDz(bigHoneyCombLayer_ZSize * 0.5 + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
1693
1694 frames->AddNode(bigHoneyCombLayerV, 0, bigHoneyCombLayer_transf[0]);
1695 //--------------------------------------------------------------------------
1696
1697 // big epoxide outer layer --------------------------------------------------
1698 Double_t bigEpoxideOuterLayer_XSize = 65.95; // cm
1699 Double_t bigEpoxideOuterLayer_YSize = 40.85; // cm
1700 Double_t bigEpoxideOuterLayer_ZSize = 0.05; // cm
1701
1702 TGeoShape* bigEpoxideOuterLayerS = new TGeoBBox(
1703 TString("bigEpoxideOuterLayerS") += TString("_") + frames->GetName(), bigEpoxideOuterLayer_XSize * 0.5,
1704 bigEpoxideOuterLayer_YSize * 0.5, bigEpoxideOuterLayer_ZSize * 0.5);
1705
1706 TGeoVolume* bigEpoxideOuterLayerV =
1707 new TGeoVolume(TString("bigEpoxideOuterLayerV") += TString("_") + frames->GetName(), bigEpoxideOuterLayerS);
1708
1709 // volume medium
1710 TGeoMedium* bigEpoxideOuterLayerV_medium = pMedEpoxideCompound;
1711 if (bigEpoxideOuterLayerV_medium) {
1712 bigEpoxideOuterLayerV->SetMedium(bigEpoxideOuterLayerV_medium);
1713 } else
1714 Fatal("Main", "Invalid medium for bigEpoxideOuterLayerV!");
1715
1716 // volume visual property (transparency)
1717 bigEpoxideOuterLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1718 bigEpoxideOuterLayerV->SetTransparency(0);
1719
1720 TGeoCombiTrans* bigEpoxideOuterLayer_transf[1];
1721
1722 bigEpoxideOuterLayer_transf[0] = new TGeoCombiTrans();
1723 bigEpoxideOuterLayer_transf[0]->SetDx(backCover_dXshift);
1724 bigEpoxideOuterLayer_transf[0]->SetDy(backCover_dYshift);
1725 bigEpoxideOuterLayer_transf[0]->SetDz(bigEpoxideOuterLayer_ZSize * 0.5 + bigHoneyCombLayer_ZSize
1726 + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
1727
1728 frames->AddNode(bigEpoxideOuterLayerV, 0, bigEpoxideOuterLayer_transf[0]);
1729 //--------------------------------------------------------------------------
1730
1731 // big fiberglass frame -----------------------------------------------------
1732 Double_t bigFiberGlassFrameLowerPart_XSize = 65.95; // cm
1733 Double_t bigFiberGlassFrameLowerPart_YSize = 1.75; // cm
1734 Double_t bigFiberGlassFrameLowerPart_ZSize = 0.662; // cm
1735
1736 Double_t bigFiberGlassFrameUpperPart_XSize = 65.95; // cm
1737 Double_t bigFiberGlassFrameUpperPart_YSize = 5.9; // cm
1738 Double_t bigFiberGlassFrameUpperPart_ZSize = 0.662; // cm
1739
1740 Double_t bigFiberGlassFrameSmallSidePart_XSize = 1.8; // cm
1741 Double_t bigFiberGlassFrameSmallSidePart_YSize = 48.5; // cm
1742 Double_t bigFiberGlassFrameSmallSidePart_ZSize = 0.662; // cm
1743
1744 Double_t bigFiberGlassFrameBigSidePart_XSize = 7.55; // cm
1745 Double_t bigFiberGlassFrameBigSidePart_YSize = 48.5; // cm
1746 Double_t bigFiberGlassFrameBigSidePart_ZSize = 0.662; // cm
1747
1748 TGeoShape* bigFiberGlassFrameLowerPartS =
1749 new TGeoBBox(TString("bigFiberGlassFrameLowerPartS") += TString("_") + frames->GetName(),
1750 bigFiberGlassFrameLowerPart_XSize * 0.5, bigFiberGlassFrameLowerPart_YSize * 0.5,
1751 bigFiberGlassFrameLowerPart_ZSize * 0.5);
1752 TGeoShape* bigFiberGlassFrameUpperPartS =
1753 new TGeoBBox(TString("bigFiberGlassFrameUpperPartS") += TString("_") + frames->GetName(),
1754 bigFiberGlassFrameUpperPart_XSize * 0.5, bigFiberGlassFrameUpperPart_YSize * 0.5,
1755 bigFiberGlassFrameUpperPart_ZSize * 0.5);
1756 TGeoShape* bigFiberGlassFrameSmallSidePartS =
1757 new TGeoBBox(TString("bigFiberGlassFrameSmallSidePartS") += TString("_") + frames->GetName(),
1758 bigFiberGlassFrameSmallSidePart_XSize * 0.5, bigFiberGlassFrameSmallSidePart_YSize * 0.5,
1759 bigFiberGlassFrameSmallSidePart_ZSize * 0.5);
1760 TGeoShape* bigFiberGlassFrameBigSidePartS =
1761 new TGeoBBox(TString("bigFiberGlassFrameBigSidePartS") += TString("_") + frames->GetName(),
1762 bigFiberGlassFrameBigSidePart_XSize * 0.5, bigFiberGlassFrameBigSidePart_YSize * 0.5,
1763 bigFiberGlassFrameBigSidePart_ZSize * 0.5);
1764
1765 TGeoTranslation* bigFiberGlassFrameLowerPart_pos = new TGeoTranslation();
1766 bigFiberGlassFrameLowerPart_pos->SetName(TString("bigFiberGlassFrameLowerPart_pos") +=
1767 TString("_") + frames->GetName());
1768 bigFiberGlassFrameLowerPart_pos->SetDx(0.0);
1769 bigFiberGlassFrameLowerPart_pos->SetDy(-bigEpoxideInnerLayer_YSize * 0.5 - bigFiberGlassFrameLowerPart_YSize * 0.5);
1770 bigFiberGlassFrameLowerPart_pos->SetDz(0.0);
1771 bigFiberGlassFrameLowerPart_pos->RegisterYourself();
1772
1773 TGeoTranslation* bigFiberGlassFrameUpperPart_pos = new TGeoTranslation();
1774 bigFiberGlassFrameUpperPart_pos->SetName(TString("bigFiberGlassFrameUpperPart_pos") +=
1775 TString("_") + frames->GetName());
1776 bigFiberGlassFrameUpperPart_pos->SetDx(0.0);
1777 bigFiberGlassFrameUpperPart_pos->SetDy(bigEpoxideInnerLayer_YSize * 0.5 + bigFiberGlassFrameUpperPart_YSize * 0.5);
1778 bigFiberGlassFrameUpperPart_pos->SetDz(0.0);
1779 bigFiberGlassFrameUpperPart_pos->RegisterYourself();
1780
1781 TGeoTranslation* bigFiberGlassFrameSmallSidePart_pos = new TGeoTranslation();
1782 bigFiberGlassFrameSmallSidePart_pos->SetName(TString("bigFiberGlassFrameSmallSidePart_pos") +=
1783 TString("_") + frames->GetName());
1784 bigFiberGlassFrameSmallSidePart_pos->SetDx(bigEpoxideInnerLayer_XSize * 0.5
1785 + bigFiberGlassFrameSmallSidePart_XSize * 0.5);
1786 bigFiberGlassFrameSmallSidePart_pos->SetDy((bigFiberGlassFrameUpperPart_YSize - bigFiberGlassFrameLowerPart_YSize)
1787 * 0.5);
1788 bigFiberGlassFrameSmallSidePart_pos->SetDz(0.0);
1789 bigFiberGlassFrameSmallSidePart_pos->RegisterYourself();
1790
1791 TGeoTranslation* bigFiberGlassFrameBigSidePart_pos = new TGeoTranslation();
1792 bigFiberGlassFrameBigSidePart_pos->SetName(TString("bigFiberGlassFrameBigSidePart_pos") +=
1793 TString("_") + frames->GetName());
1794 bigFiberGlassFrameBigSidePart_pos->SetDx(
1795 -(bigEpoxideInnerLayer_XSize * 0.5 + bigFiberGlassFrameBigSidePart_XSize * 0.5));
1796 bigFiberGlassFrameBigSidePart_pos->SetDy((bigFiberGlassFrameUpperPart_YSize - bigFiberGlassFrameLowerPart_YSize)
1797 * 0.5);
1798 bigFiberGlassFrameBigSidePart_pos->SetDz(0.0);
1799 bigFiberGlassFrameBigSidePart_pos->RegisterYourself();
1800
1801 TGeoCompositeShape* bigFiberGlassFrameS = new TGeoCompositeShape();
1802 bigFiberGlassFrameS->SetName(TString("bigFiberGlassFrameS") += TString("_") + frames->GetName());
1803 {
1804 TString expression = "bigFiberGlassFrameLowerPartS";
1805 expression += TString("_") + frames->GetName();
1806 expression += ":bigFiberGlassFrameLowerPart_pos";
1807 expression += TString("_") + frames->GetName();
1808 expression += "+bigFiberGlassFrameUpperPartS";
1809 expression += TString("_") + frames->GetName();
1810 expression += ":bigFiberGlassFrameUpperPart_pos";
1811 expression += TString("_") + frames->GetName();
1812 expression += "+bigFiberGlassFrameSmallSidePartS";
1813 expression += TString("_") + frames->GetName();
1814 expression += ":bigFiberGlassFrameSmallSidePart_pos";
1815 expression += TString("_") + frames->GetName();
1816 expression += "+bigFiberGlassFrameBigSidePartS";
1817 expression += TString("_") + frames->GetName();
1818 expression += ":bigFiberGlassFrameBigSidePart_pos";
1819 expression += TString("_") + frames->GetName();
1820
1821 bigFiberGlassFrameS->MakeNode(expression);
1822 bigFiberGlassFrameS->ComputeBBox(); // need to compute a bounding box
1823 }
1824
1825 TGeoVolume* bigFiberGlassFrameV =
1826 new TGeoVolume(TString("bigFiberGlassFrameV") += TString("_") + frames->GetName(), bigFiberGlassFrameS);
1827
1828 // volume medium
1829 TGeoMedium* bigFiberGlassFrameV_medium = pMedFiberGlass;
1830 if (bigFiberGlassFrameV_medium) {
1831 bigFiberGlassFrameV->SetMedium(bigFiberGlassFrameV_medium);
1832 } else
1833 Fatal("Main", "Invalid medium for bigFiberGlassFrameV!");
1834
1835 // volume visual property (transparency)
1836 bigFiberGlassFrameV->SetLineColor(TColor::GetColor("#ccffcc"));
1837 bigFiberGlassFrameV->SetTransparency(0);
1838
1839 TGeoCombiTrans* bigFiberGlassFrame_transf[1];
1840
1841 bigFiberGlassFrame_transf[0] = new TGeoCombiTrans();
1842 bigFiberGlassFrame_transf[0]->SetDx(backCover_dXshift);
1843 bigFiberGlassFrame_transf[0]->SetDy(backCover_dYshift);
1844 bigFiberGlassFrame_transf[0]->SetDz(bigFiberGlassFrameLowerPart_ZSize * 0.5 + backCover_dZshift);
1845
1846 frames->AddNode(bigFiberGlassFrameV, 0, bigFiberGlassFrame_transf[0]);
1847 //--------------------------------------------------------------------------
1848
1849 // big glue layer -----------------------------------------------------------
1850 Double_t bigGlueLayer_XSize = 75.3; // cm
1851 Double_t bigGlueLayer_YSize = 48.5; // cm
1852 Double_t bigGlueLayer_ZSize = 0.005 + 0.005; // cm (total one side thickness)
1853
1854 TGeoShape* bigGlueLayerS =
1855 new TGeoBBox(TString("bigGlueLayerS") += TString("_") + frames->GetName(), bigGlueLayer_XSize * 0.5,
1856 bigGlueLayer_YSize * 0.5, bigGlueLayer_ZSize * 0.5);
1857
1858 TGeoVolume* bigGlueLayerV =
1859 new TGeoVolume(TString("bigGlueLayerV") += TString("_") + frames->GetName(), bigGlueLayerS);
1860
1861 // volume medium
1862 TGeoMedium* bigGlueLayerV_medium = pMedGlue;
1863 if (bigGlueLayerV_medium) {
1864 bigGlueLayerV->SetMedium(bigGlueLayerV_medium);
1865 } else
1866 Fatal("Main", "Invalid medium for bigGlueLayerV!");
1867
1868 // volume visual property (transparency)
1869 bigGlueLayerV->SetLineColor(TColor::GetColor("#eeeeee"));
1870 bigGlueLayerV->SetTransparency(0);
1871
1872 TGeoCombiTrans* bigGlueLayer_transf[1];
1873
1874 bigGlueLayer_transf[0] = new TGeoCombiTrans();
1875 bigGlueLayer_transf[0]->SetDx(-2.95 /*shift*/);
1876 bigGlueLayer_transf[0]->SetDy(+1.95 /*shift*/);
1877 bigGlueLayer_transf[0]->SetDz(bigGlueLayer_ZSize * 0.5 + bigEpoxideOuterLayer_ZSize + bigHoneyCombLayer_ZSize
1878 + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
1879
1880 frames->AddNode(bigGlueLayerV, 0, bigGlueLayer_transf[0]);
1881 //--------------------------------------------------------------------------
1882
1883 // big polyamide layer ------------------------------------------------------
1884 Double_t bigPolyamideLayer_XSize = 75.3; // cm
1885 Double_t bigPolyamideLayer_YSize = 48.5; // cm
1886 Double_t bigPolyamideLayer_ZSize = 0.02 * 0.5; // cm (total one side thickness)
1887
1888 TGeoShape* bigPolyamideLayerS =
1889 new TGeoBBox(TString("bigPolyamideLayerS") += TString("_") + frames->GetName(), bigPolyamideLayer_XSize * 0.5,
1890 bigPolyamideLayer_YSize * 0.5, bigPolyamideLayer_ZSize * 0.5);
1891
1892 TGeoVolume* bigPolyamideLayerV =
1893 new TGeoVolume(TString("bigPolyamideLayerV") += TString("_") + frames->GetName(), bigPolyamideLayerS);
1894
1895 // volume medium
1896 TGeoMedium* bigPolyamideLayerV_medium = pMedPolyamide;
1897 if (bigPolyamideLayerV_medium) {
1898 bigPolyamideLayerV->SetMedium(bigPolyamideLayerV_medium);
1899 } else
1900 Fatal("Main", "Invalid medium for bigPolyamideLayerV!");
1901
1902 // volume visual property (transparency)
1903 bigPolyamideLayerV->SetLineColor(TColor::GetColor("#fefe22"));
1904 bigPolyamideLayerV->SetTransparency(0);
1905
1906 TGeoCombiTrans* bigPolyamideLayer_transf[1];
1907
1908 bigPolyamideLayer_transf[0] = new TGeoCombiTrans();
1909 bigPolyamideLayer_transf[0]->SetDx(-2.95 /*shift*/);
1910 bigPolyamideLayer_transf[0]->SetDy(+1.95 /*shift*/);
1911 bigPolyamideLayer_transf[0]->SetDz(bigPolyamideLayer_ZSize * 0.5 + bigGlueLayer_ZSize + bigEpoxideOuterLayer_ZSize
1912 + bigHoneyCombLayer_ZSize + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
1913
1914 frames->AddNode(bigPolyamideLayerV, 0, bigPolyamideLayer_transf[0]);
1915 //--------------------------------------------------------------------------
1916
1917 // big copper layer ---------------------------------------------------------
1918 Double_t bigCopperLayer_XSize = 75.3; // cm
1919 Double_t bigCopperLayer_YSize = 48.5; // cm
1920 Double_t bigCopperLayer_ZSize = 0.0035 + 0.0061 * 0.5 /*inside gem*/; // cm
1921
1922 TGeoShape* bigCopperLayerS =
1923 new TGeoBBox(TString("bigCopperLayerS") += TString("_") + frames->GetName(), bigCopperLayer_XSize * 0.5,
1924 bigCopperLayer_YSize * 0.5, bigCopperLayer_ZSize * 0.5);
1925
1926 TGeoVolume* bigCopperLayerV =
1927 new TGeoVolume(TString("bigCopperLayerV") += TString("_") + frames->GetName(), bigCopperLayerS);
1928
1929 // volume medium
1930 TGeoMedium* bigCopperLayerV_medium = pMedCopper;
1931 if (bigCopperLayerV_medium) {
1932 bigCopperLayerV->SetMedium(bigCopperLayerV_medium);
1933 } else
1934 Fatal("Main", "Invalid medium for bigCopperLayerV!");
1935
1936 // volume visual property (transparency)
1937 bigCopperLayerV->SetLineColor(TColor::GetColor("#ff7538"));
1938 bigCopperLayerV->SetTransparency(0);
1939
1940 TGeoCombiTrans* bigCopperLayer_transf[1];
1941
1942 bigCopperLayer_transf[0] = new TGeoCombiTrans();
1943 bigCopperLayer_transf[0]->SetDx(-2.95 /*shift*/);
1944 bigCopperLayer_transf[0]->SetDy(+1.95 /*shift*/);
1945 bigCopperLayer_transf[0]->SetDz(bigCopperLayer_ZSize * 0.5 + bigPolyamideLayer_ZSize + bigGlueLayer_ZSize
1946 + bigEpoxideOuterLayer_ZSize + bigHoneyCombLayer_ZSize + bigEpoxideInnerLayer_ZSize
1947 + backCover_dZshift);
1948
1949 frames->AddNode(bigCopperLayerV, 0, bigCopperLayer_transf[0]);
1950 //--------------------------------------------------------------------------
1951 //==========================================================================
1952
1953 // big side plate -----------------------------------------------------------
1954 Double_t bigSidePlate_XSize = 5.2; // cm
1955 Double_t bigSidePlate_YSize = 27.6; // cm
1956 Double_t bigSidePlate_ZSize = 0.3; // cm
1957
1958 TGeoShape* bigSidePlateS =
1959 new TGeoBBox(TString("bigSidePlateS") += TString("_") + frames->GetName(), bigSidePlate_XSize * 0.5,
1960 bigSidePlate_YSize * 0.5, bigSidePlate_ZSize * 0.5);
1961
1962 TGeoVolume* bigSidePlateV =
1963 new TGeoVolume(TString("bigSidePlateV") += TString("_") + frames->GetName(), bigSidePlateS);
1964
1965 // volume medium
1966 TGeoMedium* bigSidePlateV_medium = pMedAluminium;
1967 if (bigSidePlateV_medium) {
1968 bigSidePlateV->SetMedium(bigSidePlateV_medium);
1969 } else
1970 Fatal("Main", "Invalid medium for bigSidePlateV!");
1971
1972 // volume visual property (transparency)
1973 bigSidePlateV->SetLineColor(TColor::GetColor("#ffcccc"));
1974 bigSidePlateV->SetTransparency(0);
1975
1976 TGeoCombiTrans* bigSidePlate_transf[1];
1977
1978 bigSidePlate_transf[0] = new TGeoCombiTrans();
1979 bigSidePlate_transf[0]->SetDx(-(backFiberGlassCover_XSize - frontFiberGlassCover_XSize * 0.5)
1980 - bigSidePlate_XSize * 0.5 + 3.0 /*shift*/);
1981 bigSidePlate_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + bigSidePlate_YSize * 0.5);
1982 bigSidePlate_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - bigSidePlate_ZSize * 0.5);
1983
1984 frames->AddNode(bigSidePlateV, 0, bigSidePlate_transf[0]);
1985 //--------------------------------------------------------------------------
1986
1987 // big side support ---------------------------------------------------------
1988 Double_t bigSideSupport_XSize = 3.2; // cm
1989 Double_t bigSideSupport_YSize = 26; // cm
1990 Double_t bigSideSupport_ZSize = 0.6; // cm
1991
1992 TGeoShape* bigSideSupportS =
1993 new TGeoBBox(TString("bigSideSupportS") += TString("_") + frames->GetName(), bigSideSupport_XSize * 0.5,
1994 bigSideSupport_YSize * 0.5, bigSideSupport_ZSize * 0.5);
1995
1996 TGeoVolume* bigSideSupportV =
1997 new TGeoVolume(TString("bigSideSupportV") += TString("_") + frames->GetName(), bigSideSupportS);
1998
1999 // volume medium
2000 TGeoMedium* bigSideSupportV_medium = pMedAluminium;
2001 if (bigSideSupportV_medium) {
2002 bigSideSupportV->SetMedium(bigSideSupportV_medium);
2003 } else
2004 Fatal("Main", "Invalid medium for bigSideSupportV!");
2005
2006 // volume visual property (transparency)
2007 bigSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
2008 bigSideSupportV->SetTransparency(0);
2009
2010 TGeoCombiTrans* bigSideSupport_transf[1];
2011
2012 bigSideSupport_transf[0] = new TGeoCombiTrans();
2013 bigSideSupport_transf[0]->SetDx(-(backFiberGlassCover_XSize - frontFiberGlassCover_XSize * 0.5)
2014 - bigSideSupport_XSize * 0.5);
2015 bigSideSupport_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + bigSideSupport_YSize * 0.5 + 1.6 /*shift*/);
2016 bigSideSupport_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - bigSidePlate_ZSize
2017 - bigSideSupport_ZSize * 0.5);
2018
2019 frames->AddNode(bigSideSupportV, 0, bigSideSupport_transf[0]);
2020 //--------------------------------------------------------------------------
2021
2022 // small side plate -----------------------------------------------------------
2023 Double_t smallSidePlate_XSize = 4.2; // cm
2024 Double_t smallSidePlate_YSize = 3.7; // cm
2025 Double_t smallSidePlate_ZSize = 0.3; // cm
2026
2027 TGeoShape* smallSidePlateS =
2028 new TGeoBBox(TString("smallSidePlateS") += TString("_") + frames->GetName(), smallSidePlate_XSize * 0.5,
2029 smallSidePlate_YSize * 0.5, smallSidePlate_ZSize * 0.5);
2030
2031 TGeoVolume* smallSidePlateV =
2032 new TGeoVolume(TString("smallSidePlateV") += TString("_") + frames->GetName(), smallSidePlateS);
2033
2034 // volume medium
2035 TGeoMedium* smallSidePlateV_medium = pMedAluminium;
2036 if (smallSidePlateV_medium) {
2037 smallSidePlateV->SetMedium(smallSidePlateV_medium);
2038 } else
2039 Fatal("Main", "Invalid medium for smallSidePlateV!");
2040
2041 // volume visual property (transparency)
2042 smallSidePlateV->SetLineColor(TColor::GetColor("#ffcccc"));
2043 smallSidePlateV->SetTransparency(0);
2044
2045 TGeoCombiTrans* smallSidePlate_transf[1];
2046
2047 smallSidePlate_transf[0] = new TGeoCombiTrans();
2048 smallSidePlate_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - smallSidePlate_XSize * 0.5 + 2.2 /*shift*/);
2049 smallSidePlate_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + smallSidePlate_YSize * 0.5 + 0.2 /*shift*/);
2050 smallSidePlate_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - smallSidePlate_ZSize * 0.5);
2051
2052 frames->AddNode(smallSidePlateV, 0, smallSidePlate_transf[0]);
2053 //--------------------------------------------------------------------------
2054
2055 // small side support ---------------------------------------------------------
2056 Double_t smallSideSupport_XSize = 4.0; // cm
2057 Double_t smallSideSupport_YSize = 2.4; // cm
2058 Double_t smallSideSupport_ZSize = 0.6; // cm
2059
2060 TGeoShape* smallSideSupportS =
2061 new TGeoBBox(TString("smallSideSupportS") += TString("_") + frames->GetName(), smallSideSupport_XSize * 0.5,
2062 smallSideSupport_YSize * 0.5, smallSideSupport_ZSize * 0.5);
2063
2064 TGeoVolume* smallSideSupportV =
2065 new TGeoVolume(TString("smallSideSupportV") += TString("_") + frames->GetName(), smallSideSupportS);
2066
2067 // volume medium
2068 TGeoMedium* smallSideSupportV_medium = pMedAluminium;
2069 if (smallSideSupportV_medium) {
2070 smallSideSupportV->SetMedium(smallSideSupportV_medium);
2071 } else
2072 Fatal("Main", "Invalid medium for smallSideSupportV!");
2073
2074 // volume visual property (transparency)
2075 smallSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
2076 smallSideSupportV->SetTransparency(0);
2077
2078 TGeoCombiTrans* smallSideSupport_transf[1];
2079
2080 smallSideSupport_transf[0] = new TGeoCombiTrans();
2081 smallSideSupport_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - smallSideSupport_XSize * 0.5 + 3.3 /*shift*/);
2082 smallSideSupport_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + smallSideSupport_YSize * 0.5);
2083 smallSideSupport_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - bigSidePlate_ZSize
2084 - bigSideSupport_ZSize * 0.5);
2085
2086 frames->AddNode(smallSideSupportV, 0, smallSideSupport_transf[0]);
2087 //--------------------------------------------------------------------------
2088
2089 // side amplifier block -----------------------------------------------------
2090 Double_t sideAmplifierBlock_XSize = 0.3; // cm
2091 Double_t sideAmplifierBlock_YSize = 24.825; // cm
2092 Double_t sideAmplifierBlock_ZSize = 8.41; // cm
2093
2094 TGeoShape* sideAmplifierBlockS =
2095 new TGeoBBox(TString("sideAmplifierBlockS") += TString("_") + frames->GetName(), sideAmplifierBlock_XSize * 0.5,
2096 sideAmplifierBlock_YSize * 0.5, sideAmplifierBlock_ZSize * 0.5);
2097
2098 TGeoVolume* sideAmplifierBlockV =
2099 new TGeoVolume(TString("sideAmplifierBlockV") += TString("_") + frames->GetName(), sideAmplifierBlockS);
2100
2101 // volume medium
2102 TGeoMedium* sideAmplifierBlockV_medium = pMedFiberGlass;
2103 if (sideAmplifierBlockV_medium) {
2104 sideAmplifierBlockV->SetMedium(sideAmplifierBlockV_medium);
2105 } else
2106 Fatal("Main", "Invalid medium for sideAmplifierBlockV!");
2107
2108 // volume visual property (transparency)
2109 sideAmplifierBlockV->SetLineColor(TColor::GetColor("#99ff99"));
2110 sideAmplifierBlockV->SetTransparency(0);
2111
2112 TGeoCombiTrans* sideAmplifierBlock_transf[1];
2113
2114 sideAmplifierBlock_transf[0] = new TGeoCombiTrans();
2115 sideAmplifierBlock_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideAmplifierBlock_XSize * 0.5
2116 - 1.6 /*shift*/);
2117 sideAmplifierBlock_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideAmplifierBlock_YSize * 0.5
2118 + 1.575 /*shift*/);
2119 sideAmplifierBlock_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideAmplifierBlock_ZSize * 0.5);
2120
2121 frames->AddNode(sideAmplifierBlockV, 0, sideAmplifierBlock_transf[0]);
2122 //--------------------------------------------------------------------------
2123
2124 // upper amplifier block ----------------------------------------------------
2125 Double_t upperAmplifierBlockOutPart_XSize = 65.6; // cm
2126 Double_t upperAmplifierBlockOutPart_YSize = 0.3; // cm
2127 Double_t upperAmplifierBlockOutPart_ZSize = 8.41; // cm
2128
2129 Double_t upperAmplifierBlockInLeftPart_XSize = 29.3; // cm
2130 Double_t upperAmplifierBlockInLeftPart_YSize = 0.3; // cm
2131 Double_t upperAmplifierBlockInLeftPart_ZSize = 8.41; // cm
2132
2133 Double_t upperAmplifierBlockInRightPart_XSize = 26.0; // cm
2134 Double_t upperAmplifierBlockInRightPart_YSize = 0.3; // cm
2135 Double_t upperAmplifierBlockInRightPart_ZSize = 8.41; // cm
2136
2137 TGeoShape* upperAmplifierBlockOutPartS =
2138 new TGeoBBox(TString("upperAmplifierBlockOutPartS") += TString("_") + frames->GetName(),
2139 upperAmplifierBlockOutPart_XSize * 0.5, upperAmplifierBlockOutPart_YSize * 0.5,
2140 upperAmplifierBlockOutPart_ZSize * 0.5);
2141 TGeoShape* upperAmplifierBlockInLeftPartS =
2142 new TGeoBBox(TString("upperAmplifierBlockInLeftPartS") += TString("_") + frames->GetName(),
2143 upperAmplifierBlockInLeftPart_XSize * 0.5, upperAmplifierBlockInLeftPart_YSize * 0.5,
2144 upperAmplifierBlockInLeftPart_ZSize * 0.5);
2145 TGeoShape* upperAmplifierBlockInRightPartS =
2146 new TGeoBBox(TString("upperAmplifierBlockInRightPartS") += TString("_") + frames->GetName(),
2147 upperAmplifierBlockInRightPart_XSize * 0.5, upperAmplifierBlockInRightPart_YSize * 0.5,
2148 upperAmplifierBlockInRightPart_ZSize * 0.5);
2149
2150 TGeoVolume* upperAmplifierBlockOutPartV = new TGeoVolume(
2151 TString("upperAmplifierBlockOutPartV") += TString("_") + frames->GetName(), upperAmplifierBlockOutPartS);
2152 TGeoVolume* upperAmplifierBlockInLeftPartV = new TGeoVolume(
2153 TString("upperAmplifierBlockInLeftPartV") += TString("_") + frames->GetName(), upperAmplifierBlockInLeftPartS);
2154 TGeoVolume* upperAmplifierBlockInRightPartV =
2155 new TGeoVolume(TString("upperAmplifierBlockInRightPartV") += TString("_") + frames->GetName(),
2156 upperAmplifierBlockInRightPartS);
2157
2158 // volume medium
2159 TGeoMedium* upperAmplifierBlockOutPartV_medium = pMedFiberGlass;
2160 if (upperAmplifierBlockOutPartV_medium) {
2161 upperAmplifierBlockOutPartV->SetMedium(upperAmplifierBlockOutPartV_medium);
2162 upperAmplifierBlockInLeftPartV->SetMedium(upperAmplifierBlockOutPartV_medium);
2163 upperAmplifierBlockInRightPartV->SetMedium(upperAmplifierBlockOutPartV_medium);
2164 } else
2165 Fatal("Main", "Invalid medium for upperAmplifierBlock!");
2166
2167 // volume visual property (transparency)
2168 upperAmplifierBlockOutPartV->SetLineColor(TColor::GetColor("#99ff99"));
2169 upperAmplifierBlockOutPartV->SetTransparency(0);
2170 upperAmplifierBlockInLeftPartV->SetLineColor(TColor::GetColor("#99ff99"));
2171 upperAmplifierBlockInLeftPartV->SetTransparency(0);
2172 upperAmplifierBlockInRightPartV->SetLineColor(TColor::GetColor("#99ff99"));
2173 upperAmplifierBlockInRightPartV->SetTransparency(0);
2174
2175 TGeoCombiTrans* upperAmplifierBlock_transf[3];
2176
2177 upperAmplifierBlock_transf[0] = new TGeoCombiTrans();
2178 upperAmplifierBlock_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperAmplifierBlockOutPart_XSize * 0.5
2179 - 2.0 /*shift*/);
2180 upperAmplifierBlock_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperAmplifierBlockOutPart_YSize * 0.5
2181 + 2.9 /*shift*/);
2182 upperAmplifierBlock_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5
2183 - upperAmplifierBlockOutPart_ZSize * 0.5);
2184
2185 upperAmplifierBlock_transf[1] = new TGeoCombiTrans();
2186 upperAmplifierBlock_transf[1]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperAmplifierBlockInLeftPart_XSize * 0.5
2187 - 6.8 /*shift*/);
2188 upperAmplifierBlock_transf[1]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperAmplifierBlockInLeftPart_YSize * 0.5
2189 + 1.4 /*shift*/);
2190 upperAmplifierBlock_transf[1]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5
2191 - upperAmplifierBlockInLeftPart_ZSize * 0.5);
2192
2193 upperAmplifierBlock_transf[2] = new TGeoCombiTrans();
2194 upperAmplifierBlock_transf[2]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperAmplifierBlockInLeftPart_XSize
2195 - upperAmplifierBlockInRightPart_XSize * 0.5 - 7.6 /*shift*/);
2196 upperAmplifierBlock_transf[2]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperAmplifierBlockInRightPart_YSize * 0.5
2197 + 1.4 /*shift*/);
2198 upperAmplifierBlock_transf[2]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5
2199 - upperAmplifierBlockInRightPart_ZSize * 0.5);
2200
2201 frames->AddNode(upperAmplifierBlockOutPartV, 0, upperAmplifierBlock_transf[0]);
2202 frames->AddNode(upperAmplifierBlockInLeftPartV, 0, upperAmplifierBlock_transf[1]);
2203 frames->AddNode(upperAmplifierBlockInRightPartV, 0, upperAmplifierBlock_transf[2]);
2204 //--------------------------------------------------------------------------
2205
2206 // side PCB -----------------------------------------------------------------
2207 Double_t sidePCB_XSize = 0.15; // cm
2208 Double_t sidePCB_YSize = 35.05; // cm
2209 Double_t sidePCB_ZSize = 4.0; // cm
2210
2211 TGeoShape* sidePCBS = new TGeoBBox(TString("sidePCBS") += TString("_") + frames->GetName(), sidePCB_XSize * 0.5,
2212 sidePCB_YSize * 0.5, sidePCB_ZSize * 0.5);
2213
2214 TGeoVolume* sidePCBV = new TGeoVolume(TString("sidePCBV") += TString("_") + frames->GetName(), sidePCBS);
2215
2216 // volume medium
2217 TGeoMedium* sidePCBV_medium = pMedFiberGlass;
2218 if (sidePCBV_medium) {
2219 sidePCBV->SetMedium(sidePCBV_medium);
2220 } else
2221 Fatal("Main", "Invalid medium for sidePCBV!");
2222
2223 // volume visual property (transparency)
2224 sidePCBV->SetLineColor(TColor::GetColor("#55ee55"));
2225 sidePCBV->SetTransparency(0);
2226
2227 TGeoCombiTrans* sidePCB_transf[1];
2228
2229 sidePCB_transf[0] = new TGeoCombiTrans();
2230 sidePCB_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sidePCB_XSize * 0.5 - 0.45 /*shift*/);
2231 sidePCB_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sidePCB_YSize * 0.5 + 2.5 /*shift*/);
2232 sidePCB_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sidePCB_ZSize * 0.5 - 4.4 /*shift*/);
2233
2234 frames->AddNode(sidePCBV, 0, sidePCB_transf[0]);
2235 //--------------------------------------------------------------------------
2236
2237 // upper PCB ----------------------------------------------------------------
2238 Double_t upperPCB_XSize = 70.1; // cm
2239 Double_t upperPCB_YSize = 0.15; // cm
2240 Double_t upperPCB_ZSize = 4.0; // cm
2241
2242 TGeoShape* upperPCBS = new TGeoBBox(TString("upperPCBS") += TString("_") + frames->GetName(), upperPCB_XSize * 0.5,
2243 upperPCB_YSize * 0.5, upperPCB_ZSize * 0.5);
2244
2245 TGeoVolume* upperPCBV = new TGeoVolume(TString("upperPCBV") += TString("_") + frames->GetName(), upperPCBS);
2246
2247 // volume medium
2248 TGeoMedium* upperPCBV_medium = pMedFiberGlass;
2249 if (upperPCBV_medium) {
2250 upperPCBV->SetMedium(upperPCBV_medium);
2251 } else
2252 Fatal("Main", "Invalid medium for upperPCBV!");
2253
2254 // volume visual property (transparency)
2255 upperPCBV->SetLineColor(TColor::GetColor("#55ee55"));
2256 upperPCBV->SetTransparency(0);
2257
2258 TGeoCombiTrans* upperPCB_transf[1];
2259
2260 upperPCB_transf[0] = new TGeoCombiTrans();
2261 upperPCB_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperPCB_XSize * 0.5 - 1.7 /*shift*/);
2262 upperPCB_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperPCB_YSize * 0.5 + 0.1 /*shift*/);
2263 upperPCB_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperPCB_ZSize * 0.5 - 4.4 /*shift*/);
2264
2265 frames->AddNode(upperPCBV, 0, upperPCB_transf[0]);
2266 //--------------------------------------------------------------------------
2267
2268 // side bottom leg ----------------------------------------------------------
2269 Double_t sideBottomSmallLeg_XSize = 2.0; // cm
2270 Double_t sideBottomSmallLeg_YSize = 0.46; // cm
2271 Double_t sideBottomSmallLeg_ZSize = 1.9; // cm
2272
2273 Double_t sideBottomBigLeg_XSize = 5.4; // cm
2274 Double_t sideBottomBigLeg_YSize = 0.46; // cm
2275 Double_t sideBottomBigLeg_ZSize = 3.2; // cm
2276
2277 TGeoShape* sideBottomSmallLegS =
2278 new TGeoBBox(TString("sideBottomSmallLegS") += TString("_") + frames->GetName(), sideBottomSmallLeg_XSize * 0.5,
2279 sideBottomSmallLeg_YSize * 0.5, sideBottomSmallLeg_ZSize * 0.5);
2280 TGeoShape* sideBottomBigLegS =
2281 new TGeoBBox(TString("sideBottomBigLegS") += TString("_") + frames->GetName(), sideBottomBigLeg_XSize * 0.5,
2282 sideBottomBigLeg_YSize * 0.5, sideBottomBigLeg_ZSize * 0.5);
2283
2284 TGeoVolume* sideBottomSmallLegV =
2285 new TGeoVolume(TString("sideBottomSmallLegV") += TString("_") + frames->GetName(), sideBottomSmallLegS);
2286 TGeoVolume* sideBottomBigLegV =
2287 new TGeoVolume(TString("sideBottomBigLegV") += TString("_") + frames->GetName(), sideBottomBigLegS);
2288
2289 // volume medium
2290 TGeoMedium* sideBottomLeg_medium = pMedAluminium;
2291 if (sideBottomLeg_medium) {
2292 sideBottomSmallLegV->SetMedium(sideBottomLeg_medium);
2293 sideBottomBigLegV->SetMedium(sideBottomLeg_medium);
2294 } else
2295 Fatal("Main", "Invalid medium for sideBottomLegV!");
2296
2297 // volume visual property (transparency)
2298 sideBottomSmallLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2299 sideBottomSmallLegV->SetTransparency(0);
2300 sideBottomBigLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2301 sideBottomBigLegV->SetTransparency(0);
2302
2303 TGeoCombiTrans* sideBottomSmallLeg_transf[1];
2304
2305 sideBottomSmallLeg_transf[0] = new TGeoCombiTrans();
2306 sideBottomSmallLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideBottomSmallLeg_XSize * 0.5
2307 - 2.9 /*shift*/);
2308 sideBottomSmallLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideBottomSmallLeg_YSize * 0.5
2309 + 1.05 /*shift*/);
2310 sideBottomSmallLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideBottomSmallLeg_ZSize * 0.5
2311 - bigSidePlate_ZSize);
2312
2313 TGeoCombiTrans* sideBottomBigLeg_transf[1];
2314
2315 sideBottomBigLeg_transf[0] = new TGeoCombiTrans();
2316 sideBottomBigLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 + sideBottomBigLeg_XSize * 0.5
2317 - sideBottomSmallLeg_XSize - 2.9 /*shift*/);
2318 sideBottomBigLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideBottomBigLeg_YSize * 0.5
2319 + 1.05 /*shift*/);
2320 sideBottomBigLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideBottomBigLeg_ZSize * 0.5
2321 - bigSidePlate_ZSize - sideBottomSmallLeg_ZSize);
2322
2323 frames->AddNode(sideBottomSmallLegV, 0, sideBottomSmallLeg_transf[0]);
2324 frames->AddNode(sideBottomBigLegV, 0, sideBottomBigLeg_transf[0]);
2325 //--------------------------------------------------------------------------
2326
2327 // side top leg -------------------------------------------------------------
2328 Double_t sideTopSmallLeg_XSize = 2.0; // cm
2329 Double_t sideTopSmallLeg_YSize = 0.56; // cm
2330 Double_t sideTopSmallLeg_ZSize = 2.24; // cm
2331
2332 Double_t sideTopBigLeg_XSize = 4.3; // cm
2333 Double_t sideTopBigLeg_YSize = 0.56; // cm
2334 Double_t sideTopBigLeg_ZSize = 2.8; // cm
2335
2336 TGeoShape* sideTopSmallLegS =
2337 new TGeoBBox(TString("sideTopSmallLegS") += TString("_") + frames->GetName(), sideTopSmallLeg_XSize * 0.5,
2338 sideTopSmallLeg_YSize * 0.5, sideTopSmallLeg_ZSize * 0.5);
2339 TGeoShape* sideTopBigLegS =
2340 new TGeoBBox(TString("sideTopBigLegS") += TString("_") + frames->GetName(), sideTopBigLeg_XSize * 0.5,
2341 sideTopBigLeg_YSize * 0.5, sideTopBigLeg_ZSize * 0.5);
2342
2343 TGeoVolume* sideTopSmallLegV =
2344 new TGeoVolume(TString("sideTopSmallLegV") += TString("_") + frames->GetName(), sideTopSmallLegS);
2345 TGeoVolume* sideTopBigLegV =
2346 new TGeoVolume(TString("sideTopBigLegV") += TString("_") + frames->GetName(), sideTopBigLegS);
2347
2348 // volume medium
2349 TGeoMedium* sideTopLeg_medium = pMedAluminium;
2350 if (sideTopLeg_medium) {
2351 sideTopSmallLegV->SetMedium(sideTopLeg_medium);
2352 sideTopBigLegV->SetMedium(sideTopLeg_medium);
2353 } else
2354 Fatal("Main", "Invalid medium for sideTopLegV!");
2355
2356 // volume visual property (transparency)
2357 sideTopSmallLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2358 sideTopSmallLegV->SetTransparency(0);
2359 sideTopBigLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2360 sideTopBigLegV->SetTransparency(0);
2361
2362 TGeoCombiTrans* sideTopSmallLeg_transf[1];
2363
2364 sideTopSmallLeg_transf[0] = new TGeoCombiTrans();
2365 sideTopSmallLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideTopSmallLeg_XSize * 0.5 - 2.9 /*shift*/);
2366 sideTopSmallLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideTopSmallLeg_YSize * 0.5 + 27.23 /*shift*/);
2367 sideTopSmallLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideTopSmallLeg_ZSize * 0.5
2368 - bigSidePlate_ZSize);
2369
2370 TGeoCombiTrans* sideTopBigLeg_transf[1];
2371
2372 sideTopBigLeg_transf[0] = new TGeoCombiTrans();
2373 sideTopBigLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 + sideTopBigLeg_XSize * 0.5 - sideTopSmallLeg_XSize
2374 - 2.9 /*shift*/);
2375 sideTopBigLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideTopBigLeg_YSize * 0.5 + 27.23 /*shift*/);
2376 sideTopBigLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideTopBigLeg_ZSize * 0.5
2377 - bigSidePlate_ZSize - sideTopSmallLeg_ZSize);
2378
2379 frames->AddNode(sideTopSmallLegV, 0, sideTopSmallLeg_transf[0]);
2380 frames->AddNode(sideTopBigLegV, 0, sideTopBigLeg_transf[0]);
2381 //--------------------------------------------------------------------------
2382
2383 // side stick ---------------------------------------------------------------
2384 Double_t sideLongStick_XSize = 0.6; // cm
2385 Double_t sideLongStick_YSize = 25.72; // cm
2386 Double_t sideLongStick_ZSize = 1.2; // cm
2387
2388 Double_t sideShortStick_XSize = 0.6; // cm
2389 Double_t sideShortStick_YSize = 9.6; // cm
2390 Double_t sideShortStick_ZSize = 1.2; // cm
2391
2392 TGeoShape* sideLongStickS =
2393 new TGeoBBox(TString("sideLongStickS") += TString("_") + frames->GetName(), sideLongStick_XSize * 0.5,
2394 sideLongStick_YSize * 0.5, sideLongStick_ZSize * 0.5);
2395 TGeoShape* sideShortStickS =
2396 new TGeoBBox(TString("sideShortStickS") += TString("_") + frames->GetName(), sideShortStick_XSize * 0.5,
2397 sideShortStick_YSize * 0.5, sideShortStick_ZSize * 0.5);
2398
2399 TGeoVolume* sideLongStickV =
2400 new TGeoVolume(TString("sideLongStickV") += TString("_") + frames->GetName(), sideLongStickS);
2401 TGeoVolume* sideShortStickV =
2402 new TGeoVolume(TString("sideShortStickV") += TString("_") + frames->GetName(), sideShortStickS);
2403
2404 // volume medium
2405 TGeoMedium* sideStick_medium = pMedAluminium;
2406 if (sideStick_medium) {
2407 sideLongStickV->SetMedium(sideStick_medium);
2408 sideShortStickV->SetMedium(sideStick_medium);
2409 } else
2410 Fatal("Main", "Invalid medium for sideTopLegV!");
2411
2412 // volume visual property (transparency)
2413 sideLongStickV->SetLineColor(TColor::GetColor("#ffcccc"));
2414 sideLongStickV->SetTransparency(0);
2415 sideShortStickV->SetLineColor(TColor::GetColor("#ffcccc"));
2416 sideShortStickV->SetTransparency(0);
2417
2418 TGeoCombiTrans* sideLongStick_transf[1];
2419
2420 sideLongStick_transf[0] = new TGeoCombiTrans();
2421 sideLongStick_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - 0.9 /*shift*/);
2422 sideLongStick_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideLongStick_YSize * 0.5 + 1.51 /*shift*/);
2423 sideLongStick_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideLongStick_ZSize * 0.5
2424 - bigSidePlate_ZSize - sideTopSmallLeg_ZSize - sideTopBigLeg_ZSize + 0.04 /*shift*/);
2425
2426 TGeoCombiTrans* sideShortStick_transf[1];
2427
2428 sideShortStick_transf[0] = new TGeoCombiTrans();
2429 sideShortStick_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - 0.9 /*shift*/);
2430 sideShortStick_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideShortStick_YSize * 0.5 + sideLongStick_YSize
2431 + 2.07 /*shift*/);
2432 sideShortStick_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideShortStick_ZSize * 0.5
2433 - bigSidePlate_ZSize - sideTopSmallLeg_ZSize - sideTopBigLeg_ZSize
2434 + 0.04 /*shift*/);
2435
2436 frames->AddNode(sideLongStickV, 0, sideLongStick_transf[0]);
2437 frames->AddNode(sideShortStickV, 0, sideShortStick_transf[0]);
2438 //--------------------------------------------------------------------------
2439
2440 // side funny box -----------------------------------------------------------
2441 Double_t sideFunnyBox_XSize = 0.8; // cm
2442 Double_t sideFunnyBox_YSize = 1.0; // cm
2443 Double_t sideFunnyBox_ZSize = 1.5; // cm
2444
2445 TGeoShape* sideFunnyBoxS =
2446 new TGeoBBox(TString("sideFunnyBoxS") += TString("_") + frames->GetName(), sideFunnyBox_XSize * 0.5,
2447 sideFunnyBox_YSize * 0.5, sideFunnyBox_ZSize * 0.5);
2448
2449 TGeoVolume* sideFunnyBoxV =
2450 new TGeoVolume(TString("sideFunnyBoxV") += TString("_") + frames->GetName(), sideFunnyBoxS);
2451
2452 // volume medium
2453 TGeoMedium* sideFunnyBoxV_medium = pMedAluminium;
2454 if (sideFunnyBoxV_medium) {
2455 sideFunnyBoxV->SetMedium(sideFunnyBoxV_medium);
2456 } else
2457 Fatal("Main", "Invalid medium for sideFunnyBoxV!");
2458
2459 // volume visual property (transparency)
2460 sideFunnyBoxV->SetLineColor(TColor::GetColor("#ffcccc"));
2461 sideFunnyBoxV->SetTransparency(0);
2462
2463 TGeoCombiTrans* sideFunnyBox_transf[1];
2464
2465 sideFunnyBox_transf[0] = new TGeoCombiTrans();
2466 sideFunnyBox_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5);
2467 sideFunnyBox_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideFunnyBox_YSize * 0.5 + sideBottomBigLeg_YSize
2468 + 1.05 /*shift*/);
2469 sideFunnyBox_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideShortStick_ZSize * 0.5
2470 - bigSidePlate_ZSize - sideBottomSmallLeg_ZSize - sideBottomBigLeg_ZSize);
2471
2472 frames->AddNode(sideFunnyBoxV, 0, sideFunnyBox_transf[0]);
2473 //--------------------------------------------------------------------------
2474
2475 // upper platform -----------------------------------------------------------
2476 Double_t upperPlatform_XSize = 2.2; // cm
2477 Double_t upperPlatform_YSize = 3.7; // cm
2478 Double_t upperPlatform_ZSize = 0.2; // cm
2479
2480 TGeoShape* upperPlatformS =
2481 new TGeoBBox(TString("upperPlatformS") += TString("_") + frames->GetName(), upperPlatform_XSize * 0.5,
2482 upperPlatform_YSize * 0.5, upperPlatform_ZSize * 0.5);
2483
2484 TGeoVolume* upperPlatformV =
2485 new TGeoVolume(TString("upperPlatformV") += TString("_") + frames->GetName(), upperPlatformS);
2486
2487 // volume medium
2488 TGeoMedium* upperPlatformV_medium = pMedAluminium;
2489 if (upperPlatformV_medium) {
2490 upperPlatformV->SetMedium(upperPlatformV_medium);
2491 } else
2492 Fatal("Main", "Invalid medium for upperPlatformV!");
2493
2494 // volume visual property (transparency)
2495 upperPlatformV->SetLineColor(TColor::GetColor("#ffcccc"));
2496 upperPlatformV->SetTransparency(0);
2497
2498 TGeoCombiTrans* upperPlatform_transf[1];
2499
2500 upperPlatform_transf[0] = new TGeoCombiTrans();
2501 upperPlatform_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - upperPlatform_XSize * 0.5 - 0.8 /*shift*/);
2502 upperPlatform_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperPlatform_YSize * 0.5 + 0.2 /*shift*/);
2503 upperPlatform_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperPlatform_ZSize * 0.5);
2504
2505 frames->AddNode(upperPlatformV, 0, upperPlatform_transf[0]);
2506 //--------------------------------------------------------------------------
2507
2508 // front left leg -----------------------------------------------------------
2509 Double_t frontLeftLeg_XSize = 0.53; // cm
2510 Double_t frontLeftLeg_YSize = 2.5; // cm
2511 Double_t frontLeftLeg_ZSize = 7.4; // cm
2512
2513 TGeoShape* frontLeftLegS =
2514 new TGeoBBox(TString("frontLeftLegS") += TString("_") + frames->GetName(), frontLeftLeg_XSize * 0.5,
2515 frontLeftLeg_YSize * 0.5, frontLeftLeg_ZSize * 0.5);
2516
2517 TGeoVolume* frontLeftLegV =
2518 new TGeoVolume(TString("frontLeftLegV") += TString("_") + frames->GetName(), frontLeftLegS);
2519
2520 // volume medium
2521 TGeoMedium* frontLeftLegV_medium = pMedAluminium;
2522 if (frontLeftLegV_medium) {
2523 frontLeftLegV->SetMedium(frontLeftLegV_medium);
2524 } else
2525 Fatal("Main", "Invalid medium for frontLeftLegV!");
2526
2527 // volume visual property (transparency)
2528 frontLeftLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2529 frontLeftLegV->SetTransparency(0);
2530
2531 TGeoCombiTrans* frontLeftLeg_transf[1];
2532
2533 frontLeftLeg_transf[0] = new TGeoCombiTrans();
2534 frontLeftLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - frontLeftLeg_XSize * 0.5 - 1.97 /*shift*/);
2535 frontLeftLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontLeftLeg_YSize * 0.5 + 0.4 /*shift*/);
2536 frontLeftLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperPlatform_ZSize
2537 - frontLeftLeg_ZSize * 0.5);
2538
2539 frames->AddNode(frontLeftLegV, 0, frontLeftLeg_transf[0]);
2540 //--------------------------------------------------------------------------
2541
2542 // front right leg ----------------------------------------------------------
2543 Double_t frontRightLeg_XSize = 0.55; // cm
2544 Double_t frontRightLeg_YSize = 2.5; // cm
2545 Double_t frontRightLeg_ZSize = 6.4; // cm
2546
2547 TGeoShape* frontRightLegS =
2548 new TGeoBBox(TString("frontRightLegS") += TString("_") + frames->GetName(), frontRightLeg_XSize * 0.5,
2549 frontRightLeg_YSize * 0.5, frontRightLeg_ZSize * 0.5);
2550
2551 TGeoVolume* frontRightLegV =
2552 new TGeoVolume(TString("frontRightLegV") += TString("_") + frames->GetName(), frontRightLegS);
2553
2554 // volume medium
2555 TGeoMedium* frontRightLegV_medium = pMedAluminium;
2556 if (frontRightLegV_medium) {
2557 frontRightLegV->SetMedium(frontRightLegV_medium);
2558 } else
2559 Fatal("Main", "Invalid medium for frontRightLegV!");
2560
2561 // volume visual property (transparency)
2562 frontRightLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2563 frontRightLegV->SetTransparency(0);
2564
2565 TGeoCombiTrans* frontRightLeg_transf[1];
2566
2567 frontRightLeg_transf[0] = new TGeoCombiTrans();
2568 frontRightLeg_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontRightLeg_XSize * 0.5 - 1.82 /*shift*/);
2569 frontRightLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontRightLeg_YSize * 0.5 + 0.4 /*shift*/);
2570 frontRightLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - smallSidePlate_ZSize
2571 - frontRightLeg_ZSize * 0.5);
2572
2573 frames->AddNode(frontRightLegV, 0, frontRightLeg_transf[0]);
2574 //--------------------------------------------------------------------------
2575
2576 // front center leg ---------------------------------------------------------
2577 Double_t frontCenterLowLeg_XSize = 1.3; // cm
2578 Double_t frontCenterLowLeg_YSize = 0.54; // cm
2579 Double_t frontCenterLowLeg_ZSize = 6.875; // cm
2580
2581 Double_t frontCenterUpLeg_XSize = 0.75; // cm
2582 Double_t frontCenterUpLeg_YSize = 1.9; // cm
2583 Double_t frontCenterUpLeg_ZSize = 6.875; // cm
2584
2585 TGeoShape* frontCenterLowLegS =
2586 new TGeoBBox(TString("frontCenterLowLegS") += TString("_") + frames->GetName(), frontCenterLowLeg_XSize * 0.5,
2587 frontCenterLowLeg_YSize * 0.5, frontCenterLowLeg_ZSize * 0.5);
2588 TGeoShape* frontCenterUpLegS =
2589 new TGeoBBox(TString("frontCenterUpLegS") += TString("_") + frames->GetName(), frontCenterUpLeg_XSize * 0.5,
2590 frontCenterUpLeg_YSize * 0.5, frontCenterUpLeg_ZSize * 0.5);
2591
2592 TGeoVolume* frontCenterLowLegV =
2593 new TGeoVolume(TString("frontCenterLowLegV") += TString("_") + frames->GetName(), frontCenterLowLegS);
2594 TGeoVolume* frontCenterUpLegV =
2595 new TGeoVolume(TString("frontCenterUpLegV") += TString("_") + frames->GetName(), frontCenterUpLegS);
2596
2597 // volume medium
2598 TGeoMedium* frontCenterLeg_medium = pMedAluminium;
2599 if (frontCenterLeg_medium) {
2600 frontCenterLowLegV->SetMedium(frontCenterLeg_medium);
2601 frontCenterUpLegV->SetMedium(frontCenterLeg_medium);
2602 } else
2603 Fatal("Main", "Invalid medium for frontCenterLeg!");
2604
2605 // volume visual property (transparency)
2606 frontCenterLowLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2607 frontCenterLowLegV->SetTransparency(0);
2608 frontCenterUpLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2609 frontCenterUpLegV->SetTransparency(0);
2610
2611 TGeoCombiTrans* frontCenterLowLeg_transf[1];
2612
2613 frontCenterLowLeg_transf[0] = new TGeoCombiTrans();
2614 frontCenterLowLeg_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontCenterLowLeg_XSize * 0.5
2615 - 35.84 /*shift*/);
2616 frontCenterLowLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontCenterLowLeg_YSize * 0.5
2617 + 0.46 /*shift*/);
2618 frontCenterLowLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontCenterLowLeg_ZSize * 0.5);
2619
2620 TGeoCombiTrans* frontCenterUpLeg_transf[1];
2621
2622 frontCenterUpLeg_transf[0] = new TGeoCombiTrans();
2623 frontCenterUpLeg_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontCenterUpLeg_XSize * 0.5 - 36.1 /*shift*/);
2624 frontCenterUpLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontCenterUpLeg_YSize * 0.5
2625 + frontCenterLowLeg_YSize + 0.46 /*shift*/);
2626 frontCenterUpLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontCenterUpLeg_ZSize * 0.5);
2627
2628 frames->AddNode(frontCenterLowLegV, 0, frontCenterLowLeg_transf[0]);
2629 frames->AddNode(frontCenterUpLegV, 0, frontCenterUpLeg_transf[0]);
2630 //--------------------------------------------------------------------------
2631
2632 // upper plank --------------------------------------------------------------
2633 Double_t upperRightPlank_XSize = 34.49; // cm
2634 Double_t upperRightPlank_YSize = 0.6; // cm
2635 Double_t upperRightPlank_ZSize = 1.2; // cm
2636
2637 Double_t upperLeftPlank_XSize = 33.73; // cm
2638 Double_t upperLeftPlank_YSize = 0.6; // cm
2639 Double_t upperLeftPlank_ZSize = 1.2; // cm
2640
2641 TGeoShape* upperRightPlankS =
2642 new TGeoBBox(TString("upperRightPlankS") += TString("_") + frames->GetName(), upperRightPlank_XSize * 0.5,
2643 upperRightPlank_YSize * 0.5, upperRightPlank_ZSize * 0.5);
2644 TGeoShape* upperLeftPlankS =
2645 new TGeoBBox(TString("upperLeftPlankS") += TString("_") + frames->GetName(), upperLeftPlank_XSize * 0.5,
2646 upperLeftPlank_YSize * 0.5, upperLeftPlank_ZSize * 0.5);
2647
2648 TGeoVolume* upperRightPlankV =
2649 new TGeoVolume(TString("upperRightPlankV") += TString("_") + frames->GetName(), upperRightPlankS);
2650 TGeoVolume* upperLeftPlankV =
2651 new TGeoVolume(TString("upperLeftPlankV") += TString("_") + frames->GetName(), upperLeftPlankS);
2652
2653 // volume medium
2654 TGeoMedium* upperPlank_medium = pMedAluminium;
2655 if (upperPlank_medium) {
2656 upperRightPlankV->SetMedium(upperPlank_medium);
2657 upperLeftPlankV->SetMedium(upperPlank_medium);
2658 } else
2659 Fatal("Main", "Invalid medium for upperPlankV!");
2660
2661 // volume visual property (transparency)
2662 upperRightPlankV->SetLineColor(TColor::GetColor("#ffcccc"));
2663 upperRightPlankV->SetTransparency(0);
2664 upperLeftPlankV->SetLineColor(TColor::GetColor("#ffcccc"));
2665 upperLeftPlankV->SetTransparency(0);
2666
2667 TGeoCombiTrans* upperRightPlank_transf[1];
2668
2669 upperRightPlank_transf[0] = new TGeoCombiTrans();
2670 upperRightPlank_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperRightPlank_XSize * 0.5 - 36.88 /*shift*/);
2671 upperRightPlank_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperRightPlank_YSize * 0.5 + 2.291 /*shift*/);
2672 upperRightPlank_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperRightPlank_ZSize * 0.5
2673 - 5.23 /*shift*/);
2674
2675 TGeoCombiTrans* upperLeftPlank_transf[1];
2676
2677 upperLeftPlank_transf[0] = new TGeoCombiTrans();
2678 upperLeftPlank_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperLeftPlank_XSize * 0.5 - 2.37 /*shift*/);
2679 upperLeftPlank_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperLeftPlank_YSize * 0.5 + 2.291 /*shift*/);
2680 upperLeftPlank_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperLeftPlank_ZSize * 0.5
2681 - 5.23 /*shift*/);
2682
2683 frames->AddNode(upperRightPlankV, 0, upperRightPlank_transf[0]);
2684 frames->AddNode(upperLeftPlankV, 0, upperLeftPlank_transf[0]);
2685 //--------------------------------------------------------------------------
2686
2687 // side channel bar ---------------------------------------------------------
2688 Double_t sideChannelBar_XSize = 1.5; // cm
2689 Double_t sideChannelBar_YSize = 40.0; // cm
2690 Double_t sideChannelBar_ZSize = 0.38; // cm
2691
2692 TGeoShape* sideChannelBarS =
2693 new TGeoBBox(TString("sideChannelBarS") += TString("_") + frames->GetName(), sideChannelBar_XSize * 0.5,
2694 sideChannelBar_YSize * 0.5, sideChannelBar_ZSize * 0.5);
2695
2696 TGeoVolume* sideChannelBarV =
2697 new TGeoVolume(TString("sideChannelBarV") += TString("_") + frames->GetName(), sideChannelBarS);
2698
2699 // volume medium
2700 TGeoMedium* sideChannelBarV_medium = pMedAluminium;
2701 if (sideChannelBarV_medium) {
2702 sideChannelBarV->SetMedium(sideChannelBarV_medium);
2703 } else
2704 Fatal("Main", "Invalid medium for sideChannelBarV!");
2705
2706 // volume visual property (transparency)
2707 sideChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
2708 sideChannelBarV->SetTransparency(0);
2709
2710 TGeoCombiTrans* sideChannelBar_transf[1];
2711
2712 sideChannelBar_transf[0] = new TGeoCombiTrans();
2713 sideChannelBar_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideChannelBar_XSize * 0.5 + 2.0 /*shift*/);
2714 sideChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideChannelBar_YSize * 0.5 + 1.05 /*shift*/);
2715 sideChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideChannelBar_ZSize * 0.5
2716 - 2.14 /*shift*/);
2717
2718 frames->AddNode(sideChannelBarV, 0, sideChannelBar_transf[0]);
2719 //--------------------------------------------------------------------------
2720
2721 // front funny channel bar --------------------------------------------------
2722 Double_t frontFunnyChannelBar_XSize = 2.82; // cm
2723 Double_t frontFunnyChannelBar_YSize = 2.5; // cm
2724 Double_t frontFunnyChannelBar_ZSize = 0.47; // cm
2725
2726 TGeoShape* frontFunnyChannelBarS = new TGeoBBox(
2727 TString("frontFunnyChannelBarS") += TString("_") + frames->GetName(), frontFunnyChannelBar_XSize * 0.5,
2728 frontFunnyChannelBar_YSize * 0.5, frontFunnyChannelBar_ZSize * 0.5);
2729
2730 TGeoVolume* frontFunnyChannelBarV =
2731 new TGeoVolume(TString("frontFunnyChannelBarV") += TString("_") + frames->GetName(), frontFunnyChannelBarS);
2732
2733 // volume medium
2734 TGeoMedium* frontFunnyChannelBarV_medium = pMedAluminium;
2735 if (frontFunnyChannelBarV_medium) {
2736 frontFunnyChannelBarV->SetMedium(frontFunnyChannelBarV_medium);
2737 } else
2738 Fatal("Main", "Invalid medium for frontFunnyChannelBarV!");
2739
2740 // volume visual property (transparency)
2741 frontFunnyChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
2742 frontFunnyChannelBarV->SetTransparency(0);
2743
2744 TGeoCombiTrans* frontFunnyChannelBar_transf[1];
2745
2746 frontFunnyChannelBar_transf[0] = new TGeoCombiTrans();
2747 frontFunnyChannelBar_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - frontFunnyChannelBar_XSize * 0.5
2748 - 2.5 /*shift*/);
2749 frontFunnyChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + frontFunnyChannelBar_YSize * 0.5
2750 + 43.1 /*shift*/);
2751 frontFunnyChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontFunnyChannelBar_ZSize * 0.5
2752 - 2.1 /*shift*/);
2753
2754 frames->AddNode(frontFunnyChannelBarV, 0, frontFunnyChannelBar_transf[0]);
2755 //--------------------------------------------------------------------------
2756
2757 // front channel bar --------------------------------------------------------
2758 Double_t frontRightChannelBar_XSize = 34.23; // cm
2759 Double_t frontRightChannelBar_YSize = 2.5; // cm
2760 Double_t frontRightChannelBar_ZSize = 0.47; // cm
2761
2762 Double_t frontLeftChannelBar_XSize = 33.47; // cm
2763 Double_t frontLeftChannelBar_YSize = 2.5; // cm
2764 Double_t frontLeftChannelBar_ZSize = 0.47; // cm
2765
2766 TGeoShape* frontRightChannelBarS = new TGeoBBox(
2767 TString("frontRightChannelBarS") += TString("_") + frames->GetName(), frontRightChannelBar_XSize * 0.5,
2768 frontRightChannelBar_YSize * 0.5, frontRightChannelBar_ZSize * 0.5);
2769 TGeoShape* frontLeftChannelBarS =
2770 new TGeoBBox(TString("frontLeftChannelBarS") += TString("_") + frames->GetName(),
2771 frontLeftChannelBar_XSize * 0.5, frontLeftChannelBar_YSize * 0.5, frontLeftChannelBar_ZSize * 0.5);
2772
2773 TGeoVolume* frontRightChannelBarV =
2774 new TGeoVolume(TString("frontRightChannelBarV") += TString("_") + frames->GetName(), frontRightChannelBarS);
2775 TGeoVolume* frontLeftChannelBarV =
2776 new TGeoVolume(TString("frontLeftChannelBarV") += TString("_") + frames->GetName(), frontLeftChannelBarS);
2777
2778 // volume medium
2779 TGeoMedium* frontChannel_medium = pMedAluminium;
2780 if (frontChannel_medium) {
2781 frontRightChannelBarV->SetMedium(frontChannel_medium);
2782 frontLeftChannelBarV->SetMedium(frontChannel_medium);
2783 } else
2784 Fatal("Main", "Invalid medium for frontChannelBarV!");
2785
2786 // volume visual property (transparency)
2787 frontRightChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
2788 frontRightChannelBarV->SetTransparency(0);
2789 frontLeftChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
2790 frontLeftChannelBarV->SetTransparency(0);
2791
2792 TGeoCombiTrans* frontRightChannelBar_transf[1];
2793
2794 frontRightChannelBar_transf[0] = new TGeoCombiTrans();
2795 frontRightChannelBar_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontRightChannelBar_XSize * 0.5
2796 - 37.14 /*shift*/);
2797 frontRightChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + frontRightChannelBar_YSize * 0.5
2798 + 43.1 /*shift*/);
2799 frontRightChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontRightChannelBar_ZSize * 0.5
2800 - 2.1 /*shift*/);
2801
2802 TGeoCombiTrans* frontLeftChannelBar_transf[1];
2803
2804 frontLeftChannelBar_transf[0] = new TGeoCombiTrans();
2805 frontLeftChannelBar_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontLeftChannelBar_XSize * 0.5
2806 - 2.37 /*shift*/);
2807 frontLeftChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + frontLeftChannelBar_YSize * 0.5
2808 + 43.1 /*shift*/);
2809 frontLeftChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontLeftChannelBar_ZSize * 0.5
2810 - 2.1 /*shift*/);
2811
2812 frames->AddNode(frontRightChannelBarV, 0, frontRightChannelBar_transf[0]);
2813 frames->AddNode(frontLeftChannelBarV, 0, frontLeftChannelBar_transf[0]);
2814 //--------------------------------------------------------------------------
2815
2816 return frames;
2817}
2818//------------------------------------------------------------------------------
2819
2821 Double_t xsize,
2822 Double_t ysize,
2823 Double_t zsize,
2824 Double_t hole_radius)
2825{
2826
2827 // module shapes
2828 TGeoShape* module_partS = new TGeoBBox("module_partS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
2829 TGeoShape* holeS = new TGeoTube("holeS", 0.0, hole_radius, zsize * 0.5 + 0.01);
2830
2831 gRandom->SetSeed(0);
2832 Int_t uniqueId = gRandom->Integer(10000);
2833 TGeoTranslation* hole_module_trans = new TGeoTranslation(
2834 TString("hole_module_trans_") + TString::Itoa(uniqueId, 10), -xsize * 0.5, -ysize * 0.5, 0.0);
2835
2836 hole_module_trans->RegisterYourself();
2837
2838 TString bool_expression_module = TString(module_partS->GetName()) + TString(" - ") + TString(holeS->GetName())
2839 + TString(":") + TString(hole_module_trans->GetName());
2840 TGeoCompositeShape* moduleS = new TGeoCompositeShape(bool_expression_module);
2841
2842 // module volume
2843 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
2844
2845 // medium
2846 if (pMedArCO27030)
2847 moduleV->SetMedium(pMedArCO27030);
2848 else
2849 Fatal("Main", "Invalid medium for sensitive modules!");
2850
2851 // visual parameters
2852 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
2853 moduleV->SetTransparency(20);
2854
2855 return moduleV;
2856}
2857
2859{
2860
2861 // frame volumes
2862 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
2863 layers->SetMedium(pMedAir);
2864
2865 // Common parameters for all layers
2866 Double_t layer_XSize = XModuleSize_Station163x45; // cm
2867 Double_t layer_YSize = YModuleSize_Station163x45; // cm
2868
2869 Double_t layerFront_XSize = 80.85; // cm
2870 Double_t layerFront_YSize = 44.2; // cm
2871 Double_t layerFront_XShift = -0.375; // cm
2872 Double_t layerFront_YShift = -0.2; // cm
2873
2874 Double_t layerBack_XSize = 80.71; // cm
2875 Double_t layerBack_YSize = 44.2; // cm
2876 Double_t layerBack_XShift = -0.445; // cm
2877 Double_t layerBack_YShift = -0.2; // cm
2878
2879 // copper layer -------------------------------------------------------------
2880 Double_t copperLayer_ZSize = 0.00655; // cm;
2881 Double_t copperLayerHole_Radius = 6.0; // cm
2882
2883 // layer shape
2884 TGeoShape* copperLayerFrontBlankS =
2885 new TGeoBBox(TString("copperLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
2886 layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
2887 TGeoShape* copperLayerBackBlankS =
2888 new TGeoBBox(TString("copperLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
2889 layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
2890
2891 TGeoShape* copperLayerFrontHoleS =
2892 new TGeoTube(TString("copperLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0, copperLayerHole_Radius,
2893 copperLayer_ZSize * 0.5 + 0.01);
2894 TGeoShape* copperLayerBackHoleS = new TGeoTube(TString("copperLayerBackHoleS") += TString("_") + layers->GetName(),
2895 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
2896
2897 TGeoTranslation* copperLayerFrontHole_pos = new TGeoTranslation();
2898 copperLayerFrontHole_pos->SetName("copperLayerFrontHole_pos");
2899 copperLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
2900 copperLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
2901 copperLayerFrontHole_pos->SetDz(0.0);
2902 copperLayerFrontHole_pos->RegisterYourself();
2903
2904 TGeoTranslation* copperLayerBackHole_pos = new TGeoTranslation();
2905 copperLayerBackHole_pos->SetName("copperLayerBackHole_pos");
2906 copperLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
2907 copperLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
2908 copperLayerBackHole_pos->SetDz(0.0);
2909 copperLayerBackHole_pos->RegisterYourself();
2910
2911 TGeoCompositeShape* copperLayerFrontS = new TGeoCompositeShape();
2912 copperLayerFrontS->SetName(TString("copperLayerFrontS") += TString("_") + layers->GetName());
2913 {
2914 TString expression = "copperLayerFrontBlankS";
2915 expression += TString("_") + layers->GetName();
2916 expression += "-copperLayerFrontHoleS";
2917 expression += TString("_") + layers->GetName();
2918 expression += ":copperLayerFrontHole_pos";
2919
2920 copperLayerFrontS->MakeNode(expression);
2921 copperLayerFrontS->ComputeBBox(); // need to compute a bounding box
2922 }
2923
2924 TGeoCompositeShape* copperLayerBackS = new TGeoCompositeShape();
2925 copperLayerBackS->SetName(TString("copperLayerBackS") += TString("_") + layers->GetName());
2926 {
2927 TString expression = "copperLayerBackBlankS";
2928 expression += TString("_") + layers->GetName();
2929 expression += "-copperLayerBackHoleS";
2930 expression += TString("_") + layers->GetName();
2931 expression += ":copperLayerBackHole_pos";
2932
2933 copperLayerBackS->MakeNode(expression);
2934 copperLayerBackS->ComputeBBox(); // need to compute a bounding box
2935 }
2936
2937 TGeoVolume* copperLayerFrontV =
2938 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
2939 TGeoVolume* copperLayerBackV =
2940 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
2941
2942 // volume medium
2943 TGeoMedium* copperLayerV_medium = pMedCopper;
2944 if (copperLayerV_medium) {
2945 copperLayerFrontV->SetMedium(copperLayerV_medium);
2946 copperLayerBackV->SetMedium(copperLayerV_medium);
2947 } else
2948 Fatal("Main", "Invalid medium for copperLayerV!");
2949
2950 // volume visual property (transparency)
2951 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
2952 copperLayerFrontV->SetTransparency(0);
2953 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
2954 copperLayerBackV->SetTransparency(0);
2955
2956 TGeoCombiTrans* copperLayerFront_transf[2];
2957
2958 copperLayerFront_transf[0] = new TGeoCombiTrans();
2959 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
2960 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
2961 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize * 0.5);
2962
2963 TGeoCombiTrans* copperLayerBack_transf[1];
2964
2965 copperLayerBack_transf[0] = new TGeoCombiTrans();
2966 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
2967 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
2968 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5);
2969
2970 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
2971 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
2972 //--------------------------------------------------------------------------
2973
2974 // glue layer ---------------------------------------------------------------
2975 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
2976 Double_t glueLayerHole_Radius = 6.0; // cm
2977
2978 // layer shape
2979 TGeoShape* glueLayerFrontBlankS =
2980 new TGeoBBox(TString("glueLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
2981 layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
2982 TGeoShape* glueLayerBackBlankS = new TGeoBBox(TString("glueLayerBackBlankS") += TString("_") + layers->GetName(),
2983 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
2984
2985 TGeoShape* glueLayerFrontHoleS = new TGeoTube(TString("glueLayerFrontHoleS") += TString("_") + layers->GetName(),
2986 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
2987 TGeoShape* glueLayerBackHoleS = new TGeoTube(TString("glueLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
2988 glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
2989
2990 TGeoTranslation* glueLayerFrontHole_pos = new TGeoTranslation();
2991 glueLayerFrontHole_pos->SetName("glueLayerFrontHole_pos");
2992 glueLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
2993 glueLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
2994 glueLayerFrontHole_pos->SetDz(0.0);
2995 glueLayerFrontHole_pos->RegisterYourself();
2996
2997 TGeoTranslation* glueLayerBackHole_pos = new TGeoTranslation();
2998 glueLayerBackHole_pos->SetName("glueLayerBackHole_pos");
2999 glueLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3000 glueLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3001 glueLayerBackHole_pos->SetDz(0.0);
3002 glueLayerBackHole_pos->RegisterYourself();
3003
3004 TGeoCompositeShape* glueLayerFrontS = new TGeoCompositeShape();
3005 glueLayerFrontS->SetName(TString("glueLayerFrontS") += TString("_") + layers->GetName());
3006 {
3007 TString expression = "glueLayerFrontBlankS";
3008 expression += TString("_") + layers->GetName();
3009 expression += "-glueLayerFrontHoleS";
3010 expression += TString("_") + layers->GetName();
3011 expression += ":glueLayerFrontHole_pos";
3012
3013 glueLayerFrontS->MakeNode(expression);
3014 glueLayerFrontS->ComputeBBox(); // need to compute a bounding box
3015 }
3016
3017 TGeoCompositeShape* glueLayerBackS = new TGeoCompositeShape();
3018 glueLayerBackS->SetName(TString("glueLayerBackS") += TString("_") + layers->GetName());
3019 {
3020 TString expression = "glueLayerBackBlankS";
3021 expression += TString("_") + layers->GetName();
3022 expression += "-glueLayerBackHoleS";
3023 expression += TString("_") + layers->GetName();
3024 expression += ":glueLayerBackHole_pos";
3025
3026 glueLayerBackS->MakeNode(expression);
3027 glueLayerBackS->ComputeBBox(); // need to compute a bounding box
3028 }
3029
3030 TGeoVolume* glueLayerFrontV =
3031 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
3032 TGeoVolume* glueLayerBackV =
3033 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
3034
3035 // volume medium
3036 TGeoMedium* glueLayerV_medium = pMedGlue;
3037 if (glueLayerV_medium) {
3038 glueLayerFrontV->SetMedium(glueLayerV_medium);
3039 glueLayerBackV->SetMedium(glueLayerV_medium);
3040 } else
3041 Fatal("Main", "Invalid medium for glueLayerV!");
3042
3043 // volume visual property (transparency)
3044 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
3045 glueLayerFrontV->SetTransparency(0);
3046 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
3047 glueLayerBackV->SetTransparency(0);
3048
3049 TGeoCombiTrans* glueLayerFront_transf[1];
3050
3051 glueLayerFront_transf[0] = new TGeoCombiTrans();
3052 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
3053 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
3054 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
3055
3056 TGeoCombiTrans* glueLayerBack_transf[1];
3057
3058 glueLayerBack_transf[0] = new TGeoCombiTrans();
3059 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
3060 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
3061 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize * 0.5);
3062
3063 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
3064 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
3065 //--------------------------------------------------------------------------
3066
3067 // epoxide layer ------------------------------------------------------------
3068 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
3069 Double_t epoxideLayerHole_Radius = 6.0; // cm
3070
3071 // layer shape
3072 TGeoShape* epoxideLayerFrontBlankS =
3073 new TGeoBBox(TString("epoxideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3074 layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
3075 TGeoShape* epoxideLayerBackBlankS =
3076 new TGeoBBox(TString("epoxideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
3077 layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
3078
3079 TGeoShape* epoxideLayerFrontHoleS =
3080 new TGeoTube(TString("epoxideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
3081 epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
3082 TGeoShape* epoxideLayerBackHoleS =
3083 new TGeoTube(TString("epoxideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0, epoxideLayerHole_Radius,
3084 epoxideLayer_ZSize * 0.5 + 0.01);
3085
3086 TGeoTranslation* epoxideLayerFrontHole_pos = new TGeoTranslation();
3087 epoxideLayerFrontHole_pos->SetName("epoxideLayerFrontHole_pos");
3088 epoxideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3089 epoxideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3090 epoxideLayerFrontHole_pos->SetDz(0.0);
3091 epoxideLayerFrontHole_pos->RegisterYourself();
3092
3093 TGeoTranslation* epoxideLayerBackHole_pos = new TGeoTranslation();
3094 epoxideLayerBackHole_pos->SetName("epoxideLayerBackHole_pos");
3095 epoxideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3096 epoxideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3097 epoxideLayerBackHole_pos->SetDz(0.0);
3098 epoxideLayerBackHole_pos->RegisterYourself();
3099
3100 TGeoCompositeShape* epoxideLayerFrontS = new TGeoCompositeShape();
3101 epoxideLayerFrontS->SetName(TString("epoxideLayerFrontS") += TString("_") + layers->GetName());
3102 {
3103 TString expression = "epoxideLayerFrontBlankS";
3104 expression += TString("_") + layers->GetName();
3105 expression += "-epoxideLayerFrontHoleS";
3106 expression += TString("_") + layers->GetName();
3107 expression += ":epoxideLayerFrontHole_pos";
3108
3109 epoxideLayerFrontS->MakeNode(expression);
3110 epoxideLayerFrontS->ComputeBBox(); // need to compute a bounding box
3111 }
3112
3113 TGeoCompositeShape* epoxideLayerBackS = new TGeoCompositeShape();
3114 epoxideLayerBackS->SetName(TString("epoxideLayerBackS") += TString("_") + layers->GetName());
3115 {
3116 TString expression = "epoxideLayerBackBlankS";
3117 expression += TString("_") + layers->GetName();
3118 expression += "-epoxideLayerBackHoleS";
3119 expression += TString("_") + layers->GetName();
3120 expression += ":epoxideLayerBackHole_pos";
3121
3122 epoxideLayerBackS->MakeNode(expression);
3123 epoxideLayerBackS->ComputeBBox(); // need to compute a bounding box
3124 }
3125
3126 TGeoVolume* epoxideLayerFrontV =
3127 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
3128 TGeoVolume* epoxideLayerBackV =
3129 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
3130
3131 // volume medium
3132 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
3133 if (epoxideLayerV_medium) {
3134 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
3135 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
3136 } else
3137 Fatal("Main", "Invalid medium for epoxideLayerV!");
3138
3139 // volume visual property (transparency)
3140 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
3141 epoxideLayerFrontV->SetTransparency(0);
3142 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
3143 epoxideLayerBackV->SetTransparency(0);
3144
3145 TGeoCombiTrans* epoxideLayerFront_transf[1];
3146
3147 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
3148 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
3149 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
3150 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3151 + epoxideLayer_ZSize * 0.5);
3152
3153 TGeoCombiTrans* epoxideLayerBack_transf[1];
3154
3155 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
3156 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
3157 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
3158 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize
3159 - epoxideLayer_ZSize * 0.5);
3160
3161 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
3162 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
3163 //--------------------------------------------------------------------------
3164
3165 // honeycomb layer ----------------------------------------------------------
3166 Double_t honeycombLayer_ZSize = 1.5 - (0.06805); // cm; half-thickness of all honeycomb layers
3167 Double_t honeycombLayerHole_Radius = 6.0; // cm
3168
3169 // layer shape
3170 TGeoShape* honeycombLayerFrontBlankS =
3171 new TGeoBBox(TString("honeycombLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3172 layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
3173 TGeoShape* honeycombLayerBackBlankS =
3174 new TGeoBBox(TString("honeycombLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
3175 layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
3176
3177 TGeoShape* honeycombLayerFrontHoleS =
3178 new TGeoTube(TString("honeycombLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
3179 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
3180 TGeoShape* honeycombLayerBackHoleS =
3181 new TGeoTube(TString("honeycombLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
3182 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
3183
3184 TGeoTranslation* honeycombLayerFrontHole_pos = new TGeoTranslation();
3185 honeycombLayerFrontHole_pos->SetName("honeycombLayerFrontHole_pos");
3186 honeycombLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3187 honeycombLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3188 honeycombLayerFrontHole_pos->SetDz(0.0);
3189 honeycombLayerFrontHole_pos->RegisterYourself();
3190
3191 TGeoTranslation* honeycombLayerBackHole_pos = new TGeoTranslation();
3192 honeycombLayerBackHole_pos->SetName("honeycombLayerBackHole_pos");
3193 honeycombLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3194 honeycombLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3195 honeycombLayerBackHole_pos->SetDz(0.0);
3196 honeycombLayerBackHole_pos->RegisterYourself();
3197
3198 TGeoCompositeShape* honeycombLayerFrontS = new TGeoCompositeShape();
3199 honeycombLayerFrontS->SetName(TString("honeycombLayerFrontS") += TString("_") + layers->GetName());
3200 {
3201 TString expression = "honeycombLayerFrontBlankS";
3202 expression += TString("_") + layers->GetName();
3203 expression += "-honeycombLayerFrontHoleS";
3204 expression += TString("_") + layers->GetName();
3205 expression += ":honeycombLayerFrontHole_pos";
3206
3207 honeycombLayerFrontS->MakeNode(expression);
3208 honeycombLayerFrontS->ComputeBBox(); // need to compute a bounding box
3209 }
3210
3211 TGeoCompositeShape* honeycombLayerBackS = new TGeoCompositeShape();
3212 honeycombLayerBackS->SetName(TString("honeycombLayerBackS") += TString("_") + layers->GetName());
3213 {
3214 TString expression = "honeycombLayerBackBlankS";
3215 expression += TString("_") + layers->GetName();
3216 expression += "-honeycombLayerBackHoleS";
3217 expression += TString("_") + layers->GetName();
3218 expression += ":honeycombLayerBackHole_pos";
3219
3220 honeycombLayerBackS->MakeNode(expression);
3221 honeycombLayerBackS->ComputeBBox(); // need to compute a bounding box
3222 }
3223
3224 TGeoVolume* honeycombLayerFrontV =
3225 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
3226 TGeoVolume* honeycombLayerBackV =
3227 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
3228
3229 // volume medium
3230 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
3231 if (honeycombLayerV_medium) {
3232 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
3233 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
3234 } else
3235 Fatal("Main", "Invalid medium for honeycombLayerV!");
3236
3237 // volume visual property (transparency)
3238 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
3239 honeycombLayerFrontV->SetTransparency(0);
3240 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
3241 honeycombLayerBackV->SetTransparency(0);
3242
3243 TGeoCombiTrans* honeycombLayerFront_transf[1];
3244
3245 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
3246 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
3247 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
3248 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3249 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
3250
3251 TGeoCombiTrans* honeycombLayerBack_transf[1];
3252
3253 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
3254 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
3255 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
3256 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize
3257 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5);
3258
3259 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
3260 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
3261 //--------------------------------------------------------------------------
3262
3263 // polyamide layer ----------------------------------------------------------
3264 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
3265 Double_t polyamideLayerHole_Radius = 6.0; // cm
3266
3267 // layer shape
3268 TGeoShape* polyamideLayerFrontBlankS =
3269 new TGeoBBox(TString("polyamideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3270 layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
3271 TGeoShape* polyamideLayerBackBlankS =
3272 new TGeoBBox(TString("polyamideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
3273 layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
3274
3275 TGeoShape* polyamideLayerFrontHoleS =
3276 new TGeoTube(TString("polyamideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
3277 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
3278 TGeoShape* polyamideLayerBackHoleS =
3279 new TGeoTube(TString("polyamideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
3280 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
3281
3282 TGeoTranslation* polyamideLayerFrontHole_pos = new TGeoTranslation();
3283 polyamideLayerFrontHole_pos->SetName("polyamideLayerFrontHole_pos");
3284 polyamideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3285 polyamideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3286 polyamideLayerFrontHole_pos->SetDz(0.0);
3287 polyamideLayerFrontHole_pos->RegisterYourself();
3288
3289 TGeoTranslation* polyamideLayerBackHole_pos = new TGeoTranslation();
3290 polyamideLayerBackHole_pos->SetName("polyamideLayerBackHole_pos");
3291 polyamideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3292 polyamideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3293 polyamideLayerBackHole_pos->SetDz(0.0);
3294 polyamideLayerBackHole_pos->RegisterYourself();
3295
3296 TGeoCompositeShape* polyamideLayerFrontS = new TGeoCompositeShape();
3297 polyamideLayerFrontS->SetName(TString("polyamideLayerFrontS") += TString("_") + layers->GetName());
3298 {
3299 TString expression = "polyamideLayerFrontBlankS";
3300 expression += TString("_") + layers->GetName();
3301 expression += "-polyamideLayerFrontHoleS";
3302 expression += TString("_") + layers->GetName();
3303 expression += ":polyamideLayerFrontHole_pos";
3304
3305 polyamideLayerFrontS->MakeNode(expression);
3306 polyamideLayerFrontS->ComputeBBox(); // need to compute a bounding box
3307 }
3308
3309 TGeoCompositeShape* polyamideLayerBackS = new TGeoCompositeShape();
3310 polyamideLayerBackS->SetName(TString("polyamideLayerBackS") += TString("_") + layers->GetName());
3311 {
3312 TString expression = "polyamideLayerBackBlankS";
3313 expression += TString("_") + layers->GetName();
3314 expression += "-polyamideLayerBackHoleS";
3315 expression += TString("_") + layers->GetName();
3316 expression += ":polyamideLayerBackHole_pos";
3317
3318 polyamideLayerBackS->MakeNode(expression);
3319 polyamideLayerBackS->ComputeBBox(); // need to compute a bounding box
3320 }
3321
3322 TGeoVolume* polyamideLayerFrontV =
3323 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
3324 TGeoVolume* polyamideLayerBackV =
3325 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
3326
3327 // volume medium
3328 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
3329 if (polyamideLayerV_medium) {
3330 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
3331 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
3332 } else
3333 Fatal("Main", "Invalid medium for polyamideLayerV!");
3334
3335 // volume visual property (transparency)
3336 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
3337 polyamideLayerFrontV->SetTransparency(0);
3338 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
3339 polyamideLayerBackV->SetTransparency(0);
3340
3341 TGeoCombiTrans* polyamideLayerFront_transf[1];
3342
3343 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
3344 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
3345 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
3346 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3347 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
3348
3349 TGeoCombiTrans* polyamideLayerBack_transf[1];
3350
3351 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
3352 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
3353 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
3354 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize
3355 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5);
3356
3357 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
3358 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
3359 //--------------------------------------------------------------------------
3360
3361 return layers;
3362}
3363
3365 Double_t dx,
3366 Double_t dy,
3367 Double_t dz,
3368 Double_t hole_radius)
3369{
3370
3371 // frame shapes
3372 TGeoShape* vertical_frameS =
3373 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station163x45 * 0.5 + dy, dz * 0.5);
3374 TGeoShape* horizontal_upper_frameS =
3375 new TGeoBBox("horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5, dy * 0.5, dz * 0.5);
3376 TGeoShape* horizontal_bottom_frameS = new TGeoBBox(
3377 "horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5 - hole_radius * 0.5, dy * 0.5, dz * 0.5);
3378
3379 // frame volumes
3380 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
3381 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
3382 TGeoVolume* horizontal_upper_frameV =
3383 new TGeoVolume(frame_name + "_horizontal_upper_frameV", horizontal_upper_frameS);
3384 TGeoVolume* horizontal_bottom_frameV =
3385 new TGeoVolume(frame_name + "_horizontal_bottom_frameV", horizontal_bottom_frameS);
3386
3387 // media
3388 TGeoMedium* frame_medium = pMedCarbon; // set medium
3389 if (pMedCarbon) {
3390 vertical_frameV->SetMedium(frame_medium);
3391 horizontal_upper_frameV->SetMedium(frame_medium);
3392 horizontal_bottom_frameV->SetMedium(frame_medium);
3393 } else
3394 Fatal("Main", "Invalid medium for frames!");
3395 if (pMedAir) {
3396 composite_frameV->SetMedium(pMedAir);
3397 } else
3398 Fatal("Main", "Invalid medium for frames!");
3399
3400 // visual parameters
3401 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
3402 horizontal_upper_frameV->SetLineColor(TColor::GetColor("#9999ff"));
3403 horizontal_bottom_frameV->SetLineColor(TColor::GetColor("#9999ff"));
3404
3405 // frame part positions in the frame
3406 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
3407 left_vertical_frame_position->SetTranslation(XModuleSize_Station163x45 * 0.5 + dXFrame_Station163x45 * 0.5, 0.0,
3408 0.0);
3409
3410 TGeoCombiTrans* upper_horizontal_frame_position = new TGeoCombiTrans();
3411 upper_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station163x45 * 0.5 + dYFrame_Station163x45 * 0.5,
3412 0.0);
3413
3414 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
3415 bottom_horizontal_frame_position->SetTranslation(
3416 hole_radius * 0.5, -YModuleSize_Station163x45 * 0.5 - dYFrame_Station163x45 * 0.5, 0.0);
3417
3418 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
3419 composite_frameV->AddNode(horizontal_upper_frameV, 0, upper_horizontal_frame_position);
3420 composite_frameV->AddNode(horizontal_bottom_frameV, 0, bottom_horizontal_frame_position);
3421
3422 return composite_frameV;
3423}
3424
3425//------------------------------------------------------------------------------
3427{
3428
3429 // frame volumes
3430 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
3431 frames->SetMedium(pMedAir);
3432
3433 // back lower epoxide frame -------------------------------------------------
3434 Double_t backLowerEpoxideFrame_XSize = 161.42; // cm
3435 Double_t backLowerEpoxideFrame_YSize = 2.2; // cm
3436 Double_t backLowerEpoxideFrame_ZSize = 1.6; // cm
3437
3438 Double_t backLowerEpoxideFrameArch_Rmin = 4.0;
3439 Double_t backLowerEpoxideFrameArch_Rmax = 6.0;
3440 Double_t backLowerEpoxideFrameArch_ZSize = backLowerEpoxideFrame_ZSize;
3441
3442 TGeoShape* backLowerEpoxideFrameHalfS =
3443 new TGeoBBox(TString("backLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3444 (backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5,
3445 backLowerEpoxideFrame_YSize * 0.5, backLowerEpoxideFrame_ZSize * 0.5);
3446 TGeoShape* backLowerEpoxideFrameArchS = new TGeoTubeSeg(
3447 TString("backLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), backLowerEpoxideFrameArch_Rmin,
3448 backLowerEpoxideFrameArch_Rmax, backLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3449
3450 TGeoTranslation* backLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3451 backLowerEpoxideFrameHalf_pos1->SetName("backLowerEpoxideFrameHalf1_pos1");
3452 backLowerEpoxideFrameHalf_pos1->SetDx(
3453 +((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3454 backLowerEpoxideFrameHalf_pos1->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3455 backLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3456 backLowerEpoxideFrameHalf_pos1->RegisterYourself();
3457
3458 TGeoTranslation* backLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3459 backLowerEpoxideFrameHalf_pos2->SetName("backLowerEpoxideFrameHalf1_pos2");
3460 backLowerEpoxideFrameHalf_pos2->SetDx(
3461 -((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3462 backLowerEpoxideFrameHalf_pos2->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3463 backLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3464 backLowerEpoxideFrameHalf_pos2->RegisterYourself();
3465
3466 TGeoTranslation* backLowerEpoxideFrameArch_pos = new TGeoTranslation();
3467 backLowerEpoxideFrameArch_pos->SetName("backLowerEpoxideFrameArch_pos");
3468 backLowerEpoxideFrameArch_pos->SetDx(0.0);
3469 backLowerEpoxideFrameArch_pos->SetDy(0.0);
3470 backLowerEpoxideFrameArch_pos->SetDz(0.0);
3471 backLowerEpoxideFrameArch_pos->RegisterYourself();
3472
3473 TGeoCompositeShape* backLowerEpoxideFrameS = new TGeoCompositeShape();
3474 backLowerEpoxideFrameS->SetName(TString("backLowerEpoxideFrameS") += TString("_") + frames->GetName());
3475 {
3476 TString expression = "backLowerEpoxideFrameHalfS";
3477 expression += TString("_") + frames->GetName();
3478 expression += ":backLowerEpoxideFrameHalf1_pos1";
3479 expression += "+backLowerEpoxideFrameHalfS";
3480 expression += TString("_") + frames->GetName();
3481 expression += ":backLowerEpoxideFrameHalf1_pos2";
3482 expression += "+backLowerEpoxideFrameArchS";
3483 expression += TString("_") + frames->GetName();
3484 expression += ":backLowerEpoxideFrameArch_pos";
3485
3486 backLowerEpoxideFrameS->MakeNode(expression);
3487 backLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3488 }
3489
3490 TGeoVolume* backLowerEpoxideFrameV =
3491 new TGeoVolume(TString("backLowerEpoxideFrameV") += TString("_") + frames->GetName(), backLowerEpoxideFrameS);
3492
3493 // volume medium
3494 TGeoMedium* backLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3495 if (backLowerEpoxideFrameV_medium) {
3496 backLowerEpoxideFrameV->SetMedium(backLowerEpoxideFrameV_medium);
3497 } else
3498 Fatal("Main", "Invalid medium for backLowerEpoxideFrameV!");
3499
3500 // volume visual property (transparency)
3501 backLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3502 backLowerEpoxideFrameV->SetTransparency(0);
3503
3504 TGeoCombiTrans* backLowerEpoxideFrame_transf[1];
3505
3506 backLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3507 backLowerEpoxideFrame_transf[0]->SetDx(0.0);
3508 backLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
3509 backLowerEpoxideFrame_transf[0]->SetDz(+(backLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3510
3511 frames->AddNode(backLowerEpoxideFrameV, 0, backLowerEpoxideFrame_transf[0]);
3512 //--------------------------------------------------------------------------
3513
3514 // front lower epoxide frame -------------------------------------------------
3515 Double_t frontLowerEpoxideFrame_XSize = 161.7; // cm
3516 Double_t frontLowerEpoxideFrame_YSize = 2.2; // cm
3517 Double_t frontLowerEpoxideFrame_ZSize = 1.6; // cm
3518
3519 Double_t frontLowerEpoxideFrameArch_Rmin = 4.0;
3520 Double_t frontLowerEpoxideFrameArch_Rmax = 6.0;
3521 Double_t frontLowerEpoxideFrameArch_ZSize = frontLowerEpoxideFrame_ZSize;
3522
3523 TGeoShape* frontLowerEpoxideFrameHalfS =
3524 new TGeoBBox(TString("frontLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3525 (frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5,
3526 frontLowerEpoxideFrame_YSize * 0.5, frontLowerEpoxideFrame_ZSize * 0.5);
3527 TGeoShape* frontLowerEpoxideFrameArchS = new TGeoTubeSeg(
3528 TString("frontLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), frontLowerEpoxideFrameArch_Rmin,
3529 frontLowerEpoxideFrameArch_Rmax, frontLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3530
3531 TGeoTranslation* frontLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3532 frontLowerEpoxideFrameHalf_pos1->SetName("frontLowerEpoxideFrameHalf1_pos1");
3533 frontLowerEpoxideFrameHalf_pos1->SetDx(
3534 +((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3535 + frontLowerEpoxideFrameArch_Rmin));
3536 frontLowerEpoxideFrameHalf_pos1->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3537 frontLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3538 frontLowerEpoxideFrameHalf_pos1->RegisterYourself();
3539
3540 TGeoTranslation* frontLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3541 frontLowerEpoxideFrameHalf_pos2->SetName("frontLowerEpoxideFrameHalf1_pos2");
3542 frontLowerEpoxideFrameHalf_pos2->SetDx(
3543 -((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3544 + frontLowerEpoxideFrameArch_Rmin));
3545 frontLowerEpoxideFrameHalf_pos2->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3546 frontLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3547 frontLowerEpoxideFrameHalf_pos2->RegisterYourself();
3548
3549 TGeoTranslation* frontLowerEpoxideFrameArch_pos = new TGeoTranslation();
3550 frontLowerEpoxideFrameArch_pos->SetName("frontLowerEpoxideFrameArch_pos");
3551 frontLowerEpoxideFrameArch_pos->SetDx(0.0);
3552 frontLowerEpoxideFrameArch_pos->SetDy(0.0);
3553 frontLowerEpoxideFrameArch_pos->SetDz(0.0);
3554 frontLowerEpoxideFrameArch_pos->RegisterYourself();
3555
3556 TGeoCompositeShape* frontLowerEpoxideFrameS = new TGeoCompositeShape();
3557 frontLowerEpoxideFrameS->SetName(TString("frontLowerEpoxideFrameS") += TString("_") + frames->GetName());
3558 {
3559 TString expression = "frontLowerEpoxideFrameHalfS";
3560 expression += TString("_") + frames->GetName();
3561 expression += ":frontLowerEpoxideFrameHalf1_pos1";
3562 expression += "+frontLowerEpoxideFrameHalfS";
3563 expression += TString("_") + frames->GetName();
3564 expression += ":frontLowerEpoxideFrameHalf1_pos2";
3565 expression += "+frontLowerEpoxideFrameArchS";
3566 expression += TString("_") + frames->GetName();
3567 expression += ":frontLowerEpoxideFrameArch_pos";
3568
3569 frontLowerEpoxideFrameS->MakeNode(expression);
3570 frontLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3571 }
3572
3573 TGeoVolume* frontLowerEpoxideFrameV =
3574 new TGeoVolume(TString("frontLowerEpoxideFrameV") += TString("_") + frames->GetName(), frontLowerEpoxideFrameS);
3575
3576 // volume medium
3577 TGeoMedium* frontLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3578 if (frontLowerEpoxideFrameV_medium) {
3579 frontLowerEpoxideFrameV->SetMedium(frontLowerEpoxideFrameV_medium);
3580 } else
3581 Fatal("Main", "Invalid medium for frontLowerEpoxideFrameV!");
3582
3583 // volume visual property (transparency)
3584 frontLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3585 frontLowerEpoxideFrameV->SetTransparency(0);
3586
3587 TGeoCombiTrans* frontLowerEpoxideFrame_transf[1];
3588
3589 frontLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3590 frontLowerEpoxideFrame_transf[0]->SetDx(0.0);
3591 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
3592 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3593
3594 frames->AddNode(frontLowerEpoxideFrameV, 0, frontLowerEpoxideFrame_transf[0]);
3595 //--------------------------------------------------------------------------
3596
3597 // back side epoxide frame --------------------------------------------------
3598 Double_t backSideEpoxideFramePart_XSize = 9.2; // cm
3599 Double_t backSideEpoxideFramePart_YSize = 52.6; // cm
3600 Double_t backSideEpoxideFramePart_ZSize = 1.6; // cm
3601
3602 Double_t backSideEpoxideFrame_XDistBetweenParts = 161.42; // cm
3603
3604 TGeoShape* backSideEpoxideFramePartS = new TGeoBBox(
3605 TString("backSideEpoxideFramePartS") += TString("_") + frames->GetName(), backSideEpoxideFramePart_XSize * 0.5,
3606 backSideEpoxideFramePart_YSize * 0.5, backSideEpoxideFramePart_ZSize * 0.5);
3607
3608 TGeoTranslation* backSideEpoxideFramePart_pos1 = new TGeoTranslation();
3609 backSideEpoxideFramePart_pos1->SetName("backSideEpoxideFramePart_pos1");
3610 backSideEpoxideFramePart_pos1->SetDx(
3611 +(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3612 backSideEpoxideFramePart_pos1->SetDy(0.0);
3613 backSideEpoxideFramePart_pos1->SetDz(0.0);
3614 backSideEpoxideFramePart_pos1->RegisterYourself();
3615
3616 TGeoTranslation* backSideEpoxideFramePart_pos2 = new TGeoTranslation();
3617 backSideEpoxideFramePart_pos2->SetName("backSideEpoxideFramePart_pos2");
3618 backSideEpoxideFramePart_pos2->SetDx(
3619 -(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3620 backSideEpoxideFramePart_pos2->SetDy(0.0);
3621 backSideEpoxideFramePart_pos2->SetDz(0.0);
3622 backSideEpoxideFramePart_pos2->RegisterYourself();
3623
3624 TGeoCompositeShape* backSideEpoxideFrameS = new TGeoCompositeShape();
3625 backSideEpoxideFrameS->SetName(TString("backSideEpoxideFrameS") += TString("_") + frames->GetName());
3626 {
3627 TString expression = "backSideEpoxideFramePartS";
3628 expression += TString("_") + frames->GetName();
3629 expression += ":backSideEpoxideFramePart_pos1";
3630 expression += "+backSideEpoxideFramePartS";
3631 expression += TString("_") + frames->GetName();
3632 expression += ":backSideEpoxideFramePart_pos2";
3633
3634 backSideEpoxideFrameS->MakeNode(expression);
3635 backSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3636 }
3637
3638 TGeoVolume* backSideEpoxideFrameV =
3639 new TGeoVolume(TString("backSideEpoxideFrameV") += TString("_") + frames->GetName(), backSideEpoxideFrameS);
3640
3641 // volume medium
3642 TGeoMedium* backSideEpoxideFrameV_medium = pMedEpoxideCompound;
3643 if (backSideEpoxideFrameV_medium) {
3644 backSideEpoxideFrameV->SetMedium(backSideEpoxideFrameV_medium);
3645 } else
3646 Fatal("Main", "Invalid medium for backSideEpoxideFrameV!");
3647
3648 // volume visual property (transparency)
3649 backSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3650 backSideEpoxideFrameV->SetTransparency(0);
3651
3652 TGeoCombiTrans* backSideEpoxideFrame_transf[1];
3653
3654 backSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
3655 backSideEpoxideFrame_transf[0]->SetDx(0.0);
3656 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
3657 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3658 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3659
3660 frames->AddNode(backSideEpoxideFrameV, 0, backSideEpoxideFrame_transf[0]);
3661 //--------------------------------------------------------------------------
3662
3663 // back upper epoxide frame -------------------------------------------------
3664 Double_t backUpperEpoxideFrame_XSize = 161.42; // cm
3665 Double_t backUpperEpoxideFrame_YSize = 6.2; // cm
3666 Double_t backUpperEpoxideFrame_ZSize = 1.6; // cm
3667
3668 TGeoShape* backUpperEpoxideFrameS =
3669 new TGeoBBox("backUpperEpoxideFrameS", backUpperEpoxideFrame_XSize * 0.5, backUpperEpoxideFrame_YSize * 0.5,
3670 backUpperEpoxideFrame_ZSize * 0.5);
3671
3672 TGeoVolume* backUpperEpoxideFrameV =
3673 new TGeoVolume(TString("backUpperEpoxideFrameV") += TString("_") + frames->GetName(), backUpperEpoxideFrameS);
3674
3675 // volume medium
3676 TGeoMedium* backUpperEpoxideFrameV_medium = pMedEpoxideCompound;
3677 if (backUpperEpoxideFrameV_medium) {
3678 backUpperEpoxideFrameV->SetMedium(backUpperEpoxideFrameV_medium);
3679 } else
3680 Fatal("Main", "Invalid medium for backUpperEpoxideFrameV!");
3681
3682 // volume visual property (transparency)
3683 backUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3684 backUpperEpoxideFrameV->SetTransparency(0);
3685
3686 TGeoCombiTrans* backUpperEpoxideFrame_transf[1];
3687
3688 backUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
3689 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
3690 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
3691 - 0.6 /*shift*/);
3692 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3693
3694 frames->AddNode(backUpperEpoxideFrameV, 0, backUpperEpoxideFrame_transf[0]);
3695 //--------------------------------------------------------------------------
3696
3697 // front side epoxide frame -------------------------------------------------
3698 Double_t frontSideEpoxideFramePart_XSize = 3.5; // cm
3699 Double_t frontSideEpoxideFramePart_YSize = 49.9; // cm
3700 Double_t frontSideEpoxideFramePart_ZSize = 1.6; // cm
3701
3702 Double_t frontSideEpoxideFrame_XDistBetweenParts = 161.7; // cm
3703
3704 TGeoShape* frontSideEpoxideFramePartS =
3705 new TGeoBBox(TString("frontSideEpoxideFramePartS") += TString("_") + frames->GetName(),
3706 frontSideEpoxideFramePart_XSize * 0.5, frontSideEpoxideFramePart_YSize * 0.5,
3707 frontSideEpoxideFramePart_ZSize * 0.5);
3708
3709 TGeoTranslation* frontSideEpoxideFramePart_pos1 = new TGeoTranslation();
3710 frontSideEpoxideFramePart_pos1->SetName("frontSideEpoxideFramePart_pos1");
3711 frontSideEpoxideFramePart_pos1->SetDx(
3712 +(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3713 frontSideEpoxideFramePart_pos1->SetDy(0.0);
3714 frontSideEpoxideFramePart_pos1->SetDz(0.0);
3715 frontSideEpoxideFramePart_pos1->RegisterYourself();
3716
3717 TGeoTranslation* frontSideEpoxideFramePart_pos2 = new TGeoTranslation();
3718 frontSideEpoxideFramePart_pos2->SetName("frontSideEpoxideFramePart_pos2");
3719 frontSideEpoxideFramePart_pos2->SetDx(
3720 -(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3721 frontSideEpoxideFramePart_pos2->SetDy(0.0);
3722 frontSideEpoxideFramePart_pos2->SetDz(0.0);
3723 frontSideEpoxideFramePart_pos2->RegisterYourself();
3724
3725 TGeoCompositeShape* frontSideEpoxideFrameS = new TGeoCompositeShape();
3726 frontSideEpoxideFrameS->SetName(TString("frontSideEpoxideFrameS") += TString("_") + frames->GetName());
3727 {
3728 TString expression = "frontSideEpoxideFramePartS";
3729 expression += TString("_") + frames->GetName();
3730 expression += ":frontSideEpoxideFramePart_pos1";
3731 expression += "+frontSideEpoxideFramePartS";
3732 expression += TString("_") + frames->GetName();
3733 expression += ":frontSideEpoxideFramePart_pos2";
3734
3735 frontSideEpoxideFrameS->MakeNode(expression);
3736 frontSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3737 }
3738
3739 TGeoVolume* frontSideEpoxideFrameV =
3740 new TGeoVolume(TString("frontSideEpoxideFrameV") += TString("_") + frames->GetName(), frontSideEpoxideFrameS);
3741
3742 // volume medium
3743 TGeoMedium* frontSideEpoxideFrameV_medium = pMedEpoxideCompound;
3744 if (frontSideEpoxideFrameV_medium) {
3745 frontSideEpoxideFrameV->SetMedium(frontSideEpoxideFrameV_medium);
3746 } else
3747 Fatal("Main", "Invalid medium for frontSideEpoxideFrameV!");
3748
3749 // volume visual property (transparency)
3750 frontSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3751 frontSideEpoxideFrameV->SetTransparency(0);
3752
3753 TGeoCombiTrans* frontSideEpoxideFrame_transf[1];
3754
3755 frontSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
3756 frontSideEpoxideFrame_transf[0]->SetDx(0.0);
3757 frontSideEpoxideFrame_transf[0]->SetDy(+((frontSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
3758 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3759 frontSideEpoxideFrame_transf[0]->SetDz(-(frontSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3760
3761 frames->AddNode(frontSideEpoxideFrameV, 0, frontSideEpoxideFrame_transf[0]);
3762 //--------------------------------------------------------------------------
3763
3764 // front upper epoxide frame -------------------------------------------------
3765 Double_t frontUpperEpoxideFrame_XSize = 161.7; // cm
3766 Double_t frontUpperEpoxideFrame_YSize = 3.5; // cm
3767 Double_t frontUpperEpoxideFrame_ZSize = 1.6; // cm
3768
3769 TGeoShape* frontUpperEpoxideFrameS =
3770 new TGeoBBox("frontUpperEpoxideFrameS", frontUpperEpoxideFrame_XSize * 0.5, frontUpperEpoxideFrame_YSize * 0.5,
3771 frontUpperEpoxideFrame_ZSize * 0.5);
3772
3773 TGeoVolume* frontUpperEpoxideFrameV =
3774 new TGeoVolume(TString("frontUpperEpoxideFrameV") += TString("_") + frames->GetName(), frontUpperEpoxideFrameS);
3775
3776 // volume medium
3777 TGeoMedium* frontUpperEpoxideFrameV_medium = pMedEpoxideCompound;
3778 if (frontUpperEpoxideFrameV_medium) {
3779 frontUpperEpoxideFrameV->SetMedium(frontUpperEpoxideFrameV_medium);
3780 } else
3781 Fatal("Main", "Invalid medium for frontUpperEpoxideFrameV!");
3782
3783 // volume visual property (transparency)
3784 frontUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3785 frontUpperEpoxideFrameV->SetTransparency(0);
3786
3787 TGeoCombiTrans* frontUpperEpoxideFrame_transf[1];
3788
3789 frontUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
3790 frontUpperEpoxideFrame_transf[0]->SetDx(0.0);
3791 frontUpperEpoxideFrame_transf[0]->SetDy(+(frontUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
3792 - 0.6 /*shift*/);
3793 frontUpperEpoxideFrame_transf[0]->SetDz(-(frontUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3794
3795 frames->AddNode(frontUpperEpoxideFrameV, 0, frontUpperEpoxideFrame_transf[0]);
3796 //--------------------------------------------------------------------------
3797
3798 // alum. cable support ------------------------------------------------------
3799 Double_t alumCableSupportPart_XSize = 3.0; // cm
3800 Double_t alumCableSupportPart_YSize = 41.3; // cm
3801 Double_t alumCableSupportPart_ZSize = 0.2; // cm
3802
3803 Double_t alumCableSupport_XDistBetweenParts = 164.82; // cm
3804
3805 TGeoShape* alumCableSupportPartS = new TGeoBBox(
3806 TString("alumCableSupportPartS") += TString("_") + frames->GetName(), alumCableSupportPart_XSize * 0.5,
3807 alumCableSupportPart_YSize * 0.5, alumCableSupportPart_ZSize * 0.5);
3808
3809 TGeoTranslation* alumCableSupportPart_pos1 = new TGeoTranslation();
3810 alumCableSupportPart_pos1->SetName("alumCableSupportPart_pos1");
3811 alumCableSupportPart_pos1->SetDx(+(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
3812 alumCableSupportPart_pos1->SetDy(0.0);
3813 alumCableSupportPart_pos1->SetDz(0.0);
3814 alumCableSupportPart_pos1->RegisterYourself();
3815
3816 TGeoTranslation* alumCableSupportPart_pos2 = new TGeoTranslation();
3817 alumCableSupportPart_pos2->SetName("alumCableSupportPart_pos2");
3818 alumCableSupportPart_pos2->SetDx(-(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
3819 alumCableSupportPart_pos2->SetDy(0.0);
3820 alumCableSupportPart_pos2->SetDz(0.0);
3821 alumCableSupportPart_pos2->RegisterYourself();
3822
3823 TGeoCompositeShape* alumCableSupportS = new TGeoCompositeShape();
3824 alumCableSupportS->SetName(TString("alumCableSupportS") += TString("_") + frames->GetName());
3825 {
3826 TString expression = "alumCableSupportPartS";
3827 expression += TString("_") + frames->GetName();
3828 expression += ":alumCableSupportPart_pos1";
3829 expression += "+alumCableSupportPartS";
3830 expression += TString("_") + frames->GetName();
3831 expression += ":alumCableSupportPart_pos2";
3832
3833 alumCableSupportS->MakeNode(expression);
3834 alumCableSupportS->ComputeBBox(); // need to compute a bounding box
3835 }
3836
3837 TGeoVolume* alumCableSupportV =
3838 new TGeoVolume(TString("alumCableSupportV") += TString("_") + frames->GetName(), alumCableSupportS);
3839
3840 // volume medium
3841 TGeoMedium* alumCableSupportV_medium = pMedAluminium;
3842 if (alumCableSupportV_medium) {
3843 alumCableSupportV->SetMedium(alumCableSupportV_medium);
3844 } else
3845 Fatal("Main", "Invalid medium for alumCableSupportV!");
3846
3847 // volume visual property (transparency)
3848 alumCableSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
3849 alumCableSupportV->SetTransparency(0);
3850
3851 TGeoCombiTrans* alumCableSupport_transf[1];
3852
3853 alumCableSupport_transf[0] = new TGeoCombiTrans();
3854 alumCableSupport_transf[0]->SetDx(0.0);
3855 alumCableSupport_transf[0]->SetDy(+((alumCableSupportPart_YSize - YModuleSize_Station163x45) * 0.5)
3856 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3857 alumCableSupport_transf[0]->SetDz(-(alumCableSupportPart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5
3858 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
3859
3860 frames->AddNode(alumCableSupportV, 0, alumCableSupport_transf[0]);
3861 //--------------------------------------------------------------------------
3862
3863 // amplifier upper block ----------------------------------------------------
3864 Double_t amplifierUpperBlockPart1_XSize = 161.44; // cm
3865 Double_t amplifierUpperBlockPart1_YSize = 0.6; // cm
3866 Double_t amplifierUpperBlockPart1_ZSize = 8.41; // cm
3867
3868 Double_t amplifierUpperBlockPart2_XSize = 161.16; // cm
3869 Double_t amplifierUpperBlockPart2_YSize = 0.6; // cm
3870 Double_t amplifierUpperBlockPart2_ZSize = 8.41; // cm
3871
3872 TGeoShape* amplifierUpperBlockPart1S = new TGeoBBox(
3873 TString("amplifierUpperBlockPart1S") += TString("_") + frames->GetName(), amplifierUpperBlockPart1_XSize * 0.5,
3874 amplifierUpperBlockPart1_YSize * 0.5, amplifierUpperBlockPart1_ZSize * 0.5);
3875 TGeoShape* amplifierUpperBlockPart2S = new TGeoBBox(
3876 TString("amplifierUpperBlockPart2S") += TString("_") + frames->GetName(), amplifierUpperBlockPart2_XSize * 0.5,
3877 amplifierUpperBlockPart2_YSize * 0.5, amplifierUpperBlockPart2_ZSize * 0.5);
3878
3879 TGeoTranslation* amplifierUpperBlockPart1_pos = new TGeoTranslation();
3880 amplifierUpperBlockPart1_pos->SetName("amplifierUpperBlockPart1_pos");
3881 amplifierUpperBlockPart1_pos->SetDx(0.0);
3882 amplifierUpperBlockPart1_pos->SetDy(0.0);
3883 amplifierUpperBlockPart1_pos->SetDz(0.0);
3884 amplifierUpperBlockPart1_pos->RegisterYourself();
3885
3886 TGeoTranslation* amplifierUpperBlockPart2_pos = new TGeoTranslation();
3887 amplifierUpperBlockPart2_pos->SetName("amplifierUpperBlockPart2_pos");
3888 amplifierUpperBlockPart2_pos->SetDx(-0.76);
3889 amplifierUpperBlockPart2_pos->SetDy(
3890 -(amplifierUpperBlockPart1_YSize * 0.5 + amplifierUpperBlockPart2_YSize * 0.5 + 0.33));
3891 amplifierUpperBlockPart2_pos->SetDz(0.0);
3892 amplifierUpperBlockPart2_pos->RegisterYourself();
3893
3894 TGeoCompositeShape* amplifierUpperBlockS = new TGeoCompositeShape();
3895 amplifierUpperBlockS->SetName(TString("amplifierUpperBlockS") += TString("_") + frames->GetName());
3896 {
3897 TString expression = "amplifierUpperBlockPart1S";
3898 expression += TString("_") + frames->GetName();
3899 expression += ":amplifierUpperBlockPart1_pos";
3900 expression += "+amplifierUpperBlockPart1S";
3901 expression += TString("_") + frames->GetName();
3902 expression += ":amplifierUpperBlockPart2_pos";
3903
3904 amplifierUpperBlockS->MakeNode(expression);
3905 amplifierUpperBlockS->ComputeBBox(); // need to compute a bounding box
3906 }
3907
3908 TGeoVolume* amplifierUpperBlockV =
3909 new TGeoVolume(TString("amplifierUpperBlockV") += TString("_") + frames->GetName(), amplifierUpperBlockS);
3910
3911 // volume medium
3912 TGeoMedium* amplifierUpperBlockV_medium = pMedFiberGlass;
3913 if (amplifierUpperBlockV_medium) {
3914 amplifierUpperBlockV->SetMedium(amplifierUpperBlockV_medium);
3915 } else
3916 Fatal("Main", "Invalid medium for amplifierUpperBlockV!");
3917
3918 // volume visual property (transparency)
3919 amplifierUpperBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
3920 amplifierUpperBlockV->SetTransparency(0);
3921
3922 TGeoCombiTrans* amplifierUpperBlock_transf[1];
3923
3924 amplifierUpperBlock_transf[0] = new TGeoCombiTrans();
3925 amplifierUpperBlock_transf[0]->SetDx(0.0);
3926 amplifierUpperBlock_transf[0]->SetDy(+(YModuleSize_Station163x45 * 0.5 + backUpperEpoxideFrame_YSize)
3927 - 1.0 /*shift*/);
3928 amplifierUpperBlock_transf[0]->SetDz(-(amplifierUpperBlockPart1_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
3929
3930 frames->AddNode(amplifierUpperBlockV, 0, amplifierUpperBlock_transf[0]);
3931 //--------------------------------------------------------------------------
3932
3933 // amplifier side block -----------------------------------------------------
3934 Double_t amplifierSideBlockPartBig_XSize = 0.6; // cm
3935 Double_t amplifierSideBlockPartBig_YSize = 33.9; // cm
3936 Double_t amplifierSideBlockPartBig_ZSize = 8.41; // cm
3937
3938 Double_t amplifierSideBlockPartSmall_XSize = 0.6; // cm
3939 Double_t amplifierSideBlockPartSmall_YSize = 27.05; // cm
3940 Double_t amplifierSideBlockPartSmall_ZSize = 8.41; // cm
3941
3942 TGeoShape* amplifierSideBlockPartBigS =
3943 new TGeoBBox(TString("amplifierSideBlockPartBigS") += TString("_") + frames->GetName(),
3944 amplifierSideBlockPartBig_XSize * 0.5, amplifierSideBlockPartBig_YSize * 0.5,
3945 amplifierSideBlockPartBig_ZSize * 0.5);
3946 TGeoShape* amplifierSideBlockPartSmallS =
3947 new TGeoBBox(TString("amplifierSideBlockPartSmallS") += TString("_") + frames->GetName(),
3948 amplifierSideBlockPartSmall_XSize * 0.5, amplifierSideBlockPartSmall_YSize * 0.5,
3949 amplifierSideBlockPartSmall_ZSize * 0.5);
3950
3951 TGeoTranslation* amplifierSideBlockPartBig_pos = new TGeoTranslation();
3952 amplifierSideBlockPartBig_pos->SetName("amplifierSideBlockPartBig_pos");
3953 amplifierSideBlockPartBig_pos->SetDx(0.0);
3954 amplifierSideBlockPartBig_pos->SetDy(0.0);
3955 amplifierSideBlockPartBig_pos->SetDz(0.0);
3956 amplifierSideBlockPartBig_pos->RegisterYourself();
3957
3958 TGeoTranslation* amplifierSideBlockPartSmall_pos = new TGeoTranslation();
3959 amplifierSideBlockPartSmall_pos->SetName("amplifierSideBlockPartSmall_pos");
3960 amplifierSideBlockPartSmall_pos->SetDx(
3961 +(amplifierSideBlockPartBig_XSize * 0.5 + amplifierSideBlockPartSmall_XSize * 0.5 + 1.72));
3962 amplifierSideBlockPartSmall_pos->SetDy(+0.05);
3963 amplifierSideBlockPartSmall_pos->SetDz(0.0);
3964 amplifierSideBlockPartSmall_pos->RegisterYourself();
3965
3966 TGeoCompositeShape* amplifierSideBlockS = new TGeoCompositeShape();
3967 amplifierSideBlockS->SetName(TString("amplifierSideBlockS") += TString("_") + frames->GetName());
3968 {
3969 TString expression = "amplifierSideBlockPartBigS";
3970 expression += TString("_") + frames->GetName();
3971 expression += ":amplifierSideBlockPartBig_pos";
3972 expression += "+amplifierSideBlockPartSmallS";
3973 expression += TString("_") + frames->GetName();
3974 expression += ":amplifierSideBlockPartSmall_pos";
3975
3976 amplifierSideBlockS->MakeNode(expression);
3977 amplifierSideBlockS->ComputeBBox(); // need to compute a bounding box
3978 }
3979
3980 TGeoVolume* amplifierSideBlockV =
3981 new TGeoVolume(TString("amplifierSideBlockV") += TString("_") + frames->GetName(), amplifierSideBlockS);
3982
3983 // volume medium
3984 TGeoMedium* amplifierSideBlockV_medium = pMedFiberGlass;
3985 if (amplifierSideBlockV_medium) {
3986 amplifierSideBlockV->SetMedium(amplifierSideBlockV_medium);
3987 } else
3988 Fatal("Main", "Invalid medium for amplifierSideBlockV!");
3989
3990 // volume visual property (transparency)
3991 amplifierSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
3992 amplifierSideBlockV->SetTransparency(0);
3993
3994 TGeoCombiTrans* amplifierSideBlock_transf[2];
3995
3996 amplifierSideBlock_transf[0] = new TGeoCombiTrans();
3997 amplifierSideBlock_transf[0]->SetDx(+86.47 /*shift*/);
3998 amplifierSideBlock_transf[0]->SetDy(-5.5);
3999 amplifierSideBlock_transf[0]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
4000
4001 amplifierSideBlock_transf[1] = new TGeoCombiTrans();
4002 amplifierSideBlock_transf[1]->RotateY(180.0);
4003 amplifierSideBlock_transf[1]->SetDx(-86.47 /*shift*/);
4004 amplifierSideBlock_transf[1]->SetDy(-5.5);
4005 amplifierSideBlock_transf[1]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
4006
4007 frames->AddNode(amplifierSideBlockV, 0, amplifierSideBlock_transf[0]);
4008 frames->AddNode(amplifierSideBlockV, 1, amplifierSideBlock_transf[1]);
4009 //--------------------------------------------------------------------------
4010
4011 // upper PCB (Printed Circuit Board) ----------------------------------------
4012 Double_t upperPcb_XSize = 177.22; // cm
4013 Double_t upperPcb_YSize = 0.3; // cm
4014 Double_t upperPcb_ZSize = 4.0; // cm
4015
4016 TGeoShape* upperPcbS = new TGeoBBox("upperPcbS", upperPcb_XSize * 0.5, upperPcb_YSize * 0.5, upperPcb_ZSize * 0.5);
4017
4018 TGeoVolume* upperPcbV = new TGeoVolume(TString("upperPcbV") += TString("_") + frames->GetName(), upperPcbS);
4019
4020 // volume medium
4021 TGeoMedium* upperPcbV_medium = pMedFiberGlass;
4022 if (upperPcbV_medium) {
4023 upperPcbV->SetMedium(upperPcbV_medium);
4024 } else
4025 Fatal("Main", "Invalid medium for upperPcbV!");
4026
4027 // volume visual property (transparency)
4028 upperPcbV->SetLineColor(TColor::GetColor("#88ff88"));
4029 upperPcbV->SetTransparency(0);
4030
4031 TGeoCombiTrans* upperPcb_transf[1];
4032
4033 upperPcb_transf[0] = new TGeoCombiTrans();
4034 upperPcb_transf[0]->SetDx(+0.1 /*shift*/);
4035 upperPcb_transf[0]->SetDy(+(upperPcb_YSize * 0.5 + 23.5 /*shift*/));
4036 upperPcb_transf[0]->SetDz(-(upperPcb_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5 - ZModuleSize_Station163x45
4037 - frontSideEpoxideFramePart_ZSize);
4038
4039 frames->AddNode(upperPcbV, 0, upperPcb_transf[0]);
4040 //--------------------------------------------------------------------------
4041
4042 // side PCB -----------------------------------------------------------------
4043 Double_t sidePcbPart_XSize = 0.3; // cm
4044 Double_t sidePcbPart_YSize = 35.05; // cm
4045 Double_t sidePcbPart_ZSize = 4.0; // cm
4046
4047 TGeoShape* sidePcbPartS = new TGeoBBox(TString("sidePcbPartS") += TString("_") + frames->GetName(),
4048 sidePcbPart_XSize * 0.5, sidePcbPart_YSize * 0.5, sidePcbPart_ZSize * 0.5);
4049
4050 TGeoTranslation* sidePcbPart_pos1 = new TGeoTranslation();
4051 sidePcbPart_pos1->SetName("sidePcbPart_pos1");
4052 sidePcbPart_pos1->SetDx(0.0);
4053 sidePcbPart_pos1->SetDy(0.0);
4054 sidePcbPart_pos1->SetDz(0.0);
4055 sidePcbPart_pos1->RegisterYourself();
4056
4057 TGeoTranslation* sidePcbPart_pos2 = new TGeoTranslation();
4058 sidePcbPart_pos2->SetName("sidePcbPart_pos2");
4059 sidePcbPart_pos2->SetDx(+(sidePcbPart_XSize + 6.1 /*shift*/));
4060 sidePcbPart_pos2->SetDy(0.0);
4061 sidePcbPart_pos2->SetDz(0.0);
4062 sidePcbPart_pos2->RegisterYourself();
4063
4064 TGeoCompositeShape* sidePcbS = new TGeoCompositeShape();
4065 sidePcbS->SetName(TString("sidePcbS") += TString("_") + frames->GetName());
4066 {
4067 TString expression = "sidePcbPartS";
4068 expression += TString("_") + frames->GetName();
4069 expression += ":sidePcbPart_pos1";
4070 expression += "+sidePcbPartS";
4071 expression += TString("_") + frames->GetName();
4072 expression += ":sidePcbPart_pos2";
4073
4074 sidePcbS->MakeNode(expression);
4075 sidePcbS->ComputeBBox(); // need to compute a bounding box
4076 }
4077
4078 TGeoVolume* sidePcbV = new TGeoVolume(TString("sidePcbV") += TString("_") + frames->GetName(), sidePcbS);
4079
4080 // volume medium
4081 TGeoMedium* sidePcbV_medium = pMedFiberGlass;
4082 if (sidePcbV_medium) {
4083 sidePcbV->SetMedium(sidePcbV_medium);
4084 } else
4085 Fatal("Main", "Invalid medium for sidePcbV!");
4086
4087 // volume visual property (transparency)
4088 sidePcbV->SetLineColor(TColor::GetColor("#88ff88"));
4089 sidePcbV->SetTransparency(0);
4090
4091 TGeoCombiTrans* sidePcb_transf[2];
4092
4093 sidePcb_transf[0] = new TGeoCombiTrans();
4094 sidePcb_transf[0]->SetDx(+(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
4095 sidePcb_transf[0]->SetDy(-6.8 /*shift*/);
4096 sidePcb_transf[0]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
4097 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
4098
4099 sidePcb_transf[1] = new TGeoCombiTrans();
4100 sidePcb_transf[1]->RotateY(180.0);
4101 sidePcb_transf[1]->SetDx(-(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
4102 sidePcb_transf[1]->SetDy(-6.8 /*shift*/);
4103 sidePcb_transf[1]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
4104 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
4105
4106 frames->AddNode(sidePcbV, 0, sidePcb_transf[0]);
4107 frames->AddNode(sidePcbV, 1, sidePcb_transf[1]);
4108 //--------------------------------------------------------------------------
4109
4110 // alum. side support -------------------------------------------------------
4111 Double_t alumSideSupport_XSize = 4.8; // cm
4112 Double_t alumSideSupport_YSize = 52.6; // cm
4113 Double_t alumSideSupport_ZSize = 0.4; // cm
4114
4115 TGeoShape* alumSideSupportS = new TGeoBBox("alumSideSupportS", alumSideSupport_XSize * 0.5,
4116 alumSideSupport_YSize * 0.5, alumSideSupport_ZSize * 0.5);
4117
4118 TGeoVolume* alumSideSupportV =
4119 new TGeoVolume(TString("alumSideSupportV") += TString("_") + frames->GetName(), alumSideSupportS);
4120
4121 // volume medium
4122 TGeoMedium* alumSideSupportV_medium = pMedAluminium;
4123 if (alumSideSupportV_medium) {
4124 alumSideSupportV->SetMedium(alumSideSupportV_medium);
4125 } else
4126 Fatal("Main", "Invalid medium for alumSideSupportV!");
4127
4128 // volume visual property (transparency)
4129 alumSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
4130 alumSideSupportV->SetTransparency(0);
4131
4132 TGeoCombiTrans* alumSideSupport_transf[2];
4133
4134 alumSideSupport_transf[0] = new TGeoCombiTrans();
4135 alumSideSupport_transf[0]->SetDx(+(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
4136 alumSideSupport_transf[0]->SetDy(+1.8);
4137 alumSideSupport_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
4138
4139 alumSideSupport_transf[1] = new TGeoCombiTrans();
4140 alumSideSupport_transf[1]->SetDx(-(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
4141 alumSideSupport_transf[1]->SetDy(+1.8 /*shift*/);
4142 alumSideSupport_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
4143
4144 frames->AddNode(alumSideSupportV, 0, alumSideSupport_transf[0]);
4145 frames->AddNode(alumSideSupportV, 1, alumSideSupport_transf[1]);
4146 //--------------------------------------------------------------------------
4147
4148 // bosch shape --------------------------------------------------------------
4149 Double_t boschShape_XSize = 2.25; // cm
4150 Double_t boschShape_YSize = 52.6; // cm
4151 Double_t boschShape_ZSize = 2.25; // cm
4152
4153 TGeoShape* boschShapeS =
4154 new TGeoBBox("boschShapeS", boschShape_XSize * 0.5, boschShape_YSize * 0.5, boschShape_ZSize * 0.5);
4155
4156 TGeoVolume* boschShapeV = new TGeoVolume(TString("boschShapeV") += TString("_") + frames->GetName(), boschShapeS);
4157
4158 // volume medium
4159 TGeoMedium* boschShapeV_medium = pMedAluminium;
4160 if (boschShapeV_medium) {
4161 boschShapeV->SetMedium(boschShapeV_medium);
4162 } else
4163 Fatal("Main", "Invalid medium for boschShapeV!");
4164
4165 // volume visual property (transparency)
4166 boschShapeV->SetLineColor(TColor::GetColor("#ffcccc"));
4167 boschShapeV->SetTransparency(0);
4168
4169 TGeoCombiTrans* boschShape_transf[2];
4170
4171 boschShape_transf[0] = new TGeoCombiTrans();
4172 boschShape_transf[0]->SetDx(+(boschShape_XSize * 0.5 + 90.86 /*shift*/));
4173 boschShape_transf[0]->SetDy(+1.8 /*shift*/);
4174 boschShape_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
4175
4176 boschShape_transf[1] = new TGeoCombiTrans();
4177 boschShape_transf[1]->SetDx(-(boschShape_XSize * 0.5 + 90.86 /*shift*/));
4178 boschShape_transf[1]->SetDy(+1.8 /*shift*/);
4179 boschShape_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
4180
4181 frames->AddNode(boschShapeV, 0, boschShape_transf[0]);
4182 frames->AddNode(boschShapeV, 1, boschShape_transf[1]);
4183 //--------------------------------------------------------------------------
4184
4185 // lower fiberglass block ---------------------------------------------------------
4186 Double_t lowerFiberGlassBlock_XSize = 165.1; // cm
4187 Double_t lowerFiberGlassBlock_YSize = 1.75; // cm
4188 Double_t lowerFiberGlassBlock_ZSize = 0.9; // cm
4189
4190 Double_t lowerFiberGlassBlockArch_Rmin = 4.0;
4191 Double_t lowerFiberGlassBlockArch_Rmax = 5.75;
4192 Double_t lowerFiberGlassBlockArch_ZSize = lowerFiberGlassBlock_ZSize;
4193
4194 TGeoShape* lowerFiberGlassBlockHalfS =
4195 new TGeoBBox(TString("lowerFiberGlassBlockHalfS") += TString("_") + frames->GetName(),
4196 (lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5,
4197 lowerFiberGlassBlock_YSize * 0.5, lowerFiberGlassBlock_ZSize * 0.5);
4198 TGeoShape* lowerFiberGlassBlockArchS = new TGeoTubeSeg(
4199 TString("lowerFiberGlassBlockArchS") += TString("_") + frames->GetName(), lowerFiberGlassBlockArch_Rmin,
4200 lowerFiberGlassBlockArch_Rmax, lowerFiberGlassBlockArch_ZSize * 0.5, 0.0, 180.0);
4201
4202 TGeoTranslation* lowerFiberGlassBlockHalf_pos1 = new TGeoTranslation();
4203 lowerFiberGlassBlockHalf_pos1->SetName("lowerFiberGlassBlockHalf_pos1");
4204 lowerFiberGlassBlockHalf_pos1->SetDx(
4205 +((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
4206 lowerFiberGlassBlockHalf_pos1->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
4207 lowerFiberGlassBlockHalf_pos1->SetDz(0.0);
4208 lowerFiberGlassBlockHalf_pos1->RegisterYourself();
4209
4210 TGeoTranslation* lowerFiberGlassBlockHalf_pos2 = new TGeoTranslation();
4211 lowerFiberGlassBlockHalf_pos2->SetName("lowerFiberGlassBlockHalf_pos2");
4212 lowerFiberGlassBlockHalf_pos2->SetDx(
4213 -((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
4214 lowerFiberGlassBlockHalf_pos2->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
4215 lowerFiberGlassBlockHalf_pos2->SetDz(0.0);
4216 lowerFiberGlassBlockHalf_pos2->RegisterYourself();
4217
4218 TGeoTranslation* lowerFiberGlassBlockArch_pos = new TGeoTranslation();
4219 lowerFiberGlassBlockArch_pos->SetName("lowerFiberGlassBlockArch_pos");
4220 lowerFiberGlassBlockArch_pos->SetDx(0.0);
4221 lowerFiberGlassBlockArch_pos->SetDy(0.0);
4222 lowerFiberGlassBlockArch_pos->SetDz(0.0);
4223 lowerFiberGlassBlockArch_pos->RegisterYourself();
4224
4225 TGeoCompositeShape* lowerFiberGlassBlockS = new TGeoCompositeShape();
4226 lowerFiberGlassBlockS->SetName(TString("lowerFiberGlassBlockS") += TString("_") + frames->GetName());
4227 {
4228 TString expression = "lowerFiberGlassBlockHalfS";
4229 expression += TString("_") + frames->GetName();
4230 expression += ":lowerFiberGlassBlockHalf_pos1";
4231 expression += "+lowerFiberGlassBlockHalfS";
4232 expression += TString("_") + frames->GetName();
4233 expression += ":lowerFiberGlassBlockHalf_pos2";
4234 expression += "+lowerFiberGlassBlockArchS";
4235 expression += TString("_") + frames->GetName();
4236 expression += ":lowerFiberGlassBlockArch_pos";
4237
4238 lowerFiberGlassBlockS->MakeNode(expression);
4239 lowerFiberGlassBlockS->ComputeBBox(); // need to compute a bounding box
4240 }
4241
4242 TGeoVolume* lowerFiberGlassBlockV =
4243 new TGeoVolume(TString("lowerFiberGlassBlockV") += TString("_") + frames->GetName(), lowerFiberGlassBlockS);
4244
4245 // volume medium
4246 TGeoMedium* lowerFiberGlassBlockV_medium = pMedFiberGlass;
4247 if (lowerFiberGlassBlockV_medium) {
4248 lowerFiberGlassBlockV->SetMedium(lowerFiberGlassBlockV_medium);
4249 } else
4250 Fatal("Main", "Invalid medium for lowerFiberGlassBlockV!");
4251
4252 // volume visual property (transparency)
4253 lowerFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4254 lowerFiberGlassBlockV->SetTransparency(0);
4255
4256 TGeoCombiTrans* lowerFiberGlassBlock_transf[1];
4257
4258 lowerFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4259 lowerFiberGlassBlock_transf[0]->SetDx(0.0);
4260 lowerFiberGlassBlock_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
4261 lowerFiberGlassBlock_transf[0]->SetDz(0.0);
4262
4263 frames->AddNode(lowerFiberGlassBlockV, 0, lowerFiberGlassBlock_transf[0]);
4264 //--------------------------------------------------------------------------
4265
4266 // side fiberglass block ----------------------------------------------------
4267 Double_t sideFiberGlassBlockPart_XSize = 1.45; // cm
4268 Double_t sideFiberGlassBlockPart_YSize = 49.4; // cm
4269 Double_t sideFiberGlassBlockPart_ZSize = 0.89; // cm
4270
4271 TGeoShape* sideFiberGlassBlockS =
4272 new TGeoBBox("sideFiberGlassBlockS", sideFiberGlassBlockPart_XSize * 0.5, sideFiberGlassBlockPart_YSize * 0.5,
4273 sideFiberGlassBlockPart_ZSize * 0.5);
4274
4275 TGeoVolume* sideFiberGlassBlockV =
4276 new TGeoVolume(TString("sideFiberGlassBlockV") += TString("_") + frames->GetName(), sideFiberGlassBlockS);
4277
4278 // volume medium
4279 TGeoMedium* sideFiberGlassBlockV_medium = pMedFiberGlass;
4280 if (sideFiberGlassBlockV_medium) {
4281 sideFiberGlassBlockV->SetMedium(sideFiberGlassBlockV_medium);
4282 } else
4283 Fatal("Main", "Invalid medium for sideFiberGlassBlockV!");
4284
4285 // volume visual property (transparency)
4286 sideFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4287 sideFiberGlassBlockV->SetTransparency(0);
4288
4289 TGeoCombiTrans* sideFiberGlassBlock_transf[2];
4290
4291 sideFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4292 sideFiberGlassBlock_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4293 sideFiberGlassBlock_transf[0]->SetDy(+0.45 /*shift*/);
4294 sideFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4295
4296 sideFiberGlassBlock_transf[1] = new TGeoCombiTrans();
4297 sideFiberGlassBlock_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4298 sideFiberGlassBlock_transf[1]->SetDy(+0.45 /*shift*/);
4299 sideFiberGlassBlock_transf[1]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4300
4301 frames->AddNode(sideFiberGlassBlockV, 0, sideFiberGlassBlock_transf[0]);
4302 frames->AddNode(sideFiberGlassBlockV, 1, sideFiberGlassBlock_transf[1]);
4303 //--------------------------------------------------------------------------
4304
4305 // upper fiberglass block ---------------------------------------------------
4306 Double_t upperFiberGlassBlock_XSize = 165.1; // cm
4307 Double_t upperFiberGlassBlock_YSize = 1.45; // cm
4308 Double_t upperFiberGlassBlock_ZSize = 0.89; // cm
4309
4310 TGeoShape* upperFiberGlassBlockS = new TGeoBBox("upperFiberGlassBlockS", upperFiberGlassBlock_XSize * 0.5,
4311 upperFiberGlassBlock_YSize * 0.5, upperFiberGlassBlock_ZSize * 0.5);
4312
4313 TGeoVolume* upperFiberGlassBlockV =
4314 new TGeoVolume(TString("upperFiberGlassBlockV") += TString("_") + frames->GetName(), upperFiberGlassBlockS);
4315
4316 // volume medium
4317 TGeoMedium* upperFiberGlassBlockV_medium = pMedFiberGlass;
4318 if (upperFiberGlassBlockV_medium) {
4319 upperFiberGlassBlockV->SetMedium(upperFiberGlassBlockV_medium);
4320 } else
4321 Fatal("Main", "Invalid medium for upperFiberGlassBlockV!");
4322
4323 // volume visual property (transparency)
4324 upperFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4325 upperFiberGlassBlockV->SetTransparency(0);
4326
4327 TGeoCombiTrans* upperFiberGlassBlock_transf[1];
4328
4329 upperFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4330 upperFiberGlassBlock_transf[0]->SetDx(0.0);
4331 upperFiberGlassBlock_transf[0]->SetDy(
4332 +(sideFiberGlassBlockPart_YSize * 0.5 - upperFiberGlassBlock_YSize * 0.5 + 0.45 /*shift*/));
4333 upperFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4334
4335 frames->AddNode(upperFiberGlassBlockV, 0, upperFiberGlassBlock_transf[0]);
4336 //--------------------------------------------------------------------------
4337
4338 // brass layer --------------------------------------------------------------
4339 Double_t upperBrasslayer_XSize = 165.1; // cm
4340 Double_t upperBrasslayer_YSize = 1.45; // cm
4341 Double_t upperBrasslayer_ZSize = 0.005; // cm
4342
4343 Double_t sideBrasslayer_XSize = 1.45; // cm
4344 Double_t sideBrasslayer_YSize = 49.4; // cm
4345 Double_t sideBrasslayer_ZSize = 0.005; // cm
4346
4347 TGeoShape* upperBrasslayerS = new TGeoBBox("upperBrasslayerS", upperBrasslayer_XSize * 0.5,
4348 upperBrasslayer_YSize * 0.5, upperBrasslayer_ZSize * 0.5);
4349 TGeoShape* sideBrasslayerS = new TGeoBBox("sideBrasslayerS", sideBrasslayer_XSize * 0.5, sideBrasslayer_YSize * 0.5,
4350 sideBrasslayer_ZSize * 0.5);
4351
4352 TGeoVolume* upperBrasslayerV =
4353 new TGeoVolume(TString("upperBrasslayerV") += TString("_") + frames->GetName(), upperBrasslayerS);
4354 TGeoVolume* sideBrasslayerV =
4355 new TGeoVolume(TString("sideBrasslayerV") += TString("_") + frames->GetName(), sideBrasslayerS);
4356
4357 // volume medium
4358 TGeoMedium* upperBrasslayerV_medium = pMedBrass;
4359 if (upperBrasslayerV_medium) {
4360 upperBrasslayerV->SetMedium(upperBrasslayerV_medium);
4361 sideBrasslayerV->SetMedium(upperBrasslayerV_medium);
4362 } else
4363 Fatal("Main", "Invalid medium for upperBrasslayerV_medium!");
4364
4365 // volume visual property (transparency)
4366 upperBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4367 upperBrasslayerV->SetTransparency(0);
4368 sideBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4369 sideBrasslayerV->SetTransparency(0);
4370
4371 TGeoCombiTrans* upperBrasslayer_transf[1];
4372
4373 upperBrasslayer_transf[0] = new TGeoCombiTrans();
4374 upperBrasslayer_transf[0]->SetDx(0.0);
4375 upperBrasslayer_transf[0]->SetDy(
4376 +(sideFiberGlassBlockPart_YSize * 0.5 - upperBrasslayer_YSize * 0.5 + 0.45 /*shift*/));
4377 upperBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4378
4379 TGeoCombiTrans* sideBrasslayer_transf[2];
4380
4381 sideBrasslayer_transf[0] = new TGeoCombiTrans();
4382 sideBrasslayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4383 sideBrasslayer_transf[0]->SetDy(+0.45 /*shift*/);
4384 sideBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4385
4386 sideBrasslayer_transf[1] = new TGeoCombiTrans();
4387 sideBrasslayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4388 sideBrasslayer_transf[1]->SetDy(+0.45 /*shift*/);
4389 sideBrasslayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4390
4391 frames->AddNode(upperBrasslayerV, 0, upperBrasslayer_transf[0]);
4392
4393 frames->AddNode(sideBrasslayerV, 0, sideBrasslayer_transf[0]);
4394 frames->AddNode(sideBrasslayerV, 1, sideBrasslayer_transf[1]);
4395 //--------------------------------------------------------------------------
4396
4397 // steel layer --------------------------------------------------------------
4398 Double_t upperSteellayer_XSize = 165.1; // cm
4399 Double_t upperSteellayer_YSize = 1.45; // cm
4400 Double_t upperSteellayer_ZSize = 0.005; // cm
4401
4402 Double_t sideSteellayer_XSize = 1.45; // cm
4403 Double_t sideSteellayer_YSize = 49.4; // cm
4404 Double_t sideSteellayer_ZSize = 0.005; // cm
4405
4406 TGeoShape* upperSteellayerS = new TGeoBBox("upperSteellayerS", upperSteellayer_XSize * 0.5,
4407 upperSteellayer_YSize * 0.5, upperSteellayer_ZSize * 0.5);
4408 TGeoShape* sideSteellayerS = new TGeoBBox("sideSteellayerS", sideSteellayer_XSize * 0.5, sideSteellayer_YSize * 0.5,
4409 sideSteellayer_ZSize * 0.5);
4410
4411 TGeoVolume* upperSteellayerV =
4412 new TGeoVolume(TString("upperSteellayerV") += TString("_") + frames->GetName(), upperSteellayerS);
4413 TGeoVolume* sideSteellayerV =
4414 new TGeoVolume(TString("sideSteellayerV") += TString("_") + frames->GetName(), sideSteellayerS);
4415
4416 // volume medium
4417 TGeoMedium* upperSteellayerV_medium = pMedSteel;
4418 if (upperSteellayerV_medium) {
4419 upperSteellayerV->SetMedium(upperSteellayerV_medium);
4420 sideSteellayerV->SetMedium(upperSteellayerV_medium);
4421 } else
4422 Fatal("Main", "Invalid medium for upperSteellayerV_medium!");
4423
4424 // volume visual property (transparency)
4425 upperSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4426 upperSteellayerV->SetTransparency(0);
4427 sideSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4428 sideSteellayerV->SetTransparency(0);
4429
4430 TGeoCombiTrans* upperSteellayer_transf[1];
4431
4432 upperSteellayer_transf[0] = new TGeoCombiTrans();
4433 upperSteellayer_transf[0]->SetDx(0.0);
4434 upperSteellayer_transf[0]->SetDy(
4435 +(sideFiberGlassBlockPart_YSize * 0.5 - upperSteellayer_YSize * 0.5 + 0.45 /*shift*/));
4436 upperSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperSteellayer_ZSize * 0.5 + 0.005 /*shift*/);
4437
4438 TGeoCombiTrans* sideSteellayer_transf[2];
4439
4440 sideSteellayer_transf[0] = new TGeoCombiTrans();
4441 sideSteellayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4442 sideSteellayer_transf[0]->SetDy(+0.45 /*shift*/);
4443 sideSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
4444
4445 sideSteellayer_transf[1] = new TGeoCombiTrans();
4446 sideSteellayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4447 sideSteellayer_transf[1]->SetDy(+0.45 /*shift*/);
4448 sideSteellayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
4449
4450 frames->AddNode(upperSteellayerV, 0, upperSteellayer_transf[0]);
4451
4452 frames->AddNode(sideSteellayerV, 0, sideSteellayer_transf[0]);
4453 frames->AddNode(sideSteellayerV, 1, sideSteellayer_transf[1]);
4454 //--------------------------------------------------------------------------
4455
4456 return frames;
4457}
int Int_t
double Double_t
constexpr Bool_t kTRUE
void Fatal(const char *location, const char *msgfmt,...)
R__EXTERN TGeoManager * gGeoManager
#define gROOT
R__EXTERN TRandom * gRandom
R__EXTERN TSystem * gSystem
static Int_t GetColor(const char *hexcolor)
void Close(Option_t *option="") override
void SetDz(Double_t dz) override
void RotateY(Double_t angle) override
void SetDy(Double_t dy) override
void SetDx(Double_t dx) override
void SetTranslation(const TGeoTranslation &tr)
void RotateZ(Double_t angle) override
void ComputeBBox() override
void MakeNode(const char *expression)
virtual void RegisterYourself()
const char * GetName() const override
void SetDy(Double_t dy) override
void SetDz(Double_t dz) override
void SetDx(Double_t dx) override
void SetVisContainers(Bool_t flag=kTRUE) override
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
void Draw(Option_t *option="") override
void SetTransparency(Char_t transparency=0)
virtual void SetMedium(TGeoMedium *medium)
void SetLineColor(Color_t lcolor) override
const char * GetName() const override
virtual void SetName(const char *name)
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
static TString Itoa(Int_t value, Int_t base)
const Double_t dYFrame_Station163x45
const Double_t dXFrame_Station66x41
const Double_t dZFrame_Station66x41
const Double_t ZModuleSize_Station66x41
const Double_t YStationPositions[NStations]
const Double_t dYFrame_Station66x41
const Double_t ZModuleSize_Station163x45
const Double_t dXFrame_Station163x45
const Double_t YModuleSize_Station163x45
const Double_t dZFrame_Station163x45
const Double_t ZStationPositions[NStations]
const Double_t YModuleSize_Station66x41
const Double_t XModuleSize_Station163x45
const Double_t XModuleSize_Station66x41
const Double_t XStationPositions[NStations]
TGeoMedium * pMedEpoxideCompound
const Double_t ZGEMSize_Station163x45
TGeoVolume * CreateLayersForModule_Station163x45(TString layer_name)
TGeoVolume * CreateLayersForModule_Station66x41(TString layer_name)
TGeoVolume * CreateModule_Station66x41(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize)
TGeoVolume * CreateFrameForModule_Station163x45(TString frame_name, Double_t dx, Double_t dy, Double_t dz, Double_t hole_radius)
TGeoVolume * CreateStation(TString station_name)
TGeoVolume * CreateModule_Station163x45(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize, Double_t hole_radius)
TGeoVolume * CreateFrameForHalfPlane_Station163x45(TString frame_name)
void DefineRequiredMedia(FairGeoMedia *geoMedia, FairGeoBuilder *geoBuild)
TGeoVolume * CreateDetailedFrameForModule_Station66x41(TString frame_name)
TGeoVolume * CreateFrameForModule_Station66x41(TString frame_name, Double_t dx, Double_t dy, Double_t dz)
void create_rootgeom_GEMS_RunSRC2021_detailed()
TGeoVolume * CreateBasicFrameForModule_Station66x41(TString frame_name)
const Double_t ZGEMSize_Station66x41