BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_VacuumPipe_section1.C
Go to the documentation of this file.
1/*
2 * Use this macro to create ROOT geometry of Vacuum Beam Pipe (section 1: before
3 * target) for the RUN-8 configuration, according to the measurement scheme
4 *
5 * Author: Baranov D.
6 * Created: 28.11.2022
7 *
8 *
9 * WARNING: all units is in cm!!!
10 *
11 */
12
13#include "TGeoMatrix.h"
14#include "TGeoVolume.h"
15#include "TString.h"
16
17// Parameters of Vacuum Beam Pipe
18
19const Int_t NModules = 20;
20
21// Positions
23 +0.375, // [0] module compensator
24 +0.298, // [1] module si-prof2
25 +0.217, // [2] module si-tracker3
26 +0.085, // [3] module bc2
27 -0.019, // [4] module vc
28 +0.012, // [5] module box7
29 +0.0, // [6] module bellows1
30 -0.025, // [7] module si-tracker2
31 +0.022, // [8] module box6
32 +0.026, // [9] module box5
33 +0.0, // [10] module bellows2
34 +0.169, // [11] module si-prof1
35 +0.115, // [12] module si-tracker1
36 +0.0, // [13] module bellows3
37 +0.102, // [14] module box4
38 +0.122, // [15] module box3 long
39 +0.028, // [16] module box2
40 +0.005, // [17] module bc1
41 +0.009, // [18] module box1
42 +0.0 // [19] module bellows4
43};
45 -0.06, // [0] module compensator
46 -0.049, // [1] module si-prof2
47 -0.022, // [2] module si-tracker3
48 -0.051, // [3] module bc2
49 -0.042, // [4] module vc
50 -0.025, // [5] module box7
51 +0.0, // [6] module bellows1
52 -0.016, // [7] module si-tracker2
53 +0.042, // [8] module box6
54 -0.005, // [9] module box5
55 +0.0, // [10] module bellows2
56 +0.003, // [11] module si-prof1
57 -0.001, // [12] module si-tracker1
58 +0.0, // [13] module bellows3
59 -0.1, // [14] module box4
60 -0.052, // [15] module box3 long
61 -0.023, // [16] module box2
62 -0.005, // [17] module bc1
63 +0.014, // [18] module box1
64 +0.0 // [19] module bellows4
65};
67 -43.298, // [0] module compensator
68 -64.077, // [1] module si-prof2
69 //-84.077, // [2] module si-tracker3
70 -84.378, // [2] module si-tracker3
71 -104.004, // [3] module bc2
72 -124.018, // [4] module vc
73 -144.139, // [5] module box7
74 -163.632, // [6] module bellows1
75 //-183.124, // [7] module si-tracker2
76 -183.225, // [7] module si-tracker2
77 -203.19, // [8] module box6
78 -223.33, // [9] module box5
79 -243.218, // [10] module bellows2
80 -263.11, // [11] module si-prof1
81 //-283.106, // [12] module si-tracker1
82 -283.427, // [12] module si-tracker1
83 -302.645, // [13] module bellows3
84 -322.184, // [14] module box4
85 -362.235, // [15] module box3 long
86 -402.357, // [16] module box2
87 -422.322, // [17] module bc1
88 -442.335, // [18] module box1
89 -462.0 // [19] module bellows4
90};
91
92// Rotations of modules around Z (deg.)
94 +0.0, // [0] module compensator
95 -0.059, // [1] module si-prof2
96 -59.949, // [2] module si-tracker3
97 -0.602, // [3] module bc2
98 -89.858, // [4] module vc
99 +0.0, // [5] module box7
100 +0.0, // [6] module bellows1
101 -29.819, // [7] module si-tracker2
102 +0.0, // [8] module box6
103 +0.0, // [9] module box5
104 +0.0, // [10] module bellows2
105 -0.227, // [11] module si-prof1
106 -0.028, // [12] module si-tracker1
107 +0.0, // [13] module bellows3
108 +0.0, // [14] module box4
109 +0.0, // [15] module box3 long
110 +0.0, // [16] module box2
111 -89.902, // [17] module bc1
112 +0.0, // [18] module box1
113 +0.0 // [19] module bellows4
114};
115
116//------------------------------------------------------------------------------
117
118// GeoManager
120
121// media
129
130class FairGeoMedia;
131class FairGeoBuilder;
132
139
140void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
141{
142
143 // vacuum medium
144 FairGeoMedium* mVacuum = geoMedia->getMedium("vacuum");
145 if (!mVacuum)
146 Fatal("Main", "FairMedium vacuum not found");
147 geoBuild->createMedium(mVacuum);
148 pMedVacuum = gGeoManager->GetMedium("vacuum");
149 if (!pMedVacuum)
150 Fatal("Main", "Medium vacuum not found");
151
152 // air medium
153 FairGeoMedium* mAir = geoMedia->getMedium("air");
154 if (!mAir)
155 Fatal("Main", "FairMedium air not found");
156 geoBuild->createMedium(mAir);
157 pMedAir = gGeoManager->GetMedium("air");
158 if (!pMedAir)
159 Fatal("Main", "Medium air not found");
160
161 // carbon medium
162 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
163 if (!mCarbon)
164 Fatal("Main", "FairMedium carbon not found");
165 geoBuild->createMedium(mCarbon);
166 pMedCarbon = gGeoManager->GetMedium("carbon");
167 if (!pMedCarbon)
168 Fatal("Main", "Medium carbon not found");
169
170 // aluminium medium
171 FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium");
172 if (!mAluminium)
173 Fatal("Main", "FairMedium aluminium not found");
174 geoBuild->createMedium(mAluminium);
175 pMedAluminium = gGeoManager->GetMedium("aluminium");
176 if (!pMedAluminium)
177 Fatal("Main", "Medium aluminium not found");
178
179 // steel medium
180 FairGeoMedium* mSteel = geoMedia->getMedium("steel");
181 if (!mSteel)
182 Fatal("Main", "FairMedium steel not found");
183 geoBuild->createMedium(mSteel);
184 pMedSteel = gGeoManager->GetMedium("steel");
185 if (!pMedSteel)
186 Fatal("Main", "Medium steel not found");
187
188 // fiberglass medium
189 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
190 if (!mFiberGlass)
191 Fatal("Main", "FairMedium fiberglass not found");
192 geoBuild->createMedium(mFiberGlass);
193 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
194 if (!pMedFiberGlass)
195 Fatal("Main", "Medium fiberglass not found");
196
197 // silicon medium
198 FairGeoMedium* mSilicon = geoMedia->getMedium("silicon");
199 if (!mSilicon)
200 Fatal("Main", "FairMedium silicon not found");
201 geoBuild->createMedium(mSilicon);
202 pMedSilicon = gGeoManager->GetMedium("silicon");
203 if (!pMedSilicon)
204 Fatal("Main", "Medium silicon not found");
205}
206
208{
209
210 // ---- set working directory --------------------------------------------
211 TString gPath = gSystem->Getenv("VMCWORKDIR");
212
213 // ------- Geometry file name (output) ----------------------------------
214 const TString geoDetectorName = "VacuumPipe_section1";
215 const TString geoDetectorVersion = "Run8";
216 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
217
218 // ---- global geometry parameters ---------------------------------------
219 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
220 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
221
222 // ------- Load media from media file ----------------------------------
223 TString medFile = gPath + "/geometry/media.geo";
224 geoFace->setMediaFile(medFile);
225 geoFace->readMedia();
226 FairGeoMedia* geoMedia = geoFace->getMedia();
227 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
228
229 DefineRequiredMedia(geoMedia, geoBuild);
230 // -------------------------------------------------------------------------
231
232 // -------------- Create geometry and top volume ------------------------
233 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
234 gGeoMan->SetName(geoDetectorName + "_geom");
235 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
236 top->SetMedium(pMedAir);
237 gGeoMan->SetTopVolume(top);
238 // gGeoMan->SetTopVisible(1);
239 // -------------------------------------------------------------------------
240
241 // Define TOP Geometry
242 TGeoVolume* VacuumPipe_section1 = new TGeoVolumeAssembly(geoDetectorName);
243 VacuumPipe_section1->SetMedium(pMedVacuum);
244
245 TGeoVolume* module_compensator = CreateModule_Compensator(TString("VacuumPipe_ModuleCompensator"));
246 TGeoVolume* module_profilometer2 = CreateModule_Profilometer(TString("VacuumPipe_ModuleProfilometer2"));
247 TGeoVolume* module_sitracker3 = CreateModule_SiTracker(TString("VacuumPipe_ModuleSiTracker3"));
248 TGeoVolume* module_BC2 = CreateModule_Counter(TString("VacuumPipe_ModuleBC2"));
249 TGeoVolume* module_VC = CreateModule_Counter(TString("VacuumPipe_ModuleVC"));
250
251 TGeoVolume* module_box7 = CreateModule_BareBox(TString("VacuumPipe_ModuleBox7"));
252 TGeoVolume* module_bellows1 = CreateModule_Bellows(TString("VacuumPipe_ModuleBellows1"));
253 TGeoVolume* module_box6 = CreateModule_BareBox(TString("VacuumPipe_ModuleBox6"));
254 TGeoVolume* module_box5 = CreateModule_Counter(TString("VacuumPipe_ModuleBox5"));
255 TGeoVolume* module_bellows2 = CreateModule_Bellows(TString("VacuumPipe_ModuleBellows2"));
256
257 TGeoVolume* module_sitracker2 = CreateModule_SiTracker(TString("VacuumPipe_ModuleSiTracker2"));
258 TGeoVolume* module_profilometer1 = CreateModule_Profilometer(TString("VacuumPipe_ModuleProfilometer1"));
259 TGeoVolume* module_sitracker1 = CreateModule_SiTracker(TString("VacuumPipe_ModuleSiTracker1"));
260 TGeoVolume* module_bellows3 = CreateModule_Bellows(TString("VacuumPipe_ModuleBellows3"));
261 TGeoVolume* module_box4 = CreateModule_Counter(TString("VacuumPipe_ModuleBox4"));
262
263 TGeoVolume* module_box3_long = CreateModule_BareBox(TString("VacuumPipe_ModuleBox3_long"));
264 TGeoVolume* module_box2 = CreateModule_Counter(TString("VacuumPipe_ModuleBox2"));
265 TGeoVolume* module_BC1 = CreateModule_Counter(TString("VacuumPipe_ModuleBC1"));
266 TGeoVolume* module_box1 = CreateModule_BareBox(TString("VacuumPipe_ModuleBox1"));
267 TGeoVolume* module_bellows4 = CreateModule_Bellows(TString("VacuumPipe_ModuleBellows4"));
268
269 TGeoCombiTrans* module_compensator_transform = new TGeoCombiTrans();
270 module_compensator_transform->SetTranslation(XModulePositions[0], YModulePositions[0], ZModulePositions[0]);
271
272 TGeoCombiTrans* module_profilometer2_transform = new TGeoCombiTrans();
273 module_profilometer2_transform->RotateZ(ZStationRotations[1]);
274 module_profilometer2_transform->SetTranslation(XModulePositions[1], YModulePositions[1], ZModulePositions[1]);
275
276 TGeoCombiTrans* module_sitracker3_transform = new TGeoCombiTrans();
277 module_sitracker3_transform->RotateZ(ZStationRotations[2]);
278 module_sitracker3_transform->SetTranslation(XModulePositions[2], YModulePositions[2], ZModulePositions[2]);
279
280 TGeoCombiTrans* module_BC2_transform = new TGeoCombiTrans();
281 module_BC2_transform->RotateZ(ZStationRotations[3]);
282 module_BC2_transform->SetTranslation(XModulePositions[3], YModulePositions[3], ZModulePositions[3]);
283
284 TGeoCombiTrans* module_VC_transform = new TGeoCombiTrans();
285 module_VC_transform->RotateZ(ZStationRotations[4]);
286 module_VC_transform->SetTranslation(XModulePositions[4], YModulePositions[4], ZModulePositions[4]);
287
288 TGeoCombiTrans* module_box7_transform = new TGeoCombiTrans();
289 module_box7_transform->RotateZ(ZStationRotations[5]);
290 module_box7_transform->SetTranslation(XModulePositions[5], YModulePositions[5], ZModulePositions[5]);
291
292 TGeoCombiTrans* module_bellows1_transform = new TGeoCombiTrans();
293 module_bellows1_transform->RotateZ(ZStationRotations[6]);
294 module_bellows1_transform->SetTranslation(XModulePositions[6], YModulePositions[6], ZModulePositions[6]);
295
296 TGeoCombiTrans* module_sitracker2_transform = new TGeoCombiTrans();
297 module_sitracker2_transform->RotateZ(ZStationRotations[7]);
298 module_sitracker2_transform->SetTranslation(XModulePositions[7], YModulePositions[7], ZModulePositions[7]);
299
300 TGeoCombiTrans* module_box6_transform = new TGeoCombiTrans();
301 module_box6_transform->RotateZ(ZStationRotations[8]);
302 module_box6_transform->SetTranslation(XModulePositions[8], YModulePositions[8], ZModulePositions[8]);
303
304 TGeoCombiTrans* module_box5_transform = new TGeoCombiTrans();
305 module_box5_transform->RotateZ(ZStationRotations[9]);
306 module_box5_transform->SetTranslation(XModulePositions[9], YModulePositions[9], ZModulePositions[9]);
307
308 TGeoCombiTrans* module_bellows2_transform = new TGeoCombiTrans();
309 module_bellows2_transform->RotateZ(ZStationRotations[10]);
310 module_bellows2_transform->SetTranslation(XModulePositions[10], YModulePositions[10], ZModulePositions[10]);
311
312 TGeoCombiTrans* module_profilometer1_transform = new TGeoCombiTrans();
313 module_profilometer1_transform->RotateZ(ZStationRotations[11]);
314 module_profilometer1_transform->SetTranslation(XModulePositions[11], YModulePositions[11], ZModulePositions[11]);
315
316 TGeoCombiTrans* module_sitracker1_transform = new TGeoCombiTrans();
317 module_sitracker1_transform->RotateZ(ZStationRotations[12]);
318 module_sitracker1_transform->SetTranslation(XModulePositions[12], YModulePositions[12], ZModulePositions[12]);
319
320 TGeoCombiTrans* module_bellows3_transform = new TGeoCombiTrans();
321 module_bellows3_transform->RotateZ(ZStationRotations[13]);
322 module_bellows3_transform->SetTranslation(XModulePositions[13], YModulePositions[13], ZModulePositions[13]);
323
324 TGeoCombiTrans* module_box4_transform = new TGeoCombiTrans();
325 module_box4_transform->RotateZ(ZStationRotations[14]);
326 module_box4_transform->SetTranslation(XModulePositions[14], YModulePositions[14], ZModulePositions[14]);
327
328 TGeoCombiTrans* module_box3_long_transform = new TGeoCombiTrans();
329 module_box3_long_transform->RotateZ(ZStationRotations[15]);
330 module_box3_long_transform->SetTranslation(XModulePositions[15], YModulePositions[15], ZModulePositions[15]);
331
332 TGeoCombiTrans* module_box2_transform = new TGeoCombiTrans();
333 module_box2_transform->RotateZ(ZStationRotations[16]);
334 module_box2_transform->SetTranslation(XModulePositions[16], YModulePositions[16], ZModulePositions[16]);
335
336 TGeoCombiTrans* module_BC1_transform = new TGeoCombiTrans();
337 module_BC1_transform->RotateZ(ZStationRotations[17]);
338 module_BC1_transform->SetTranslation(XModulePositions[17], YModulePositions[17], ZModulePositions[17]);
339
340 TGeoCombiTrans* module_box1_transform = new TGeoCombiTrans();
341 module_box1_transform->RotateZ(ZStationRotations[18]);
342 module_box1_transform->SetTranslation(XModulePositions[18], YModulePositions[18], ZModulePositions[18]);
343
344 TGeoCombiTrans* module_bellows4_transform = new TGeoCombiTrans();
345 module_bellows4_transform->RotateZ(ZStationRotations[19]);
346 module_bellows4_transform->SetTranslation(XModulePositions[19], YModulePositions[19], ZModulePositions[19]);
347
348 VacuumPipe_section1->AddNode(module_compensator, 0, module_compensator_transform);
349 VacuumPipe_section1->AddNode(module_profilometer2, 0, module_profilometer2_transform);
350 VacuumPipe_section1->AddNode(module_sitracker3, 0, module_sitracker3_transform);
351 VacuumPipe_section1->AddNode(module_BC2, 0, module_BC2_transform);
352 VacuumPipe_section1->AddNode(module_VC, 0, module_VC_transform);
353 VacuumPipe_section1->AddNode(module_box7, 0, module_box7_transform);
354 VacuumPipe_section1->AddNode(module_bellows1, 0, module_bellows1_transform);
355 VacuumPipe_section1->AddNode(module_box6, 0, module_box6_transform);
356 VacuumPipe_section1->AddNode(module_box5, 0, module_box5_transform);
357 VacuumPipe_section1->AddNode(module_bellows2, 0, module_bellows2_transform);
358 VacuumPipe_section1->AddNode(module_sitracker2, 0, module_sitracker2_transform);
359 VacuumPipe_section1->AddNode(module_profilometer1, 0, module_profilometer1_transform);
360 VacuumPipe_section1->AddNode(module_sitracker1, 0, module_sitracker1_transform);
361 VacuumPipe_section1->AddNode(module_bellows3, 0, module_bellows3_transform);
362 VacuumPipe_section1->AddNode(module_box4, 0, module_box4_transform);
363 VacuumPipe_section1->AddNode(module_box3_long, 0, module_box3_long_transform);
364 VacuumPipe_section1->AddNode(module_box2, 0, module_box2_transform);
365 VacuumPipe_section1->AddNode(module_BC1, 0, module_BC1_transform);
366 VacuumPipe_section1->AddNode(module_box1, 0, module_box1_transform);
367 VacuumPipe_section1->AddNode(module_bellows4, 0, module_bellows4_transform);
368
369 top->AddNode(VacuumPipe_section1, 0);
371
372 // --------------- Finish ----------------------------------------------
373 gGeoMan->CloseGeometry();
374 gGeoMan->CheckOverlaps(0.0001);
375 gGeoMan->PrintOverlaps();
376 gGeoMan->Test();
377 // gGeoMan->RestoreMasterVolume();
378
379 TFile* geoFile = new TFile(geoFileName, "RECREATE");
380 top->Write();
381 geoFile->Close();
382 top->Draw("ogl");
383}
384//------------------------------------------------------------------------------
385
387{
388
389 Double_t length1 = 15.0; // cm
390 Double_t length2 = 4.6; // cm
391 Double_t length2_vac = 4.095; // cm
392
393 Double_t innerRadius1 = 21.3 * 0.5;
394 Double_t outerRadius1 = 22.3 * 0.5;
395 Double_t flangeRadius1 = 24.0 * 0.5;
396
397 Double_t innerRadius2 = 19.7 * 0.5;
398 Double_t outerRadius2 = 21.1 * 0.5;
399 Double_t flangeRadius2 = 24.0 * 0.5;
400
401 Double_t flangeThickness = 1.2;
402
403 // shapes
404 TGeoShape* vacTube1S =
405 new TGeoTube(TString("vacTube1S") += TString("_") + module_name, innerRadius1, outerRadius1, length1 * 0.5);
406 TGeoShape* vacTube2S =
407 new TGeoTube(TString("vacTube2S") += TString("_") + module_name, innerRadius2, outerRadius2, length2 * 0.5);
408 TGeoShape* vacTube1VacuumS =
409 new TGeoTube(TString("vacTube1VacuumS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5);
410 TGeoShape* vacTube2VacuumS =
411 new TGeoTube(TString("vacTube2VacuumS") += TString("_") + module_name, 0.0, innerRadius2, length2_vac * 0.5);
412 TGeoShape* vacTubeFlange1S = new TGeoTube(TString("vacTubeFlange1S") += TString("_") + module_name, outerRadius1,
413 flangeRadius1, flangeThickness * 0.5);
414 TGeoShape* vacTubeFlange2S = new TGeoTube(TString("vacTubeFlange2S") += TString("_") + module_name, outerRadius2,
415 flangeRadius2, flangeThickness * 0.5);
416
417 // volumes
418 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
419 TGeoVolume* vacTube1V = new TGeoVolume(TString("vacTube1V") += TString("_") + module_name, vacTube1S);
420 TGeoVolume* vacTube2V = new TGeoVolume(TString("vacTube2V") += TString("_") + module_name, vacTube2S);
421 TGeoVolume* vacTube1VacuumV =
422 new TGeoVolume(TString("vacTube1VacuumV") += TString("_") + module_name, vacTube1VacuumS);
423 TGeoVolume* vacTube2VacuumV =
424 new TGeoVolume(TString("vacTube2VacuumV") += TString("_") + module_name, vacTube2VacuumS);
425 TGeoVolume* vacTubeFlange1V =
426 new TGeoVolume(TString("vacTubeFlange1V") += TString("_") + module_name, vacTubeFlange1S);
427 TGeoVolume* vacTubeFlange2V =
428 new TGeoVolume(TString("vacTubeFlange2V") += TString("_") + module_name, vacTubeFlange2S);
429
430 // volume medium
431 TGeoMedium* vacTubeV_medium = pMedAluminium;
432 if (vacTubeV_medium) {
433 vacTube1V->SetMedium(vacTubeV_medium);
434 vacTube2V->SetMedium(vacTubeV_medium);
435 vacTubeFlange1V->SetMedium(vacTubeV_medium);
436 vacTubeFlange2V->SetMedium(vacTubeV_medium);
437 } else
438 Fatal("Main", "Invalid medium for vacTubeV!");
439
440 TGeoMedium* vacTubeVacuum_medium = pMedVacuum;
441 if (vacTubeVacuum_medium) {
442 vacTube1VacuumV->SetMedium(vacTubeVacuum_medium);
443 vacTube2VacuumV->SetMedium(vacTubeVacuum_medium);
444 } else
445 Fatal("Main", "Invalid medium for vacTubeV!");
446
447 // volume visual property (transparency)
448 vacTube1V->SetLineColor(TColor::GetColor("#ffcccc"));
449 vacTube1V->SetTransparency(0);
450
451 vacTube2V->SetLineColor(TColor::GetColor("#ffcccc"));
452 vacTubeFlange1V->SetLineColor(TColor::GetColor("#ffcccc"));
453 vacTubeFlange2V->SetLineColor(TColor::GetColor("#ffcccc"));
454
455 // part positions in the vacuum tube box
456 TGeoCombiTrans* vacTube1V_transf[1];
457 vacTube1V_transf[0] = new TGeoCombiTrans();
458 vacTube1V_transf[0]->SetTranslation(0.0, 0.0, +length1 * 0.5 - (length1 + length2) * 0.5);
459
460 TGeoCombiTrans* vacTube2V_transf[1];
461 vacTube2V_transf[0] = new TGeoCombiTrans();
462 vacTube2V_transf[0]->SetTranslation(0.0, 0.0, -length2 * 0.5 + (length1 + length2) * 0.5);
463
464 TGeoCombiTrans* vacTubeVacuum2V_transf[1];
465 vacTubeVacuum2V_transf[0] = new TGeoCombiTrans();
466 vacTubeVacuum2V_transf[0]->SetTranslation(
467 0.0, 0.0, -length2 * 0.5 + (length1 + length2) * 0.5 - (length2 - length2_vac) * 0.5);
468
469 TGeoCombiTrans* vacTubeFlange1V_transf[1];
470 vacTubeFlange1V_transf[0] = new TGeoCombiTrans();
471 vacTubeFlange1V_transf[0]->SetTranslation(0.0, 0.0, -(length1 + length2) * 0.5 + flangeThickness * 0.5);
472 TGeoCombiTrans* vacTubeFlange2V_transf[1];
473 vacTubeFlange2V_transf[0] = new TGeoCombiTrans();
474 vacTubeFlange2V_transf[0]->SetTranslation(0.0, 0.0, +(length1 + length2) * 0.5 - flangeThickness * 0.5);
475
476 vacTubeBoxV->AddNode(vacTube1V, 0, vacTube1V_transf[0]);
477 vacTubeBoxV->AddNode(vacTube2V, 0, vacTube2V_transf[0]);
478 vacTubeBoxV->AddNode(vacTube1VacuumV, 0, vacTube1V_transf[0]);
479 vacTubeBoxV->AddNode(vacTube2VacuumV, 0, vacTubeVacuum2V_transf[0]);
480 vacTubeBoxV->AddNode(vacTubeFlange1V, 0, vacTubeFlange1V_transf[0]);
481 vacTubeBoxV->AddNode(vacTubeFlange2V, 0, vacTubeFlange2V_transf[0]);
482
483 return vacTubeBoxV;
484}
485//------------------------------------------------------------------------------
486
488{
489
490 Double_t length1 = 20.0; // cm
491 Double_t length2 = 20.8; // cm
492
493 Double_t innerRadius1 = 19.6 * 0.5;
494 Double_t outerRadius1 = 20.0 * 0.5;
495 Double_t flangeRadius1 = 24.0 * 0.5;
496
497 Double_t innerRadius2 = 14.6 * 0.5;
498 Double_t outerRadius2 = 15.0 * 0.5;
499 Double_t flangeRadius2 = 18.0 * 0.5;
500
501 Double_t flangeThickness = 1.2;
502
503 // shapes
504 TGeoShape* vacTubeS =
505 new TGeoTube(TString("vacTubeS") += TString("_") + module_name, innerRadius1, outerRadius1, length1 * 0.5);
506 TGeoShape* vacTubeVacuumS =
507 new TGeoTube(TString("vacTubeVacuumS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5);
508 TGeoShape* vacTubeVacuumGapS =
509 new TGeoTube(TString("vacTubeVacuumGapS") += TString("_") + module_name, 0.0, innerRadius1, 0.018 * 0.5);
510 TGeoShape* vacTubeHoleS =
511 new TGeoTube(TString("vacTubeHoleS") += TString("_") + module_name, 0.0, outerRadius2, length2 * 0.5);
512
513 TGeoShape* sideTubeS =
514 new TGeoTube(TString("sideTubeS") += TString("_") + module_name, innerRadius2, outerRadius2, length2 * 0.5);
515 TGeoShape* sideTubeCutS =
516 new TGeoTube(TString("sideTubeCutS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5);
517
518 TGeoShape* vacTubeFlangeS = new TGeoTube(TString("vacTubeFlangeS") += TString("_") + module_name, outerRadius1,
519 flangeRadius1, flangeThickness * 0.5);
520 TGeoShape* sideTubeFlangeS = new TGeoTube(TString("sideTubeFlangeS") += TString("_") + module_name, outerRadius2,
521 flangeRadius2, flangeThickness * 0.5);
522
523 TGeoCombiTrans* vacTubeHole_transf = new TGeoCombiTrans();
524 vacTubeHole_transf->SetName(TString("vacTubeHole_transf") += TString("_") + module_name);
525 vacTubeHole_transf->RotateY(90.0);
526 vacTubeHole_transf->SetDx(-length2 * 0.5);
527 vacTubeHole_transf->SetDy(0.0);
528 vacTubeHole_transf->SetDz(0.0);
529 vacTubeHole_transf->RegisterYourself();
530
531 TGeoCompositeShape* vacTubeWithHoleS = new TGeoCompositeShape();
532 vacTubeWithHoleS->SetName(TString("vacTubeWithHoleS") += TString("_") + module_name);
533 {
534 TString expression = "vacTubeS";
535 expression += TString("_") + module_name;
536 expression += "-vacTubeHoleS";
537 expression += TString("_") + module_name;
538 expression += ":vacTubeHole_transf";
539 expression += TString("_") + module_name;
540 vacTubeWithHoleS->MakeNode(expression);
541 vacTubeWithHoleS->ComputeBBox(); // need to compute a bounding box
542 }
543
544 TGeoCombiTrans* sideTube_transf = new TGeoCombiTrans();
545 sideTube_transf->SetName(TString("sideTube_transf") += TString("_") + module_name);
546 sideTube_transf->RotateY(90.0);
547 sideTube_transf->SetTranslation(-length2 * 0.5, 0.0, 0.0);
548 sideTube_transf->RegisterYourself();
549
550 TGeoCompositeShape* sideTubeWithCutS = new TGeoCompositeShape();
551 sideTubeWithCutS->SetName(TString("sideTubeWithCutS") += TString("_") + module_name);
552 {
553 TString expression = "sideTubeS";
554 expression += TString("_") + module_name;
555 expression += ":sideTube_transf";
556 expression += TString("_") + module_name;
557 expression += "-sideTubeCutS";
558 expression += TString("_") + module_name;
559 sideTubeWithCutS->MakeNode(expression);
560 sideTubeWithCutS->ComputeBBox(); // need to compute a bounding box
561 }
562
563 TGeoCombiTrans* vacTubeVacuumGap_transf = new TGeoCombiTrans();
564 vacTubeVacuumGap_transf->SetName(TString("vacTubeVacuumGap_transf") += TString("_") + module_name);
565 vacTubeVacuumGap_transf->SetTranslation(0.0, 0.0, +0.018 * 0.5);
566 vacTubeVacuumGap_transf->RegisterYourself();
567
568 TGeoCompositeShape* vacTubeVacuumWithGapS = new TGeoCompositeShape();
569 vacTubeVacuumWithGapS->SetName(TString("vacTubeVacuumWithGapS") += TString("_") + module_name);
570 {
571 TString expression = "vacTubeVacuumS";
572 expression += TString("_") + module_name;
573 expression += "-vacTubeVacuumGapS";
574 expression += TString("_") + module_name;
575 expression += ":vacTubeVacuumGap_transf";
576 expression += TString("_") + module_name;
577 vacTubeVacuumWithGapS->MakeNode(expression);
578 vacTubeVacuumWithGapS->ComputeBBox(); // need to compute a bounding box
579 }
580
581 // volumes
582 // frame volumes
583 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
584 TGeoVolume* vacTubeWithHoleV =
585 new TGeoVolume(TString("vacTubeWithHoleV") += TString("_") + module_name, vacTubeWithHoleS);
586 TGeoVolume* sideTubeWithCutV =
587 new TGeoVolume(TString("sideTubeWithCutV") += TString("_") + module_name, sideTubeWithCutS);
588 TGeoVolume* vacTubeVacuumV =
589 new TGeoVolume(TString("vacTubeVacuumV") += TString("_") + module_name, vacTubeVacuumWithGapS);
590 TGeoVolume* vacTubeFlangeV =
591 new TGeoVolume(TString("vacTubeFlangeV") += TString("_") + module_name, vacTubeFlangeS);
592 TGeoVolume* sideTubeFlangeV =
593 new TGeoVolume(TString("sideTubeFlangeV") += TString("_") + module_name, sideTubeFlangeS);
594
595 // volume medium
596 TGeoMedium* vacTubeWithHoleV_medium = nullptr;
597 if (module_name.Contains("Profilometer1"))
598 vacTubeWithHoleV_medium = pMedSteel;
599 if (module_name.Contains("Profilometer2"))
600 vacTubeWithHoleV_medium = pMedAluminium;
601 if (vacTubeWithHoleV_medium) {
602 vacTubeWithHoleV->SetMedium(vacTubeWithHoleV_medium);
603 sideTubeWithCutV->SetMedium(vacTubeWithHoleV_medium);
604 vacTubeFlangeV->SetMedium(vacTubeWithHoleV_medium);
605 sideTubeFlangeV->SetMedium(vacTubeWithHoleV_medium);
606 } else
607 Fatal("Main", "Invalid medium for vacTubeWithHoleV!");
608
609 vacTubeVacuumV->SetMedium(pMedVacuum);
610
611 // volume visual property (transparency)
612 vacTubeWithHoleV->SetLineColor(TColor::GetColor("#ffcccc"));
613 vacTubeWithHoleV->SetTransparency(0);
614 sideTubeWithCutV->SetLineColor(TColor::GetColor("#ffcccc"));
615 vacTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
616 sideTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
617
618 // part positions in the vacuum tube box
619 TGeoCombiTrans* vacTubeFlangeV_transf[2];
620
621 vacTubeFlangeV_transf[0] = new TGeoCombiTrans();
622 vacTubeFlangeV_transf[0]->SetTranslation(0.0, 0.0, -length1 * 0.5 + flangeThickness * 0.5);
623
624 vacTubeFlangeV_transf[1] = new TGeoCombiTrans();
625 vacTubeFlangeV_transf[1]->SetTranslation(0.0, 0.0, +length1 * 0.5 - flangeThickness * 0.5);
626
627 TGeoCombiTrans* sideTubeFlangeV_transf[1];
628
629 sideTubeFlangeV_transf[0] = new TGeoCombiTrans();
630 sideTubeFlangeV_transf[0]->RotateY(90.0);
631 sideTubeFlangeV_transf[0]->SetTranslation(-length2 + flangeThickness * 0.5, 0.0, 0.0);
632
633 vacTubeBoxV->AddNode(vacTubeWithHoleV, 0, new TGeoCombiTrans());
634 vacTubeBoxV->AddNode(sideTubeWithCutV, 0, new TGeoCombiTrans());
635 vacTubeBoxV->AddNode(vacTubeVacuumV, 0, new TGeoCombiTrans());
636 vacTubeBoxV->AddNode(vacTubeFlangeV, 0, vacTubeFlangeV_transf[0]);
637 vacTubeBoxV->AddNode(vacTubeFlangeV, 1, vacTubeFlangeV_transf[1]);
638 vacTubeBoxV->AddNode(sideTubeFlangeV, 0, sideTubeFlangeV_transf[0]);
639
640 return vacTubeBoxV;
641}
642//------------------------------------------------------------------------------
643
645{
646
647 Double_t length1 = 19.6; // cm
648 Double_t length2 = 15.0; // cm
649
650 Double_t innerRadius1 = 21.3 * 0.5;
651 Double_t outerRadius1 = 21.9 * 0.5;
652 Double_t flangeRadius1 = 24.0 * 0.5;
653
654 Double_t innerRadius2 = 15.3 * 0.5;
655 Double_t outerRadius2 = 15.9 * 0.5;
656 Double_t flangeRadius2 = 18.0 * 0.5;
657
658 Double_t flangeThickness = 1.2;
659
660 // shapes
661 TGeoShape* vacTubeS =
662 new TGeoTube(TString("vacTubeS") += TString("_") + module_name, innerRadius1, outerRadius1, length1 * 0.5);
663 TGeoShape* vacTubeHoleS =
664 new TGeoTube(TString("vacTubeHoleS") += TString("_") + module_name, 0.0, outerRadius2, length2 * 0.5);
665 TGeoShape* vacTubeVacuumS =
666 new TGeoTube(TString("vacTubeVacuumS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5);
667 TGeoShape* vacTubeVacuumGapS =
668 new TGeoTube(TString("vacTubeVacuumGapS") += TString("_") + module_name, 0.0, innerRadius1, 0.018 * 0.5);
669
670 TGeoShape* sideTubeS =
671 new TGeoTube(TString("sideTubeS") += TString("_") + module_name, innerRadius2, outerRadius2, length2 * 0.5);
672 TGeoShape* sideTubeCutS =
673 new TGeoTube(TString("sideTubeCutS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5);
674
675 TGeoShape* vacTubeFlangeS = new TGeoTube(TString("vacTubeFlangeS") += TString("_") + module_name, outerRadius1,
676 flangeRadius1, flangeThickness * 0.5);
677 TGeoShape* sideTubeFlangeS = new TGeoTube(TString("sideTubeFlangeS") += TString("_") + module_name, outerRadius2,
678 flangeRadius2, flangeThickness * 0.5);
679
680 TGeoCombiTrans* vacTubeHole_transf = new TGeoCombiTrans();
681 vacTubeHole_transf->SetName(TString("vacTubeHole_transf") += TString("_") + module_name);
682 vacTubeHole_transf->RotateY(90.0);
683 vacTubeHole_transf->SetDx(-length2);
684 vacTubeHole_transf->SetDy(0.0);
685 vacTubeHole_transf->SetDz(0.0);
686 vacTubeHole_transf->RegisterYourself();
687
688 TGeoCompositeShape* vacTubeWithHoleS = new TGeoCompositeShape();
689 vacTubeWithHoleS->SetName(TString("vacTubeWithHoleS") += TString("_") + module_name);
690 {
691 TString expression = "vacTubeS";
692 expression += TString("_") + module_name;
693 expression += "-vacTubeHoleS";
694 expression += TString("_") + module_name;
695 expression += ":vacTubeHole_transf";
696 expression += TString("_") + module_name;
697 vacTubeWithHoleS->MakeNode(expression);
698 vacTubeWithHoleS->ComputeBBox(); // need to compute a bounding box
699 }
700
701 TGeoCombiTrans* sideTube_transf = new TGeoCombiTrans();
702 sideTube_transf->SetName(TString("sideTube_transf") += TString("_") + module_name);
703 sideTube_transf->RotateY(90.0);
704 sideTube_transf->SetTranslation(-length2 * 0.5, 0.0, 0.0);
705 sideTube_transf->RegisterYourself();
706
707 TGeoCompositeShape* sideTubeWithCutS = new TGeoCompositeShape();
708 sideTubeWithCutS->SetName(TString("sideTubeWithCutS") += TString("_") + module_name);
709 {
710 TString expression = "sideTubeS";
711 expression += TString("_") + module_name;
712 expression += ":sideTube_transf";
713 expression += TString("_") + module_name;
714 expression += "-sideTubeCutS";
715 expression += TString("_") + module_name;
716 sideTubeWithCutS->MakeNode(expression);
717 sideTubeWithCutS->ComputeBBox(); // need to compute a bounding box
718 }
719
720 TGeoCombiTrans* vacTubeVacuumGap_transf = new TGeoCombiTrans();
721 vacTubeVacuumGap_transf->SetName(TString("vacTubeVacuumGap_transf") += TString("_") + module_name);
722 vacTubeVacuumGap_transf->SetTranslation(0.0, 0.0, +0.018 * 0.5);
723 vacTubeVacuumGap_transf->RegisterYourself();
724
725 TGeoCompositeShape* vacTubeVacuumWithGapS = new TGeoCompositeShape();
726 vacTubeVacuumWithGapS->SetName(TString("vacTubeVacuumWithGapS") += TString("_") + module_name);
727 {
728 TString expression = "vacTubeVacuumS";
729 expression += TString("_") + module_name;
730 expression += "-vacTubeVacuumGapS";
731 expression += TString("_") + module_name;
732 expression += ":vacTubeVacuumGap_transf";
733 expression += TString("_") + module_name;
734 vacTubeVacuumWithGapS->MakeNode(expression);
735 vacTubeVacuumWithGapS->ComputeBBox(); // need to compute a bounding box
736 }
737
738 // volumes
739 // frame volumes
740 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
741 TGeoVolume* vacTubeWithHoleV =
742 new TGeoVolume(TString("vacTubeWithHoleV") += TString("_") + module_name, vacTubeWithHoleS);
743 TGeoVolume* vacTubeVaccumV =
744 new TGeoVolume(TString("vacTubeVaccumV") += TString("_") + module_name, vacTubeVacuumWithGapS);
745 TGeoVolume* sideTubeWithCutV =
746 new TGeoVolume(TString("sideTubeWithCutV") += TString("_") + module_name, sideTubeWithCutS);
747 TGeoVolume* vacTubeFlangeV =
748 new TGeoVolume(TString("vacTubeFlangeV") += TString("_") + module_name, vacTubeFlangeS);
749 TGeoVolume* sideTubeFlangeV =
750 new TGeoVolume(TString("sideTubeFlangeV") += TString("_") + module_name, sideTubeFlangeS);
751
752 // volume medium
753 TGeoMedium* vacTubeWithHoleV_medium = nullptr;
754 if (module_name.Contains("SiTracker1"))
755 vacTubeWithHoleV_medium = pMedSteel;
756 if (module_name.Contains("SiTracker2"))
757 vacTubeWithHoleV_medium = pMedSteel;
758 if (module_name.Contains("SiTracker3"))
759 vacTubeWithHoleV_medium = pMedAluminium;
760 if (vacTubeWithHoleV_medium) {
761 vacTubeWithHoleV->SetMedium(vacTubeWithHoleV_medium);
762 sideTubeWithCutV->SetMedium(vacTubeWithHoleV_medium);
763 vacTubeFlangeV->SetMedium(vacTubeWithHoleV_medium);
764 sideTubeFlangeV->SetMedium(vacTubeWithHoleV_medium);
765 } else
766 Fatal("Main", "Invalid medium for vacTubeWithHoleV!");
767
768 vacTubeVaccumV->SetMedium(pMedVacuum);
769
770 // volume visual property (transparency)
771 vacTubeWithHoleV->SetLineColor(TColor::GetColor("#ffcccc"));
772 vacTubeWithHoleV->SetTransparency(0);
773 sideTubeWithCutV->SetLineColor(TColor::GetColor("#ffcccc"));
774 vacTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
775 sideTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
776
777 // part positions in the vacuum tube box
778 TGeoCombiTrans* vacTubeFlangeV_transf[2];
779
780 vacTubeFlangeV_transf[0] = new TGeoCombiTrans();
781 vacTubeFlangeV_transf[0]->SetTranslation(0.0, 0.0, -length1 * 0.5 + flangeThickness * 0.5);
782
783 vacTubeFlangeV_transf[1] = new TGeoCombiTrans();
784 vacTubeFlangeV_transf[1]->SetTranslation(0.0, 0.0, +length1 * 0.5 - flangeThickness * 0.5);
785
786 TGeoCombiTrans* sideTubeFlangeV_transf[1];
787
788 sideTubeFlangeV_transf[0] = new TGeoCombiTrans();
789 sideTubeFlangeV_transf[0]->RotateY(90.0);
790 sideTubeFlangeV_transf[0]->SetTranslation(-length2 + flangeThickness * 0.5, 0.0, 0.0);
791
792 vacTubeBoxV->AddNode(vacTubeWithHoleV, 0, new TGeoCombiTrans());
793 vacTubeBoxV->AddNode(vacTubeVaccumV, 0, new TGeoCombiTrans());
794 vacTubeBoxV->AddNode(sideTubeWithCutV, 0, new TGeoCombiTrans());
795 vacTubeBoxV->AddNode(vacTubeFlangeV, 0, vacTubeFlangeV_transf[0]);
796 vacTubeBoxV->AddNode(vacTubeFlangeV, 1, vacTubeFlangeV_transf[1]);
797 vacTubeBoxV->AddNode(sideTubeFlangeV, 0, sideTubeFlangeV_transf[0]);
798
799 return vacTubeBoxV;
800}
801//------------------------------------------------------------------------------
802
804{
805
806 Double_t length1 = 19.6; // cm
807 Double_t length2 = 15.0; // cm
808
809 Double_t innerRadius1 = 21.3 * 0.5;
810 Double_t outerRadius1 = 21.9 * 0.5;
811 Double_t flangeRadius1 = 24.0 * 0.5;
812
813 Double_t innerRadius2 = 9.56 * 0.5;
814 Double_t outerRadius2 = 10.2 * 0.5;
815 Double_t flangeRadius2 = 13.0 * 0.5;
816
817 Double_t flangeThickness = 1.2;
818
819 // shapes
820 TGeoShape* vacTubeS =
821 new TGeoTube(TString("vacTubeS") += TString("_") + module_name, innerRadius1, outerRadius1, length1 * 0.5);
822 TGeoShape* vacTubeHoleS =
823 new TGeoTube(TString("vacTubeHoleS") += TString("_") + module_name, 0.0, outerRadius2, length2 * 0.5);
824 TGeoShape* vacTubeVacuumS =
825 new TGeoTube(TString("vacTubeVacuumS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5);
826
827 TGeoShape* sideTubeS =
828 new TGeoTube(TString("sideTubeS") += TString("_") + module_name, innerRadius2, outerRadius2, length2 * 0.5);
829 TGeoShape* sideTubeCutS =
830 new TGeoTube(TString("sideTubeCutS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5);
831
832 TGeoShape* vacTubeFlangeS = new TGeoTube(TString("vacTubeFlangeS") += TString("_") + module_name, outerRadius1,
833 flangeRadius1, flangeThickness * 0.5);
834 TGeoShape* sideTubeFlangeS = new TGeoTube(TString("sideTubeFlangeS") += TString("_") + module_name, outerRadius2,
835 flangeRadius2, flangeThickness * 0.5);
836
837 TGeoCombiTrans* vacTubeHole_transf1 = new TGeoCombiTrans();
838 vacTubeHole_transf1->SetName(TString("vacTubeHole_transf1") += TString("_") + module_name);
839 vacTubeHole_transf1->RotateY(90.0);
840 vacTubeHole_transf1->SetDx(-length2);
841 vacTubeHole_transf1->SetDy(0.0);
842 vacTubeHole_transf1->SetDz(0.0);
843 vacTubeHole_transf1->RegisterYourself();
844
845 TGeoCombiTrans* vacTubeHole_transf2 = new TGeoCombiTrans();
846 vacTubeHole_transf2->SetName(TString("vacTubeHole_transf2") += TString("_") + module_name);
847 vacTubeHole_transf2->RotateY(90.0);
848 vacTubeHole_transf2->SetDx(+length2);
849 vacTubeHole_transf2->SetDy(0.0);
850 vacTubeHole_transf2->SetDz(0.0);
851 vacTubeHole_transf2->RegisterYourself();
852
853 TGeoCombiTrans* vacTubeHole_transf3 = new TGeoCombiTrans();
854 vacTubeHole_transf3->SetName(TString("vacTubeHole_transf3") += TString("_") + module_name);
855 vacTubeHole_transf3->RotateY(90.0);
856 vacTubeHole_transf3->RotateZ(90.0);
857 vacTubeHole_transf3->SetDx(0.0);
858 vacTubeHole_transf3->SetDy(+length2);
859 vacTubeHole_transf3->SetDz(0.0);
860 vacTubeHole_transf3->RegisterYourself();
861
862 TGeoCombiTrans* vacTubeHole_transf4 = new TGeoCombiTrans();
863 vacTubeHole_transf4->SetName(TString("vacTubeHole_transf4") += TString("_") + module_name);
864 vacTubeHole_transf4->RotateY(90.0);
865 vacTubeHole_transf4->RotateZ(90.0);
866 vacTubeHole_transf4->SetDx(0.0);
867 vacTubeHole_transf4->SetDy(-length2);
868 vacTubeHole_transf4->SetDz(0.0);
869 vacTubeHole_transf4->RegisterYourself();
870
871 TGeoCompositeShape* vacTubeWithHoleS = new TGeoCompositeShape();
872 vacTubeWithHoleS->SetName(TString("vacTubeWithHoleS") += TString("_") + module_name);
873 {
874 TString expression = "vacTubeS";
875 expression += TString("_") + module_name;
876 expression += "-vacTubeHoleS";
877 expression += TString("_") + module_name;
878 expression += ":vacTubeHole_transf1";
879 expression += TString("_") + module_name;
880 expression += "-vacTubeHoleS";
881 expression += TString("_") + module_name;
882 expression += ":vacTubeHole_transf2";
883 expression += TString("_") + module_name;
884 expression += "-vacTubeHoleS";
885 expression += TString("_") + module_name;
886 expression += ":vacTubeHole_transf3";
887 expression += TString("_") + module_name;
888 expression += "-vacTubeHoleS";
889 expression += TString("_") + module_name;
890 expression += ":vacTubeHole_transf4";
891 expression += TString("_") + module_name;
892 vacTubeWithHoleS->MakeNode(expression);
893 vacTubeWithHoleS->ComputeBBox(); // need to compute a bounding box
894 }
895
896 TGeoCombiTrans* sideTube_transf = new TGeoCombiTrans();
897 sideTube_transf->SetName(TString("sideTube_transf") += TString("_") + module_name);
898 sideTube_transf->RotateY(90.0);
899 sideTube_transf->SetTranslation(-length2 * 0.5, 0.0, 0.0);
900 sideTube_transf->RegisterYourself();
901
902 TGeoCompositeShape* sideTubeWithCutS = new TGeoCompositeShape();
903 sideTubeWithCutS->SetName(TString("sideTubeWithCutS") += TString("_") + module_name);
904 {
905 TString expression = "sideTubeS";
906 expression += TString("_") + module_name;
907 expression += ":sideTube_transf";
908 expression += TString("_") + module_name;
909 expression += "-sideTubeCutS";
910 expression += TString("_") + module_name;
911 sideTubeWithCutS->MakeNode(expression);
912 sideTubeWithCutS->ComputeBBox(); // need to compute a bounding box
913 }
914
915 // volumes
916 // frame volumes
917 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
918 TGeoVolume* vacTubeWithHoleV =
919 new TGeoVolume(TString("vacTubeWithHoleV") += TString("_") + module_name, vacTubeWithHoleS);
920 TGeoVolume* vacTubeVacuumV =
921 new TGeoVolume(TString("vacTubeVacuumV") += TString("_") + module_name, vacTubeVacuumS);
922 TGeoVolume* sideTubeWithCutV =
923 new TGeoVolume(TString("sideTubeWithCutV") += TString("_") + module_name, sideTubeWithCutS);
924 TGeoVolume* vacTubeFlangeV =
925 new TGeoVolume(TString("vacTubeFlangeV") += TString("_") + module_name, vacTubeFlangeS);
926 TGeoVolume* sideTubeFlangeV =
927 new TGeoVolume(TString("sideTubeFlangeV") += TString("_") + module_name, sideTubeFlangeS);
928
929 // volume medium
930 TGeoMedium* vacTubeWithHoleV_medium = nullptr;
931 if (module_name.Contains("VC"))
932 vacTubeWithHoleV_medium = pMedSteel;
933 if (module_name.Contains("BC1"))
934 vacTubeWithHoleV_medium = pMedAluminium;
935 if (module_name.Contains("BC2"))
936 vacTubeWithHoleV_medium = pMedAluminium;
937 if (module_name.Contains("Box"))
938 vacTubeWithHoleV_medium = pMedSteel;
939 if (vacTubeWithHoleV_medium) {
940 vacTubeWithHoleV->SetMedium(vacTubeWithHoleV_medium);
941 sideTubeWithCutV->SetMedium(vacTubeWithHoleV_medium);
942 vacTubeFlangeV->SetMedium(vacTubeWithHoleV_medium);
943 sideTubeFlangeV->SetMedium(vacTubeWithHoleV_medium);
944 } else
945 Fatal("Main", "Invalid medium for vacTubeWithHoleV!");
946
947 vacTubeVacuumV->SetMedium(pMedVacuum);
948
949 // volume visual property (transparency)
950 vacTubeWithHoleV->SetLineColor(TColor::GetColor("#ffcccc"));
951 vacTubeWithHoleV->SetTransparency(0);
952 sideTubeWithCutV->SetLineColor(TColor::GetColor("#ffcccc"));
953 vacTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
954 sideTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
955
956 // part positions in the vacuum tube box
957 TGeoCombiTrans* sideTubeWithCutV_transf[4];
958 sideTubeWithCutV_transf[0] = new TGeoCombiTrans();
959 sideTubeWithCutV_transf[0]->SetTranslation(0.0, 0.0, 0.0);
960 sideTubeWithCutV_transf[1] = new TGeoCombiTrans();
961 sideTubeWithCutV_transf[1]->RotateZ(180.0);
962 sideTubeWithCutV_transf[1]->SetTranslation(0.0, 0.0, 0.0);
963 sideTubeWithCutV_transf[2] = new TGeoCombiTrans();
964 sideTubeWithCutV_transf[2]->RotateZ(90.0);
965 sideTubeWithCutV_transf[2]->SetTranslation(0.0, 0.0, 0.0);
966 sideTubeWithCutV_transf[3] = new TGeoCombiTrans();
967 sideTubeWithCutV_transf[3]->RotateZ(-90.0);
968 sideTubeWithCutV_transf[3]->SetTranslation(0.0, 0.0, 0.0);
969
970 TGeoCombiTrans* vacTubeFlangeV_transf[2];
971 vacTubeFlangeV_transf[0] = new TGeoCombiTrans();
972 vacTubeFlangeV_transf[0]->SetTranslation(0.0, 0.0, -length1 * 0.5 + flangeThickness * 0.5);
973 vacTubeFlangeV_transf[1] = new TGeoCombiTrans();
974 vacTubeFlangeV_transf[1]->SetTranslation(0.0, 0.0, +length1 * 0.5 - flangeThickness * 0.5);
975
976 TGeoCombiTrans* sideTubeFlangeV_transf[4];
977 sideTubeFlangeV_transf[0] = new TGeoCombiTrans();
978 sideTubeFlangeV_transf[0]->RotateY(90.0);
979 sideTubeFlangeV_transf[0]->SetTranslation(-length2 + flangeThickness * 0.5, 0.0, 0.0);
980 sideTubeFlangeV_transf[1] = new TGeoCombiTrans();
981 sideTubeFlangeV_transf[1]->RotateY(90.0);
982 sideTubeFlangeV_transf[1]->SetTranslation(+length2 - flangeThickness * 0.5, 0.0, 0.0);
983 sideTubeFlangeV_transf[2] = new TGeoCombiTrans();
984 sideTubeFlangeV_transf[2]->RotateY(90.0);
985 sideTubeFlangeV_transf[2]->SetTranslation(-length2 + flangeThickness * 0.5, 0.0, 0.0);
986 sideTubeFlangeV_transf[2]->RotateZ(90.0);
987 sideTubeFlangeV_transf[3] = new TGeoCombiTrans();
988 sideTubeFlangeV_transf[3]->RotateY(90.0);
989 sideTubeFlangeV_transf[3]->SetTranslation(-length2 + flangeThickness * 0.5, 0.0, 0.0);
990 sideTubeFlangeV_transf[3]->RotateZ(-90.0);
991
992 vacTubeBoxV->AddNode(vacTubeWithHoleV, 0, new TGeoCombiTrans());
993 vacTubeBoxV->AddNode(vacTubeVacuumV, 0, new TGeoCombiTrans());
994
995 vacTubeBoxV->AddNode(sideTubeWithCutV, 0, sideTubeWithCutV_transf[0]);
996 vacTubeBoxV->AddNode(sideTubeWithCutV, 1, sideTubeWithCutV_transf[1]);
997 vacTubeBoxV->AddNode(sideTubeWithCutV, 2, sideTubeWithCutV_transf[2]);
998 vacTubeBoxV->AddNode(sideTubeWithCutV, 3, sideTubeWithCutV_transf[3]);
999
1000 vacTubeBoxV->AddNode(vacTubeFlangeV, 0, vacTubeFlangeV_transf[0]);
1001 vacTubeBoxV->AddNode(vacTubeFlangeV, 1, vacTubeFlangeV_transf[1]);
1002
1003 vacTubeBoxV->AddNode(sideTubeFlangeV, 0, sideTubeFlangeV_transf[0]);
1004 vacTubeBoxV->AddNode(sideTubeFlangeV, 1, sideTubeFlangeV_transf[1]);
1005 vacTubeBoxV->AddNode(sideTubeFlangeV, 2, sideTubeFlangeV_transf[2]);
1006 vacTubeBoxV->AddNode(sideTubeFlangeV, 3, sideTubeFlangeV_transf[3]);
1007
1008 return vacTubeBoxV;
1009}
1010//------------------------------------------------------------------------------
1011
1013{
1014
1015 Double_t length = 20.0; // cm
1016
1017 if (module_name.Contains("long"))
1018 length = 60.0;
1019
1020 Double_t innerRadius = 19.6 * 0.5;
1021 Double_t outerRadius = 20.0 * 0.5;
1022 Double_t flangeRadius = 24.0 * 0.5;
1023
1024 Double_t flangeThickness = 1.2;
1025
1026 // shapes
1027 TGeoShape* vacTubeS =
1028 new TGeoTube(TString("vacTubeS") += TString("_") + module_name, innerRadius, outerRadius, length * 0.5);
1029 TGeoShape* vacTubeVacuumS =
1030 new TGeoTube(TString("vacTubeVacuumS") += TString("_") + module_name, 0.0, innerRadius, length * 0.5);
1031 TGeoShape* vacTubeFlangeS = new TGeoTube(TString("vacTubeFlangeS") += TString("_") + module_name, outerRadius,
1032 flangeRadius, flangeThickness * 0.5);
1033
1034 // volumes
1035 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
1036 TGeoVolume* vacTubeV = new TGeoVolume(TString("vacTubeV") += TString("_") + module_name, vacTubeS);
1037 TGeoVolume* vacTubeVacuumV =
1038 new TGeoVolume(TString("vacTubeVacuumV") += TString("_") + module_name, vacTubeVacuumS);
1039 TGeoVolume* vacTubeFlangeV =
1040 new TGeoVolume(TString("vacTubeFlangeV") += TString("_") + module_name, vacTubeFlangeS);
1041
1042 // volume medium
1043 TGeoMedium* vacTubeV_medium = pMedSteel;
1044 if (vacTubeV_medium) {
1045 vacTubeV->SetMedium(vacTubeV_medium);
1046 vacTubeFlangeV->SetMedium(vacTubeV_medium);
1047 } else
1048 Fatal("Main", "Invalid medium for vacTubeV!");
1049
1050 vacTubeVacuumV->SetMedium(pMedVacuum);
1051
1052 // volume visual property (transparency)
1053 vacTubeV->SetLineColor(TColor::GetColor("#ffcccc"));
1054 vacTubeV->SetTransparency(0);
1055 vacTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
1056
1057 // part positions in the vacuum tube box
1058 TGeoCombiTrans* vacTubeV_transf[1];
1059 vacTubeV_transf[0] = new TGeoCombiTrans();
1060 vacTubeV_transf[0]->SetTranslation(0.0, 0.0, 0.0);
1061
1062 TGeoCombiTrans* vacTubeFlangeV_transf[2];
1063 vacTubeFlangeV_transf[0] = new TGeoCombiTrans();
1064 vacTubeFlangeV_transf[0]->SetTranslation(0.0, 0.0, -length * 0.5 + flangeThickness * 0.5);
1065 vacTubeFlangeV_transf[1] = new TGeoCombiTrans();
1066 vacTubeFlangeV_transf[1]->SetTranslation(0.0, 0.0, +length * 0.5 - flangeThickness * 0.5);
1067
1068 vacTubeBoxV->AddNode(vacTubeV, 0, vacTubeV_transf[0]);
1069 vacTubeBoxV->AddNode(vacTubeVacuumV, 0, vacTubeV_transf[0]);
1070 vacTubeBoxV->AddNode(vacTubeFlangeV, 0, vacTubeFlangeV_transf[0]);
1071 vacTubeBoxV->AddNode(vacTubeFlangeV, 1, vacTubeFlangeV_transf[1]);
1072
1073 return vacTubeBoxV;
1074}
1075//------------------------------------------------------------------------------
1076
1078{
1079
1080 Double_t length = 18.6; // cm
1081
1082 Double_t innerRadius = 21.3 * 0.5;
1083 Double_t outerRadius = 21.9 * 0.5;
1084 Double_t flangeRadius = 24.0 * 0.5;
1085
1086 Double_t flangeThickness = 1.2;
1087
1088 // shapes
1089 TGeoShape* vacTubeS =
1090 new TGeoTube(TString("vacTubeS") += TString("_") + module_name, innerRadius, outerRadius, length * 0.5);
1091 TGeoShape* vacTubeVacuumS =
1092 new TGeoTube(TString("vacTubeVacuumS") += TString("_") + module_name, 0.0, innerRadius, length * 0.5);
1093 TGeoShape* vacTubeFlangeS = new TGeoTube(TString("vacTubeFlangeS") += TString("_") + module_name, outerRadius,
1094 flangeRadius, flangeThickness * 0.5);
1095
1096 // volumes
1097 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
1098 TGeoVolume* vacTubeV = new TGeoVolume(TString("vacTubeV") += TString("_") + module_name, vacTubeS);
1099 TGeoVolume* vacTubeVacuumV =
1100 new TGeoVolume(TString("vacTubeVacuumV") += TString("_") + module_name, vacTubeVacuumS);
1101 TGeoVolume* vacTubeFlangeV =
1102 new TGeoVolume(TString("vacTubeFlangeV") += TString("_") + module_name, vacTubeFlangeS);
1103
1104 // volume medium
1105 TGeoMedium* vacTubeV_medium = pMedSteel;
1106 if (vacTubeV_medium) {
1107 vacTubeV->SetMedium(vacTubeV_medium);
1108 vacTubeFlangeV->SetMedium(vacTubeV_medium);
1109 } else
1110 Fatal("Main", "Invalid medium for vacTubeV!");
1111
1112 vacTubeVacuumV->SetMedium(pMedVacuum);
1113
1114 // volume visual property (transparency)
1115 vacTubeV->SetLineColor(TColor::GetColor("#ffcccc"));
1116 vacTubeV->SetTransparency(0);
1117 vacTubeFlangeV->SetLineColor(TColor::GetColor("#ffcccc"));
1118
1119 // part positions in the vacuum tube box
1120 TGeoCombiTrans* vacTubeV_transf[1];
1121 vacTubeV_transf[0] = new TGeoCombiTrans();
1122 vacTubeV_transf[0]->SetTranslation(0.0, 0.0, 0.0);
1123
1124 TGeoCombiTrans* vacTubeFlangeV_transf[2];
1125 vacTubeFlangeV_transf[0] = new TGeoCombiTrans();
1126 vacTubeFlangeV_transf[0]->SetTranslation(0.0, 0.0, -length * 0.5 + flangeThickness * 0.5);
1127 vacTubeFlangeV_transf[1] = new TGeoCombiTrans();
1128 vacTubeFlangeV_transf[1]->SetTranslation(0.0, 0.0, +length * 0.5 - flangeThickness * 0.5);
1129
1130 vacTubeBoxV->AddNode(vacTubeV, 0, vacTubeV_transf[0]);
1131 vacTubeBoxV->AddNode(vacTubeVacuumV, 0, vacTubeV_transf[0]);
1132 vacTubeBoxV->AddNode(vacTubeFlangeV, 0, vacTubeFlangeV_transf[0]);
1133 vacTubeBoxV->AddNode(vacTubeFlangeV, 1, vacTubeFlangeV_transf[1]);
1134
1135 return vacTubeBoxV;
1136}
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 TSystem * gSystem
static Int_t GetColor(const char *hexcolor)
void Close(Option_t *option="") override
void SetDz(Double_t dz) override
void RegisterYourself() 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)
TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="") 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
virtual void SetName(const char *name)
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TGeoMedium * pMedCarbon
TGeoManager * gGeoMan
TGeoMedium * pMedFiberGlass
TGeoMedium * pMedAluminium
TGeoMedium * pMedSilicon
TGeoVolume * CreateModule_Compensator(TString module_name)
TGeoVolume * CreateModule_Profilometer(TString module_name)
TGeoVolume * CreateModule_BareBox(TString module_name)
void create_rootgeom_VacuumPipe_section1()
TGeoVolume * CreateModule_Bellows(TString module_name)
TGeoVolume * CreateModule_SiTracker(TString module_name)
const Double_t XModulePositions[NModules]
const Double_t YModulePositions[NModules]
void DefineRequiredMedia(FairGeoMedia *geoMedia, FairGeoBuilder *geoBuild)
TGeoVolume * CreateModule_Counter(TString module_name)
const Double_t ZModulePositions[NModules]
TGeoMedium * pMedVacuum