Project
Loading...
Searching...
No Matches
Shil.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 <TGeoManager.h>
18#include <TGeoMatrix.h>
19#include <TGeoPcon.h>
20#include <TGeoTube.h>
21#include <TGeoVolume.h>
22#ifdef NDEBUG
23#undef NDEBUG
24#endif
25#include <cassert>
26
27using namespace o2::passive;
28
29#define kDegrad TMath::DegToRad()
30
31Shil::~Shil() = default;
32
33Shil::Shil() : PassiveBase("SHIL", "") {}
34Shil::Shil(const char* name, const char* Title) : PassiveBase(name, Title) {}
35Shil::Shil(const Shil& rhs) = default;
36
37Shil& Shil::operator=(const Shil& rhs)
38{
39 // self assignment
40 if (this == &rhs) {
41 return *this;
42 }
43
44 // base class assignment
45 PassiveBase::operator=(rhs);
46
47 return *this;
48}
49
50void InvertPcon(TGeoPcon* pcon)
51{
52 //
53 // z -> -z
54 //
55 Int_t nz = pcon->GetNz();
56 Double_t* z = new Double_t[nz];
57 Double_t* rmin = new Double_t[nz];
58 Double_t* rmax = new Double_t[nz];
59
60 Double_t* z0 = pcon->GetZ();
61 Double_t* rmin0 = pcon->GetRmin();
62 Double_t* rmax0 = pcon->GetRmax();
63
64 for (Int_t i = 0; i < nz; i++) {
65 z[i] = z0[i];
66 rmin[i] = rmin0[i];
67 rmax[i] = rmax0[i];
68 }
69
70 for (Int_t i = 0; i < nz; i++) {
71 Int_t j = nz - i - 1;
72 pcon->DefineSection(i, -z[j], rmin[j], rmax[j]);
73 }
74
75 delete[] z;
76 delete[] rmin;
77 delete[] rmax;
78}
79
80namespace
81{
82TGeoPcon* MakeShapeFromTemplate(const TGeoPcon* pcon, Float_t drMin, Float_t drMax)
83{
84 //
85 // Returns new shape based on a template changing
86 // the inner radii by drMin and the outer radii by drMax.
87 //
88 Int_t nz = pcon->GetNz();
89 TGeoPcon* cpcon = new TGeoPcon(0., 360., nz);
90 for (Int_t i = 0; i < nz; i++) {
91 cpcon->DefineSection(i, pcon->GetZ(i), pcon->GetRmin(i) + drMin, pcon->GetRmax(i) + drMax);
92 }
93 return cpcon;
94}
95} // namespace
96
98{
99 createMaterials();
100
101 //
102 // The geometry of the small angle absorber "Beam Shield"
103 //
104
105 //
106 // The top volume
107 //
108 TGeoVolume* top = gGeoManager->GetVolume("cave");
109
110 Float_t dz, dr, z, rmax;
111
112 // Rotations
113 TGeoRotation* rot000 = new TGeoRotation("rot000", 90., 0., 90., 90., 0., 0.);
114 TGeoRotation* rot090 = new TGeoRotation("rot090", 90., 90., 90., 180., 0., 0.);
115 TGeoRotation* rot180 = new TGeoRotation("rot180", 90., 180., 90., 270., 0., 0.);
116 TGeoRotation* rot270 = new TGeoRotation("rot270", 90., 270., 90., 0., 0., 0.);
117 Float_t alhc = 0.794;
118 TGeoRotation* rotxzlhc = new TGeoRotation("rotxzlhc", 0., -alhc, 0.);
119 TGeoRotation* rotlhc = new TGeoRotation("rotlhc", 0., alhc, 0.);
120
121 //
122 // Media
123 //
125 auto kMedNiW = matmgr.getTGeoMedium("SHIL_Ni/W0");
126 auto kMedNiWsh = matmgr.getTGeoMedium("SHIL_Ni/W3");
127 //
128 auto kMedSteel = matmgr.getTGeoMedium("SHIL_ST_C0");
129 auto kMedSteelSh = matmgr.getTGeoMedium("SHIL_ST_C3");
130 //
131 auto kMedAir = matmgr.getTGeoMedium("SHIL_AIR_C0");
132 auto kMedAirMu = matmgr.getTGeoMedium("SHIL_AIR_MUON");
133 //
134 auto kMedPb = matmgr.getTGeoMedium("SHIL_PB_C0");
135 auto kMedPbSh = matmgr.getTGeoMedium("SHIL_PB_C2");
136 //
137 auto kMedConcSh = matmgr.getTGeoMedium("SHIL_CC_C2");
138 //
139 auto kMedCastiron = matmgr.getTGeoMedium("SHIL_CAST_IRON0");
140 auto kMedCastironSh = matmgr.getTGeoMedium("SHIL_CAST_IRON2");
141 //
142 const Float_t kDegRad = TMath::Pi() / 180.;
143 const Float_t kAngle02 = TMath::Tan(2.00 * kDegRad);
144 const Float_t kAngle0071 = TMath::Tan(0.71 * kDegRad);
145
147 // FA Tungsten Tail //
148 // Drawing ALIP2A__0049 //
149 // Drawing ALIP2A__0111 //
151 //
152 // The tail as built is shorter than in drawing ALIP2A__0049.
153 // The CDD data base has to be updated !
154 //
155 // Inner radius at the entrance of the flange
156 Float_t rInFaWTail1 = 13.98 / 2.;
157 // Outer radius at the entrance of the flange
158 Float_t rOuFaWTail1 = 52.00 / 2.;
159 // Outer radius at the end of the section inside the FA
160 Float_t rOuFaWTail2 = 35.27 / 2.;
161 // Length of the Flange section inside the FA
162 Float_t dzFaWTail1 = 6.00;
163 // Length of the Flange section ouside the FA
164 Float_t dzFaWTail2 = 12.70;
165 // Inner radius at the end of the section inside the FA
166 Float_t rInFaWTail2 = rInFaWTail1 + dzFaWTail1 * kAngle0071;
167 // Inner radius at the end of the flange
168 Float_t rInFaWTail3 = rInFaWTail2 + dzFaWTail2 * kAngle0071;
169 // Outer radius at the end of the flange
170 Float_t rOuFaWTail3 = rOuFaWTail2 + dzFaWTail2 * kAngle02;
171 // Outer radius of the recess for station 1
172 Float_t rOuFaWTailR = 30.8 / 2.;
173 // Length of the recess
174 Float_t dzFaWTailR = 36.00;
175 // Inner radiues at the end of the recess
176 Float_t rInFaWTail4 = rInFaWTail3 + dzFaWTailR * kAngle0071;
177 // Outer radius at the end of the recess
178 Float_t rOuFaWTail4 = rOuFaWTail3 + dzFaWTailR * kAngle02;
179 // Inner radius of the straight section
180 Float_t rInFaWTailS = 22.30 / 2.;
181 // Length of the bulge
182 Float_t dzFaWTailB = 13.0;
183 // Outer radius at the end of the bulge
184 Float_t rOuFaWTailB = rOuFaWTail4 + dzFaWTailB * kAngle02;
185 // Outer radius at the end of the tail
186 Float_t rOuFaWTailE = 31.6 / 2.;
187 // Total length of the tail
188 const Float_t dzFaWTail = 70.7 - 6.;
189
190 TGeoPcon* shFaWTail = new TGeoPcon(0., 360., 8);
191 z = 0.;
192 // Flange section inside FA (moved to ABSO)
193 // shFaWTail->DefineSection(0, z, rInFaWTail1, rOuFaWTail1);
194 // z += dzFaWTail1;
195 // shFaWTail->DefineSection(1, z, rInFaWTail2, rOuFaWTail1);
196 shFaWTail->DefineSection(0, z, rInFaWTail2, rOuFaWTail2);
197 // Flange section outside FA
198 z += dzFaWTail2;
199 shFaWTail->DefineSection(1, z, rInFaWTail3, rOuFaWTail3);
200 shFaWTail->DefineSection(2, z, rInFaWTail3, rOuFaWTailR);
201 // Recess Station 1
202 z += dzFaWTailR;
203 shFaWTail->DefineSection(3, z, rInFaWTail4, rOuFaWTailR);
204 shFaWTail->DefineSection(4, z, rInFaWTailS, rOuFaWTail4);
205 // Bulge
206 z += dzFaWTailB;
207 shFaWTail->DefineSection(5, z, rInFaWTailS, rOuFaWTailB);
208 shFaWTail->DefineSection(6, z, rInFaWTailS, rOuFaWTailE);
209 // End
210 z = dzFaWTail;
211 shFaWTail->DefineSection(7, z, rInFaWTailS, rOuFaWTailE);
212
213 TGeoVolume* voFaWTail = new TGeoVolume("YFaWTail", shFaWTail, kMedNiW);
214 //
215 // Define an inner region with higher transport cuts
216 TGeoPcon* shFaWTailI = new TGeoPcon(0., 360., 4);
217 z = 0.;
218 dr = 3.5;
219 shFaWTailI->DefineSection(0, z, rInFaWTail2, rInFaWTail2 + dr);
220 z += (dzFaWTail2 + dzFaWTailR);
221 shFaWTailI->DefineSection(1, z, rInFaWTail4, rInFaWTail4 + dr);
222 shFaWTailI->DefineSection(2, z, rInFaWTailS, rInFaWTailS + dr);
223 z = dzFaWTail;
224 shFaWTailI->DefineSection(3, z, rInFaWTailS, rInFaWTailS + dr);
225 TGeoVolume* voFaWTailI = new TGeoVolume("YFaWTailI", shFaWTailI, kMedNiWsh);
226 voFaWTail->AddNode(voFaWTailI, 1, gGeoIdentity);
227
229 // //
230 // Recess Station 1 //
231 // Drawing ALIP2A__0260 //
233
235 // FA W-Ring 2 //
236 // Drawing ALIP2A__0220 //
238 const Float_t kFaWring2Rinner = 15.41;
239 const Float_t kFaWring2Router = 18.40;
240 const Float_t kFaWring2HWidth = 3.75;
241 const Float_t kFaWring2Cutoffx = 3.35;
242 const Float_t kFaWring2Cutoffy = 3.35;
243 TGeoTubeSeg* shFaWring2a = new TGeoTubeSeg(kFaWring2Rinner, kFaWring2Router, kFaWring2HWidth, 0., 90.);
244 shFaWring2a->SetName("shFaWring2a");
245 TGeoBBox* shFaWring2b = new TGeoBBox(kFaWring2Router / 2., kFaWring2Router / 2., kFaWring2HWidth);
246 shFaWring2b->SetName("shFaWring2b");
247 TGeoTranslation* trFaWring2b = new TGeoTranslation("trFaWring2b", kFaWring2Router / 2. + kFaWring2Cutoffx,
248 kFaWring2Router / 2. + kFaWring2Cutoffy, 0.);
249 trFaWring2b->RegisterYourself();
250 TGeoCompositeShape* shFaWring2 = new TGeoCompositeShape("shFaWring2", "(shFaWring2a)*(shFaWring2b:trFaWring2b)");
251 TGeoVolume* voFaWring2 = new TGeoVolume("YFA_WRING2", shFaWring2, kMedNiW);
252
254 // FA W-Ring 3 //
255 // Drawing ALIP2A__0219 //
257 const Float_t kFaWring3Rinner = 15.41;
258 const Float_t kFaWring3Router = 18.40;
259 const Float_t kFaWring3HWidth = 3.75;
260 const Float_t kFaWring3Cutoffx = 3.35;
261 const Float_t kFaWring3Cutoffy = 3.35;
262 TGeoTubeSeg* shFaWring3a = new TGeoTubeSeg(kFaWring3Rinner, kFaWring3Router, kFaWring3HWidth, 0., 90.);
263 shFaWring3a->SetName("shFaWring3a");
264 TGeoBBox* shFaWring3b = new TGeoBBox(kFaWring3Router / 2., kFaWring3Router / 2., kFaWring3HWidth);
265 shFaWring3b->SetName("shFaWring3b");
266 TGeoTranslation* trFaWring3b = new TGeoTranslation("trFaWring3b", kFaWring3Router / 2. + kFaWring3Cutoffx,
267 kFaWring3Router / 2. + kFaWring3Cutoffy, 0.);
268 trFaWring3b->RegisterYourself();
269 TGeoCompositeShape* shFaWring3 = new TGeoCompositeShape("shFaWring3", "(shFaWring3a)*(shFaWring3b:trFaWring3b)");
270 TGeoVolume* voFaWring3 = new TGeoVolume("YFA_WRING3", shFaWring3, kMedNiW);
271
273 // FA W-Ring 5 //
274 // Drawing ALIP2A__0221 //
276 const Float_t kFaWring5Rinner = 15.41;
277 const Float_t kFaWring5Router = 18.67;
278 const Float_t kFaWring5HWidth = 1.08;
279 TGeoVolume* voFaWring5 =
280 new TGeoVolume("YFA_WRING5", new TGeoTube(kFaWring5Rinner, kFaWring5Router, kFaWring5HWidth), kMedNiW);
281
282 //
283 // Position the rings in the assembly
284 //
285 TGeoVolumeAssembly* asFaExtraShield = new TGeoVolumeAssembly("YCRE");
286 // Distance between rings
287 const Float_t kFaDWrings = 1.92;
288 //
289 dz = 0.;
290
291 dz += kFaWring2HWidth;
292 asFaExtraShield->AddNode(voFaWring2, 1, new TGeoCombiTrans(0., 0., dz, rot180));
293 asFaExtraShield->AddNode(voFaWring2, 2, new TGeoCombiTrans(0., 0., dz, rot000));
294 dz += kFaWring2HWidth;
295 dz += kFaDWrings;
296 dz += kFaWring3HWidth;
297 asFaExtraShield->AddNode(voFaWring3, 1, new TGeoCombiTrans(0., 0., dz, rot090));
298 asFaExtraShield->AddNode(voFaWring3, 2, new TGeoCombiTrans(0., 0., dz, rot270));
299 dz += kFaWring3HWidth;
300 dz += kFaWring5HWidth;
301 asFaExtraShield->AddNode(voFaWring5, 1, new TGeoTranslation(0., 0., dz));
302 dz += kFaWring5HWidth;
303 dz += kFaWring3HWidth;
304 asFaExtraShield->AddNode(voFaWring3, 3, new TGeoCombiTrans(0., 0., dz, rot180));
305 asFaExtraShield->AddNode(voFaWring3, 4, new TGeoCombiTrans(0., 0., dz, rot000));
306 dz += kFaWring3HWidth;
307 dz += kFaDWrings;
308 dz += kFaWring2HWidth;
309 asFaExtraShield->AddNode(voFaWring2, 3, new TGeoCombiTrans(0., 0., dz, rot090));
310 asFaExtraShield->AddNode(voFaWring2, 4, new TGeoCombiTrans(0., 0., dz, rot270));
311 dz += kFaWring2HWidth;
312
314 // SAA1 //
316
318 // FA/SAA1 W Joint //
319 // Drawing ALIP2A__0060 //
321
322 // Length of flange FA side
323 Float_t dzFaSaa1F1 = 2.8;
324 // Inner radius of flange FA side
325 Float_t rInFaSaa1F1 = 32.0 / 2.;
326 // Outer radius of flange FA side
327 Float_t rOuFaSaa1F1 = 39.5 / 2.;
328 // Length of first straight section
329 Float_t dzFaSaa1S1 = 18.5 - dzFaSaa1F1;
330 // Inner radius of first straight section
331 Float_t rInFaSaa1S1 = 22.3 / 2.;
332 // Length of 45 deg transition region
333 Float_t dzFaSaa1T1 = 2.2;
334 // Inner radius of second straight section
335 Float_t rInFaSaa1S2 = 17.9 / 2.;
336 // Length of second straight section
337 Float_t dzFaSaa1S2 = 10.1;
338 // Length of flange SAA1 side
339 // Float_t dzFaSaa1F2 = 4.0;
340 // Inner radius of flange FA side
341 Float_t rInFaSaa1F2 = 25.2 / 2.;
342 // Length of joint
343 const Float_t dzFaSaa1 = 34.8;
344 // Outer Radius at the end of the joint
345 Float_t rOuFaSaa1E = 41.93 / 2.;
346
347 TGeoPcon* shFaSaa1 = new TGeoPcon(0., 360., 8);
348 z = 0;
349 // Flange FA side
350 shFaSaa1->DefineSection(0, z, rInFaSaa1F1, rOuFaSaa1F1 - 0.01);
351 z += dzFaSaa1F1;
352 shFaSaa1->DefineSection(1, z, rInFaSaa1F1, 40.0);
353 shFaSaa1->DefineSection(2, z, rInFaSaa1S1, 40.0);
354 // First straight section
355 z += dzFaSaa1S1;
356 shFaSaa1->DefineSection(3, z, rInFaSaa1S1, 40.0);
357 // 45 deg transition region
358 z += dzFaSaa1T1;
359 shFaSaa1->DefineSection(4, z, rInFaSaa1S2, 40.0);
360 // Second straight section
361 z += dzFaSaa1S2;
362 shFaSaa1->DefineSection(5, z, rInFaSaa1S2, 40.0);
363 shFaSaa1->DefineSection(6, z, rInFaSaa1F2, 40.0);
364 // Flange SAA1 side
365 z = dzFaSaa1;
366 shFaSaa1->DefineSection(7, z, rInFaSaa1F2, rOuFaSaa1E - 0.01);
367
368 // Outer 2 deg line
369 for (Int_t i = 1; i < 7; i++) {
370 Double_t zp = shFaSaa1->GetZ(i);
371 Double_t r1 = shFaSaa1->GetRmin(i);
372 Double_t r2 = 39.5 / 2. + zp * TMath::Tan(2. * kDegRad) - 0.01;
373 shFaSaa1->DefineSection(i, zp, r1, r2);
374 }
375 TGeoVolume* voFaSaa1 = new TGeoVolume("YFASAA1", shFaSaa1, kMedNiWsh);
376 //
377 // Outer region with lower transport cuts
378 TGeoCone* shFaSaa1O =
379 new TGeoCone(dzFaSaa1 / 2., rOuFaSaa1F1 - 3.5, rOuFaSaa1F1 - 0.01, rOuFaSaa1E - 3.5, rOuFaSaa1E - 0.01);
380 TGeoVolume* voFaSaa1O = new TGeoVolume("YFASAA1O", shFaSaa1O, kMedNiW);
381 voFaSaa1->AddNode(voFaSaa1O, 1, new TGeoTranslation(0., 0., dzFaSaa1 / 2.));
382
384 // SAA1 Steel Envelope //
385 // Drawing ALIP2A__0039 //
387
388 Float_t rOut; // Outer radius
389 // Thickness of the steel envelope
390 Float_t dSt = 4.;
391 // 4 Section
392 // z-positions
393 Float_t zSaa1StEnv[5] = {111.2, 113.7, 229.3, 195.0};
394 // Radii
395 // 1
396 Float_t rOuSaa1StEnv1 = 40.4 / 2.;
397 Float_t rInSaa1StEnv1 = rOuSaa1StEnv1 - dSt - 0.05;
398 // 2
399 Float_t rInSaa1StEnv2 = 41.7 / 2.;
400 Float_t rOuSaa1StEnv2 = rInSaa1StEnv2 + dSt / TMath::Cos(2.0 * kDegRad) - 0.05;
401 // 3
402 Float_t rOuSaa1StEnv3 = 57.6 / 2.;
403 Float_t rInSaa1StEnv3 = rOuSaa1StEnv3 - dSt + 0.05;
404 // 4
405 Float_t rInSaa1StEnv4 = 63.4 / 2.;
406 Float_t rOuSaa1StEnv4 = rInSaa1StEnv4 + dSt / TMath::Cos(1.6 * kDegRad) - 0.05;
407 // end
408 Float_t rInSaa1StEnv5 = 74.28 / 2.;
409 Float_t rOuSaa1StEnv5 = rInSaa1StEnv5 + dSt / TMath::Cos(1.6 * kDegRad) - 0.05;
410 // Relative starting position
411 Float_t zSaa1StEnvS = 3.;
412
413 TGeoPcon* shSaa1StEnv = new TGeoPcon(0., 360., 11);
414 // 1st Section
415 z = zSaa1StEnvS;
416 shSaa1StEnv->DefineSection(0, z, rInSaa1StEnv1, rOuSaa1StEnv1);
417 z += (zSaa1StEnv[0] - dSt);
418 shSaa1StEnv->DefineSection(1, z, rInSaa1StEnv1, rOuSaa1StEnv1);
419 // 1 - 2
420 shSaa1StEnv->DefineSection(2, z, rInSaa1StEnv1, rOuSaa1StEnv2);
421 z += dSt;
422 shSaa1StEnv->DefineSection(3, z, rInSaa1StEnv1, rOuSaa1StEnv2);
423 // 2nd Section
424 shSaa1StEnv->DefineSection(4, z, rInSaa1StEnv2, rOuSaa1StEnv2);
425 z += zSaa1StEnv[1];
426 shSaa1StEnv->DefineSection(5, z, rInSaa1StEnv3, rOuSaa1StEnv3);
427 // 3rd Section
428 z += (zSaa1StEnv[2] - dSt);
429 shSaa1StEnv->DefineSection(6, z, rInSaa1StEnv3, rOuSaa1StEnv3);
430 // 3 - 4
431 shSaa1StEnv->DefineSection(7, z, rInSaa1StEnv3, rOuSaa1StEnv4);
432 z += dSt;
433 shSaa1StEnv->DefineSection(8, z, rInSaa1StEnv3, rOuSaa1StEnv4);
434 // 4th Section
435 shSaa1StEnv->DefineSection(9, z, rInSaa1StEnv4, rOuSaa1StEnv4);
436 z += zSaa1StEnv[3];
437 shSaa1StEnv->DefineSection(10, z, rInSaa1StEnv5, rOuSaa1StEnv5);
438 TGeoVolume* voSaa1StEnv = new TGeoVolume("YSAA1_SteelEnvelope", shSaa1StEnv, kMedSteel);
439
441 // SAA1 W-Pipe //
442 // Drawing ALIP2A__0059 //
444 //
445 // Flange FA side
446 // Length of first section
447 Float_t dzSaa1WPipeF1 = 0.9;
448 // Outer radius
449 Float_t rOuSaa1WPipeF1 = 24.5 / 2.;
450 // Inner Radius
451 Float_t rInSaa1WPipeF1 = 22.0 / 2.;
452 // Length of second section
453 Float_t dzSaa1WPipeF11 = 2.1;
454 // Inner Radius
455 Float_t rInSaa1WPipeF11 = 18.5 / 2.;
456 //
457 // Central tube
458 // Length
459 Float_t dzSaa1WPipeC = 111.2;
460 // Inner Radius at the end
461 Float_t rInSaa1WPipeC = 22.0 / 2.;
462 // Outer Radius
463 Float_t rOuSaa1WPipeC = 31.9 / 2.;
464 //
465 // Flange SAA2 Side
466 // Length
467 Float_t dzSaa1WPipeF2 = 6.0;
468 // Outer radius
469 Float_t rOuSaa1WPipeF2 = 41.56 / 2.;
470
471 //
472 TGeoPcon* shSaa1WPipe = new TGeoPcon(0., 360., 8);
473 z = 0.;
474 // Flange FA side first section
475 shSaa1WPipe->DefineSection(0, z, rInSaa1WPipeF1, rOuSaa1WPipeF1);
476 z += dzSaa1WPipeF1;
477 shSaa1WPipe->DefineSection(1, z, rInSaa1WPipeF1, rOuSaa1WPipeF1);
478 // Flange FA side second section
479 shSaa1WPipe->DefineSection(2, z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
480 z += dzSaa1WPipeF11;
481 shSaa1WPipe->DefineSection(3, z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
482 // Central Section
483 shSaa1WPipe->DefineSection(4, z, rInSaa1WPipeF11, rOuSaa1WPipeC);
484 z += dzSaa1WPipeC;
485 shSaa1WPipe->DefineSection(5, z, rInSaa1WPipeC, rOuSaa1WPipeC);
486 // Flange SAA2 side
487 shSaa1WPipe->DefineSection(6, z, rInSaa1WPipeC, rOuSaa1WPipeF2);
488 z += dzSaa1WPipeF2;
489 shSaa1WPipe->DefineSection(7, z, rInSaa1WPipeC, rOuSaa1WPipeF2);
490
491 TGeoVolume* voSaa1WPipe = new TGeoVolume("YSAA1_WPipe", shSaa1WPipe, kMedNiW);
492 //
493 // Inner region with higher transport cuts
494 TGeoTube* shSaa1WPipeI = new TGeoTube(rInSaa1WPipeC, rOuSaa1WPipeC, dzSaa1WPipeC / 2.);
495 TGeoVolume* voSaa1WPipeI = new TGeoVolume("YSAA1_WPipeI", shSaa1WPipeI, kMedNiWsh);
496 voSaa1WPipe->AddNode(voSaa1WPipeI, 1, new TGeoTranslation(0., 0., dzSaa1WPipeF1 + dzSaa1WPipeF11 + dzSaa1WPipeC / 2));
497
499 // SAA1 Pb Components //
500 // Drawing ALIP2A__0078 //
502 //
503 // Inner angle
504 Float_t tanAlpha = TMath::Tan(1.69 / 2. * kDegRad);
505 Float_t tanBeta = TMath::Tan(3.20 / 2. * kDegRad);
506 //
507 // 1st Section 2deg opening cone
508 // Length
509 Float_t dzSaa1PbComp1 = 100.23;
510 // Inner radius at entrance
511 Float_t rInSaa1PbComp1 = 22.0 / 2.; // It's 21 cm diameter in the drawing. Is this a typo ??!!
512 // Outer radius at entrance
513 Float_t rOuSaa1PbComp1 = 42.0 / 2.;
514 //
515 // 2nd Section: Straight Section
516 // Length
517 Float_t dzSaa1PbComp2 = 236.77;
518 // Inner radius
519 Float_t rInSaa1PbComp2 = rInSaa1PbComp1 + dzSaa1PbComp1 * tanAlpha;
520 // Outer radius
521 Float_t rOuSaa1PbComp2 = 49.0 / 2.;
522 //
523 // 3rd Section: 1.6deg opening cone until bellow
524 // Length
525 Float_t dzSaa1PbComp3 = 175.6;
526 // Inner radius
527 Float_t rInSaa1PbComp3 = rInSaa1PbComp2 + dzSaa1PbComp2 * tanAlpha;
528 // Outer radius
529 Float_t rOuSaa1PbComp3 = 62.8 / 2.;
530 //
531 // 4th Section: Bellow region
532 Float_t dzSaa1PbComp4 = 26.4;
533 // Inner radius
534 Float_t rInSaa1PbComp4 = 37.1 / 2.;
535 Float_t rInSaa1PbCompB = 43.0 / 2.;
536 // Outer radius
537 Float_t rOuSaa1PbComp4 = rOuSaa1PbComp3 + dzSaa1PbComp3 * tanBeta;
538 //
539 // 5th Section: Flange SAA2 side
540 // 1st detail
541 Float_t dzSaa1PbCompF1 = 4.;
542 Float_t rOuSaa1PbCompF1 = 74.1 / 2.;
543 // 2nd detail
544 Float_t dzSaa1PbCompF2 = 3.;
545 Float_t rOuSaa1PbCompF2 = 66.0 / 2.;
546 Float_t rOuSaa1PbCompF3 = 58.0 / 2.;
547
548 TGeoPcon* shSaa1PbComp = new TGeoPcon(0., 360., 11);
549 z = 120.2;
550 // 2 deg opening cone
551 shSaa1PbComp->DefineSection(0, z, rInSaa1PbComp1, rOuSaa1PbComp1);
552 z += dzSaa1PbComp1;
553 shSaa1PbComp->DefineSection(1, z, rInSaa1PbComp2, rOuSaa1PbComp2);
554 // Straight section
555 z += dzSaa1PbComp2;
556 shSaa1PbComp->DefineSection(2, z, rInSaa1PbComp3, rOuSaa1PbComp2);
557 // 1.6 deg opening cone
558 shSaa1PbComp->DefineSection(3, z, rInSaa1PbComp3, rOuSaa1PbComp3);
559 z += dzSaa1PbComp3;
560 shSaa1PbComp->DefineSection(4, z, rInSaa1PbComp4, rOuSaa1PbComp4);
561 // Bellow region until outer flange
562 shSaa1PbComp->DefineSection(5, z, rInSaa1PbCompB, rOuSaa1PbComp4);
563 z += (dzSaa1PbComp4 - dzSaa1PbCompF1 - dzSaa1PbCompF2);
564 shSaa1PbComp->DefineSection(6, z, rInSaa1PbCompB, rOuSaa1PbCompF1);
565 shSaa1PbComp->DefineSection(7, z, rInSaa1PbCompB, rOuSaa1PbCompF2);
566 // Flange first step
567 z += dzSaa1PbCompF1;
568 shSaa1PbComp->DefineSection(8, z, rInSaa1PbCompB, rOuSaa1PbCompF2);
569 shSaa1PbComp->DefineSection(9, z, rInSaa1PbCompB, rOuSaa1PbCompF3);
570 // Flange second step
571 z += dzSaa1PbCompF2;
572 shSaa1PbComp->DefineSection(10, z, rInSaa1PbCompB, rOuSaa1PbCompF3);
573
574 TGeoVolume* voSaa1PbComp = new TGeoVolume("YSAA1_PbComp", shSaa1PbComp, kMedPb);
575 //
576 // Inner region with higher transport cuts
577 TGeoPcon* shSaa1PbCompI = MakeShapeFromTemplate(shSaa1PbComp, 0., -3.);
578 TGeoVolume* voSaa1PbCompI = new TGeoVolume("YSAA1_PbCompI", shSaa1PbCompI, kMedPbSh);
579 voSaa1PbComp->AddNode(voSaa1PbCompI, 1, gGeoIdentity);
580
582 // SAA1 W-Cone //
583 // Drawing ALIP2A__0058 //
585 // Length of the Cone
586 Float_t dzSaa1WCone = 52.9;
587 // Inner and outer radii
588 Float_t rInSaa1WCone1 = 20.4;
589 Float_t rOuSaa1WCone1 = rInSaa1WCone1 + 0.97;
590 Float_t rOuSaa1WCone2 = rInSaa1WCone1 + 2.80;
591 // relative z-position
592 Float_t zSaa1WCone = 9.3;
593
594 TGeoPcon* shSaa1WCone = new TGeoPcon(0., 360., 2);
595 z = zSaa1WCone;
596 shSaa1WCone->DefineSection(0, z, rInSaa1WCone1, rOuSaa1WCone1);
597 z += dzSaa1WCone;
598 shSaa1WCone->DefineSection(1, z, rInSaa1WCone1, rOuSaa1WCone2);
599 TGeoVolume* voSaa1WCone = new TGeoVolume("YSAA1_WCone", shSaa1WCone, kMedNiW);
600
602 // SAA1 Steel-Ring //
603 // Drawing ALIP2A__0040 //
605 //
606 // Length of the ring
607 Float_t dzSaa1StRing = 4.;
608 // Inner and outer radius
609 Float_t rInSaa1String = 33.0;
610 Float_t rOuSaa1String = 41.1;
611 // Relative z-position
612 Float_t zSaa1StRing = 652.2;
613 TGeoPcon* shSaa1StRing = new TGeoPcon(0., 360., 2);
614 z = zSaa1StRing;
615 shSaa1StRing->DefineSection(0, z, rInSaa1String, rOuSaa1String);
616 z += dzSaa1StRing;
617 shSaa1StRing->DefineSection(1, z, rInSaa1String, rOuSaa1String);
618 TGeoVolume* voSaa1StRing = new TGeoVolume("YSAA1_StRing", shSaa1StRing, kMedSteel);
619
621 // SAA1 Inner Tube //
622 // Drawing ALIP2A__0082 //
624 //
625 // Length of saa2: 659.2 cm
626 // Length of inner tube: 631.9 cm
627 // Lenth of bellow cavern: 27.3 cm
628 // Radius at entrance 18.5/2, d = 0.3
629 // Radius at exit 37.1/2, d = 0.3
630 //
631 Float_t dzSaa1InnerTube = 631.9 / 2.; // Half length of the tube
632 Float_t rInSaa1InnerTube = 18.2 / 2.; // Radius at entrance
633 Float_t rOuSaa1InnerTube = 36.8 / 2.; // Radius at exit
634 Float_t dSaa1InnerTube = 0.2; // Thickness
635 TGeoVolume* voSaa1InnerTube =
636 new TGeoVolume("YSAA1_InnerTube", new TGeoCone(dzSaa1InnerTube, rInSaa1InnerTube - dSaa1InnerTube, rInSaa1InnerTube, rOuSaa1InnerTube - dSaa1InnerTube, rOuSaa1InnerTube),
637 kMedSteelSh);
638
640 // SAA1 Outer Shape //
641 // Drawing ALIP2A__0107 //
643 // Total length
644 const Float_t dzSaa1 = 659.2;
645 //
646 TGeoPcon* shSaa1M = new TGeoPcon(0., 360., 20);
647 Float_t kSec = 0.2; // security distance to avoid trivial extrusions
648 Float_t rmin = rInSaa1InnerTube - dSaa1InnerTube - kSec;
649 rmax = rOuSaa1InnerTube - dSaa1InnerTube - kSec;
650 z = 0.;
651 shSaa1M->DefineSection(0, z, rmin, rOuSaa1WPipeF1);
652 z += dzSaa1WPipeF1;
653 shSaa1M->DefineSection(1, z, rmin, rOuSaa1WPipeF1);
654 shSaa1M->DefineSection(2, z, 0., rOuSaa1WPipeF1);
655 z += dzSaa1WPipeF11;
656 shSaa1M->DefineSection(3, z, 0., rOuSaa1WPipeF1);
657 shSaa1M->DefineSection(4, z, 0., rOuSaa1StEnv1);
658 z = zSaa1WCone;
659 shSaa1M->DefineSection(5, z, 0., rOuSaa1StEnv1);
660 shSaa1M->DefineSection(6, z, 0., rOuSaa1WCone1);
661 z += dzSaa1WCone;
662 shSaa1M->DefineSection(7, z, 0., rOuSaa1WCone2);
663 shSaa1M->DefineSection(8, z, 0., rOuSaa1StEnv1);
664 z = zSaa1StEnv[0] - dSt + zSaa1StEnvS;
665 shSaa1M->DefineSection(9, z, 0., rOuSaa1StEnv1);
666 shSaa1M->DefineSection(10, z, 0., rOuSaa1StEnv2);
667 z += (zSaa1StEnv[1] + dSt);
668 shSaa1M->DefineSection(11, z, 0., rOuSaa1StEnv3);
669 z += (zSaa1StEnv[2] - dSt);
670 shSaa1M->DefineSection(12, z, 0., rOuSaa1StEnv3);
671 shSaa1M->DefineSection(13, z, 0., rOuSaa1StEnv4);
672
673 z += (zSaa1StEnv[3] - dSt + dzSaa1PbCompF1 + dzSaa1PbCompF2 - dzSaa1PbComp4);
674 Float_t rmaxSaa1 = shSaa1M->GetRmax(13) + (z - shSaa1M->GetZ(13)) * TMath::Tan(1.6 * kDegRad);
675
676 shSaa1M->DefineSection(14, z, 0., rmaxSaa1);
677 shSaa1M->DefineSection(15, z, rmax, rmaxSaa1);
678 z = zSaa1StRing;
679 shSaa1M->DefineSection(16, z, rmax + 0.4, rOuSaa1String);
680 z += dzSaa1PbCompF1;
681 shSaa1M->DefineSection(17, z, rmax + 0.4, rOuSaa1String);
682 shSaa1M->DefineSection(18, z, rmax + 0.4, rOuSaa1PbCompF3);
683 z += dzSaa1PbCompF2;
684 shSaa1M->DefineSection(19, z, rmax + 0.4, rOuSaa1PbCompF3);
685
686 //
687 // Inner 1.69deg line
688 for (Int_t i = 2; i < 15; i++) {
689 Double_t zp = shSaa1M->GetZ(i);
690 Double_t r2 = shSaa1M->GetRmax(i);
691 Double_t r1 = rmin + (zp - 0.9) * TMath::Tan(1.686 / 2. * kDegRad) - kSec;
692 shSaa1M->DefineSection(i, zp, r1, r2);
693 }
694
695 TGeoVolume* voSaa1M = new TGeoVolume("YSAA1M", shSaa1M, kMedAir);
696 voSaa1M->SetVisibility(0);
697
699 // //
700 // Recess Station 2 //
701 // Drawing ALIP2A__0260 //
704 // SAA1 W-Ring 1 //
705 // Drawing ALIP2A__0217 //
707 Float_t saa1Wring1Width = 5.85;
708 TGeoPcon* shSaa1Wring1 = new TGeoPcon(0., 360., 2);
709 shSaa1Wring1->DefineSection(0, 0.00, 20.31, 23.175);
710 shSaa1Wring1->DefineSection(1, saa1Wring1Width, 20.31, 23.400);
711 TGeoVolume* voSaa1Wring1 = new TGeoVolume("YSAA1_WRING1", shSaa1Wring1, kMedNiW);
712
714 // SAA1 W-Ring 2 //
715 // Drawing ALIP2A__0055 //
717 Float_t saa1Wring2Rinner = 20.31;
718 Float_t saa1Wring2Router = 23.40;
719 Float_t saa1Wring2HWidth = 3.75;
720 Float_t saa1Wring2Cutoffx = 4.9;
721 Float_t saa1Wring2Cutoffy = 4.9;
722 TGeoTubeSeg* shSaa1Wring2a = new TGeoTubeSeg(saa1Wring2Rinner, saa1Wring2Router, saa1Wring2HWidth, 0., 90.);
723 shSaa1Wring2a->SetName("shSaa1Wring2a");
724 TGeoBBox* shSaa1Wring2b = new TGeoBBox(saa1Wring2Router / 2., saa1Wring2Router / 2., saa1Wring2HWidth);
725 shSaa1Wring2b->SetName("shSaa1Wring2b");
726 TGeoTranslation* trSaa1Wring2b = new TGeoTranslation("trSaa1Wring2b", saa1Wring2Router / 2. + saa1Wring2Cutoffx,
727 saa1Wring2Router / 2. + saa1Wring2Cutoffy, 0.);
728 trSaa1Wring2b->RegisterYourself();
729 TGeoCompositeShape* shSaa1Wring2 =
730 new TGeoCompositeShape("shSaa1Wring2", "(shSaa1Wring2a)*(shSaa1Wring2b:trSaa1Wring2b)");
731 TGeoVolume* voSaa1Wring2 = new TGeoVolume("YSAA1_WRING2", shSaa1Wring2, kMedNiW);
732
734 // SAA1 W-Ring 3 //
735 // Drawing ALIP2A__0216 //
737
738 Float_t saa1Wring3Rinner = 20.31;
739 Float_t saa1Wring3Router = 23.40;
740 Float_t saa1Wring3HWidth = 3.75;
741 Float_t saa1Wring3Cutoffx = 4.50;
742 Float_t saa1Wring3Cutoffy = 4.50;
743 TGeoTubeSeg* shSaa1Wring3a = new TGeoTubeSeg(saa1Wring3Rinner, saa1Wring3Router, saa1Wring3HWidth, 0., 90.);
744 shSaa1Wring3a->SetName("shSaa1Wring3a");
745 TGeoBBox* shSaa1Wring3b = new TGeoBBox(saa1Wring3Router / 2., saa1Wring3Router / 2., saa1Wring3HWidth);
746 shSaa1Wring3b->SetName("shSaa1Wring3b");
747 TGeoTranslation* trSaa1Wring3b = new TGeoTranslation("trSaa1Wring3b", saa1Wring3Router / 2. + saa1Wring3Cutoffx,
748 saa1Wring3Router / 2. + saa1Wring3Cutoffy, 0.);
749 trSaa1Wring3b->RegisterYourself();
750 TGeoCompositeShape* shSaa1Wring3 =
751 new TGeoCompositeShape("shSaa1Wring3", "(shSaa1Wring3a)*(shSaa1Wring3b:trSaa1Wring3b)");
752 TGeoVolume* voSaa1Wring3 = new TGeoVolume("YSAA1_WRING3", shSaa1Wring3, kMedNiW);
753
755 // SAA1 W-Ring 4 //
756 // Drawing ALIP2A__0215 //
758 Float_t saa1Wring4Width = 5.85;
759 TGeoPcon* shSaa1Wring4 = new TGeoPcon(0., 360., 5);
760 shSaa1Wring4->DefineSection(0, 0.00, 20.31, 23.40);
761 shSaa1Wring4->DefineSection(1, 1.00, 20.31, 23.40);
762 shSaa1Wring4->DefineSection(2, 1.00, 20.31, 24.50);
763 shSaa1Wring4->DefineSection(3, 4.85, 20.31, 24.80);
764 shSaa1Wring4->DefineSection(4, 5.85, 24.10, 24.80);
765 TGeoVolume* voSaa1Wring4 = new TGeoVolume("YSAA1_WRING4", shSaa1Wring4, kMedNiW);
766
768 // SAA1 W-Ring 5 //
769 // Drawing ALIP2A__0218 //
771 Float_t saa1Wring5Rinner = 20.31;
772 Float_t saa1Wring5Router = 23.40;
773 Float_t saa1Wring5HWidth = 0.85;
774 TGeoVolume* voSaa1Wring5 =
775 new TGeoVolume("YSAA1_WRING5", new TGeoTube(saa1Wring5Rinner, saa1Wring5Router, saa1Wring5HWidth), kMedNiW);
776 //
777 // Position the rings in the assembly
778 //
779 TGeoVolumeAssembly* asSaa1ExtraShield = new TGeoVolumeAssembly("YSAA1ExtraShield");
780 // Distance between rings
781 Float_t saa1DWrings = 2.3;
782 //
783 dz = -(saa1Wring1Width + 6. * saa1Wring2HWidth + 2. * saa1Wring3HWidth + saa1Wring4Width + 2. * saa1Wring5HWidth +
784 2. * saa1DWrings) /
785 2.;
786 asSaa1ExtraShield->AddNode(voSaa1Wring1, 1, new TGeoTranslation(0., 0., dz));
787 dz += saa1Wring1Width;
788 dz += saa1Wring2HWidth;
789 asSaa1ExtraShield->AddNode(voSaa1Wring2, 1, new TGeoCombiTrans(0., 0., dz, rot000));
790 asSaa1ExtraShield->AddNode(voSaa1Wring2, 2, new TGeoCombiTrans(0., 0., dz, rot180));
791 dz += saa1Wring2HWidth;
792 dz += saa1DWrings;
793 dz += saa1Wring2HWidth;
794 asSaa1ExtraShield->AddNode(voSaa1Wring2, 3, new TGeoCombiTrans(0., 0., dz, rot090));
795 asSaa1ExtraShield->AddNode(voSaa1Wring2, 4, new TGeoCombiTrans(0., 0., dz, rot270));
796 dz += saa1Wring2HWidth;
797 dz += saa1Wring5HWidth;
798 asSaa1ExtraShield->AddNode(voSaa1Wring5, 1, new TGeoTranslation(0., 0., dz));
799 dz += saa1Wring5HWidth;
800 dz += saa1Wring2HWidth;
801 asSaa1ExtraShield->AddNode(voSaa1Wring2, 5, new TGeoCombiTrans(0., 0., dz, rot000));
802 asSaa1ExtraShield->AddNode(voSaa1Wring2, 6, new TGeoCombiTrans(0., 0., dz, rot180));
803 dz += saa1Wring2HWidth;
804 dz += saa1DWrings;
805 dz += saa1Wring3HWidth;
806 asSaa1ExtraShield->AddNode(voSaa1Wring3, 1, new TGeoCombiTrans(0., 0., dz, rot090));
807 asSaa1ExtraShield->AddNode(voSaa1Wring3, 2, new TGeoCombiTrans(0., 0., dz, rot270));
808 dz += saa1Wring3HWidth;
809 asSaa1ExtraShield->AddNode(voSaa1Wring4, 1, new TGeoTranslation(0., 0., dz));
810 dz += saa1Wring4Width;
811 const Float_t saa1ExtraShieldL = 48;
812 //
813 // Assemble SAA1
814 voSaa1M->AddNode(voSaa1StEnv, 1, gGeoIdentity);
815 voSaa1M->AddNode(voSaa1WPipe, 1, gGeoIdentity);
816 voSaa1M->AddNode(voSaa1PbComp, 1, gGeoIdentity);
817 voSaa1M->AddNode(voSaa1WCone, 1, gGeoIdentity);
818 voSaa1M->AddNode(voSaa1StRing, 1, gGeoIdentity);
819 voSaa1M->AddNode(voSaa1InnerTube, 1, new TGeoTranslation(0., 0., dzSaa1InnerTube + 0.9));
820 TGeoVolumeAssembly* voSaa1 = new TGeoVolumeAssembly("YSAA1");
821 voSaa1->AddNode(voSaa1M, 1, gGeoIdentity);
822
824 // SAA1/SAA2 Pb Joint //
825 // Drawing ALIP2A__0081 //
827 //
828 // Outer radius
829 Float_t rOuSaa1Saa2 = 70.0 / 2.;
830 // Flange SAA1 side
831 Float_t dzSaa1Saa2F1 = 3.;
832 Float_t rInSaa1Saa2F1 = 58.5 / 2.;
833 // 1st Central Section
834 Float_t dzSaa1Saa2C1 = 19.3;
835 Float_t rInSaa1Saa2C1 = 42.8 / 2.;
836 // Transition Region
837 Float_t dzSaa1Saa2T = 3.3;
838 // 1st Central Section
839 Float_t dzSaa1Saa2C2 = 6.2;
840 Float_t rInSaa1Saa2C2 = 36.2 / 2.;
841 // Flange SAA2 side
842 Float_t dzSaa1Saa2F2 = 3.1;
843 Float_t rInSaa1Saa2F2 = 54.1 / 2.;
844 // Total length
845 const Float_t dzSaa1Saa2 = 34.9;
846
847 TGeoPcon* shSaa1Saa2Pb = new TGeoPcon(0., 360., 8);
848 z = 0.;
849 // Flange SAA1 side
850 shSaa1Saa2Pb->DefineSection(0, z, rInSaa1Saa2F1, rOuSaa1Saa2);
851 z += dzSaa1Saa2F1;
852 shSaa1Saa2Pb->DefineSection(1, z, rInSaa1Saa2F1, rOuSaa1Saa2);
853 shSaa1Saa2Pb->DefineSection(2, z, rInSaa1Saa2C1, rOuSaa1Saa2);
854 // Central region 1
855 z += dzSaa1Saa2C1;
856 shSaa1Saa2Pb->DefineSection(3, z, rInSaa1Saa2C1, rOuSaa1Saa2);
857 // 45 deg transition
858 z += dzSaa1Saa2T;
859 shSaa1Saa2Pb->DefineSection(4, z, rInSaa1Saa2C2, rOuSaa1Saa2);
860 z += dzSaa1Saa2C2;
861 shSaa1Saa2Pb->DefineSection(5, z, rInSaa1Saa2C2, rOuSaa1Saa2);
862 shSaa1Saa2Pb->DefineSection(6, z, rInSaa1Saa2F2, rOuSaa1Saa2);
863 z += dzSaa1Saa2F2;
864 shSaa1Saa2Pb->DefineSection(7, z, rInSaa1Saa2F2, rOuSaa1Saa2);
865 TGeoVolume* voSaa1Saa2Pb = new TGeoVolume("YSAA1SAA2Pb", shSaa1Saa2Pb, kMedPb);
866 //
867 // Mother volume and outer steel envelope
868 Float_t rOuSaa1Saa2Steel = 36.9;
869
870 TGeoPcon* shSaa1Saa2 = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., rOuSaa1Saa2Steel - rOuSaa1Saa2);
871 TGeoVolume* voSaa1Saa2 = new TGeoVolume("YSAA1SAA2", shSaa1Saa2, kMedSteel);
872 voSaa1Saa2->AddNode(voSaa1Saa2Pb, 1, gGeoIdentity);
873 //
874 // Inner region with higher transport cuts
875 //
876 TGeoPcon* shSaa1Saa2I = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., -3.);
877 TGeoVolume* voSaa1Saa2I = new TGeoVolume("YSAA1_SAA2I", shSaa1Saa2I, kMedPbSh);
878 voSaa1Saa2Pb->AddNode(voSaa1Saa2I, 1, gGeoIdentity);
879
881 // SAA2 //
883
885 // SAA2 Steel Envelope //
886 // Drawing ALIP2A__0041 //
888 dSt = 4.; // Thickness of steel envelope
889 // Length of the first section
890 Float_t dzSaa2StEnv1 = 163.15;
891 Float_t rInSaa2StEnv1 = 65.8 / 2.;
892 // Length of the second section
893 Float_t dzSaa2StEnv2 = 340.35 - 4.;
894 Float_t rInSaa2StEnv2 = 87.2 / 2.;
895 // Rel. starting position
896 Float_t zSaa2StEnv = 3.;
897
898 TGeoPcon* shSaa2StEnv = new TGeoPcon(0., 360., 6);
899 // First Section
900 z = zSaa2StEnv;
901 shSaa2StEnv->DefineSection(0, z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
902 z += dzSaa2StEnv1;
903 shSaa2StEnv->DefineSection(1, z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
904 // Transition region
905 shSaa2StEnv->DefineSection(2, z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);
906 z += dSt;
907 shSaa2StEnv->DefineSection(3, z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);
908 // Second section
909 shSaa2StEnv->DefineSection(4, z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);
910 z += dzSaa2StEnv2;
911 shSaa2StEnv->DefineSection(5, z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);
912
913 TGeoVolume* voSaa2StEnv = new TGeoVolume("YSAA2_SteelEnvelope", shSaa2StEnv, kMedSteel);
914
916 // SAA2 Pb Ring //
917 // Drawing ALIP2A__0080 //
918 // Drawing ALIP2A__0111 //
920 //
921 // Rel. position in z
922 Float_t zSaa2PbRing = 35.25;
923 // Length
924 Float_t dzSaa2PbRing = 65.90;
925 // Inner radius
926 Float_t rInSaa2PbRing = 37.00;
927 // Outer radius at front
928 Float_t rOuSaa2PbRingF = 42.74;
929 // Outer Rradius at rear
930 Float_t rOuSaa2PbRingR = 44.58;
931
932 TGeoPcon* shSaa2PbRing = new TGeoPcon(0., 360., 2);
933 z = zSaa2PbRing;
934 shSaa2PbRing->DefineSection(0, z, rInSaa2PbRing, rOuSaa2PbRingF);
935 z += dzSaa2PbRing;
936 shSaa2PbRing->DefineSection(1, z, rInSaa2PbRing, rOuSaa2PbRingR);
937
938 TGeoVolume* voSaa2PbRing = new TGeoVolume("YSAA2_PbRing", shSaa2PbRing, kMedPb);
939
941 // SAA2 Pb Components //
942 // Drawing ALIP2A__0079 //
944 tanAlpha = TMath::Tan(1.89 / 2. * kDegRad);
945 TGeoPcon* shSaa2PbComp = new TGeoPcon(0., 360., 16);
946 // Total length
947 const Float_t dzSaa2PbComp = 512.;
948 // Length of 1st bellow recess
949 Float_t dzSaa2PbCompB1 = 24.;
950 // Length of 2nd bellow recess
951 Float_t dzSaa2PbCompB2 = 27.;
952 // Flange on the SAA1 side Detail A
953 // 1st Step
954 Float_t dzSaa2PbCompA1 = 1.5;
955 Float_t rInSaa2PbCompA1 = 43.0 / 2.;
956 Float_t rOuSaa2PbCompA1 = 53.0 / 2.;
957 // 2nd Step
958 Float_t dzSaa2PbCompA2 = 1.5;
959 Float_t rInSaa2PbCompA2 = 36.8 / 2.;
960 Float_t rOuSaa2PbCompA2 = rOuSaa2PbCompA1;
961 // Straight section
962 Float_t dzSaa2PbCompA3 = 21.0;
963 Float_t rInSaa2PbCompA3 = rInSaa2PbCompA2;
964 Float_t rOuSaa2PbCompA3 = 65.2 / 2.;
965 //
966 // 1st Section (outer straight, inner 1.89/2. deg opening cone)
967 // Length
968 Float_t dzSaa2PbComp1 = 146.15;
969 // Inner radius at the end
970 Float_t rInSaa2PbComp1 = rInSaa2PbCompA3 + dzSaa2PbComp1 * tanAlpha;
971 // Outer radius
972 Float_t rOuSaa2PbComp1 = rOuSaa2PbCompA3;
973 //
974 // 2nd Section (outer straight, inner 1.89/2. deg opening cone)
975 // Length
976 Float_t dzSaa2PbComp2 = (dzSaa2PbComp - dzSaa2PbComp1 - dzSaa2PbCompB1 - dzSaa2PbCompB2);
977 // Inner radius at the end
978 Float_t rInSaa2PbComp2 = rInSaa2PbComp1 + dzSaa2PbComp2 * tanAlpha;
979 // Outer radius
980 Float_t rOuSaa2PbComp2 = 86.6 / 2.;
981 //
982 // Flange on the SAA3 side (Detail E)
983 //
984 // Straight Section
985 // Length dzSaa2PbCompB2 - 8.8 = 27 - 8.8 = 18.2
986 Float_t dzSaa2PbCompE1 = 18.2;
987 Float_t rInSaa2PbCompE1 = 52.0 / 2.;
988 Float_t rOuSaa2PbCompE1 = 86.6 / 2.;
989 // 45 deg transition
990 Float_t dzSaa2PbCompE2 = 2.7;
991 // 1st Step
992 Float_t dzSaa2PbCompE3 = 0.6;
993 Float_t rInSaa2PbCompE3 = 52.0 / 2. + dzSaa2PbCompE2;
994 Float_t rOuSaa2PbCompE3 = 83.0 / 2.;
995 // 2nd Step
996 Float_t dzSaa2PbCompE4 = 4.0;
997 Float_t rOuSaa2PbCompE4 = 61.6 / 2.;
998 // end
999 Float_t dzSaa2PbCompE5 = 1.5;
1000
1001 //
1002 // Flange on SAA1 side (Detail A)
1003 z = 0.;
1004 // 1st Step
1005 shSaa2PbComp->DefineSection(0, z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
1006 z += dzSaa2PbCompA1;
1007 shSaa2PbComp->DefineSection(1, z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
1008 shSaa2PbComp->DefineSection(2, z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
1009 // 2nd Step
1010 z += dzSaa2PbCompA2;
1011 shSaa2PbComp->DefineSection(3, z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
1012 shSaa2PbComp->DefineSection(4, z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
1013 // straight section
1014 z += dzSaa2PbCompA3;
1015 shSaa2PbComp->DefineSection(5, z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
1016 //
1017 // Section 1
1018 z += dzSaa2PbComp1;
1019 shSaa2PbComp->DefineSection(6, z, rInSaa2PbComp1, rOuSaa2PbComp1);
1020 shSaa2PbComp->DefineSection(7, z, rInSaa2PbComp1, rOuSaa2PbComp2);
1021 //
1022 // Section 2
1023 z += dzSaa2PbComp2;
1024 shSaa2PbComp->DefineSection(8, z, rInSaa2PbComp2, rOuSaa2PbComp2);
1025 //
1026 // Flange SAA3 side (Detail E)
1027 z += dzSaa2PbCompE1;
1028 shSaa2PbComp->DefineSection(9, z, rInSaa2PbCompE1, rOuSaa2PbCompE1);
1029 // 45 deg transition
1030 z += dzSaa2PbCompE2;
1031 shSaa2PbComp->DefineSection(10, z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
1032 // 1st step
1033 z += dzSaa2PbCompE3;
1034 shSaa2PbComp->DefineSection(11, z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
1035 shSaa2PbComp->DefineSection(12, z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1036 // 2nd step
1037 z += dzSaa2PbCompE4;
1038 shSaa2PbComp->DefineSection(13, z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1039 shSaa2PbComp->DefineSection(14, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1040 // end
1041 z += dzSaa2PbCompE5;
1042 shSaa2PbComp->DefineSection(15, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1043
1044 TGeoVolume* voSaa2PbComp = new TGeoVolume("YSAA2_PbComp", shSaa2PbComp, kMedPbSh);
1045
1047 // SAA2 Inner Tube //
1048 // Drawing ALIP2A__0083 //
1050 //
1051 //
1052 //
1053 // Length of saa2: 512.0 cm
1054 // Length of inner tube: 501.7 cm
1055 // Lenth of bellow recess: 10.3 cm ( 1.5 + 8.8)
1056 // Radius at entrance 36.8/2, d = 0.1
1057 // Radius at exit 52.0/2, d = 0.1
1058 //
1059 const Float_t kSaa2InnerTubeL = 501.7; // Length of the tube
1060 const Float_t kSaa2InnerTubeRmin = 36.6 / 2.; // Radius at entrance
1061 const Float_t kSaa2InnerTubeRmax = 51.8 / 2.; // Radius at exit
1062 const Float_t kSaa2InnerTubeD = 0.2; // Thickness
1063 TGeoPcon* shSaa2InnerTube = new TGeoPcon(0., 360., 4);
1064 z = 0.;
1065 shSaa2InnerTube->DefineSection(0, z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1066 z += dzSaa2PbCompA2 + dzSaa2PbCompA3;
1067 shSaa2InnerTube->DefineSection(1, z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1068 z = kSaa2InnerTubeL - dzSaa2PbCompE1;
1069 shSaa2InnerTube->DefineSection(2, z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
1070 z = kSaa2InnerTubeL;
1071 shSaa2InnerTube->DefineSection(3, z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
1072 TGeoVolume* voSaa2InnerTube = new TGeoVolume("YSAA2_InnerTube", shSaa2InnerTube, kMedSteelSh);
1073
1075 // SAA2 Steel Ring //
1076 // Drawing ALIP2A__0042 //
1078 // HalfWidth
1079 Float_t dzSaa2SteelRing = 2.;
1080 TGeoTube* shSaa2SteelRing = new TGeoTube(41.6, 47.6, dzSaa2SteelRing);
1081 TGeoVolume* voSaa2SteelRing = new TGeoVolume("YSAA2_SteelRing", shSaa2SteelRing, kMedSteel);
1082
1084 // SAA2 Outer Shape //
1085 // Drawing ALIP2A__0108 //
1087
1088 TGeoPcon* shSaa2 = new TGeoPcon(0., 360., 16);
1089 kSec = 0.02; // security distance to avoid trivial extrusions
1090 rmin = kSaa2InnerTubeRmin - kSaa2InnerTubeD - kSec;
1091 rmax = kSaa2InnerTubeRmax - kSaa2InnerTubeD - kSec;
1092 // Flange SAA1 side
1093 z = 0.;
1094 shSaa2->DefineSection(0, z, rmin, rOuSaa2PbCompA1);
1095 z += dzSaa2PbCompA1 + dzSaa2PbCompA2;
1096 shSaa2->DefineSection(1, z, rmin, rOuSaa2PbCompA1);
1097 shSaa2->DefineSection(2, z, rmin, rInSaa2StEnv1 + dSt);
1098 z += dzSaa2PbCompA3;
1099 shSaa2->DefineSection(3, z, rmin, rInSaa2StEnv1 + dSt);
1100 z = zSaa2PbRing;
1101 shSaa2->DefineSection(4, z, 0., rInSaa2StEnv1 + dSt);
1102 shSaa2->DefineSection(5, z, 0., rOuSaa2PbRingF);
1103 z += dzSaa2PbRing;
1104 shSaa2->DefineSection(6, z, 0., rOuSaa2PbRingR);
1105 shSaa2->DefineSection(7, z, 0., rInSaa2StEnv1 + dSt);
1106 z = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2StEnv1;
1107 shSaa2->DefineSection(8, z, 0., rInSaa2StEnv1 + dSt);
1108 shSaa2->DefineSection(9, z, 0., rInSaa2StEnv2 + dSt);
1109 z = dzSaa2PbComp - dzSaa2PbCompB2;
1110 shSaa2->DefineSection(10, z, rmax, rInSaa2StEnv2 + dSt);
1111 z += dzSaa2PbCompE1;
1112 shSaa2->DefineSection(11, z, rmax, rInSaa2StEnv2 + dSt);
1113 z += dzSaa2PbCompE2;
1114 shSaa2->DefineSection(12, z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1115 z += (dzSaa2PbCompE3 + dzSaa2PbCompE4);
1116 shSaa2->DefineSection(13, z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1117 shSaa2->DefineSection(14, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1118 z += dzSaa2PbCompE5;
1119 shSaa2->DefineSection(15, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1120
1121 TGeoVolume* voSaa2 = new TGeoVolume("YSAA2", shSaa2, kMedAir);
1122 voSaa2->SetVisibility(0);
1123 // Inner 1.89/2 deg line
1124 Double_t zref = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2PbCompA3;
1125 for (Int_t i = 4; i < 10; i++) {
1126 Double_t zp = shSaa2->GetZ(i);
1127 Double_t r2 = shSaa2->GetRmax(i);
1128 Double_t r1 = rmin + (zp - zref) * TMath::Tan(1.89 / 2. * kDegRad) - kSec;
1129 shSaa2->DefineSection(i, zp, r1, r2);
1130 }
1131
1132 //
1133 // Assemble SAA2
1134 voSaa2->AddNode(voSaa2StEnv, 1, gGeoIdentity);
1135 voSaa2->AddNode(voSaa2PbRing, 1, gGeoIdentity);
1136 voSaa2->AddNode(voSaa2PbComp, 1, gGeoIdentity);
1137 voSaa2->AddNode(voSaa2InnerTube, 1, new TGeoTranslation(0., 0., dzSaa2PbCompA1));
1138 z = (dzSaa2PbComp - dzSaa2PbCompE4 - dzSaa2PbCompE5) + dzSaa2SteelRing;
1139 voSaa2->AddNode(voSaa2SteelRing, 1, new TGeoTranslation(0., 0., z));
1140
1142 // SAA3 //
1144 //
1145 //
1146 // This is a study performed by S. Maridor
1147 // The SAA3 has not yet been designed !!!!!!!!
1148 //
1150 // SAA3 Outer Shape //
1151 // Drawing ALIP2A__0288 //
1153 TGeoVolumeAssembly* voSaa3 = new TGeoVolumeAssembly("YSAA3");
1155 // SAA3 Concrete cone //
1156 // Drawing ALIP2A__0284 //
1158 // Block
1159 TGeoBBox* shSaa3CCBlockO = new TGeoBBox(80. / 2., 80. / 2., 80. / 2.); // modified by ernesto.calvo@pucp.edu.pe
1160 shSaa3CCBlockO->SetName("Saa3CCBlockO");
1161
1162 TGeoPcon* shSaa3InnerRegion = new TGeoPcon(0., 360., 4);
1163 // + 10.0 cm // ecv
1164 shSaa3InnerRegion->DefineSection(0, -50.0, 0., 27.1);
1165 shSaa3InnerRegion->DefineSection(1, -13.0, 0., 27.1);
1166 shSaa3InnerRegion->DefineSection(2, 39.1, 0., 12.3);
1167 shSaa3InnerRegion->DefineSection(3, 80.0, 0., 12.3);
1168 shSaa3InnerRegion->SetName("Saa3InnerRegion");
1169
1170 TGeoCompositeShape* shSaa3CCBlock = new TGeoCompositeShape("Saa3CCBlock", "Saa3CCBlockO-Saa3InnerRegion");
1171 TGeoVolume* voSaa3CCBlock = new TGeoVolume("YSAA3CCBlock", shSaa3CCBlock, kMedConcSh);
1172
1173 voSaa3->AddNode(voSaa3CCBlock, 1, gGeoIdentity);
1174
1175 // Plate 1: 240 cm x 80 cm x 80 cm (x 2)
1176 TGeoVolume* voSaa3SteelPlate1 =
1177 new TGeoVolume("YSAA3SteelPlate1", new TGeoBBox(240. / 2., 80. / 2., 80. / 2.), kMedSteelSh);
1178 TGeoVolume* voSaa3SteelPlate11 =
1179 new TGeoVolume("YSAA3SteelPlate11", new TGeoBBox(240. / 2., 80. / 2., 10. / 2.), kMedSteel);
1180 voSaa3SteelPlate11->SetVisContainers(kTRUE);
1181 voSaa3SteelPlate1->SetVisibility(kTRUE);
1182 voSaa3SteelPlate1->AddNode(voSaa3SteelPlate11, 1, new TGeoTranslation(0., 0., -35.));
1183 voSaa3->AddNode(voSaa3SteelPlate1, 1, new TGeoTranslation(0., +80., 0.));
1184 voSaa3->AddNode(voSaa3SteelPlate1, 2, new TGeoTranslation(0., -80., 0.));
1185
1186 // Plate 2: 80 cm x 80 cm x 80 cm (x 2)
1187 TGeoVolume* voSaa3SteelPlate2 =
1188 new TGeoVolume("YSAA3SteelPlate2", new TGeoBBox(80. / 2., 80. / 2., 80. / 2.), kMedSteelSh);
1189 TGeoVolume* voSaa3SteelPlate21 =
1190 new TGeoVolume("YSAA3SteelPlate21", new TGeoBBox(80. / 2., 80. / 2., 10. / 2.), kMedSteel);
1191 voSaa3SteelPlate2->AddNode(voSaa3SteelPlate21, 1, new TGeoTranslation(0., 0., -35.));
1192 voSaa3->AddNode(voSaa3SteelPlate2, 1, new TGeoTranslation(+80, 0., 0.));
1193 voSaa3->AddNode(voSaa3SteelPlate2, 2, new TGeoTranslation(-80, 0., 0.));
1194
1196 // Muon Filter //
1197 // Drawing ALIP2A__0105 //
1199 // Half Length
1200 const Float_t dzMuonFilter = 60.;
1201
1202 TGeoBBox* shMuonFilterO = new TGeoBBox(550. / 2., 620. / 2., dzMuonFilter);
1203 shMuonFilterO->SetName("FilterO");
1204 TGeoCombiTrans* trFilter = new TGeoCombiTrans("trFilter", 0., -dzMuonFilter * TMath::Tan(alhc * kDegrad), 0., rotlhc);
1205 trFilter->RegisterYourself();
1206 TGeoTube* shMuonFilterI = new TGeoTube(0., 48.8, dzMuonFilter + 20.);
1207 shMuonFilterI->SetName("FilterI");
1208 TGeoCompositeShape* shMuonFilter = new TGeoCompositeShape("MuonFilter", "FilterO-FilterI:trFilter");
1209 //
1210 // !!!!! Needs to be inclined
1211 TGeoVolume* voMuonFilter = new TGeoVolume("YMuonFilter", shMuonFilter, kMedCastiron);
1212
1213 // Inner part with higher transport cuts
1214 Float_t dzMuonFilterH = 50.;
1215 TGeoBBox* shMuonFilterOH = new TGeoBBox(550. / 2., 620. / 2., dzMuonFilterH);
1216 shMuonFilterOH->SetName("FilterOH");
1217 TGeoTube* shMuonFilterIH = new TGeoTube(0., 50., dzMuonFilterH + 5.);
1218 shMuonFilterIH->SetName("FilterIH");
1219 TGeoCompositeShape* shMuonFilterH = new TGeoCompositeShape("MuonFilterH", "FilterOH-FilterIH:trFilter");
1220 TGeoVolume* voMuonFilterH = new TGeoVolume("YMuonFilterH", shMuonFilterH, kMedCastironSh);
1221 voMuonFilter->AddNode(voMuonFilterH, 1, gGeoIdentity);
1222
1223 //
1224 TGeoVolumeAssembly* voSaa = new TGeoVolumeAssembly("YSAA");
1225 //
1226 // Starting position of the FA Flange/Tail
1227 const Float_t ziFaWTail = 505.0;
1228 // End of the FA Flange/Tail
1229 const Float_t zoFaWTail = ziFaWTail + dzFaWTail;
1230 // Starting position of the FA/SAA1 Joint (2.8 cm overlap with tail)
1231 const Float_t ozFaSaa1 = 2.8;
1232 const Float_t ziFaSaa1 = zoFaWTail - ozFaSaa1;
1233 // End of the FA/SAA1 Joint
1234 const Float_t zoFaSaa1 = ziFaSaa1 + dzFaSaa1;
1235 // Starting position of SAA1 (2.0 cm overlap with joint)
1236 const Float_t ozSaa1 = 2.;
1237 const Float_t ziSaa1 = zoFaSaa1 - ozSaa1;
1238 // End of SAA1
1239 const Float_t zoSaa1 = ziSaa1 + dzSaa1;
1240 // Starting position of SAA1/SAA2 Joint (1.95 cm overlap with SAA1)
1241 const Float_t ziSaa1Saa2 = zoSaa1 - 1.95;
1242 // End of SAA1/SAA2 Joint
1243 const Float_t zoSaa1Saa2 = ziSaa1Saa2 + dzSaa1Saa2;
1244 // Starting position of SAA2 (3.1 cm overlap with the joint)
1245 const Float_t ziSaa2 = zoSaa1Saa2 - 3.1;
1246 // End of SAA2
1247 const Float_t zoSaa2 = ziSaa2 + dzSaa2PbComp;
1248 // Position of SAA3
1249 const Float_t zcSaa3 =
1250 zoSaa2 + 40.; // ecv (put the CC block 5cm closer to the Wall) // <--cancell that!! (cancelled)
1251 // Position of the Muon Filter
1252 const Float_t zcFilter = 1465.9 + dzMuonFilter;
1253
1254 voSaa->AddNode(voFaWTail, 1, new TGeoTranslation(0., 0., ziFaWTail));
1255 voSaa->AddNode(voFaSaa1, 1, new TGeoTranslation(0., 0., ziFaSaa1));
1256 voSaa->AddNode(voSaa1, 1, new TGeoTranslation(0., 0., ziSaa1));
1257 voSaa->AddNode(voSaa1Saa2, 1, new TGeoTranslation(0., 0., ziSaa1Saa2 - 0.1));
1258 voSaa->AddNode(voSaa2, 1, new TGeoTranslation(0., 0., ziSaa2));
1259
1260 //
1261 // Add Saa3 to Saa and Saa to top volume
1262 //
1263 voSaa->AddNode(voSaa3, 1, new TGeoTranslation(0., 0., zcSaa3));
1264
1265 TGeoRotation* rotxz = new TGeoRotation("rotxz", 90., 0., 90., 90., 180., 0.);
1266 top->AddNode(voSaa, 1, new TGeoCombiTrans(0., 0., 0., rotxz));
1267
1268 //
1269 // Mother volume for muon stations 1+2 and shielding material placed between the quadrants
1270 //
1271 // Position of the dipole
1272 Float_t ziDipole = 741.;
1273
1274 TGeoPcon* shYOUT1 = new TGeoPcon(0., 360., 22);
1275 Float_t eps = 1.e-2;
1276 // FA Tail Section
1277 for (Int_t iz = 1; iz < 9; iz++) {
1278 z = shFaWTail->GetZ(iz - 1);
1279 if (iz == 8) {
1280 z -= ozFaSaa1;
1281 }
1282 shYOUT1->DefineSection(iz - 1, z + ziFaWTail, shFaWTail->GetRmax(iz - 1) + eps, 150.);
1283 }
1284 // FA-SAA1 Joint
1285 z = shYOUT1->GetZ(7);
1286 Int_t izc = 8;
1287 for (Int_t iz = 9; iz < 17; iz++) {
1288 if (iz == 11 || iz == 15) {
1289 continue;
1290 }
1291 shYOUT1->DefineSection(izc, z + shFaSaa1->GetZ(iz - 9), shFaSaa1->GetRmax(iz - 9) + eps, 150.);
1292 izc++;
1293 }
1294 z = shYOUT1->GetZ(13) - ozSaa1;
1295 // SAA1 - Dipole
1296 for (Int_t iz = 15; iz < 22; iz++) {
1297 shYOUT1->DefineSection(iz - 1, z + shSaa1M->GetZ(iz - 11), shSaa1M->GetRmax(iz - 11) + eps, 150.);
1298 }
1299 // Distance between dipole and start of SAA1 2deg opening cone
1300 dz = ziDipole - (zSaa1StEnv[0] - dSt + zSaa1StEnvS + ziSaa1);
1301 rOut = rOuSaa1StEnv2 + dz * TMath::Tan(2. * kDegRad);
1302
1303 shYOUT1->DefineSection(21, ziDipole, rOut + eps, 150.);
1304
1305 InvertPcon(shYOUT1);
1306 TGeoVolume* voYOUT1 = new TGeoVolume("YOUT1", shYOUT1, kMedAirMu);
1307 voYOUT1->SetVisibility(0);
1308
1309 voYOUT1->AddNode(asSaa1ExtraShield, 1,
1310 new TGeoCombiTrans(0., 0., -(100.7 + 56.2 + saa1ExtraShieldL / 2. + ziFaWTail), rotxz));
1311 voYOUT1->AddNode(asFaExtraShield, 1,
1312 new TGeoCombiTrans(0., 0., -(16.41 - 7.46 + kFaWring2HWidth + ziFaWTail), rotxz));
1313 top->AddNode(voYOUT1, 1, gGeoIdentity);
1314 //
1315 // Mother volume for muon stations 4+5 and trigger stations.
1316 //
1317 Float_t zoDipole = 1249.;
1318
1319 TGeoPcon* shYOUT21 = new TGeoPcon(0., 360., 12);
1320 z = zoDipole;
1321 shYOUT21->DefineSection(0, z, rOuSaa1String, 375.);
1322 // Start of SAA1-SAA2
1323 z = ziSaa1Saa2;
1324 shYOUT21->DefineSection(1, z, rOuSaa1String, 375.);
1325 shYOUT21->DefineSection(2, z, rOuSaa1Saa2Steel, 375.);
1326 // End of SAA1-SAA2
1327 z = ziSaa2;
1328 shYOUT21->DefineSection(3, z, rOuSaa1Saa2Steel, 375.);
1329 // SAA2
1330 z = ziSaa2 + zSaa2PbRing;
1331 shYOUT21->DefineSection(4, z, rInSaa2StEnv1 + dSt, 375.);
1332 // Pb Cone
1333 shYOUT21->DefineSection(5, z, rOuSaa2PbRingF, 375.);
1334 rmin = rOuSaa2PbRingF + (1380. - z) * TMath::Tan(1.6 * kDegRad);
1335 shYOUT21->DefineSection(6, 1380., rmin, 375.);
1336 z = ziSaa2 + zSaa2PbRing + dzSaa2PbRing;
1337 shYOUT21->DefineSection(7, z, rOuSaa2PbRingR, 375.);
1338 // Straight Sections
1339 shYOUT21->DefineSection(8, z, rInSaa2StEnv1 + dSt, 460.);
1340 z = ziSaa2 + dzSaa2StEnv1;
1341 shYOUT21->DefineSection(9, z, rInSaa2StEnv1 + dSt, 460.);
1342 shYOUT21->DefineSection(10, z, rInSaa2StEnv2 + dSt, 460.);
1343 z += dzSaa2StEnv2;
1344 shYOUT21->DefineSection(11, z, rInSaa2StEnv2 + dSt, 460.);
1345
1346 InvertPcon(shYOUT21);
1347 shYOUT21->SetName("shYOUT21");
1348
1349 TGeoBBox* shYOUT22 = new TGeoBBox(460., 200., 65. - 1.5);
1350 shYOUT22->SetName("shYOUT22");
1351
1352 TGeoTranslation* tYOUT22 = new TGeoTranslation(0., -310. - 200., -zcFilter);
1353 tYOUT22->SetName("tYOUT22");
1354 tYOUT22->RegisterYourself();
1355
1356 TGeoCompositeShape* shYOUT2 = new TGeoCompositeShape("shYOUT2", "shYOUT21-shYOUT22:tYOUT22");
1357
1358 TGeoVolume* voYOUT2 = new TGeoVolume("YOUT2", shYOUT2, kMedAirMu);
1359 voYOUT2->SetVisibility(1);
1360 voYOUT2->AddNode(voMuonFilter, 1,
1361 new TGeoCombiTrans(0., dzMuonFilter * TMath::Tan(alhc * kDegrad), -zcFilter, rotxzlhc));
1362 top->AddNode(voYOUT2, 1, gGeoIdentity);
1363}
1364
1365void Shil::createMaterials()
1366{
1367 auto& matmgr = o2::base::MaterialManager::Instance();
1368
1369 //
1370 // Defines materials for the muon shield
1371 //
1372 Int_t isxfld1 = 2.;
1373 Float_t sxmgmx = 10.;
1375 Int_t isxfld2 = 2.; // ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->PrecInteg();
1376
1377 // Steel
1378 Float_t asteel[4] = {55.847, 51.9961, 58.6934, 28.0855};
1379 Float_t zsteel[4] = {26., 24., 28., 14.};
1380 Float_t wsteel[4] = {.715, .18, .1, .005};
1381 // PbW
1382 Float_t apbw[2] = {207.2, 183.85};
1383 Float_t zpbw[2] = {82., 74.};
1384 Float_t wpbw[2] = {.5, .5};
1385 // Concrete
1386 Float_t aconc[10] = {1., 12.01, 15.994, 22.99, 24.305, 26.98, 28.086, 39.1, 40.08, 55.85};
1387 Float_t zconc[10] = {1., 6., 8., 11., 12., 13., 14., 19., 20., 26.};
1388 Float_t wconc[10] = {.01, .001, .529107, .016, .002, .033872, .337021, .013, .044, .014};
1389 // Ni-Cu-W alloy
1390 Float_t aniwcu[3] = {58.6934, 183.84, 63.546};
1391 Float_t zniwcu[3] = {28., 74., 29.};
1392 Float_t wniwcu[3] = {0.015, 0.95, 0.035};
1393 //
1394 // Insulation powder
1395 // Si O Ti Al
1396 Float_t ains[4] = {28.0855, 15.9994, 47.867, 26.982};
1397 Float_t zins[4] = {14., 8., 22., 13.};
1398 Float_t wins[4] = {0.3019, 0.4887, 0.1914, 0.018};
1399 //
1400 // Air
1401 //
1402 Float_t aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
1403 Float_t zAir[4] = {6., 7., 8., 18.};
1404 Float_t wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
1405 Float_t dAir = 1.20479E-3;
1406 Float_t dAir1 = 1.20479E-10;
1407 //
1408 // Cast iron
1409 //
1410 Float_t acasti[4] = {55.847, 12.011, 28.085, 54.938};
1411 Float_t zcasti[4] = {26., 6., 14., 25.};
1412 Float_t wcasti[4] = {0.929, 0.035, 0.031, 0.005};
1413
1414 // ****************
1415 // Defines tracking media parameters.
1416 // Les valeurs sont commentees pour laisser le defaut
1417 // a GEANT (version 3-21, page CONS200), f.m.
1418 Float_t epsil, stmin, tmaxfd, deemax, stemax;
1419 epsil = .001; // Tracking precision,
1420 stemax = -1.; // Maximum displacement for multiple scat
1421 tmaxfd = -20.; // Maximum angle due to field deflection
1422 deemax = -.3; // Maximum fractional energy loss, DLS
1423 stmin = -.8;
1424 // ***************
1425
1426 // Aluminum
1427 matmgr.Material("SHIL", 9, "ALU1 ", 26.98, 13., 2.7, 8.9, 37.2);
1428 matmgr.Material("SHIL", 29, "ALU2 ", 26.98, 13., 2.7, 8.9, 37.2);
1429 matmgr.Material("SHIL", 49, "ALU3 ", 26.98, 13., 2.7, 8.9, 37.2);
1430 matmgr.Medium("SHIL", 9, "ALU_C0 ", 9, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1431 matmgr.Medium("SHIL", 29, "ALU_C1 ", 29, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1432 matmgr.Medium("SHIL", 49, "ALU_C2 ", 49, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1433
1434 // Iron
1435 matmgr.Material("SHIL", 10, "IRON1 ", 55.85, 26., 7.87, 1.76, 17.1);
1436 matmgr.Material("SHIL", 30, "IRON2 ", 55.85, 26., 7.87, 1.76, 17.1);
1437 matmgr.Material("SHIL", 50, "IRON3 ", 55.85, 26., 7.87, 1.76, 17.1);
1438 matmgr.Medium("SHIL", 10, "FE_C0 ", 10, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1439 matmgr.Medium("SHIL", 30, "FE_C1 ", 30, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1440 matmgr.Medium("SHIL", 50, "FE_C2 ", 50, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1441
1442 // Copper
1443 matmgr.Material("SHIL", 11, "COPPER1 ", 63.55, 29., 8.96, 1.43, 15.1);
1444 matmgr.Material("SHIL", 31, "COPPER2 ", 63.55, 29., 8.96, 1.43, 15.1);
1445 matmgr.Material("SHIL", 51, "COPPER3 ", 63.55, 29., 8.96, 1.43, 15.1);
1446 matmgr.Medium("SHIL", 11, "Cu_C0 ", 11, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1447 matmgr.Medium("SHIL", 31, "Cu_C1 ", 31, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1448 matmgr.Medium("SHIL", 51, "Cu_C2 ", 51, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1449
1450 // Tungsten
1451 matmgr.Material("SHIL", 12, "TUNGSTEN1 ", 183.85, 74., 19.3, .35, 10.3);
1452 matmgr.Material("SHIL", 32, "TUNGSTEN2 ", 183.85, 74., 19.3, .35, 10.3);
1453 matmgr.Material("SHIL", 52, "TUNGSTEN3 ", 183.85, 74., 19.3, .35, 10.3);
1454 matmgr.Medium("SHIL", 12, "W_C0 ", 12, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1455 matmgr.Medium("SHIL", 32, "W_C1 ", 32, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1456 matmgr.Medium("SHIL", 52, "W_C2 ", 52, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1457
1458 // Lead
1459 matmgr.Material("SHIL", 13, "LEAD1 ", 207.19, 82., 11.35, .56, 18.5);
1460 matmgr.Material("SHIL", 33, "LEAD2 ", 207.19, 82., 11.35, .56, 18.5);
1461 matmgr.Material("SHIL", 53, "LEAD3 ", 207.19, 82., 11.35, .56, 18.5);
1462 matmgr.Medium("SHIL", 13, "PB_C0 ", 13, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1463 matmgr.Medium("SHIL", 33, "PB_C1 ", 33, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1464 matmgr.Medium("SHIL", 53, "PB_C2 ", 53, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1465
1466 // Insulation Powder
1467 matmgr.Mixture("SHIL", 14, "INSULATION1", ains, zins, 0.41, 4, wins);
1468 matmgr.Mixture("SHIL", 34, "INSULATION2", ains, zins, 0.41, 4, wins);
1469 matmgr.Mixture("SHIL", 54, "INSULATION3", ains, zins, 0.41, 4, wins);
1470 matmgr.Medium("SHIL", 14, "INS_C0 ", 14, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1471 matmgr.Medium("SHIL", 34, "INS_C1 ", 34, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1472 matmgr.Medium("SHIL", 54, "INS_C2 ", 54, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1473
1474 // Air
1475 matmgr.Mixture("SHIL", 15, "AIR1 ", aAir, zAir, dAir, 4, wAir);
1476 matmgr.Mixture("SHIL", 35, "AIR2 ", aAir, zAir, dAir, 4, wAir);
1477 matmgr.Mixture("SHIL", 55, "AIR3 ", aAir, zAir, dAir, 4, wAir);
1478 matmgr.Mixture("SHIL", 75, "AIR_MUON ", aAir, zAir, dAir, 4, wAir);
1479 matmgr.Medium("SHIL", 15, "AIR_C0 ", 15, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1480 matmgr.Medium("SHIL", 35, "AIR_C1 ", 35, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1481 matmgr.Medium("SHIL", 55, "AIR_C2 ", 55, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1482 matmgr.Medium("SHIL", 75, "AIR_MUON ", 75, 0, isxfld2, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1483
1484 // Vacuum
1485 matmgr.Mixture("SHIL", 16, "VACUUM1 ", aAir, zAir, dAir1, 4, wAir);
1486 matmgr.Mixture("SHIL", 36, "VACUUM2 ", aAir, zAir, dAir1, 4, wAir);
1487 matmgr.Mixture("SHIL", 56, "VACUUM3 ", aAir, zAir, dAir1, 4, wAir);
1488 matmgr.Medium("SHIL", 16, "VA_C0 ", 16, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1489 matmgr.Medium("SHIL", 36, "VA_C1 ", 36, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1490 matmgr.Medium("SHIL", 56, "VA_C2 ", 56, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1491
1492 // Stainless Steel
1493 matmgr.Mixture("SHIL", 19, "STAINLESS STEEL1", asteel, zsteel, 7.88, 4, wsteel);
1494 matmgr.Mixture("SHIL", 39, "STAINLESS STEEL2", asteel, zsteel, 7.88, 4, wsteel);
1495 matmgr.Mixture("SHIL", 59, "STAINLESS STEEL3", asteel, zsteel, 7.88, 4, wsteel);
1496 matmgr.Medium("SHIL", 19, "ST_C0 ", 19, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1497 matmgr.Medium("SHIL", 39, "ST_C1 ", 39, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1498 matmgr.Medium("SHIL", 59, "ST_C3 ", 59, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1499
1500 // Lead/Tungsten
1501 matmgr.Mixture("SHIL", 20, "LEAD/TUNGSTEN1", apbw, zpbw, 15.325, 2, wpbw);
1502 matmgr.Mixture("SHIL", 40, "LEAD/TUNGSTEN2", apbw, zpbw, 15.325, 2, wpbw);
1503 matmgr.Mixture("SHIL", 60, "LEAD/TUNGSTEN3", apbw, zpbw, 15.325, 2, wpbw);
1504 matmgr.Medium("SHIL", 20, "PB/W0 ", 20, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1505 matmgr.Medium("SHIL", 40, "PB/W1 ", 40, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1506 matmgr.Medium("SHIL", 60, "PB/W3 ", 60, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1507
1508 // Ni/Tungsten
1509 // Ni-W-Cu
1510 matmgr.Mixture("SHIL", 21, "Ni-W-Cu1", aniwcu, zniwcu, 18.78, 3, wniwcu);
1511 matmgr.Mixture("SHIL", 41, "Ni-W-Cu2", aniwcu, zniwcu, 18.78, 3, wniwcu);
1512 matmgr.Mixture("SHIL", 61, "Ni-W-Cu3", aniwcu, zniwcu, 18.78, 3, wniwcu);
1513 matmgr.Medium("SHIL", 21, "Ni/W0 ", 21, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1514 matmgr.Medium("SHIL", 41, "Ni/W1 ", 41, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1515 matmgr.Medium("SHIL", 61, "Ni/W3 ", 61, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1516
1517 // Concrete
1518 matmgr.Mixture("SHIL", 17, "CONCRETE1", aconc, zconc, 2.35, 10, wconc);
1519 matmgr.Mixture("SHIL", 37, "CONCRETE2", aconc, zconc, 2.35, 10, wconc);
1520 matmgr.Mixture("SHIL", 57, "CONCRETE3", aconc, zconc, 2.35, 10, wconc);
1521 matmgr.Medium("SHIL", 17, "CC_C0 ", 17, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1522 matmgr.Medium("SHIL", 37, "CC_C1 ", 37, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1523 matmgr.Medium("SHIL", 57, "CC_C2 ", 57, 0, 0, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1524
1525 // Cast iron
1526 matmgr.Mixture("SHIL", 18, "CAST IRON1", acasti, zcasti, 7.2, 4, wcasti);
1527 matmgr.Mixture("SHIL", 38, "CAST IRON2", acasti, zcasti, 7.2, 4, wcasti);
1528 matmgr.Mixture("SHIL", 58, "CAST IRON3", acasti, zcasti, 7.2, 4, wcasti);
1529 matmgr.Medium("SHIL", 18, "CAST_IRON0 ", 18, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1530 matmgr.Medium("SHIL", 38, "CAST_IRON1 ", 38, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1531 matmgr.Medium("SHIL", 58, "CAST_IRON2 ", 58, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1532}
1533
1534FairModule* Shil::CloneModule() const { return new Shil(*this); }
Definition of the Detector class.
#define kDegrad
int32_t i
ClassImp(IdPath)
TGeoPcon * MakeShapeFromTemplate(const TGeoPcon *pcon, Float_t drMin, Float_t drMax)
Definition Absorber.cxx:211
uint32_t j
Definition RawData.h:0
void InvertPcon(TGeoPcon *pcon)
Definition Shil.cxx:50
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
void ConstructGeometry() override
Definition Shil.cxx:97
FairModule * CloneModule() const override
Clone this object (used in MT mode only)
Definition Shil.cxx:1534
~Shil() override
GLdouble GLdouble GLdouble GLdouble top
Definition glcorearb.h:4077
GLuint const GLchar * name
Definition glcorearb.h:781
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843