Clean-up.
[u/mrichter/AliRoot.git] / STRUCT / AliSHILv3.cxx
CommitLineData
20c7dbe5 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id $ */
17
18//-------------------------------------------------------------------------
19// The small angle absorber SAA (beam shield)
20// Author: A.Morsch
21// andreas.morsch@cern.ch
22//-------------------------------------------------------------------------
23
24#include <TVirtualMC.h>
25#include <TArrayI.h>
26#include <TGeoVolume.h>
27#include <TGeoTube.h>
28#include <TGeoManager.h>
29#include <TGeoMatrix.h>
30#include <TGeoCompositeShape.h>
31#include <TGeoBBox.h>
32#include <TGeoPgon.h>
33#include <TGeoCone.h>
34
35#include "AliSHILv3.h"
36#include "AliConst.h"
37#include "AliLog.h"
38
39ClassImp(AliSHILv3)
40
41//_____________________________________________________________________________
42AliSHILv3::AliSHILv3()
43{
44 //
45 // Default constructor for muon shield
46 //
47}
48
49//_____________________________________________________________________________
50AliSHILv3::AliSHILv3(const char *name, const char *title)
51 : AliSHIL(name,title)
52{
53 //
54 // Standard constructor for muon shield
55 //
20c7dbe5 56}
57
58//_____________________________________________________________________________
59void AliSHILv3::CreateGeometry()
60{
61//
62// The geometry of the small angle absorber "Beam Shield"
63//
64 Float_t dz, dr, z, rmax;
65//
66// The top volume
67//
68 TGeoVolume* top = gGeoManager->GetVolume("ALIC");
69
70//
71// Translations
72//
73 TGeoTranslation* vec0 = new TGeoTranslation(0., 0., 0.);
74// Rotations
75 TGeoRotation* rot000 = new TGeoRotation("rot000", 90., 0., 90., 90., 0., 0.);
76 TGeoRotation* rot090 = new TGeoRotation("rot090", 90., 90., 90., 180., 0., 0.);
77 TGeoRotation* rot180 = new TGeoRotation("rot180", 90., 180., 90., 270., 0., 0.);
78 TGeoRotation* rot270 = new TGeoRotation("rot270", 90., 270., 90., 0., 0., 0.);
79//
80// Media
81//
82 TGeoMedium* kMedNiW = gGeoManager->GetMedium("SHIL_Ni/W0");
83 TGeoMedium* kMedNiWsh = gGeoManager->GetMedium("SHIL_Ni/W3");
e7300821 84//
20c7dbe5 85 TGeoMedium* kMedSteel = gGeoManager->GetMedium("SHIL_ST_C0");
86 TGeoMedium* kMedSteelSh = gGeoManager->GetMedium("SHIL_ST_C3");
e7300821 87//
20c7dbe5 88 TGeoMedium* kMedAir = gGeoManager->GetMedium("SHIL_AIR_C0");
89 TGeoMedium* kMedAirMu = gGeoManager->GetMedium("SHIL_AIR_MUON");
e7300821 90//
20c7dbe5 91 TGeoMedium* kMedPb = gGeoManager->GetMedium("SHIL_PB_C0");
92 TGeoMedium* kMedPbSh = gGeoManager->GetMedium("SHIL_PB_C2");
e7300821 93//
20c7dbe5 94 TGeoMedium* kMedConc = gGeoManager->GetMedium("SHIL_CC_C0");
95//
96 const Float_t kDegRad = TMath::Pi() / 180.;
97 const Float_t kAngle02 = TMath::Tan( 2.00 * kDegRad);
98 const Float_t kAngle0071 = TMath::Tan( 0.71 * kDegRad);
99
100
101///////////////////////////////////
102// FA Tungsten Tail //
103// Drawing ALIP2A__0049 //
104// Drawing ALIP2A__0111 //
105///////////////////////////////////
106//
107// The tail as built is shorter than in drawing ALIP2A__0049.
108// The CDD data base has to be updated !
109//
110// Inner radius at the entrance of the flange
111 Float_t rInFaWTail1 = 13.98/2.;
112// Outer radius at the entrance of the flange
113 Float_t rOuFaWTail1 = 52.00/2.;
114// Outer radius at the end of the section inside the FA
115 Float_t rOuFaWTail2 = 35.27/2.;
116// Length of the Flange section inside the FA
117 Float_t dzFaWTail1 = 6.00;
118// Length of the Flange section ouside the FA
119 Float_t dzFaWTail2 = 12.70;
120// Inner radius at the end of the section inside the FA
121 Float_t rInFaWTail2 = rInFaWTail1 + dzFaWTail1 * kAngle0071;
122// Inner radius at the end of the flange
123 Float_t rInFaWTail3 = rInFaWTail2 + dzFaWTail2 * kAngle0071;
124// Outer radius at the end of the flange
125 Float_t rOuFaWTail3 = rOuFaWTail2 + dzFaWTail2 * kAngle02;
126// Outer radius of the recess for station 1
127 Float_t rOuFaWTailR = 30.8/2.;
128// Length of the recess
129 Float_t dzFaWTailR = 36.00;
130// Inner radiues at the end of the recess
131 Float_t rInFaWTail4 = rInFaWTail3 + dzFaWTailR * kAngle0071;
132// Outer radius at the end of the recess
133 Float_t rOuFaWTail4 = rOuFaWTail3 + dzFaWTailR * kAngle02;
134// Inner radius of the straight section
135 Float_t rInFaWTailS = 22.30/2.;
136// Length of the bulge
137 Float_t dzFaWTailB = 13.0;
138// Outer radius at the end of the bulge
139 Float_t rOuFaWTailB = rOuFaWTail4 + dzFaWTailB * kAngle02;
140// Outer radius at the end of the tail
141 Float_t rOuFaWTailE = 31.6/2.;
142// Total length of the tail
143 Float_t dzFaWTail = 70.7;
144
145 TGeoPcon* shFaWTail = new TGeoPcon(0., 360., 10);
146 z = 0.;
147// Flange section inside FA
148 shFaWTail->DefineSection(0, z, rInFaWTail1, rOuFaWTail1);
149 z += dzFaWTail1;
150 shFaWTail->DefineSection(1, z, rInFaWTail2, rOuFaWTail1);
151 shFaWTail->DefineSection(2, z, rInFaWTail2, rOuFaWTail2);
152// Flange section outside FA
153 z += dzFaWTail2;
154 shFaWTail->DefineSection(3, z, rInFaWTail3, rOuFaWTail3);
155 shFaWTail->DefineSection(4, z, rInFaWTail3, rOuFaWTailR);
156// Recess Station 1
157 z += dzFaWTailR;
158 shFaWTail->DefineSection(5, z, rInFaWTail4, rOuFaWTailR);
159 shFaWTail->DefineSection(6, z, rInFaWTailS, rOuFaWTail4);
160// Bulge
161 z += dzFaWTailB;
162 shFaWTail->DefineSection(7, z, rInFaWTailS, rOuFaWTailB);
163 shFaWTail->DefineSection(8, z, rInFaWTailS, rOuFaWTailE);
164// End
165 z = dzFaWTail;
166 shFaWTail->DefineSection(9, z, rInFaWTailS, rOuFaWTailE);
167
168 TGeoVolume* voFaWTail = new TGeoVolume("YFaWTail", shFaWTail, kMedNiW);
169//
170// Define an inner region with higher transport cuts
171 TGeoPcon* shFaWTailI = new TGeoPcon(0., 360., 4);
172 z = 0.;
173 dr = 3.5;
174 shFaWTailI->DefineSection(0, z, rInFaWTail1, rInFaWTail1 + dr);
175 z += (dzFaWTail1 + dzFaWTail2 + dzFaWTailR);
176 shFaWTailI->DefineSection(1, z, rInFaWTail4, rInFaWTail4 + dr);
177 shFaWTailI->DefineSection(2, z, rInFaWTailS, rInFaWTailS + dr);
178 z = dzFaWTail;
179 shFaWTailI->DefineSection(3, z, rInFaWTailS, rInFaWTailS + dr);
180 TGeoVolume* voFaWTailI = new TGeoVolume("YFaWTailI", shFaWTailI, kMedNiWsh);
181 voFaWTail->AddNode(voFaWTailI, 1, vec0);
182
183///////////////////////////////////
184// //
185// Recess Station 1 //
186// Drawing ALIP2A__0260 //
187///////////////////////////////////
188
189///////////////////////////////////
190// FA W-Ring 2 //
191// Drawing ALIP2A__0220 //
192///////////////////////////////////
193 const Float_t kFaWring2Rinner = 15.40;
194 const Float_t kFaWring2Router = 18.40;
195 const Float_t kFaWring2HWidth = 3.75;
196 const Float_t kFaWring2Cutoffx = 3.35;
197 const Float_t kFaWring2Cutoffy = 3.35;
198 TGeoTubeSeg* shFaWring2a = new TGeoTubeSeg(kFaWring2Rinner, kFaWring2Router, kFaWring2HWidth, 0., 90.);
199 shFaWring2a->SetName("shFaWring2a");
200 TGeoBBox* shFaWring2b = new TGeoBBox(kFaWring2Router / 2., kFaWring2Router / 2., kFaWring2HWidth);
201 shFaWring2b->SetName("shFaWring2b");
202 TGeoTranslation* trFaWring2b
203 = new TGeoTranslation("trFaWring2b", kFaWring2Router / 2. + kFaWring2Cutoffx, kFaWring2Router / 2. + kFaWring2Cutoffy, 0.);
204 trFaWring2b->RegisterYourself();
205 TGeoCompositeShape* shFaWring2 = new TGeoCompositeShape("shFaWring2", "(shFaWring2a)*(shFaWring2b:trFaWring2b)");
206 TGeoVolume* voFaWring2 = new TGeoVolume("YFA_WRING2", shFaWring2, kMedNiW);
207
208///////////////////////////////////
209// FA W-Ring 3 //
210// Drawing ALIP2A__0219 //
211///////////////////////////////////
212 const Float_t kFaWring3Rinner = 15.40;
213 const Float_t kFaWring3Router = 18.40;
214 const Float_t kFaWring3HWidth = 3.75;
215 const Float_t kFaWring3Cutoffx = 3.35;
216 const Float_t kFaWring3Cutoffy = 3.35;
217 TGeoTubeSeg* shFaWring3a = new TGeoTubeSeg(kFaWring3Rinner, kFaWring3Router, kFaWring3HWidth, 0., 90.);
218 shFaWring3a->SetName("shFaWring3a");
219 TGeoBBox* shFaWring3b = new TGeoBBox(kFaWring3Router / 2., kFaWring3Router / 2., kFaWring3HWidth);
220 shFaWring3b->SetName("shFaWring3b");
221 TGeoTranslation* trFaWring3b
222 = new TGeoTranslation("trFaWring3b", kFaWring3Router / 2. + kFaWring3Cutoffx, kFaWring3Router / 2. + kFaWring3Cutoffy, 0.);
223 trFaWring3b->RegisterYourself();
224 TGeoCompositeShape* shFaWring3 = new TGeoCompositeShape("shFaWring3", "(shFaWring3a)*(shFaWring3b:trFaWring3b)");
225 TGeoVolume* voFaWring3 = new TGeoVolume("YFA_WRING3", shFaWring3, kMedNiW);
226
227///////////////////////////////////
228// FA W-Ring 5 //
229// Drawing ALIP2A__0221 //
230///////////////////////////////////
231 const Float_t kFaWring5Rinner = 15.40;
232 const Float_t kFaWring5Router = 18.67;
233 const Float_t kFaWring5HWidth = 1.08;
234 TGeoVolume* voFaWring5 = new TGeoVolume("YFA_WRING5", new TGeoTube(kFaWring5Rinner, kFaWring5Router, kFaWring5HWidth), kMedNiW);
235
236//
237// Position the rings in the assembly
238//
239 TGeoVolumeAssembly* asFaExtraShield = new TGeoVolumeAssembly("YCRE");
240// Distance between rings
241 const Float_t kFaDWrings = 1.92;
242//
243 dz = 0.;
244
245 dz += kFaWring2HWidth;
246 asFaExtraShield->AddNode(voFaWring2, 1, new TGeoCombiTrans(0., 0., dz, rot090));
247 asFaExtraShield->AddNode(voFaWring2, 2, new TGeoCombiTrans(0., 0., dz, rot270));
248 dz += kFaWring2HWidth;
249 dz += kFaDWrings;
250 dz += kFaWring3HWidth;
251 asFaExtraShield->AddNode(voFaWring3, 1, new TGeoCombiTrans(0., 0., dz, rot000));
252 asFaExtraShield->AddNode(voFaWring3, 2, new TGeoCombiTrans(0., 0., dz, rot180));
253 dz += kFaWring3HWidth;
254 dz += kFaWring5HWidth;
255 asFaExtraShield->AddNode(voFaWring5, 1, new TGeoTranslation(0., 0., dz));
256 dz += kFaWring5HWidth;
257 dz += kFaWring3HWidth;
258 asFaExtraShield->AddNode(voFaWring3, 3, new TGeoCombiTrans(0., 0., dz, rot090));
259 asFaExtraShield->AddNode(voFaWring3, 4, new TGeoCombiTrans(0., 0., dz, rot270));
260 dz += kFaWring3HWidth;
261 dz += kFaDWrings;
262 dz += kFaWring2HWidth;
263 asFaExtraShield->AddNode(voFaWring2, 3, new TGeoCombiTrans(0., 0., dz, rot000));
264 asFaExtraShield->AddNode(voFaWring2, 4, new TGeoCombiTrans(0., 0., dz, rot180));
265 dz += kFaWring2HWidth;
266
267
268///////////////////////////////////////
269// SAA1 //
270///////////////////////////////////////
271
272
273///////////////////////////////////////
274// FA/SAA1 W Joint //
275// Drawing ALIP2A__0060 //
276///////////////////////////////////////
277
278// Length of flange FA side
279 Float_t dzFaSaa1F1 = 2.8;
280// Inner radius of flange FA side
281 Float_t rInFaSaa1F1 = 32.0/2.;
282// Outer radius of flange FA side
283 Float_t rOuFaSaa1F1 = 39.5/2.;
284// Length of first straight section
285 Float_t dzFaSaa1S1 = 18.5 - dzFaSaa1F1;
286// Inner radius of first straight section
287 Float_t rInFaSaa1S1 = 22.3/2.;
288// Length of 45 deg transition region
289 Float_t dzFaSaa1T1 = 2.2;
290// Inner radius of second straight section
291 Float_t rInFaSaa1S2 = 17.9/2.;
292// Length of second straight section
293 Float_t dzFaSaa1S2 = 10.1;
294// Length of flange SAA1 side
295// Float_t dzFaSaa1F2 = 4.0;
296// Inner radius of flange FA side
297 Float_t rInFaSaa1F2 = 25.2/2.;
298// Length of joint
299 Float_t dzFaSaa1 = 34.8;
300// Outer Radius at the end of the joint
301 Float_t rOuFaSaa1E = 41.93/2.;
302
303
304 TGeoPcon* shFaSaa1 = new TGeoPcon(0., 360., 8);
305 z = 0;
306// Flange FA side
307 shFaSaa1->DefineSection( 0, z, rInFaSaa1F1, rOuFaSaa1F1);
308 z += dzFaSaa1F1;
309 shFaSaa1->DefineSection( 1, z, rInFaSaa1F1, 40.0);
310 shFaSaa1->DefineSection( 2, z, rInFaSaa1S1, 40.0);
311// First straight section
312 z += dzFaSaa1S1;
313 shFaSaa1->DefineSection( 3, z, rInFaSaa1S1, 40.0);
314// 45 deg transition region
315 z += dzFaSaa1T1;
316 shFaSaa1->DefineSection( 4, z, rInFaSaa1S2, 40.0);
317// Second straight section
318 z += dzFaSaa1S2;
319 shFaSaa1->DefineSection( 5, z, rInFaSaa1S2, 40.0);
320 shFaSaa1->DefineSection( 6, z, rInFaSaa1F2, 40.0);
321// Flange SAA1 side
322 z = dzFaSaa1;
323 shFaSaa1->DefineSection( 7, z, rInFaSaa1F2, rOuFaSaa1E);
324
325// Outer 2 deg line
326 for (Int_t i = 1; i < 7; i++) {
327 Double_t z = shFaSaa1->GetZ(i);
328 Double_t r1 = shFaSaa1->GetRmin(i);
329 Double_t r2 = 39.5/2. + z * TMath::Tan(2. * kDegRad) - 0.01;
330 shFaSaa1->DefineSection(i, z, r1, r2);
331 }
332 TGeoVolume* voFaSaa1 = new TGeoVolume("YFASAA1", shFaSaa1, kMedNiWsh);
333//
334// Outer region with lower transport cuts
335 TGeoCone* shFaSaa1O = new TGeoCone(dzFaSaa1/2., rOuFaSaa1F1 - 3.5, rOuFaSaa1F1, rOuFaSaa1E - 3.5, rOuFaSaa1E);
336 TGeoVolume* voFaSaa1O = new TGeoVolume("YFASAA1O", shFaSaa1O, kMedNiW);
337 voFaSaa1->AddNode(voFaSaa1O, 1, new TGeoTranslation(0., 0., dzFaSaa1/2.));
338
339
340///////////////////////////////////
341// SAA1 Steel Envelope //
342// Drawing ALIP2A__0039 //
343///////////////////////////////////
344
345 Float_t rOut; // Outer radius
346// Thickness of the steel envelope
347 Float_t dSt = 4.;
348// 4 Section
349// z-positions
350 Float_t zSaa1StEnv[5] = {111.2, 113.7, 229.3, 195.0};
351// Radii
352// 1
353 Float_t rOuSaa1StEnv1 = 40.4/2.;
354 Float_t rInSaa1StEnv1 = rOuSaa1StEnv1 - dSt;
355// 2
356 Float_t rInSaa1StEnv2 = 41.7/2.;
357 Float_t rOuSaa1StEnv2 = rInSaa1StEnv2 + dSt / TMath::Cos(2.0 * kDegRad);
358// 3
359 Float_t rOuSaa1StEnv3 = 57.6/2.;
360 Float_t rInSaa1StEnv3 = rOuSaa1StEnv3 - dSt;
361// 4
362 Float_t rInSaa1StEnv4 = 63.4/2.;
363 Float_t rOuSaa1StEnv4 = rInSaa1StEnv4 + dSt / TMath::Cos(1.6 * kDegRad);
364// end
365 Float_t rInSaa1StEnv5 = 74.28/2.;
366 Float_t rOuSaa1StEnv5 = rInSaa1StEnv5 + dSt / TMath::Cos(1.6 * kDegRad);
367// Relative starting position
368 Float_t zSaa1StEnvS = 3.;
369
370 TGeoPcon* shSaa1StEnv = new TGeoPcon(0., 360., 11);
371// 1st Section
372 z = zSaa1StEnvS;
373 shSaa1StEnv->DefineSection( 0, z, rInSaa1StEnv1, rOuSaa1StEnv1);
374 z += (zSaa1StEnv[0] - dSt);
375 shSaa1StEnv->DefineSection( 1, z, rInSaa1StEnv1, rOuSaa1StEnv1);
376// 1 - 2
377 shSaa1StEnv->DefineSection( 2, z, rInSaa1StEnv1, rOuSaa1StEnv2);
378 z += dSt;
379 shSaa1StEnv->DefineSection( 3, z, rInSaa1StEnv1, rOuSaa1StEnv2);
380// 2nd Section
381 shSaa1StEnv->DefineSection( 4, z, rInSaa1StEnv2, rOuSaa1StEnv2);
382 z += zSaa1StEnv[1];
383 shSaa1StEnv->DefineSection( 5, z, rInSaa1StEnv3, rOuSaa1StEnv3);
384// 3rd Section
385 z += (zSaa1StEnv[2] - dSt);
386 shSaa1StEnv->DefineSection( 6, z, rInSaa1StEnv3, rOuSaa1StEnv3);
387// 3 - 4
388 shSaa1StEnv->DefineSection( 7, z, rInSaa1StEnv3, rOuSaa1StEnv4);
389 z += dSt;
390 shSaa1StEnv->DefineSection( 8, z, rInSaa1StEnv3, rOuSaa1StEnv4);
391// 4th Section
392 shSaa1StEnv->DefineSection( 9, z, rInSaa1StEnv4, rOuSaa1StEnv4);
393 z += zSaa1StEnv[3];
394 shSaa1StEnv->DefineSection(10, z, rInSaa1StEnv5, rOuSaa1StEnv5);
395 TGeoVolume* voSaa1StEnv = new TGeoVolume("YSAA1_SteelEnvelope", shSaa1StEnv, kMedSteel);
396
397
398
399
400
401///////////////////////////////////
402// SAA1 W-Pipe //
403// Drawing ALIP2A__0059 //
404///////////////////////////////////
405//
406// Flange FA side
407// Length of first section
408 Float_t dzSaa1WPipeF1 = 0.9;
409// Outer radius
410 Float_t rOuSaa1WPipeF1 = 24.5/2.;
411// Inner Radius
412 Float_t rInSaa1WPipeF1 = 22.0/2.;
413// Length of second section
414 Float_t dzSaa1WPipeF11 = 2.1;
415// Inner Radius
416 Float_t rInSaa1WPipeF11 = 18.5/2.;
417//
418// Central tube
419// Length
420 Float_t dzSaa1WPipeC = 111.2;
421// Inner Radius at the end
422 Float_t rInSaa1WPipeC = 22.0/2.;
423// Outer Radius
424 Float_t rOuSaa1WPipeC = 31.9/2.;
425//
426// Flange SAA2 Side
427// Length
428 Float_t dzSaa1WPipeF2 = 6.0;
429// Outer radius
430 Float_t rOuSaa1WPipeF2 = 41.56/2.;
431
432//
433 TGeoPcon* shSaa1WPipe = new TGeoPcon(0., 360., 8);
434 z = 0.;
435// Flange FA side first section
436 shSaa1WPipe->DefineSection( 0, z, rInSaa1WPipeF1 , rOuSaa1WPipeF1);
437 z += dzSaa1WPipeF1;
438 shSaa1WPipe->DefineSection( 1, z, rInSaa1WPipeF1 , rOuSaa1WPipeF1);
439// Flange FA side second section
440 shSaa1WPipe->DefineSection( 2, z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
441 z += dzSaa1WPipeF11;
442 shSaa1WPipe->DefineSection( 3, z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
443// Central Section
444 shSaa1WPipe->DefineSection( 4, z, rInSaa1WPipeF11, rOuSaa1WPipeC);
445 z += dzSaa1WPipeC;
446 shSaa1WPipe->DefineSection( 5, z, rInSaa1WPipeC, rOuSaa1WPipeC);
447// Flange SAA2 side
448 shSaa1WPipe->DefineSection( 6, z, rInSaa1WPipeC, rOuSaa1WPipeF2);
449 z += dzSaa1WPipeF2;
450 shSaa1WPipe->DefineSection( 7, z, rInSaa1WPipeC, rOuSaa1WPipeF2);
451
452 TGeoVolume* voSaa1WPipe = new TGeoVolume("YSAA1_WPipe", shSaa1WPipe, kMedNiW);
453//
454// Inner region with higher transport cuts
455 TGeoTube* shSaa1WPipeI = new TGeoTube(rInSaa1WPipeC, rOuSaa1WPipeC, dzSaa1WPipeC/2.);
456 TGeoVolume* voSaa1WPipeI = new TGeoVolume("YSAA1_WPipeI", shSaa1WPipeI, kMedNiWsh);
457 voSaa1WPipe->AddNode(voSaa1WPipeI, 1, new TGeoTranslation(0., 0., dzSaa1WPipeF1 + dzSaa1WPipeF11 + dzSaa1WPipeC/2));
458
459
460///////////////////////////////////
461// SAA1 Pb Components //
462// Drawing ALIP2A__0078 //
463///////////////////////////////////
464//
465// Inner angle
466 Float_t tanAlpha = TMath::Tan(1.69 / 2. * kDegRad);
467 Float_t tanBeta = TMath::Tan(3.20 / 2. * kDegRad);
468//
469// 1st Section 2deg opening cone
470// Length
471 Float_t dzSaa1PbComp1 = 100.23;
472// Inner radius at entrance
473 Float_t rInSaa1PbComp1 = 22.0/2.; // It's 21 cm diameter in the drawing. Is this a typo ??!!
474// Outer radius at entrance
475 Float_t rOuSaa1PbComp1 = 42.0/2.;
476//
477// 2nd Section: Straight Section
478// Length
479 Float_t dzSaa1PbComp2 = 236.77;
480// Inner radius
481 Float_t rInSaa1PbComp2 = rInSaa1PbComp1 + dzSaa1PbComp1 * tanAlpha;
482// Outer radius
483 Float_t rOuSaa1PbComp2 = 49.0/2.;
484//
485// 3rd Section: 1.6deg opening cone until bellow
486// Length
487 Float_t dzSaa1PbComp3 = 175.6;
488// Inner radius
489 Float_t rInSaa1PbComp3 = rInSaa1PbComp2 + dzSaa1PbComp2 * tanAlpha;
490// Outer radius
491 Float_t rOuSaa1PbComp3 = 62.8/2.;
492//
493// 4th Section: Bellow region
494 Float_t dzSaa1PbComp4 = 26.4;
495// Inner radius
496 Float_t rInSaa1PbComp4 = 37.1/2.;
497 Float_t rInSaa1PbCompB = 43.0/2.;
498// Outer radius
499 Float_t rOuSaa1PbComp4 = rOuSaa1PbComp3 + dzSaa1PbComp3 * tanBeta;
500//
501// 5th Section: Flange SAA2 side
502// 1st detail
503 Float_t dzSaa1PbCompF1 = 4.;
504 Float_t rOuSaa1PbCompF1 = 74.1/2.;
505// 2nd detail
506 Float_t dzSaa1PbCompF2 = 3.;
507 Float_t rOuSaa1PbCompF2 = 66.0/2.;
508 Float_t rOuSaa1PbCompF3 = 58.0/2.;
509
510
511 TGeoPcon* shSaa1PbComp = new TGeoPcon(0., 360., 11);
512 z = 120.2;
513// 2 deg opening cone
514 shSaa1PbComp->DefineSection( 0, z, rInSaa1PbComp1, rOuSaa1PbComp1);
515 z += dzSaa1PbComp1;
516 shSaa1PbComp->DefineSection( 1, z, rInSaa1PbComp2, rOuSaa1PbComp2);
517// Straight section
518 z += dzSaa1PbComp2;
519 shSaa1PbComp->DefineSection( 2, z, rInSaa1PbComp3, rOuSaa1PbComp2);
520// 1.6 deg opening cone
521 shSaa1PbComp->DefineSection( 3, z, rInSaa1PbComp3, rOuSaa1PbComp3);
522 z += dzSaa1PbComp3;
523 shSaa1PbComp->DefineSection( 4, z, rInSaa1PbComp4, rOuSaa1PbComp4);
524// Bellow region until outer flange
525 shSaa1PbComp->DefineSection( 5, z, rInSaa1PbCompB, rOuSaa1PbComp4);
526 z += (dzSaa1PbComp4 - dzSaa1PbCompF1 - dzSaa1PbCompF2);
527 shSaa1PbComp->DefineSection( 6, z, rInSaa1PbCompB, rOuSaa1PbCompF1);
528 shSaa1PbComp->DefineSection( 7, z, rInSaa1PbCompB, rOuSaa1PbCompF2);
529// Flange first step
530 z += dzSaa1PbCompF1;
531 shSaa1PbComp->DefineSection( 8, z, rInSaa1PbCompB, rOuSaa1PbCompF2);
532 shSaa1PbComp->DefineSection( 9, z, rInSaa1PbCompB, rOuSaa1PbCompF3);
533// Flange second step
534 z += dzSaa1PbCompF2;
535 shSaa1PbComp->DefineSection( 10, z, rInSaa1PbCompB, rOuSaa1PbCompF3);
536
537 TGeoVolume* voSaa1PbComp = new TGeoVolume("YSAA1_PbComp", shSaa1PbComp, kMedPb);
538//
539// Inner region with higher transport cuts
540 TGeoPcon* shSaa1PbCompI = MakeShapeFromTemplate(shSaa1PbComp, 0., -3.);
541 TGeoVolume* voSaa1PbCompI = new TGeoVolume("YSAA1_PbCompI", shSaa1PbCompI, kMedPbSh);
542 voSaa1PbComp->AddNode(voSaa1PbCompI, 1, vec0);
543
544///////////////////////////////////
545// SAA1 W-Cone //
546// Drawing ALIP2A__0058 //
547///////////////////////////////////
548 // Length of the Cone
549 Float_t dzSaa1WCone = 52.9;
550 // Inner and outer radii
551 Float_t rInSaa1WCone1 = 20.4;
552 Float_t rOuSaa1WCone1 = rInSaa1WCone1 + 0.97;
553 Float_t rOuSaa1WCone2 = rInSaa1WCone1 + 2.80;
554 // relative z-position
555 Float_t zSaa1WCone = 9.3;
556
557
558 TGeoPcon* shSaa1WCone = new TGeoPcon(0., 360., 2);
559 z = zSaa1WCone;
560 shSaa1WCone->DefineSection( 0, z, rInSaa1WCone1, rOuSaa1WCone1);
561 z += dzSaa1WCone;
562 shSaa1WCone->DefineSection( 1, z, rInSaa1WCone1, rOuSaa1WCone2);
563 TGeoVolume* voSaa1WCone = new TGeoVolume("YSAA1_WCone", shSaa1WCone, kMedNiW);
564
565///////////////////////////////////
566// SAA1 Steel-Ring //
567// Drawing ALIP2A__0040 //
568///////////////////////////////////
569//
570// Length of the ring
571 Float_t dzSaa1StRing = 4.;
572// Inner and outer radius
573 Float_t rInSaa1String = 33.0;
574 Float_t rOuSaa1String = 41.1;
575// Relative z-position
576 Float_t zSaa1StRing = 652.2;
577 TGeoPcon* shSaa1StRing = new TGeoPcon(0., 360., 2);
578 z = zSaa1StRing;
579 shSaa1StRing->DefineSection( 0, z, rInSaa1String, rOuSaa1String);
580 z += dzSaa1StRing;
581 shSaa1StRing->DefineSection( 1, z, rInSaa1String, rOuSaa1String);
582 TGeoVolume* voSaa1StRing = new TGeoVolume("YSAA1_StRing", shSaa1StRing, kMedSteel);
583
584///////////////////////////////////
585// SAA1 Inner Tube //
586// Drawing ALIP2A__0082 //
587///////////////////////////////////
588//
589// Length of saa2: 659.2 cm
590// Length of inner tube: 631.9 cm
591// Lenth of bellow cavern: 27.3 cm
592// Radius at entrance 18.5/2, d = 0.3
593// Radius at exit 37.1/2, d = 0.3
594//
595 Float_t dzSaa1InnerTube = 631.9/2.; // Half length of the tube
596 Float_t rInSaa1InnerTube = 18.2/2.; // Radius at entrance
597 Float_t rOuSaa1InnerTube = 36.8/2.; // Radius at exit
598 Float_t dSaa1InnerTube = 0.2 ; // Thickness
599 TGeoVolume* voSaa1InnerTube = new TGeoVolume("YSAA1_InnerTube",
600 new TGeoCone(dzSaa1InnerTube,
601 rInSaa1InnerTube - dSaa1InnerTube, rInSaa1InnerTube,
602 rOuSaa1InnerTube - dSaa1InnerTube, rOuSaa1InnerTube),
603 kMedSteelSh);
604
605///////////////////////////////////
606// SAA1 Outer Shape //
607// Drawing ALIP2A__0107 //
608///////////////////////////////////
609 // Total length
610 Float_t dzSaa1 = 659.2;
611 //
612 TGeoPcon* shSaa1M = new TGeoPcon(0., 360., 20);
613 Float_t kSec = 0.01; // security distance to avoid trivial extrusions
614 Float_t rmin = rInSaa1InnerTube - dSaa1InnerTube - kSec;
615 rmax = rOuSaa1InnerTube - dSaa1InnerTube - kSec;
616 z = 0.;
617 shSaa1M->DefineSection( 0, z, rmin, rOuSaa1WPipeF1);
618 z += dzSaa1WPipeF1;
619 shSaa1M->DefineSection( 1, z, rmin, rOuSaa1WPipeF1);
620 shSaa1M->DefineSection( 2, z, 0., rOuSaa1WPipeF1);
621 z += dzSaa1WPipeF11;
622 shSaa1M->DefineSection( 3, z, 0., rOuSaa1WPipeF1);
623 shSaa1M->DefineSection( 4, z, 0., rOuSaa1StEnv1);
624 z = zSaa1WCone;
625 shSaa1M->DefineSection( 5, z, 0., rOuSaa1StEnv1);
626 shSaa1M->DefineSection( 6, z, 0., rOuSaa1WCone1);
627 z += dzSaa1WCone;
628 shSaa1M->DefineSection( 7, z, 0., rOuSaa1WCone2);
629 shSaa1M->DefineSection( 8, z, 0., rOuSaa1StEnv1);
630 z = zSaa1StEnv[0] - dSt + zSaa1StEnvS;
631 shSaa1M->DefineSection( 9, z, 0., rOuSaa1StEnv1);
632 shSaa1M->DefineSection(10, z, 0., rOuSaa1StEnv2);
633 z += (zSaa1StEnv[1] + dSt);
634 shSaa1M->DefineSection(11, z, 0., rOuSaa1StEnv3);
635 z += (zSaa1StEnv[2] - dSt);
636 shSaa1M->DefineSection(12, z, 0., rOuSaa1StEnv3);
637 shSaa1M->DefineSection(13, z, 0., rOuSaa1StEnv4);
638
639 z += (zSaa1StEnv[3] - dSt + dzSaa1PbCompF1 + dzSaa1PbCompF2 - dzSaa1PbComp4);
640 Float_t rmaxSaa1 = shSaa1M->GetRmax(13) + (z - shSaa1M->GetZ(13)) * TMath::Tan(1.6 * kDegRad);
641
642 shSaa1M->DefineSection(14, z, 0., rmaxSaa1);
643 shSaa1M->DefineSection(15, z, rmax, rmaxSaa1);
644 z = zSaa1StRing;
645 shSaa1M->DefineSection(16, z, rmax, rOuSaa1String);
646 z += dzSaa1PbCompF1;
647 shSaa1M->DefineSection(17, z, rmax, rOuSaa1String);
648 shSaa1M->DefineSection(18, z, rmax, rOuSaa1PbCompF3);
649 z += dzSaa1PbCompF2;
650 shSaa1M->DefineSection(19, z, rmax, rOuSaa1PbCompF3);
651
652//
653// Inner 1.69deg line
654 for (Int_t i = 2; i < 15; i++) {
655 Double_t z = shSaa1M->GetZ(i);
656 Double_t r2 = shSaa1M->GetRmax(i);
657 Double_t r1 = rmin + (z - 0.9) * TMath::Tan(1.69 / 2. * kDegRad) - kSec;
658 shSaa1M->DefineSection(i, z, r1, r2);
659 }
660
661 TGeoVolume* voSaa1M = new TGeoVolume("YSAA1M", shSaa1M, kMedAir);
e7300821 662 voSaa1M->SetVisibility(0);
663
20c7dbe5 664
665///////////////////////////////////
666// //
667// Recess Station 2 //
668// Drawing ALIP2A__0260 //
669///////////////////////////////////
670///////////////////////////////////
671// SAA1 W-Ring 1 //
672// Drawing ALIP2A__0217 //
673///////////////////////////////////
674 Float_t saa1Wring1Width = 5.85;
675 TGeoPcon* shSaa1Wring1 = new TGeoPcon(0., 360., 2);
676 shSaa1Wring1->DefineSection(0, 0.00 , 20.30, 23.175);
677 shSaa1Wring1->DefineSection(1, saa1Wring1Width, 20.30, 23.400);
678 TGeoVolume* voSaa1Wring1 = new TGeoVolume("YSAA1_WRING1", shSaa1Wring1, kMedNiW);
679
680///////////////////////////////////
681// SAA1 W-Ring 2 //
682// Drawing ALIP2A__0055 //
683///////////////////////////////////
684 Float_t saa1Wring2Rinner = 20.30;
685 Float_t saa1Wring2Router = 23.40;
686 Float_t saa1Wring2HWidth = 3.75;
687 Float_t saa1Wring2Cutoffx = 4.45;
688 Float_t saa1Wring2Cutoffy = 4.45;
689 TGeoTubeSeg* shSaa1Wring2a = new TGeoTubeSeg(saa1Wring2Rinner, saa1Wring2Router, saa1Wring2HWidth, 0., 90.);
690 shSaa1Wring2a->SetName("shSaa1Wring2a");
691 TGeoBBox* shSaa1Wring2b = new TGeoBBox(saa1Wring2Router / 2., saa1Wring2Router / 2., saa1Wring2HWidth);
692 shSaa1Wring2b->SetName("shSaa1Wring2b");
693 TGeoTranslation* trSaa1Wring2b
694 = new TGeoTranslation("trSaa1Wring2b", saa1Wring2Router / 2. + saa1Wring2Cutoffx, saa1Wring2Router / 2. + saa1Wring2Cutoffy, 0.);
695 trSaa1Wring2b->RegisterYourself();
696 TGeoCompositeShape* shSaa1Wring2 = new TGeoCompositeShape("shSaa1Wring2", "(shSaa1Wring2a)*(shSaa1Wring2b:trSaa1Wring2b)");
697 TGeoVolume* voSaa1Wring2 = new TGeoVolume("YSAA1_WRING2", shSaa1Wring2, kMedNiW);
698
699///////////////////////////////////
700// SAA1 W-Ring 3 //
701// Drawing ALIP2A__0216 //
702///////////////////////////////////
703
704 Float_t saa1Wring3Rinner = 20.30;
705 Float_t saa1Wring3Router = 23.40;
706 Float_t saa1Wring3HWidth = 3.75;
707 Float_t saa1Wring3Cutoffx = 4.50;
708 Float_t saa1Wring3Cutoffy = 4.40;
709 TGeoTubeSeg* shSaa1Wring3a = new TGeoTubeSeg(saa1Wring3Rinner, saa1Wring3Router, saa1Wring3HWidth, 0., 90.);
710 shSaa1Wring3a->SetName("shSaa1Wring3a");
711 TGeoBBox* shSaa1Wring3b = new TGeoBBox(saa1Wring3Router / 2., saa1Wring3Router / 2., saa1Wring3HWidth);
712 shSaa1Wring3b->SetName("shSaa1Wring3b");
713 TGeoTranslation* trSaa1Wring3b
714 = new TGeoTranslation("trSaa1Wring3b", saa1Wring3Router / 2. + saa1Wring3Cutoffx, saa1Wring3Router / 2. + saa1Wring3Cutoffy, 0.);
715 trSaa1Wring3b->RegisterYourself();
716 TGeoCompositeShape* shSaa1Wring3 = new TGeoCompositeShape("shSaa1Wring3", "(shSaa1Wring3a)*(shSaa1Wring3b:trSaa1Wring3b)");
717 TGeoVolume* voSaa1Wring3 = new TGeoVolume("YSAA1_WRING3", shSaa1Wring3, kMedNiW);
718
719///////////////////////////////////
720// SAA1 W-Ring 4 //
721// Drawing ALIP2A__0215 //
722///////////////////////////////////
723 Float_t saa1Wring4Width = 5.85;
724 TGeoPcon* shSaa1Wring4 = new TGeoPcon(0., 360., 5);
725 shSaa1Wring4->DefineSection(0, 0.00, 20.30, 23.40);
726 shSaa1Wring4->DefineSection(1, 1.00, 20.30, 23.40);
727 shSaa1Wring4->DefineSection(2, 1.00, 20.30, 24.50);
728 shSaa1Wring4->DefineSection(3, 4.85, 20.30, 24.80);
729 shSaa1Wring4->DefineSection(4, 5.85, 24.10, 24.80);
730 TGeoVolume* voSaa1Wring4 = new TGeoVolume("YSAA1_WRING4", shSaa1Wring4, kMedNiW);
731
732///////////////////////////////////
733// SAA1 W-Ring 5 //
734// Drawing ALIP2A__0218 //
735///////////////////////////////////
736 Float_t saa1Wring5Rinner = 20.30;
737 Float_t saa1Wring5Router = 23.40;
738 Float_t saa1Wring5HWidth = 0.85;
739 TGeoVolume* voSaa1Wring5 = new TGeoVolume("YSAA1_WRING5",
740 new TGeoTube(saa1Wring5Rinner, saa1Wring5Router, saa1Wring5HWidth), kMedNiW);
741//
742// Position the rings in the assembly
743//
744 TGeoVolumeAssembly* asSaa1ExtraShield = new TGeoVolumeAssembly("YSAA1ExtraShield");
745// Distance between rings
746 Float_t saa1DWrings = 2.3;
747//
748 dz = - (saa1Wring1Width + 6. * saa1Wring2HWidth + 2. * saa1Wring3HWidth + saa1Wring4Width + 2. * saa1Wring5HWidth + 2. * saa1DWrings) / 2.;
749 asSaa1ExtraShield->AddNode(voSaa1Wring1, 1, new TGeoTranslation(0., 0., dz));
750 dz += saa1Wring1Width;
751 dz += saa1Wring2HWidth;
752 asSaa1ExtraShield->AddNode(voSaa1Wring2, 1, new TGeoCombiTrans(0., 0., dz, rot000));
753 asSaa1ExtraShield->AddNode(voSaa1Wring2, 2, new TGeoCombiTrans(0., 0., dz, rot180));
754 dz += saa1Wring2HWidth;
755 dz += saa1DWrings;
756 dz += saa1Wring2HWidth;
757 asSaa1ExtraShield->AddNode(voSaa1Wring2, 3, new TGeoCombiTrans(0., 0., dz, rot090));
758 asSaa1ExtraShield->AddNode(voSaa1Wring2, 4, new TGeoCombiTrans(0., 0., dz, rot270));
759 dz += saa1Wring2HWidth;
760 dz += saa1Wring5HWidth;
761 asSaa1ExtraShield->AddNode(voSaa1Wring5, 1, new TGeoTranslation(0., 0., dz));
762 dz += saa1Wring5HWidth;
763 dz += saa1Wring2HWidth;
764 asSaa1ExtraShield->AddNode(voSaa1Wring2, 5, new TGeoCombiTrans(0., 0., dz, rot000));
765 asSaa1ExtraShield->AddNode(voSaa1Wring2, 6, new TGeoCombiTrans(0., 0., dz, rot180));
766 dz += saa1Wring2HWidth;
767 dz += saa1DWrings;
768 dz += saa1Wring3HWidth;
769 asSaa1ExtraShield->AddNode(voSaa1Wring3, 1, new TGeoCombiTrans(0., 0., dz, rot090));
770 asSaa1ExtraShield->AddNode(voSaa1Wring3, 2, new TGeoCombiTrans(0., 0., dz, rot270));
771 dz += saa1Wring3HWidth;
772 asSaa1ExtraShield->AddNode(voSaa1Wring4, 1, new TGeoTranslation(0., 0., dz));
773 dz += saa1Wring4Width;
774 const Float_t saa1ExtraShieldL = 48;
775//
776// Assemble SAA1
777 voSaa1M->AddNode(voSaa1StEnv, 1, vec0);
778 voSaa1M->AddNode(voSaa1WPipe, 1, vec0);
779 voSaa1M->AddNode(voSaa1PbComp, 1, vec0);
780 voSaa1M->AddNode(voSaa1WCone, 1, vec0);
781 voSaa1M->AddNode(voSaa1StRing, 1, vec0);
782 voSaa1M->AddNode(voSaa1InnerTube, 1, new TGeoTranslation(0., 0., dzSaa1InnerTube + 0.9));
783 TGeoVolumeAssembly* voSaa1 = new TGeoVolumeAssembly("YSAA1");
784 voSaa1->AddNode(voSaa1M, 1, vec0);
785
786///////////////////////////////////////
787// SAA1/SAA2 Pb Joint //
788// Drawing ALIP2A__0081 //
789///////////////////////////////////////
790//
791// Outer radius
792 Float_t rOuSaa1Saa2 = 70.0/2.;
793// Flange SAA1 side
794 Float_t dzSaa1Saa2F1 = 3.;
795 Float_t rInSaa1Saa2F1 = 58.5/2.;
796// 1st Central Section
797 Float_t dzSaa1Saa2C1 = 19.3;
798 Float_t rInSaa1Saa2C1 = 42.8/2.;
799// Transition Region
800 Float_t dzSaa1Saa2T = 3.3;
801// 1st Central Section
802 Float_t dzSaa1Saa2C2 = 6.2;
803 Float_t rInSaa1Saa2C2 = 36.2/2.;
804// Flange SAA2 side
805 Float_t dzSaa1Saa2F2 = 3.1;
806 Float_t rInSaa1Saa2F2 = 54.1/2.;
807// Total length
808 Float_t dzSaa1Saa2 = 34.9;
809
810
811 TGeoPcon* shSaa1Saa2Pb = new TGeoPcon(0., 360., 8);
812 z = 0.;
813// Flange SAA1 side
814 shSaa1Saa2Pb->DefineSection( 0, z, rInSaa1Saa2F1, rOuSaa1Saa2);
815 z += dzSaa1Saa2F1;
816 shSaa1Saa2Pb->DefineSection( 1, z, rInSaa1Saa2F1, rOuSaa1Saa2);
817 shSaa1Saa2Pb->DefineSection( 2, z, rInSaa1Saa2C1, rOuSaa1Saa2);
818// Central region 1
819 z += dzSaa1Saa2C1;
820 shSaa1Saa2Pb->DefineSection( 3, z, rInSaa1Saa2C1, rOuSaa1Saa2);
821// 45 deg transition
822 z += dzSaa1Saa2T;
823 shSaa1Saa2Pb->DefineSection( 4, z, rInSaa1Saa2C2, rOuSaa1Saa2);
824 z += dzSaa1Saa2C2;
825 shSaa1Saa2Pb->DefineSection( 5, z, rInSaa1Saa2C2, rOuSaa1Saa2);
826 shSaa1Saa2Pb->DefineSection( 6, z, rInSaa1Saa2F2, rOuSaa1Saa2);
827 z += dzSaa1Saa2F2;
828 shSaa1Saa2Pb->DefineSection( 7, z, rInSaa1Saa2F2, rOuSaa1Saa2);
829 TGeoVolume* voSaa1Saa2Pb = new TGeoVolume("YSAA1SAA2Pb", shSaa1Saa2Pb, kMedPb);
830//
831// Mother volume and outer steel envelope
832 Float_t rOuSaa1Saa2Steel = 36.9;
833
834 TGeoPcon* shSaa1Saa2 = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., rOuSaa1Saa2Steel-rOuSaa1Saa2);
835 TGeoVolume* voSaa1Saa2 = new TGeoVolume("YSAA1SAA2", shSaa1Saa2, kMedSteel);
836 voSaa1Saa2->AddNode(voSaa1Saa2Pb, 1, vec0);
837//
838// Inner region with higher transport cuts
839//
840 TGeoPcon* shSaa1Saa2I = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., -3.);
841 TGeoVolume* voSaa1Saa2I = new TGeoVolume("YSAA1_SAA2I", shSaa1Saa2I, kMedPbSh);
842 voSaa1Saa2Pb->AddNode(voSaa1Saa2I, 1, vec0);
843
844
845
846///////////////////////////////////////
847// SAA2 //
848///////////////////////////////////////
849
850
851///////////////////////////////////
852// SAA2 Steel Envelope //
853// Drawing ALIP2A__0041 //
854///////////////////////////////////
855 dSt = 4.; // Thickness of steel envelope
856 // Length of the first section
857 Float_t dzSaa2StEnv1 = 163.15;
858 Float_t rInSaa2StEnv1 = 65.8/2.;
859 // Length of the second section
860 Float_t dzSaa2StEnv2 = 340.35;
861 Float_t rInSaa2StEnv2 = 87.2/2.;
862 // Rel. starting position
863 Float_t zSaa2StEnv = 3.;
864
865 TGeoPcon* shSaa2StEnv = new TGeoPcon(0., 360., 6);
866 // First Section
867 z = zSaa2StEnv;
868 shSaa2StEnv->DefineSection( 0, z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
869 z += dzSaa2StEnv1;
870 shSaa2StEnv->DefineSection( 1, z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
871 // Transition region
872 shSaa2StEnv->DefineSection( 2, z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);
873 z += dSt;
874 shSaa2StEnv->DefineSection( 3, z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);
875 // Second section
876 shSaa2StEnv->DefineSection( 4, z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);
877 z += dzSaa2StEnv2;
878 shSaa2StEnv->DefineSection( 5, z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);
879
880 TGeoVolume* voSaa2StEnv = new TGeoVolume("YSAA2_SteelEnvelope", shSaa2StEnv, kMedSteel);
881
882
883///////////////////////////////////
884// SAA2 Pb Ring //
885// Drawing ALIP2A__0080 //
886// Drawing ALIP2A__0111 //
887///////////////////////////////////
888//
889// Rel. position in z
890 Float_t zSaa2PbRing = 35.25;
891// Length
892 Float_t dzSaa2PbRing = 65.90;
893// Inner radius
894 Float_t rInSaa2PbRing = 37.00;
895// Outer radius at front
896 Float_t rOuSaa2PbRingF = 42.74;
897// Outer Rradius at rear
898 Float_t rOuSaa2PbRingR = 44.58;
899
900 TGeoPcon* shSaa2PbRing = new TGeoPcon(0., 360., 2);
901 z = zSaa2PbRing;
902 shSaa2PbRing->DefineSection(0, z, rInSaa2PbRing, rOuSaa2PbRingF);
903 z += dzSaa2PbRing;
904 shSaa2PbRing->DefineSection(1, z, rInSaa2PbRing, rOuSaa2PbRingR);
905
906 TGeoVolume* voSaa2PbRing = new TGeoVolume("YSAA2_PbRing", shSaa2PbRing, kMedPb);
907
908
909///////////////////////////////////
910// SAA2 Pb Components //
911// Drawing ALIP2A__0079 //
912///////////////////////////////////
913 tanAlpha = TMath::Tan(1.89 / 2. * kDegRad);
914 TGeoPcon* shSaa2PbComp = new TGeoPcon(0., 360., 16);
915 // Total length
916 Float_t dzSaa2PbComp = 512.;
917 // Length of 1st bellow recess
918 Float_t dzSaa2PbCompB1 = 24.;
919 // Length of 2nd bellow recess
920 Float_t dzSaa2PbCompB2 = 27.;
921 // Flange on the SAA1 side Detail A
922 // 1st Step
923 Float_t dzSaa2PbCompA1 = 1.5;
924 Float_t rInSaa2PbCompA1 = 43.0/2.;
925 Float_t rOuSaa2PbCompA1 = 53.0/2.;
926 // 2nd Step
927 Float_t dzSaa2PbCompA2 = 1.5;
928 Float_t rInSaa2PbCompA2 = 36.8/2.;
929 Float_t rOuSaa2PbCompA2 = rOuSaa2PbCompA1;
930 // Straight section
931 Float_t dzSaa2PbCompA3 = 21.0;
932 Float_t rInSaa2PbCompA3 = rInSaa2PbCompA2;
933 Float_t rOuSaa2PbCompA3 = 65.2/2.;
934 //
935 // 1st Section (outer straight, inner 1.89/2. deg opening cone)
936 // Length
937 Float_t dzSaa2PbComp1 = 146.15;
938 // Inner radius at the end
939 Float_t rInSaa2PbComp1 = rInSaa2PbCompA3 + dzSaa2PbComp1 * tanAlpha;
940 // Outer radius
941 Float_t rOuSaa2PbComp1 = rOuSaa2PbCompA3;
942 //
943 // 2nd Section (outer straight, inner 1.89/2. deg opening cone)
944 // Length
945 Float_t dzSaa2PbComp2 = (dzSaa2PbComp - dzSaa2PbComp1 - dzSaa2PbCompB1 - dzSaa2PbCompB2);
946 // Inner radius at the end
947 Float_t rInSaa2PbComp2 = rInSaa2PbComp1 + dzSaa2PbComp2 * tanAlpha;
948 // Outer radius
949 Float_t rOuSaa2PbComp2 = 86.6/2.;
950 //
951 // Flange on the SAA3 side (Detail E)
952 //
953 // Straight Section
954 // Length dzSaa2PbCompB2 - 8.8 = 27 - 8.8 = 18.2
955 Float_t dzSaa2PbCompE1 = 18.2;
956 Float_t rInSaa2PbCompE1 = 52.0/2.;
957 Float_t rOuSaa2PbCompE1 = 86.6/2.;
958 // 45 deg transition
959 Float_t dzSaa2PbCompE2 = 2.7;
960 // 1st Step
961 Float_t dzSaa2PbCompE3 = 0.6;
962 Float_t rInSaa2PbCompE3 = 52.0/2.+ dzSaa2PbCompE2;
963 Float_t rOuSaa2PbCompE3 = 83.0/2.;
964 // 2nd Step
965 Float_t dzSaa2PbCompE4 = 4.0;
966 Float_t rOuSaa2PbCompE4 = 61.6/2.;
967 // end
968 Float_t dzSaa2PbCompE5 = 1.5;
969
970
971 //
972 // Flange on SAA1 side (Detail A)
973 z = 0.;
974 // 1st Step
975 shSaa2PbComp->DefineSection( 0, z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
976 z += dzSaa2PbCompA1;
977 shSaa2PbComp->DefineSection( 1, z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
978 shSaa2PbComp->DefineSection( 2, z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
979 // 2nd Step
980 z += dzSaa2PbCompA2;
981 shSaa2PbComp->DefineSection( 3, z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
982 shSaa2PbComp->DefineSection( 4, z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
983 // straight section
984 z += dzSaa2PbCompA3;
985 shSaa2PbComp->DefineSection( 5, z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
986 //
987 // Section 1
988 z += dzSaa2PbComp1;
989 shSaa2PbComp->DefineSection( 6, z, rInSaa2PbComp1, rOuSaa2PbComp1);
990 //
991 // Section 2
992 shSaa2PbComp->DefineSection( 7, z, rInSaa2PbComp2, rOuSaa2PbComp2);
993 z += dzSaa2PbComp2;
994 shSaa2PbComp->DefineSection( 8, z, rInSaa2PbComp2, rOuSaa2PbComp2);
995 //
996 // Flange SAA3 side (Detail E)
997 z += dzSaa2PbCompE1;
998 shSaa2PbComp->DefineSection( 9, z, rInSaa2PbCompE1, rOuSaa2PbCompE1);
999 // 45 deg transition
1000 z += dzSaa2PbCompE2;
1001 shSaa2PbComp->DefineSection( 10, z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
1002 // 1st step
1003 z += dzSaa2PbCompE3;
1004 shSaa2PbComp->DefineSection( 11, z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
1005 shSaa2PbComp->DefineSection( 12, z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1006 // 2nd step
1007 z += dzSaa2PbCompE4;
1008 shSaa2PbComp->DefineSection( 13, z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1009 shSaa2PbComp->DefineSection( 14, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1010 // end
1011 z += dzSaa2PbCompE5;
1012 shSaa2PbComp->DefineSection( 15, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1013
e7300821 1014 TGeoVolume* voSaa2PbComp = new TGeoVolume("YSAA2_PbComp", shSaa2PbComp, kMedPbSh);
20c7dbe5 1015
1016
1017///////////////////////////////////
1018// SAA2 Inner Tube //
1019// Drawing ALIP2A__0083 //
1020///////////////////////////////////
1021//
1022//
1023//
1024// Length of saa2: 512.0 cm
1025// Length of inner tube: 501.7 cm
1026// Lenth of bellow recess: 10.3 cm ( 1.5 + 8.8)
1027// Radius at entrance 36.8/2, d = 0.1
1028// Radius at exit 52.0/2, d = 0.1
1029//
1030 const Float_t kSaa2InnerTubeL = 501.7; // Length of the tube
1031 const Float_t kSaa2InnerTubeRmin = 36.6/2.; // Radius at entrance
1032 const Float_t kSaa2InnerTubeRmax = 51.8/2.; // Radius at exit
1033 const Float_t kSaa2InnerTubeD = 0.2 ; // Thickness
1034 TGeoPcon* shSaa2InnerTube = new TGeoPcon(0., 360., 4);
1035 z = 0.;
1036 shSaa2InnerTube->DefineSection( 0, z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1037 z += dzSaa2PbCompA2 + dzSaa2PbCompA3;
1038 shSaa2InnerTube->DefineSection( 1, z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1039 z = kSaa2InnerTubeL - dzSaa2PbCompE1;
1040 shSaa2InnerTube->DefineSection( 2, z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
1041 z = kSaa2InnerTubeL;
1042 shSaa2InnerTube->DefineSection( 3, z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
e7300821 1043 TGeoVolume* voSaa2InnerTube = new TGeoVolume("YSAA2_InnerTube", shSaa2InnerTube, kMedSteelSh);
20c7dbe5 1044
1045///////////////////////////////////
1046// SAA2 Steel Ring //
1047// Drawing ALIP2A__0042 //
1048///////////////////////////////////
1049 // HalfWidth
1050 Float_t dzSaa2SteelRing = 2.;
1051 TGeoTube* shSaa2SteelRing = new TGeoTube(41.6, 47.6, dzSaa2SteelRing);
1052 TGeoVolume* voSaa2SteelRing = new TGeoVolume("YSAA2_SteelRing", shSaa2SteelRing, kMedSteel);
1053
1054///////////////////////////////////
1055// SAA2 Outer Shape //
1056// Drawing ALIP2A__0108 //
1057///////////////////////////////////
1058
1059 TGeoPcon* shSaa2 = new TGeoPcon(0., 360., 16);
1060 kSec = 0.02; // security distance to avoid trivial extrusions
1061 rmin = kSaa2InnerTubeRmin - kSaa2InnerTubeD - kSec;
1062 rmax = kSaa2InnerTubeRmax - kSaa2InnerTubeD - kSec;
1063 // Flange SAA1 side
1064 z = 0.;
1065 shSaa2->DefineSection( 0, z, rmin , rOuSaa2PbCompA1);
1066 z += dzSaa2PbCompA1 + dzSaa2PbCompA2;
1067 shSaa2->DefineSection( 1, z, rmin , rOuSaa2PbCompA1);
1068 shSaa2->DefineSection( 2, z, rmin , rInSaa2StEnv1 + dSt);
1069 z += dzSaa2PbCompA3;
1070 shSaa2->DefineSection( 3, z, rmin , rInSaa2StEnv1 + dSt);
1071 z = zSaa2PbRing;
1072 shSaa2->DefineSection( 4, z, 0. , rInSaa2StEnv1 + dSt);
1073 shSaa2->DefineSection( 5, z, 0. , rOuSaa2PbRingF);
1074 z += dzSaa2PbRing;
1075 shSaa2->DefineSection( 6, z, 0. , rOuSaa2PbRingR);
1076 shSaa2->DefineSection( 7, z, 0. , rInSaa2StEnv1 + dSt);
1077 z = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2StEnv1;
1078 shSaa2->DefineSection( 8, z, 0. , rInSaa2StEnv1 + dSt);
1079 shSaa2->DefineSection( 9, z, 0. , rInSaa2StEnv2 + dSt);
1080 z = dzSaa2PbComp - dzSaa2PbCompB2;
1081 shSaa2->DefineSection(10, z, rmax , rInSaa2StEnv2 + dSt);
1082 z += dzSaa2PbCompE1;
1083 shSaa2->DefineSection(11, z, rmax , rInSaa2StEnv2 + dSt);
1084 z += dzSaa2PbCompE2;
1085 shSaa2->DefineSection(12, z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1086 z += (dzSaa2PbCompE3 + dzSaa2PbCompE4);
1087 shSaa2->DefineSection(13, z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1088 shSaa2->DefineSection(14, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1089 z += dzSaa2PbCompE5;
1090 shSaa2->DefineSection(15, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1091
1092 TGeoVolume* voSaa2 = new TGeoVolume("YSAA2", shSaa2, kMedAir);
e7300821 1093 voSaa2->SetVisibility(0);
20c7dbe5 1094// Inner 1.89/2 deg line
1095 Double_t zref = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2PbCompA3;
1096 for (Int_t i = 4; i < 10; i++) {
1097 Double_t z = shSaa2->GetZ(i);
1098 Double_t r2 = shSaa2->GetRmax(i);
1099 Double_t r1 = rmin + (z - zref) * TMath::Tan(1.89 / 2. * kDegRad) - kSec;
1100 shSaa2->DefineSection(i, z, r1, r2);
1101 }
1102
1103//
1104// Assemble SAA2
1105 voSaa2->AddNode(voSaa2StEnv, 1, vec0);
1106 voSaa2->AddNode(voSaa2PbRing, 1, vec0);
1107 voSaa2->AddNode(voSaa2PbComp, 1, vec0);
1108 voSaa2->AddNode(voSaa2InnerTube, 1, new TGeoTranslation(0., 0., dzSaa2PbCompA1));
1109 z = (dzSaa2PbComp - dzSaa2PbCompE4 - dzSaa2PbCompE5) + dzSaa2SteelRing;
1110 voSaa2->AddNode(voSaa2SteelRing, 1, new TGeoTranslation(0., 0., z));
1111
1112
1113///////////////////////////////////////
1114// SAA3 //
1115///////////////////////////////////////
1116//
1117//
1118// This is a study performed by S. Maridor
1119// The SAA3 has not yet been designed !!!!!!!!
1120//
1121///////////////////////////////////
1122// SAA3 Outer Shape //
1123// Drawing ALIP2A__0xxx //
1124///////////////////////////////////
1125
1126 TGeoVolumeAssembly* voSaa3 = new TGeoVolumeAssembly("YSAA3");
1127
1128///////////////////////////////////
1129// SAA3 Steel Components //
1130// Drawing ALIP2A__0xxx //
1131///////////////////////////////////
1132// Block
1133 TGeoBBox* shSaa3SteelBlockO = new TGeoBBox(220./2., 80./2., 100./2.);
1134 shSaa3SteelBlockO->SetName("Saa3SteelBlockO");
1135
1136 TGeoPcon* shSaa3InnerRegion = new TGeoPcon(0., 360., 6);
1137 shSaa3InnerRegion->DefineSection( 0, -52.0, 0., 56.6/2.);
1138 shSaa3InnerRegion->DefineSection( 1, -45.0, 0., 56.6/2.);
1139 shSaa3InnerRegion->DefineSection( 2, -42.0, 0., 50.6/2.);
1140 shSaa3InnerRegion->DefineSection( 3, -30.0, 0., 50.6/2.);
1141 shSaa3InnerRegion->DefineSection( 4, 30.5, 0., 16.8/2.);
1142 shSaa3InnerRegion->DefineSection( 5, 52.0, 0., 16.8/2.);
1143 shSaa3InnerRegion->SetName("Saa3InnerRegion");
1144
1145 TGeoCompositeShape* shSaa3SteelBlock = new TGeoCompositeShape("Saa3SteelBlock", "Saa3SteelBlockO-Saa3InnerRegion");
1146 TGeoVolume* voSaa3SteelBlock = new TGeoVolume("YSAA3SteelBlock", shSaa3SteelBlock, kMedSteel);
1147
1148
1149 voSaa3->AddNode(voSaa3SteelBlock, 1, vec0);
1150// Plate 1: 220 cm x 100 cm x 10 cm (x 1)
1151 TGeoBBox* shSaa3SteelPlate1 = new TGeoBBox(220./2., 10./2., 100./2.);
1152 TGeoVolume* voSaa3SteelPlate1 = new TGeoVolume("YSAA3SteelPlate1", shSaa3SteelPlate1, kMedSteel);
1153 voSaa3->AddNode(voSaa3SteelPlate1, 1, new TGeoTranslation(0., -80./2. - 10./2., 0.));
1154// Plate 2: 200 cm x 100 cm x 10 cm (x 6)
1155 TGeoBBox* shSaa3SteelPlate2 = new TGeoBBox(200./2., 60./2., 100./2.);
1156 TGeoVolume* voSaa3SteelPlate2 = new TGeoVolume("YSAA3SteelPlate2", shSaa3SteelPlate2, kMedSteel);
1157 voSaa3->AddNode(voSaa3SteelPlate2, 1, new TGeoTranslation(0., -80./2. - 10. - 60./2., 0.));
1158// Plate 3: 200 cm x 100 cm x 10 cm (x 4)
1159 TGeoBBox* shSaa3SteelPlate3 = new TGeoBBox(200./2., 40./2., 100./2.);
1160 TGeoVolume* voSaa3SteelPlate3 = new TGeoVolume("YSAA3SteelPlate3", shSaa3SteelPlate3, kMedSteel);
1161 voSaa3->AddNode(voSaa3SteelPlate3, 1, new TGeoTranslation(0., +80./2. + 40/2., 0.));
1162// Plate 4: 180 cm x 100 cm x 10 cm (x 1)
1163 TGeoBBox* shSaa3SteelPlate4 = new TGeoBBox(180./2., 10./2., 100./2.);
1164 TGeoVolume* voSaa3SteelPlate4 = new TGeoVolume("YSAA3SteelPlate4", shSaa3SteelPlate4, kMedSteel);
1165 voSaa3->AddNode(voSaa3SteelPlate4, 1, new TGeoTranslation(0., +80./2. + 40. + 10/2., 0.));
1166// Plate 5: 150 cm x 100 cm x 10 cm (x 1)
1167 TGeoBBox* shSaa3SteelPlate5 = new TGeoBBox(150./2., 10./2., 100./2.);
1168 TGeoVolume* voSaa3SteelPlate5 = new TGeoVolume("YSAA3SteelPlate5", shSaa3SteelPlate5, kMedSteel);
1169 voSaa3->AddNode(voSaa3SteelPlate5, 1, new TGeoTranslation(0., +80./2. + 50. + 10/2., 0.));
1170// Plate 6: 100 cm x 100 cm x 10 cm (x 1)
1171 TGeoBBox* shSaa3SteelPlate6 = new TGeoBBox(100./2., 10./2., 100./2.);
1172 TGeoVolume* voSaa3SteelPlate6 = new TGeoVolume("YSAA3SteelPlate6", shSaa3SteelPlate6, kMedSteel);
1173 voSaa3->AddNode(voSaa3SteelPlate6, 1, new TGeoTranslation(0., +80./2. + 60. + 10/2., 0.));
1174
1175///////////////////////////////////
1176// SAA3 Concrete Piece //
1177// Drawing ALIP2A__0xxx //
1178///////////////////////////////////
1179 TGeoPcon* shSaa3ConcPiece = new TGeoPcon(0., 360., 6);
1180 shSaa3ConcPiece->DefineSection( 0, 0.0, 57.4/2., 62./2.);
1181 shSaa3ConcPiece->DefineSection( 1, 5.0, 57.4/2., 62./2.);
1182 shSaa3ConcPiece->DefineSection( 2, 8.0, 51.4/2., 62./2.);
1183 shSaa3ConcPiece->DefineSection( 3, 20.0, 51.4/2., 62./2.);
1184 shSaa3ConcPiece->DefineSection( 4, 80.5, 17.6/2., 62./2.);
1185 shSaa3ConcPiece->DefineSection( 5, 100.0, 17.6/2., 62./2.);
1186 TGeoVolume* voSaa3ConcPiece = new TGeoVolume("YSAA2_ConcPiece", shSaa3ConcPiece, kMedConc);
1187 voSaa3SteelBlock->AddNode(voSaa3ConcPiece, 1, new TGeoTranslation(0., 0., -50.));
1188
1189///////////////////////////////////
1190// SAA3 InnerTube //
1191// Drawing ALIP2A__0xxx //
1192///////////////////////////////////
1193 TGeoPcon* shSaa3InnerTube = new TGeoPcon(0., 360., 6);
1194 shSaa3InnerTube->DefineSection( 0, 0.0, 56.6/2., 57.0/2.);
1195 shSaa3InnerTube->DefineSection( 1, 5.0, 56.6/2., 57.0/2.);
1196 shSaa3InnerTube->DefineSection( 2, 8.0, 50.6/2., 51.0/2.);
1197 shSaa3InnerTube->DefineSection( 3, 20.0, 50.6/2., 51.0/2.);
1198 shSaa3InnerTube->DefineSection( 4, 80.5, 16.8/2., 17.2/2.);
1199 shSaa3InnerTube->DefineSection( 5, 100.0, 16.8/2., 17.2/2.);
e7300821 1200 TGeoVolume* voSaa3InnerTube = new TGeoVolume("YSAA2_InnerTube", shSaa3InnerTube, kMedSteelSh);
20c7dbe5 1201 voSaa3SteelBlock->AddNode(voSaa3InnerTube, 1, new TGeoTranslation(0., 0., -50.));
1202
1203///////////////////////////////////
1204// Muon Filter //
1205// Drawing ALIP2A__0105 //
1206///////////////////////////////////
1207 // Half Length
1208 Float_t dzMuonFilter = 60.;
1209
1210 TGeoBBox* shMuonFilterO = new TGeoBBox(550./2., 620./2., dzMuonFilter);
1211 shMuonFilterO->SetName("FilterO");
e7300821 1212 TGeoTube* shMuonFilterI = new TGeoTube(0., 50., dzMuonFilter + 5.);
20c7dbe5 1213 shMuonFilterI->SetName("FilterI");
1214 TGeoCompositeShape* shMuonFilter = new TGeoCompositeShape("MuonFilter", "FilterO-FilterI");
1215 //
1216 // !!!!! Needs to be inclined
1217 TGeoVolume* voMuonFilter = new TGeoVolume("YMuonFilter", shMuonFilter, kMedSteel);
1218
e7300821 1219 // Inner part with higher transport cuts
1220 Float_t dzMuonFilterH = 50.;
1221 TGeoBBox* shMuonFilterOH = new TGeoBBox(550./2., 620./2., dzMuonFilterH);
1222 shMuonFilterOH->SetName("FilterOH");
1223 TGeoTube* shMuonFilterIH = new TGeoTube(0., 50., dzMuonFilterH + 5.);
1224 shMuonFilterIH->SetName("FilterIH");
1225 TGeoCompositeShape* shMuonFilterH = new TGeoCompositeShape("MuonFilterH", "FilterOH-FilterIH");
1226 TGeoVolume* voMuonFilterH = new TGeoVolume("YMuonFilterH", shMuonFilterH, kMedSteelSh);
1227 voMuonFilter->AddNode(voMuonFilterH, 1, gGeoIdentity);
1228
20c7dbe5 1229//
1230 TGeoVolumeAssembly* voSaa = new TGeoVolumeAssembly("YSAA");
1231//
1232//
1233//
1234//
1235//
1236// Starting position of the FA Flange/Tail
1237 Float_t ziFaWTail = 499.0;
1238// End of the FA Flange/Tail
1239 Float_t zoFaWTail = ziFaWTail + dzFaWTail;
1240// Starting position of the FA/SAA1 Joint (2.8 cm overlap with tail)
1241 Float_t ozFaSaa1 = 2.8;
1242 Float_t ziFaSaa1 = zoFaWTail - ozFaSaa1;
1243// End of the FA/SAA1 Joint
1244 Float_t zoFaSaa1 = ziFaSaa1 + dzFaSaa1;
1245// Starting position of SAA1 (2.0 cm overlap with joint)
1246 Float_t ozSaa1 = 2.;
1247 Float_t ziSaa1 = zoFaSaa1 - ozSaa1;
1248// End of SAA1
1249 Float_t zoSaa1 = ziSaa1 + dzSaa1;
1250// Starting position of SAA1/SAA2 Joint (1.95 cm overlap with SAA1)
1251 Float_t ziSaa1Saa2 = zoSaa1 - 1.95;
1252// End of SAA1/SAA2 Joint
1253 Float_t zoSaa1Saa2 = ziSaa1Saa2 + dzSaa1Saa2;
1254// Starting position of SAA2 (3.1 cm overlap with the joint)
1255 Float_t ziSaa2 = zoSaa1Saa2 - 3.1;
1256// End of SAA2
1257 Float_t zoSaa2 = ziSaa2 + dzSaa2PbComp;
1258// Position of SAA3
1259 Float_t zcSaa3 = zoSaa2 + 50.;
1260// Position of the Muon Filter
1261 Float_t zcFilter = 1465.9 + dzMuonFilter;
1262
1263 printf("FaSaa1 %f %f \n", ziFaSaa1, zoFaSaa1);
1264 printf("Saa1 %f %f \n", ziSaa1, zoSaa1);
1265 printf("Saa1/Saa2 %f %f \n", ziSaa1Saa2, zoSaa1Saa2);
1266 printf("Saa2 %f %f \n", ziSaa2, zoSaa2);
1267
1268 voSaa->AddNode(voFaWTail, 1, new TGeoTranslation(0., 0., ziFaWTail));
1269 voSaa->AddNode(voFaSaa1, 1, new TGeoTranslation(0., 0., ziFaSaa1));
1270 voSaa->AddNode(voSaa1 , 1, new TGeoTranslation(0., 0., ziSaa1));
1271 voSaa->AddNode(voSaa1Saa2, 1, new TGeoTranslation(0., 0., ziSaa1Saa2));
1272 voSaa->AddNode(voSaa2 , 1, new TGeoTranslation(0., 0., ziSaa2));
1273 voSaa->AddNode(voSaa3, 1, new TGeoTranslation(0., 0., zcSaa3));
e7300821 1274
20c7dbe5 1275
1276 TGeoRotation* rotxz = new TGeoRotation("rotxz", 90., 0., 90., 90., 180., 0.);
1277 top->AddNode(voSaa, 1, new TGeoCombiTrans(0., 0., 0., rotxz));
1278//
1279// Mother volume for muon stations 1+2 and shielding material placed between the quadrants
1280//
1281 // Position of the dipole
1282 Float_t ziDipole = 724.45;
1283
1284 TGeoPcon* shYOUT1 = new TGeoPcon(0., 360., 25);
1285 Float_t eps = 1.e-2;
1286 // FA Tail Section
1287 for (Int_t iz = 0; iz < 9; iz++) {
1288 z = shFaWTail->GetZ(iz+1);
1289 if (iz == 8) z -= ozFaSaa1;
1290 shYOUT1->DefineSection(iz, z + ziFaWTail, shFaWTail->GetRmax(iz+1) + eps, 150.);
1291 }
1292 // FA-SAA1 Joint
1293 z = shYOUT1->GetZ(8);
1294
1295 for (Int_t iz = 9; iz < 17; iz++)
1296 shYOUT1->DefineSection(iz, z + shFaSaa1->GetZ(iz-9), shFaSaa1->GetRmax(iz-9) + eps, 150.);
1297
1298 z = shYOUT1->GetZ(16) - ozSaa1;
1299 // SAA1 - Dipole
1300 for (Int_t iz = 17; iz < 24; iz++)
1301 shYOUT1->DefineSection(iz, z + shSaa1M->GetZ(iz-13), shSaa1M->GetRmax(iz-13) + eps, 150.);
1302 // Distance between dipole and start of SAA1 2deg opening cone
e7300821 1303 dz = ziDipole - (zSaa1StEnv[0] - dSt + zSaa1StEnvS + ziSaa1);
20c7dbe5 1304 rOut = rOuSaa1StEnv2 + dz * TMath::Tan(2. * kDegRad);
1305
1306 shYOUT1->DefineSection(24, ziDipole, rOut + eps, 150.);
1307
1308 InvertPcon(shYOUT1);
1309 TGeoVolume* voYOUT1 = new TGeoVolume("YOUT1", shYOUT1, kMedAirMu);
e7300821 1310 voYOUT1->SetVisibility(0);
20c7dbe5 1311
1312 voYOUT1->AddNode(asSaa1ExtraShield, 1, new TGeoCombiTrans(0., 0., - (100.7 + 62.2 + saa1ExtraShieldL / 2. + ziFaWTail), rotxz));
1313 voYOUT1->AddNode(asFaExtraShield, 1, new TGeoCombiTrans(0., 0., - (16.41 + kFaWring2HWidth + ziFaWTail), rotxz));
1314 top->AddNode(voYOUT1, 1, vec0);
1315//
1316// Mother volume for muon stations 4+5 and trigger stations.
1317//
1318 Float_t zoDipole = 1235.55;
1319
1320 TGeoPcon* shYOUT2 = new TGeoPcon(0., 360., 14);
1321 z = zoDipole;
1322 shYOUT2->DefineSection(0, z, rOuSaa1String, 252.);
1323// Start of SAA1-SAA2
1324 z = ziSaa1Saa2;
1325 shYOUT2->DefineSection(1, z, rOuSaa1String, 252.);
1326 shYOUT2->DefineSection(2, z, rOuSaa1Saa2Steel, 252.);
1327// End of SAA1-SAA2
1328 z = ziSaa2;
1329 shYOUT2->DefineSection(3, z, rOuSaa1Saa2Steel, 252.);
1330// SAA2
1331 shYOUT2->DefineSection( 4, z, rInSaa2StEnv1 + dSt, 252.);
1332 z = ziSaa2 + zSaa2PbRing;
1333 shYOUT2->DefineSection( 5, z, rInSaa2StEnv1 + dSt, 252.);
1334// Pb Cone
1335 shYOUT2->DefineSection( 6, z, rOuSaa2PbRingF, 252.);
1336 rmin = rOuSaa2PbRingF + (1380. - z) * TMath::Tan(1.6 * kDegRad);
1337 shYOUT2->DefineSection( 7, 1380., rmin, 252.);
1338 shYOUT2->DefineSection( 8, 1380., rmin, 304.);
1339 z = ziSaa2 + zSaa2PbRing + dzSaa2PbRing;
1340 shYOUT2->DefineSection( 9, z, rOuSaa2PbRingR, 304.);
1341// Straight Sections
1342 shYOUT2->DefineSection(10, z, rInSaa2StEnv1 + dSt, 460.);
1343 z = ziSaa2 + dzSaa2StEnv1;
1344 shYOUT2->DefineSection(11, z, rInSaa2StEnv1 + dSt, 460.);
1345 shYOUT2->DefineSection(12, z, rInSaa2StEnv2 + dSt, 460.);
1346 z += dzSaa2StEnv2;
1347 shYOUT2->DefineSection(13, z, rInSaa2StEnv2 + dSt, 460.);
1348
1349 InvertPcon(shYOUT2);
1350 TGeoVolume* voYOUT2 = new TGeoVolume("YOUT2", shYOUT2, kMedAirMu);
e7300821 1351 voYOUT2->SetVisibility(0);
1352 voYOUT2->AddNode(voMuonFilter, 1, new TGeoTranslation(0., 0., -zcFilter));
20c7dbe5 1353 top->AddNode(voYOUT2, 1, vec0);
1354}
1355
1356void AliSHILv3::Init()
1357{
1358 //
1359 // Initialise the muon shield after it has been built
1360 //
1361 Int_t i;
1362 //
1363 if(AliLog::GetGlobalDebugLevel()>0) {
1364 printf("\n%s: ",ClassName());
1365 for(i=0;i<35;i++) printf("*");
1366 printf(" SHILvTGeo_INIT ");
1367 for(i=0;i<35;i++) printf("*");
1368 printf("\n%s: ",ClassName());
1369 //
1370 // Here the SHIL initialisation code (if any!)
1371 for(i=0;i<80;i++) printf("*");
1372 printf("\n");
1373 }
1374}
1375
1376void AliSHILv3::InvertPcon(TGeoPcon* pcon)
1377{
1378//
1379// z -> -z
1380//
1381 Int_t nz = pcon->GetNz();
1382 Double_t* z = new Double_t[nz];
1383 Double_t* rmin = new Double_t[nz];
1384 Double_t* rmax = new Double_t[nz];
1385
1386 Double_t* z0 = pcon->GetZ();
1387 Double_t* rmin0 = pcon->GetRmin();
1388 Double_t* rmax0 = pcon->GetRmax();
1389
1390 for (Int_t i = 0; i < nz; i++) {
1391 z[i] = z0[i];
1392 rmin[i] = rmin0[i];
1393 rmax[i] = rmax0[i];
1394 }
1395
1396 for (Int_t i = 0; i < nz; i++) {
1397 Int_t j = nz - i - 1;
1398 pcon->DefineSection(i, - z[j], rmin[j], rmax[j]);
1399 }
1400
1401 delete[] z;
1402 delete[] rmin;
1403 delete[] rmax;
1404}
1405
1406TGeoPcon* AliSHILv3::MakeShapeFromTemplate(TGeoPcon* pcon, Float_t drMin, Float_t drMax)
1407{
1408 //
1409 // Returns new shape based on a template changing
1410 // the inner radii by drMin and the outer radii by drMax.
1411 //
1412 Int_t nz = pcon->GetNz();
1413 TGeoPcon* cpcon = new TGeoPcon(0., 360., nz);
1414 for (Int_t i = 0; i < nz; i++)
1415 cpcon->DefineSection(i, pcon->GetZ(i), pcon->GetRmin(i) + drMin, pcon->GetRmax(i) + drMax);
1416 return cpcon;
1417}
1418
1419