Adding Domenico Colella as responsible for SPD part in TRI pp
[u/mrichter/AliRoot.git] / STRUCT / AliABSOv3.cxx
CommitLineData
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
42ClassImp(AliABSOv3)
43
44//_____________________________________________________________________________
45AliABSOv3::AliABSOv3()
46{
47 //
48 // Default constructor for muon shield
49 //
50}
51
52//_____________________________________________________________________________
53AliABSOv3::AliABSOv3(const char *name, const char *title)
54 : AliABSO(name,title)
55{
56 // Standard constructor for muon shield
57 //
58}
59
60//_____________________________________________________________________________
61void 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");
96//
f2410b49 97 TGeoMedium* kMedMg = gGeoManager->GetMedium("ABSO_MG_C0");
98//
42df5168 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 899TGeoPcon* 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}