]>
Commit | Line | Data |
---|---|---|
42df5168 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id$ */ | |
17 | ||
18 | //------------------------------------------------------------------------- | |
19 | // The Front Absorber FA | |
20 | // As built | |
21 | // Author: A.Morsch | |
22 | // andreas.morsch@cern.ch | |
23 | //------------------------------------------------------------------------- | |
24 | ||
25 | #include <TVirtualMC.h> | |
26 | #include <TArrayI.h> | |
27 | #include <TGeoVolume.h> | |
28 | #include <TGeoTube.h> | |
29 | #include <TGeoManager.h> | |
30 | #include <TGeoMatrix.h> | |
31 | #include <TGeoCompositeShape.h> | |
32 | #include <TGeoBBox.h> | |
33 | #include <TGeoPgon.h> | |
34 | #include <TGeoTorus.h> | |
35 | #include <TGeoCone.h> | |
36 | #include <TGeoArb8.h> | |
37 | ||
38 | #include "AliABSOv3.h" | |
39 | #include "AliConst.h" | |
40 | #include "AliLog.h" | |
41 | ||
42 | ClassImp(AliABSOv3) | |
43 | ||
44 | //_____________________________________________________________________________ | |
45 | AliABSOv3::AliABSOv3() | |
46 | { | |
47 | // | |
48 | // Default constructor for muon shield | |
49 | // | |
50 | } | |
51 | ||
52 | //_____________________________________________________________________________ | |
53 | AliABSOv3::AliABSOv3(const char *name, const char *title) | |
54 | : AliABSO(name,title) | |
55 | { | |
56 | // Standard constructor for muon shield | |
57 | // | |
58 | } | |
59 | ||
60 | //_____________________________________________________________________________ | |
61 | void AliABSOv3::CreateGeometry() | |
62 | { | |
63 | // | |
64 | // Build muon shield geometry | |
65 | // | |
66 | // | |
67 | ||
68 | Float_t z, z0, dz; | |
69 | // | |
70 | // The top volume | |
71 | // | |
72 | TGeoVolume* top = gGeoManager->GetVolume("ALIC"); | |
73 | ||
74 | // | |
42df5168 | 75 | // Media |
76 | // | |
77 | TGeoMedium* kMedNiW = gGeoManager->GetMedium("ABSO_Ni/W0"); | |
78 | TGeoMedium* kMedNiWsh = gGeoManager->GetMedium("ABSO_Ni/W3"); | |
f2410b49 | 79 | // |
42df5168 | 80 | TGeoMedium* kMedSteel = gGeoManager->GetMedium("ABSO_ST_C0"); |
81 | TGeoMedium* kMedSteelSh = gGeoManager->GetMedium("ABSO_ST_C3"); | |
f2410b49 | 82 | // |
42df5168 | 83 | TGeoMedium* kMedAir = gGeoManager->GetMedium("ABSO_AIR_C0"); |
f2410b49 | 84 | // |
42df5168 | 85 | TGeoMedium* kMedPb = gGeoManager->GetMedium("ABSO_PB_C0"); |
86 | TGeoMedium* kMedPbSh = gGeoManager->GetMedium("ABSO_PB_C2"); | |
f2410b49 | 87 | // |
88 | TGeoMedium* kMedConcSh = gGeoManager->GetMedium("ABSO_CC_C2"); | |
89 | // | |
90 | TGeoMedium* kMedCH2Sh = gGeoManager->GetMedium("ABSO_CH2_C2"); | |
91 | // | |
42df5168 | 92 | TGeoMedium* kMedC = gGeoManager->GetMedium("ABSO_C_C0"); |
93 | TGeoMedium* kMedCsh = gGeoManager->GetMedium("ABSO_C_C2"); | |
f2410b49 | 94 | // |
42df5168 | 95 | TGeoMedium* kMedAlu = gGeoManager->GetMedium("ABSO_ALU_C0"); |
f2410b49 | 96 | // |
97 | TGeoMedium* kMedMg = gGeoManager->GetMedium("ABSO_MG_C0"); | |
42df5168 | 98 | // |
99 | const Float_t kDegRad = TMath::Pi() / 180.; | |
100 | ||
101 | // | |
102 | TGeoRotation* rotxz = new TGeoRotation("rotxz", 90., 0., 90., 90., 180., 0.); | |
103 | /////////////////////////////////// | |
104 | // // | |
105 | // Front Absorber // | |
106 | // Drawing ALIP2A__0106 // | |
107 | // // | |
108 | // // | |
109 | /////////////////////////////////// | |
110 | // | |
111 | // Pos 1 Steel Envelope | |
112 | // Pos 2 End Plate | |
113 | // Pos 3 Flange (wrong arrow in the drawing) | |
114 | // Pos 4 W Plate A | |
115 | // Pos 5 W Plate B | |
116 | // Pos 6 Tungsten Tube Part 1 | |
117 | // Pos 7 Tungsten Tube Part 2 | |
118 | // Pos 8 Tungsten Tube Part 3 | |
119 | // Pos 9 Tungsten Tube Part 4 | |
120 | // Pos 10 Tungsten Tail | |
121 | // Pos 11 Graphite Cone | |
122 | // Pos 12 Pb Cone | |
123 | // Pos 13 Concrete Cone | |
124 | // Pos 14 Polyethylene Parts | |
125 | // Pos 15 Steel Plate 25 cm | |
126 | // Pos 16 Steel Plate 31 cm | |
127 | // Pos 17 Magnesium Ring | |
128 | // Pos 18 Composite Ring | |
129 | // | |
130 | // | |
131 | // Mimimum angle of the tracking region | |
132 | const Float_t angle02 = TMath::Tan( 2. * kDegRad); | |
133 | // Maximum angle of the tracking region | |
134 | const Float_t angle10 = TMath::Tan(10. * kDegRad); | |
135 | // Opening angle of W rear plug | |
136 | const Float_t angle03 = TMath::Tan( 3. * kDegRad); | |
137 | // | |
138 | const Float_t angle05 = TMath::Tan( 5. * kDegRad); | |
139 | // Opening angle of the FA snout | |
140 | const Float_t angle24 = TMath::Tan(24. * kDegRad); | |
141 | // Opneing angle of the inner cone | |
142 | const Float_t angle71 = TMath::Tan(0.697 * kDegRad); | |
143 | // Starting position in z | |
144 | const Float_t zFa = 90.0; | |
145 | ||
146 | // Pos 1 | |
147 | /////////////////////////////////// | |
148 | // FA Steel Envelope // | |
149 | // Drawing ALIP2A__0036 // | |
150 | /////////////////////////////////// | |
151 | // Thickness of the envelope | |
152 | Float_t dSteelEnvelope = 1.5; | |
153 | // Front cover | |
154 | // | |
155 | // Length | |
156 | Float_t dzSteelEnvelopeFC = 4.00; | |
157 | // Inner Radius | |
158 | Float_t rInSteelEnvelopeFC1 = 35.90/2.; | |
159 | Float_t rInSteelEnvelopeFC2 = rInSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle10; | |
160 | // Outer Radius | |
161 | Float_t rOuSteelEnvelopeFC1 = 88.97/2.; | |
162 | Float_t rOuSteelEnvelopeFC2 = rOuSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle05; | |
163 | // | |
164 | // 5 deg cone | |
165 | Float_t dzSteelEnvelopeC5 = 168.9; | |
166 | Float_t rInSteelEnvelopeC5 = rOuSteelEnvelopeFC2 - dSteelEnvelope/TMath::Cos(5 * kDegRad); | |
167 | Float_t rOuSteelEnvelopeC5 = rOuSteelEnvelopeFC2; | |
168 | // 10 deg cone | |
169 | Float_t dzSteelEnvelopeC10 = 227.1 - 4.; | |
170 | Float_t rInSteelEnvelopeC10 = 116.22/2.; | |
171 | Float_t rOuSteelEnvelopeC10 = rInSteelEnvelopeC10 + dSteelEnvelope/TMath::Cos(10 * kDegRad); | |
172 | // Rear ring | |
173 | Float_t dzSteelEnvelopeR = 4.; | |
174 | Float_t rInSteelEnvelopeR2 = 196.3/2.; | |
175 | Float_t rOuSteelEnvelopeR2 = 212.0/2.; | |
176 | Float_t rInSteelEnvelopeR1 = rInSteelEnvelopeR2 - dzSteelEnvelopeR * angle10; | |
177 | Float_t rOuSteelEnvelopeR1 = rInSteelEnvelopeR1 + dSteelEnvelope/TMath::Cos(10 * kDegRad); | |
178 | // Front insert | |
179 | Float_t dzSteelEnvelopeFI = 1.; | |
180 | Float_t rInSteelEnvelopeFI = 42.0/2.; | |
e0eaf068 | 181 | Float_t rOuSteelEnvelopeFI = 85.0/2.+ 0.06; |
42df5168 | 182 | |
183 | TGeoPcon* shFaSteelEnvelopeC = new TGeoPcon(0., 360., 7); | |
184 | z = 0.; | |
185 | // Front cover | |
186 | shFaSteelEnvelopeC->DefineSection( 0, z, rInSteelEnvelopeFC1, rOuSteelEnvelopeFC1); | |
187 | z += dzSteelEnvelopeFC; | |
188 | shFaSteelEnvelopeC->DefineSection( 1, z, rInSteelEnvelopeFC2, rOuSteelEnvelopeFC2); | |
189 | // 5 deg cone | |
190 | shFaSteelEnvelopeC->DefineSection( 2, z, rInSteelEnvelopeC5, rOuSteelEnvelopeC5); | |
191 | z += dzSteelEnvelopeC5; | |
192 | shFaSteelEnvelopeC->DefineSection( 3, z, rInSteelEnvelopeC10, rOuSteelEnvelopeC10); | |
193 | // 10 deg cone | |
194 | z += dzSteelEnvelopeC10; | |
195 | shFaSteelEnvelopeC->DefineSection( 4, z, rInSteelEnvelopeR1, rOuSteelEnvelopeR1); | |
196 | // Rear Ring | |
197 | shFaSteelEnvelopeC->DefineSection( 5, z, rInSteelEnvelopeR1, rOuSteelEnvelopeR2); | |
198 | z += dzSteelEnvelopeR; | |
199 | shFaSteelEnvelopeC->DefineSection( 6, z, rInSteelEnvelopeR2, rOuSteelEnvelopeR2); | |
200 | ||
201 | // Insert | |
202 | shFaSteelEnvelopeC->SetName("steelEnvC"); | |
203 | TGeoTube* shFaSteelEnvelopeT = new TGeoTube(rInSteelEnvelopeFI, rOuSteelEnvelopeFI, dzSteelEnvelopeFI); | |
204 | shFaSteelEnvelopeT->SetName("steelEnvT"); | |
205 | TGeoCompositeShape* shFaSteelEnvelope = new TGeoCompositeShape("shFaSteelEnvelope", "steelEnvC-steelEnvT"); | |
206 | ||
207 | TGeoVolume* voFaSteelEnvelope = new TGeoVolume("AFaSteelEnvelope", shFaSteelEnvelope, kMedSteel); | |
208 | ||
209 | // Pos 2 | |
210 | /////////////////////////////////// | |
211 | // FA End Plate // | |
212 | // Drawing ALIP2A__0037 // | |
213 | /////////////////////////////////// | |
214 | // | |
215 | // | |
216 | // | |
217 | // Outer dimensions dx, dy, dz | |
218 | Float_t dxEndPlate = 220.0; | |
219 | Float_t dyEndPlate = 220.0; | |
220 | Float_t dzEndPlate = 6.0; | |
221 | // Inner radius | |
222 | Float_t rInEndPlate = 52.5/2.; | |
223 | // Insert | |
224 | Float_t rInEndPlateI = 175.3/2.; | |
225 | Float_t rOuEndPlateI = 212.2/2.; | |
226 | Float_t dzEndPlateI = 2.0; | |
227 | ||
228 | ||
229 | TGeoBBox* endPlate1 = new TGeoBBox(dxEndPlate/2., dyEndPlate/2., dzEndPlate/2.); | |
230 | endPlate1->SetName("endPlate1"); | |
231 | ||
232 | TGeoTube* endPlate2 = new TGeoTube(0., rInEndPlate , (dzEndPlate + 0.1) / 2.) ; | |
233 | endPlate2->SetName("endPlate2"); | |
234 | TGeoTube* endPlate3 = new TGeoTube(rInEndPlateI, rOuEndPlateI, (dzEndPlateI + 0.1)/2.); | |
235 | endPlate3->SetName("endPlate3"); | |
236 | ||
237 | TGeoTranslation* tPlate = new TGeoTranslation("tPlate", 0., 0., -dzEndPlateI - 0.05); | |
238 | tPlate->RegisterYourself(); | |
239 | ||
240 | TGeoCompositeShape* shFaEndPlate = new TGeoCompositeShape("shFaEndPlate", "endPlate1-(endPlate2+endPlate3:tPlate)"); | |
241 | TGeoVolume* voFaEndPlate = new TGeoVolume("AFaEndPlate", shFaEndPlate, kMedSteel); | |
242 | ||
243 | // Pos 3 | |
244 | /////////////////////////////////// | |
245 | // FA Flange // | |
246 | // Drawing ALIP2A__0038 // | |
247 | /////////////////////////////////// | |
248 | // Width of the Flange | |
249 | Float_t dzFaFlange = 2.; | |
250 | // Outer radius | |
251 | Float_t rOuFaFlange = 41.0/2.; | |
252 | // 1st section | |
253 | Float_t dzFaFlange1 = 0.8; | |
254 | Float_t rInFaFlange1 = 33.4/2.; | |
255 | // 2nd section | |
256 | Float_t dzFaFlange2 = 1.2; | |
257 | Float_t rInFaFlange2 = 36.4/2.; | |
258 | ||
259 | TGeoPcon* shFaFlange = new TGeoPcon(0., 360., 4); | |
260 | z = 0; | |
261 | shFaFlange->DefineSection(0, z, rInFaFlange1, rOuFaFlange); | |
262 | z += dzFaFlange1; | |
263 | shFaFlange->DefineSection(1, z, rInFaFlange1, rOuFaFlange); | |
264 | shFaFlange->DefineSection(2, z, rInFaFlange2, rOuFaFlange); | |
265 | z += dzFaFlange2; | |
266 | shFaFlange->DefineSection(3, z, rInFaFlange2, rOuFaFlange); | |
267 | ||
268 | TGeoVolume* voFaFlange = new TGeoVolume("AFaFlange", shFaFlange, kMedSteel); | |
269 | ||
270 | // Pos 4+5 | |
271 | /////////////////////////////////// | |
272 | // FA W Plate A+B // | |
273 | // Drawing ALIP2A__0043 // | |
274 | /////////////////////////////////// | |
275 | // Front Flange | |
276 | Float_t dzFaWPlateF = 2.00; | |
277 | Float_t rInFaQPlateF = 20.50; | |
278 | Float_t rOuFaQPlateF = 40.05; | |
279 | // 1st Central Part 24 deg | |
280 | Float_t dzFaWPlateC1 = 7.95; | |
281 | Float_t rInFaQPlateC1 = 16.35; | |
282 | Float_t rOuFaQPlateC1 = rOuFaQPlateF + dzFaWPlateF * angle24; | |
283 | // 2nd Central Part 5 deg | |
284 | Float_t dzFaWPlateC2 = 1.05; | |
285 | Float_t rInFaQPlateC2 = rInFaQPlateC1 + dzFaWPlateC1 * angle10; | |
286 | Float_t rOuFaQPlateC2 = rOuFaQPlateC1 + dzFaWPlateC1 * angle24; | |
287 | Float_t rInFaQPlateC3 = 17.94; | |
288 | Float_t rOuFaQPlateC3 = 44.49; | |
289 | // Rear Flange | |
290 | Float_t dzFaWPlateR = 1.00; | |
291 | Float_t rInFaQPlateR = 21.00; | |
292 | Float_t rOuFaQPlateR = 42.55; | |
293 | // Lenth of Plate - Rear Flange | |
294 | Float_t dzFaWPlate = dzFaWPlateF + dzFaWPlateC1 + dzFaWPlateC2; | |
295 | ||
296 | TGeoPcon* shFaWPlateA = new TGeoPcon(0., 360., 7); | |
297 | z = 0.; | |
298 | // Front Flange | |
299 | shFaWPlateA->DefineSection(0, z, rInFaQPlateF, rOuFaQPlateF); | |
300 | z += dzFaWPlateF; | |
301 | shFaWPlateA->DefineSection(1, z, rInFaQPlateF, rOuFaQPlateC1); | |
302 | // 24 deg cone | |
303 | shFaWPlateA->DefineSection(2, z, rInFaQPlateC1, rOuFaQPlateC1); | |
304 | z += dzFaWPlateC1; | |
305 | shFaWPlateA->DefineSection(3, z, rInFaQPlateC2, rOuFaQPlateC2); | |
306 | // 5 deg cone | |
307 | z += dzFaWPlateC2; | |
308 | shFaWPlateA->DefineSection(4, z, rInFaQPlateC3, rOuFaQPlateC3); | |
309 | // Rear Flange | |
310 | shFaWPlateA->DefineSection(5, z, rInFaQPlateR, rOuFaQPlateR); | |
311 | z += dzFaWPlateR; | |
312 | shFaWPlateA->DefineSection(6, z, rInFaQPlateR, rOuFaQPlateR); | |
313 | ||
314 | TGeoVolume* voFaWPlateA = new TGeoVolume("AFaWPlateA", shFaWPlateA, kMedNiW); | |
315 | // Inner region with higher transport cuts | |
f2410b49 | 316 | TGeoPcon* shFaWPlateAI = new TGeoPcon(0., 360., 5); |
42df5168 | 317 | z = 3.; |
4cfeb4f1 | 318 | shFaWPlateAI->DefineSection(0, z, rInFaQPlateF + z * angle10, rOuFaQPlateC1 + (z - dzFaWPlateF) * angle24); |
42df5168 | 319 | for (Int_t i = 1; i < 5; i++) { |
320 | Float_t rmin = shFaWPlateA->GetRmin(i+2); | |
321 | Float_t rmax = shFaWPlateA->GetRmax(i+2) - 3.; | |
3b7df2c4 | 322 | Float_t zpos = shFaWPlateA->GetZ(i+2); |
323 | shFaWPlateAI->DefineSection(i, zpos, rmin, rmax); | |
42df5168 | 324 | } |
325 | TGeoVolume* voFaWPlateAI = new TGeoVolume("AFaWPlateAI", shFaWPlateAI, kMedNiWsh); | |
f8a44cbc | 326 | voFaWPlateA->AddNode(voFaWPlateAI, 1, gGeoIdentity); |
42df5168 | 327 | |
328 | // | |
329 | // Inner Tungsten Shield | |
330 | // Part 1 99.8 cm | |
331 | // Part 2 143.5 cm | |
332 | // Part 3 25.0 cm | |
333 | // Part 4 31.0 cm | |
334 | // ==================== | |
335 | // 299.3 cm - 0.6 overlap between Part 1 and Part 2 | |
336 | // 298.7 cm | |
337 | // Starting position 499.0 - 298.7 = 200.3 | |
338 | // Within C cone: 200.3 - 92.0 = 108.3 = end of straight section of the Graphite Cone | |
339 | // | |
340 | ||
341 | // Pos 6 | |
342 | /////////////////////////////////// | |
343 | // FA Tungsten Tube Part 1 // | |
344 | // Drawing ALIP2A__0045 // | |
345 | /////////////////////////////////// | |
346 | // | |
347 | // Inner radius | |
348 | Float_t rInFaWTube1C1 = 9.1/2.; | |
349 | // Central part | |
350 | Float_t dzFaWTube1C = 98.8; | |
351 | Float_t rOuFaWTube1C1 = 13.8/2.; | |
352 | Float_t rOuFaWTube1C2 = 20.7/2.; | |
353 | // Rear Flange | |
354 | Float_t dzFaWTube1R = 1.0; | |
355 | Float_t rOuFaWTube1R = 15.0/2.; | |
356 | // Total length | |
357 | Float_t dzFaWTube1 = dzFaWTube1C + dzFaWTube1R; | |
358 | ||
359 | TGeoPcon* shFaWTube1 = new TGeoPcon(0., 360., 4); | |
360 | z = 0.; | |
361 | // Central Part | |
362 | shFaWTube1->DefineSection(0, z, rInFaWTube1C1, rOuFaWTube1C1); | |
363 | z += dzFaWTube1C; | |
364 | shFaWTube1->DefineSection(1, z, rInFaWTube1C1, rOuFaWTube1C2); | |
365 | // Rear Flange | |
366 | shFaWTube1->DefineSection(2, z, rInFaWTube1C1, rOuFaWTube1R); | |
367 | z += dzFaWTube1R; | |
368 | shFaWTube1->DefineSection(3, z, rInFaWTube1C1, rOuFaWTube1R); | |
369 | ||
370 | TGeoVolume* voFaWTube1 = new TGeoVolume("AFaWTube1", shFaWTube1, kMedNiWsh); | |
371 | ||
372 | // Pos 7 | |
373 | /////////////////////////////////// | |
374 | // FA Tungsten Tube Part 2 // | |
375 | // Drawing ALIP2A__0046 // | |
376 | /////////////////////////////////// | |
377 | // | |
378 | ||
379 | // Central part | |
380 | Float_t dzFaWTube2C = 142.9; | |
381 | Float_t rInFaWTube2C1 = 9.10/2.; | |
382 | Float_t rInFaWTube2C2 = 12.58/2.; | |
383 | Float_t rOuFaWTube2C1 = 20.70/2.; | |
e0eaf068 | 384 | Float_t rOuFaWTube2C2 = 30.72/2.- 0.05; |
42df5168 | 385 | // Front Flange |
386 | Float_t dzFaWTube2F = 0.6; | |
387 | Float_t rInFaWTube2F = 15.4/2.; | |
388 | // Total length | |
389 | Float_t dzFaWTube2 = dzFaWTube2C + dzFaWTube2F; | |
390 | ||
391 | TGeoPcon* shFaWTube2 = new TGeoPcon(0., 360., 4); | |
392 | z = 0.; | |
393 | // Front Flange | |
394 | shFaWTube2->DefineSection(0, z, rInFaWTube2F, rOuFaWTube2C1); | |
395 | z += dzFaWTube2F; | |
396 | shFaWTube2->DefineSection(1, z, rInFaWTube2F, rOuFaWTube2C1); | |
397 | // Central part | |
398 | shFaWTube2->DefineSection(2, z, rInFaWTube2C1, rOuFaWTube2C1); | |
399 | z += dzFaWTube2C; | |
400 | shFaWTube2->DefineSection(3, z, rInFaWTube2C2, rOuFaWTube2C2); | |
401 | ||
402 | TGeoVolume* voFaWTube2 = new TGeoVolume("AFaWTube2", shFaWTube2, kMedNiWsh); | |
403 | ||
404 | // Pos 8 | |
405 | /////////////////////////////////// | |
406 | // FA Tungsten Tube Part 3 // | |
407 | // Drawing ALIP2A__0047 // | |
408 | /////////////////////////////////// | |
409 | Float_t dzFaWTube3 = 25.0; | |
410 | Float_t rInFaWTube3C1 = 12.59/2.; | |
411 | Float_t rInFaWTube3C2 = 13.23/2.; | |
412 | Float_t rOuFaWTube3C1 = 30.60/2.; | |
413 | Float_t rOuFaWTube3C2 = 32.35/2.; | |
414 | TGeoVolume* voFaWTube3 = new TGeoVolume("AFaWTube3", | |
415 | new TGeoCone(dzFaWTube3/2., rInFaWTube3C1, rOuFaWTube3C1, rInFaWTube3C2, rOuFaWTube3C2), | |
416 | kMedNiWsh); | |
417 | ||
418 | // Pos 9 | |
419 | /////////////////////////////////// | |
420 | // FA Tungsten Tube Part 4 // | |
421 | // Drawing ALIP2A__0048 // | |
422 | /////////////////////////////////// | |
423 | Float_t dzFaWTube4 = 31.0; | |
424 | Float_t rInFaWTube4C1 = 13.23/2.; | |
425 | Float_t rInFaWTube4C2 = 13.98/2.; | |
426 | Float_t rOuFaWTube4C1 = 48.80/2.; | |
427 | Float_t rOuFaWTube4C2 = 52.05/2.; | |
428 | TGeoVolume* voFaWTube4 = new TGeoVolume("AFaWTube4", | |
429 | new TGeoCone(dzFaWTube4/2., rInFaWTube4C1, rOuFaWTube4C1, rInFaWTube4C2, rOuFaWTube4C2), | |
430 | kMedNiWsh); | |
431 | ||
432 | // Pos 10 | |
433 | // | |
434 | // This section has been moved to AliSHILv3 | |
435 | ||
436 | // | |
437 | // Pos 11 | |
438 | /////////////////////////////////// | |
439 | // FA Graphite Cone // | |
440 | // Drawing ALIP2_0002 // | |
441 | /////////////////////////////////// | |
442 | // | |
443 | // Total length | |
444 | Float_t dzFaGraphiteCone = 225.0; | |
445 | // Straight section = start of the 2deg inner cone | |
446 | Float_t dzFaGraphiteConeS = 108.3; | |
447 | // Inner radius at the front | |
448 | Float_t rInFaGraphiteCone1 = 4.5; | |
449 | // Outer radius at the front | |
450 | Float_t rOuFaGraphiteCone1 = (zFa + dzFaFlange) * angle10; | |
451 | // Inner radius at start of inner opening cone | |
452 | Float_t rInFaGraphiteCone2 = 7.0; | |
453 | // Outer radius at start of inner opening cone | |
454 | Float_t rOuFaGraphiteCone2 = (zFa + dzFaFlange + dzFaGraphiteConeS) * angle10; | |
455 | // Inner radius the rear | |
456 | Float_t rInFaGraphiteCone3 = 11.0; | |
457 | // Ouer radius at the rear | |
458 | Float_t rOuFaGraphiteCone3 = (zFa + dzFaFlange + dzFaGraphiteCone) * angle10; | |
459 | ||
460 | TGeoPcon* shFaGraphiteCone = new TGeoPcon(0., 360., 4); | |
461 | ||
462 | z = 0; | |
463 | // Straight section | |
464 | shFaGraphiteCone->DefineSection(0, z, rInFaGraphiteCone1, rOuFaGraphiteCone1); | |
465 | z += dzFaGraphiteConeS; | |
466 | shFaGraphiteCone->DefineSection(1, z, rInFaGraphiteCone1, rOuFaGraphiteCone2); | |
467 | // 2 deg opening cone | |
468 | shFaGraphiteCone->DefineSection(2, z, rInFaGraphiteCone2, rOuFaGraphiteCone2); | |
469 | z = dzFaGraphiteCone; | |
470 | shFaGraphiteCone->DefineSection(3, z, rInFaGraphiteCone3, rOuFaGraphiteCone3); | |
471 | ||
472 | TGeoVolume* voFaGraphiteCone = new TGeoVolume("AFaGraphiteCone", shFaGraphiteCone, kMedCsh); | |
473 | // | |
474 | // Outer region with lower transport cuts | |
f2410b49 | 475 | dz = 50.; |
42df5168 | 476 | TGeoCone* shFaGraphiteConeO = new TGeoCone(dz/2., |
477 | rInFaGraphiteCone1, rOuFaGraphiteCone1, | |
478 | rInFaGraphiteCone1, rOuFaGraphiteCone1 + dz * angle10); | |
479 | ||
480 | TGeoVolume* voFaGraphiteConeO = new TGeoVolume("AFaGraphiteConeO", shFaGraphiteConeO, kMedC); | |
481 | voFaGraphiteCone->AddNode(voFaGraphiteConeO, 1, new TGeoTranslation(0., 0., dz/2.)); | |
482 | ||
483 | // Pos 12 | |
484 | /////////////////////////////////// | |
485 | // FA Lead Cone // | |
486 | // Drawing ALIP2A__0077 // | |
487 | /////////////////////////////////// | |
488 | // 5 deg cone | |
489 | Float_t dzFaPbCone5 = 168.9; | |
490 | Float_t rInFaPbCone5 = 37.35/2.; | |
491 | Float_t rOuFaPbCone5 = 85.66/2.; | |
492 | // 10 deg cone | |
493 | Float_t dzFaPbCone10 = 25.9; | |
494 | Float_t rInFaPbCone10 = rInFaPbCone5 + dzFaPbCone5 * angle10; | |
495 | Float_t rOuFaPbCone10 = 115.2/2.; | |
496 | // end | |
497 | Float_t rInFaPbConeE = 106.05/2.; | |
498 | Float_t rOuFaPbConeE = 124.35/2.; | |
499 | // Total length | |
500 | Float_t dzFaPbCone = dzFaPbCone5 + dzFaPbCone10; | |
501 | ||
502 | TGeoPcon* shFaPbCone = new TGeoPcon(0., 360., 3); | |
503 | z = 0.; | |
504 | // 5 deg cone | |
505 | shFaPbCone->DefineSection(0, z, rInFaPbCone5, rOuFaPbCone5); | |
506 | z += dzFaPbCone5; | |
507 | // 10 deg cone | |
508 | shFaPbCone->DefineSection(1, z, rInFaPbCone10, rOuFaPbCone10); | |
509 | z += dzFaPbCone10; | |
510 | shFaPbCone->DefineSection(2, z, rInFaPbConeE, rOuFaPbConeE); | |
511 | ||
512 | TGeoVolume* voFaPbCone = new TGeoVolume("AFaPbCone", shFaPbCone, kMedPb); | |
513 | // | |
514 | // Inner region with higher transport cuts | |
515 | TGeoPcon* shFaPbConeI = MakeShapeFromTemplate(shFaPbCone, 0., -3.); | |
516 | TGeoVolume* voFaPbConeI = new TGeoVolume("AFaPbConeI", shFaPbConeI, kMedPbSh); | |
f8a44cbc | 517 | voFaPbCone->AddNode(voFaPbConeI, 1, gGeoIdentity); |
42df5168 | 518 | |
519 | ||
520 | // Pos 13 | |
521 | /////////////////////////////////// | |
522 | // FA Concrete Cone // | |
523 | // Drawing ALIP2A__00xx // | |
524 | /////////////////////////////////// | |
525 | Float_t dzFaConcreteCone = 126.; | |
526 | Float_t rOuFaConcreteCone1 = rOuFaGraphiteCone3; | |
527 | Float_t rInFaConcreteCone1 = 11.; | |
528 | Float_t rOuFaConcreteCone2 = rOuFaConcreteCone1 + dzFaConcreteCone * angle10; | |
529 | Float_t rInFaConcreteCone2 = rInFaConcreteCone1 + dzFaConcreteCone * angle02; | |
530 | ||
531 | TGeoVolume* voFaConcreteCone = new TGeoVolume("AFaConcreteCone", | |
532 | new TGeoCone(dzFaConcreteCone/2., | |
533 | rInFaConcreteCone1, rOuFaConcreteCone1, | |
534 | rInFaConcreteCone2, rOuFaConcreteCone2), | |
f2410b49 | 535 | kMedConcSh); |
42df5168 | 536 | |
537 | // Pos 14 | |
538 | /////////////////////////////////// | |
539 | // FA Polyethylene Parts // | |
540 | // Drawing ALIP2A__0034 // | |
541 | /////////////////////////////////// | |
542 | Float_t dzFaCH2Cone = 201.; | |
543 | Float_t rInFaCH2Cone1 = 106.0/2.; | |
544 | Float_t rInFaCH2Cone2 = 176.9/2.; | |
545 | Float_t dFaCH2Cone = 7.5 / TMath::Cos(10. * kDegRad); | |
546 | ||
547 | TGeoVolume* voFaCH2Cone = new TGeoVolume("AFaCH2Cone", | |
548 | new TGeoCone(dzFaCH2Cone/2., | |
549 | rInFaCH2Cone1, rInFaCH2Cone1 + dFaCH2Cone, | |
550 | rInFaCH2Cone2, rInFaCH2Cone2 + dFaCH2Cone), | |
f2410b49 | 551 | kMedCH2Sh); |
42df5168 | 552 | |
553 | ||
554 | // Pos 15 | |
555 | /////////////////////////////////// | |
556 | // FA Steel Plate 250 mm // | |
557 | // Drawing ALIP2A__00xx // | |
558 | /////////////////////////////////// | |
559 | Float_t dzFaSteelCone25 = 25.; | |
d2d144b8 | 560 | Float_t eps = 0.001; |
42df5168 | 561 | Float_t rInFaSteelCone25A = rInFaConcreteCone2; |
562 | Float_t rOuFaSteelCone25A = rOuFaConcreteCone2; | |
563 | Float_t rInFaSteelCone25B = rInFaSteelCone25A + dzFaSteelCone25 * angle02; | |
564 | Float_t rOuFaSteelCone25B = rOuFaSteelCone25A + dzFaSteelCone25 * angle10; | |
565 | ||
566 | TGeoVolume* voFaSteelCone25 = new TGeoVolume("AFaSteelCone25", | |
567 | new TGeoCone(dzFaSteelCone25/2., | |
d2d144b8 | 568 | rInFaSteelCone25A + eps, rOuFaSteelCone25A - eps, |
569 | rInFaSteelCone25B + eps, rOuFaSteelCone25B - eps), | |
42df5168 | 570 | kMedSteelSh); |
571 | ||
572 | // Pos 16 | |
573 | /////////////////////////////////// | |
574 | // FA Steel Plate 310 mm // | |
575 | // Drawing ALIP2A__00xx // | |
576 | /////////////////////////////////// | |
577 | Float_t dzFaSteelCone31 = 31.; | |
578 | Float_t rInFaSteelCone31A = rOuFaWTube4C1;; | |
579 | Float_t rOuFaSteelCone31A = rOuFaSteelCone25B; | |
580 | Float_t rInFaSteelCone31B = rOuFaWTube4C2; | |
581 | Float_t rOuFaSteelCone31B = rOuFaSteelCone31A + dzFaSteelCone31 * angle10; | |
582 | ||
583 | TGeoVolume* voFaSteelCone31 = new TGeoVolume("AFaSteelCone31", | |
584 | new TGeoCone(dzFaSteelCone31/2., | |
d2d144b8 | 585 | rInFaSteelCone31A + eps, rOuFaSteelCone31A - eps, |
586 | rInFaSteelCone31B + eps, rOuFaSteelCone31B - eps), | |
42df5168 | 587 | kMedSteelSh); |
d2d144b8 | 588 | // Outer Region with higher transport cuts |
42df5168 | 589 | dz = 5.; |
590 | TGeoVolume* voFaSteelCone31I = new TGeoVolume("AFaSteelCone31I", | |
f2410b49 | 591 | new TGeoCone(dz/2., |
d2d144b8 | 592 | rInFaSteelCone31B - dz * angle03 + eps, |
593 | rOuFaSteelCone31B - dz * angle10 - eps, | |
594 | rInFaSteelCone31B + eps, rOuFaSteelCone31B - eps), | |
42df5168 | 595 | kMedSteel); |
596 | ||
597 | voFaSteelCone31->AddNode(voFaSteelCone31I, 1, new TGeoTranslation(0., 0., dzFaSteelCone31/2. - dz/2.)); | |
598 | ||
599 | ||
600 | /////////////////////////////////// | |
601 | // FA Composite Ring // | |
602 | // Drawing ALIP2A__0126 // | |
603 | /////////////////////////////////// | |
604 | // 1st section | |
605 | Float_t dzFaCompRing1 = 0.8; | |
606 | Float_t rInFaCompRing1 = 11.0/2.; | |
607 | Float_t rOuFaCompRing1 = 32.4/2.; | |
608 | // 2nd section | |
609 | Float_t dzFaCompRing2 = 1.2; | |
610 | Float_t rInFaCompRing2 = 14.0/2.; | |
98370359 | 611 | Float_t rOuFaCompRing2 = 35.3/2.; |
42df5168 | 612 | |
613 | TGeoPcon* shFaCompRing = new TGeoPcon(0., 360., 4); | |
614 | z = 0.; | |
615 | // 1st section | |
616 | shFaCompRing->DefineSection(0, z, rInFaCompRing1, rOuFaCompRing1); | |
617 | z += dzFaCompRing1; | |
618 | shFaCompRing->DefineSection(1, z, rInFaCompRing1, rOuFaCompRing1); | |
619 | // 2nd section | |
620 | shFaCompRing->DefineSection(2, z, rInFaCompRing2, rOuFaCompRing2);; | |
621 | z += dzFaCompRing2; | |
622 | shFaCompRing->DefineSection(3, z, rInFaCompRing2, rOuFaCompRing2); | |
623 | ||
624 | TGeoVolume* voFaCompRing = new TGeoVolume("AFaCompRing", shFaCompRing, kMedC); | |
625 | ||
626 | /////////////////////////////////// | |
627 | // FA Magnesium Ring // | |
628 | // Drawing ALIP2A__0127 // | |
629 | /////////////////////////////////// | |
630 | // | |
631 | // The inner radii | |
632 | // section 1+3 | |
633 | Float_t dzFaMgRingO = 0.7; | |
634 | Float_t rInFaMgRingO = 3.0; | |
635 | // section 2 | |
636 | Float_t dzFaMgRingI = 0.6; | |
637 | Float_t rInFaMgRingI = 3.5; | |
638 | ||
639 | TGeoPcon* shFaMgRing = new TGeoPcon(0., 360., 8); | |
640 | // 1st section | |
641 | z = 0.; | |
642 | shFaMgRing->DefineSection(0, z, rInFaMgRingO, rInFaCompRing1); | |
643 | z += dzFaMgRingO; | |
644 | shFaMgRing->DefineSection(1, z, rInFaMgRingO, rInFaCompRing1); | |
645 | // 2nd section | |
646 | shFaMgRing->DefineSection(2, z, rInFaMgRingI, rInFaCompRing1); | |
647 | z += dzFaMgRingI/2.; | |
648 | shFaMgRing->DefineSection(3, z, rInFaMgRingI, rInFaCompRing1); | |
649 | // 3rd section | |
650 | shFaMgRing->DefineSection(4, z, rInFaMgRingI, rInFaCompRing2); | |
651 | z += dzFaMgRingI/2.; | |
652 | shFaMgRing->DefineSection(5, z, rInFaMgRingI, rInFaCompRing2); | |
653 | // 4th section | |
654 | shFaMgRing->DefineSection(6, z, rInFaMgRingO, rInFaCompRing2); | |
655 | z += dzFaMgRingO; | |
656 | shFaMgRing->DefineSection(7, z, rInFaMgRingO, rInFaCompRing2); | |
f2410b49 | 657 | TGeoVolume* voFaMgRing = new TGeoVolume("AFaMgRing", shFaMgRing, kMedMg); |
42df5168 | 658 | |
659 | ||
660 | // | |
661 | // Absorber mother volume | |
662 | // | |
663 | // | |
664 | // Length of the absorber without endplate | |
665 | Float_t dzFa = dzFaFlange + dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25 + dzFaSteelCone31; | |
666 | TGeoPcon* shFaM = new TGeoPcon(0., 360., 16); | |
667 | // Front -> Flange (Mg Ring details) | |
668 | z = 0.; | |
669 | shFaM->DefineSection( 0, z, rInFaMgRingO, rOuFaQPlateF); | |
670 | z += dzFaMgRingO; | |
671 | dz = dzFaMgRingO; | |
672 | shFaM->DefineSection( 1, z, rInFaMgRingO, rOuFaQPlateF + dz * angle24); | |
673 | shFaM->DefineSection( 2, z, rInFaMgRingI, rOuFaQPlateF + dz * angle24); | |
674 | z += dzFaMgRingI; | |
675 | dz += dzFaMgRingI; | |
676 | shFaM->DefineSection( 3, z, rInFaMgRingI, rOuFaQPlateF + dz * angle24); | |
677 | shFaM->DefineSection( 4, z, rInFaMgRingO, rOuFaQPlateF + dz * angle24); | |
678 | z += dzFaMgRingO; | |
679 | dz += dzFaMgRingO; | |
680 | shFaM->DefineSection( 5, z, rInFaMgRingO, rOuFaQPlateF + dz * angle24); | |
681 | shFaM->DefineSection( 6, z, rInFaGraphiteCone1, rOuFaQPlateF + dz * angle24); | |
682 | // Flange -> W-Plate B | |
683 | z += dzFaWPlateC1; | |
684 | shFaM->DefineSection( 7, z, rInFaGraphiteCone1, rOuFaQPlateC2); | |
685 | z += dzFaWPlateC2; | |
686 | Float_t zFaSteelEnvelope = z; | |
687 | shFaM->DefineSection( 8, z, rInFaGraphiteCone1, rOuFaQPlateC3); | |
688 | // 5 deg cone -> 10 deg cone | |
689 | z = zFaSteelEnvelope + dzSteelEnvelopeFC + dzSteelEnvelopeC5; | |
690 | shFaM->DefineSection( 9, z, rInFaGraphiteCone1, rOuSteelEnvelopeC10); | |
691 | // 10 deg cone up to end of straight section | |
692 | z0 = z; | |
693 | z = dzFaFlange + dzFaGraphiteConeS + dzFaWTube1C; | |
694 | dz = z - z0; | |
695 | shFaM->DefineSection(10, z, rInFaGraphiteCone1, rOuSteelEnvelopeC10 + dz * angle10); | |
696 | // 0.7 deg inner opening cone up to outer rear ring | |
697 | z0 = z; | |
698 | z = dzFa - dzSteelEnvelopeR/2.; | |
699 | dz = (z - z0); | |
700 | shFaM->DefineSection(11, z, rInFaGraphiteCone1 +dz * angle71, rOuSteelEnvelopeR1); | |
701 | shFaM->DefineSection(12, z, rInFaGraphiteCone1 +dz * angle71, rOuSteelEnvelopeR2); | |
702 | z += dzSteelEnvelopeR/2.; | |
703 | shFaM->DefineSection(13, z, rInFaWTube4C2, rOuSteelEnvelopeR2); | |
704 | // Recess for end plate | |
705 | dz = dzSteelEnvelopeR/2; | |
706 | shFaM->DefineSection(14, z, rInFaCH2Cone2 - dz * angle10, rOuSteelEnvelopeR2); | |
707 | z += dzSteelEnvelopeR/2.; | |
708 | shFaM->DefineSection(15, z, rInFaCH2Cone2, rOuSteelEnvelopeR2); | |
709 | ||
710 | TGeoVolume* voFaM = new TGeoVolume("AFaM", shFaM, kMedAir); | |
f8a44cbc | 711 | voFaM->SetVisibility(0); |
712 | ||
42df5168 | 713 | |
714 | // | |
715 | // Assemble volumes inside acceptance | |
716 | TGeoPcon* shFaAccM = new TGeoPcon(0., 360., 7); | |
717 | for (Int_t i = 0; i < 4; i++) { | |
3b7df2c4 | 718 | Float_t zpos = shFaGraphiteCone->GetZ(i); |
42df5168 | 719 | Float_t rmin = shFaGraphiteCone->GetRmin(i); |
720 | Float_t rmax = shFaGraphiteCone->GetRmax(i); | |
3b7df2c4 | 721 | shFaAccM->DefineSection(i, zpos, rmin, rmax); |
42df5168 | 722 | } |
723 | z = dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25; | |
724 | z0 = z + zFa + dzFaFlange; | |
725 | shFaAccM->DefineSection(4, z, rOuFaWTube3C2, z0 * angle10); | |
726 | shFaAccM->DefineSection(5, z, rOuFaWTube4C1, z0 * angle10); | |
727 | z += dzFaSteelCone31; | |
728 | z0 += dzFaSteelCone31; | |
729 | shFaAccM->DefineSection(6, z, rOuFaWTube4C2, z0 * angle10); | |
730 | TGeoVolume* voFaAccM = new TGeoVolume("AFaAcc", shFaAccM, kMedAir); | |
731 | ||
732 | z = 0; | |
f8a44cbc | 733 | voFaAccM->AddNode(voFaGraphiteCone, 1, gGeoIdentity); |
42df5168 | 734 | z += dzFaGraphiteCone; |
735 | voFaAccM->AddNode(voFaConcreteCone, 1, new TGeoTranslation(0., 0., z + dzFaConcreteCone / 2.)); | |
736 | z += dzFaConcreteCone; | |
d2d144b8 | 737 | voFaAccM->AddNode(voFaSteelCone25, 1, new TGeoTranslation(0., 0., z + dzFaSteelCone25 / 2.)); |
42df5168 | 738 | z += dzFaSteelCone25; |
d2d144b8 | 739 | voFaAccM->AddNode(voFaSteelCone31, 1, new TGeoTranslation(0., 0., z + dzFaSteelCone31 / 2.)); |
42df5168 | 740 | |
741 | // | |
742 | // Inner shield | |
743 | TGeoVolumeAssembly* voFaInnerShield = new TGeoVolumeAssembly("AFaInnerShield"); | |
f8a44cbc | 744 | voFaInnerShield->AddNode(voFaWTube1, 1, gGeoIdentity); |
42df5168 | 745 | z = dzFaWTube1 - 0.6; |
746 | voFaInnerShield->AddNode(voFaWTube2, 1, new TGeoTranslation(0., 0., z) ); | |
747 | z += dzFaWTube2; | |
748 | voFaInnerShield->AddNode(voFaWTube3, 1, new TGeoTranslation(0., 0., z + dzFaWTube3 / 2.) ); | |
749 | z += dzFaWTube3; | |
750 | voFaInnerShield->AddNode(voFaWTube4, 1, new TGeoTranslation(0., 0., z + dzFaWTube4 / 2.) ); | |
751 | z = dzFaGraphiteConeS + dzFaFlange; | |
752 | voFaM->AddNode(voFaInnerShield, 1, new TGeoTranslation(0., 0., z)); | |
753 | ||
754 | ||
755 | // | |
756 | // Adding volumes to mother volume | |
757 | // | |
758 | z = 0.; | |
f8a44cbc | 759 | voFaM->AddNode(voFaWPlateA, 1, gGeoIdentity); |
42df5168 | 760 | z += dzFaWPlate; |
761 | voFaM->AddNode(voFaSteelEnvelope, 1, new TGeoTranslation(0., 0., z)); | |
762 | z += dzSteelEnvelopeFC; | |
763 | voFaM->AddNode(voFaPbCone, 1, new TGeoTranslation(0., 0., z)); | |
764 | z += (dzFaPbCone + dzFaCH2Cone / 2.); | |
765 | voFaM->AddNode(voFaCH2Cone, 1, new TGeoTranslation(0., 0., z)); | |
f8a44cbc | 766 | voFaM->AddNode(voFaFlange, 1, gGeoIdentity); |
767 | voFaM->AddNode(voFaMgRing, 1, gGeoIdentity); | |
768 | voFaM->AddNode(voFaCompRing, 1, gGeoIdentity); | |
42df5168 | 769 | voFaM->AddNode(voFaAccM, 1, new TGeoTranslation(0., 0., dzFaFlange)); |
770 | ||
771 | //////////////////////////////////////////////////// | |
772 | // // | |
773 | // Front Absorber Support Structure FASS // | |
774 | // // | |
775 | // Drawing ALIP2A__0035 // | |
776 | // Drawing ALIP2A__0089 // | |
777 | // Drawing ALIP2A__0090 // | |
778 | // Drawing ALIP2A__0109 // | |
779 | //////////////////////////////////////////////////// | |
780 | TGeoVolumeAssembly* voFass = new TGeoVolumeAssembly("AFass"); | |
781 | const Float_t kFassUBFlangeH = 380.; | |
782 | const Float_t kFassUBFlangeW = 77.; | |
783 | ||
784 | const Float_t kFassUMFlangeH = 380.; | |
785 | const Float_t kFassUMFlangeB = 246.; | |
786 | const Float_t kFassUMFlangeT = 10.; | |
787 | const Float_t kFassUMFalpha = - TMath::ATan((kFassUMFlangeB-kFassUMFlangeT)/ kFassUMFlangeH / 2.) / kDegRad; | |
788 | // Upper back flange | |
789 | // B1 | |
790 | // 380 x 77 | |
791 | TGeoVolume* voFassUBFlange = new TGeoVolume("AFassUBFlange", new TGeoBBox(kFassUBFlangeW/2., | |
792 | kFassUBFlangeH/2., 3./2.), kMedSteel); | |
793 | voFass->AddNode(voFassUBFlange, 1, new TGeoTranslation(+1.5 + kFassUBFlangeW/2., | |
794 | 180. + kFassUBFlangeH/2., | |
795 | kFassUMFlangeB - 1.5)); | |
796 | voFass->AddNode(voFassUBFlange, 2, new TGeoTranslation(-1.5 - kFassUBFlangeW/2., | |
797 | 180. + kFassUBFlangeH/2., | |
798 | kFassUMFlangeB - 1.5)); | |
799 | ||
800 | ||
801 | // Lower back flange | |
802 | // Upper median flange | |
803 | // Drawing ALIP2A__0090 // | |
804 | // Drawing ALIP2A__0089 // | |
805 | // A2 | |
806 | ||
807 | TGeoVolume* voFassUMFlange = new TGeoVolume("AFassUMFlange", | |
808 | new TGeoTrap(kFassUMFlangeH/2., kFassUMFalpha, | |
809 | 0., 1.5, | |
810 | kFassUMFlangeB/2., kFassUMFlangeB/2., | |
811 | 0., 1.5, | |
812 | kFassUMFlangeT/2., kFassUMFlangeT/2., | |
813 | 0.), kMedSteel); | |
814 | ||
815 | TGeoRotation* rotFass1 = new TGeoRotation("rotFass1", 180., 0., 90., 0., 90., 90.); | |
816 | voFass->AddNode(voFassUMFlange,1 , | |
817 | new TGeoCombiTrans(0., 180. + kFassUMFlangeH/2., -(kFassUMFlangeB+kFassUMFlangeT)/4. + kFassUMFlangeB, | |
818 | rotFass1)); | |
819 | ||
820 | ||
821 | // Lower median flange | |
822 | // Drawing ALIP2A__0090 // | |
823 | // Drawing ALIP2A__0089 // | |
824 | // A1 | |
825 | const Float_t kFassLMFlangeH = 242.; | |
826 | const Float_t kFassLMFlangeB = 246.; | |
827 | const Float_t kFassLMFlangeT = 43.; | |
828 | const Float_t kFassLMFalpha = - TMath::ATan((kFassLMFlangeB-kFassLMFlangeT)/ kFassLMFlangeH / 2.) / kDegRad; | |
829 | TGeoVolume* voFassLMFlange = new TGeoVolume("AFassLMFlange", | |
830 | new TGeoTrap(kFassLMFlangeH/2., kFassLMFalpha, | |
831 | 0., 1.5, | |
832 | kFassLMFlangeB/2., kFassLMFlangeB/2., | |
833 | 0., 1.5, | |
834 | kFassLMFlangeT/2., kFassLMFlangeT/2., | |
835 | 0.), kMedSteel); | |
836 | TGeoRotation* rotFass2 = new TGeoRotation("rotFass2", 180., 0., 90., 0., 90., 270.); | |
837 | voFass->AddNode(voFassLMFlange, 1, | |
838 | new TGeoCombiTrans(0., -180. - kFassLMFlangeH/2., -(kFassLMFlangeB+kFassLMFlangeT)/4. + kFassLMFlangeB, | |
839 | rotFass2)); | |
840 | ||
841 | // Stiffeners | |
842 | // Support Plate | |
843 | // | |
844 | // Central cone | |
845 | TGeoPgon* shFassCone = new TGeoPgon(22.5, 360., 8, 4); | |
846 | shFassCone->DefineSection(0, 0., 0., 180.); | |
847 | shFassCone->DefineSection(1, 3., 0., 180.); | |
848 | shFassCone->DefineSection(2, 3., 177., 180.); | |
849 | shFassCone->DefineSection(3, 246., 177., 180.); | |
850 | shFassCone->SetName("FassCone"); | |
851 | ||
852 | TGeoBBox* shFassWindow = new TGeoBBox( 190., 53., 28.); | |
853 | shFassWindow->SetName("FassWindow"); | |
854 | TGeoTranslation* tFassWindow = new TGeoTranslation("tFassWindow", 0., 0., 78.); | |
855 | tFassWindow->RegisterYourself(); | |
856 | ||
857 | TGeoTube* shFassApperture = new TGeoTube(0., 104., 3.); | |
858 | shFassApperture->SetName("FassApperture"); | |
859 | ||
860 | TGeoCompositeShape* shFassCentral = | |
861 | new TGeoCompositeShape("shFassCentral", "FassCone-(FassWindow:tFassWindow+FassApperture)"); | |
862 | ||
863 | TGeoVolume* voFassCentral = new TGeoVolume("AFassCentral", shFassCentral, kMedSteel); | |
f8a44cbc | 864 | voFass->AddNode(voFassCentral, 1, gGeoIdentity); |
42df5168 | 865 | |
866 | // | |
867 | // Aluminum ring | |
868 | // | |
869 | TGeoVolume* voFassAlRing = new TGeoVolume("AFassAlRing", new TGeoTube(104., 180., 10.), kMedAlu); | |
870 | ||
871 | ||
872 | // | |
873 | // Assemble the FA | |
874 | // | |
875 | // Inside muon spectrometer acceptance | |
876 | // | |
877 | // Composite 2 cm | |
878 | // Graphite 225 cm | |
879 | // Concrete 126 cm | |
880 | // Steel 56 cm | |
881 | // =================== | |
882 | // 409 cm | |
883 | // should be 409 cm | |
884 | ||
885 | ||
886 | ||
887 | ||
888 | // | |
889 | // Absorber and Support | |
890 | TGeoVolumeAssembly* voFA = new TGeoVolumeAssembly("AFA"); | |
f8a44cbc | 891 | voFA->AddNode(voFaM, 1, gGeoIdentity); |
42df5168 | 892 | voFA->AddNode(voFaEndPlate, 1, new TGeoTranslation(0., 0., dzFa + dzEndPlate/2.)); |
893 | voFA->AddNode(voFass, 1, new TGeoTranslation(0., 0., 388.45)); | |
e0eaf068 | 894 | voFA->AddNode(voFassAlRing, 1, new TGeoTranslation(0., 0., 382. - 3.56)); |
42df5168 | 895 | top->AddNode(voFA, 1, new TGeoCombiTrans(0., 0., -90., rotxz)); |
896 | } | |
897 | ||
898 | ||
87b82cf8 | 899 | TGeoPcon* AliABSOv3::MakeShapeFromTemplate(const TGeoPcon* pcon, Float_t drMin, Float_t drMax) |
42df5168 | 900 | { |
901 | // | |
902 | // Returns new shape based on a template changing | |
903 | // the inner radii by drMin and the outer radii by drMax. | |
904 | // | |
905 | Int_t nz = pcon->GetNz(); | |
906 | TGeoPcon* cpcon = new TGeoPcon(0., 360., nz); | |
907 | for (Int_t i = 0; i < nz; i++) | |
908 | cpcon->DefineSection(i, pcon->GetZ(i), pcon->GetRmin(i) + drMin, pcon->GetRmax(i) + drMax); | |
909 | return cpcon; | |
910 | } |