1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //-------------------------------------------------------------------------
19 // The Front Absorber FA
22 // andreas.morsch@cern.ch
23 //-------------------------------------------------------------------------
25 #include <TVirtualMC.h>
27 #include <TGeoVolume.h>
29 #include <TGeoManager.h>
30 #include <TGeoMatrix.h>
31 #include <TGeoCompositeShape.h>
34 #include <TGeoTorus.h>
38 #include "AliABSOv3.h"
44 //_____________________________________________________________________________
45 AliABSOv3::AliABSOv3()
48 // Default constructor for muon shield
52 //_____________________________________________________________________________
53 AliABSOv3::AliABSOv3(const char *name, const char *title)
56 // Standard constructor for muon shield
60 //_____________________________________________________________________________
61 void AliABSOv3::CreateGeometry()
64 // Build muon shield geometry
72 TGeoVolume* top = gGeoManager->GetVolume("ALIC");
77 TGeoTranslation* vec0 = new TGeoTranslation(0., 0., 0.);
81 TGeoMedium* kMedNiW = gGeoManager->GetMedium("ABSO_Ni/W0");
82 TGeoMedium* kMedNiWsh = gGeoManager->GetMedium("ABSO_Ni/W3");
84 TGeoMedium* kMedSteel = gGeoManager->GetMedium("ABSO_ST_C0");
85 TGeoMedium* kMedSteelSh = gGeoManager->GetMedium("ABSO_ST_C3");
87 TGeoMedium* kMedAir = gGeoManager->GetMedium("ABSO_AIR_C0");
89 TGeoMedium* kMedPb = gGeoManager->GetMedium("ABSO_PB_C0");
90 TGeoMedium* kMedPbSh = gGeoManager->GetMedium("ABSO_PB_C2");
92 TGeoMedium* kMedConcSh = gGeoManager->GetMedium("ABSO_CC_C2");
94 TGeoMedium* kMedCH2Sh = gGeoManager->GetMedium("ABSO_CH2_C2");
96 TGeoMedium* kMedC = gGeoManager->GetMedium("ABSO_C_C0");
97 TGeoMedium* kMedCsh = gGeoManager->GetMedium("ABSO_C_C2");
99 TGeoMedium* kMedAlu = gGeoManager->GetMedium("ABSO_ALU_C0");
101 TGeoMedium* kMedMg = gGeoManager->GetMedium("ABSO_MG_C0");
103 const Float_t kDegRad = TMath::Pi() / 180.;
106 TGeoRotation* rotxz = new TGeoRotation("rotxz", 90., 0., 90., 90., 180., 0.);
107 ///////////////////////////////////
110 // Drawing ALIP2A__0106 //
113 ///////////////////////////////////
115 // Pos 1 Steel Envelope
117 // Pos 3 Flange (wrong arrow in the drawing)
120 // Pos 6 Tungsten Tube Part 1
121 // Pos 7 Tungsten Tube Part 2
122 // Pos 8 Tungsten Tube Part 3
123 // Pos 9 Tungsten Tube Part 4
124 // Pos 10 Tungsten Tail
125 // Pos 11 Graphite Cone
127 // Pos 13 Concrete Cone
128 // Pos 14 Polyethylene Parts
129 // Pos 15 Steel Plate 25 cm
130 // Pos 16 Steel Plate 31 cm
131 // Pos 17 Magnesium Ring
132 // Pos 18 Composite Ring
135 // Mimimum angle of the tracking region
136 const Float_t angle02 = TMath::Tan( 2. * kDegRad);
137 // Maximum angle of the tracking region
138 const Float_t angle10 = TMath::Tan(10. * kDegRad);
139 // Opening angle of W rear plug
140 const Float_t angle03 = TMath::Tan( 3. * kDegRad);
142 const Float_t angle05 = TMath::Tan( 5. * kDegRad);
143 // Opening angle of the FA snout
144 const Float_t angle24 = TMath::Tan(24. * kDegRad);
145 // Opneing angle of the inner cone
146 const Float_t angle71 = TMath::Tan(0.697 * kDegRad);
147 // Starting position in z
148 const Float_t zFa = 90.0;
151 ///////////////////////////////////
152 // FA Steel Envelope //
153 // Drawing ALIP2A__0036 //
154 ///////////////////////////////////
155 // Thickness of the envelope
156 Float_t dSteelEnvelope = 1.5;
160 Float_t dzSteelEnvelopeFC = 4.00;
162 Float_t rInSteelEnvelopeFC1 = 35.90/2.;
163 Float_t rInSteelEnvelopeFC2 = rInSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle10;
165 Float_t rOuSteelEnvelopeFC1 = 88.97/2.;
166 Float_t rOuSteelEnvelopeFC2 = rOuSteelEnvelopeFC1 + dzSteelEnvelopeFC * angle05;
169 Float_t dzSteelEnvelopeC5 = 168.9;
170 Float_t rInSteelEnvelopeC5 = rOuSteelEnvelopeFC2 - dSteelEnvelope/TMath::Cos(5 * kDegRad);
171 Float_t rOuSteelEnvelopeC5 = rOuSteelEnvelopeFC2;
173 Float_t dzSteelEnvelopeC10 = 227.1 - 4.;
174 Float_t rInSteelEnvelopeC10 = 116.22/2.;
175 Float_t rOuSteelEnvelopeC10 = rInSteelEnvelopeC10 + dSteelEnvelope/TMath::Cos(10 * kDegRad);
177 Float_t dzSteelEnvelopeR = 4.;
178 Float_t rInSteelEnvelopeR2 = 196.3/2.;
179 Float_t rOuSteelEnvelopeR2 = 212.0/2.;
180 Float_t rInSteelEnvelopeR1 = rInSteelEnvelopeR2 - dzSteelEnvelopeR * angle10;
181 Float_t rOuSteelEnvelopeR1 = rInSteelEnvelopeR1 + dSteelEnvelope/TMath::Cos(10 * kDegRad);
183 Float_t dzSteelEnvelopeFI = 1.;
184 Float_t rInSteelEnvelopeFI = 42.0/2.;
185 Float_t rOuSteelEnvelopeFI = 85.0/2.;
187 TGeoPcon* shFaSteelEnvelopeC = new TGeoPcon(0., 360., 7);
190 shFaSteelEnvelopeC->DefineSection( 0, z, rInSteelEnvelopeFC1, rOuSteelEnvelopeFC1);
191 z += dzSteelEnvelopeFC;
192 shFaSteelEnvelopeC->DefineSection( 1, z, rInSteelEnvelopeFC2, rOuSteelEnvelopeFC2);
194 shFaSteelEnvelopeC->DefineSection( 2, z, rInSteelEnvelopeC5, rOuSteelEnvelopeC5);
195 z += dzSteelEnvelopeC5;
196 shFaSteelEnvelopeC->DefineSection( 3, z, rInSteelEnvelopeC10, rOuSteelEnvelopeC10);
198 z += dzSteelEnvelopeC10;
199 shFaSteelEnvelopeC->DefineSection( 4, z, rInSteelEnvelopeR1, rOuSteelEnvelopeR1);
201 shFaSteelEnvelopeC->DefineSection( 5, z, rInSteelEnvelopeR1, rOuSteelEnvelopeR2);
202 z += dzSteelEnvelopeR;
203 shFaSteelEnvelopeC->DefineSection( 6, z, rInSteelEnvelopeR2, rOuSteelEnvelopeR2);
206 shFaSteelEnvelopeC->SetName("steelEnvC");
207 TGeoTube* shFaSteelEnvelopeT = new TGeoTube(rInSteelEnvelopeFI, rOuSteelEnvelopeFI, dzSteelEnvelopeFI);
208 shFaSteelEnvelopeT->SetName("steelEnvT");
209 TGeoCompositeShape* shFaSteelEnvelope = new TGeoCompositeShape("shFaSteelEnvelope", "steelEnvC-steelEnvT");
211 TGeoVolume* voFaSteelEnvelope = new TGeoVolume("AFaSteelEnvelope", shFaSteelEnvelope, kMedSteel);
214 ///////////////////////////////////
216 // Drawing ALIP2A__0037 //
217 ///////////////////////////////////
221 // Outer dimensions dx, dy, dz
222 Float_t dxEndPlate = 220.0;
223 Float_t dyEndPlate = 220.0;
224 Float_t dzEndPlate = 6.0;
226 Float_t rInEndPlate = 52.5/2.;
228 Float_t rInEndPlateI = 175.3/2.;
229 Float_t rOuEndPlateI = 212.2/2.;
230 Float_t dzEndPlateI = 2.0;
233 TGeoBBox* endPlate1 = new TGeoBBox(dxEndPlate/2., dyEndPlate/2., dzEndPlate/2.);
234 endPlate1->SetName("endPlate1");
236 TGeoTube* endPlate2 = new TGeoTube(0., rInEndPlate , (dzEndPlate + 0.1) / 2.) ;
237 endPlate2->SetName("endPlate2");
238 TGeoTube* endPlate3 = new TGeoTube(rInEndPlateI, rOuEndPlateI, (dzEndPlateI + 0.1)/2.);
239 endPlate3->SetName("endPlate3");
241 TGeoTranslation* tPlate = new TGeoTranslation("tPlate", 0., 0., -dzEndPlateI - 0.05);
242 tPlate->RegisterYourself();
244 TGeoCompositeShape* shFaEndPlate = new TGeoCompositeShape("shFaEndPlate", "endPlate1-(endPlate2+endPlate3:tPlate)");
245 TGeoVolume* voFaEndPlate = new TGeoVolume("AFaEndPlate", shFaEndPlate, kMedSteel);
248 ///////////////////////////////////
250 // Drawing ALIP2A__0038 //
251 ///////////////////////////////////
252 // Width of the Flange
253 Float_t dzFaFlange = 2.;
255 Float_t rOuFaFlange = 41.0/2.;
257 Float_t dzFaFlange1 = 0.8;
258 Float_t rInFaFlange1 = 33.4/2.;
260 Float_t dzFaFlange2 = 1.2;
261 Float_t rInFaFlange2 = 36.4/2.;
263 TGeoPcon* shFaFlange = new TGeoPcon(0., 360., 4);
265 shFaFlange->DefineSection(0, z, rInFaFlange1, rOuFaFlange);
267 shFaFlange->DefineSection(1, z, rInFaFlange1, rOuFaFlange);
268 shFaFlange->DefineSection(2, z, rInFaFlange2, rOuFaFlange);
270 shFaFlange->DefineSection(3, z, rInFaFlange2, rOuFaFlange);
272 TGeoVolume* voFaFlange = new TGeoVolume("AFaFlange", shFaFlange, kMedSteel);
275 ///////////////////////////////////
277 // Drawing ALIP2A__0043 //
278 ///////////////////////////////////
280 Float_t dzFaWPlateF = 2.00;
281 Float_t rInFaQPlateF = 20.50;
282 Float_t rOuFaQPlateF = 40.05;
283 // 1st Central Part 24 deg
284 Float_t dzFaWPlateC1 = 7.95;
285 Float_t rInFaQPlateC1 = 16.35;
286 Float_t rOuFaQPlateC1 = rOuFaQPlateF + dzFaWPlateF * angle24;
287 // 2nd Central Part 5 deg
288 Float_t dzFaWPlateC2 = 1.05;
289 Float_t rInFaQPlateC2 = rInFaQPlateC1 + dzFaWPlateC1 * angle10;
290 Float_t rOuFaQPlateC2 = rOuFaQPlateC1 + dzFaWPlateC1 * angle24;
291 Float_t rInFaQPlateC3 = 17.94;
292 Float_t rOuFaQPlateC3 = 44.49;
294 Float_t dzFaWPlateR = 1.00;
295 Float_t rInFaQPlateR = 21.00;
296 Float_t rOuFaQPlateR = 42.55;
297 // Lenth of Plate - Rear Flange
298 Float_t dzFaWPlate = dzFaWPlateF + dzFaWPlateC1 + dzFaWPlateC2;
300 TGeoPcon* shFaWPlateA = new TGeoPcon(0., 360., 7);
303 shFaWPlateA->DefineSection(0, z, rInFaQPlateF, rOuFaQPlateF);
305 shFaWPlateA->DefineSection(1, z, rInFaQPlateF, rOuFaQPlateC1);
307 shFaWPlateA->DefineSection(2, z, rInFaQPlateC1, rOuFaQPlateC1);
309 shFaWPlateA->DefineSection(3, z, rInFaQPlateC2, rOuFaQPlateC2);
312 shFaWPlateA->DefineSection(4, z, rInFaQPlateC3, rOuFaQPlateC3);
314 shFaWPlateA->DefineSection(5, z, rInFaQPlateR, rOuFaQPlateR);
316 shFaWPlateA->DefineSection(6, z, rInFaQPlateR, rOuFaQPlateR);
318 TGeoVolume* voFaWPlateA = new TGeoVolume("AFaWPlateA", shFaWPlateA, kMedNiW);
319 // Inner region with higher transport cuts
320 TGeoPcon* shFaWPlateAI = new TGeoPcon(0., 360., 5);
322 shFaWPlateAI->DefineSection(0, z, rInFaQPlateF + z * angle10, rOuFaQPlateC1 + (z - dzFaWPlateF) * angle24);
323 for (Int_t i = 1; i < 5; i++) {
324 Float_t rmin = shFaWPlateA->GetRmin(i+2);
325 Float_t rmax = shFaWPlateA->GetRmax(i+2) - 3.;
326 Float_t z = shFaWPlateA->GetZ(i+2);
327 shFaWPlateAI->DefineSection(i, z, rmin, rmax);
329 TGeoVolume* voFaWPlateAI = new TGeoVolume("AFaWPlateAI", shFaWPlateAI, kMedNiWsh);
330 voFaWPlateA->AddNode(voFaWPlateAI, 1, vec0);
333 // Inner Tungsten Shield
338 // ====================
339 // 299.3 cm - 0.6 overlap between Part 1 and Part 2
341 // Starting position 499.0 - 298.7 = 200.3
342 // Within C cone: 200.3 - 92.0 = 108.3 = end of straight section of the Graphite Cone
346 ///////////////////////////////////
347 // FA Tungsten Tube Part 1 //
348 // Drawing ALIP2A__0045 //
349 ///////////////////////////////////
352 Float_t rInFaWTube1C1 = 9.1/2.;
354 Float_t dzFaWTube1C = 98.8;
355 Float_t rOuFaWTube1C1 = 13.8/2.;
356 Float_t rOuFaWTube1C2 = 20.7/2.;
358 Float_t dzFaWTube1R = 1.0;
359 Float_t rOuFaWTube1R = 15.0/2.;
361 Float_t dzFaWTube1 = dzFaWTube1C + dzFaWTube1R;
363 TGeoPcon* shFaWTube1 = new TGeoPcon(0., 360., 4);
366 shFaWTube1->DefineSection(0, z, rInFaWTube1C1, rOuFaWTube1C1);
368 shFaWTube1->DefineSection(1, z, rInFaWTube1C1, rOuFaWTube1C2);
370 shFaWTube1->DefineSection(2, z, rInFaWTube1C1, rOuFaWTube1R);
372 shFaWTube1->DefineSection(3, z, rInFaWTube1C1, rOuFaWTube1R);
374 TGeoVolume* voFaWTube1 = new TGeoVolume("AFaWTube1", shFaWTube1, kMedNiWsh);
377 ///////////////////////////////////
378 // FA Tungsten Tube Part 2 //
379 // Drawing ALIP2A__0046 //
380 ///////////////////////////////////
384 Float_t dzFaWTube2C = 142.9;
385 Float_t rInFaWTube2C1 = 9.10/2.;
386 Float_t rInFaWTube2C2 = 12.58/2.;
387 Float_t rOuFaWTube2C1 = 20.70/2.;
388 Float_t rOuFaWTube2C2 = 30.72/2.;
390 Float_t dzFaWTube2F = 0.6;
391 Float_t rInFaWTube2F = 15.4/2.;
393 Float_t dzFaWTube2 = dzFaWTube2C + dzFaWTube2F;
395 TGeoPcon* shFaWTube2 = new TGeoPcon(0., 360., 4);
398 shFaWTube2->DefineSection(0, z, rInFaWTube2F, rOuFaWTube2C1);
400 shFaWTube2->DefineSection(1, z, rInFaWTube2F, rOuFaWTube2C1);
402 shFaWTube2->DefineSection(2, z, rInFaWTube2C1, rOuFaWTube2C1);
404 shFaWTube2->DefineSection(3, z, rInFaWTube2C2, rOuFaWTube2C2);
406 TGeoVolume* voFaWTube2 = new TGeoVolume("AFaWTube2", shFaWTube2, kMedNiWsh);
409 ///////////////////////////////////
410 // FA Tungsten Tube Part 3 //
411 // Drawing ALIP2A__0047 //
412 ///////////////////////////////////
413 Float_t dzFaWTube3 = 25.0;
414 Float_t rInFaWTube3C1 = 12.59/2.;
415 Float_t rInFaWTube3C2 = 13.23/2.;
416 Float_t rOuFaWTube3C1 = 30.60/2.;
417 Float_t rOuFaWTube3C2 = 32.35/2.;
418 TGeoVolume* voFaWTube3 = new TGeoVolume("AFaWTube3",
419 new TGeoCone(dzFaWTube3/2., rInFaWTube3C1, rOuFaWTube3C1, rInFaWTube3C2, rOuFaWTube3C2),
423 ///////////////////////////////////
424 // FA Tungsten Tube Part 4 //
425 // Drawing ALIP2A__0048 //
426 ///////////////////////////////////
427 Float_t dzFaWTube4 = 31.0;
428 Float_t rInFaWTube4C1 = 13.23/2.;
429 Float_t rInFaWTube4C2 = 13.98/2.;
430 Float_t rOuFaWTube4C1 = 48.80/2.;
431 Float_t rOuFaWTube4C2 = 52.05/2.;
432 TGeoVolume* voFaWTube4 = new TGeoVolume("AFaWTube4",
433 new TGeoCone(dzFaWTube4/2., rInFaWTube4C1, rOuFaWTube4C1, rInFaWTube4C2, rOuFaWTube4C2),
438 // This section has been moved to AliSHILv3
442 ///////////////////////////////////
443 // FA Graphite Cone //
444 // Drawing ALIP2_0002 //
445 ///////////////////////////////////
448 Float_t dzFaGraphiteCone = 225.0;
449 // Straight section = start of the 2deg inner cone
450 Float_t dzFaGraphiteConeS = 108.3;
451 // Inner radius at the front
452 Float_t rInFaGraphiteCone1 = 4.5;
453 // Outer radius at the front
454 Float_t rOuFaGraphiteCone1 = (zFa + dzFaFlange) * angle10;
455 // Inner radius at start of inner opening cone
456 Float_t rInFaGraphiteCone2 = 7.0;
457 // Outer radius at start of inner opening cone
458 Float_t rOuFaGraphiteCone2 = (zFa + dzFaFlange + dzFaGraphiteConeS) * angle10;
459 // Inner radius the rear
460 Float_t rInFaGraphiteCone3 = 11.0;
461 // Ouer radius at the rear
462 Float_t rOuFaGraphiteCone3 = (zFa + dzFaFlange + dzFaGraphiteCone) * angle10;
464 TGeoPcon* shFaGraphiteCone = new TGeoPcon(0., 360., 4);
468 shFaGraphiteCone->DefineSection(0, z, rInFaGraphiteCone1, rOuFaGraphiteCone1);
469 z += dzFaGraphiteConeS;
470 shFaGraphiteCone->DefineSection(1, z, rInFaGraphiteCone1, rOuFaGraphiteCone2);
471 // 2 deg opening cone
472 shFaGraphiteCone->DefineSection(2, z, rInFaGraphiteCone2, rOuFaGraphiteCone2);
473 z = dzFaGraphiteCone;
474 shFaGraphiteCone->DefineSection(3, z, rInFaGraphiteCone3, rOuFaGraphiteCone3);
476 TGeoVolume* voFaGraphiteCone = new TGeoVolume("AFaGraphiteCone", shFaGraphiteCone, kMedCsh);
478 // Outer region with lower transport cuts
480 TGeoCone* shFaGraphiteConeO = new TGeoCone(dz/2.,
481 rInFaGraphiteCone1, rOuFaGraphiteCone1,
482 rInFaGraphiteCone1, rOuFaGraphiteCone1 + dz * angle10);
484 TGeoVolume* voFaGraphiteConeO = new TGeoVolume("AFaGraphiteConeO", shFaGraphiteConeO, kMedC);
485 voFaGraphiteCone->AddNode(voFaGraphiteConeO, 1, new TGeoTranslation(0., 0., dz/2.));
488 ///////////////////////////////////
490 // Drawing ALIP2A__0077 //
491 ///////////////////////////////////
493 Float_t dzFaPbCone5 = 168.9;
494 Float_t rInFaPbCone5 = 37.35/2.;
495 Float_t rOuFaPbCone5 = 85.66/2.;
497 Float_t dzFaPbCone10 = 25.9;
498 Float_t rInFaPbCone10 = rInFaPbCone5 + dzFaPbCone5 * angle10;
499 Float_t rOuFaPbCone10 = 115.2/2.;
501 Float_t rInFaPbConeE = 106.05/2.;
502 Float_t rOuFaPbConeE = 124.35/2.;
504 Float_t dzFaPbCone = dzFaPbCone5 + dzFaPbCone10;
506 TGeoPcon* shFaPbCone = new TGeoPcon(0., 360., 3);
509 shFaPbCone->DefineSection(0, z, rInFaPbCone5, rOuFaPbCone5);
512 shFaPbCone->DefineSection(1, z, rInFaPbCone10, rOuFaPbCone10);
514 shFaPbCone->DefineSection(2, z, rInFaPbConeE, rOuFaPbConeE);
516 TGeoVolume* voFaPbCone = new TGeoVolume("AFaPbCone", shFaPbCone, kMedPb);
518 // Inner region with higher transport cuts
519 TGeoPcon* shFaPbConeI = MakeShapeFromTemplate(shFaPbCone, 0., -3.);
520 TGeoVolume* voFaPbConeI = new TGeoVolume("AFaPbConeI", shFaPbConeI, kMedPbSh);
521 voFaPbCone->AddNode(voFaPbConeI, 1, vec0);
525 ///////////////////////////////////
526 // FA Concrete Cone //
527 // Drawing ALIP2A__00xx //
528 ///////////////////////////////////
529 Float_t dzFaConcreteCone = 126.;
530 Float_t rOuFaConcreteCone1 = rOuFaGraphiteCone3;
531 Float_t rInFaConcreteCone1 = 11.;
532 Float_t rOuFaConcreteCone2 = rOuFaConcreteCone1 + dzFaConcreteCone * angle10;
533 Float_t rInFaConcreteCone2 = rInFaConcreteCone1 + dzFaConcreteCone * angle02;
535 TGeoVolume* voFaConcreteCone = new TGeoVolume("AFaConcreteCone",
536 new TGeoCone(dzFaConcreteCone/2.,
537 rInFaConcreteCone1, rOuFaConcreteCone1,
538 rInFaConcreteCone2, rOuFaConcreteCone2),
542 ///////////////////////////////////
543 // FA Polyethylene Parts //
544 // Drawing ALIP2A__0034 //
545 ///////////////////////////////////
546 Float_t dzFaCH2Cone = 201.;
547 Float_t rInFaCH2Cone1 = 106.0/2.;
548 Float_t rInFaCH2Cone2 = 176.9/2.;
549 Float_t dFaCH2Cone = 7.5 / TMath::Cos(10. * kDegRad);
551 TGeoVolume* voFaCH2Cone = new TGeoVolume("AFaCH2Cone",
552 new TGeoCone(dzFaCH2Cone/2.,
553 rInFaCH2Cone1, rInFaCH2Cone1 + dFaCH2Cone,
554 rInFaCH2Cone2, rInFaCH2Cone2 + dFaCH2Cone),
559 ///////////////////////////////////
560 // FA Steel Plate 250 mm //
561 // Drawing ALIP2A__00xx //
562 ///////////////////////////////////
563 Float_t dzFaSteelCone25 = 25.;
564 Float_t rInFaSteelCone25A = rInFaConcreteCone2;
565 Float_t rOuFaSteelCone25A = rOuFaConcreteCone2;
566 Float_t rInFaSteelCone25B = rInFaSteelCone25A + dzFaSteelCone25 * angle02;
567 Float_t rOuFaSteelCone25B = rOuFaSteelCone25A + dzFaSteelCone25 * angle10;
569 TGeoVolume* voFaSteelCone25 = new TGeoVolume("AFaSteelCone25",
570 new TGeoCone(dzFaSteelCone25/2.,
571 rInFaSteelCone25A, rOuFaSteelCone25A,
572 rInFaSteelCone25B, rOuFaSteelCone25B),
576 ///////////////////////////////////
577 // FA Steel Plate 310 mm //
578 // Drawing ALIP2A__00xx //
579 ///////////////////////////////////
580 Float_t dzFaSteelCone31 = 31.;
581 Float_t rInFaSteelCone31A = rOuFaWTube4C1;;
582 Float_t rOuFaSteelCone31A = rOuFaSteelCone25B;
583 Float_t rInFaSteelCone31B = rOuFaWTube4C2;
584 Float_t rOuFaSteelCone31B = rOuFaSteelCone31A + dzFaSteelCone31 * angle10;
586 TGeoVolume* voFaSteelCone31 = new TGeoVolume("AFaSteelCone31",
587 new TGeoCone(dzFaSteelCone31/2.,
588 rInFaSteelCone31A, rOuFaSteelCone31A,
589 rInFaSteelCone31B, rOuFaSteelCone31B),
591 // Outer Rregion with higher transport cuts
593 TGeoVolume* voFaSteelCone31I = new TGeoVolume("AFaSteelCone31I",
595 rInFaSteelCone31B - dz * angle03,
596 rOuFaSteelCone31B - dz * angle10,
597 rInFaSteelCone31B, rOuFaSteelCone31B),
600 voFaSteelCone31->AddNode(voFaSteelCone31I, 1, new TGeoTranslation(0., 0., dzFaSteelCone31/2. - dz/2.));
603 ///////////////////////////////////
604 // FA Composite Ring //
605 // Drawing ALIP2A__0126 //
606 ///////////////////////////////////
608 Float_t dzFaCompRing1 = 0.8;
609 Float_t rInFaCompRing1 = 11.0/2.;
610 Float_t rOuFaCompRing1 = 32.4/2.;
612 Float_t dzFaCompRing2 = 1.2;
613 Float_t rInFaCompRing2 = 14.0/2.;
614 Float_t rOuFaCompRing2 = 34.3/2.;
616 TGeoPcon* shFaCompRing = new TGeoPcon(0., 360., 4);
619 shFaCompRing->DefineSection(0, z, rInFaCompRing1, rOuFaCompRing1);
621 shFaCompRing->DefineSection(1, z, rInFaCompRing1, rOuFaCompRing1);
623 shFaCompRing->DefineSection(2, z, rInFaCompRing2, rOuFaCompRing2);;
625 shFaCompRing->DefineSection(3, z, rInFaCompRing2, rOuFaCompRing2);
627 TGeoVolume* voFaCompRing = new TGeoVolume("AFaCompRing", shFaCompRing, kMedC);
629 ///////////////////////////////////
630 // FA Magnesium Ring //
631 // Drawing ALIP2A__0127 //
632 ///////////////////////////////////
636 Float_t dzFaMgRingO = 0.7;
637 Float_t rInFaMgRingO = 3.0;
639 Float_t dzFaMgRingI = 0.6;
640 Float_t rInFaMgRingI = 3.5;
642 TGeoPcon* shFaMgRing = new TGeoPcon(0., 360., 8);
645 shFaMgRing->DefineSection(0, z, rInFaMgRingO, rInFaCompRing1);
647 shFaMgRing->DefineSection(1, z, rInFaMgRingO, rInFaCompRing1);
649 shFaMgRing->DefineSection(2, z, rInFaMgRingI, rInFaCompRing1);
651 shFaMgRing->DefineSection(3, z, rInFaMgRingI, rInFaCompRing1);
653 shFaMgRing->DefineSection(4, z, rInFaMgRingI, rInFaCompRing2);
655 shFaMgRing->DefineSection(5, z, rInFaMgRingI, rInFaCompRing2);
657 shFaMgRing->DefineSection(6, z, rInFaMgRingO, rInFaCompRing2);
659 shFaMgRing->DefineSection(7, z, rInFaMgRingO, rInFaCompRing2);
660 TGeoVolume* voFaMgRing = new TGeoVolume("AFaMgRing", shFaMgRing, kMedMg);
664 // Absorber mother volume
667 // Length of the absorber without endplate
668 Float_t dzFa = dzFaFlange + dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25 + dzFaSteelCone31;
669 TGeoPcon* shFaM = new TGeoPcon(0., 360., 16);
670 // Front -> Flange (Mg Ring details)
672 shFaM->DefineSection( 0, z, rInFaMgRingO, rOuFaQPlateF);
675 shFaM->DefineSection( 1, z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
676 shFaM->DefineSection( 2, z, rInFaMgRingI, rOuFaQPlateF + dz * angle24);
679 shFaM->DefineSection( 3, z, rInFaMgRingI, rOuFaQPlateF + dz * angle24);
680 shFaM->DefineSection( 4, z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
683 shFaM->DefineSection( 5, z, rInFaMgRingO, rOuFaQPlateF + dz * angle24);
684 shFaM->DefineSection( 6, z, rInFaGraphiteCone1, rOuFaQPlateF + dz * angle24);
685 // Flange -> W-Plate B
687 shFaM->DefineSection( 7, z, rInFaGraphiteCone1, rOuFaQPlateC2);
689 Float_t zFaSteelEnvelope = z;
690 shFaM->DefineSection( 8, z, rInFaGraphiteCone1, rOuFaQPlateC3);
691 // 5 deg cone -> 10 deg cone
692 z = zFaSteelEnvelope + dzSteelEnvelopeFC + dzSteelEnvelopeC5;
693 shFaM->DefineSection( 9, z, rInFaGraphiteCone1, rOuSteelEnvelopeC10);
694 // 10 deg cone up to end of straight section
696 z = dzFaFlange + dzFaGraphiteConeS + dzFaWTube1C;
698 shFaM->DefineSection(10, z, rInFaGraphiteCone1, rOuSteelEnvelopeC10 + dz * angle10);
699 // 0.7 deg inner opening cone up to outer rear ring
701 z = dzFa - dzSteelEnvelopeR/2.;
703 shFaM->DefineSection(11, z, rInFaGraphiteCone1 +dz * angle71, rOuSteelEnvelopeR1);
704 shFaM->DefineSection(12, z, rInFaGraphiteCone1 +dz * angle71, rOuSteelEnvelopeR2);
705 z += dzSteelEnvelopeR/2.;
706 shFaM->DefineSection(13, z, rInFaWTube4C2, rOuSteelEnvelopeR2);
707 // Recess for end plate
708 dz = dzSteelEnvelopeR/2;
709 shFaM->DefineSection(14, z, rInFaCH2Cone2 - dz * angle10, rOuSteelEnvelopeR2);
710 z += dzSteelEnvelopeR/2.;
711 shFaM->DefineSection(15, z, rInFaCH2Cone2, rOuSteelEnvelopeR2);
713 TGeoVolume* voFaM = new TGeoVolume("AFaM", shFaM, kMedAir);
717 // Assemble volumes inside acceptance
718 TGeoPcon* shFaAccM = new TGeoPcon(0., 360., 7);
719 for (Int_t i = 0; i < 4; i++) {
720 Float_t z = shFaGraphiteCone->GetZ(i);
721 Float_t rmin = shFaGraphiteCone->GetRmin(i);
722 Float_t rmax = shFaGraphiteCone->GetRmax(i);
723 shFaAccM->DefineSection(i, z, rmin, rmax);
725 z = dzFaGraphiteCone + dzFaConcreteCone + dzFaSteelCone25;
726 z0 = z + zFa + dzFaFlange;
727 shFaAccM->DefineSection(4, z, rOuFaWTube3C2, z0 * angle10);
728 shFaAccM->DefineSection(5, z, rOuFaWTube4C1, z0 * angle10);
729 z += dzFaSteelCone31;
730 z0 += dzFaSteelCone31;
731 shFaAccM->DefineSection(6, z, rOuFaWTube4C2, z0 * angle10);
732 TGeoVolume* voFaAccM = new TGeoVolume("AFaAcc", shFaAccM, kMedAir);
735 voFaAccM->AddNode(voFaGraphiteCone, 1, vec0);
736 z += dzFaGraphiteCone;
737 voFaAccM->AddNode(voFaConcreteCone, 1, new TGeoTranslation(0., 0., z + dzFaConcreteCone / 2.));
738 z += dzFaConcreteCone;
739 voFaAccM->AddNode(voFaSteelCone25, 1, new TGeoTranslation(0., 0., z + dzFaSteelCone25 / 2. + 0.001));
740 z += dzFaSteelCone25;
741 voFaAccM->AddNode(voFaSteelCone31, 1, new TGeoTranslation(0., 0., z + dzFaSteelCone31 / 2. + 0.001));
745 TGeoVolumeAssembly* voFaInnerShield = new TGeoVolumeAssembly("AFaInnerShield");
746 voFaInnerShield->AddNode(voFaWTube1, 1, vec0);
747 z = dzFaWTube1 - 0.6;
748 voFaInnerShield->AddNode(voFaWTube2, 1, new TGeoTranslation(0., 0., z) );
750 voFaInnerShield->AddNode(voFaWTube3, 1, new TGeoTranslation(0., 0., z + dzFaWTube3 / 2.) );
752 voFaInnerShield->AddNode(voFaWTube4, 1, new TGeoTranslation(0., 0., z + dzFaWTube4 / 2.) );
753 z = dzFaGraphiteConeS + dzFaFlange;
754 voFaM->AddNode(voFaInnerShield, 1, new TGeoTranslation(0., 0., z));
758 // Adding volumes to mother volume
761 voFaM->AddNode(voFaWPlateA, 1, vec0);
763 voFaM->AddNode(voFaSteelEnvelope, 1, new TGeoTranslation(0., 0., z));
764 z += dzSteelEnvelopeFC;
765 voFaM->AddNode(voFaPbCone, 1, new TGeoTranslation(0., 0., z));
766 z += (dzFaPbCone + dzFaCH2Cone / 2.);
767 voFaM->AddNode(voFaCH2Cone, 1, new TGeoTranslation(0., 0., z));
768 voFaM->AddNode(voFaFlange, 1, vec0);
769 voFaM->AddNode(voFaMgRing, 1, vec0);
770 voFaM->AddNode(voFaCompRing, 1, vec0);
771 voFaM->AddNode(voFaAccM, 1, new TGeoTranslation(0., 0., dzFaFlange));
773 ////////////////////////////////////////////////////
775 // Front Absorber Support Structure FASS //
777 // Drawing ALIP2A__0035 //
778 // Drawing ALIP2A__0089 //
779 // Drawing ALIP2A__0090 //
780 // Drawing ALIP2A__0109 //
781 ////////////////////////////////////////////////////
782 TGeoVolumeAssembly* voFass = new TGeoVolumeAssembly("AFass");
783 const Float_t kFassUBFlangeH = 380.;
784 const Float_t kFassUBFlangeW = 77.;
786 const Float_t kFassUMFlangeH = 380.;
787 const Float_t kFassUMFlangeB = 246.;
788 const Float_t kFassUMFlangeT = 10.;
789 const Float_t kFassUMFalpha = - TMath::ATan((kFassUMFlangeB-kFassUMFlangeT)/ kFassUMFlangeH / 2.) / kDegRad;
793 TGeoVolume* voFassUBFlange = new TGeoVolume("AFassUBFlange", new TGeoBBox(kFassUBFlangeW/2.,
794 kFassUBFlangeH/2., 3./2.), kMedSteel);
795 voFass->AddNode(voFassUBFlange, 1, new TGeoTranslation(+1.5 + kFassUBFlangeW/2.,
796 180. + kFassUBFlangeH/2.,
797 kFassUMFlangeB - 1.5));
798 voFass->AddNode(voFassUBFlange, 2, new TGeoTranslation(-1.5 - kFassUBFlangeW/2.,
799 180. + kFassUBFlangeH/2.,
800 kFassUMFlangeB - 1.5));
804 // Upper median flange
805 // Drawing ALIP2A__0090 //
806 // Drawing ALIP2A__0089 //
809 TGeoVolume* voFassUMFlange = new TGeoVolume("AFassUMFlange",
810 new TGeoTrap(kFassUMFlangeH/2., kFassUMFalpha,
812 kFassUMFlangeB/2., kFassUMFlangeB/2.,
814 kFassUMFlangeT/2., kFassUMFlangeT/2.,
817 TGeoRotation* rotFass1 = new TGeoRotation("rotFass1", 180., 0., 90., 0., 90., 90.);
818 voFass->AddNode(voFassUMFlange,1 ,
819 new TGeoCombiTrans(0., 180. + kFassUMFlangeH/2., -(kFassUMFlangeB+kFassUMFlangeT)/4. + kFassUMFlangeB,
823 // Lower median flange
824 // Drawing ALIP2A__0090 //
825 // Drawing ALIP2A__0089 //
827 const Float_t kFassLMFlangeH = 242.;
828 const Float_t kFassLMFlangeB = 246.;
829 const Float_t kFassLMFlangeT = 43.;
830 const Float_t kFassLMFalpha = - TMath::ATan((kFassLMFlangeB-kFassLMFlangeT)/ kFassLMFlangeH / 2.) / kDegRad;
831 TGeoVolume* voFassLMFlange = new TGeoVolume("AFassLMFlange",
832 new TGeoTrap(kFassLMFlangeH/2., kFassLMFalpha,
834 kFassLMFlangeB/2., kFassLMFlangeB/2.,
836 kFassLMFlangeT/2., kFassLMFlangeT/2.,
838 TGeoRotation* rotFass2 = new TGeoRotation("rotFass2", 180., 0., 90., 0., 90., 270.);
839 voFass->AddNode(voFassLMFlange, 1,
840 new TGeoCombiTrans(0., -180. - kFassLMFlangeH/2., -(kFassLMFlangeB+kFassLMFlangeT)/4. + kFassLMFlangeB,
847 TGeoPgon* shFassCone = new TGeoPgon(22.5, 360., 8, 4);
848 shFassCone->DefineSection(0, 0., 0., 180.);
849 shFassCone->DefineSection(1, 3., 0., 180.);
850 shFassCone->DefineSection(2, 3., 177., 180.);
851 shFassCone->DefineSection(3, 246., 177., 180.);
852 shFassCone->SetName("FassCone");
854 TGeoBBox* shFassWindow = new TGeoBBox( 190., 53., 28.);
855 shFassWindow->SetName("FassWindow");
856 TGeoTranslation* tFassWindow = new TGeoTranslation("tFassWindow", 0., 0., 78.);
857 tFassWindow->RegisterYourself();
859 TGeoTube* shFassApperture = new TGeoTube(0., 104., 3.);
860 shFassApperture->SetName("FassApperture");
862 TGeoCompositeShape* shFassCentral =
863 new TGeoCompositeShape("shFassCentral", "FassCone-(FassWindow:tFassWindow+FassApperture)");
865 TGeoVolume* voFassCentral = new TGeoVolume("AFassCentral", shFassCentral, kMedSteel);
866 voFass->AddNode(voFassCentral, 1, vec0);
871 TGeoVolume* voFassAlRing = new TGeoVolume("AFassAlRing", new TGeoTube(104., 180., 10.), kMedAlu);
877 // Inside muon spectrometer acceptance
883 // ===================
891 // Absorber and Support
892 TGeoVolumeAssembly* voFA = new TGeoVolumeAssembly("AFA");
893 voFA->AddNode(voFaM, 1, vec0);
894 voFA->AddNode(voFaEndPlate, 1, new TGeoTranslation(0., 0., dzFa + dzEndPlate/2.));
895 voFA->AddNode(voFass, 1, new TGeoTranslation(0., 0., 388.45));
896 voFA->AddNode(voFassAlRing, 1, new TGeoTranslation(0., 0., 382. - 0.55));
897 top->AddNode(voFA, 1, new TGeoCombiTrans(0., 0., -90., rotxz));
901 TGeoPcon* AliABSOv3::MakeShapeFromTemplate(TGeoPcon* pcon, Float_t drMin, Float_t drMax)
904 // Returns new shape based on a template changing
905 // the inner radii by drMin and the outer radii by drMax.
907 Int_t nz = pcon->GetNz();
908 TGeoPcon* cpcon = new TGeoPcon(0., 360., nz);
909 for (Int_t i = 0; i < nz; i++)
910 cpcon->DefineSection(i, pcon->GetZ(i), pcon->GetRmin(i) + drMin, pcon->GetRmax(i) + drMax);