Project
Loading...
Searching...
No Matches
PipeRun4.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15#include <TGeoCompositeShape.h>
16#include <TGeoCone.h>
17#include <TGeoPcon.h>
18#include <TGeoTorus.h>
19#include <TGeoTube.h>
20#include <TGeoEltu.h>
21#include <TVirtualMC.h>
22#include "TGeoManager.h" // for TGeoManager, gGeoManager
23#include "TGeoMaterial.h" // for TGeoMaterial
24#include "TGeoMedium.h" // for TGeoMedium
25#include "TGeoVolume.h" // for TGeoVolume
26#include <TGeoArb8.h> // for TGeoTrap
27#include <TGeoTrd1.h> // for TGeoTrap
28// force availability of assert
29#ifdef NDEBUG
30#undef NDEBUG
31#endif
32#include <cassert>
33
34//-------------------------------------------------------------------------
35// Beam pipe class for ALICE ITS3 & FOCAL upgrade
36// Imported from Pipe class
37// Original Authors:
38// F. Manso
39// A. Morsch
40// R. Tieulent
41// M. Sitta
42//-------------------------------------------------------------------------
43
44using namespace o2::passive;
45
46PipeRun4::~PipeRun4() = default;
48PipeRun4::PipeRun4(const char* name, const char* title, float rho, float thick)
49 : PassiveBase(name, title), mBePipeRmax(rho), mBePipeThick(thick)
50{
51}
52PipeRun4::PipeRun4(const PipeRun4& rhs) = default;
53
54PipeRun4& PipeRun4::operator=(const PipeRun4& rhs)
55{
56 // self assignment
57 if (this == &rhs) {
58 return *this;
59 }
60
61 // base class assignment
62 PassiveBase::operator=(rhs);
63
64 return *this;
65}
66
68{
69 createMaterials();
70 //
71 // Class describing the beam pipe geometry
72 //
73 float z, zsh, z0;
74 //
75 // Rotation Matrices
76 //
77 const float kDegRad = TMath::Pi() / 180.;
78 // Rotation by 180 deg
79 TGeoRotation* rot180 = new TGeoRotation("rot180", 90., 180., 90., 90., 180., 0.);
80 TGeoRotation* rotyz = new TGeoRotation("rotyz", 90., 180., 0., 180., 90., 90.);
81 TGeoRotation* rotxz = new TGeoRotation("rotxz", 0., 0., 90., 90., 90., 180.);
82 //
83
84 // Media
86 const TGeoMedium* kMedAir = matmgr.getTGeoMedium("PIPE_AIR");
87 const TGeoMedium* kMedAirNF = matmgr.getTGeoMedium("PIPE_AIR_NF");
88 const TGeoMedium* kMedAirHigh = matmgr.getTGeoMedium("PIPE_AIR_HIGH");
89
90 const TGeoMedium* kMedVac = matmgr.getTGeoMedium("PIPE_VACUUM");
91 const TGeoMedium* kMedVacNF = matmgr.getTGeoMedium("PIPE_VACUUM_NF");
92 const TGeoMedium* kMedVacHC = matmgr.getTGeoMedium("PIPE_VACUUM_HC");
93 const TGeoMedium* kMedVacNFHC = matmgr.getTGeoMedium("PIPE_VACUUM_NFHC");
94
95 const TGeoMedium* kMedInsu = matmgr.getTGeoMedium("PIPE_INS_C0");
96
97 const TGeoMedium* kMedSteel = matmgr.getTGeoMedium("PIPE_INOX");
98 const TGeoMedium* kMedSteelNF = matmgr.getTGeoMedium("PIPE_INOX_NF");
99 const TGeoMedium* kMedSteelHC = matmgr.getTGeoMedium("PIPE_INOX_HC");
100 const TGeoMedium* kMedSteelNFHC = matmgr.getTGeoMedium("PIPE_INOX_NFHC");
101
102 const TGeoMedium* kMedBe = matmgr.getTGeoMedium("PIPE_BE");
103
104 const TGeoMedium* kMedCu = matmgr.getTGeoMedium("PIPE_CU");
105 const TGeoMedium* kMedCuNF = matmgr.getTGeoMedium("PIPE_CU_NF");
106 const TGeoMedium* kMedCuHC = matmgr.getTGeoMedium("PIPE_CU_HC");
107 const TGeoMedium* kMedCuNFHC = matmgr.getTGeoMedium("PIPE_CU_NFHC");
108
109 const TGeoMedium* kMedAlu2219 = matmgr.getTGeoMedium("PIPE_AA2219");
110 const TGeoMedium* kMedRohacell = matmgr.getTGeoMedium("PIPE_ROHACELL");
111 const TGeoMedium* kMedPolyimide = matmgr.getTGeoMedium("PIPE_POLYIMIDE");
112 const TGeoMedium* kMedAlBe = matmgr.getTGeoMedium("PIPE_AlBe");
113 const TGeoMedium* kMedCarbonFiber = matmgr.getTGeoMedium("PIPE_M55J6K");
114 const TGeoMedium* kMedTitanium = matmgr.getTGeoMedium("PIPE_TITANIUM");
115 const TGeoMedium* kMedAlu7075 = matmgr.getTGeoMedium("PIPE_AA7075");
116
117 // Top volume
118 TGeoVolume* top = gGeoManager->GetVolume("cave");
119 TGeoVolume* barrel = gGeoManager->GetVolume("barrel");
120 TGeoVolume* caveRB24 = gGeoManager->GetVolume("caveRB24");
121 //
122 //
124 // //
125 // The Central Vacuum system //
126 // //
128 //
129 //
130 // The ALICE central beam-pipe according to drawing LHCVC2C_0001
131 // Drawings of sub-elements:
132 //
133 // Pos 7 - Minimised Flange: LHCVFX_P0025
134 // Pos 6 - Standard Flange: STDVFUHV0009
135 // Pos 8 - Bellow: LHCVBX__0001
136 //
137 // Absolute z-coordinates -82.0 - 400.0 cm
138 // Total length: 482.0 cm
139 // It consists of 3 main parts:
140 // CP/2 The flange on the non-absorber side: 36.5 cm
141 // CP/1 The central Be pipe: 405.0 cm
142 // CP/3 The double-bellow and flange on the absorber side: 40.5 cm
143
144 //
145 /*
146 // Starting position in z
147 const float kCPz0 = -400.0;
148 // Length of the CP/1 section
149 const float kCP1Length = 405.0;
150 // Length of the CP/2 section
151 const float kCP2Length = 36.5;
152 // Length of the CP/3 section
153 const float kCP3Length = 40.5;
154 // Position of the CP/2 section
155 // const float kCP2pos = kCPz0 + kCP2Length / 2.;
156 // Position of the CP/3 section
157 const float kCP3pos = kCPz0 + kCP2Length + kCP1Length + kCP3Length/2.;
158 */
159
161 // Authors: F. Manso, R. Tieulent
162 // Drawings from C. Gargiulo :
163 // \\cern.ch\dfs\Workspaces\c\cgargiul\EXPERIMENT\ALICE\ALICE_MECHANICS\ALICE_DATA_PACKAGE\IN\DETECTORS\ITS_UPGRADE\1-DESIGN\3D_cad_model\R14_20140311_ALI\
164 //
165 //
166 // central beam pipe
167 //------------------- Pipe version 4.7 March 2014 -----------------------------
168 TGeoVolumeAssembly* beamPipeCsideSection = new TGeoVolumeAssembly("BeamPipeCsideSection");
169 // If user set Rmax=0/Thick=0 use defaults, else use user input
170 const float kBeryliumSectionOuterRadius = (mBePipeRmax > 0.) ? mBePipeRmax : 1.65;
171 const float kBeryliumSectionThickness = (mBePipeThick > 0.) ? mBePipeThick : 0.05;
172 float kBeryliumSectionZmax = 25.0;
173 float kBeryliumSectionZmin = -25.0;
174
175 const float kBellowSectionOuterRadius = 2.15;
176 const float kCSideBPSOuterRadius = 2.22;
177 const float kCSideBPSWallThickness = 0.15;
178 const float kBellowSectionZmax = -55.35;
179 const float kBellowOuterRadius = 2.8;
180 const float kFirstConeAngle = 15. * TMath::DegToRad();
181 const float kChangeThicknessAngle = 45. * TMath::DegToRad();
182 const float kCSideBPSLength = 3.53;
183 const float kDzFirstCone = (kCSideBPSOuterRadius - kBeryliumSectionOuterRadius) / TMath::Tan(kFirstConeAngle);
184 const float kReduceThicknessPartAfterBPSLength = 1.52;
185 const float kThinPartBeforeBellowLength = 1.025;
186
187 const float kDistanceBetweenBellows = 2.5;
188
189 const float kAdaptConeZmax = -77.43;
190 const float kAdaptConeZmin = -80.6;
191 const float kAdaptConeRmax = 3.0;
192 const float kFlangeRmax = 4.3;
193 const float kFlangeLength = 1.4;
194
195 const float kBellowPlieRadius = 0.17; // radius of bellow plies
196 const float kBellowPlieThickness = 0.03; // Thickness of bellow plies 300 microns
197 const int kNBellowConvolutions = 7;
198
199 const float kZ1 = kBeryliumSectionZmin; // z of Be - Al jonction on the C-side
200 const float kZ2 = kBellowSectionZmax + kDzFirstCone; // z of end of small diameter part (beginning of first cone before the bellow
201 const float kZ3 = kBellowSectionZmax + (kCSideBPSOuterRadius - kBellowSectionOuterRadius) / TMath::Tan(kFirstConeAngle); // z of End of first cone part with 0.8mm thickness
202 const float kZ4 = kBellowSectionZmax; // z of End of first Cone
203 const float kZ5 = kBellowSectionZmax - kCSideBPSLength; // z of End of Beam Pipe support section
204 const float kZ6 = kBellowSectionZmax - kCSideBPSLength - (kCSideBPSOuterRadius - kBellowSectionOuterRadius) / TMath::Tan(kChangeThicknessAngle); // z of End of Beam Pipe support section after reduction of thickness
205 const float kZ7 = kZ6 - kReduceThicknessPartAfterBPSLength; // Z of end of 800 microns section after Beam Pipe Support
206 const float kZ8 = kZ7 - (kBeryliumSectionThickness - kBellowPlieThickness) / TMath::Tan(kChangeThicknessAngle);
207 const float kZ9 = kZ7 - kThinPartBeforeBellowLength; // Z of the start of first bellow
208 const float kFirstBellowZmax = kZ9;
209
210 //---------------- Be pipe around the IP ----------
211 TGeoTube* berylliumTube =
212 new TGeoTube("IP_PIPEsh", kBeryliumSectionOuterRadius - kBeryliumSectionThickness, kBeryliumSectionOuterRadius,
213 (kBeryliumSectionZmax - kBeryliumSectionZmin) / 2);
214 TGeoVolume* voberylliumTube = new TGeoVolume("IP_PIPE", berylliumTube, kMedBe);
215 voberylliumTube->SetLineColor(kRed);
216
217 TGeoTube* berylliumTubeVacuum =
218 new TGeoTube("IP_PIPEVACUUMsh", 0., kBeryliumSectionOuterRadius - kBeryliumSectionThickness,
219 (kBeryliumSectionZmax - kBeryliumSectionZmin) / 2);
220 TGeoVolume* voberylliumTubeVacuum = new TGeoVolume("IP_PIPEMOTHER", berylliumTubeVacuum, kMedVac);
221 voberylliumTubeVacuum->AddNode(voberylliumTube, 1, gGeoIdentity);
222 voberylliumTubeVacuum->SetVisibility(0);
223 voberylliumTubeVacuum->SetLineColor(kGreen);
224
225 beamPipeCsideSection->AddNode(voberylliumTubeVacuum, 1,
226 new TGeoTranslation(0., 0., (kBeryliumSectionZmax + kBeryliumSectionZmin) / 2));
227
228 //---------------- Al tube ------------------
229 TGeoPcon* aluBeforeBellows = new TGeoPcon(0., 360., 9);
230 aluBeforeBellows->DefineSection(0, kZ9, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
231 aluBeforeBellows->DefineSection(1, kZ8, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
232 aluBeforeBellows->DefineSection(2, kZ7, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius);
233 aluBeforeBellows->DefineSection(3, kZ6, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius);
234 aluBeforeBellows->DefineSection(4, kZ5, kCSideBPSOuterRadius - kCSideBPSWallThickness, kCSideBPSOuterRadius);
235 aluBeforeBellows->DefineSection(5, kZ4, kCSideBPSOuterRadius - kCSideBPSWallThickness, kCSideBPSOuterRadius);
236 aluBeforeBellows->DefineSection(6, kZ3, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius);
237 aluBeforeBellows->DefineSection(7, kZ2, kBeryliumSectionOuterRadius - kBeryliumSectionThickness, kBeryliumSectionOuterRadius);
238 aluBeforeBellows->DefineSection(8, kZ1, kBeryliumSectionOuterRadius - kBeryliumSectionThickness, kBeryliumSectionOuterRadius);
239 TGeoVolume* voaluBeforeBellows = new TGeoVolume("aluBeforeBellows", aluBeforeBellows, kMedAlu2219);
240 voaluBeforeBellows->SetLineColor(kBlue);
241 beamPipeCsideSection->AddNode(voaluBeforeBellows, 1, gGeoIdentity);
242
243 TGeoPcon* aluBeforeBellowsVacuum = new TGeoPcon(0., 360., 7);
244 aluBeforeBellowsVacuum->DefineSection(0, kZ9, 0., kBellowSectionOuterRadius - kBeryliumSectionThickness);
245 aluBeforeBellowsVacuum->DefineSection(1, kZ6, 0., kBellowSectionOuterRadius - kBeryliumSectionThickness);
246 aluBeforeBellowsVacuum->DefineSection(2, kZ5, 0., kCSideBPSOuterRadius - kCSideBPSWallThickness);
247 aluBeforeBellowsVacuum->DefineSection(3, kZ4, 0., kCSideBPSOuterRadius - kCSideBPSWallThickness);
248 aluBeforeBellowsVacuum->DefineSection(4, kZ3, 0., kBellowSectionOuterRadius - kBeryliumSectionThickness);
249 aluBeforeBellowsVacuum->DefineSection(5, kZ2, 0., kBeryliumSectionOuterRadius - kBeryliumSectionThickness);
250 aluBeforeBellowsVacuum->DefineSection(6, kZ1, 0., kBeryliumSectionOuterRadius - kBeryliumSectionThickness);
251 TGeoVolume* voaluBeforeBellowsVacuum = new TGeoVolume("aluBeforeBellowsVacuum", aluBeforeBellowsVacuum, kMedVac);
252 voaluBeforeBellowsVacuum->SetVisibility(1);
253 voaluBeforeBellowsVacuum->SetLineColor(kGreen);
254 voaluBeforeBellows->AddNode(voaluBeforeBellowsVacuum, 1, gGeoIdentity);
255 //-------------------------------------------------
256
257 float kBellowLength = kNBellowConvolutions * (4. * kBellowPlieRadius - 2. * kBellowPlieThickness);
258 // ------------------ First Bellow --------------------
259 TGeoVolume* vobellows1 =
260 makeBellowCside("bellows1", kNBellowConvolutions, kBellowSectionOuterRadius - kBeryliumSectionThickness,
261 kBellowOuterRadius, kBellowPlieRadius, kBellowPlieThickness);
262 beamPipeCsideSection->AddNode(
263 vobellows1, 1, new TGeoTranslation(0., 0., kFirstBellowZmax - kBellowLength / 2. - 2. * kBellowPlieRadius));
264 //------------------------------------------------------
265
266 const float kZ10 = kFirstBellowZmax - kBellowLength; // End of First bellow
267 const float kZ12 = kZ10 - kThinPartBeforeBellowLength;
268 const float kZ11 = kZ12 +
269 (kBeryliumSectionThickness - kBellowPlieThickness) /
270 TMath::Tan(kChangeThicknessAngle); // End of 300 microns thickness part after first bellow
271 const float kZ13 = kZ12 - kDistanceBetweenBellows;
272 const float kZ14 = kZ13 - (kBeryliumSectionThickness - kBellowPlieThickness) / TMath::Tan(kChangeThicknessAngle);
273 const float kZ15 = kZ14 - kThinPartBeforeBellowLength;
274 const float kSecondBellowZmax = kZ15;
275
276 //---------- Al tube between the bellows ----------
277 TGeoPcon* tube4 = new TGeoPcon(0., 360., 6);
278 tube4->DefineSection(0, kZ10, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
279 tube4->DefineSection(1, kZ11, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
280 tube4->DefineSection(2, kZ12, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius);
281 tube4->DefineSection(3, kZ13, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius);
282 tube4->DefineSection(4, kZ14, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
283 tube4->DefineSection(5, kZ15, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
284 TGeoVolume* votube4 = new TGeoVolume("votube4", tube4, kMedAlu2219);
285 votube4->SetLineColor(kBlue);
286 beamPipeCsideSection->AddNode(votube4, 1, gGeoIdentity);
287
288 TGeoTube* tube4Vacuum = new TGeoTube(0., kBellowSectionOuterRadius - kBeryliumSectionThickness, -(kZ15 - kZ10) / 2.);
289 TGeoVolume* votube4Vacuum = new TGeoVolume("tube4Vacuum", tube4Vacuum, kMedVac);
290 votube4Vacuum->SetVisibility(1);
291 votube4->AddNode(votube4Vacuum, 1, new TGeoTranslation(0., 0., (kZ10 + kZ15) / 2.));
292
293 // ------------------ Second Bellow --------------------
294 TGeoVolume* vobellows2 =
295 makeBellowCside("bellows2", kNBellowConvolutions, kBellowSectionOuterRadius - kBeryliumSectionThickness,
296 kBellowOuterRadius, kBellowPlieRadius, kBellowPlieThickness);
297 beamPipeCsideSection->AddNode(
298 vobellows2, 1, new TGeoTranslation(0., 0., kSecondBellowZmax - kBellowLength / 2. - 2. * kBellowPlieRadius));
299 // -----------------------------------------------------
300
301 const float kZ16 = kSecondBellowZmax - kBellowLength; // End of Second bellow
302 const float kZ18 = kZ16 - kThinPartBeforeBellowLength;
303 const float kZ17 = kZ18 +
304 (kBeryliumSectionThickness - kBellowPlieThickness) /
305 TMath::Tan(kChangeThicknessAngle); // End of 300 microns thickness part after first bellow
306 const float kZ19 = kAdaptConeZmax; // Start of the Adpation Cone
307 const float kZ20 = kAdaptConeZmin; // End of the Adpation Cone
308 const float kZ21 = kAdaptConeZmin - kFlangeLength; // End of the Flange
309
310 //----------- 15 deg Conical adaptator + flange ----------
311 TGeoPcon* adaptator = new TGeoPcon(0., 360., 7);
312 adaptator->DefineSection(0, kZ16, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
313 adaptator->DefineSection(1, kZ17, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius - kBeryliumSectionThickness + kBellowPlieThickness);
314 adaptator->DefineSection(2, kZ18, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius);
315 adaptator->DefineSection(3, kZ19, kBellowSectionOuterRadius - kBeryliumSectionThickness, kBellowSectionOuterRadius);
316 adaptator->DefineSection(4, kZ20, kBellowSectionOuterRadius - kBeryliumSectionThickness, kAdaptConeRmax);
317 adaptator->DefineSection(5, kZ20, kBellowSectionOuterRadius - kBeryliumSectionThickness, kFlangeRmax);
318 adaptator->DefineSection(6, kZ21, kBellowSectionOuterRadius - kBeryliumSectionThickness, kFlangeRmax);
319 TGeoVolume* voadaptator = new TGeoVolume("voadaptator", adaptator, kMedAlu2219);
320 voadaptator->SetLineColor(kBlue);
321 beamPipeCsideSection->AddNode(voadaptator, 1, gGeoIdentity);
322
323 TGeoPcon* adaptatorvide = new TGeoPcon(0., 360., 4);
324 adaptatorvide->DefineSection(0, kZ16, 0., kBellowSectionOuterRadius - kBeryliumSectionThickness);
325 adaptatorvide->DefineSection(1, kZ19, 0., kBellowSectionOuterRadius - kBeryliumSectionThickness);
326 adaptatorvide->DefineSection(2, kZ20, 0., kAdaptConeRmax - kBeryliumSectionThickness);
327 adaptatorvide->DefineSection(3, kZ21, 0., kAdaptConeRmax - kBeryliumSectionThickness);
328 TGeoVolume* voadaptatorvide = new TGeoVolume("voadaptatorvide", adaptatorvide, kMedVac);
329 voadaptatorvide->SetVisibility(1);
330 // voadaptatorvide->SetLineColor(kGreen);
331 voadaptator->AddNode(voadaptatorvide, 1, gGeoIdentity);
332 //------------------------------------------------------
333
334 barrel->AddNode(beamPipeCsideSection, 1, new TGeoTranslation(0., 30., 0.));
335
337 // Beam Pipe support F.M. 2021 rev 2023 //
339
340 // Beam Pipe Support
341 TGeoVolume* beamPipeSupport = new TGeoVolumeAssembly("BeamPipeSupport");
342 const float kBeamPipesupportZpos = kZ5;
343
344 // Dimensions :
345 const float kSupportXdim = 20.67;
346 const float kBeamPipeRingZdim = 3.6;
347 const float kVespelRmax = 2.3;
348 const float kVespelRmin = 2.22;
349 const float kBeampipeCarbonCollarRmin = 2.5;
350 const float kBeampipeCarbonCollarRmax = 2.7;
351 const float kFixationCarbonCollarRmin = 1.5;
352 const float kFixationCarbonCollarRmax = 1.7;
353 const float kFixationCarbonCollarDZ = 2.5;
354 const float kSkinThickness = 0.3;
355 const float kSkinXdim = 14.2;
356 const float kSkinYdim = 1.4;
357 const float kSkinZdim = kFixationCarbonCollarDZ;
358 const float kCarbonEarsXdim = 2.8;
359 const float kCarbonEarsYdimIn = 1.1;
360 const float kCarbonEarsYdimOut = 0.6;
361 const float kCarbonEarsZdim = kFixationCarbonCollarDZ;
362 const float kScrewDiameter = 0.4;
363 const float kScrewHeadHeight = 0.2;
364 const float kScrewHeadDiameter = 0.6;
365 const float kScrewPositionIn = 3.25;
366 const float kScrewPositionOut = 21.80;
367 const float kScrewThreadLength = 1.0;
368 const float holeSightDiameterOut = 0.60;
369 const float holeSightDiameterIn = 0.25;
370
371 // Support Bar
372 TGeoVolumeAssembly* supportBar = new TGeoVolumeAssembly("BPS_SupportBar");
373 TGeoBBox* carbonSkinBPS = new TGeoBBox("carbonSkinBPS", kSkinXdim / 2., kSkinYdim / 2., kSkinZdim / 2.);
374 TGeoBBox* foambarBPS = new TGeoBBox("foambarBPS", kSkinXdim / 2. - kSkinThickness, kSkinYdim / 2. - kSkinThickness,
375 kSkinZdim / 2. - kSkinThickness / 2.);
376 TGeoBBox* carbonEarsBPSin = new TGeoBBox("carbonEarsBPSin", kCarbonEarsXdim / 2., kCarbonEarsYdimIn / 2., kCarbonEarsZdim / 2.);
377 TGeoBBox* carbonEarsBPSout = new TGeoBBox("carbonEarsBPSout", kCarbonEarsXdim / 2., kCarbonEarsYdimOut / 2., kCarbonEarsZdim / 2.);
378
379 //===== building the main support bar in carbon ====
380 TGeoTranslation* tBP1 = new TGeoTranslation("tBP1", (kSkinXdim + kCarbonEarsXdim) / 2., -(kSkinYdim - kCarbonEarsYdimIn) / 2., 0.);
381 TGeoTranslation* tBP2 = new TGeoTranslation("tBP2", -(kSkinXdim + kCarbonEarsXdim) / 2., 0., 0.);
382 tBP1->RegisterYourself();
383 tBP2->RegisterYourself();
384
385 TGeoRotation* rotScrew = new TGeoRotation("rotScrew", 0., 90., 0.);
386 rotScrew->RegisterYourself();
387
388 TGeoTube* holeScrew = new TGeoTube("holeScrew", 0., kScrewDiameter / 2., kCarbonEarsYdimIn / 2. + 0.001);
389 TGeoTube* holeSight = new TGeoTube("holeSight", 0., holeSightDiameterOut / 2., kSkinZdim / 2. + 0.001);
390 TGeoTranslation* tHoleSight = new TGeoTranslation("tHoleSight", kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax - 6.55, 0., 0.);
391 tHoleSight->RegisterYourself();
392 double kXHoleIn = kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax - kScrewPositionIn;
393 double kXHoleOut = kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax - kScrewPositionOut;
394 TGeoCombiTrans* tHoleScrew1 = new TGeoCombiTrans("tHoleScrew1", kXHoleIn, -(kSkinYdim - kCarbonEarsYdimIn) / 2., -0.7, rotScrew);
395 TGeoCombiTrans* tHoleScrew2 = new TGeoCombiTrans("tHoleScrew2", kXHoleIn, -(kSkinYdim - kCarbonEarsYdimIn) / 2., 0.7, rotScrew);
396 TGeoCombiTrans* tHoleScrew3 = new TGeoCombiTrans("tHoleScrew3", kXHoleOut, -(kSkinYdim - kCarbonEarsYdimIn) / 2., -0.7, rotScrew);
397 TGeoCombiTrans* tHoleScrew4 = new TGeoCombiTrans("tHoleScrew4", kXHoleOut, -(kSkinYdim - kCarbonEarsYdimIn) / 2., 0.7, rotScrew);
398 tHoleScrew1->RegisterYourself();
399 tHoleScrew2->RegisterYourself();
400 tHoleScrew3->RegisterYourself();
401 tHoleScrew4->RegisterYourself();
402
403 TGeoCompositeShape* supportBarCarbon = new TGeoCompositeShape("BPS_supportBarCarbon", "(carbonSkinBPS-foambarBPS)+carbonEarsBPSin:tBP1-holeScrew:tHoleScrew1-holeScrew:tHoleScrew2+carbonEarsBPSout:tBP2-holeSight:tHoleSight-holeScrew:tHoleScrew3-holeScrew:tHoleScrew4");
404 TGeoVolume* supportBarCarbonVol = new TGeoVolume("BPS_supportBarCarbon", supportBarCarbon, kMedCarbonFiber);
405 supportBarCarbonVol->SetLineColor(kGray + 2);
406 supportBar->AddNode(supportBarCarbonVol, 1, new TGeoTranslation(-(kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax), 0, 0));
407 TGeoRotation* rotBar1 = new TGeoRotation("rotBar1", 0., 180., 180.);
408 rotBar1->RegisterYourself();
409 TGeoCombiTrans* transBar1 = new TGeoCombiTrans("transBar1", kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax, 0, 0, rotBar1);
410 transBar1->RegisterYourself();
411 supportBar->AddNode(supportBarCarbonVol, 2, transBar1);
412 //==================================================
413
414 //==== Adding the internal foam volumes ============
415 TGeoCompositeShape* foamVolume = new TGeoCompositeShape("foamVolume", "foambarBPS-holeSight:tHoleSight");
416 TGeoVolume* FoamVolume = new TGeoVolume("supportBarFoam", foamVolume, kMedRohacell);
417 FoamVolume->SetLineColor(kGreen);
418 TGeoRotation* rotBar2 = new TGeoRotation("rotBar2", 0., 0., 180.);
419 rotBar2->RegisterYourself();
420 TGeoCombiTrans* transBar2 = new TGeoCombiTrans("transBar2", kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax, 0, 0, rotBar2);
421 transBar2->RegisterYourself();
422 supportBar->AddNode(FoamVolume, 1, transBar1);
423 supportBar->AddNode(FoamVolume, 2, new TGeoTranslation(-(kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax), 0, 0));
424 //==================================================
425
426 //================= Screws ====================
427 TGeoVolumeAssembly* screw = new TGeoVolumeAssembly("screw");
428 TGeoTube* headScrew = new TGeoTube("headScrew", 0., kScrewHeadDiameter / 2., kScrewHeadHeight / 2.);
429 TGeoVolume* HeadScrew = new TGeoVolume("HeadScrew", headScrew, kMedTitanium);
430 HeadScrew->SetLineColor(kRed);
431 TGeoTube* threadScrew = new TGeoTube("threadScrew", 0., kScrewDiameter / 2., kCarbonEarsYdimIn / 2.);
432 TGeoVolume* ThreadScrew = new TGeoVolume("ThreadScrew", threadScrew, kMedTitanium);
433 ThreadScrew->SetLineColor(kRed);
434 screw->AddNode(HeadScrew, 1, new TGeoTranslation(0., 0., -(kCarbonEarsYdimIn + kScrewHeadHeight) / 2.));
435 screw->AddNode(ThreadScrew, 1);
436 TGeoCombiTrans* tScrew1 = new TGeoCombiTrans("transScrew1", kScrewPositionIn, (kCarbonEarsYdimIn - kSkinYdim) / 2., -0.7, rotScrew);
437 TGeoCombiTrans* tScrew2 = new TGeoCombiTrans("transScrew2", kScrewPositionIn, (kCarbonEarsYdimIn - kSkinYdim) / 2., 0.7, rotScrew);
438 TGeoCombiTrans* tScrew3 = new TGeoCombiTrans("transScrew3", -kScrewPositionIn, (kCarbonEarsYdimIn - kSkinYdim) / 2., -0.7, rotScrew);
439 TGeoCombiTrans* tScrew4 = new TGeoCombiTrans("transScrew4", -kScrewPositionIn, (kCarbonEarsYdimIn - kSkinYdim) / 2., 0.7, rotScrew);
440 tScrew1->RegisterYourself();
441 tScrew2->RegisterYourself();
442 tScrew3->RegisterYourself();
443 tScrew4->RegisterYourself();
444 supportBar->AddNode(screw, 1, tScrew1);
445 supportBar->AddNode(screw, 2, tScrew2);
446 supportBar->AddNode(screw, 3, tScrew3);
447 supportBar->AddNode(screw, 4, tScrew4);
448 //==============================================
449
450 // === Optical sights (assuming the same than the MFT ones) ===
451 TGeoVolumeAssembly* fixationSight = new TGeoVolumeAssembly("fixationSight");
452 TGeoTube* screwSight = new TGeoTube("screwSight", holeSightDiameterIn / 2., holeSightDiameterOut / 2., kScrewThreadLength / 2.);
453 TGeoVolume* ScrewSight = new TGeoVolume("ScrewSight", screwSight, kMedSteel);
454 ScrewSight->SetLineColor(kBlue);
455 double supportSightLength = 0.5;
456 TGeoTube* supportSight = new TGeoTube("supportSight", holeSightDiameterIn / 2., 1.4 / 2., supportSightLength / 2.);
457 TGeoVolume* SupportSight = new TGeoVolume("SupportSight", supportSight, kMedSteel);
458 SupportSight->SetLineColor(kBlue);
459 fixationSight->AddNode(ScrewSight, 1);
460 fixationSight->AddNode(SupportSight, 1, new TGeoTranslation(0., 0., (kScrewThreadLength + supportSightLength) / 2.));
461 SupportSight->SetVisibility(kTRUE);
462 fixationSight->SetVisibility(kTRUE);
463 TGeoTranslation* tSight1 = new TGeoTranslation("tSight1", 6.55, 0., (kSkinZdim - kScrewThreadLength) / 2.);
464 TGeoTranslation* tSight2 = new TGeoTranslation("tSight2", -6.55, 0., (kSkinZdim - kScrewThreadLength) / 2.);
465 tSight1->RegisterYourself();
466 tSight2->RegisterYourself();
467 supportBar->AddNode(fixationSight, 1, tSight1);
468 supportBar->AddNode(fixationSight, 2, tSight2);
469 // =====================
470
471 beamPipeSupport->AddNode(supportBar, 1);
472
473 //======================= Fixation to pipe ========================
474 TGeoTube* pipeSupportTubeCarbon = new TGeoTube(kBeampipeCarbonCollarRmin, kBeampipeCarbonCollarRmax, kFixationCarbonCollarDZ / 2.);
475 TGeoVolume* FixationToPipeVol = new TGeoVolume("FixationToPipe", pipeSupportTubeCarbon, kMedCarbonFiber);
476 FixationToPipeVol->SetLineColor(kGray + 2);
477 beamPipeSupport->AddNode(FixationToPipeVol, 1);
478 //==================================================================
479
480 //================ Beam Pipe Ring =================
481 TGeoVolumeAssembly* beamPipeRing = new TGeoVolumeAssembly("beamPipeRing");
482 TGeoTube* beamPipeRingCarbon = new TGeoTube(kVespelRmax, kBeampipeCarbonCollarRmin, kBeamPipeRingZdim / 2.);
483 TGeoVolume* beamPipeRingCarbonVol = new TGeoVolume("beamPipeRingCarbon", beamPipeRingCarbon, kMedCarbonFiber);
484 beamPipeRingCarbonVol->SetLineColor(kGray + 2);
485 beamPipeRing->AddNode(beamPipeRingCarbonVol, 1,
486 new TGeoTranslation(0., 0, (kBeamPipeRingZdim - kFixationCarbonCollarDZ) / 2.));
487 TGeoTube* beamPipeRingVespel = new TGeoTube(kVespelRmin, kVespelRmax, (kBeamPipeRingZdim + 0.4) / 2.);
488 TGeoVolume* beamPipeRingVespelVol = new TGeoVolume("beamPipeRingVespel", beamPipeRingVespel, kMedPolyimide);
489 beamPipeRingVespelVol->SetLineColor(kGreen + 2);
490 beamPipeRing->AddNode(beamPipeRingVespelVol, 1,
491 new TGeoTranslation(0., 0, (kBeamPipeRingZdim - kFixationCarbonCollarDZ) / 2.));
492 beamPipeSupport->AddNode(beamPipeRing, 1);
493 beamPipeSupport->SetVisibility(1);
494 beamPipeSupport->IsVisible();
495 //==================================================
496
497 //============ Wings (connecting the support bars to the cage support) ===============
498 TGeoVolumeAssembly* Wing = new TGeoVolumeAssembly("Wing");
499
500 // Tige
501 double lengthRod = 28.7 - 1.0 - 1.0 - 1.9; // sligtly decreased to accomodate to the fixation pieces
502 double diameterRod = 1.815; // sligtly increased to account of the two ends of the rod
503 double xRod = 22.1;
504 TGeoTube* Rod = new TGeoTube(0., diameterRod / 2., lengthRod / 2.);
505 TGeoVolume* rod = new TGeoVolume("rod", Rod, kMedAlu7075);
506 rod->SetLineColor(kGray);
507
508 // Connecteur Tige / Beam support
509 double lengthFixRod = 4.0;
510 double diameterFixRod = 3.0;
511 //---------------------------------------
512 TGeoTube* RodBracket = new TGeoTube("RodBracket", 0., diameterFixRod / 2., lengthFixRod / 2.);
513 TGeoBBox* BracketPlane = new TGeoBBox("BracketPlane", 3., 3., 3.);
514 TGeoTranslation* tBracketPlane = new TGeoTranslation("tBracketPlane", 0., 3. - kCarbonEarsYdimOut / 2., (lengthFixRod + 6.) / 2. - 2.6);
515 tBracketPlane->RegisterYourself();
516 TGeoCompositeShape* Bracket = new TGeoCompositeShape("Bracket", "RodBracket-BracketPlane:tBracketPlane");
517 TGeoVolume* bracket = new TGeoVolume("bracket", Bracket, kMedAlu7075);
518 //---------------------------------------
519
520 // Carbon box surrounding the aluminum rod
521 TGeoVolumeAssembly* carbonBox = new TGeoVolumeAssembly("carbonBox");
522 double eCarbonBox = 0.1;
523 double trdWidth = 8.6;
524 double trdLength = 11.05 - 1.0 - 0.6; // on each side to accomodate the bracket and TRDPlate
525 TGeoTrd1* trdOut = new TGeoTrd1("trdOut", 1.405 / 2, 6.632 / 2, trdLength / 2, trdWidth / 2);
526 TGeoTrd1* trdIn = new TGeoTrd1("trdIn", 1.405 / 2 - eCarbonBox, 6.632 / 2 - eCarbonBox, trdLength / 2 + eCarbonBox, trdWidth / 2 - eCarbonBox);
527 TGeoCompositeShape* trd = new TGeoCompositeShape("trd", "trdOut-trdIn");
528 TGeoVolume* TRD = new TGeoVolume("TRD", trd, kMedCarbonFiber);
529 TRD->SetLineColor(kGray);
530
531 // To close the carbon box
532 TGeoTrd1* trdPlate = new TGeoTrd1("trdPlate", 1.405 / 2, 6.632 / 2, 1.0 / 2, trdWidth / 2);
533 TGeoVolume* TRDPlate = new TGeoVolume("TDRPlate", trdPlate, kMedAlu7075);
534
535 // To connect on the main cage
536 TGeoBBox* plateBox = new TGeoBBox("plateBox", 7.5 / 2., 9.5 / 2., 1.9 / 2.);
537 TGeoBBox* removeBox = new TGeoBBox("removeBox", 2.1 / 2 + 0.0001, 2.5 / 2. + 0.0001, 1.9 / 2. + 0.0001);
538 TGeoTranslation* tRemove1 = new TGeoTranslation("tRemove1", (7.5 - 2.1) / 2, -(9.5 - 2.5) / 2, 0.);
539 TGeoTranslation* tRemove2 = new TGeoTranslation("tRemove2", -(7.5 - 2.1) / 2, -(9.5 - 2.5) / 2, 0.);
540 tRemove1->RegisterYourself();
541 tRemove2->RegisterYourself();
542
543 // Connectors Rod / Cage
544 TGeoCompositeShape* PlateBox = new TGeoCompositeShape("PlateBox", "plateBox-removeBox:tRemove1-removeBox:tRemove2");
545 TGeoVolume* PLATEBox = new TGeoVolume("PLATEBox", PlateBox, kMedAlu7075);
546
547 TGeoRotation* PlateRot = new TGeoRotation("PlateRot", 0., 0., 0.);
548 TGeoRotation* FrontRot = new TGeoRotation("FrontRot", 180., 90., 0.);
549 TGeoCombiTrans* tFrontCarbonBox = new TGeoCombiTrans("tFrontCarbonBox", 0., 0., 0., FrontRot);
550 PlateRot->RegisterYourself();
551 FrontRot->RegisterYourself();
552 tFrontCarbonBox->RegisterYourself();
553 TGeoCombiTrans* tTRDPlate = new TGeoCombiTrans("tTRDPlate", 0., 0., -(trdLength + 1.0) / 2, FrontRot);
554 tTRDPlate->RegisterYourself();
555 TRDPlate->SetLineColor(kGray + 2);
556 TGeoCombiTrans* tPlateBox = new TGeoCombiTrans("tPlateBox", 0., 0., -(trdLength + 1.9) / 2 - 1.0, PlateRot);
557 tPlateBox->RegisterYourself();
558 PLATEBox->SetLineColor(kGray);
559
560 double xyOut[16] = {0};
561 xyOut[0] = 3.316;
562 xyOut[1] = 4.3;
563 xyOut[2] = 0.7025;
564 xyOut[3] = -xyOut[1];
565 xyOut[4] = -xyOut[2];
566 xyOut[5] = -xyOut[1];
567 xyOut[6] = -xyOut[0];
568 xyOut[7] = xyOut[1];
569 //--------------
570 xyOut[8] = 1.3;
571 xyOut[9] = 1.3 - xyOut[1] + xyOut[8];
572 xyOut[10] = xyOut[8];
573 xyOut[11] = -xyOut[8] - xyOut[1] + xyOut[8];
574 xyOut[12] = -xyOut[8];
575 xyOut[13] = -xyOut[8] - xyOut[1] + xyOut[8];
576 xyOut[14] = -xyOut[8];
577 xyOut[15] = xyOut[8] - xyOut[1] + xyOut[8];
578 double ARB8Length = 15.35;
579 TGeoArb8* ARB8Out = new TGeoArb8("ARB8Out", ARB8Length / 2, xyOut);
580
581 double xyIn[16] = {0};
582 xyIn[0] = xyOut[0] - eCarbonBox;
583 xyIn[1] = xyOut[1] - eCarbonBox;
584 xyIn[2] = 0.7025 - eCarbonBox;
585 xyIn[3] = -xyIn[1];
586 xyIn[4] = -xyIn[2];
587 xyIn[5] = -xyIn[1];
588 xyIn[6] = -xyIn[0];
589 xyIn[7] = xyIn[1];
590 //--------------
591 xyIn[8] = xyOut[8] - eCarbonBox;
592 xyIn[9] = xyOut[8] - xyIn[1] + xyIn[8] - eCarbonBox;
593 xyIn[10] = xyIn[8];
594 xyIn[11] = -xyIn[8] - xyOut[1] + xyOut[8];
595 xyIn[12] = -xyIn[8];
596 xyIn[13] = -xyIn[8] - xyOut[1] + xyOut[8];
597 xyIn[14] = -xyIn[8];
598 xyIn[15] = xyIn[8] - xyOut[1] + xyOut[8];
599 TGeoArb8* ARB8In = new TGeoArb8("ARB8In", ARB8Length / 2 + 0.0001, xyIn);
600
601 TGeoCompositeShape* arb8 = new TGeoCompositeShape("arb8", "ARB8Out-ARB8In");
602 TGeoVolume* ARB8 = new TGeoVolume("ARB8", arb8, kMedCarbonFiber);
603 ARB8->SetLineColor(kGray);
604 TGeoRotation* RearRot = new TGeoRotation("RearRot", 0., 0., 0.);
605 TGeoCombiTrans* tRearCarbonBox = new TGeoCombiTrans("tRearCarbonBox", 0., 0., (ARB8Length + trdLength) / 2, RearRot);
606 RearRot->RegisterYourself();
607 tRearCarbonBox->RegisterYourself();
608 //===============================================================
609
610 carbonBox->AddNode(TRD, 1, tFrontCarbonBox);
611 carbonBox->AddNode(ARB8, 1, tRearCarbonBox);
612 carbonBox->AddNode(TRDPlate, 1, tTRDPlate);
613 carbonBox->AddNode(PLATEBox, 1, tPlateBox);
614
615 TGeoRotation* CarbonBoxRot1 = new TGeoRotation("CarbonBoxRot1", 90., 0., 0.);
616 double xCarbonBox = xRod + trdWidth / 2 - xyOut[8];
617 double zCarbonBox = -trdLength / 2 - ARB8Length - lengthFixRod + 1.3;
618 TGeoCombiTrans* tCarbonBox1 = new TGeoCombiTrans("tCarbonBox1", -xCarbonBox, 0., zCarbonBox, CarbonBoxRot1);
619 CarbonBoxRot1->RegisterYourself();
620 tCarbonBox1->RegisterYourself();
621 TGeoRotation* CarbonBoxRot2 = new TGeoRotation("CarbonBoxRot2", 270., 0., 0.);
622 TGeoCombiTrans* tCarbonBox2 = new TGeoCombiTrans("tCarbonBox2", xCarbonBox, 0., zCarbonBox, CarbonBoxRot2);
623 CarbonBoxRot2->RegisterYourself();
624 tCarbonBox2->RegisterYourself();
625
626 Wing->AddNode(rod, 1, new TGeoTranslation(xRod, 0., -(lengthRod / 2. + lengthFixRod) + 1.3));
627 Wing->AddNode(rod, 2, new TGeoTranslation(-xRod, 0., -(lengthRod / 2. + lengthFixRod) + 1.3));
628 bracket->SetLineColor(kGray);
629 Wing->AddNode(bracket, 1, new TGeoTranslation(xRod, 0., -lengthFixRod / 2. + 1.3));
630 Wing->AddNode(bracket, 2, new TGeoTranslation(-xRod, 0., -lengthFixRod / 2. + 1.3));
631 Wing->AddNode(carbonBox, 1, tCarbonBox1);
632 Wing->AddNode(carbonBox, 2, tCarbonBox2);
633
634 beamPipeSupport->AddNode(Wing, 1);
635 double mGlobalShift = 2.45; // to be closest to the first bellow according to Corrado blueprints
636 barrel->AddNode(beamPipeSupport, 1, new TGeoTranslation(0., 30, kBeamPipesupportZpos + kFixationCarbonCollarDZ / 2. - mGlobalShift));
637
639
641 // Side A section after Beryllium
642 // Authors: M.Sitta - 19 Sep 2014
643 // Drawings from C. Gargiulo :
644 // \\cern.ch\dfs\Workspaces\c\cgargiul\EXPERIMENT\ALICE\ALICE_MECHANICS\ALICE_DATA_PACKAGE\IN\DETECTORS\ITS_UPGRADE\1-DESIGN\0-IF_Control_Drawing\20140207_ICD_ITS_MFT_BP
646
647 float kConicalBerilliumMinThickness = 0.08;
648 float kConicalBerilliumMaxThickness = 0.1;
649 float kFlangeZ = 483.75;
650 float kFlangeWidth = 2.74;
651 float kFlangeThickness = 4.3;
652 float kConicalBerylliumEnd = 473.3;
653 float kSupport1 = 178.6;
654 float kSupport2 = 471.3;
655 float kSupportWidth = 5.25;
656 float kPipeRadiusAtSupport1 = 2.2;
657 float kConicalBePipeEndOuterRadius = 3.0;
658
659 TGeoPcon* tube0 = new TGeoPcon(0., 360., 5);
660 tube0->DefineSection(0, kFlangeZ - kFlangeWidth / 2, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness, kConicalBePipeEndOuterRadius);
661 tube0->DefineSection(1, kConicalBerylliumEnd, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness, kConicalBePipeEndOuterRadius);
662 tube0->DefineSection(2, kSupport1 + kSupportWidth, kPipeRadiusAtSupport1 - kConicalBerilliumMinThickness, kPipeRadiusAtSupport1);
663 tube0->DefineSection(3, kSupport1, kPipeRadiusAtSupport1 - kConicalBerilliumMinThickness, kPipeRadiusAtSupport1);
664 tube0->DefineSection(4, kBeryliumSectionZmax, kBeryliumSectionOuterRadius - kConicalBerilliumMinThickness, kBeryliumSectionOuterRadius); // need a transition to kConicalBerilliumMaxThickness
665
666 TGeoPcon* tube0vide = new TGeoPcon(0., 360., 5);
667 tube0vide->DefineSection(0, kFlangeZ - kFlangeWidth / 2, 0., kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness - 0.01);
668 tube0vide->DefineSection(1, kConicalBerylliumEnd, 0., kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness - 0.01);
669 tube0vide->DefineSection(2, kSupport1 + kSupportWidth, 0, kPipeRadiusAtSupport1 - kConicalBerilliumMinThickness - 0.01);
670 tube0vide->DefineSection(3, kSupport1, 0, kPipeRadiusAtSupport1 - kConicalBerilliumMinThickness - 0.01);
671 tube0vide->DefineSection(4, kBeryliumSectionZmax, 0., kBeryliumSectionOuterRadius - kConicalBerilliumMinThickness - 0.01);
672
673 TGeoVolume* votube0 = new TGeoVolume("votube0", tube0, kMedBe);
674 votube0->SetLineColor(kRed);
675 TGeoVolume* votube0vide = new TGeoVolume("votube0vide", tube0vide, kMedVac);
676 votube0vide->SetLineColor(kGreen);
677
678 barrel->AddNode(votube0, 1, new TGeoTranslation(0., 30., 0.));
679 barrel->AddNode(votube0vide, 1, new TGeoTranslation(0., 30., 0.));
680
681 TGeoVolume* beampipeSupportA1 = makeSupportBar("A1", kPipeRadiusAtSupport1 + 0.01, kPipeRadiusAtSupport1 + 0.38, 20.67, 14.25);
682 barrel->AddNode(beampipeSupportA1, 1, new TGeoTranslation(0., 30, kSupport1 + kSupportWidth / 2.));
683
684 // Length is approximate
685 TGeoVolume* beampipeSupportA2 = makeSupportBar("A2", kConicalBePipeEndOuterRadius, kConicalBePipeEndOuterRadius + 0.38, 44, 37.5);
686 barrel->AddNode(beampipeSupportA2, 1, new TGeoTranslation(0., 30, kConicalBerylliumEnd + kSupportWidth / 2.));
687
688 TGeoPcon* Bolt1 = new TGeoPcon(0., 360, 8);
689 Bolt1->DefineSection(0, 0, 0, 0.5);
690 Bolt1->DefineSection(1, 0.515 - 0.01, 0, 0.5);
691 Bolt1->DefineSection(2, 0.515 - 0.01, 0, 0.25);
692 Bolt1->DefineSection(3, kFlangeWidth + 0.515 + 0.01, 0, 0.25);
693 Bolt1->DefineSection(4, kFlangeWidth + 0.515 + 0.01, 0, 0.5);
694 Bolt1->DefineSection(5, kFlangeWidth + 0.515 + 0.55, 0, 0.5);
695 Bolt1->DefineSection(6, kFlangeWidth + 0.515 + 0.55, 0, 0.25);
696 Bolt1->DefineSection(7, kFlangeWidth + 0.515 + 0.55 + 0.5, 0, 0.25);
697 Bolt1->SetName("BOLT");
698
699 TGeoVolume* volBolt1 = new TGeoVolume("volBolt1", Bolt1, kMedTitanium);
700 volBolt1->SetLineWidth(2);
701 volBolt1->SetLineColor(kRed);
702
703 TGeoTranslation* t1 = new TGeoTranslation((kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), (kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
704 t1->SetName("t1");
705 t1->RegisterYourself();
706 TGeoTranslation* t2 = new TGeoTranslation((kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), (kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
707 t2->SetName("t2");
708 t2->RegisterYourself();
709 TGeoTranslation* t3 = new TGeoTranslation(-(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), (kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
710 t3->SetName("t3");
711 t3->RegisterYourself();
712 TGeoTranslation* t4 = new TGeoTranslation(-(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), (kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
713 t4->SetName("t4");
714 t4->RegisterYourself();
715 TGeoTranslation* t5 = new TGeoTranslation(-(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), -(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
716 t5->SetName("t5");
717 t5->RegisterYourself();
718 TGeoTranslation* t6 = new TGeoTranslation(-(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), -(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
719 t6->SetName("t6");
720 t6->RegisterYourself();
721 TGeoTranslation* t7 = new TGeoTranslation((kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), -(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
722 t7->SetName("t7");
723 t7->RegisterYourself();
724 TGeoTranslation* t8 = new TGeoTranslation((kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Cos(TMath::Pi() / 8), -(kConicalBePipeEndOuterRadius + (kFlangeThickness - kConicalBePipeEndOuterRadius) / 2) * TMath::Sin(TMath::Pi() / 8), kFlangeZ - kFlangeWidth / 2 - 0.515);
725 t8->SetName("t8");
726 t8->RegisterYourself();
727
728 TGeoVolumeAssembly* Bolts = new TGeoVolumeAssembly("Bolts");
729 Bolts->AddNode(volBolt1, 1, t1);
730 Bolts->AddNode(volBolt1, 2, t2);
731 Bolts->AddNode(volBolt1, 3, t3);
732 Bolts->AddNode(volBolt1, 4, t4);
733 Bolts->AddNode(volBolt1, 5, t5);
734 Bolts->AddNode(volBolt1, 6, t6);
735 Bolts->AddNode(volBolt1, 7, t7);
736 Bolts->AddNode(volBolt1, 8, t8);
737
738 barrel->AddNode(Bolts, 1, new TGeoTranslation(0., 30., 0.));
739
740 TGeoTranslation* Tflange = new TGeoTranslation(0, 0, kFlangeZ);
741 Tflange->SetName("Tflange");
742 Tflange->RegisterYourself();
743
744 // Flange
745 TGeoTube* flange = new TGeoTube("voFlangeA1", kConicalBePipeEndOuterRadius + 0.01, kFlangeThickness, kFlangeWidth / 2.);
746
747 TGeoPcon* HoleF = new TGeoPcon("HoleF", 0., 360., 2);
748 HoleF->DefineSection(0, 0., 0, 0.25 + 0.01);
749 HoleF->DefineSection(1, 4.305, 0, 0.25 + 0.01);
750
751 // create the flange with holes for the titanium bolts
752 TGeoCompositeShape* FlangeWithHoles = new TGeoCompositeShape("voFlangeWithHoles", "((voFlangeA1:Tflange)-((voFlangeA1:Tflange)*(HoleF:t1+HoleF:t2+HoleF:t3+HoleF:t4+HoleF:t5+HoleF:t6+HoleF:t7+HoleF:t8)))");
753
754 TGeoVolume* volflange = new TGeoVolume("voFlangeHoles", FlangeWithHoles, kMedAlBe);
755 volflange->SetLineWidth(2);
756 volflange->SetLineColor(kGray);
757
758 barrel->AddNode(volflange, 1, new TGeoTranslation(0., 30., 0.));
759
760 TGeoPcon* pipeSamell = new TGeoPcon(0., 360., 2);
761 pipeSamell->DefineSection(0, kFlangeZ + kFlangeWidth / 2, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness, kConicalBePipeEndOuterRadius);
762 pipeSamell->DefineSection(1, kFlangeZ + 5.13 + 0.435 + 0.4 + 0.08, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness, kConicalBePipeEndOuterRadius);
763 pipeSamell->SetName("pipeSamell");
764
765 TGeoVolume* VolpipeSmall = new TGeoVolume("voPipeSmallVac", pipeSamell, kMedAlu2219);
766 VolpipeSmall->SetLineWidth(2);
767 barrel->AddNode(VolpipeSmall, 1, new TGeoTranslation(0., 30., 0.));
768
769 TGeoPcon* pipeSmallVac = new TGeoPcon(0., 360., 2);
770 pipeSmallVac->DefineSection(0, kFlangeZ + kFlangeWidth / 2, 0, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness - 0.01);
771 pipeSmallVac->DefineSection(1, kFlangeZ + 5.13 + 0.435 + 0.4 + 0.08, 0, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness - 0.01);
772 TGeoVolume* vopipeSmallVac = new TGeoVolume("voPipeSmallVac", pipeSmallVac, kMedVac);
773 vopipeSmallVac->SetLineColor(kGreen);
774
775 barrel->AddNode(vopipeSmallVac, 1, new TGeoTranslation(0., 30., 0.));
776
777 // -- Bellows on A side
778 // float plieradius = (3.72 + (2. * 7 - 2.) * 0.03) / (4. * 7); // radius of bellows "plis"
779 float plieradiusA = 0.2; // radius of bellow plies
780
781 // ------------------ First Bellow --------------------
782 // Inner: 3.0 cm, outer 3.97 cm length 8.47 cm with 10 wiggles
783 // check meaning of dU ; it is probably the total length, see also below
784 TGeoVolume* vobellows1A = makeBellow("bellows1A", 10, 3.0, 3.97, 8.47, plieradiusA, 0.03);
785 // Z position is rough for now.
786 barrel->AddNode(vobellows1A, 1, new TGeoTranslation(0., 30., kFlangeZ + 10));
787 // Comments: removing 1/2 plie (see makeBellow): 0.31= 2*0.17-0.03 and 0.08: free space
788
789 // ------------------ Outer pipe after flange --------------------
790 TGeoPcon* pipeOut = new TGeoPcon(0., 360., 2);
791 pipeOut->DefineSection(0, kFlangeZ + 13.6 - 0.08, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness, kConicalBePipeEndOuterRadius);
792 pipeOut->DefineSection(1, 714.6, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness, kConicalBePipeEndOuterRadius);
793
794 TGeoVolume* OuterPIPE = new TGeoVolume("pipeOut", pipeOut, kMedAlu2219);
795 barrel->AddNode(OuterPIPE, 1, new TGeoTranslation(0., 30., 0.));
796
797 // The end of the barrel volume is at 714.6 cm, after that we start with RB24 volume
798 TGeoPcon* pipeOutVac = new TGeoPcon(0., 360., 2);
799 pipeOutVac->DefineSection(0, kFlangeZ + 13.6 - 0.08, 0, kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness);
800 pipeOutVac->DefineSection(1, 714.6, 0., kConicalBePipeEndOuterRadius - kConicalBerilliumMaxThickness);
801
802 TGeoVolume* OuterPIPEVac = new TGeoVolume("pipeOutVac", pipeOutVac, kMedAlu2219);
803 barrel->AddNode(OuterPIPEVac, 1, new TGeoTranslation(0., 30., 0.));
804
805 //-------------------------------------------------
806
808 // //
809 // RB24/1 //
810 // //
812 //
813 //
814 // Drawing LHCVC2U_0001
815 // Copper Tube RB24/1 393.5 cm
816 // Warm module VMACA 18.0 cm
817 // Annular Ion Pump 35.0 cm
818 // Valve 7.5 cm
819 // Warm module VMABC 28.0 cm
820 // ================================
821 // 462.0 cm
822 //
823
824 // Copper Tube RB24/1
825 const float kRB24CuTubeL = 381.5;
826 const float kRB24cCuTubeL = 155.775 + (28.375 - 18.135);
827 const float kRB24bCuTubeL = kRB24CuTubeL - kRB24cCuTubeL;
828 const float kRB24CuTubeRi = 5.8 / 2.;
829 const float kRB24CuTubeRo = 6.0 / 2.;
830 const float kRB24CuTubeFRo = 7.6;
831 const float kRB24CuTubeFL = 1.86;
832 const float kRB24CL = 2. * 597.9;
833
834 //
835 // introduce cut at end of barrel 714.6m
836 //
837 // outside barrel
838 TGeoVolume* voRB24cCuTubeM = new TGeoVolume("voRB24cCuTubeM", new TGeoTube(0., kRB24CuTubeRi, kRB24cCuTubeL / 2.), kMedVacNFHC);
839 TGeoVolume* voRB24cCuTube = new TGeoVolume("voRB24cCuTube", new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB24cCuTubeL / 2.), kMedAlu2219);
840 voRB24cCuTubeM->AddNode(voRB24cCuTube, 1, gGeoIdentity);
841
842 // Air outside tube with higher transport cuts
843 TGeoVolume* voRB24CuTubeA = new TGeoVolume("voRB24CuTubeA", new TGeoTube(80., 81., kRB24bCuTubeL / 2.), kMedAirHigh);
844 voRB24CuTubeA->SetVisibility(0);
845
846 // Simplified DN 100 Flange
847 TGeoVolume* voRB24CuTubeF = new TGeoVolume("voRB24CuTubeF", new TGeoTube(kRB24CuTubeRo, kRB24CuTubeFRo, kRB24CuTubeFL / 2.), kMedSteelNF);
848
849 // Warm Module Type VMACA
850 // LHCVMACA_0002
851 //
852 // Pos 1 Warm Bellows DN100 LHCVBU__0012
853 // Pos 2 RF Contact D80 LHCVSR__0005
854 // Pos 3 Trans. Tube Flange LHCVSR__0065
855 // [Pos 4 Hex. Countersunk Screw Bossard BN4719]
856 // [Pos 5 Tension spring LHCVSR__0011]
857 //
858 //
859 //
860 // Pos1 Warm Bellows DN100
861 // Pos1.1 Bellows LHCVBU__0006
862 //
863 //
864 // Connection Tubes
865 // Connection tube inner r
866 const float kRB24B1ConTubeRin = 10.0 / 2.;
867 // Connection tube outer r
868 const float kRB24B1ConTubeRou = 10.3 / 2.;
869 // Connection tube length
870 const float kRB24B1ConTubeL = 2.5;
871 //
872 const float kRB24B1CompL = 16.375; // Length of the compensator
873 const float kRB24B1BellowRi = 10.25 / 2.; // Bellow inner radius
874 const float kRB24B1BellowRo = 11.40 / 2.; // Bellow outer radius
875 const int kRB24B1NumberOfPlies = 27; // Number of plies
876 const float kRB24B1BellowUndL = 11.00; // Length of undulated region
877 const float kRB24B1PlieThickness = 0.015; // Plie thickness
878
879 const float kRB24B1PlieRadius =
880 (kRB24B1BellowUndL + (2. * kRB24B1NumberOfPlies - 2.) * kRB24B1PlieThickness) / (4. * kRB24B1NumberOfPlies);
881
882 const float kRB24B1ProtTubeThickness = 0.02; // Thickness of the protection tube
883 const float kRB24B1ProtTubeLength = 4.2; // Length of the protection tube
884
885 const float kRB24B1RFlangeL = 1.86; // Length of the flanges
886 const float kRB24B1RFlangeLO = 0.26; // Flange overlap
887 const float kRB24B1RFlangeRO = 11.18 / 2; // Inner radius at Flange overlap
888 const float kRB24B1RFlangeRou = 15.20 / 2.; // Outer radius of flange
889 const float kRB24B1RFlangeRecess = 0.98; // Flange recess
890 const float kRB24B1L = kRB24B1CompL + 2. * (kRB24B1RFlangeL - kRB24B1RFlangeRecess);
891
893 //
894 // Bellow Section
895 TGeoVolume* voRB24B1Bellow = makeBellow("RB24B1", kRB24B1NumberOfPlies, kRB24B1BellowRi, kRB24B1BellowRo,
896 kRB24B1BellowUndL, kRB24B1PlieRadius, kRB24B1PlieThickness);
897 voRB24B1Bellow->SetVisibility(0);
898 float newRB24B1BellowUndL = 2 * (static_cast<TGeoTube*>(voRB24B1Bellow->GetShape()))->GetDz();
899
900 //
901 // Bellow mother volume
902 TGeoPcon* shRB24B1BellowM = new TGeoPcon(0., 360., 12);
903 // Connection Tube and Flange
904 z = 0.;
905 shRB24B1BellowM->DefineSection(0, z, 0., kRB24B1RFlangeRou);
906 z += kRB24B1RFlangeLO;
907 shRB24B1BellowM->DefineSection(1, z, 0., kRB24B1RFlangeRou);
908 z = kRB24B1RFlangeL;
909 shRB24B1BellowM->DefineSection(2, z, 0., kRB24B1RFlangeRou);
910 shRB24B1BellowM->DefineSection(3, z, 0., kRB24B1ConTubeRou);
911 z = kRB24B1ConTubeL + kRB24B1RFlangeL - kRB24B1RFlangeRecess;
912 shRB24B1BellowM->DefineSection(4, z, 0., kRB24B1ConTubeRou);
913 // Plie
914 shRB24B1BellowM->DefineSection(5, z, 0., kRB24B1BellowRo + kRB24B1ProtTubeThickness);
915 z += newRB24B1BellowUndL;
916 shRB24B1BellowM->DefineSection(6, z, 0., kRB24B1BellowRo + kRB24B1ProtTubeThickness);
917 shRB24B1BellowM->DefineSection(7, z, 0., kRB24B1ConTubeRou);
918 // Connection Tube and Flange
919 z = kRB24B1L - shRB24B1BellowM->GetZ(3);
920 shRB24B1BellowM->DefineSection(8, z, 0., kRB24B1ConTubeRou);
921 shRB24B1BellowM->DefineSection(9, z, 0., kRB24B1RFlangeRou);
922 z = kRB24B1L - shRB24B1BellowM->GetZ(1);
923 shRB24B1BellowM->DefineSection(10, z, 0., kRB24B1RFlangeRou);
924 z = kRB24B1L - shRB24B1BellowM->GetZ(0);
925 shRB24B1BellowM->DefineSection(11, z, 0., kRB24B1RFlangeRou);
926
927 TGeoVolume* voRB24B1BellowM = new TGeoVolume("RB24B1BellowM", shRB24B1BellowM, kMedVacNF);
928 voRB24B1BellowM->SetVisibility(0);
929 //
930 // End Parts (connection tube)
931 TGeoVolume* voRB24B1CT = new TGeoVolume("RB24B1CT", new TGeoTube(kRB24B1ConTubeRin, kRB24B1ConTubeRou, kRB24B1ConTubeL / 2.), kMedSteelNF);
932 //
933 // Protection Tube
934 TGeoVolume* voRB24B1PT = new TGeoVolume(
935 "RB24B1PT", new TGeoTube(kRB24B1BellowRo, kRB24B1BellowRo + kRB24B1ProtTubeThickness, kRB24B1ProtTubeLength / 2.),
936 kMedSteelNF);
937
938 z = kRB24B1ConTubeL / 2. + (kRB24B1RFlangeL - kRB24B1RFlangeRecess);
939
940 voRB24B1BellowM->AddNode(voRB24B1CT, 1, new TGeoTranslation(0., 0., z));
941 z += (kRB24B1ConTubeL / 2. + newRB24B1BellowUndL / 2.);
942 voRB24B1BellowM->AddNode(voRB24B1Bellow, 1, new TGeoTranslation(0., 0., z));
943 z += (newRB24B1BellowUndL / 2. + kRB24B1ConTubeL / 2);
944 voRB24B1BellowM->AddNode(voRB24B1CT, 2, new TGeoTranslation(0., 0., z));
945 z = kRB24B1ConTubeL + kRB24B1ProtTubeLength / 2. + 1. + kRB24B1RFlangeLO;
946 voRB24B1BellowM->AddNode(voRB24B1PT, 1, new TGeoTranslation(0., 0., z));
947 z += kRB24B1ProtTubeLength + 0.6;
948 voRB24B1BellowM->AddNode(voRB24B1PT, 2, new TGeoTranslation(0., 0., z));
949
950 // Pos 1/2 Rotatable Flange LHCVBU__0013
951 // Pos 1/3 Flange DN100/103 LHCVBU__0018
952 // The two flanges can be represented by the same volume
953 // Outer Radius (including the outer movable ring).
954 // The inner ring has a diameter of 12.04 cm
955
956 TGeoPcon* shRB24B1RFlange = new TGeoPcon(0., 360., 10);
957 z = 0.;
958 shRB24B1RFlange->DefineSection(0, z, 10.30 / 2., kRB24B1RFlangeRou);
959 z += 0.55; // 5.5 mm added for outer ring
960 z += 0.43;
961 shRB24B1RFlange->DefineSection(1, z, 10.30 / 2., kRB24B1RFlangeRou);
962 shRB24B1RFlange->DefineSection(2, z, 10.06 / 2., kRB24B1RFlangeRou);
963 z += 0.15;
964 shRB24B1RFlange->DefineSection(3, z, 10.06 / 2., kRB24B1RFlangeRou);
965 // In reality this part is rounded
966 shRB24B1RFlange->DefineSection(4, z, 10.91 / 2., kRB24B1RFlangeRou);
967 z += 0.15;
968 shRB24B1RFlange->DefineSection(5, z, 10.91 / 2., kRB24B1RFlangeRou);
969 shRB24B1RFlange->DefineSection(6, z, 10.06 / 2., kRB24B1RFlangeRou);
970 z += 0.32;
971 shRB24B1RFlange->DefineSection(7, z, 10.06 / 2., kRB24B1RFlangeRou);
972 shRB24B1RFlange->DefineSection(8, z, kRB24B1RFlangeRO, kRB24B1RFlangeRou);
973 z += kRB24B1RFlangeLO;
974 shRB24B1RFlange->DefineSection(9, z, kRB24B1RFlangeRO, kRB24B1RFlangeRou);
975
976 TGeoVolume* voRB24B1RFlange = new TGeoVolume("RB24B1RFlange", shRB24B1RFlange, kMedSteelNF);
977
978 z = kRB24B1L - kRB24B1RFlangeL;
979 voRB24B1BellowM->AddNode(voRB24B1RFlange, 1, new TGeoTranslation(0., 0., z));
980 z = kRB24B1RFlangeL;
981 voRB24B1BellowM->AddNode(voRB24B1RFlange, 2, new TGeoCombiTrans(0., 0., z, rot180));
982 //
983 // Pos 2 RF Contact D80 LHCVSR__0005
984 //
985 // Pos 2.1 RF Contact Flange LHCVSR__0003
986 //
987 TGeoPcon* shRB24B1RCTFlange = new TGeoPcon(0., 360., 6);
988 const float kRB24B1RCTFlangeRin = 8.06 / 2. + 0.05; // Inner radius
989 const float kRB24B1RCTFlangeL = 1.45; // Length
990
991 z = 0.;
992 shRB24B1RCTFlange->DefineSection(0, z, kRB24B1RCTFlangeRin, 8.20 / 2.);
993 z += 0.15;
994 shRB24B1RCTFlange->DefineSection(1, z, kRB24B1RCTFlangeRin, 8.20 / 2.);
995 shRB24B1RCTFlange->DefineSection(2, z, kRB24B1RCTFlangeRin, 8.60 / 2.);
996 z += 1.05;
997 shRB24B1RCTFlange->DefineSection(3, z, kRB24B1RCTFlangeRin, 8.60 / 2.);
998 shRB24B1RCTFlange->DefineSection(4, z, kRB24B1RCTFlangeRin, 11.16 / 2.);
999 z += 0.25;
1000 shRB24B1RCTFlange->DefineSection(5, z, kRB24B1RCTFlangeRin, 11.16 / 2.);
1001 TGeoVolume* voRB24B1RCTFlange = new TGeoVolume("RB24B1RCTFlange", shRB24B1RCTFlange, kMedCuNF);
1002 z = kRB24B1L - kRB24B1RCTFlangeL;
1003
1004 voRB24B1BellowM->AddNode(voRB24B1RCTFlange, 1, new TGeoTranslation(0., 0., z));
1005 //
1006 // Pos 2.2 RF-Contact LHCVSR__0004
1007 //
1008 TGeoPcon* shRB24B1RCT = new TGeoPcon(0., 360., 3);
1009 const float kRB24B1RCTRin = 8.00 / 2.; // Inner radius
1010 const float kRB24B1RCTCRin = 8.99 / 2.; // Max. inner radius conical section
1011 const float kRB24B1RCTL = 11.78; // Length
1012 const float kRB24B1RCTSL = 10.48; // Length of straight section
1013 const float kRB24B1RCTd = 0.03; // Thickness
1014
1015 z = 0;
1016 shRB24B1RCT->DefineSection(0, z, kRB24B1RCTCRin, kRB24B1RCTCRin + kRB24B1RCTd);
1017 z = kRB24B1RCTL - kRB24B1RCTSL;
1018 // In the (VSR0004) this section is straight in (LHCVC2U_0001) it is conical ????
1019 shRB24B1RCT->DefineSection(1, z, kRB24B1RCTRin + 0.35, kRB24B1RCTRin + 0.35 + kRB24B1RCTd);
1020 z = kRB24B1RCTL - 0.03;
1021 shRB24B1RCT->DefineSection(2, z, kRB24B1RCTRin, kRB24B1RCTRin + kRB24B1RCTd);
1022
1023 TGeoVolume* voRB24B1RCT = new TGeoVolume("RB24B1RCT", shRB24B1RCT, kMedCuNF);
1024 z = kRB24B1L - kRB24B1RCTL - 0.45;
1025 voRB24B1BellowM->AddNode(voRB24B1RCT, 1, new TGeoTranslation(0., 0., z));
1026
1027 //
1028 // Pos 3 Trans. Tube Flange LHCVSR__0065
1029 //
1030 // Pos 3.1 Transition Tube D53 LHCVSR__0064
1031 // Pos 3.2 Transition Flange LHCVSR__0060
1032 // Pos 3.3 Transition Tube LHCVSR__0058
1033 TGeoPcon* shRB24B1TTF = new TGeoPcon(0., 360., 7);
1034 // Flange
1035 z = 0.;
1036 shRB24B1TTF->DefineSection(0, z, 6.30 / 2., 11.16 / 2.);
1037 z += 0.25;
1038 shRB24B1TTF->DefineSection(1, z, 6.30 / 2., 11.16 / 2.);
1039 shRB24B1TTF->DefineSection(2, z, 6.30 / 2., 9.3 / 2.);
1040 z += 0.55;
1041 shRB24B1TTF->DefineSection(3, z, 6.30 / 2., 9.3 / 2.);
1042 // Tube
1043 shRB24B1TTF->DefineSection(4, z, 6.30 / 2., 6.7 / 2.);
1044 z += 5.80;
1045 shRB24B1TTF->DefineSection(5, z, 6.30 / 2., 6.7 / 2.);
1046 // Transition Tube
1047 z += 3.75;
1048 shRB24B1TTF->DefineSection(6, z, 8.05 / 2., 8.45 / 2.);
1049 TGeoVolume* voRB24B1TTF = new TGeoVolume("RB24B1TTF", shRB24B1TTF, kMedSteelNF);
1050 z = 0.;
1051 voRB24B1BellowM->AddNode(voRB24B1TTF, 1, new TGeoTranslation(0., 0., z));
1052
1053 // Annular Ion Pump
1054 // LHCVC2U_0003
1055 //
1056 // Pos 1 Rotable Flange LHCVFX__0031
1057 // Pos 2 RF Screen Tube LHCVC2U_0005
1058 // Pos 3 Shell LHCVC2U_0007
1059 // Pos 4 Extruded Shell LHCVC2U_0006
1060 // Pos 5 Feedthrough Tube LHCVC2U_0004
1061 // Pos 6 Tubulated Flange STDVFUHV0021
1062 // Pos 7 Fixed Flange LHCVFX__0032
1063 // Pos 8 Pumping Elements
1064
1065 //
1066 // Pos 1 Rotable Flange LHCVFX__0031
1067 // pos 7 Fixed Flange LHCVFX__0032
1068 //
1069 // Mother volume
1070
1071 //
1072 // Length 35 cm
1073 // Flange 2 x 1.98 = 3.96
1074 // Tube = 32.84
1075 //==========================
1076 // 36.80
1077 // Overlap 2 * 0.90 = 1.80
1078
1079 const float kRB24IpRFD1 = 0.68; // Length of section 1
1080 const float kRB24IpRFD2 = 0.30; // Length of section 2
1081 const float kRB24IpRFD3 = 0.10; // Length of section 3
1082 const float kRB24IpRFD4 = 0.35; // Length of section 4
1083 const float kRB24IpRFD5 = 0.55; // Length of section 5
1084
1085 const float kRB24IpRFRo = 15.20 / 2.; // Flange outer radius
1086 const float kRB24IpRFRi1 = 6.30 / 2.; // Flange inner radius section 1
1087 const float kRB24IpRFRi2 = 6.00 / 2.; // Flange inner radius section 2
1088 const float kRB24IpRFRi3 = 5.84 / 2.; // Flange inner radius section 3
1089 const float kRB24IpRFRi4 = 6.00 / 2.; // Flange inner radius section 1
1090 const float kRB24IpRFRi5 = 10.50 / 2.; // Flange inner radius section 2
1091
1092 TGeoPcon* shRB24IpRF = new TGeoPcon(0., 360., 9);
1093 z0 = 0.;
1094 shRB24IpRF->DefineSection(0, z0, kRB24IpRFRi1, kRB24IpRFRo);
1095 z0 += kRB24IpRFD1;
1096 shRB24IpRF->DefineSection(1, z0, kRB24IpRFRi2, kRB24IpRFRo);
1097 z0 += kRB24IpRFD2;
1098 shRB24IpRF->DefineSection(2, z0, kRB24IpRFRi2, kRB24IpRFRo);
1099 shRB24IpRF->DefineSection(3, z0, kRB24IpRFRi3, kRB24IpRFRo);
1100 z0 += kRB24IpRFD3;
1101 shRB24IpRF->DefineSection(4, z0, kRB24IpRFRi3, kRB24IpRFRo);
1102 shRB24IpRF->DefineSection(5, z0, kRB24IpRFRi4, kRB24IpRFRo);
1103 z0 += kRB24IpRFD4;
1104 shRB24IpRF->DefineSection(6, z0, kRB24IpRFRi4, kRB24IpRFRo);
1105 shRB24IpRF->DefineSection(7, z0, kRB24IpRFRi5, kRB24IpRFRo);
1106 z0 += kRB24IpRFD5;
1107 shRB24IpRF->DefineSection(8, z0, kRB24IpRFRi5, kRB24IpRFRo);
1108
1109 TGeoVolume* voRB24IpRF = new TGeoVolume("RB24IpRF", shRB24IpRF, kMedSteel);
1110
1111 //
1112 // Pos 2 RF Screen Tube LHCVC2U_0005
1113 //
1114
1115 //
1116 // Tube
1117 float kRB24IpSTTL = 32.84; // Total length of the tube
1118 float kRB24IpSTTRi = 5.80 / 2.; // Inner Radius
1119 float kRB24IpSTTRo = 6.00 / 2.; // Outer Radius
1120 TGeoVolume* voRB24IpSTT = new TGeoVolume("RB24IpSTT", new TGeoTube(kRB24IpSTTRi, kRB24IpSTTRo, kRB24IpSTTL / 2.), kMedSteelNF);
1121 // Screen
1122 float kRB24IpSTCL = 0.4; // Lenth of the crochet detail
1123 // Length of the screen
1124 float kRB24IpSTSL = 9.00 - 2. * kRB24IpSTCL;
1125 // Rel. position of the screen
1126 float kRB24IpSTSZ = 7.00 + kRB24IpSTCL;
1127 TGeoVolume* voRB24IpSTS = new TGeoVolume("RB24IpSTS", new TGeoTube(kRB24IpSTTRi, kRB24IpSTTRo, kRB24IpSTSL / 2.), kMedSteelNF);
1128 //
1129 voRB24IpSTT->AddNode(voRB24IpSTS, 1, new TGeoTranslation(0., 0., kRB24IpSTSZ - kRB24IpSTTL / 2. + kRB24IpSTSL / 2.));
1130
1131 // Crochets
1132 // Inner radius
1133 float kRB24IpSTCRi = kRB24IpSTTRo + 0.25;
1134 // Outer radius
1135 float kRB24IpSTCRo = kRB24IpSTTRo + 0.35;
1136 // Length of 1stsection
1137 float kRB24IpSTCL1 = 0.15;
1138 // Length of 2nd section
1139 float kRB24IpSTCL2 = 0.15;
1140 // Length of 3rd section
1141 float kRB24IpSTCL3 = 0.10;
1142 // Rel. position of 1st Crochet
1143
1144 TGeoPcon* shRB24IpSTC = new TGeoPcon(0., 360., 5);
1145 z0 = 0;
1146 shRB24IpSTC->DefineSection(0, z0, kRB24IpSTCRi, kRB24IpSTCRo);
1147 z0 += kRB24IpSTCL1;
1148 shRB24IpSTC->DefineSection(1, z0, kRB24IpSTCRi, kRB24IpSTCRo);
1149 shRB24IpSTC->DefineSection(2, z0, kRB24IpSTTRo, kRB24IpSTCRo);
1150 z0 += kRB24IpSTCL2;
1151 shRB24IpSTC->DefineSection(3, z0, kRB24IpSTTRo, kRB24IpSTCRo);
1152 z0 += kRB24IpSTCL3;
1153 shRB24IpSTC->DefineSection(4, z0, kRB24IpSTTRo, kRB24IpSTTRo + 0.001);
1154 TGeoVolume* voRB24IpSTC = new TGeoVolume("RB24IpSTC", shRB24IpSTC, kMedSteel);
1155
1156 // Pos 3 Shell LHCVC2U_0007
1157 // Pos 4 Extruded Shell LHCVC2U_0006
1158 float kRB24IpShellL = 4.45; // Length of the Shell
1159 float kRB24IpShellD = 0.10; // Wall thickness of the shell
1160 float kRB24IpShellCTRi = 6.70 / 2.; // Inner radius of the connection tube
1161 float kRB24IpShellCTL = 1.56; // Length of the connection tube
1162 float kRB24IpShellCARi = 17.80 / 2.; // Inner radius of the cavity
1163 float kRB24IpShellCCRo = 18.20 / 2.; // Inner radius at the centre
1164
1165 TGeoPcon* shRB24IpShell = new TGeoPcon(0., 360., 7);
1166 z0 = 0;
1167 shRB24IpShell->DefineSection(0, z0, kRB24IpShellCTRi, kRB24IpShellCTRi + kRB24IpShellD);
1168 z0 += kRB24IpShellCTL;
1169 shRB24IpShell->DefineSection(1, z0, kRB24IpShellCTRi, kRB24IpShellCTRi + kRB24IpShellD);
1170 shRB24IpShell->DefineSection(2, z0, kRB24IpShellCTRi, kRB24IpShellCARi + kRB24IpShellD);
1171 z0 += kRB24IpShellD;
1172 shRB24IpShell->DefineSection(3, z0, kRB24IpShellCARi, kRB24IpShellCARi + kRB24IpShellD);
1173 z0 = kRB24IpShellL - kRB24IpShellD;
1174 shRB24IpShell->DefineSection(4, z0, kRB24IpShellCARi, kRB24IpShellCARi + kRB24IpShellD);
1175 shRB24IpShell->DefineSection(5, z0, kRB24IpShellCARi, kRB24IpShellCCRo);
1176 z0 = kRB24IpShellL;
1177 shRB24IpShell->DefineSection(6, z0, kRB24IpShellCARi, kRB24IpShellCCRo);
1178 TGeoVolume* voRB24IpShell = new TGeoVolume("RB24IpShell", shRB24IpShell, kMedSteel);
1179
1180 TGeoPcon* shRB24IpShellM = makeMotherFromTemplate(shRB24IpShell, 0, 6, kRB24IpShellCTRi, 13);
1181
1182 for (int i = 0; i < 6; i++) {
1183 z = 2. * kRB24IpShellL - shRB24IpShellM->GetZ(5 - i);
1184 float rmin = shRB24IpShellM->GetRmin(5 - i);
1185 float rmax = shRB24IpShellM->GetRmax(5 - i);
1186 shRB24IpShellM->DefineSection(7 + i, z, rmin, rmax);
1187 }
1188
1189 TGeoVolume* voRB24IpShellM = new TGeoVolume("RB24IpShellM", shRB24IpShellM, kMedVac);
1190 voRB24IpShellM->SetVisibility(0);
1191 voRB24IpShellM->AddNode(voRB24IpShell, 1, gGeoIdentity);
1192 voRB24IpShellM->AddNode(voRB24IpShell, 2, new TGeoCombiTrans(0., 0., 2. * kRB24IpShellL, rot180));
1193 //
1194 // Pos 8 Pumping Elements
1195 //
1196 // Anode array
1197 TGeoVolume* voRB24IpPE = new TGeoVolume("voRB24IpPE", new TGeoTube(0.9, 1., 2.54 / 2.), kMedSteel);
1198 float kRB24IpPEAR = 5.5;
1199
1200 for (int i = 0; i < 15; i++) {
1201 float phi = float(i) * 24.;
1202 float x = kRB24IpPEAR * TMath::Cos(kDegRad * phi);
1203 float y = kRB24IpPEAR * TMath::Sin(kDegRad * phi);
1204 voRB24IpShellM->AddNode(voRB24IpPE, i + 1, new TGeoTranslation(x, y, kRB24IpShellL));
1205 }
1206
1207 //
1208 // Warm Module Type VMABC
1209 // LHCVMABC_0002
1210 //
1211 //
1212 //
1213 // Flange 1.00
1214 // Central Piece 11.50
1215 // Bellow 14.50
1216 // End Flange 1.00
1217 //===================================
1218 // Total 28.00
1219 //
1220 // Pos 1 Warm Bellows DN100 LHCVBU__0016
1221 // Pos 2 Trans. Tube Flange LHCVSR__0062
1222 // Pos 3 RF Contact D63 LHCVSR__0057
1223 // [Pos 4 Hex. Countersunk Screw Bossard BN4719]
1224 // [Pos 5 Tension spring LHCVSR__00239]
1225 //
1226
1227 // Pos 1 Warm Bellows DN100 LHCVBU__0016
1228 // Pos 1.1 Right Body 2 Ports with Support LHCVBU__0014
1229 //
1230 // Tube 1
1231 const float kRB24VMABCRBT1Ri = 10.0 / 2.;
1232 const float kRB24VMABCRBT1Ro = 10.3 / 2.;
1233 const float kRB24VMABCRBT1L = 11.5;
1234 const float kRB24VMABCRBT1L2 = 8.;
1235 const float kRB24VMABCL = 28.375;
1236
1237 TGeoTube* shRB24VMABCRBT1 = new TGeoTube(kRB24VMABCRBT1Ri, kRB24VMABCRBT1Ro, kRB24VMABCRBT1L / 2.);
1238 shRB24VMABCRBT1->SetName("RB24VMABCRBT1");
1239 TGeoTube* shRB24VMABCRBT1o = new TGeoTube(0., kRB24VMABCRBT1Ro, kRB24VMABCRBT1L / 2.);
1240 shRB24VMABCRBT1o->SetName("RB24VMABCRBT1o");
1241 TGeoTube* shRB24VMABCRBT1o2 = new TGeoTube(0., kRB24VMABCRBT1Ro + 0.3, kRB24VMABCRBT1L / 2.);
1242 shRB24VMABCRBT1o2->SetName("RB24VMABCRBT1o2");
1243 // Lower inforcement
1244 TGeoVolume* voRB24VMABCRBT12 = new TGeoVolume(
1245 "RB24VMABCRBT12", new TGeoTubeSeg(kRB24VMABCRBT1Ro, kRB24VMABCRBT1Ro + 0.3, kRB24VMABCRBT1L2 / 2., 220., 320.),
1246 kMedSteelNF);
1247 //
1248 // Tube 2
1249 const float kRB24VMABCRBT2Ri = 6.0 / 2.;
1250 const float kRB24VMABCRBT2Ro = 6.3 / 2.;
1251 const float kRB24VMABCRBF2Ro = 11.4 / 2.;
1252 const float kRB24VMABCRBT2L = 5.95 + 2.; // 2. cm added for welding
1253 const float kRB24VMABCRBF2L = 1.75;
1254 TGeoTube* shRB24VMABCRBT2 = new TGeoTube(kRB24VMABCRBT2Ri, kRB24VMABCRBT2Ro, kRB24VMABCRBT2L / 2.);
1255 shRB24VMABCRBT2->SetName("RB24VMABCRBT2");
1256 TGeoTube* shRB24VMABCRBT2i = new TGeoTube(0., kRB24VMABCRBT2Ri, kRB24VMABCRBT2L / 2. + 2.);
1257 shRB24VMABCRBT2i->SetName("RB24VMABCRBT2i");
1258 TGeoCombiTrans* tRBT2 = new TGeoCombiTrans(-11.5 + kRB24VMABCRBT2L / 2., 0., 7.2 - kRB24VMABCRBT1L / 2., rotxz);
1259 tRBT2->SetName("tRBT2");
1260 tRBT2->RegisterYourself();
1261 TGeoCompositeShape* shRB24VMABCRBT2c = new TGeoCompositeShape("shRB24VMABCRBT2c", "RB24VMABCRBT2:tRBT2-RB24VMABCRBT1o");
1262 TGeoVolume* voRB24VMABCRBT2 = new TGeoVolume("shRB24VMABCRBT2", shRB24VMABCRBT2c, kMedSteelNF);
1263 // Flange
1264 // Pos 1.4 Flange DN63 LHCVBU__0008
1265 TGeoVolume* voRB24VMABCRBF2 =
1266 new TGeoVolume("RB24VMABCRBF2", new TGeoTube(kRB24VMABCRBT2Ro, kRB24VMABCRBF2Ro, kRB24VMABCRBF2L / 2.), kMedSteelNF);
1267 // DN63 Blank Flange (my best guess)
1268 TGeoVolume* voRB24VMABCRBF2B = new TGeoVolume("RB24VMABCRBF2B", new TGeoTube(0., kRB24VMABCRBF2Ro, kRB24VMABCRBF2L / 2.), kMedSteelNF);
1269 //
1270 // Tube 3
1271 const float kRB24VMABCRBT3Ri = 3.5 / 2.;
1272 const float kRB24VMABCRBT3Ro = 3.8 / 2.;
1273 const float kRB24VMABCRBF3Ro = 7.0 / 2.;
1274 const float kRB24VMABCRBT3L = 4.95 + 2.; // 2. cm added for welding
1275 const float kRB24VMABCRBF3L = 1.27;
1276 TGeoTube* shRB24VMABCRBT3 = new TGeoTube(kRB24VMABCRBT3Ri, kRB24VMABCRBT3Ro, kRB24VMABCRBT3L / 2);
1277 shRB24VMABCRBT3->SetName("RB24VMABCRBT3");
1278 TGeoTube* shRB24VMABCRBT3i = new TGeoTube(0., kRB24VMABCRBT3Ri, kRB24VMABCRBT3L / 2. + 2.);
1279 shRB24VMABCRBT3i->SetName("RB24VMABCRBT3i");
1280 TGeoCombiTrans* tRBT3 = new TGeoCombiTrans(0., 10.5 - kRB24VMABCRBT3L / 2., 7.2 - kRB24VMABCRBT1L / 2., rotyz);
1281 tRBT3->SetName("tRBT3");
1282 tRBT3->RegisterYourself();
1283 TGeoCompositeShape* shRB24VMABCRBT3c =
1284 new TGeoCompositeShape("shRB24VMABCRBT3c", "RB24VMABCRBT3:tRBT3-RB24VMABCRBT1o");
1285 TGeoVolume* voRB24VMABCRBT3 = new TGeoVolume("shRB24VMABCRBT3", shRB24VMABCRBT3c, kMedSteel);
1286 // Flange
1287 // Pos 1.4 Flange DN35 LHCVBU__0007
1288 TGeoVolume* voRB24VMABCRBF3 = new TGeoVolume("RB24VMABCRBF3", new TGeoTube(kRB24VMABCRBT3Ro, kRB24VMABCRBF3Ro, kRB24VMABCRBF3L / 2.), kMedSteelNF);
1289 //
1290 // Tube 4
1291 const float kRB24VMABCRBT4Ri = 6.0 / 2.;
1292 const float kRB24VMABCRBT4Ro = 6.4 / 2.;
1293 const float kRB24VMABCRBT4L = 6.6;
1294 TGeoTube* shRB24VMABCRBT4 = new TGeoTube(kRB24VMABCRBT4Ri, kRB24VMABCRBT4Ro, kRB24VMABCRBT4L / 2.);
1295 shRB24VMABCRBT4->SetName("RB24VMABCRBT4");
1296 TGeoCombiTrans* tRBT4 = new TGeoCombiTrans(0., -11. + kRB24VMABCRBT4L / 2., 7.2 - kRB24VMABCRBT1L / 2., rotyz);
1297 tRBT4->SetName("tRBT4");
1298 tRBT4->RegisterYourself();
1299 TGeoCompositeShape* shRB24VMABCRBT4c =
1300 new TGeoCompositeShape("shRB24VMABCRBT4c", "RB24VMABCRBT4:tRBT4-RB24VMABCRBT1o2");
1301 TGeoVolume* voRB24VMABCRBT4 = new TGeoVolume("shRB24VMABCRBT4", shRB24VMABCRBT4c, kMedSteelNF);
1302 TGeoCompositeShape* shRB24VMABCRB =
1303 new TGeoCompositeShape("shRB24VMABCRB", "RB24VMABCRBT1-(RB24VMABCRBT2i:tRBT2+RB24VMABCRBT3i:tRBT3)");
1304 TGeoVolume* voRB24VMABCRBI = new TGeoVolume("RB24VMABCRBI", shRB24VMABCRB, kMedSteelNF);
1305 //
1306 // Plate
1307 const float kRB24VMABCRBBx = 16.0;
1308 const float kRB24VMABCRBBy = 1.5;
1309 const float kRB24VMABCRBBz = 15.0;
1310
1311 // Relative position of tubes
1312 const float kRB24VMABCTz = 7.2;
1313 // Relative position of plate
1314 const float kRB24VMABCPz = 3.6;
1315 const float kRB24VMABCPy = -12.5;
1316
1317 TGeoVolume* voRB24VMABCRBP = new TGeoVolume(
1318 "RB24VMABCRBP", new TGeoBBox(kRB24VMABCRBBx / 2., kRB24VMABCRBBy / 2., kRB24VMABCRBBz / 2.), kMedSteelNF);
1319 //
1320 // Pirani Gauge (my best guess)
1321 //
1322 TGeoPcon* shRB24VMABCPirani = new TGeoPcon(0., 360., 15);
1323 // DN35/16 Coupling
1324 z = 0;
1325 shRB24VMABCPirani->DefineSection(0, z, 0.8, kRB24VMABCRBF3Ro);
1326 z += kRB24VMABCRBF3L; // 1.3
1327 shRB24VMABCPirani->DefineSection(1, z, 0.8, kRB24VMABCRBF3Ro);
1328 shRB24VMABCPirani->DefineSection(2, z, 0.8, 1.0);
1329 // Pipe
1330 z += 2.8;
1331 shRB24VMABCPirani->DefineSection(3, z, 0.8, 1.0);
1332 // Flange
1333 shRB24VMABCPirani->DefineSection(4, z, 0.8, 1.75);
1334 z += 1.6;
1335 shRB24VMABCPirani->DefineSection(5, z, 0.8, 1.75);
1336 shRB24VMABCPirani->DefineSection(6, z, 0.8, 1.0);
1337 z += 5.2;
1338 shRB24VMABCPirani->DefineSection(7, z, 0.8, 1.0);
1339 shRB24VMABCPirani->DefineSection(8, z, 0.8, 2.5);
1340 z += 2.0;
1341 shRB24VMABCPirani->DefineSection(9, z, 0.80, 2.50);
1342 shRB24VMABCPirani->DefineSection(10, z, 1.55, 1.75);
1343 z += 5.7;
1344 shRB24VMABCPirani->DefineSection(11, z, 1.55, 1.75);
1345 shRB24VMABCPirani->DefineSection(11, z, 0.00, 1.75);
1346 z += 0.2;
1347 shRB24VMABCPirani->DefineSection(12, z, 0.00, 1.75);
1348 shRB24VMABCPirani->DefineSection(13, z, 0.00, 0.75);
1349 z += 0.5;
1350 shRB24VMABCPirani->DefineSection(14, z, 0.00, 0.75);
1351 TGeoVolume* voRB24VMABCPirani = new TGeoVolume("RB24VMABCPirani", shRB24VMABCPirani, kMedSteelNF);
1352 //
1353 //
1354 //
1355
1356 //
1357 // Positioning of elements
1358 TGeoVolumeAssembly* voRB24VMABCRB = new TGeoVolumeAssembly("RB24VMABCRB");
1359 //
1360 voRB24VMABCRB->AddNode(voRB24VMABCRBI, 1, gGeoIdentity);
1361 // Plate
1362 voRB24VMABCRB->AddNode(voRB24VMABCRBP, 1,
1363 new TGeoTranslation(0., kRB24VMABCPy + kRB24VMABCRBBy / 2.,
1364 kRB24VMABCRBBz / 2. - kRB24VMABCRBT1L / 2. + kRB24VMABCPz));
1365 // Tube 2
1366 voRB24VMABCRB->AddNode(voRB24VMABCRBT2, 1, gGeoIdentity);
1367 // Flange Tube 2
1368 voRB24VMABCRB->AddNode(voRB24VMABCRBF2, 1, new TGeoCombiTrans(kRB24VMABCPy + kRB24VMABCRBF2L / 2., 0., kRB24VMABCTz - kRB24VMABCRBT1L / 2., rotxz));
1369 // Blank Flange Tube 2
1370 voRB24VMABCRB->AddNode(voRB24VMABCRBF2B, 1, new TGeoCombiTrans(kRB24VMABCPy - kRB24VMABCRBF2L / 2., 0., kRB24VMABCTz - kRB24VMABCRBT1L / 2., rotxz));
1371 // Tube 3
1372 voRB24VMABCRB->AddNode(voRB24VMABCRBT3, 1, gGeoIdentity);
1373 // Flange Tube 3
1374 voRB24VMABCRB->AddNode(voRB24VMABCRBF3, 1, new TGeoCombiTrans(0., 11.2 - kRB24VMABCRBF3L / 2., kRB24VMABCTz - kRB24VMABCRBT1L / 2., rotyz));
1375 // Pirani Gauge
1376 voRB24VMABCRB->AddNode(voRB24VMABCPirani, 1, new TGeoCombiTrans(0., 11.2, kRB24VMABCTz - kRB24VMABCRBT1L / 2., rotyz));
1377 // Tube 4
1378 voRB24VMABCRB->AddNode(voRB24VMABCRBT4, 1, gGeoIdentity);
1379 // Inforcement
1380 voRB24VMABCRB->AddNode(voRB24VMABCRBT12, 1, new TGeoTranslation(0., 0., kRB24VMABCRBT1L2 / 2. - kRB24VMABCRBT1L / 2. + 2.8));
1381
1382 // Pos 1.3 Bellows with end part LHCVBU__0002
1383 //
1384 // Connection Tube
1385 // Connection tube inner r
1386 const float kRB24VMABBEConTubeRin = 10.0 / 2.;
1387 // Connection tube outer r
1388 const float kRB24VMABBEConTubeRou = 10.3 / 2.;
1389 // Connection tube length
1390 const float kRB24VMABBEConTubeL1 = 0.9;
1391 const float kRB24VMABBEConTubeL2 = 2.6;
1392
1393 // Mother volume
1394 TGeoPcon* shRB24VMABBEBellowM = new TGeoPcon(0., 360., 6);
1395 // Connection Tube and Flange
1396 z = 0.;
1397 shRB24VMABBEBellowM->DefineSection(0, z, kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou);
1398 z += kRB24VMABBEConTubeL1;
1399 shRB24VMABBEBellowM->DefineSection(1, z, kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou);
1400 shRB24VMABBEBellowM->DefineSection(2, z, kRB24B1BellowRi, kRB24B1BellowRo + kRB24B1ProtTubeThickness);
1401 z += newRB24B1BellowUndL;
1402 shRB24VMABBEBellowM->DefineSection(3, z, kRB24B1BellowRi, kRB24B1BellowRo + kRB24B1ProtTubeThickness);
1403 shRB24VMABBEBellowM->DefineSection(4, z, kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou);
1404 z += kRB24VMABBEConTubeL2;
1405 shRB24VMABBEBellowM->DefineSection(5, z, kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou);
1406 TGeoVolume* voRB24VMABBEBellowM = new TGeoVolume("RB24VMABBEBellowM", shRB24VMABBEBellowM, kMedVacNF);
1407 voRB24VMABBEBellowM->SetVisibility(0);
1408
1409 // Connection tube left
1410 TGeoVolume* voRB24VMABBECT1 = new TGeoVolume(
1411 "RB24VMABBECT1", new TGeoTube(kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou, kRB24VMABBEConTubeL1 / 2.), kMedSteelNF);
1412 // Connection tube right
1413 TGeoVolume* voRB24VMABBECT2 = new TGeoVolume(
1414 "RB24VMABBECT2", new TGeoTube(kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou, kRB24VMABBEConTubeL2 / 2.), kMedSteelNF);
1415 z = kRB24VMABBEConTubeL1 / 2.;
1416 voRB24VMABBEBellowM->AddNode(voRB24VMABBECT1, 1, new TGeoTranslation(0., 0., z));
1417 z += kRB24VMABBEConTubeL1 / 2.;
1418 z += newRB24B1BellowUndL / 2.;
1419 voRB24VMABBEBellowM->AddNode(voRB24B1Bellow, 2, new TGeoTranslation(0., 0., z));
1420 z += newRB24B1BellowUndL / 2.;
1421 z += kRB24VMABBEConTubeL2 / 2.;
1422 voRB24VMABBEBellowM->AddNode(voRB24VMABBECT2, 1, new TGeoTranslation(0., 0., z));
1423 z += kRB24VMABBEConTubeL2 / 2.;
1424
1425 voRB24VMABCRB->AddNode(voRB24VMABBEBellowM, 1, new TGeoTranslation(0., 0., kRB24VMABCRBT1L / 2.));
1426
1427 // Pos 1.2 Rotable flange LHCVBU__0013[*]
1428 // Front
1429 voRB24VMABCRB->AddNode(voRB24B1RFlange, 3, new TGeoCombiTrans(0., 0., -kRB24VMABCRBT1L / 2. + 0.86, rot180));
1430 // End
1431 z = kRB24VMABCRBT1L / 2. + newRB24B1BellowUndL + kRB24VMABBEConTubeL1 + kRB24VMABBEConTubeL2;
1432 voRB24VMABCRB->AddNode(voRB24B1RFlange, 4, new TGeoTranslation(0., 0., z - 0.86));
1433
1434 // Pos 2 Trans. Tube Flange LHCVSR__0062
1435 // Pos 2.1 Transition Tube LHCVSR__0063
1436 // Pos 2.2 Transition Flange LHCVSR__0060
1437 //
1438 // Transition Tube with Flange
1439 TGeoPcon* shRB24VMABCTT = new TGeoPcon(0., 360., 7);
1440 z = 0.;
1441 shRB24VMABCTT->DefineSection(0, z, 6.3 / 2., 11.16 / 2.);
1442 z += 0.25;
1443 shRB24VMABCTT->DefineSection(1, z, 6.3 / 2., 11.16 / 2.);
1444 shRB24VMABCTT->DefineSection(2, z, 6.3 / 2., 9.30 / 2.);
1445 z += 0.25;
1446 shRB24VMABCTT->DefineSection(3, z, 6.3 / 2., 9.30 / 2.);
1447 shRB24VMABCTT->DefineSection(4, z, 6.3 / 2., 6.70 / 2.);
1448 z += (20.35 - 0.63);
1449 shRB24VMABCTT->DefineSection(5, z, 6.3 / 2., 6.7 / 2.);
1450 z += 0.63;
1451 shRB24VMABCTT->DefineSection(6, z, 6.3 / 2., 6.7 / 2.);
1452 TGeoVolume* voRB24VMABCTT = new TGeoVolume("RB24VMABCTT", shRB24VMABCTT, kMedSteelNF);
1453 voRB24VMABCRB->AddNode(voRB24VMABCTT, 1, new TGeoTranslation(0., 0., -kRB24VMABCRBT1L / 2. - 1.));
1454
1455 // Pos 3 RF Contact D63 LHCVSR__0057
1456 // Pos 3.1 RF Contact Flange LHCVSR__0017
1457 //
1458 TGeoPcon* shRB24VMABCCTFlange = new TGeoPcon(0., 360., 6);
1459 const float kRB24VMABCCTFlangeRin = 6.36 / 2.; // Inner radius
1460 const float kRB24VMABCCTFlangeL = 1.30; // Length
1461
1462 z = 0.;
1463 shRB24VMABCCTFlange->DefineSection(0, z, kRB24VMABCCTFlangeRin, 6.5 / 2.);
1464 z += 0.15;
1465 shRB24VMABCCTFlange->DefineSection(1, z, kRB24VMABCCTFlangeRin, 6.5 / 2.);
1466 shRB24VMABCCTFlange->DefineSection(2, z, kRB24VMABCCTFlangeRin, 6.9 / 2.);
1467 z += 0.9;
1468 shRB24VMABCCTFlange->DefineSection(3, z, kRB24VMABCCTFlangeRin, 6.9 / 2.);
1469 shRB24VMABCCTFlange->DefineSection(4, z, kRB24VMABCCTFlangeRin, 11.16 / 2.);
1470 z += 0.25;
1471 shRB24VMABCCTFlange->DefineSection(5, z, kRB24VMABCCTFlangeRin, 11.16 / 2.);
1472 TGeoVolume* voRB24VMABCCTFlange = new TGeoVolume("RB24VMABCCTFlange", shRB24VMABCCTFlange, kMedCuNF);
1473 //
1474 // Pos 3.2 RF-Contact LHCVSR__0056
1475 //
1476 TGeoPcon* shRB24VMABCCT = new TGeoPcon(0., 360., 4);
1477 const float kRB24VMABCCTRin = 6.30 / 2.; // Inner radius
1478 const float kRB24VMABCCTCRin = 7.29 / 2.; // Max. inner radius conical section
1479 const float kRB24VMABCCTL = 11.88; // Length
1480 const float kRB24VMABCCTSL = 10.48; // Length of straight section
1481 const float kRB24VMABCCTd = 0.03; // Thickness
1482 z = 0;
1483 shRB24VMABCCT->DefineSection(0, z, kRB24VMABCCTCRin, kRB24VMABCCTCRin + kRB24VMABCCTd);
1484 z = kRB24VMABCCTL - kRB24VMABCCTSL;
1485 shRB24VMABCCT->DefineSection(1, z, kRB24VMABCCTRin + 0.35, kRB24VMABCCTRin + 0.35 + kRB24VMABCCTd);
1486 z = kRB24VMABCCTL - kRB24VMABCCTFlangeL;
1487 shRB24VMABCCT->DefineSection(2, z, kRB24VMABCCTRin, kRB24VMABCCTRin + kRB24VMABCCTd);
1488 z = kRB24VMABCCTL;
1489 shRB24VMABCCT->DefineSection(3, z, kRB24VMABCCTRin, kRB24VMABCCTRin + kRB24VMABCCTd);
1490
1491 TGeoVolume* voRB24VMABCCT = new TGeoVolume("RB24VMABCCT", shRB24VMABCCT, kMedCuNF);
1492
1493 TGeoVolumeAssembly* voRB24VMABRFCT = new TGeoVolumeAssembly("RB24VMABRFCT");
1494 voRB24VMABRFCT->AddNode(voRB24VMABCCT, 1, gGeoIdentity);
1495 voRB24VMABRFCT->AddNode(voRB24VMABCCTFlange, 1, new TGeoTranslation(0., 0., kRB24VMABCCTL - kRB24VMABCCTFlangeL));
1496
1497 z = kRB24VMABCRBT1L / 2. + newRB24B1BellowUndL + kRB24VMABBEConTubeL1 + kRB24VMABBEConTubeL2 - kRB24VMABCCTL + 1.;
1498 voRB24VMABCRB->AddNode(voRB24VMABRFCT, 1, new TGeoTranslation(0., 0., z));
1499
1500 //
1501 // Assembling RB24/1
1502 //
1503
1504 // part which is placed in the cave
1505 // ->
1506 TGeoVolumeAssembly* voRB24C = new TGeoVolumeAssembly("RB24C");
1507 voRB24C->AddNode(voRB24cCuTubeM, 1, gGeoIdentity);
1508 z = -kRB24cCuTubeL / 2 + kRB24CuTubeFL / 2.;
1509 voRB24C->AddNode(voRB24CuTubeF, 1, new TGeoTranslation(0., 0., z));
1510 // VMABC close to compensator magnet
1511 // z = -kRB24cCuTubeL / 2. - (kRB24VMABCL - kRB24VMABCRBT1L / 2) + 1.;
1512 // voRB24C->AddNode(voRB24VMABCRB, 2, new TGeoTranslation(0., 0., z));
1513 z = -kRB24cCuTubeL / 2. - kRB24B1L;
1514 voRB24C->AddNode(voRB24B1BellowM, 2, new TGeoTranslation(0., 0., z));
1515
1516 // <-
1517
1518 //
1519 // RB24/2
1520 //
1521 // Copper Tube RB24/2
1522 // mainly inside the compensator magnet
1523 const float kRB242CuTubeL = 350.0;
1524 // 20 cm straight - 20 cm transition to final oval - 270 oval - 20 cm transition to final oval - 20 cm straight
1525 //
1526 // mother volume for transition region
1527 TGeoVolume* voRB242CuOvTransMo = new TGeoVolume("voRB24CuOvTransMo", new TGeoTube(0., 4.75, 10.), kMedAir);
1528 const int nTrans = 10;
1529 TGeoVolume* voRB242CuOvTransV[nTrans];
1530 TGeoVolume* voRB242CuOvTransI[nTrans];
1531 float dovX = 4.;
1532 float dovY = 4.;
1533 float dovZ = -9.0;
1534 for (int i = 0; i < nTrans; i++) {
1535 dovX -= 0.0625;
1536 dovY += 0.075;
1537 char vname[20];
1538 snprintf(vname, 20, "voRB242CuOvTransV%d", i);
1539 voRB242CuOvTransV[i] = new TGeoVolume(vname, new TGeoEltu(dovX, dovY, 1.0), kMedCuHC);
1540 snprintf(vname, 20, "voRB242CuOvTransI%d", i);
1541 voRB242CuOvTransI[i] = new TGeoVolume(vname, new TGeoEltu(dovX - 0.2, dovY - 0.2, 1.0), kMedVacHC);
1542 voRB242CuOvTransV[i]->AddNode(voRB242CuOvTransI[i], 1, gGeoIdentity);
1543 voRB242CuOvTransMo->AddNode(voRB242CuOvTransV[i], 1, new TGeoTranslation(0., 0., dovZ));
1544 dovZ += 2.;
1545 }
1546 //
1547 TGeoVolume* voRB242CuTubeM = new TGeoVolume("voRB242CuTubeM", new TGeoTube(0., kRB24CuTubeRo, 10.), kMedVacHC);
1548 TGeoVolume* voRB242CuTube = new TGeoVolume("voRB242CuTube", new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, 10.), kMedCuHC);
1549 voRB242CuTubeM->AddNode(voRB242CuTube, 1, gGeoIdentity);
1550 TGeoVolume* voRB242CuOvalM = new TGeoVolume("voRB242CuOvalM", new TGeoEltu(3.375, 4.75, 135.), kMedCuHC);
1551 TGeoVolume* voRB242CuOval = new TGeoVolume("voRB242CuOval", new TGeoEltu(3.175, 4.55, 135.), kMedVacHC);
1552 voRB242CuOvalM->AddNode(voRB242CuOval, 1, gGeoIdentity);
1553 //
1554 TGeoVolumeAssembly* voRB242 = new TGeoVolumeAssembly("RB242");
1555 voRB242->AddNode(voRB242CuOvalM, 1, gGeoIdentity);
1556 z = -kRB242CuTubeL / 2 + kRB24CuTubeFL / 2.;
1557 voRB242->AddNode(voRB24CuTubeF, 3, new TGeoTranslation(0., 0., z));
1558 z = +kRB242CuTubeL / 2 - kRB24CuTubeFL / 2.;
1559 voRB242->AddNode(voRB24CuTubeF, 4, new TGeoTranslation(0., 0., z));
1560 z = 135. + 10.;
1561 voRB242->AddNode(voRB242CuOvTransMo, 1, new TGeoCombiTrans(0., 0., z, rot180));
1562 z = -135. - 10.;
1563 voRB242->AddNode(voRB242CuOvTransMo, 2, new TGeoTranslation(0., 0., z));
1564 z = -135. - 30.;
1565 voRB242->AddNode(voRB242CuTubeM, 1, new TGeoTranslation(0., 0., z));
1566 z = 135. + 30.;
1567 voRB242->AddNode(voRB242CuTubeM, 2, new TGeoTranslation(0., 0., z));
1568 z = -kRB24cCuTubeL / 2 - kRB24B1L - kRB242CuTubeL / 2.;
1569 voRB24C->AddNode(voRB242, 1, new TGeoTranslation(0., 0., z));
1570 //
1571 // RB24/3
1572 //
1573 // Copper Tube RB24/3
1574 // the lenth of the tube is 296.85 on the drawing but this is inconsistent with the total length tube + bellow
1575 const float kRB243CuTubeL = 297.85 - (kRB24VMABCL - kRB24B1L);
1576
1577 TGeoVolume* voRB243CuTubeM = new TGeoVolume("voRB243CuTubeM", new TGeoTube(0., kRB24CuTubeRo, (kRB243CuTubeL) / 2.), kMedVacNF);
1578 TGeoVolume* voRB243CuTube = new TGeoVolume("voRB243CuTube", new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, (kRB243CuTubeL) / 2.), kMedCuNF);
1579 voRB243CuTubeM->AddNode(voRB243CuTube, 1, gGeoIdentity);
1580
1581 TGeoVolumeAssembly* voRB243 = new TGeoVolumeAssembly("RB243");
1582 TGeoVolumeAssembly* voRB243A = new TGeoVolumeAssembly("RB243A");
1583
1584 voRB243A->AddNode(voRB243CuTube, 1, gGeoIdentity);
1585 z = -kRB243CuTubeL / 2 + kRB24CuTubeFL / 2.;
1586 voRB243A->AddNode(voRB24CuTubeF, 5, new TGeoTranslation(0., 0., z));
1587 z = +kRB243CuTubeL / 2 - kRB24CuTubeFL / 2.;
1588 voRB243A->AddNode(voRB24CuTubeF, 6, new TGeoTranslation(0., 0., z));
1589
1590 z = +kRB243CuTubeL / 2 + (kRB24VMABCRBT1L / 2) + 1;
1591 voRB243A->AddNode(voRB24VMABCRB, 2, new TGeoTranslation(0., 0., z));
1592
1593 z = -kRB243CuTubeL / 2. - kRB24VMABCL;
1594 voRB243->AddNode(voRB243A, 1, new TGeoTranslation(0., 0., z));
1595 z = -(1.5 * kRB243CuTubeL + 2. * kRB24VMABCL);
1596 voRB243->AddNode(voRB243A, 2, new TGeoTranslation(0., 0., z));
1597
1598 z = -2. * (kRB243CuTubeL + kRB24VMABCL) - (kRB24VMABCL - kRB24VMABCRBT1L / 2) + 1.;
1599 voRB243->AddNode(voRB24VMABCRB, 3, new TGeoTranslation(0., 0., z));
1600
1601 z = -kRB24cCuTubeL / 2 - kRB24B1L - kRB242CuTubeL;
1602 voRB24C->AddNode(voRB243, 1, new TGeoTranslation(0., 0., z));
1603
1604 //
1605 //
1606 caveRB24->AddNode(voRB24C, 1, new TGeoCombiTrans(0., 0., -kRB24CL / 2 + kRB24cCuTubeL / 2, rot180));
1607
1608 //
1610 // //
1611 // The Absorber Vacuum system //
1612 // //
1614 //
1615 // Rotable Flange starts at: 82.00 cm from IP
1616 // Length of rotable flange section: 10.68 cm
1617 // Weld 0.08 cm
1618 // Length of straight section 207.21 cm
1619 // =======================================================================
1620 // 299.97 cm [0.03 cm missing ?]
1621 // Length of opening cone 252.09 cm
1622 // Weld 0.15 cm
1623 // Length of compensator 30.54 cm
1624 // Weld 0.15 cm
1625 // Length of fixed flange 2.13 - 0.97 1.16 cm
1626 // =======================================================================
1627 // 584.06 cm [584.80 installed] [0.74 cm missing]
1628 // RB26/3
1629 // Length of split flange 2.13 - 1.2 0.93 cm
1630 // Weld 0.15 cm
1631 // Length of fixed point section 16.07 cm
1632 // Weld 0.15 cm
1633 // Length of opening cone 629.20 cm
1634 // Weld 0.30 cm
1635 // Kength of the compensator 41.70 cm
1636 // Weld 0.30 cm
1637 // Length of fixed flange 2.99 - 1.72 1.27 cm
1638 // =================================================
1639 // Length of RB26/3 690.07 cm [689.20 installed] [0.87 cm too much]
1640 //
1641 // RB26/4-5
1642 // Length of split flange 2.13 - 1.2 0.93 cm
1643 // Weld 0.15 cm
1644 // Length of fixed point section 16.07 cm
1645 // Weld 0.15 cm
1646 // Length of opening cone 629.20 cm
1647 // Weld 0.30 cm
1648 // Length of closing cone
1649 // Weld
1650 // Lenth of straight section
1651 // Kength of the compensator 41.70 cm
1652 // Weld 0.30 cm
1653 // Length of fixed flange 2.99 - 1.72 1.27 cm
1654 // =================================================
1655 // Length of RB26/3 690.07 cm [689.20 installed] [0.87 cm too much]
1656
1658 // //
1659 // RB26/1-2 //
1660 // Drawing LHCV2a_0050 [as installed] //
1661 // Drawing LHCV2a_0008 //
1662 // Drawing LHCV2a_0001 //
1664 // Pos1 Vacuum Tubes LHCVC2A__0010
1665 // Pos2 Compensator LHCVC2A__0064
1666 // Pos3 Rotable Flange LHCVFX___0016
1667 // Pos4 Fixed Flange LHCVFX___0006
1668 // Pos5 Bellow Tooling LHCVFX___0003
1669 //
1670 //
1671 //
1673 // RB26/1-2 Vacuum Tubes //
1674 // Drawing LHCVC2a_0010 //
1676 const float kRB26s12TubeL0 = 459.45; // 0.15 cm added for welding
1677 const float kRB26s12TubeL2 = 47.21; // part of this tube outside barrel region
1678 const float kRB26s12TubeL = kRB26s12TubeL0 - kRB26s12TubeL2; // 392.115
1679 //
1680 // 184.905
1681 // 0.877
1682 // Add 1 cm on outer diameter for insulation
1683 //
1684 //
1685 // the section which is placed into the central barrel (ending at z = -505)
1686 TGeoPcon* shRB26s12Tube = new TGeoPcon(0., 360., 4);
1687 // Section 1: straight section
1688 shRB26s12Tube->DefineSection(0, 0.00, 5.84 / 2., 6.00 / 2.);
1689 shRB26s12Tube->DefineSection(1, 207.21, 5.84 / 2., 6.00 / 2.);
1690 // Section 2: 0.72 deg opening cone
1691 shRB26s12Tube->DefineSection(2, 207.21, 5.84 / 2., 6.14 / 2.);
1692 shRB26s12Tube->DefineSection(3, kRB26s12TubeL, 5.84 / 2 + 2.576, 6.14 / 2. + 2.576);
1693
1694 // the section which is placed into the muon spectrometer (starting at z = -505)
1695 TGeoPcon* shRB26s12msTube = new TGeoPcon(0., 360., 3);
1696 // conical part
1697 shRB26s12msTube->DefineSection(0, 0.00, shRB26s12Tube->GetRmin(3), shRB26s12Tube->GetRmax(3));
1698 shRB26s12msTube->DefineSection(1, 452.30 - kRB26s12TubeL, 12.0 / 2., 12.3 / 2.);
1699 // straight part until compensator
1700 shRB26s12msTube->DefineSection(2, kRB26s12TubeL2, 12.0 / 2., 12.3 / 2.);
1701
1702 TGeoVolume* voRB26s12Tube = new TGeoVolume("RB26s12Tube", shRB26s12Tube, kMedSteelHC);
1703 TGeoVolume* voRB26s12msTube = new TGeoVolume("RB26s12msTube", shRB26s12msTube, kMedSteelHC);
1704 // Add the insulation layer
1705 TGeoVolume* voRB26s12TubeIns = new TGeoVolume("RB26s12TubeIns", makeInsulationFromTemplate(shRB26s12Tube), kMedInsu);
1706 TGeoVolume* voRB26s12msTubeIns = new TGeoVolume("RB26s12msTubeIns", makeInsulationFromTemplate(shRB26s12msTube), kMedInsu);
1707 voRB26s12Tube->AddNode(voRB26s12TubeIns, 1, gGeoIdentity);
1708 voRB26s12msTube->AddNode(voRB26s12msTubeIns, 1, gGeoIdentity);
1709
1710 TGeoVolume* voRB26s12TubeM = new TGeoVolume("RB26s12TubeM", makeMotherFromTemplate(shRB26s12Tube), kMedVacHC);
1711 voRB26s12TubeM->AddNode(voRB26s12Tube, 1, gGeoIdentity);
1712 TGeoVolume* voRB26s12msTubeM = new TGeoVolume("RB26s12msTubeM", makeMotherFromTemplate(shRB26s12msTube), kMedVacHC);
1713 voRB26s12msTubeM->AddNode(voRB26s12msTube, 1, gGeoIdentity);
1714
1716 // RB26/2 Axial Compensator //
1717 // Drawing LHCVC2a_0064 //
1719 const float kRB26s2CompL = 30.65; // Length of the compensator
1720 const float kRB26s2BellowRo = 14.38 / 2.; // Bellow outer radius [Pos 1]
1721 const float kRB26s2BellowRi = 12.12 / 2.; // Bellow inner radius [Pos 1]
1722 const int kRB26s2NumberOfPlies = 14; // Number of plies [Pos 1]
1723 const float kRB26s2BellowUndL = 10.00; // Length of undulated region [Pos 1] [+10 mm installed including pretension ?]
1724 const float kRB26s2PlieThickness = 0.025; // Plie thickness [Pos 1]
1725 const float kRB26s2ConnectionPlieR = 0.21; // Connection plie radius [Pos 1]
1726 // Plie radius
1727 const float kRB26s2PlieR = (kRB26s2BellowUndL - 4. * kRB26s2ConnectionPlieR + 2. * kRB26s2PlieThickness +
1728 (2. * kRB26s2NumberOfPlies - 2.) * kRB26s2PlieThickness) /
1729 (4. * kRB26s2NumberOfPlies - 2.);
1730 const float kRB26s2CompTubeInnerR = 12.00 / 2.; // Connection tubes inner radius [Pos 2 + 3]
1731 const float kRB26s2CompTubeOuterR = 12.30 / 2.; // Connection tubes outer radius [Pos 2 + 3]
1732 const float kRB26s2WeldingTubeLeftL = 9.00 / 2.; // Left connection tube half length [Pos 2]
1733 const float kRB26s2WeldingTubeRightL = 11.65 / 2.; // Right connection tube half length [Pos 3] [+ 0.15 cm for welding]
1734 const float kRB26s2RingOuterR = 18.10 / 2.; // Ring inner radius [Pos 4]
1735 const float kRB26s2RingL = 0.40 / 2.; // Ring half length [Pos 4]
1736 const float kRB26s2RingZ = 6.50; // Ring z-position [Pos 4]
1737 const float kRB26s2ProtOuterR = 18.20 / 2.; // Protection tube outer radius [Pos 5]
1738 const float kRB26s2ProtL = 15.00 / 2.; // Protection tube half length [Pos 5]
1739 const float kRB26s2ProtZ = 6.70; // Protection tube z-position [Pos 5]
1740
1741 // Mother volume
1742 //
1743 TGeoPcon* shRB26s2Compensator = new TGeoPcon(0., 360., 6);
1744 shRB26s2Compensator->DefineSection(0, 0.0, 0., kRB26s2CompTubeOuterR);
1745 shRB26s2Compensator->DefineSection(1, kRB26s2RingZ, 0., kRB26s2CompTubeOuterR);
1746 shRB26s2Compensator->DefineSection(2, kRB26s2RingZ, 0., kRB26s2ProtOuterR);
1747 shRB26s2Compensator->DefineSection(3, kRB26s2ProtZ + 2. * kRB26s2ProtL, 0., kRB26s2ProtOuterR);
1748 shRB26s2Compensator->DefineSection(4, kRB26s2ProtZ + 2. * kRB26s2ProtL, 0., kRB26s2CompTubeOuterR);
1749 shRB26s2Compensator->DefineSection(5, kRB26s2CompL, 0., kRB26s2CompTubeOuterR);
1750 TGeoVolume* voRB26s2Compensator = new TGeoVolume("RB26s2Compensator", shRB26s2Compensator, kMedVacHC);
1751
1752 //
1753 // [Pos 1] Bellow
1754 //
1755 //
1756 TGeoVolume* voRB26s2Bellow =
1757 new TGeoVolume("RB26s2Bellow", new TGeoTube(kRB26s2BellowRi, kRB26s2BellowRo, kRB26s2BellowUndL / 2.), kMedVacHC);
1758 //
1759 // Upper part of the undulation
1760 //
1761 TGeoTorus* shRB26s2PlieTorusU = new TGeoTorus(kRB26s2BellowRo - kRB26s2PlieR, kRB26s2PlieR - kRB26s2PlieThickness, kRB26s2PlieR);
1762 shRB26s2PlieTorusU->SetName("RB26s2TorusU");
1763 TGeoTube* shRB26s2PlieTubeU = new TGeoTube(kRB26s2BellowRo - kRB26s2PlieR, kRB26s2BellowRo, kRB26s2PlieR);
1764 shRB26s2PlieTubeU->SetName("RB26s2TubeU");
1765 TGeoCompositeShape* shRB26s2UpperPlie = new TGeoCompositeShape("RB26s2UpperPlie", "RB26s2TorusU*RB26s2TubeU");
1766
1767 TGeoVolume* voRB26s2WiggleU = new TGeoVolume("RB26s2UpperPlie", shRB26s2UpperPlie, kMedSteelHC);
1768 //
1769 // Lower part of the undulation
1770 TGeoTorus* shRB26s2PlieTorusL = new TGeoTorus(kRB26s2BellowRi + kRB26s2PlieR, kRB26s2PlieR - kRB26s2PlieThickness, kRB26s2PlieR);
1771 shRB26s2PlieTorusL->SetName("RB26s2TorusL");
1772 TGeoTube* shRB26s2PlieTubeL = new TGeoTube(kRB26s2BellowRi, kRB26s2BellowRi + kRB26s2PlieR, kRB26s2PlieR);
1773 shRB26s2PlieTubeL->SetName("RB26s2TubeL");
1774 TGeoCompositeShape* shRB26s2LowerPlie = new TGeoCompositeShape("RB26s2LowerPlie", "RB26s2TorusL*RB26s2TubeL");
1775
1776 TGeoVolume* voRB26s2WiggleL = new TGeoVolume("RB26s2LowerPlie", shRB26s2LowerPlie, kMedSteelHC);
1777
1778 //
1779 // Connection between upper and lower part of undulation
1780 TGeoVolume* voRB26s2WiggleC1 = new TGeoVolume(
1781 "RB26s2PlieConn1",
1782 new TGeoTube(kRB26s2BellowRi + kRB26s2PlieR, kRB26s2BellowRo - kRB26s2PlieR, kRB26s2PlieThickness / 2.), kMedSteelHC);
1783 //
1784 // One wiggle
1785 TGeoVolumeAssembly* voRB26s2Wiggle = new TGeoVolumeAssembly("RB26s2Wiggle");
1786 z0 = -kRB26s2PlieThickness / 2.;
1787 voRB26s2Wiggle->AddNode(voRB26s2WiggleC1, 1, new TGeoTranslation(0., 0., z0));
1788 z0 += kRB26s2PlieR - kRB26s2PlieThickness / 2.;
1789 voRB26s2Wiggle->AddNode(voRB26s2WiggleU, 1, new TGeoTranslation(0., 0., z0));
1790 z0 += kRB26s2PlieR - kRB26s2PlieThickness / 2.;
1791 voRB26s2Wiggle->AddNode(voRB26s2WiggleC1, 2, new TGeoTranslation(0., 0., z0));
1792 z0 += kRB26s2PlieR - kRB26s2PlieThickness;
1793 voRB26s2Wiggle->AddNode(voRB26s2WiggleL, 1, new TGeoTranslation(0., 0., z0));
1794 // Positioning of the volumes
1795 z0 = -kRB26s2BellowUndL / 2. + kRB26s2ConnectionPlieR;
1796 voRB26s2Bellow->AddNode(voRB26s2WiggleL, 1, new TGeoTranslation(0., 0., z0));
1797 z0 += kRB26s2ConnectionPlieR;
1798 zsh = 4. * kRB26s2PlieR - 2. * kRB26s2PlieThickness;
1799 for (int iw = 0; iw < kRB26s2NumberOfPlies; iw++) {
1800 float zpos = z0 + iw * zsh;
1801 voRB26s2Bellow->AddNode(voRB26s2Wiggle, iw + 1, new TGeoTranslation(0., 0., zpos - kRB26s2PlieThickness));
1802 }
1803
1804 voRB26s2Compensator->AddNode(voRB26s2Bellow, 1, new TGeoTranslation(0., 0., 2. * kRB26s2WeldingTubeLeftL + kRB26s2BellowUndL / 2.));
1805
1806 //
1807 // [Pos 2] Left Welding Tube
1808 //
1809 TGeoTube* shRB26s2CompLeftTube = new TGeoTube(kRB26s2CompTubeInnerR, kRB26s2CompTubeOuterR, kRB26s2WeldingTubeLeftL);
1810 TGeoVolume* voRB26s2CompLeftTube = new TGeoVolume("RB26s2CompLeftTube", shRB26s2CompLeftTube, kMedSteelHC);
1811 voRB26s2Compensator->AddNode(voRB26s2CompLeftTube, 1, new TGeoTranslation(0., 0., kRB26s2WeldingTubeLeftL));
1812 //
1813 // [Pos 3] Right Welding Tube
1814 //
1815 TGeoTube* shRB26s2CompRightTube =
1816 new TGeoTube(kRB26s2CompTubeInnerR, kRB26s2CompTubeOuterR, kRB26s2WeldingTubeRightL);
1817 TGeoVolume* voRB26s2CompRightTube = new TGeoVolume("RB26s2CompRightTube", shRB26s2CompRightTube, kMedSteelHC);
1818 voRB26s2Compensator->AddNode(voRB26s2CompRightTube, 1, new TGeoTranslation(0., 0., kRB26s2CompL - kRB26s2WeldingTubeRightL));
1819 //
1820 // [Pos 4] Ring
1821 //
1822 TGeoTube* shRB26s2CompRing = new TGeoTube(kRB26s2CompTubeOuterR, kRB26s2RingOuterR, kRB26s2RingL);
1823 TGeoVolume* voRB26s2CompRing = new TGeoVolume("RB26s2CompRing", shRB26s2CompRing, kMedSteelHC);
1824 voRB26s2Compensator->AddNode(voRB26s2CompRing, 1, new TGeoTranslation(0., 0., kRB26s2RingZ + kRB26s2RingL));
1825
1826 //
1827 // [Pos 5] Outer Protecting Tube
1828 //
1829 TGeoTube* shRB26s2CompProtTube = new TGeoTube(kRB26s2RingOuterR, kRB26s2ProtOuterR, kRB26s2ProtL);
1830 TGeoVolume* voRB26s2CompProtTube = new TGeoVolume("RB26s2CompProtTube", shRB26s2CompProtTube, kMedSteelHC);
1831 voRB26s2Compensator->AddNode(voRB26s2CompProtTube, 1, new TGeoTranslation(0., 0., kRB26s2ProtZ + kRB26s2ProtL));
1832
1834 // Rotable Flange //
1835 // Drawing LHCVFX_0016 //
1837 const float kRB26s1RFlangeTubeRi = 5.84 / 2.; // Tube inner radius
1838 const float kRB26s1RFlangeTubeRo = 6.00 / 2.; // Tube outer radius
1839
1840 // Pos 1 Clamp Ring LHCVFX__0015
1841 const float kRB26s1RFlangeCrL = 1.40; // Lenth of the clamp ring
1842 const float kRB26s1RFlangeCrRi1 = 6.72 / 2.; // Ring inner radius section 1
1843 const float kRB26s1RFlangeCrRi2 = 6.06 / 2.; // Ring inner radius section 2
1844 const float kRB26s1RFlangeCrRo = 8.60 / 2.; // Ring outer radius
1845 const float kRB26s1RFlangeCrD = 0.800; // Width section 1
1846
1847 TGeoPcon* shRB26s1RFlangeCr = new TGeoPcon(0., 360., 4);
1848 z0 = 0.;
1849 shRB26s1RFlangeCr->DefineSection(0, z0, kRB26s1RFlangeCrRi1, kRB26s1RFlangeCrRo);
1850 z0 += kRB26s1RFlangeCrD;
1851 shRB26s1RFlangeCr->DefineSection(1, z0, kRB26s1RFlangeCrRi1, kRB26s1RFlangeCrRo);
1852 shRB26s1RFlangeCr->DefineSection(2, z0, kRB26s1RFlangeCrRi2, kRB26s1RFlangeCrRo);
1853 z0 = kRB26s1RFlangeCrL;
1854 shRB26s1RFlangeCr->DefineSection(3, z0, kRB26s1RFlangeCrRi2, kRB26s1RFlangeCrRo);
1855 TGeoVolume* voRB26s1RFlangeCr = new TGeoVolume("RB26s1RFlangeCr", shRB26s1RFlangeCr, kMedSteelHC);
1856
1857 // Pos 2 Insert LHCVFX__0015
1858 const float kRB26s1RFlangeIsL = 4.88; // Lenth of the insert
1859 const float kRB26s1RFlangeIsR = 6.70 / 2.; // Ring radius
1860 const float kRB26s1RFlangeIsD = 0.80; // Ring Width
1861
1862 TGeoPcon* shRB26s1RFlangeIs = new TGeoPcon(0., 360., 4);
1863 z0 = 0.;
1864 shRB26s1RFlangeIs->DefineSection(0, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeIsR);
1865 z0 += kRB26s1RFlangeIsD;
1866 shRB26s1RFlangeIs->DefineSection(1, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeIsR);
1867 shRB26s1RFlangeIs->DefineSection(2, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
1868 z0 = kRB26s1RFlangeIsL;
1869 shRB26s1RFlangeIs->DefineSection(3, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
1870 TGeoVolume* voRB26s1RFlangeIs = new TGeoVolume("RB26s1RFlangeIs", shRB26s1RFlangeIs, kMedSteelHC);
1871 // 4.88 + 3.7 = 8.58 (8.7 to avoid overlap)
1872 // Pos 3 Fixed Point Section LHCVC2A_0021
1873 const float kRB26s1RFlangeFpL = 5.88; // Length of the fixed point section (0.08 cm added for welding)
1874 const float kRB26s1RFlangeFpZ = 3.82; // Position of the ring
1875 const float kRB26s1RFlangeFpD = 0.59; // Width of the ring
1876 const float kRB26s1RFlangeFpR = 7.00 / 2.; // Radius of the ring
1877
1878 TGeoPcon* shRB26s1RFlangeFp = new TGeoPcon(0., 360., 6);
1879 z0 = 0.;
1880 shRB26s1RFlangeFp->DefineSection(0, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
1881 z0 += kRB26s1RFlangeFpZ;
1882 shRB26s1RFlangeFp->DefineSection(1, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
1883 shRB26s1RFlangeFp->DefineSection(2, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeFpR);
1884 z0 += kRB26s1RFlangeFpD;
1885 shRB26s1RFlangeFp->DefineSection(3, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeFpR);
1886 shRB26s1RFlangeFp->DefineSection(4, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
1887 z0 = kRB26s1RFlangeFpL;
1888 shRB26s1RFlangeFp->DefineSection(5, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
1889 TGeoVolume* voRB26s1RFlangeFp = new TGeoVolume("RB26s1RFlangeFp", shRB26s1RFlangeFp, kMedSteelHC);
1890
1891 // Put everything in a mother volume
1892 TGeoPcon* shRB26s1RFlange = new TGeoPcon(0., 360., 8);
1893 z0 = 0.;
1894 shRB26s1RFlange->DefineSection(0, z0, 0., kRB26s1RFlangeCrRo);
1895 z0 += kRB26s1RFlangeCrL;
1896 shRB26s1RFlange->DefineSection(1, z0, 0., kRB26s1RFlangeCrRo);
1897 shRB26s1RFlange->DefineSection(2, z0, 0., kRB26s1RFlangeTubeRo);
1898 z0 = kRB26s1RFlangeIsL + kRB26s1RFlangeFpZ;
1899 shRB26s1RFlange->DefineSection(3, z0, 0., kRB26s1RFlangeTubeRo);
1900 shRB26s1RFlange->DefineSection(4, z0, 0., kRB26s1RFlangeFpR);
1901 z0 += kRB26s1RFlangeFpD;
1902 shRB26s1RFlange->DefineSection(5, z0, 0., kRB26s1RFlangeFpR);
1903 shRB26s1RFlange->DefineSection(6, z0, 0., kRB26s1RFlangeTubeRo);
1904 z0 = kRB26s1RFlangeIsL + kRB26s1RFlangeFpL;
1905 shRB26s1RFlange->DefineSection(7, z0, 0., kRB26s1RFlangeTubeRo);
1906 TGeoVolume* voRB26s1RFlange = new TGeoVolume("RB26s1RFlange", shRB26s1RFlange, kMedVacHC);
1907
1908 voRB26s1RFlange->AddNode(voRB26s1RFlangeIs, 1, gGeoIdentity);
1909 voRB26s1RFlange->AddNode(voRB26s1RFlangeCr, 1, gGeoIdentity);
1910 voRB26s1RFlange->AddNode(voRB26s1RFlangeFp, 1, new TGeoTranslation(0., 0., kRB26s1RFlangeIsL));
1911
1913 // Fixed Flange //
1914 // Drawing LHCVFX_0006 //
1916 const float kRB26s2FFlangeL = 2.13; // Length of the flange
1917 const float kRB26s2FFlangeD1 = 0.97; // Length of section 1
1918 const float kRB26s2FFlangeD2 = 0.29; // Length of section 2
1919 const float kRB26s2FFlangeD3 = 0.87; // Length of section 3
1920 const float kRB26s2FFlangeRo = 17.15 / 2.; // Flange outer radius
1921 const float kRB26s2FFlangeRi1 = 12.30 / 2.; // Flange inner radius section 1
1922 const float kRB26s2FFlangeRi2 = 12.00 / 2.; // Flange inner radius section 2
1923 const float kRB26s2FFlangeRi3 = 12.30 / 2.; // Flange inner radius section 3
1924 z0 = 0;
1925 TGeoPcon* shRB26s2FFlange = new TGeoPcon(0., 360., 6);
1926 z0 = 0.;
1927 shRB26s2FFlange->DefineSection(0, z0, kRB26s2FFlangeRi1, kRB26s2FFlangeRo);
1928 z0 += kRB26s2FFlangeD1;
1929 shRB26s2FFlange->DefineSection(1, z0, kRB26s2FFlangeRi1, kRB26s2FFlangeRo);
1930 shRB26s2FFlange->DefineSection(2, z0, kRB26s2FFlangeRi2, kRB26s2FFlangeRo);
1931 z0 += kRB26s2FFlangeD2;
1932 shRB26s2FFlange->DefineSection(3, z0, kRB26s2FFlangeRi2, kRB26s2FFlangeRo);
1933 shRB26s2FFlange->DefineSection(4, z0, kRB26s2FFlangeRi3, kRB26s2FFlangeRo);
1934 z0 += kRB26s2FFlangeD3;
1935 shRB26s2FFlange->DefineSection(5, z0, kRB26s2FFlangeRi3, kRB26s2FFlangeRo);
1936 TGeoVolume* voRB26s2FFlange = new TGeoVolume("RB26s2FFlange", shRB26s2FFlange, kMedSteelHC);
1937
1938 TGeoVolume* voRB26s2FFlangeM = new TGeoVolume("RB26s2FFlangeM", makeMotherFromTemplate(shRB26s2FFlange, 2, 5), kMedVacHC);
1939 voRB26s2FFlangeM->AddNode(voRB26s2FFlange, 1, gGeoIdentity);
1940
1942 // //
1943 // RB26/3 //
1944 // Drawing LHCV2a_0048 //
1945 // Drawing LHCV2a_0002 //
1947 //
1948 // Pos 1 Vacuum Tubes LHCVC2A__0003
1949 // Pos 2 Fixed Point LHCVFX___0005
1950 // Pos 3 Split Flange LHCVFX___0007
1951 // Pos 4 Fixed Flange LHCVFX___0004
1952 // Pos 5 Axial Compensator LHCVC2A__0065
1953 //
1954 //
1955 //
1956 //
1958 // Vacuum Tube //
1959 // Drawing LHCVC2A_0003 //
1961 const float kRB26s3TubeL = 629.35 + 0.3; // 0.3 cm added for welding
1962 const float kRB26s3TubeR1 = 12. / 2.;
1963 const float kRB26s3TubeR2 = kRB26s3TubeR1 + 215.8 * TMath::Tan(0.829 / 180. * TMath::Pi());
1964
1965 TGeoPcon* shRB26s3Tube = new TGeoPcon(0., 360., 7);
1966 // Section 1: straight section
1967 shRB26s3Tube->DefineSection(0, 0.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);
1968 shRB26s3Tube->DefineSection(1, 2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);
1969 // Section 2: 0.829 deg opening cone
1970 shRB26s3Tube->DefineSection(2, 2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.20);
1971
1972 shRB26s3Tube->DefineSection(3, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.20);
1973 shRB26s3Tube->DefineSection(4, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.30);
1974
1975 shRB26s3Tube->DefineSection(5, 622.20, 30.00 / 2., 30.60 / 2.);
1976 shRB26s3Tube->DefineSection(6, kRB26s3TubeL, 30.00 / 2., 30.60 / 2.);
1977
1978 TGeoVolume* voRB26s3Tube = new TGeoVolume("RB26s3Tube", shRB26s3Tube, kMedSteelHC);
1979 // Add the insulation layer
1980 TGeoVolume* voRB26s3TubeIns = new TGeoVolume("RB26s3TubeIns", makeInsulationFromTemplate(shRB26s3Tube), kMedInsu);
1981 voRB26s3Tube->AddNode(voRB26s3TubeIns, 1, gGeoIdentity);
1982
1983 TGeoVolume* voRB26s3TubeM = new TGeoVolume("RB26s3TubeM", makeMotherFromTemplate(shRB26s3Tube), kMedVacHC);
1984 voRB26s3TubeM->AddNode(voRB26s3Tube, 1, gGeoIdentity);
1985
1987 // Fixed Point //
1988 // Drawing LHCVFX_0005 //
1990 const float kRB26s3FixedPointL = 16.37; // Length of the fixed point section (0.3 cm added for welding)
1991 const float kRB26s3FixedPointZ = 9.72; // Position of the ring (0.15 cm added for welding)
1992 const float kRB26s3FixedPointD = 0.595; // Width of the ring
1993 const float kRB26s3FixedPointR = 13.30 / 2.; // Radius of the ring
1994 const float kRB26s3FixedPointRi = 12.00 / 2.; // Inner radius of the tube
1995 const float kRB26s3FixedPointRo1 = 12.30 / 2.; // Outer radius of the tube (in)
1996 const float kRB26s3FixedPointRo2 = 12.40 / 2.; // Outer radius of the tube (out)
1997 const float kRB26s3FixedPointDs = 1.5; // Width of straight section behind ring
1998 const float kRB26s3FixedPointDc = 3.15; // Width of conical section behind ring (0.15 cm added for welding)
1999
2000 TGeoPcon* shRB26s3FixedPoint = new TGeoPcon(0., 360., 8);
2001 z0 = 0.;
2002 shRB26s3FixedPoint->DefineSection(0, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
2003 z0 += kRB26s3FixedPointZ;
2004 shRB26s3FixedPoint->DefineSection(1, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
2005 shRB26s3FixedPoint->DefineSection(2, z0, kRB26s3FixedPointRi, kRB26s3FixedPointR);
2006 z0 += kRB26s3FixedPointD;
2007 shRB26s3FixedPoint->DefineSection(3, z0, kRB26s3FixedPointRi, kRB26s3FixedPointR);
2008 shRB26s3FixedPoint->DefineSection(4, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
2009 z0 += kRB26s3FixedPointDs;
2010 shRB26s3FixedPoint->DefineSection(5, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
2011 z0 += kRB26s3FixedPointDc;
2012 shRB26s3FixedPoint->DefineSection(6, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo2);
2013 z0 = kRB26s3FixedPointL;
2014 shRB26s3FixedPoint->DefineSection(7, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo2);
2015 TGeoVolume* voRB26s3FixedPoint = new TGeoVolume("RB26s3FixedPoint", shRB26s3FixedPoint, kMedSteelHC);
2016
2017 TGeoVolume* voRB26s3FixedPointM = new TGeoVolume("RB26s3FixedPointM", makeMotherFromTemplate(shRB26s3FixedPoint), kMedVacHC);
2018 voRB26s3FixedPointM->AddNode(voRB26s3FixedPoint, 1, gGeoIdentity);
2019
2021 // Split Flange //
2022 // Drawing LHCVFX_0005 //
2024 const float kRB26s3SFlangeL = 2.13; // Length of the flange
2025 const float kRB26s3SFlangeD1 = 0.57; // Length of section 1
2026 const float kRB26s3SFlangeD2 = 0.36; // Length of section 2
2027 const float kRB26s3SFlangeD3 = 0.50 + 0.70; // Length of section 3
2028 const float kRB26s3SFlangeRo = 17.15 / 2.; // Flange outer radius
2029 const float kRB26s3SFlangeRi1 = 12.30 / 2.; // Flange inner radius section 1
2030 const float kRB26s3SFlangeRi2 = 12.00 / 2.; // Flange inner radius section 2
2031 const float kRB26s3SFlangeRi3 = 12.30 / 2.; // Flange inner radius section 3
2032 z0 = 0;
2033 TGeoPcon* shRB26s3SFlange = new TGeoPcon(0., 360., 6);
2034 z0 = 0.;
2035 shRB26s3SFlange->DefineSection(0, z0, kRB26s3SFlangeRi1, kRB26s3SFlangeRo);
2036 z0 += kRB26s3SFlangeD1;
2037 shRB26s3SFlange->DefineSection(1, z0, kRB26s3SFlangeRi1, kRB26s3SFlangeRo);
2038 shRB26s3SFlange->DefineSection(2, z0, kRB26s3SFlangeRi2, kRB26s3SFlangeRo);
2039 z0 += kRB26s3SFlangeD2;
2040 shRB26s3SFlange->DefineSection(3, z0, kRB26s3SFlangeRi2, kRB26s3SFlangeRo);
2041 shRB26s3SFlange->DefineSection(4, z0, kRB26s3SFlangeRi3, kRB26s3SFlangeRo);
2042 z0 += kRB26s3SFlangeD3;
2043 shRB26s3SFlange->DefineSection(5, z0, kRB26s3SFlangeRi3, kRB26s3SFlangeRo);
2044 TGeoVolume* voRB26s3SFlange = new TGeoVolume("RB26s3SFlange", shRB26s3SFlange, kMedSteelHC);
2045
2046 TGeoVolume* voRB26s3SFlangeM = new TGeoVolume("RB26s3SFlangeM", makeMotherFromTemplate(shRB26s3SFlange, 0, 3), kMedVacHC);
2047 voRB26s3SFlangeM->AddNode(voRB26s3SFlange, 1, gGeoIdentity);
2048
2050 // RB26/3 Fixed Flange //
2051 // Drawing LHCVFX___0004 //
2053 const float kRB26s3FFlangeL = 2.99; // Length of the flange
2054 const float kRB26s3FFlangeD1 = 1.72; // Length of section 1
2055 const float kRB26s3FFlangeD2 = 0.30; // Length of section 2
2056 const float kRB26s3FFlangeD3 = 0.97; // Length of section 3
2057 const float kRB26s3FFlangeRo = 36.20 / 2.; // Flange outer radius
2058 const float kRB26s3FFlangeRi1 = 30.60 / 2.; // Flange inner radius section 1
2059 const float kRB26s3FFlangeRi2 = 30.00 / 2.; // Flange inner radius section 2
2060 const float kRB26s3FFlangeRi3 = 30.60 / 2.; // Flange inner radius section 3
2061 z0 = 0;
2062 TGeoPcon* shRB26s3FFlange = new TGeoPcon(0., 360., 6);
2063 z0 = 0.;
2064 shRB26s3FFlange->DefineSection(0, z0, kRB26s3FFlangeRi1, kRB26s3FFlangeRo);
2065 z0 += kRB26s3FFlangeD1;
2066 shRB26s3FFlange->DefineSection(1, z0, kRB26s3FFlangeRi1, kRB26s3FFlangeRo);
2067 shRB26s3FFlange->DefineSection(2, z0, kRB26s3FFlangeRi2, kRB26s3FFlangeRo);
2068 z0 += kRB26s3FFlangeD2;
2069 shRB26s3FFlange->DefineSection(3, z0, kRB26s3FFlangeRi2, kRB26s3FFlangeRo);
2070 shRB26s3FFlange->DefineSection(4, z0, kRB26s3FFlangeRi3, kRB26s3FFlangeRo);
2071 z0 += kRB26s3FFlangeD3;
2072 shRB26s3FFlange->DefineSection(5, z0, kRB26s3FFlangeRi3, kRB26s3FFlangeRo);
2073 TGeoVolume* voRB26s3FFlange = new TGeoVolume("RB26s3FFlange", shRB26s3FFlange, kMedSteelHC);
2074
2075 TGeoVolume* voRB26s3FFlangeM = new TGeoVolume("RB26s3FFlangeM", makeMotherFromTemplate(shRB26s3FFlange, 2, 5), kMedVacHC);
2076 voRB26s3FFlangeM->AddNode(voRB26s3FFlange, 1, gGeoIdentity);
2077
2079 // RB26/3 Axial Compensator //
2080 // Drawing LHCVC2a_0065 //
2082 const float kRB26s3CompL = 42.3; // Length of the compensator (0.3 cm added for welding)
2083 const float kRB26s3BellowRo = 34.00 / 2.; // Bellow outer radius [Pos 1]
2084 const float kRB26s3BellowRi = 30.10 / 2.; // Bellow inner radius [Pos 1]
2085 const int kRB26s3NumberOfPlies = 13; // Number of plies [Pos 1]
2086 const float kRB26s3BellowUndL = 17.70; // Length of undulated region [Pos 1]
2087 const float kRB26s3PlieThickness = 0.06; // Plie thickness [Pos 1]
2088 const float kRB26s3ConnectionPlieR = 0.21; // Connection plie radius [Pos 1]
2089 // Plie radius
2090 const float kRB26s3PlieR = (kRB26s3BellowUndL - 4. * kRB26s3ConnectionPlieR + 2. * kRB26s3PlieThickness +
2091 (2. * kRB26s3NumberOfPlies - 2.) * kRB26s3PlieThickness) /
2092 (4. * kRB26s3NumberOfPlies - 2.);
2093
2094 //
2095 // The welding tubes have 3 sections with different radii and 2 transition regions.
2096 // Section 1: connection to the outside
2097 // Section 2: commection to the bellow
2098 // Section 3: between 1 and 2
2099 const float kRB26s3CompTubeInnerR1 = 30.0 / 2.; // Outer Connection tubes inner radius [Pos 4 + 3]
2100 const float kRB26s3CompTubeOuterR1 = 30.6 / 2.; // Outer Connection tubes outer radius [Pos 4 + 3]
2101 const float kRB26s3CompTubeInnerR2 = 29.4 / 2.; // Connection tubes inner radius [Pos 4 + 3]
2102 const float kRB26s3CompTubeOuterR2 = 30.0 / 2.; // Connection tubes outer radius [Pos 4 + 3]
2103 const float kRB26s3CompTubeInnerR3 = 30.6 / 2.; // Connection tubes inner radius at bellow [Pos 4 + 3]
2104 const float kRB26s3CompTubeOuterR3 = 32.2 / 2.; // Connection tubes outer radius at bellow [Pos 4 + 3]
2105
2106 const float kRB26s3WeldingTubeLeftL1 = 2.0; // Left connection tube length [Pos 4]
2107 const float kRB26s3WeldingTubeLeftL2 = 3.4; // Left connection tube length [Pos 4]
2108 const float kRB26s3WeldingTubeLeftL = 7.0; // Left connection tube total length [Pos 4]
2109 const float kRB26s3WeldingTubeRightL1 = 2.3; // Right connection tube length [Pos 3] (0.3 cm added for welding)
2110 const float kRB26s3WeldingTubeRightL2 = 13.4; // Right connection tube length [Pos 3]
2111
2112 const float kRB26s3WeldingTubeT1 = 0.6; // Length of first r-transition [Pos 4 + 3]
2113 const float kRB26s3WeldingTubeT2 = 1.0; // Length of 2nd r-transition [Pos 4 + 3]
2114
2115 const float kRB26s3RingOuterR = 36.1 / 2.; // Ring inner radius [Pos 4]
2116 const float kRB26s3RingL = 0.8 / 2.; // Ring half length [Pos 4]
2117 const float kRB26s3RingZ = 3.7; // Ring z-position [Pos 4]
2118 const float kRB26s3ProtOuterR = 36.2 / 2.; // Protection tube outer radius [Pos 2]
2119 const float kRB26s3ProtL = 27.0 / 2.; // Protection tube half length [Pos 2]
2120 const float kRB26s3ProtZ = 4.0; // Protection tube z-position [Pos 2]
2121
2122 // Mother volume
2123 //
2124 TGeoPcon* shRB26s3Compensator = new TGeoPcon(0., 360., 6);
2125 shRB26s3Compensator->DefineSection(0, 0.0, 0., kRB26s3CompTubeOuterR1);
2126 shRB26s3Compensator->DefineSection(1, kRB26s3RingZ, 0., kRB26s3CompTubeOuterR1);
2127 shRB26s3Compensator->DefineSection(2, kRB26s3RingZ, 0., kRB26s3ProtOuterR);
2128 shRB26s3Compensator->DefineSection(3, kRB26s3ProtZ + 2. * kRB26s3ProtL, 0., kRB26s3ProtOuterR);
2129 shRB26s3Compensator->DefineSection(4, kRB26s3ProtZ + 2. * kRB26s3ProtL, 0., kRB26s3CompTubeOuterR1);
2130 shRB26s3Compensator->DefineSection(5, kRB26s3CompL, 0., kRB26s3CompTubeOuterR1);
2131 TGeoVolume* voRB26s3Compensator = new TGeoVolume("RB26s3Compensator", shRB26s3Compensator, kMedVacHC);
2132
2133 //
2134 // [Pos 1] Bellow
2135 //
2136 //
2137
2138 //
2139 // Upper part of the undulation
2140 //
2141 TGeoTorus* shRB26s3PlieTorusU = new TGeoTorus(kRB26s3BellowRo - kRB26s3PlieR, kRB26s3PlieR - kRB26s3PlieThickness, kRB26s3PlieR);
2142 shRB26s3PlieTorusU->SetName("RB26s3TorusU");
2143 TGeoTube* shRB26s3PlieTubeU = new TGeoTube(kRB26s3BellowRo - kRB26s3PlieR, kRB26s3BellowRo, kRB26s3PlieR);
2144 shRB26s3PlieTubeU->SetName("RB26s3TubeU");
2145 TGeoCompositeShape* shRB26s3UpperPlie = new TGeoCompositeShape("RB26s3UpperPlie", "RB26s3TorusU*RB26s3TubeU");
2146
2147 TGeoVolume* voRB26s3WiggleU = new TGeoVolume("RB26s3UpperPlie", shRB26s3UpperPlie, kMedSteelHC);
2148 //
2149 // Lower part of the undulation
2150 TGeoTorus* shRB26s3PlieTorusL = new TGeoTorus(kRB26s3BellowRi + kRB26s3PlieR, kRB26s3PlieR - kRB26s3PlieThickness, kRB26s3PlieR);
2151 shRB26s3PlieTorusL->SetName("RB26s3TorusL");
2152 TGeoTube* shRB26s3PlieTubeL = new TGeoTube(kRB26s3BellowRi, kRB26s3BellowRi + kRB26s3PlieR, kRB26s3PlieR);
2153 shRB26s3PlieTubeL->SetName("RB26s3TubeL");
2154 TGeoCompositeShape* shRB26s3LowerPlie = new TGeoCompositeShape("RB26s3LowerPlie", "RB26s3TorusL*RB26s3TubeL");
2155
2156 TGeoVolume* voRB26s3WiggleL = new TGeoVolume("RB26s3LowerPlie", shRB26s3LowerPlie, kMedSteelHC);
2157
2158 //
2159 // Connection between upper and lower part of undulation
2160 TGeoVolume* voRB26s3WiggleC1 = new TGeoVolume(
2161 "RB26s3PlieConn1",
2162 new TGeoTube(kRB26s3BellowRi + kRB26s3PlieR, kRB26s3BellowRo - kRB26s3PlieR, kRB26s3PlieThickness / 2.), kMedSteelHC);
2163 //
2164 // One wiggle
2165 TGeoVolumeAssembly* voRB26s3Wiggle = new TGeoVolumeAssembly("RB26s3Wiggle");
2166 z0 = -kRB26s3PlieThickness / 2.;
2167 voRB26s3Wiggle->AddNode(voRB26s3WiggleC1, 1, new TGeoTranslation(0., 0., z0));
2168 z0 += kRB26s3PlieR - kRB26s3PlieThickness / 2.;
2169 voRB26s3Wiggle->AddNode(voRB26s3WiggleU, 1, new TGeoTranslation(0., 0., z0));
2170 z0 += kRB26s3PlieR - kRB26s3PlieThickness / 2.;
2171 voRB26s3Wiggle->AddNode(voRB26s3WiggleC1, 2, new TGeoTranslation(0., 0., z0));
2172 z0 += kRB26s3PlieR - kRB26s3PlieThickness;
2173 voRB26s3Wiggle->AddNode(voRB26s3WiggleL, 1, new TGeoTranslation(0., 0., z0));
2174 voRB26s3Wiggle->GetShape()->ComputeBBox(); // enforce recomputing of BBox
2175
2176 //
2177 // The bellow itself
2178 float zBellowTot = kRB26s3NumberOfPlies * (static_cast<TGeoBBox*>(voRB26s3Wiggle->GetShape()))->GetDZ();
2179 TGeoVolume* voRB26s3Bellow = new TGeoVolume("RB26s3Bellow", new TGeoTube(kRB26s3BellowRi, kRB26s3BellowRo, zBellowTot), kMedVacHC);
2180
2181 // Positioning of the volumes
2182 z0 = -kRB26s2BellowUndL / 2. + kRB26s2ConnectionPlieR;
2183 voRB26s2Bellow->AddNode(voRB26s2WiggleL, 1, new TGeoTranslation(0., 0., z0));
2184 z0 += kRB26s2ConnectionPlieR;
2185 zsh = 4. * kRB26s2PlieR - 2. * kRB26s2PlieThickness;
2186 for (int iw = 0; iw < kRB26s2NumberOfPlies; iw++) {
2187 float zpos = z0 + iw * zsh;
2188 voRB26s2Bellow->AddNode(voRB26s2Wiggle, iw + 1, new TGeoTranslation(0., 0., zpos - kRB26s2PlieThickness));
2189 }
2190
2191 voRB26s3Compensator->AddNode(voRB26s3Bellow, 1, new TGeoTranslation(0., 0., kRB26s3WeldingTubeLeftL + zBellowTot));
2192
2193 //
2194 // [Pos 2] Outer Protecting Tube
2195 //
2196 TGeoTube* shRB26s3CompProtTube = new TGeoTube(kRB26s3RingOuterR, kRB26s3ProtOuterR, kRB26s3ProtL);
2197 TGeoVolume* voRB26s3CompProtTube = new TGeoVolume("RB26s3CompProtTube", shRB26s3CompProtTube, kMedSteelHC);
2198 voRB26s3Compensator->AddNode(voRB26s3CompProtTube, 1, new TGeoTranslation(0., 0., kRB26s3ProtZ + kRB26s3ProtL));
2199
2200 //
2201 // [Pos 3] Right Welding Tube
2202 //
2203 TGeoPcon* shRB26s3CompRightTube = new TGeoPcon(0., 360., 5);
2204 z0 = 0.;
2205 shRB26s3CompRightTube->DefineSection(0, z0, kRB26s3CompTubeInnerR3, kRB26s3CompTubeOuterR3);
2206 z0 += kRB26s3WeldingTubeT2;
2207 shRB26s3CompRightTube->DefineSection(1, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
2208 z0 += kRB26s3WeldingTubeRightL2;
2209 shRB26s3CompRightTube->DefineSection(2, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
2210 z0 += kRB26s3WeldingTubeT1;
2211 shRB26s3CompRightTube->DefineSection(3, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
2212 z0 += kRB26s3WeldingTubeRightL1;
2213 shRB26s3CompRightTube->DefineSection(4, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
2214
2215 TGeoVolume* voRB26s3CompRightTube = new TGeoVolume("RB26s3CompRightTube", shRB26s3CompRightTube, kMedSteelHC);
2216 voRB26s3Compensator->AddNode(voRB26s3CompRightTube, 1, new TGeoTranslation(0., 0., kRB26s3CompL - z0));
2217
2218 //
2219 // [Pos 4] Left Welding Tube
2220 //
2221 TGeoPcon* shRB26s3CompLeftTube = new TGeoPcon(0., 360., 5);
2222 z0 = 0.;
2223 shRB26s3CompLeftTube->DefineSection(0, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
2224 z0 += kRB26s3WeldingTubeLeftL1;
2225 shRB26s3CompLeftTube->DefineSection(1, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
2226 z0 += kRB26s3WeldingTubeT1;
2227 shRB26s3CompLeftTube->DefineSection(2, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
2228 z0 += kRB26s3WeldingTubeLeftL2;
2229 shRB26s3CompLeftTube->DefineSection(3, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
2230 z0 += kRB26s3WeldingTubeT2;
2231 shRB26s3CompLeftTube->DefineSection(4, z0, kRB26s3CompTubeInnerR3, kRB26s3CompTubeOuterR3);
2232
2233 TGeoVolume* voRB26s3CompLeftTube = new TGeoVolume("RB26s3CompLeftTube", shRB26s3CompLeftTube, kMedSteelHC);
2234 voRB26s3Compensator->AddNode(voRB26s3CompLeftTube, 1, gGeoIdentity);
2235 //
2236 // [Pos 5] Ring
2237 //
2238 TGeoTube* shRB26s3CompRing = new TGeoTube(kRB26s3CompTubeOuterR2, kRB26s3RingOuterR, kRB26s3RingL);
2239 TGeoVolume* voRB26s3CompRing = new TGeoVolume("RB26s3CompRing", shRB26s3CompRing, kMedSteelHC);
2240 voRB26s3Compensator->AddNode(voRB26s3CompRing, 1, new TGeoTranslation(0., 0., kRB26s3RingZ + kRB26s3RingL));
2241
2243 // //
2244 // RB26/4-5 //
2245 // Drawing LHCV2a_0012 [as installed] //
2247 // Pos1 Vacuum Tubes LHCVC2A__0014
2248 // Pos2 Compensator LHCVC2A__0066
2249 // Pos3 Fixed Point Section LHCVC2A__0016
2250 // Pos4 Split Flange LHCVFX___0005
2251 // Pos5 RotableFlange LHCVFX___0009
2253
2255 // RB26/4-5 Vacuum Tubes //
2256 // Drawing LHCVC2a_0014 //
2258 const float kRB26s45TubeL = 593.12 + 0.3; // 0.3 cm added for welding
2259
2260 TGeoPcon* shRB26s45Tube = new TGeoPcon(0., 360., 11);
2261 // Section 1: straight section
2262 shRB26s45Tube->DefineSection(0, 0.00, 30.00 / 2., 30.60 / 2.);
2263 shRB26s45Tube->DefineSection(1, 1.20, 30.00 / 2., 30.60 / 2.);
2264 shRB26s45Tube->DefineSection(2, 1.20, 30.00 / 2., 30.80 / 2.);
2265 shRB26s45Tube->DefineSection(3, 25.10, 30.00 / 2., 30.80 / 2.);
2266 // Section 2: 0.932 deg opening cone
2267 shRB26s45Tube->DefineSection(4, 486.10, 45.00 / 2., 45.80 / 2.);
2268 // Section 3: straight section 4 mm
2269 shRB26s45Tube->DefineSection(5, 512.10, 45.00 / 2., 45.80 / 2.);
2270 // Section 4: straight section 3 mm
2271 shRB26s45Tube->DefineSection(6, 512.10, 45.00 / 2., 45.60 / 2.);
2272 shRB26s45Tube->DefineSection(7, 527.70, 45.00 / 2., 45.60 / 2.);
2273 // Section 4: closing cone
2274 shRB26s45Tube->DefineSection(8, 591.30, 10.00 / 2., 10.60 / 2.);
2275 shRB26s45Tube->DefineSection(9, 591.89, 10.00 / 2., 10.30 / 2.);
2276
2277 shRB26s45Tube->DefineSection(10, kRB26s45TubeL, 10.00 / 2., 10.30 / 2.);
2278 TGeoVolume* voRB26s45Tube = new TGeoVolume("RB26s45Tube", shRB26s45Tube, kMedSteelHC);
2279
2280 TGeoVolume* voRB26s45TubeM = new TGeoVolume("RB26s45TubeM", makeMotherFromTemplate(shRB26s45Tube), kMedVacHC);
2281 voRB26s45TubeM->AddNode(voRB26s45Tube, 1, gGeoIdentity);
2282
2284 // RB26/5 Axial Compensator //
2285 // Drawing LHCVC2a_0066 //
2287 const float kRB26s5CompL = 27.60; // Length of the compensator (0.30 cm added for welding)
2288 const float kRB26s5BellowRo = 12.48 / 2.; // Bellow outer radius [Pos 1]
2289 const float kRB26s5BellowRi = 10.32 / 2.; // Bellow inner radius [Pos 1]
2290 const int kRB26s5NumberOfPlies = 15; // Number of plies [Pos 1]
2291 const float kRB26s5BellowUndL = 10.50; // Length of undulated region [Pos 1]
2292 const float kRB26s5PlieThickness = 0.025; // Plie thickness [Pos 1]
2293 const float kRB26s5ConnectionPlieR = 0.21; // Connection plie radius [Pos 1]
2294 const float kRB26s5ConnectionR = 11.2 / 2.; // Bellow connection radius [Pos 1]
2295 // Plie radius
2296 const float kRB26s5PlieR = (kRB26s5BellowUndL - 4. * kRB26s5ConnectionPlieR + 2. * kRB26s5PlieThickness +
2297 (2. * kRB26s5NumberOfPlies - 2.) * kRB26s5PlieThickness) /
2298 (4. * kRB26s5NumberOfPlies - 2.);
2299 const float kRB26s5CompTubeInnerR = 10.00 / 2.; // Connection tubes inner radius [Pos 2 + 3]
2300 const float kRB26s5CompTubeOuterR = 10.30 / 2.; // Connection tubes outer radius [Pos 2 + 3]
2301 const float kRB26s5WeldingTubeLeftL = 3.70 / 2.; // Left connection tube half length [Pos 2]
2302 const float kRB26s5WeldingTubeRightL = 13.40 / 2.; // Right connection tube half length [Pos 3] (0.3 cm added for welding)
2303 const float kRB26s5RingInnerR = 11.2 / 2.; // Ring inner radius [Pos 4]
2304 const float kRB26s5RingOuterR = 16.0 / 2.; // Ring inner radius [Pos 4]
2305 const float kRB26s5RingL = 0.4 / 2.; // Ring half length [Pos 4]
2306 const float kRB26s5RingZ = 14.97; // Ring z-position [Pos 4]
2307 const float kRB26s5ProtOuterR = 16.2 / 2.; // Protection tube outer radius [Pos 5]
2308 const float kRB26s5ProtL = 13.0 / 2.; // Protection tube half length [Pos 5]
2309 const float kRB26s5ProtZ = 2.17; // Protection tube z-position [Pos 5]
2310 const float kRB26s5DetailZR = 11.3 / 2.; // Detail Z max radius
2311
2312 // Mother volume
2313 //
2314 TGeoPcon* shRB26s5Compensator = new TGeoPcon(0., 360., 8);
2315 shRB26s5Compensator->DefineSection(0, 0.0, 0., kRB26s5CompTubeOuterR);
2316 shRB26s5Compensator->DefineSection(1, kRB26s5ProtZ, 0., kRB26s5CompTubeOuterR);
2317 shRB26s5Compensator->DefineSection(2, kRB26s5ProtZ, 0., kRB26s5ProtOuterR);
2318 shRB26s5Compensator->DefineSection(3, kRB26s5ProtZ + 2. * kRB26s5ProtL + 2. * kRB26s5RingL, 0., kRB26s5ProtOuterR);
2319 shRB26s5Compensator->DefineSection(4, kRB26s5ProtZ + 2. * kRB26s5ProtL + 2. * kRB26s5RingL, 0., kRB26s5DetailZR);
2320 shRB26s5Compensator->DefineSection(5, kRB26s5CompL - 8., 0., kRB26s5DetailZR);
2321 shRB26s5Compensator->DefineSection(6, kRB26s5CompL - 8., 0., kRB26s5CompTubeOuterR);
2322 shRB26s5Compensator->DefineSection(7, kRB26s5CompL, 0., kRB26s5CompTubeOuterR);
2323 TGeoVolume* voRB26s5Compensator = new TGeoVolume("RB26s5Compensator", shRB26s5Compensator, kMedVacHC);
2324
2325 //
2326 // [Pos 1] Bellow
2327 //
2328 //
2329 TGeoVolume* voRB26s5Bellow =
2330 new TGeoVolume("RB26s5Bellow", new TGeoTube(kRB26s5BellowRi, kRB26s5BellowRo, kRB26s5BellowUndL / 2.), kMedVacHC);
2331 //
2332 // Upper part of the undulation
2333 //
2334 TGeoTorus* shRB26s5PlieTorusU = new TGeoTorus(kRB26s5BellowRo - kRB26s5PlieR, kRB26s5PlieR - kRB26s5PlieThickness, kRB26s5PlieR);
2335 shRB26s5PlieTorusU->SetName("RB26s5TorusU");
2336 TGeoTube* shRB26s5PlieTubeU = new TGeoTube(kRB26s5BellowRo - kRB26s5PlieR, kRB26s5BellowRo, kRB26s5PlieR);
2337 shRB26s5PlieTubeU->SetName("RB26s5TubeU");
2338 TGeoCompositeShape* shRB26s5UpperPlie = new TGeoCompositeShape("RB26s5UpperPlie", "RB26s5TorusU*RB26s5TubeU");
2339
2340 TGeoVolume* voRB26s5WiggleU = new TGeoVolume("RB26s5UpperPlie", shRB26s5UpperPlie, kMedSteelHC);
2341 //
2342 // Lower part of the undulation
2343 TGeoTorus* shRB26s5PlieTorusL = new TGeoTorus(kRB26s5BellowRi + kRB26s5PlieR, kRB26s5PlieR - kRB26s5PlieThickness, kRB26s5PlieR);
2344 shRB26s5PlieTorusL->SetName("RB26s5TorusL");
2345 TGeoTube* shRB26s5PlieTubeL = new TGeoTube(kRB26s5BellowRi, kRB26s5BellowRi + kRB26s5PlieR, kRB26s5PlieR);
2346 shRB26s5PlieTubeL->SetName("RB26s5TubeL");
2347 TGeoCompositeShape* shRB26s5LowerPlie = new TGeoCompositeShape("RB26s5LowerPlie", "RB26s5TorusL*RB26s5TubeL");
2348
2349 TGeoVolume* voRB26s5WiggleL = new TGeoVolume("RB26s5LowerPlie", shRB26s5LowerPlie, kMedSteelHC);
2350
2351 //
2352 // Connection between upper and lower part of undulation
2353 TGeoVolume* voRB26s5WiggleC1 = new TGeoVolume("RB26s5PlieConn1",
2354 new TGeoTube(kRB26s5BellowRi + kRB26s5PlieR, kRB26s5BellowRo - kRB26s5PlieR, kRB26s5PlieThickness / 2.), kMedSteelHC);
2355 //
2356 // One wiggle
2357 TGeoVolumeAssembly* voRB26s5Wiggle = new TGeoVolumeAssembly("RB26s5Wiggle");
2358 z0 = -kRB26s5PlieThickness / 2.;
2359 voRB26s5Wiggle->AddNode(voRB26s5WiggleC1, 1, new TGeoTranslation(0., 0., z0));
2360 z0 += kRB26s5PlieR - kRB26s5PlieThickness / 2.;
2361 voRB26s5Wiggle->AddNode(voRB26s5WiggleU, 1, new TGeoTranslation(0., 0., z0));
2362 z0 += kRB26s5PlieR - kRB26s5PlieThickness / 2.;
2363 voRB26s5Wiggle->AddNode(voRB26s5WiggleC1, 2, new TGeoTranslation(0., 0., z0));
2364 z0 += kRB26s5PlieR - kRB26s5PlieThickness;
2365 voRB26s5Wiggle->AddNode(voRB26s5WiggleL, 1, new TGeoTranslation(0., 0., z0));
2366 // Positioning of the volumes
2367 z0 = -kRB26s5BellowUndL / 2. + kRB26s5ConnectionPlieR;
2368 voRB26s5Bellow->AddNode(voRB26s5WiggleL, 1, new TGeoTranslation(0., 0., z0));
2369 z0 += kRB26s5ConnectionPlieR;
2370 zsh = 4. * kRB26s5PlieR - 2. * kRB26s5PlieThickness;
2371 for (int iw = 0; iw < kRB26s5NumberOfPlies; iw++) {
2372 float zpos = z0 + iw * zsh;
2373 voRB26s5Bellow->AddNode(voRB26s5Wiggle, iw + 1, new TGeoTranslation(0., 0., zpos - kRB26s5PlieThickness));
2374 }
2375
2376 voRB26s5Compensator->AddNode(voRB26s5Bellow, 1, new TGeoTranslation(0., 0., 2. * kRB26s5WeldingTubeLeftL + kRB26s5BellowUndL / 2.));
2377
2378 //
2379 // [Pos 2] Left Welding Tube
2380 //
2381 TGeoPcon* shRB26s5CompLeftTube = new TGeoPcon(0., 360., 3);
2382 z0 = 0;
2383 shRB26s5CompLeftTube->DefineSection(0, z0, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
2384 z0 += 2 * kRB26s5WeldingTubeLeftL - (kRB26s5ConnectionR - kRB26s5CompTubeOuterR);
2385 shRB26s5CompLeftTube->DefineSection(1, z0, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
2386 z0 += (kRB26s5ConnectionR - kRB26s5CompTubeOuterR);
2387 shRB26s5CompLeftTube->DefineSection(2, z0, kRB26s5ConnectionR - 0.15, kRB26s5ConnectionR);
2388 TGeoVolume* voRB26s5CompLeftTube = new TGeoVolume("RB26s5CompLeftTube", shRB26s5CompLeftTube, kMedSteelHC);
2389 voRB26s5Compensator->AddNode(voRB26s5CompLeftTube, 1, gGeoIdentity);
2390 //
2391 // [Pos 3] Right Welding Tube
2392 //
2393 TGeoPcon* shRB26s5CompRightTube = new TGeoPcon(0., 360., 11);
2394 // Detail Z
2395 shRB26s5CompRightTube->DefineSection(0, 0., kRB26s5CompTubeInnerR + 0.22, 11.2 / 2.);
2396 shRB26s5CompRightTube->DefineSection(1, 0.05, kRB26s5CompTubeInnerR + 0.18, 11.2 / 2.);
2397 shRB26s5CompRightTube->DefineSection(2, 0.22, kRB26s5CompTubeInnerR, 11.2 / 2. - 0.22);
2398 shRB26s5CompRightTube->DefineSection(3, 0.44, kRB26s5CompTubeInnerR, 11.2 / 2.);
2399 shRB26s5CompRightTube->DefineSection(4, 1.70, kRB26s5CompTubeInnerR, 11.2 / 2.);
2400 shRB26s5CompRightTube->DefineSection(5, 2.10, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
2401 shRB26s5CompRightTube->DefineSection(6, 2.80, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
2402 shRB26s5CompRightTube->DefineSection(7, 2.80, kRB26s5CompTubeInnerR, 11.3 / 2.);
2403 shRB26s5CompRightTube->DefineSection(8, 3.40, kRB26s5CompTubeInnerR, 11.3 / 2.);
2404 // Normal pipe
2405 shRB26s5CompRightTube->DefineSection(9, 3.50, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
2406 shRB26s5CompRightTube->DefineSection(10, 2. * kRB26s5WeldingTubeRightL, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
2407
2408 TGeoVolume* voRB26s5CompRightTube = new TGeoVolume("RB26s5CompRightTube", shRB26s5CompRightTube, kMedSteelHC);
2409 voRB26s5Compensator->AddNode(voRB26s5CompRightTube, 1, new TGeoTranslation(0., 0., kRB26s5CompL - 2. * kRB26s5WeldingTubeRightL));
2410 //
2411 // [Pos 4] Ring
2412 //
2413 TGeoTube* shRB26s5CompRing = new TGeoTube(kRB26s5RingInnerR, kRB26s5RingOuterR, kRB26s5RingL);
2414 TGeoVolume* voRB26s5CompRing = new TGeoVolume("RB26s5CompRing", shRB26s5CompRing, kMedSteelHC);
2415 voRB26s5Compensator->AddNode(voRB26s5CompRing, 1, new TGeoTranslation(0., 0., kRB26s5RingZ + kRB26s5RingL));
2416
2417 //
2418 // [Pos 5] Outer Protecting Tube
2419 //
2420 TGeoTube* shRB26s5CompProtTube = new TGeoTube(kRB26s5RingOuterR, kRB26s5ProtOuterR, kRB26s5ProtL);
2421 TGeoVolume* voRB26s5CompProtTube = new TGeoVolume("RB26s5CompProtTube", shRB26s5CompProtTube, kMedSteelHC);
2422 voRB26s5Compensator->AddNode(voRB26s5CompProtTube, 1, new TGeoTranslation(0., 0., kRB26s5ProtZ + kRB26s5ProtL));
2423
2425 // RB26/4 Fixed Point Section //
2426 // Drawing LHCVC2a_0016 //
2428 const float kRB26s4TubeRi = 30.30 / 2.; // Tube inner radius (0.3 cm added for welding)
2429 const float kRB26s4TubeRo = 30.60 / 2.; // Tube outer radius
2430 const float kRB26s4FixedPointL = 12.63; // Length of the fixed point section
2431 const float kRB26s4FixedPointZ = 10.53; // Position of the ring (0.15 added for welding)
2432 const float kRB26s4FixedPointD = 0.595; // Width of the ring
2433 const float kRB26s4FixedPointR = 31.60 / 2.; // Radius of the ring
2434
2435 TGeoPcon* shRB26s4FixedPoint = new TGeoPcon(0., 360., 6);
2436 z0 = 0.;
2437 shRB26s4FixedPoint->DefineSection(0, z0, kRB26s4TubeRi, kRB26s4TubeRo);
2438 z0 += kRB26s4FixedPointZ;
2439 shRB26s4FixedPoint->DefineSection(1, z0, kRB26s4TubeRi, kRB26s4TubeRo);
2440 shRB26s4FixedPoint->DefineSection(2, z0, kRB26s4TubeRi, kRB26s4FixedPointR);
2441 z0 += kRB26s4FixedPointD;
2442 shRB26s4FixedPoint->DefineSection(3, z0, kRB26s4TubeRi, kRB26s4FixedPointR);
2443 shRB26s4FixedPoint->DefineSection(4, z0, kRB26s4TubeRi, kRB26s4TubeRo);
2444 z0 = kRB26s4FixedPointL;
2445 shRB26s4FixedPoint->DefineSection(5, z0, kRB26s4TubeRi, kRB26s4TubeRo);
2446 TGeoVolume* voRB26s4FixedPoint = new TGeoVolume("RB26s4FixedPoint", shRB26s4FixedPoint, kMedSteelHC);
2447
2448 TGeoVolume* voRB26s4FixedPointM = new TGeoVolume("RB26s4FixedPointM", makeMotherFromTemplate(shRB26s4FixedPoint), kMedVacHC);
2449 voRB26s4FixedPointM->AddNode(voRB26s4FixedPoint, 1, gGeoIdentity);
2450
2452 // RB26/4 Split Flange //
2453 // Drawing LHCVFX__0005 //
2455 const float kRB26s4SFlangeL = 2.99; // Length of the flange
2456 const float kRB26s4SFlangeD1 = 0.85; // Length of section 1
2457 const float kRB26s4SFlangeD2 = 0.36; // Length of section 2
2458 const float kRB26s4SFlangeD3 = 0.73 + 1.05; // Length of section 3
2459 const float kRB26s4SFlangeRo = 36.20 / 2.; // Flange outer radius
2460 const float kRB26s4SFlangeRi1 = 30.60 / 2.; // Flange inner radius section 1
2461 const float kRB26s4SFlangeRi2 = 30.00 / 2.; // Flange inner radius section 2
2462 const float kRB26s4SFlangeRi3 = 30.60 / 2.; // Flange inner radius section 3
2463 z0 = 0;
2464 TGeoPcon* shRB26s4SFlange = new TGeoPcon(0., 360., 6);
2465 z0 = 0.;
2466 shRB26s4SFlange->DefineSection(0, z0, kRB26s4SFlangeRi1, kRB26s4SFlangeRo);
2467 z0 += kRB26s4SFlangeD1;
2468 shRB26s4SFlange->DefineSection(1, z0, kRB26s4SFlangeRi1, kRB26s4SFlangeRo);
2469 shRB26s4SFlange->DefineSection(2, z0, kRB26s4SFlangeRi2, kRB26s4SFlangeRo);
2470 z0 += kRB26s4SFlangeD2;
2471 shRB26s4SFlange->DefineSection(3, z0, kRB26s4SFlangeRi2, kRB26s4SFlangeRo);
2472 shRB26s4SFlange->DefineSection(4, z0, kRB26s4SFlangeRi3, kRB26s4SFlangeRo);
2473 z0 += kRB26s4SFlangeD3;
2474 shRB26s4SFlange->DefineSection(5, z0, kRB26s4SFlangeRi3, kRB26s4SFlangeRo);
2475 TGeoVolume* voRB26s4SFlange = new TGeoVolume("RB26s4SFlange", shRB26s4SFlange, kMedSteelHC);
2476
2477 TGeoVolume* voRB26s4SFlangeM = new TGeoVolume("RB26s4SFlangeM", makeMotherFromTemplate(shRB26s4SFlange, 0, 3), kMedVacHC);
2478 voRB26s4SFlangeM->AddNode(voRB26s4SFlange, 1, gGeoIdentity);
2479
2481 // RB26/5 Rotable Flange //
2482 // Drawing LHCVFX__0009 //
2484 const float kRB26s5RFlangeL = 1.86; // Length of the flange
2485 const float kRB26s5RFlangeD1 = 0.61; // Length of section 1
2486 const float kRB26s5RFlangeD2 = 0.15; // Length of section 2
2487 const float kRB26s5RFlangeD3 = 0.60; // Length of section 3
2488 const float kRB26s5RFlangeD4 = 0.50; // Length of section 4
2489 const float kRB26s5RFlangeRo = 15.20 / 2.; // Flange outer radius
2490 const float kRB26s5RFlangeRi1 = 10.30 / 2.; // Flange inner radius section 1
2491 const float kRB26s5RFlangeRi2 = 10.00 / 2.; // Flange inner radius section 2
2492 const float kRB26s5RFlangeRi3 = 10.30 / 2.; // Flange inner radius section 3
2493 const float kRB26s5RFlangeRi4 = 10.50 / 2.; // Flange inner radius section 4
2494
2495 z0 = 0;
2496 TGeoPcon* shRB26s5RFlange = new TGeoPcon(0., 360., 8);
2497 z0 = 0.;
2498 shRB26s5RFlange->DefineSection(0, z0, kRB26s5RFlangeRi4, kRB26s5RFlangeRo);
2499 z0 += kRB26s5RFlangeD4;
2500 shRB26s5RFlange->DefineSection(1, z0, kRB26s5RFlangeRi4, kRB26s5RFlangeRo);
2501 shRB26s5RFlange->DefineSection(2, z0, kRB26s5RFlangeRi3, kRB26s5RFlangeRo);
2502 z0 += kRB26s5RFlangeD3;
2503 shRB26s5RFlange->DefineSection(3, z0, kRB26s5RFlangeRi3, kRB26s5RFlangeRo);
2504 shRB26s5RFlange->DefineSection(4, z0, kRB26s5RFlangeRi2, kRB26s5RFlangeRo);
2505 z0 += kRB26s5RFlangeD2;
2506 shRB26s5RFlange->DefineSection(5, z0, kRB26s5RFlangeRi2, kRB26s5RFlangeRo);
2507 shRB26s5RFlange->DefineSection(6, z0, kRB26s5RFlangeRi1, kRB26s5RFlangeRo);
2508 z0 += kRB26s5RFlangeD1;
2509 shRB26s5RFlange->DefineSection(7, z0, kRB26s5RFlangeRi1, kRB26s5RFlangeRo);
2510 TGeoVolume* voRB26s5RFlange = new TGeoVolume("RB26s5RFlange", shRB26s5RFlange, kMedSteelHC);
2511
2512 TGeoVolume* voRB26s5RFlangeM = new TGeoVolume("RB26s5RFlangeM", makeMotherFromTemplate(shRB26s5RFlange, 4, 7), kMedVacHC);
2513 voRB26s5RFlangeM->AddNode(voRB26s5RFlange, 1, gGeoIdentity);
2514
2515 //
2516 // Assemble RB26/1-2
2517 //
2518 TGeoVolumeAssembly* asRB26s12 = new TGeoVolumeAssembly("RB26s12");
2519 z0 = 0.;
2520 // asRB26s12->AddNode(voRB26s1RFlange, 1, gGeoIdentity);
2521 barrel->AddNode(voRB26s1RFlange, 1, new TGeoCombiTrans(0., 30., -82, rot180));
2522 z0 += kRB26s1RFlangeIsL + kRB26s1RFlangeFpL;
2523 barrel->AddNode(voRB26s12TubeM, 1, new TGeoCombiTrans(0., 30., -82. - z0, rot180));
2524 z0 += kRB26s12TubeL;
2525 asRB26s12->AddNode(voRB26s12msTubeM, 1, new TGeoTranslation(0., 0., z0));
2526 z0 += kRB26s12TubeL2;
2527 asRB26s12->AddNode(voRB26s2Compensator, 1, new TGeoTranslation(0., 0., z0));
2528 z0 += kRB26s2CompL;
2529 z0 -= kRB26s2FFlangeD1;
2530 asRB26s12->AddNode(voRB26s2FFlangeM, 1, new TGeoTranslation(0., 0., z0));
2531 z0 += kRB26s2FFlangeL;
2532 const float kRB26s12L = z0;
2533
2534 //
2535 // Assemble RB26/3
2536 //
2537 TGeoVolumeAssembly* asRB26s3 = new TGeoVolumeAssembly("RB26s3");
2538 z0 = 0.;
2539 asRB26s3->AddNode(voRB26s3SFlangeM, 1, gGeoIdentity);
2540 z0 += kRB26s3SFlangeL;
2541 z0 -= kRB26s3SFlangeD3;
2542 asRB26s3->AddNode(voRB26s3FixedPointM, 1, new TGeoTranslation(0., 0., z0));
2543 z0 += kRB26s3FixedPointL;
2544 asRB26s3->AddNode(voRB26s3TubeM, 1, new TGeoTranslation(0., 0., z0));
2545 z0 += kRB26s3TubeL;
2546 asRB26s3->AddNode(voRB26s3Compensator, 1, new TGeoTranslation(0., 0., z0));
2547 z0 += kRB26s3CompL;
2548 z0 -= kRB26s3FFlangeD1;
2549 asRB26s3->AddNode(voRB26s3FFlangeM, 1, new TGeoTranslation(0., 0., z0));
2550 z0 += kRB26s3FFlangeL;
2551 const float kRB26s3L = z0;
2552
2553 //
2554 // Assemble RB26/4-5
2555 //
2556 TGeoVolumeAssembly* asRB26s45 = new TGeoVolumeAssembly("RB26s45");
2557 z0 = 0.;
2558 asRB26s45->AddNode(voRB26s4SFlangeM, 1, gGeoIdentity);
2559 z0 += kRB26s4SFlangeL;
2560 z0 -= kRB26s4SFlangeD3;
2561 asRB26s45->AddNode(voRB26s4FixedPointM, 1, new TGeoTranslation(0., 0., z0));
2562 z0 += kRB26s4FixedPointL;
2563 asRB26s45->AddNode(voRB26s45TubeM, 1, new TGeoTranslation(0., 0., z0));
2564 z0 += kRB26s45TubeL;
2565 asRB26s45->AddNode(voRB26s5Compensator, 1, new TGeoTranslation(0., 0., z0));
2566 z0 += kRB26s5CompL;
2567 z0 -= kRB26s5RFlangeD3;
2568 z0 -= kRB26s5RFlangeD4;
2569 asRB26s45->AddNode(voRB26s5RFlangeM, 1, new TGeoTranslation(0., 0., z0));
2570 z0 += kRB26s5RFlangeL;
2571 const float kRB26s45L = z0;
2572
2573 //
2574 // Assemble RB26
2575 //
2576 TGeoVolumeAssembly* asRB26Pipe = new TGeoVolumeAssembly("RB26Pipe");
2577 z0 = 0.;
2578 asRB26Pipe->AddNode(asRB26s12, 1, new TGeoTranslation(0., 0., z0));
2579 z0 += kRB26s12L;
2580 asRB26Pipe->AddNode(asRB26s3, 1, new TGeoTranslation(0., 0., z0));
2581 z0 += kRB26s3L;
2582 asRB26Pipe->AddNode(asRB26s45, 1, new TGeoTranslation(0., 0., z0));
2583 z0 += kRB26s45L;
2584 top->AddNode(asRB26Pipe, 1, new TGeoCombiTrans(0., 0., -82., rot180));
2585}
2586
2587void PipeRun4::createMaterials()
2588{
2589 //
2590 // Define materials for beam pipe
2591 //
2592 int isxfld = 2.;
2593 float sxmgmx = 10.;
2595
2596 // Steel (Inox)
2597 float asteel[4] = {55.847, 51.9961, 58.6934, 28.0855};
2598 float zsteel[4] = {26., 24., 28., 14.};
2599 float wsteel[4] = {.715, .18, .1, .005};
2600 // AlBe - alloy
2601 float aAlBe[2] = {26.98, 9.01}; // al=2.702 be=1.8477
2602 float zAlBe[2] = {13.00, 4.00};
2603 float wAlBe[2] = {0.4, 0.6};
2604 // Polyamid
2605 float aPA[4] = {16., 14., 12., 1.};
2606 float zPA[4] = {8., 7., 6., 1.};
2607 float wPA[4] = {1., 1., 6., 11.};
2608 // Polyimide film
2609 float aPI[4] = {16., 14., 12., 1.};
2610 float zPI[4] = {8., 7., 6., 1.};
2611 float wPI[4] = {5., 2., 22., 10.};
2612 // Rohacell
2613 float aRohacell[4] = {16., 14., 12., 1.};
2614 float zRohacell[4] = {8., 7., 6., 1.};
2615 float wRohacell[4] = {2., 1., 9., 13.};
2616 // Air
2617 float aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
2618 float zAir[4] = {6., 7., 8., 18.};
2619 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
2620 float dAir = 1.20479E-3;
2621 float dAir1 = 1.20479E-11;
2622 // Insulation powder
2623 // Si O Ti Al
2624 float ains[4] = {28.0855, 15.9994, 47.867, 26.982};
2625 float zins[4] = {14., 8., 22., 13.};
2626 float wins[4] = {0.3019, 0.4887, 0.1914, 0.018};
2627 //
2628 //
2629 // Anticorodal
2630 //
2631 // Al Si7 Mg 0.6
2632 //
2633 float aaco[3] = {26.982, 28.0855, 24.035};
2634 float zaco[3] = {13., 14., 12.};
2635 float waco[3] = {0.924, 0.07, 0.006};
2636 // Kapton
2637 //
2638 float aKapton[4] = {1.00794, 12.0107, 14.010, 15.9994};
2639 float zKapton[4] = {1., 6., 7., 8.};
2640 float wKapton[4] = {0.026362, 0.69113, 0.07327, 0.209235};
2641 float dKapton = 1.42;
2642 // NEG coating
2643 // Ti V Zr
2644 float aNEG[4] = {47.87, 50.94, 91.24};
2645 float zNEG[4] = {22.00, 23.00, 40.00};
2646 float wNEG[4] = {1. / 3., 1. / 3., 1. / 3.};
2647 float dNEG = 5.6; // ?
2648
2649 //---------------------------------
2650 // Aluminium AA 5083 for MFT: Al Manganese(Mn) Magnesium(Mg) Chrome(Cr)
2651 float aALU5083[4] = {26.982, 54.938, 24.305, 51.996}; // Mg pas meme a que la ligne Anticorodal!
2652 float zALU5083[4] = {13., 25., 12., 24.};
2653 float wALU5083[4] = {0.947, 0.007, 0.044, 0.0015};
2654 // Aluminium AA 2219 for MFT: Al Cu Mn Ti V Zr
2655 float aALU2219[6] = {26.982, 63.546, 54.938, 47.867, 50.941, 91.224};
2656 float zALU2219[6] = {13., 29., 25., 22., 23., 40.};
2657 float wALU2219[6] = {0.93, 0.063, 0.003, 0.0006, 0.001, 0.0018};
2658 // Aluminium AA 7075 for beam pipe support (wings): Al Zn Mg Cu
2659 float aALU7075[4] = {26.982, 65.38, 24.305, 63.546};
2660 float zALU7075[4] = {13., 30., 12., 29.};
2661 float wALU7075[4] = {0.902, 0.06, 0.024, 0.014};
2662 //---------------------------------
2663
2664 // ****************
2665 // Defines tracking media parameters.
2666 //
2667 float epsil = .1; // Tracking precision,
2668 float stemax = -0.01; // Maximum displacement for multiple scat
2669 float tmaxfd = -20.; // Maximum angle due to field deflection
2670 float deemax = -.3; // Maximum fractional energy loss, DLS
2671 float stmin = -.8;
2672 // ***************
2673 //
2674
2675 auto& matmgr = o2::base::MaterialManager::Instance();
2676
2677 // Beryllium
2678 matmgr.Material("PIPE", 5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
2679 matmgr.Medium("PIPE", 5, "BE", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2680
2681 // Copper
2682 matmgr.Material("PIPE", 10, "COPPER", 63.55, 29, 8.96, 1.43, 85.6 / 8.96);
2683 matmgr.Material("PIPE", 30, "COPPER_NF", 63.55, 29, 8.96, 1.43, 85.6 / 8.96);
2684 matmgr.Material("PIPE", 50, "COPPER_HC", 63.55, 29, 8.96, 1.43, 85.6 / 8.96);
2685 matmgr.Material("PIPE", 70, "COPPER_NFHC", 63.55, 29, 8.96, 1.43, 85.6 / 8.96);
2686
2687 matmgr.Medium("PIPE", 10, "CU", 10, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2688 matmgr.Medium("PIPE", 30, "CU_NF", 30, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2689 matmgr.Medium("PIPE", 50, "CU_HC", 50, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2690 matmgr.Medium("PIPE", 70, "CU_NFHC", 70, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2691
2692 // Air
2693 matmgr.Mixture("PIPE", 15, "AIR$ ", aAir, zAir, dAir, 4, wAir);
2694 matmgr.Mixture("PIPE", 35, "AIR_HIGH$ ", aAir, zAir, dAir, 4, wAir);
2695 matmgr.Mixture("PIPE", 55, "AIR_NF ", aAir, zAir, dAir, 4, wAir);
2696 matmgr.Medium("PIPE", 15, "AIR", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2697 matmgr.Medium("PIPE", 35, "AIR_HIGH", 35, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2698 matmgr.Medium("PIPE", 55, "AIR_NF", 55, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2699
2700 // Insulation
2701 matmgr.Mixture("PIPE", 14, "INSULATION0$", ains, zins, 0.41, 4, wins);
2702 matmgr.Medium("PIPE", 14, "INS_C0", 14, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2703
2704 //
2705 // Vacuum
2706 matmgr.Mixture("PIPE", 16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
2707 matmgr.Mixture("PIPE", 36, "VACUUM$_NF", aAir, zAir, dAir1, 4, wAir);
2708 matmgr.Mixture("PIPE", 56, "VACUUM$_HC ", aAir, zAir, dAir1, 4, wAir);
2709 matmgr.Mixture("PIPE", 76, "VACUUM$_NFHC", aAir, zAir, dAir1, 4, wAir);
2710
2711 matmgr.Medium("PIPE", 16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2712 matmgr.Medium("PIPE", 36, "VACUUM_NF", 36, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2713 matmgr.Medium("PIPE", 56, "VACUUM_HC", 56, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2714 matmgr.Medium("PIPE", 76, "VACUUM_NFHC", 76, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2715
2716 //
2717 // Steel
2718 matmgr.Mixture("PIPE", 19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
2719 matmgr.Mixture("PIPE", 39, "STAINLESS STEEL$_NF", asteel, zsteel, 7.88, 4, wsteel);
2720 matmgr.Mixture("PIPE", 59, "STAINLESS STEEL$_HC", asteel, zsteel, 7.88, 4, wsteel);
2721 matmgr.Mixture("PIPE", 79, "STAINLESS STEEL$_NFHC", asteel, zsteel, 7.88, 4, wsteel);
2722
2723 matmgr.Medium("PIPE", 19, "INOX", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2724 matmgr.Medium("PIPE", 39, "INOX_NF", 39, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2725 matmgr.Medium("PIPE", 59, "INOX_HC", 59, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2726 matmgr.Medium("PIPE", 79, "INOX_NFHC", 79, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2727
2728 //----------------- for the MFT ----------------------
2729 matmgr.Mixture("PIPE", 63, "ALUMINIUM5083$", aALU5083, zALU5083, 2.66, 4, wALU5083); // from aubertduval.fr
2730 matmgr.Mixture("PIPE", 64, "ALUMINIUM2219$", aALU2219, zALU2219, 2.84, 6, wALU2219); // from aubertduval.fr
2731 matmgr.Medium("PIPE", 63, "AA5083", 63, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2732 matmgr.Medium("PIPE", 64, "AA2219", 64, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2733
2734 //----------------------------------------------------
2735 matmgr.Mixture("PIPE", 65, "PI$", aPI, zPI, 1.42, -4, wPI);
2736 matmgr.Medium("PIPE", 65, "POLYIMIDE", 65, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2737
2738 //---------------------------------
2739 // Carbon Fiber M55J
2740 matmgr.Material("PIPE", 66, "M55J6K$", 12.0107, 6, 1.92, 999, 999);
2741 matmgr.Medium("PIPE", 66, "M55J6K", 66, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2742
2743 // Rohacell
2744 matmgr.Mixture("PIPE", 67, "Rohacell$", aRohacell, zRohacell, 0.03, -4, wRohacell);
2745 matmgr.Medium("PIPE", 67, "ROHACELL", 67, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2746
2747 // Titanium
2748 matmgr.Material("PIPE", 22, "Titanium$", 47.867, 22, 4.54, 3.560, 27.80);
2749 matmgr.Medium("PIPE", 22, "TITANIUM", 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2750
2751 // Alu 7075 (ZICRAL)
2752 matmgr.Mixture("PIPE", 68, "ALUMINIUM7075$", aALU7075, zALU7075, 2.810, -4, wALU7075);
2753 matmgr.Medium("PIPE", 68, "AA7075", 68, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2754
2755 // Al-Be alloy
2756 matmgr.Mixture("PIPE", 11, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
2757 matmgr.Medium("PIPE", 11, "AlBe", 11, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
2758}
2759
2760TGeoPcon* PipeRun4::makeMotherFromTemplate(const TGeoPcon* shape, int imin, int imax, float r0, int nz)
2761{
2762 //
2763 // Create a mother shape from a template setting some min radii to 0
2764 //
2765 int nz0 = shape->GetNz();
2766 // if nz > -1 the number of planes is given by nz
2767 if (nz != -1) {
2768 nz0 = nz;
2769 }
2770 TGeoPcon* mother = new TGeoPcon(0., 360., nz0);
2771
2772 if (imin == -1 || imax == -1) {
2773 imin = 0;
2774 imax = shape->GetNz();
2775 } else if (imax >= nz0) {
2776 imax = nz0 - 1;
2777 printf("Warning: imax reset to nz-1 %5d %5d %5d %5d\n", imin, imax, nz, nz0);
2778 }
2779
2780 // construct the sections dynamically since duplications have to be avoided
2781 std::vector<double> pconparams;
2782 pconparams.reserve(nz0);
2783 pconparams.push_back(0.);
2784 pconparams.push_back(360);
2785 pconparams.push_back(nz0);
2786 int zplanecounter = 0;
2787
2788 auto addSection = [&pconparams, &zplanecounter](double z, double rmin, double rmax) {
2789 pconparams.push_back(z);
2790 pconparams.push_back(rmin);
2791 pconparams.push_back(rmax);
2792 zplanecounter++;
2793 };
2794
2795 double zlast, rminlast, rmaxlast;
2796 for (int i = 0; i < shape->GetNz(); i++) {
2797 double rmin = shape->GetRmin(i);
2798 if ((i >= imin) && (i <= imax)) {
2799 rmin = r0;
2800 }
2801 double rmax = shape->GetRmax(i);
2802 double z = shape->GetZ(i);
2803 if (i == 0 || (z != zlast || rmin != rminlast || rmax != rmaxlast)) {
2804 addSection(z, rmin, rmax);
2805 }
2806 zlast = z;
2807 rminlast = rmin;
2808 rmaxlast = rmax;
2809 }
2810 // correct dimension (unless the user chose the number of sections)
2811 if (nz == -1) {
2812 pconparams[2] = zplanecounter;
2813 // reinit polycon from parameters
2814 mother->SetDimensions(pconparams.data());
2815 } else {
2816 for (int i = 0; i < zplanecounter; i++) {
2817 mother->DefineSection(i, pconparams[3 + 3 * i], pconparams[4 + 3 * i], pconparams[5 + 3 * i]);
2818 }
2819 }
2820
2821 return mother;
2822}
2823
2824TGeoPcon* PipeRun4::makeInsulationFromTemplate(TGeoPcon* shape)
2825{
2826 //
2827 // Create an beam pipe insulation layer shape from a template
2828 //
2829 int nz = shape->GetNz();
2830 TGeoPcon* insu = new TGeoPcon(0., 360., nz);
2831
2832 for (int i = 0; i < nz; i++) {
2833 double z = shape->GetZ(i);
2834 double rmin = shape->GetRmin(i);
2835 double rmax = shape->GetRmax(i);
2836 rmax += 0.5;
2837 shape->DefineSection(i, z, rmin, rmax);
2838 rmin = rmax - 0.5;
2839 insu->DefineSection(i, z, rmin, rmax);
2840 }
2841 return insu;
2842}
2843
2844TGeoVolume* PipeRun4::makeBellow(const char* ext, int nc, float rMin, float rMax, float dU, float rPlie,
2845 float dPlie)
2846{
2847 // nc Number of convolution
2848 // rMin Inner radius of the bellow
2849 // rMax Outer radius of the bellow
2850 // dU Undulation length
2851 // rPlie Plie radius
2852 // dPlie Plie thickness
2853 auto& matmgr = o2::base::MaterialManager::Instance();
2854 const TGeoMedium* kMedVac = matmgr.getTGeoMedium("PIPE_VACUUM");
2855 const TGeoMedium* kMedSteel = matmgr.getTGeoMedium("PIPE_INOX");
2856 //
2857 // Upper part of the undulation
2858 //
2859 std::string name, nameA, nameB;
2860 TGeoTorus* shPlieTorusU = new TGeoTorus(rMax - rPlie, rPlie - dPlie, rPlie);
2861 nameA = fmt::format("{:s}TorusU", ext);
2862 shPlieTorusU->SetName(nameA.c_str());
2863 TGeoTube* shPlieTubeU = new TGeoTube(rMax - rPlie, rMax, rPlie);
2864 nameB = fmt::format("{:s}TubeU", ext);
2865 shPlieTubeU->SetName(nameB.c_str());
2866 name = fmt::format("{:s}UpperPlie", ext);
2867 TGeoCompositeShape* shUpperPlie = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}*{:s}", nameA, nameB).c_str());
2868
2869 TGeoVolume* voWiggleU = new TGeoVolume(name.c_str(), shUpperPlie, kMedSteel);
2870 //
2871 // Lower part of the undulation
2872 TGeoTorus* shPlieTorusL = new TGeoTorus(rMin + rPlie, rPlie - dPlie, rPlie);
2873 nameA = fmt::format("{:s}TorusL", ext);
2874 shPlieTorusL->SetName(nameA.c_str());
2875 TGeoTube* shPlieTubeL = new TGeoTube(rMin, rMin + rPlie, rPlie);
2876 nameB = fmt::format("{:s}TubeL", ext);
2877 shPlieTubeL->SetName(nameB.c_str());
2878 name = fmt::format("{:s}LowerPlie", ext);
2879 TGeoCompositeShape* shLowerPlie = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}*{:s}", nameA, nameB).c_str());
2880
2881 TGeoVolume* voWiggleL = new TGeoVolume(name.c_str(), shLowerPlie, kMedSteel);
2882
2883 //
2884 // Connection between upper and lower part of undulation
2885 TGeoVolume* voWiggleC1 = new TGeoVolume(fmt::format("{:s}PlieConn1", ext).c_str(), new TGeoTube(rMin + rPlie, rMax - rPlie, dPlie / 2.), kMedSteel);
2886 //
2887 // One wiggle
2888 float dz = rPlie - dPlie / 2.;
2889 float z0 = -dPlie / 2.;
2890 TGeoVolumeAssembly* asWiggle = new TGeoVolumeAssembly(fmt::format("{:s}Wiggle", ext).c_str());
2891 asWiggle->AddNode(voWiggleC1, 1, new TGeoTranslation(0., 0., z0));
2892 z0 += dz;
2893 asWiggle->AddNode(voWiggleU, 1, new TGeoTranslation(0., 0., z0));
2894 z0 += dz;
2895 asWiggle->AddNode(voWiggleC1, 2, new TGeoTranslation(0., 0., z0));
2896 z0 += dz;
2897 asWiggle->AddNode(voWiggleL, 1, new TGeoTranslation(0., 0., z0));
2898 asWiggle->GetShape()->ComputeBBox(); // enforce recomputing of BBox
2899 //
2900 float zBellowTot = nc * (static_cast<TGeoBBox*>(asWiggle->GetShape()))->GetDZ();
2901 TGeoVolume* voBellow = new TGeoVolume(fmt::format("{:s}BellowUS", ext).c_str(), new TGeoTube(rMin, rMax, zBellowTot), kMedVac);
2902 // Positioning of the volumes
2903 z0 = -dU / 2. + rPlie;
2904 voBellow->AddNode(voWiggleL, 2, new TGeoTranslation(0., 0., z0));
2905 z0 += rPlie;
2906 float zsh = 4. * rPlie - 2. * dPlie;
2907 for (int iw = 0; iw < nc; iw++) {
2908 float zpos = z0 + iw * zsh;
2909 voBellow->AddNode(asWiggle, iw + 1, new TGeoTranslation(0., 0., zpos - dPlie));
2910 }
2911 return voBellow;
2912}
2913
2914TGeoVolume* PipeRun4::makeBellowCside(const char* ext, int nc, float rMin, float rMax, float rPlie, float dPlie)
2915{
2916 // nc Number of convolution
2917 // rMin Inner radius of the bellow
2918 // rMax Outer radius of the bellow
2919 // dU Undulation length
2920 // rPlie Plie radius
2921 // dPlie Plie thickness
2922 auto& matmgr = o2::base::MaterialManager::Instance();
2923 const TGeoMedium* kMedVac = matmgr.getTGeoMedium("PIPE_VACUUM");
2924 const TGeoMedium* kMedAlu5083 = matmgr.getTGeoMedium("PIPE_AA5083"); // fm
2925
2926 float dU = nc * (4. * rPlie - 2. * dPlie);
2927
2928 std::string name, nameA, nameB;
2929 name = fmt::format("{:s}BellowUS", ext);
2930 // TGeoVolume* voBellow = new TGeoVolume(name, new TGeoTube(rMin, rMax, dU/2.), kMedVac);
2931 TGeoVolumeAssembly* voBellow = new TGeoVolumeAssembly(name.c_str());
2932 //
2933 // Upper part of the undulation
2934 //
2935
2936 TGeoTorus* shPlieTorusU = new TGeoTorus(rMax - rPlie, rPlie - dPlie, rPlie);
2937 nameA = fmt::format("{:s}TorusU", ext);
2938 shPlieTorusU->SetName(nameA.c_str());
2939 TGeoTube* shPlieTubeU = new TGeoTube(rMax - rPlie, rMax, rPlie);
2940 nameB = fmt::format("{:s}TubeU", ext);
2941 shPlieTubeU->SetName(nameB.c_str());
2942 name = fmt::format("{:s}UpperPlie", ext);
2943 TGeoCompositeShape* shUpperPlie = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}*{:s}", nameA, nameB).c_str());
2944
2945 TGeoVolume* voWiggleU = new TGeoVolume(name.c_str(), shUpperPlie, kMedAlu5083);
2946 voWiggleU->SetLineColor(kOrange); // fm
2947
2948 // First Lower part of the ondulation
2949 TGeoTorus* shPlieTorusL = new TGeoTorus(rMin + rPlie, rPlie - dPlie, rPlie);
2950 nameA = fmt::format("{:s}TorusL", ext);
2951 shPlieTorusL->SetName(nameA.c_str());
2952 TGeoTranslation* t1 = new TGeoTranslation("t1", 0, 0, -rPlie / 2.);
2953 t1->RegisterYourself();
2954
2955 TGeoTube* shPlieTubeL = new TGeoTube(rMin, rMin + rPlie, rPlie / 2.);
2956 nameB = fmt::format("{:s}TubeL", ext);
2957 shPlieTubeL->SetName(nameB.c_str());
2958 name = fmt::format("{:s}LowerPlie", ext);
2959 TGeoCompositeShape* shLowerPlie1 = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}*{:s}:t1", nameA, nameB).c_str());
2960
2961 TGeoVolume* voWiggleL1 = new TGeoVolume(name.c_str(), shLowerPlie1, kMedAlu5083);
2962 voWiggleL1->SetLineColor(kOrange); // fm
2963
2964 // Second Lower part of the undulation
2965 TGeoTranslation* t2 = new TGeoTranslation("t2", 0, 0, rPlie / 2.);
2966 t2->RegisterYourself();
2967
2968 TGeoCompositeShape* shLowerPlie2 = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}*{:s}:t2", nameA, nameB).c_str());
2969
2970 TGeoVolume* voWiggleL2 = new TGeoVolume(name.c_str(), shLowerPlie2, kMedAlu5083);
2971 voWiggleL2->SetLineColor(kOrange); // fm
2972
2973 // Connection between upper and lower part of undulation
2974 name = fmt::format("{:s}PlieConn1", ext);
2975 TGeoVolume* voWiggleC1 = new TGeoVolume(name.c_str(), new TGeoTube(rMin + rPlie, rMax - rPlie, dPlie / 2.), kMedAlu5083);
2976 voWiggleC1->SetLineColor(kOrange); // fm
2977
2978 //
2979 // Vacuum Part
2980 //
2981
2982 //--Upper part of the ondulation
2983
2984 TGeoTorus* vacPlieTorusU = new TGeoTorus(rMax - rPlie, 0., rPlie - dPlie);
2985 nameA = fmt::format("{:s}vacTorusU", ext);
2986 vacPlieTorusU->SetName(nameA.c_str());
2987 TGeoTube* vacPlieTubeU = new TGeoTube(0., rMax - rPlie, rPlie - dPlie);
2988 nameB = fmt::format("{:s}vacTubeU", ext);
2989 vacPlieTubeU->SetName(nameB.c_str());
2990 name = fmt::format("{:s}vacUpperPlie", ext);
2991 TGeoCompositeShape* vacUpperPlie = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}+{:s}", nameA, nameB).c_str());
2992
2993 TGeoVolume* voVacWiggleU = new TGeoVolume(name.c_str(), vacUpperPlie, kMedVac);
2994 voVacWiggleU->SetVisibility(0);
2995
2996 // First Lower part of the undulation
2997 TGeoTorus* vacPlieTorusL = new TGeoTorus(rMin + rPlie, 0., rPlie);
2998 nameA = fmt::format("{:s}vacTorusL", ext);
2999 vacPlieTorusL->SetName(nameA.c_str());
3000
3001 TGeoTube* vacPlieTubeL = new TGeoTube(0., rMin + rPlie, rPlie / 2.);
3002 nameB = fmt::format("{:s}vacTubeL", ext);
3003 vacPlieTubeL->SetName(nameB.c_str());
3004 name = fmt::format("{:s}vacLowerPlie", ext);
3005 TGeoCompositeShape* vacLowerPlie1 = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}:t1-{:s}", nameB, nameA).c_str());
3006
3007 TGeoVolume* voVacWiggleL1 = new TGeoVolume(name.c_str(), vacLowerPlie1, kMedVac);
3008 voVacWiggleL1->SetVisibility(0);
3009
3010 // Second Lower part of the undulation
3011 TGeoCompositeShape* vacLowerPlie2 = new TGeoCompositeShape(name.c_str(), fmt::format("{:s}:t2-{:s}", nameB, nameA).c_str());
3012
3013 TGeoVolume* voVacWiggleL2 = new TGeoVolume(name.c_str(), vacLowerPlie2, kMedVac);
3014 voVacWiggleL2->SetVisibility(0);
3015
3016 // One wiggle
3017 float dz = rPlie - dPlie / 2.;
3018 float z0 = 2. * rPlie;
3019 name = fmt::format("{:s}Wiggle", ext);
3020 TGeoVolumeAssembly* asWiggle = new TGeoVolumeAssembly(name.c_str());
3021
3022 asWiggle->AddNode(voWiggleL1, 1, new TGeoTranslation(0., 0., z0));
3023 asWiggle->AddNode(voVacWiggleL1, 1, new TGeoTranslation(0., 0., z0));
3024 z0 -= dz;
3025 asWiggle->AddNode(voWiggleC1, 1, new TGeoTranslation(0., 0., z0));
3026 z0 -= dz;
3027 asWiggle->AddNode(voWiggleU, 1, new TGeoTranslation(0., 0., z0));
3028 asWiggle->AddNode(voVacWiggleU, 1, new TGeoTranslation(0., 0., z0));
3029 z0 -= dz;
3030 asWiggle->AddNode(voWiggleC1, 2, new TGeoTranslation(0., 0., z0));
3031 z0 -= dz;
3032 asWiggle->AddNode(voWiggleL2, 1, new TGeoTranslation(0., 0., z0));
3033 asWiggle->AddNode(voVacWiggleL2, 1, new TGeoTranslation(0., 0., z0));
3034
3035 // Positioning of the volumes
3036 z0 = +dU / 2.;
3037 float zsh = 4. * dz;
3038 // for (int iw = 0; iw < 1; iw++) {
3039 for (int iw = 0; iw < nc; iw++) {
3040 float zpos = z0 - iw * zsh;
3041 voBellow->AddNode(asWiggle, iw + 1, new TGeoTranslation(0., 0., zpos));
3042 }
3043 return voBellow;
3044}
3045
3046TGeoVolume* PipeRun4::makeSupportBar(const char* tag, float Rin, float Rout, float length, float skinLength)
3047{
3048 //
3049 // make a support bar with the specified dimensions of the collar and arms
3050 //
3051
3052 // Dimensions :
3053
3054 const float kSupportXdim = length; // 20.67;
3055 const float kBeamPipeRingZdim = 5.25 / 2;
3056 /* thin layer of material between pipe and support; to be put back later */
3057 const float kVespelRmax = Rin + 0.08;
3058 const float kVespelRmin = Rin;
3059 const float kBeampipeCarbonCollarRmin = Rin + 0.18; // 2.4;
3060 const float kBeampipeCarbonCollarRmax = Rout; // 2.7;
3061
3062 const float kFixationCarbonCollarRmin = 1.5;
3063 const float kFixationCarbonCollarRmax = 1.7;
3064 const float kFixationCarbonCollarDZ = 2.5;
3065
3066 const float kSkinThickness = 0.1;
3067 const float kSkinXdim = skinLength; // 14.25;
3068 const float kSkinYdim = 1.;
3069 const float kSkinZdim = kFixationCarbonCollarDZ;
3070 const float kCarbonEarsXdim = 1.01;
3071 const float kCarbonEarsYdim = 0.2;
3072 const float kCarbonEarsZdim = kFixationCarbonCollarDZ;
3073
3074 const TGeoMedium* kMedRohacell = gGeoManager->GetMedium("PIPE_ROHACELL");
3075 const TGeoMedium* kMedPolyimide = gGeoManager->GetMedium("PIPE_POLYIMIDE");
3076 const TGeoMedium* kMedCarbonFiber = gGeoManager->GetMedium("PIPE_M55J6K");
3077
3078 TGeoVolume* beamPipeSupport = new TGeoVolumeAssembly(Form("BeampipeSupport_%s", tag));
3079
3080 // Support Bar
3081 TGeoVolumeAssembly* supportBar = new TGeoVolumeAssembly(Form("BPS_SupportBar_%s", tag));
3082
3083 TGeoBBox* carbonSkinBPS = new TGeoBBox(kSkinXdim / 2., kSkinYdim / 2., kSkinZdim / 2.);
3084 carbonSkinBPS->SetName(Form("carbonSkinBPS_%s", tag));
3085
3086 TGeoBBox* foambarBPS = new TGeoBBox(Form("foambarBPS_%s", tag), kSkinXdim / 2. - kSkinThickness, kSkinYdim / 2. - kSkinThickness,
3087 kSkinZdim / 2. - kSkinThickness / 2.);
3088 TGeoBBox* carbonEarsBPS = new TGeoBBox(kCarbonEarsXdim / 2., kCarbonEarsYdim / 2., kCarbonEarsZdim / 2.);
3089 carbonEarsBPS->SetName(Form("carbonEarsBPS_%s", tag));
3090
3091 // TODO: could reuse those?..
3092 TGeoTranslation* transBP1 = new TGeoTranslation(Form("transBP1_%s", tag), (kSkinXdim + kCarbonEarsXdim) / 2., 0., 0.);
3093 transBP1->RegisterYourself();
3094 TGeoTranslation* transBP2 = new TGeoTranslation(Form("transBP2_%s", tag), -(kSkinXdim + kCarbonEarsXdim) / 2., 0., 0.);
3095 transBP2->RegisterYourself();
3096 TGeoCompositeShape* supportBarCarbon = new TGeoCompositeShape(
3097 Form("BPS_supportBarCarbon_%s", tag), Form("(carbonSkinBPS_%s-foambarBPS_%s)+carbonEarsBPS_%s:transBP1_%s+carbonEarsBPS_%s:transBP2_%s", tag, tag, tag, tag, tag, tag));
3098
3099 TGeoVolume* supportBarCarbonVol = new TGeoVolume(Form("BPS_supportBarCarbon_%s", tag), supportBarCarbon, kMedCarbonFiber);
3100 supportBarCarbonVol->SetLineColor(kGray + 3);
3101
3102 supportBar->AddNode(supportBarCarbonVol, 1, new TGeoTranslation(kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax, 0, 0));
3103 supportBar->AddNode(supportBarCarbonVol, 2, new TGeoTranslation(-(kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax), 0, 0));
3104
3105 TGeoVolume* foamVol = new TGeoVolume(Form("supportBarFoam_%s", tag), foambarBPS, kMedRohacell);
3106 foamVol->SetLineColor(kGray);
3107 supportBar->AddNode(foamVol, 1, new TGeoTranslation(kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax, 0, 0));
3108 supportBar->AddNode(foamVol, 2, new TGeoTranslation(-(kSkinXdim / 2. + kCarbonEarsXdim + kBeampipeCarbonCollarRmax), 0, 0));
3109
3110 beamPipeSupport->AddNode(supportBar, 1);
3111
3112 // Fixation to wings
3113 TGeoVolumeAssembly* fixationToWings = new TGeoVolumeAssembly(Form("BPS_fixationToWings_%s", tag));
3114
3115 float delatX = 0.1;
3116
3117 TGeoTubeSeg* fixationTube = new TGeoTubeSeg(kFixationCarbonCollarRmin, kFixationCarbonCollarRmax, kFixationCarbonCollarDZ / 2., -90., 90.);
3118 fixationTube->SetName(Form("fixationTube_%s", tag));
3119 TGeoBBox* fixationToBar = new TGeoBBox(kCarbonEarsXdim / 2. + delatX, kCarbonEarsYdim / 2., kCarbonEarsZdim / 2.);
3120 fixationToBar->SetName(Form("fixationToBar_%s", tag));
3121
3122 TGeoTranslation* transBP3 = new TGeoTranslation(Form("transBP3_%s", tag), kFixationCarbonCollarRmax + kCarbonEarsXdim / 2. - delatX, kCarbonEarsYdim, 0.);
3123 transBP3->RegisterYourself();
3124 TGeoTranslation* transBP4 = new TGeoTranslation(Form("transBP4_%s", tag), kFixationCarbonCollarRmax + kCarbonEarsXdim / 2. - delatX, -kCarbonEarsYdim, 0.);
3125 transBP4->RegisterYourself();
3126 TGeoCompositeShape* fixationToWing = new TGeoCompositeShape(Form("fixationToWing_%s", tag), Form("fixationTube_%s+fixationToBar_%s:transBP3_%s+fixationToBar_%s:transBP4_%s", tag, tag, tag, tag, tag));
3127
3128 TGeoVolume* fixationToWingVol = new TGeoVolume(Form("fixationToWing_%s", tag), fixationToWing, kMedCarbonFiber);
3129 fixationToWingVol->SetLineColor(kGray + 2);
3130
3131 fixationToWings->AddNode(fixationToWingVol, 1, new TGeoTranslation(-kSupportXdim, 0, 0));
3132 fixationToWings->AddNode(fixationToWingVol, 2, new TGeoCombiTrans(+kSupportXdim, 0, 0, new TGeoRotation("rot", 0., 0., 180.)));
3133
3134 beamPipeSupport->AddNode(fixationToWings, 1);
3135
3136 // Fixation to pipe
3137
3138 TGeoVolumeAssembly* fixationToPipe = new TGeoVolumeAssembly(Form("fixationToPipe_%s", tag));
3139
3140 TGeoTubeSeg* pipeSupportTubeCarbon = new TGeoTubeSeg(kBeampipeCarbonCollarRmin, kBeampipeCarbonCollarRmax, kFixationCarbonCollarDZ / 2., 0., 180.);
3141 pipeSupportTubeCarbon->SetName(Form("pipeSupportTubeCarbon_%s", tag));
3142
3143 TGeoBBox* fixationTubeToBar = new TGeoBBox(kCarbonEarsXdim / 2. + delatX, kCarbonEarsYdim / 2., kCarbonEarsZdim / 2.);
3144 fixationTubeToBar->SetName(Form("fixationTubeToBar_%s", tag));
3145 TGeoBBox* hole = new TGeoBBox((kBeampipeCarbonCollarRmax - kVespelRmin) / 2., kCarbonEarsYdim / 2., kCarbonEarsZdim / 2. + 1e-3);
3146 hole->SetName(Form("hole_%s", tag));
3147
3148 TGeoTranslation* transBP5 = new TGeoTranslation(Form("transBP5_%s", tag), kBeampipeCarbonCollarRmax + kCarbonEarsXdim / 2. - delatX, kCarbonEarsYdim, 0.);
3149 transBP5->RegisterYourself();
3150 TGeoTranslation* transBP6 = new TGeoTranslation(Form("transBP6_%s", tag), -(kBeampipeCarbonCollarRmax + kCarbonEarsXdim / 2. - delatX), kCarbonEarsYdim, 0.);
3151 transBP6->RegisterYourself();
3152 TGeoTranslation* transBP7 = new TGeoTranslation(Form("transBP7_%s", tag), (kBeampipeCarbonCollarRmax + kVespelRmin) / 2., 0., 0.);
3153 transBP7->RegisterYourself();
3154 TGeoTranslation* transBP8 = new TGeoTranslation(Form("transBP8_%s", tag), -((kBeampipeCarbonCollarRmax + kVespelRmin) / 2.), 0., 0.);
3155 transBP8->RegisterYourself();
3156 TGeoCompositeShape* halfFixationToPipe = new TGeoCompositeShape(
3157 Form("halfFixationToPipe_%s", tag),
3158 Form("(pipeSupportTubeCarbon_%s-hole_%s:transBP7_%s-hole_%s:transBP8_%s)+fixationTubeToBar_%s:transBP5_%s+fixationTubeToBar_%s:transBP6_%s", tag, tag, tag, tag, tag, tag, tag, tag, tag));
3159
3160 TGeoVolume* halfFixationToPipeVol = new TGeoVolume(Form("halfFixationToPipe_%s", tag), halfFixationToPipe, kMedCarbonFiber);
3161 halfFixationToPipeVol->SetLineColor(kRed + 2);
3162
3163 fixationToPipe->AddNode(halfFixationToPipeVol, 1);
3164 fixationToPipe->AddNode(halfFixationToPipeVol, 2, new TGeoCombiTrans(0, 0, 0, new TGeoRotation("rot", 0., 0., 180.)));
3165
3166 beamPipeSupport->AddNode(fixationToPipe, 1);
3167
3168 // Beam Pipe Ring
3169
3170 TGeoVolumeAssembly* beamPipeRing = new TGeoVolumeAssembly(Form("beamPipeRing_%s", tag));
3171
3172 TGeoTube* beamPipeRingCarbon = new TGeoTube(kVespelRmax, kBeampipeCarbonCollarRmin, kBeamPipeRingZdim / 2.);
3173 TGeoVolume* beamPipeRingCarbonVol = new TGeoVolume(Form("beamPipeRingCarbon_%s", tag), beamPipeRingCarbon, kMedCarbonFiber);
3174 beamPipeRingCarbonVol->SetLineColor(kGreen + 2);
3175 beamPipeRing->AddNode(beamPipeRingCarbonVol, 1, new TGeoTranslation(0., 0, (kBeamPipeRingZdim - kFixationCarbonCollarDZ) / 2.));
3176
3177 TGeoTube* beamPipeRingVespel = new TGeoTube(kVespelRmin, kVespelRmax, kBeamPipeRingZdim / 2.);
3178 TGeoVolume* beamPipeRingVespelVol = new TGeoVolume(Form("beamPipeRingVespel_%s", tag), beamPipeRingVespel, kMedPolyimide);
3179 beamPipeRingVespelVol->SetLineColor(kGreen + 4);
3180 beamPipeRing->AddNode(beamPipeRingVespelVol, 1, new TGeoTranslation(0., 0, (kBeamPipeRingZdim - kFixationCarbonCollarDZ) / 2.));
3181
3182 beamPipeSupport->AddNode(beamPipeRing, 1);
3183 beamPipeSupport->SetVisibility(0);
3184
3185 return beamPipeSupport;
3186}
3187
3188// ----------------------------------------------------------------------------
3189FairModule* PipeRun4::CloneModule() const { return new PipeRun4(*this); }
Definition of the Detector class.
int32_t i
ClassImp(IdPath)
static void initFieldTrackingParams(int &mode, float &maxfield)
Definition Detector.cxx:143
static MaterialManager & Instance()
a common base class for passive modules - implementing generic functions
Definition PassiveBase.h:24
FairModule * CloneModule() const override
Clone this object (used in MT mode only)
void ConstructGeometry() override
Definition PipeRun4.cxx:67
GLint GLenum GLint x
Definition glcorearb.h:403
GLdouble GLdouble GLdouble GLdouble top
Definition glcorearb.h:4077
GLuint const GLchar * name
Definition glcorearb.h:781
GLuint GLsizei GLsizei * length
Definition glcorearb.h:790
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
Definition glcorearb.h:5034