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