]>
Commit | Line | Data |
---|---|---|
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 | ||
39 | ClassImp(AliSHILv3) | |
40 | ||
41 | //_____________________________________________________________________________ | |
42 | AliSHILv3::AliSHILv3() | |
43 | { | |
44 | // | |
45 | // Default constructor for muon shield | |
46 | // | |
47 | } | |
48 | ||
49 | //_____________________________________________________________________________ | |
50 | AliSHILv3::AliSHILv3(const char *name, const char *title) | |
51 | : AliSHIL(name,title) | |
52 | { | |
53 | // | |
54 | // Standard constructor for muon shield | |
55 | // | |
20c7dbe5 | 56 | } |
57 | ||
58 | //_____________________________________________________________________________ | |
59 | void 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"); |
06888a51 | 94 | // |
95 | TGeoMedium* kMedCastiron = gGeoManager->GetMedium("SHIL_CAST_IRON0"); | |
96 | TGeoMedium* kMedCastironSh = gGeoManager->GetMedium("SHIL_CAST_IRON2"); | |
20c7dbe5 | 97 | // |
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 | ||
1336 | void 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 | ||
1356 | void 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 | 1386 | TGeoPcon* 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 |