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