BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_VacuumPipe_section2_RUN9.C
Go to the documentation of this file.
1/*
2 * Use this macro to create ROOT geometry of Vacuum Beam Pipe
3 * (section 2: behind 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 = 4;
21
22// Positions
24 +0.372, // [0]
25 +0.372 + 0.65, // [1]
26 +0.372 + 0.65 + 3.14, // [2]
27 +0.372 + 0.65 + 3.14 + 6.97 // [3]
28};
30 -0.079, // [0]
31 -0.079, // [1]
32 -0.079, // [2]
33 -0.079 // [3]
34};
36 -34.0, // [0]
37 -34.0 + 82.26, // [1]
38 -34.0 + 82.26 + 101.54 - 1.5 - 0.05, // [2]
39 -34.0 + 82.26 + 101.54 - 1.5 + 125.58 - 1.5 - 0.35 // [3]
40};
41
42// Rotations of modules around Z (deg.)
44 +0.0, // [0]
45 +0.0, // [1]
46 +0.0, // [2]
47 +0.0 // [3]
48};
49
50//------------------------------------------------------------------------------
51
52// GeoManager
54
55// media
63
64class FairGeoMedia;
65class FairGeoBuilder;
66
67TGeoVolume* CreateModule1(TString module_name);
68TGeoVolume* CreateModule2(TString module_name);
69TGeoVolume* CreateModule3(TString module_name);
70TGeoVolume* CreateModule4(TString module_name);
71
72void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
73{
74
75 // vacuum medium
76 FairGeoMedium* mVacuum = geoMedia->getMedium("vacuum");
77 if (!mVacuum)
78 Fatal("Main", "FairMedium vacuum not found");
79 geoBuild->createMedium(mVacuum);
80 pMedVacuum = gGeoManager->GetMedium("vacuum");
81 if (!pMedVacuum)
82 Fatal("Main", "Medium vacuum not found");
83
84 // air medium
85 FairGeoMedium* mAir = geoMedia->getMedium("air");
86 if (!mAir)
87 Fatal("Main", "FairMedium air not found");
88 geoBuild->createMedium(mAir);
89 pMedAir = gGeoManager->GetMedium("air");
90 if (!pMedAir)
91 Fatal("Main", "Medium air not found");
92
93 // carbon medium
94 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
95 if (!mCarbon)
96 Fatal("Main", "FairMedium carbon not found");
97 geoBuild->createMedium(mCarbon);
98 pMedCarbon = gGeoManager->GetMedium("carbon");
99 if (!pMedCarbon)
100 Fatal("Main", "Medium carbon not found");
101
102 // aluminium medium
103 FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium");
104 if (!mAluminium)
105 Fatal("Main", "FairMedium aluminium not found");
106 geoBuild->createMedium(mAluminium);
107 pMedAluminium = gGeoManager->GetMedium("aluminium");
108 if (!pMedAluminium)
109 Fatal("Main", "Medium aluminium not found");
110
111 // steel medium
112 FairGeoMedium* mSteel = geoMedia->getMedium("steel");
113 if (!mSteel)
114 Fatal("Main", "FairMedium steel not found");
115 geoBuild->createMedium(mSteel);
116 pMedSteel = gGeoManager->GetMedium("steel");
117 if (!pMedSteel)
118 Fatal("Main", "Medium steel not found");
119
120 // fiberglass medium
121 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
122 if (!mFiberGlass)
123 Fatal("Main", "FairMedium fiberglass not found");
124 geoBuild->createMedium(mFiberGlass);
125 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
126 if (!pMedFiberGlass)
127 Fatal("Main", "Medium fiberglass not found");
128
129 // silicon medium
130 FairGeoMedium* mSilicon = geoMedia->getMedium("silicon");
131 if (!mSilicon)
132 Fatal("Main", "FairMedium silicon not found");
133 geoBuild->createMedium(mSilicon);
134 pMedSilicon = gGeoManager->GetMedium("silicon");
135 if (!pMedSilicon)
136 Fatal("Main", "Medium silicon not found");
137}
138
140{
141
142 // ---- set working directory --------------------------------------------
143 TString gPath = gSystem->Getenv("VMCWORKDIR");
144
145 // ------- Geometry file name (output) ----------------------------------
146 const TString geoDetectorName = "VacuumPipe_section2";
147 const TString geoDetectorVersion = "Run9";
148 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
149
150 // ---- global geometry parameters ---------------------------------------
151 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
152 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
153
154 // ------- Load media from media file ----------------------------------
155 TString medFile = gPath + "/geometry/media.geo";
156 geoFace->setMediaFile(medFile);
157 geoFace->readMedia();
158 FairGeoMedia* geoMedia = geoFace->getMedia();
159 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
160
161 DefineRequiredMedia(geoMedia, geoBuild);
162 // -------------------------------------------------------------------------
163
164 // -------------- Create geometry and top volume ------------------------
165 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
166 gGeoMan->SetName(geoDetectorName + "_geom");
167 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
168 top->SetMedium(pMedAir);
169 gGeoMan->SetTopVolume(top);
170 // gGeoMan->SetTopVisible(1);
171 // -------------------------------------------------------------------------
172
173 // Define TOP Geometry
174 TGeoVolume* VacuumPipe_section2 = new TGeoVolumeAssembly(geoDetectorName);
175 VacuumPipe_section2->SetMedium(pMedVacuum);
176
177 TGeoVolume* module1 = CreateModule1(TString("VacuumPipeSec2_Module1"));
178 TGeoVolume* module2 = CreateModule2(TString("VacuumPipeSec2_Module2"));
179 TGeoVolume* module3 = CreateModule3(TString("VacuumPipeSec2_Module3"));
180 TGeoVolume* module4 = CreateModule4(TString("VacuumPipeSec2_Module4"));
181
182 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
183 module1_transform->RotateZ(ZStationRotations[0]);
185
186 TGeoCombiTrans* module2_transform = new TGeoCombiTrans();
187 module2_transform->RotateZ(ZStationRotations[1]);
189 // module2_transform->SetTranslation(XModulePositions[1] + 0.65/*shift*/, YModulePositions[1], ZModulePositions[1]
190 // + 82.26/*shift*/);
191
192 TGeoCombiTrans* module3_transform = new TGeoCombiTrans();
193 module3_transform->RotateZ(ZStationRotations[2]);
195 // module3_transform->SetTranslation(XModulePositions[2] + 0.65 + 3.14/*shift*/, YModulePositions[2],
196 // ZModulePositions[2] + 82.26 + 101.54-1.5-0.05/*shift*/);
197
198 TGeoCombiTrans* module4_transform = new TGeoCombiTrans();
199 module4_transform->RotateZ(ZStationRotations[3]);
201 // module4_transform->SetTranslation(XModulePositions[3] + 0.65 + 3.14 + 6.97/*shift*/, YModulePositions[3],
202 // ZModulePositions[3] + 82.26 + 101.54-1.5 + 125.58-1.5-0.35/*shift*/);
203
204 VacuumPipe_section2->AddNode(module1, 0, module1_transform);
205 VacuumPipe_section2->AddNode(module2, 0, module2_transform);
206 VacuumPipe_section2->AddNode(module3, 0, module3_transform);
207 VacuumPipe_section2->AddNode(module4, 0, module4_transform);
208
209 top->AddNode(VacuumPipe_section2, 0);
211
212 // --------------- Finish ----------------------------------------------
213 gGeoMan->CloseGeometry();
214 gGeoMan->CheckOverlaps(0.0001);
215 gGeoMan->PrintOverlaps();
216 gGeoMan->Test();
217 // gGeoMan->RestoreMasterVolume();
218
219 TFile* geoFile = new TFile(geoFileName, "RECREATE");
220 top->Write();
221 geoFile->Close();
222 top->Draw("ogl");
223}
224//------------------------------------------------------------------------------
225
227{
228
229 Double_t length1 = 34.5; // wide tube
230 Double_t length2 = 5.8; // cone
231 Double_t length3 = 41.96; // narrow tube
232
233 Double_t innerRadius1 = 6.4 * 0.5;
234 Double_t outerRadius1 = 6.6 * 0.5;
235
236 Double_t innerRadius2 = 4.8 * 0.5;
237 Double_t outerRadius2 = 5.0 * 0.5;
238
239 Double_t angleInclined3 = 0.88; // deg
240
241 Double_t targetCutZ = 0.5;
242
243 // shapes
244 TGeoShape* vacTube1S =
245 new TGeoTube(TString("vacTube1S") += TString("_") + module_name, innerRadius1, outerRadius1, length1 * 0.5);
246 TGeoShape* vacCone2S = new TGeoCone(TString("vacCone2S") += TString("_") + module_name, length2 * 0.5, innerRadius1,
247 outerRadius1, innerRadius2, outerRadius2);
248 // TGeoShape *vacTube3S = new TGeoTube(TString("vacTube3S")+=TString("_") + module_name, innerRadius2, outerRadius2,
249 // length3*0.5);
250 TGeoShape* vacTube3S = new TGeoCtub(TString("vacTube3S") += TString("_") + module_name, innerRadius2, outerRadius2,
251 length3 * 0.5, 0.0, 360.0, 0.015 /*!!!*/, 0, -1, 0, 0, 1);
252
253 TGeoShape* vacTube1VacuumS = new TGeoTube(TString("vacTube1VacuumS") += TString("_") + module_name, 0.0,
254 innerRadius1, (length1 - targetCutZ) * 0.5);
255 TGeoShape* vacCone2VacuumS = new TGeoCone(TString("vacCone2VacuumS") += TString("_") + module_name, length2 * 0.5,
256 0.0, innerRadius1, 0.0, innerRadius2);
257 TGeoShape* vacTube3VacuumS = new TGeoCtub(TString("vacTube3VacuumS") += TString("_") + module_name, 0.0,
258 innerRadius2, length3 * 0.5, 0.0, 360.0, 0.015 /*!!!*/, 0, -1, 0, 0, 1);
259
260 TGeoCombiTrans* vacTube3S_transf = new TGeoCombiTrans();
261 vacTube3S_transf->SetName(TString("vacTube3S_transf") += TString("_") + module_name);
262 vacTube3S_transf->RotateY(angleInclined3);
263 vacTube3S_transf->RegisterYourself();
264
265 TGeoCombiTrans* vacTube3S_transf1 = new TGeoCombiTrans();
266 vacTube3S_transf1->SetName(TString("vacTube3S_transf1") += TString("_") + module_name);
267 vacTube3S_transf1->SetTranslation(-1000.0, 0.0, 0.0);
268 vacTube3S_transf1->RegisterYourself();
269
270 TGeoCompositeShape* vacTube3RotS = new TGeoCompositeShape();
271 vacTube3RotS->SetName(TString("vacTube3RotS") += TString("_") + module_name);
272 {
273 TString expression = "vacTube3S";
274 expression += TString("_") + module_name;
275 expression += ":vacTube3S_transf";
276 expression += TString("_") + module_name;
277 expression += "-vacTube3S";
278 expression += TString("_") + module_name;
279 expression += ":vacTube3S_transf1";
280 expression += TString("_") + module_name;
281
282 vacTube3RotS->MakeNode(expression);
283 vacTube3RotS->ComputeBBox(); // need to compute a bounding box
284 }
285
286 TGeoCompositeShape* vacTube3RotVacuumS = new TGeoCompositeShape();
287 vacTube3RotVacuumS->SetName(TString("vacTube3RotVacuumS") += TString("_") + module_name);
288 {
289 TString expression = "vacTube3VacuumS";
290 expression += TString("_") + module_name;
291 expression += ":vacTube3S_transf";
292 expression += TString("_") + module_name;
293 expression += "-vacTube3VacuumS";
294 expression += TString("_") + module_name;
295 expression += ":vacTube3S_transf1";
296 expression += TString("_") + module_name;
297
298 vacTube3RotVacuumS->MakeNode(expression);
299 vacTube3RotVacuumS->ComputeBBox(); // need to compute a bounding box
300 }
301
302 // volumes
303 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
304 TGeoVolume* vacTube1V = new TGeoVolume(TString("vacTube1V") += TString("_") + module_name, vacTube1S);
305 TGeoVolume* vacCone2V = new TGeoVolume(TString("vacCone2V") += TString("_") + module_name, vacCone2S);
306 // TGeoVolume *vacTube3V = new TGeoVolume(TString("vacTube3V")+=TString("_") + module_name, vacTube3S);
307 TGeoVolume* vacTube3V = new TGeoVolume(TString("vacTube3V") += TString("_") + module_name, vacTube3RotS);
308
309 TGeoVolume* vacTube1VacuumV =
310 new TGeoVolume(TString("vacTube1VacuumV") += TString("_") + module_name, vacTube1VacuumS);
311 TGeoVolume* vacCone2VacuumV =
312 new TGeoVolume(TString("vacCone2VacuumV") += TString("_") + module_name, vacCone2VacuumS);
313 TGeoVolume* vacTube3VacuumV =
314 new TGeoVolume(TString("vacTube3VacuumV") += TString("_") + module_name, vacTube3RotVacuumS);
315
316 // volume medium
317 TGeoMedium* vacTubeV_medium = pMedCarbon;
318 if (vacTubeV_medium) {
319 vacTube1V->SetMedium(vacTubeV_medium);
320 vacCone2V->SetMedium(vacTubeV_medium);
321 vacTube3V->SetMedium(vacTubeV_medium);
322 } else
323 Fatal("Main", "Invalid medium for vacTubeV!");
324
325 vacTube1VacuumV->SetMedium(pMedVacuum);
326 vacCone2VacuumV->SetMedium(pMedVacuum);
327 vacTube3VacuumV->SetMedium(pMedVacuum);
328
329 // volume visual property (transparency)
330 vacTube1V->SetLineColor(TColor::GetColor("#ffcccc"));
331 vacTube1V->SetTransparency(0);
332 vacCone2V->SetLineColor(TColor::GetColor("#ffcccc"));
333 vacTube3V->SetLineColor(TColor::GetColor("#ffcccc"));
334
335 // part positions in the vacuum tube box
336 TGeoCombiTrans* vacTube1V_transf[1];
337 vacTube1V_transf[0] = new TGeoCombiTrans();
338 vacTube1V_transf[0]->SetTranslation(0.0, 0.0, +length1 * 0.5);
339
340 TGeoCombiTrans* vacCone2V_transf[1];
341 vacCone2V_transf[0] = new TGeoCombiTrans();
342 vacCone2V_transf[0]->SetTranslation(0.0, 0.0, +length1 + length2 * 0.5);
343
344 TGeoCombiTrans* vacTube3V_transf[1];
345 vacTube3V_transf[0] = new TGeoCombiTrans();
346 vacTube3V_transf[0]->SetTranslation(TMath::Sin(angleInclined3 * TMath::DegToRad()) * length3 * 0.5, 0.0,
347 +length1 + length2 + length3 * 0.5);
348
349 TGeoCombiTrans* vacTube1VacuumV_transf[1];
350 vacTube1VacuumV_transf[0] = new TGeoCombiTrans();
351 vacTube1VacuumV_transf[0]->SetTranslation(0.0, 0.0, +(length1 - targetCutZ) * 0.5);
352
353 vacTubeBoxV->AddNode(vacTube1V, 0, vacTube1V_transf[0]);
354 vacTubeBoxV->AddNode(vacCone2V, 0, vacCone2V_transf[0]);
355 vacTubeBoxV->AddNode(vacTube3V, 0, vacTube3V_transf[0]);
356
357 vacTubeBoxV->AddNode(vacTube1VacuumV, 0, vacTube1VacuumV_transf[0]);
358 vacTubeBoxV->AddNode(vacCone2VacuumV, 0, vacCone2V_transf[0]);
359 vacTubeBoxV->AddNode(vacTube3VacuumV, 0, vacTube3V_transf[0]);
360
361 return vacTubeBoxV;
362}
363//------------------------------------------------------------------------------
364
366{
367
368 Double_t length1 = 101.54 - 1.5; // cm
369
370 Double_t innerRadius1 = 4.8 * 0.5;
371 Double_t outerRadius1 = 5.0 * 0.5;
372 Double_t angleInclined1 = 1.78; // deg
373
374 // shapes
375 // TGeoShape *vacTube1S = new TGeoTube(TString("vacTube1S")+=TString("_") + module_name, innerRadius1, outerRadius1,
376 // length1*0.5);
377 TGeoShape* vacTube1S = new TGeoCtub(TString("vacTube1S") += TString("_") + module_name, innerRadius1, outerRadius1,
378 length1 * 0.5, 0.0, 360.0, 0.015 /*!!!*/, 0, -1, 0.015 /*!!!*/, 0, 1);
379
380 TGeoShape* vacTube1VacuumS =
381 new TGeoCtub(TString("vacTube1VacuumS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5, 0.0,
382 360.0, 0.015 /*!!!*/, 0, -1, 0.015 /*!!!*/, 0, 1);
383
384 TGeoCombiTrans* vacTube1S_transf = new TGeoCombiTrans();
385 vacTube1S_transf->SetName(TString("vacTube1S_transf") += TString("_") + module_name);
386 vacTube1S_transf->RotateY(angleInclined1);
387 vacTube1S_transf->RegisterYourself();
388
389 TGeoCombiTrans* vacTube1S_transf1 = new TGeoCombiTrans();
390 vacTube1S_transf1->SetName(TString("vacTube1S_transf1") += TString("_") + module_name);
391 vacTube1S_transf1->SetTranslation(-1000.0, 0.0, 0.0);
392 vacTube1S_transf1->RegisterYourself();
393
394 TGeoCompositeShape* vacTube1RotS = new TGeoCompositeShape();
395 vacTube1RotS->SetName(TString("vacTube1RotS") += TString("_") + module_name);
396 {
397 TString expression = "vacTube1S";
398 expression += TString("_") + module_name;
399 expression += ":vacTube1S_transf";
400 expression += TString("_") + module_name;
401 expression += "-vacTube1S";
402 expression += TString("_") + module_name;
403 expression += ":vacTube1S_transf1";
404 expression += TString("_") + module_name;
405
406 vacTube1RotS->MakeNode(expression);
407 vacTube1RotS->ComputeBBox(); // need to compute a bounding box
408 }
409
410 TGeoCompositeShape* vacTube1RotVacuumS = new TGeoCompositeShape();
411 vacTube1RotVacuumS->SetName(TString("vacTube1RotVacuumS") += TString("_") + module_name);
412 {
413 TString expression = "vacTube1VacuumS";
414 expression += TString("_") + module_name;
415 expression += ":vacTube1S_transf";
416 expression += TString("_") + module_name;
417 expression += "-vacTube1VacuumS";
418 expression += TString("_") + module_name;
419 expression += ":vacTube1S_transf1";
420 expression += TString("_") + module_name;
421
422 vacTube1RotVacuumS->MakeNode(expression);
423 vacTube1RotVacuumS->ComputeBBox(); // need to compute a bounding box
424 }
425
426 // volumes
427 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
428 // TGeoVolume *vacTube1V = new TGeoVolume(TString("vacTube1V")+=TString("_") + module_name, vacTube1S);
429 TGeoVolume* vacTube1V = new TGeoVolume(TString("vacTube3V") += TString("_") + module_name, vacTube1RotS);
430
431 TGeoVolume* vacTube1VacuumV =
432 new TGeoVolume(TString("vacTube1VacuumV") += TString("_") + module_name, vacTube1RotVacuumS);
433
434 // volume medium
435 TGeoMedium* vacTubeV_medium = pMedCarbon;
436 if (vacTubeV_medium) {
437 vacTube1V->SetMedium(vacTubeV_medium);
438 } else
439 Fatal("Main", "Invalid medium for vacTubeV!");
440
441 vacTube1VacuumV->SetMedium(pMedVacuum);
442
443 // volume visual property (transparency)
444 vacTube1V->SetLineColor(TColor::GetColor("#ffcccc"));
445 vacTube1V->SetTransparency(0);
446
447 // part positions in the vacuum tube box
448 TGeoCombiTrans* vacTube1V_transf[1];
449 vacTube1V_transf[0] = new TGeoCombiTrans();
450 vacTube1V_transf[0]->SetTranslation(TMath::Sin(angleInclined1 * TMath::DegToRad()) * length1 * 0.5, 0.0,
451 length1 * 0.5);
452
453 vacTubeBoxV->AddNode(vacTube1V, 0, vacTube1V_transf[0]);
454 vacTubeBoxV->AddNode(vacTube1VacuumV, 0, vacTube1V_transf[0]);
455
456 return vacTubeBoxV;
457}
458//------------------------------------------------------------------------------
459
461{
462
463 Double_t length1 = 125.58 - 1.5; // cm
464
465 Double_t innerRadius1 = 4.8 * 0.5;
466 Double_t outerRadius1 = 5.0 * 0.5;
467
468 Double_t innerRadius2 = 7.0 * 0.5;
469 Double_t outerRadius2 = 7.2 * 0.5;
470
471 Double_t angleInclined1 = 3.22; // deg
472
473 // shapes
474 TGeoShape* vacCone1S = new TGeoCone(TString("vacCone1S") += TString("_") + module_name, length1 * 0.5, innerRadius1,
475 outerRadius1, innerRadius2, outerRadius2);
476
477 TGeoShape* vacCone1VacuumS = new TGeoCone(TString("vacCone1VacuumS") += TString("_") + module_name, length1 * 0.5,
478 0.0, innerRadius1, 0.0, innerRadius2);
479
480 TGeoCombiTrans* vacCone1S_transf = new TGeoCombiTrans();
481 vacCone1S_transf->SetName(TString("vacCone1S_transf") += TString("_") + module_name);
482 vacCone1S_transf->RotateY(angleInclined1);
483 vacCone1S_transf->RegisterYourself();
484
485 TGeoCombiTrans* vacCone1S_transf1 = new TGeoCombiTrans();
486 vacCone1S_transf1->SetName(TString("vacCone1S_transf1") += TString("_") + module_name);
487 vacCone1S_transf1->SetTranslation(-1000.0, 0.0, 0.0);
488 vacCone1S_transf1->RegisterYourself();
489
490 TGeoCompositeShape* vacCone1RotS = new TGeoCompositeShape();
491 vacCone1RotS->SetName(TString("vacCone1RotS") += TString("_") + module_name);
492 {
493 TString expression = "vacCone1S";
494 expression += TString("_") + module_name;
495 expression += ":vacCone1S_transf";
496 expression += TString("_") + module_name;
497 expression += "-vacCone1S";
498 expression += TString("_") + module_name;
499 expression += ":vacCone1S_transf1";
500 expression += TString("_") + module_name;
501
502 vacCone1RotS->MakeNode(expression);
503 vacCone1RotS->ComputeBBox(); // need to compute a bounding box
504 }
505
506 TGeoCompositeShape* vacCone1RotVacuumS = new TGeoCompositeShape();
507 vacCone1RotVacuumS->SetName(TString("vacCone1RotVacuumS") += TString("_") + module_name);
508 {
509 TString expression = "vacCone1VacuumS";
510 expression += TString("_") + module_name;
511 expression += ":vacCone1S_transf";
512 expression += TString("_") + module_name;
513 expression += "-vacCone1VacuumS";
514 expression += TString("_") + module_name;
515 expression += ":vacCone1S_transf1";
516 expression += TString("_") + module_name;
517
518 vacCone1RotVacuumS->MakeNode(expression);
519 vacCone1RotVacuumS->ComputeBBox(); // need to compute a bounding box
520 }
521
522 // volumes
523 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
524 TGeoVolume* vacCone1V = new TGeoVolume(TString("vacCone1V") += TString("_") + module_name, vacCone1RotS);
525
526 TGeoVolume* vacCone1VacuumV =
527 new TGeoVolume(TString("vacCone1VacuumV") += TString("_") + module_name, vacCone1RotVacuumS);
528
529 // volume medium
530 TGeoMedium* vacTubeV_medium = pMedCarbon;
531 if (vacTubeV_medium) {
532 vacCone1V->SetMedium(vacTubeV_medium);
533 } else
534 Fatal("Main", "Invalid medium for vacCone1V!");
535
536 vacCone1VacuumV->SetMedium(pMedVacuum);
537
538 // volume visual property (transparency)
539 vacCone1V->SetLineColor(TColor::GetColor("#ffcccc"));
540 vacCone1V->SetTransparency(0);
541
542 // part positions in the vacuum tube box
543 TGeoCombiTrans* vacCone1V_transf[1];
544 vacCone1V_transf[0] = new TGeoCombiTrans();
545 vacCone1V_transf[0]->SetTranslation(TMath::Sin(angleInclined1 * TMath::DegToRad()) * length1 * 0.5, 0.0,
546 +length1 * 0.5);
547
548 vacTubeBoxV->AddNode(vacCone1V, 0, vacCone1V_transf[0]);
549 vacTubeBoxV->AddNode(vacCone1VacuumV, 0, vacCone1V_transf[0]);
550
551 return vacTubeBoxV;
552}
553//------------------------------------------------------------------------------
554
556{
557
558 Double_t length1 = 158.28 - 1.5; // cm
559
560 Double_t innerRadius1 = 7.0 * 0.5;
561 Double_t outerRadius1 = 7.2 * 0.5;
562 Double_t angleInclined1 = 4.25; // deg
563
564 // shapes
565 // TGeoShape *vacTube1S = new TGeoTube(TString("vacTube1S")+=TString("_") + module_name, innerRadius1, outerRadius1,
566 // length1*0.5);
567 TGeoShape* vacTube1S = new TGeoCtub(TString("vacTube1S") += TString("_") + module_name, innerRadius1, outerRadius1,
568 length1 * 0.5, 0.0, 360.0, 0.015 /*!!!*/, 0, -1, 0.0 /*!!!*/, 0, 1);
569
570 TGeoShape* vacTube1VacuumS =
571 new TGeoCtub(TString("vacTube1VacuumS") += TString("_") + module_name, 0.0, innerRadius1, length1 * 0.5, 0.0,
572 360.0, 0.015 /*!!!*/, 0, -1, 0.0 /*!!!*/, 0, 1);
573
574 TGeoCombiTrans* vacTube1S_transf = new TGeoCombiTrans();
575 vacTube1S_transf->SetName(TString("vacTube1S_transf") += TString("_") + module_name);
576 vacTube1S_transf->RotateY(angleInclined1);
577 vacTube1S_transf->RegisterYourself();
578
579 TGeoCombiTrans* vacTube1S_transf1 = new TGeoCombiTrans();
580 vacTube1S_transf1->SetName(TString("vacTube1S_transf1") += TString("_") + module_name);
581 vacTube1S_transf1->SetTranslation(-1000.0, 0.0, 0.0);
582 vacTube1S_transf1->RegisterYourself();
583
584 TGeoCompositeShape* vacTube1RotS = new TGeoCompositeShape();
585 vacTube1RotS->SetName(TString("vacTube1RotS") += TString("_") + module_name);
586 {
587 TString expression = "vacTube1S";
588 expression += TString("_") + module_name;
589 expression += ":vacTube1S_transf";
590 expression += TString("_") + module_name;
591 expression += "-vacTube1S";
592 expression += TString("_") + module_name;
593 expression += ":vacTube1S_transf1";
594 expression += TString("_") + module_name;
595
596 vacTube1RotS->MakeNode(expression);
597 vacTube1RotS->ComputeBBox(); // need to compute a bounding box
598 }
599
600 TGeoCompositeShape* vacTube1RotVacuumS = new TGeoCompositeShape();
601 vacTube1RotVacuumS->SetName(TString("vacTube1RotVacuumS") += TString("_") + module_name);
602 {
603 TString expression = "vacTube1VacuumS";
604 expression += TString("_") + module_name;
605 expression += ":vacTube1S_transf";
606 expression += TString("_") + module_name;
607 expression += "-vacTube1VacuumS";
608 expression += TString("_") + module_name;
609 expression += ":vacTube1S_transf1";
610 expression += TString("_") + module_name;
611
612 vacTube1RotVacuumS->MakeNode(expression);
613 vacTube1RotVacuumS->ComputeBBox(); // need to compute a bounding box
614 }
615
616 // volumes
617 TGeoVolumeAssembly* vacTubeBoxV = new TGeoVolumeAssembly(module_name);
618 // TGeoVolume *vacTube1V = new TGeoVolume(TString("vacTube1V")+=TString("_") + module_name, vacTube1S);
619 TGeoVolume* vacTube1V = new TGeoVolume(TString("vacTube3V") += TString("_") + module_name, vacTube1RotS);
620
621 TGeoVolume* vacTube1VacuumV =
622 new TGeoVolume(TString("vacTube1VacuumV") += TString("_") + module_name, vacTube1RotVacuumS);
623
624 // volume medium
625 TGeoMedium* vacTubeV_medium = pMedCarbon;
626 if (vacTubeV_medium) {
627 vacTube1V->SetMedium(vacTubeV_medium);
628 } else
629 Fatal("Main", "Invalid medium for vacTubeV!");
630
631 vacTube1VacuumV->SetMedium(pMedVacuum);
632
633 // volume visual property (transparency)
634 vacTube1V->SetLineColor(TColor::GetColor("#ffcccc"));
635 vacTube1V->SetTransparency(0);
636
637 // part positions in the vacuum tube box
638 TGeoCombiTrans* vacTube1V_transf[1];
639 vacTube1V_transf[0] = new TGeoCombiTrans();
640 vacTube1V_transf[0]->SetTranslation(TMath::Sin(angleInclined1 * TMath::DegToRad()) * length1 * 0.5, 0.0,
641 length1 * 0.5);
642
643 vacTubeBoxV->AddNode(vacTube1V, 0, vacTube1V_transf[0]);
644 vacTubeBoxV->AddNode(vacTube1VacuumV, 0, vacTube1V_transf[0]);
645
646 return vacTubeBoxV;
647}
648//------------------------------------------------------------------------------
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 RegisterYourself() override
void RotateY(Double_t angle) 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)
const Double_t XModulePositions[NModules]
const Double_t YModulePositions[NModules]
const Double_t ZModulePositions[NModules]
TGeoVolume * CreateModule1(TString module_name)
TGeoVolume * CreateModule3(TString module_name)
TGeoVolume * CreateModule4(TString module_name)
void create_rootgeom_VacuumPipe_section2_RUN9()
void DefineRequiredMedia(FairGeoMedia *geoMedia, FairGeoBuilder *geoBuild)
TGeoVolume * CreateModule2(TString module_name)
constexpr Double_t DegToRad()
Double_t Sin(Double_t)