]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STRUCT/AliABSOv0.cxx
Coveriry (used variable detUsed)
[u/mrichter/AliRoot.git] / STRUCT / AliABSOv0.cxx
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 //                                                                           //
20 //  Muon ABSOrber                                                            //
21 //  This class contains the description of the muon absorber geometry        //
22 //                                                                           //
23 //Begin_Html
24 /*
25 <img src="picts/AliABSOClass.gif">
26 </pre>
27 <br clear=left>
28 <font size=+2 color=red>
29 <p>The responsible person for this module is
30 <a href="mailto:andreas.morsch@cern.ch">Andreas Morsch</a>.
31 </font>
32 <pre>
33 */
34 //End_Html
35 //                                                                           //
36 //                                                                           //
37 ///////////////////////////////////////////////////////////////////////////////
38
39 #include <TVirtualMC.h>
40 #include <TGeoManager.h>
41 #include <TGeoVolume.h>
42 #include <TGeoMatrix.h>
43 #include <TGeoCompositeShape.h>
44 #include <TGeoBBox.h>
45 #include <TGeoXtru.h>
46 #include <TGeoTube.h>
47 #include <TGeoPgon.h>
48 #include <TGeoArb8.h>
49 #include <TGeoMedium.h>
50 #include <TArrayI.h>
51
52 #include "AliABSOv0.h"
53 #include "AliConst.h"
54 #include "AliRun.h"
55 #include "AliLog.h"
56
57 ClassImp(AliABSOv0)
58  
59 //_____________________________________________________________________________
60 AliABSOv0::AliABSOv0()
61 {
62   //
63   // Default constructor
64   //
65 }
66  
67 //_____________________________________________________________________________
68 AliABSOv0::AliABSOv0(const char *name, const char *title)
69        : AliABSO(name,title)
70 {
71   //
72   // Standard constructor
73   //
74 }
75  
76 //_____________________________________________________________________________
77 void AliABSOv0::CreateGeometry()
78 {
79     //
80     // Creation of the geometry of the muon absorber
81     //
82     //Begin_Html
83     /*
84       <img src="picts/AliABSOv0Tree.gif">
85     */
86     //End_Html
87     //Begin_Html
88     /*
89       <img src="picts/AliABSOv0.gif">
90     */
91     //End_Html
92     
93     //
94     //
95
96     enum {kC=1605, kAl=1608, kFe=1609, kCu=1610, kW=1611, kPb=1612,
97           kNiCuW=1620, kVacuum=1615, kAir=1614, kConcrete=1616,
98           kPolyCH2=1617, kSteel=1618, kInsulation=1613, kPolyCc=1619};    
99     
100     Int_t *idtmed = fIdtmed->GetArray()-1599;
101     
102     Float_t par[24], cpar[5], cpar0[5], pcpar[12], tpar[3], tpar0[3]; 
103     Float_t dz;
104 #include "ABSOSHILConst.h"
105 #include "ABSOConst.h"
106 //
107 // Structure of Tracking Region
108 //
109   Float_t dzFe = 25.;
110
111 // 3 < theta < 9
112     fNLayers[0] = 5; 
113     fMLayers[0][0]  = kAir;              fZLayers[0][0] = kZAbsStart;
114     fMLayers[0][1]  = kC;                fZLayers[0][1] = kZAbsCc;             
115     fMLayers[0][2]  = kConcrete;         fZLayers[0][2] = kZRear - kDRear - dzFe;
116     fMLayers[0][3]  = kSteel;            fZLayers[0][3] = kZRear - kDRear;
117     fMLayers[0][4]  = kSteel;            fZLayers[0][4] = kZRear;
118 // 2 < theta < 3
119     fNLayers[1] = 6; 
120
121     fMLayers[1][0] = kAir          ;      fZLayers[1][0] = fZLayers[0][0] - 10.;
122     fMLayers[1][1] = kAl           ;      fZLayers[1][1] = fZLayers[0][0];
123     fMLayers[1][2] = fMLayers[0][1];      fZLayers[1][2] = fZLayers[0][1];
124     fMLayers[1][3] = fMLayers[0][2];      fZLayers[1][3] = fZLayers[0][2];
125     fMLayers[1][4] = fMLayers[0][3];      fZLayers[1][4] = fZLayers[0][3];
126     fMLayers[1][5] = kNiCuW;              fZLayers[1][5] = fZLayers[0][4];
127 //    
128
129     Float_t dTube = 0.1;                     // tube thickness
130     Float_t dInsu = 0.5;                     // insulation thickness
131     Float_t dEnve = 0.1;                     // protective envelope thickness
132
133
134 // Mother volume and outer shielding: Pb
135   par[0]  = 0.;
136   par[1]  = 360.;
137   par[2]  = 7.;
138     
139   par[21] = (kZRear - kZAbsStart) / 2.;
140   par[22] = kRAbs;
141   par[23] = kZAbsStart * TMath::Tan(kTheta1);
142
143   par[18] = par[21] - (kZNose - kZAbsStart);
144   par[19] = kRAbs;
145   par[20] = kZNose * TMath::Tan(kTheta1);
146
147   par[15] = par[21] - (kZConeTPC - kZAbsStart);
148   par[16] = kRAbs;
149   par[17] = par[20] - (par[15] - par[18]) * TMath::Tan(kTheta2);
150
151   par[12] = par[21]  - (kZOpen - kZAbsStart);
152   par[13] = kRAbs;
153   par[14] = par[17] - (par[12] - par[15]) * TMath::Tan(kAccMax);
154
155   par[9]  = par[21]  - (kZRear - kDRear - kZAbsStart);
156   par[10] = kRAbs   - (par[9] - par[12]) * TMath::Tan(kThetaOpen1) ;
157   par[11] = par[14] - (par[9] - par[12]) * TMath::Tan(kAccMax);
158
159   par[6]  = par[21]  - (kZRear - kDRear - kZAbsStart);
160   par[7]  = (kZRear - kDRear) * TMath::Tan(kAccMin);
161   par[8]  = par[14] - (par[6] - par[12]) * TMath::Tan(kAccMax);
162
163   par[3] =  - par[21];
164   par[4] = kZRear  * TMath::Tan(kAccMin);
165   par[5] = par[8] - (par[3] - par[6]) * TMath::Tan(kAccMax);
166   gMC->Gsvolu("ABSS", "PCON", idtmed[kPb+40], par, 24);
167
168   for (Int_t i = 22; i > 7; i -= 3) par[i]  = 0;
169
170   gMC->Gsvolu("ABSM", "PCON", idtmed[kVacuum+40], par, 24);
171   gMC->Gspos("ABSS", 1, "ABSM", 0., 0., 0., 0, "ONLY");
172
173 //
174 // Steel envelope
175 //
176   par[4] = par[5]  - kDSteel;
177   par[7] = par[8]  - kDSteel;
178   par[10]= par[11] - kDSteel;  
179   par[13]= par[14] - kDSteel;  
180   par[16]= par[17] - kDSteel;  
181   par[19]= par[20] - kDSteel;  
182   par[22]= par[23] - kDSteel;  
183
184   gMC->Gsvolu("ABST", "PCON", idtmed[kSteel], par, 24);
185   gMC->Gspos("ABST", 1, "ABSS", 0., 0., 0., 0, "ONLY");
186 //
187 // Polyethylene shield
188 // 
189   cpar[0] = (kZRear - kZConeTPC) / 2.;
190   cpar[1] = kZRear * TMath::Tan(kAccMax);
191   cpar[2] = cpar[1] + kDPoly;
192   cpar[3] = kZConeTPC * TMath::Tan(kAccMax);
193   cpar[4] = cpar[3] + kDPoly;
194
195   gMC->Gsvolu("APOL", "CONE", idtmed[kPolyCH2+40], cpar, 5);
196   dz = - (kZRear - kZAbsStart) / 2. + cpar[0];
197   gMC->Gspos("APOL", 1, "ABSS", 0., 0., dz, 0, "ONLY");
198
199 //
200 // Tungsten nose to protect TPC
201 // 
202   cpar[0] = (kZNose - kZAbsStart) / 2.;
203   cpar[1] = kZNose * TMath::Tan(kAccMax);
204   cpar[2] = kZNose * TMath::Tan(kTheta1) - kDSteel;
205   cpar[3] = kZAbsStart * TMath::Tan(kAccMax);
206   cpar[4] = kZAbsStart * TMath::Tan(kTheta1) - kDSteel;
207
208   gMC->Gsvolu("ANOS", "CONE", idtmed[kNiCuW], cpar, 5);
209   //
210   dz =  (kZRear - kZAbsStart) / 2. - cpar[0];
211   gMC->Gspos("ANOS", 1, "ABSS", 0., 0., dz, 0, "ONLY");
212   //
213   // Tungsten inner shield
214   //
215   Float_t zW = kZTwoDeg + .1;
216   Float_t dZ = zW + (kZRear - kDRear - zW) / 2.;
217   //
218   pcpar[0]  = 0.;
219   pcpar[1]  = 360.;
220   pcpar[2]  = 3.;
221   pcpar[9]  = - (zW - dZ);
222   pcpar[10] = kRAbs;
223   pcpar[11] = zW * TMath::Tan(kAccMin);
224   pcpar[6]  = - (kZOpen - dZ);
225   pcpar[7]  = kRAbs;
226   pcpar[8]  = kZOpen * TMath::Tan(kAccMin);
227   pcpar[3]  = - (kZRear - kDRear - dZ);
228   pcpar[4]  = kRAbs + (kZRear - kDRear - kZOpen) * TMath::Tan(kThetaOpen1);
229   pcpar[5]  = (kZRear - kDRear) * TMath::Tan(kAccMin);
230   
231   gMC->Gsvolu("AWIN", "PCON", idtmed[kNiCuW+40], pcpar, 12);
232   dz = -(zW + kZRear - kDRear) / 2 + (kZAbsStart + kZRear) / 2.;
233   gMC->Gspos("AWIN", 1, "ABSS", 0., 0., dz, 0, "ONLY");
234 //
235 // First part replaced by Carbon  
236 //
237   cpar[0] = (200.-zW)/2.;
238
239   cpar[1] = kRAbs;
240   cpar[2] = 200. * TMath::Tan(kAccMin);
241   cpar[3] = kRAbs;
242   cpar[4] = pcpar[11];
243
244   gMC->Gsvolu("ACNO", "CONE", idtmed[kC], cpar, 5);
245   dz = - (zW - dZ+cpar[0]);
246   gMC->Gspos("ACNO", 1, "AWIN", 0., 0., dz, 0, "ONLY");
247
248 /*  
249   Float_t zWW = 383.5;
250   cpar[0] = (kZRear-kDRear-zWW)/2.;
251   cpar[1] = kRAbs + (zWW-kZOpen) *  TMath::Tan(kThetaOpen1);
252   cpar[2] =  zWW * TMath::Tan(kAccMin);
253   cpar[3] = pcpar[10];
254   cpar[4] = pcpar[11];
255   gMC->Gsvolu("AWNO", "CONE", idtmed[kCu+40], cpar, 5);
256   dz = zWW-dZ+cpar[0];
257   
258   gMC->Gspos("AWNO", 1, "AWIN", 0., 0., dz, 0, "ONLY");
259 */
260   //
261   //     Inner tracking region
262   //
263   //
264   //
265   pcpar[0]  = 0.;
266   pcpar[1]  = 360.;
267   pcpar[2]  = 3.;
268   pcpar[9]  = (kZRear - kZAbsStart) / 2.;
269   pcpar[10] = kRAbs;
270   pcpar[11] = kZAbsStart * TMath::Tan(kAccMax);
271   pcpar[6]  = pcpar[9] - (kZTwoDeg - kZAbsStart);
272   pcpar[7]  = kRAbs;
273   pcpar[8]  = kZTwoDeg * TMath::Tan(kAccMax);
274   pcpar[3]  = - pcpar[9];
275   pcpar[4]  = kZRear * TMath::Tan(kAccMin);
276   pcpar[5]  = kZRear * TMath::Tan(kAccMax);
277   gMC->Gsvolu("AITR", "PCON", idtmed[fMLayers[0][4]], pcpar, 12);
278   //
279   // special Pb medium for last 5 cm of Pb
280   Float_t zr = kZRear - 2. - 0.001;
281   cpar[0] = 1.0;
282   cpar[3] = zr * TMath::Tan(kThetaR);
283   cpar[4] = zr * TMath::Tan(kAccMax);
284   cpar[1] = cpar[3] + TMath::Tan(kThetaR) * 2;
285   cpar[2] = cpar[4] + TMath::Tan(kAccMax) * 2;
286   
287   gMC->Gsvolu("ARPB", "CONE", idtmed[fMLayers[0][4]], cpar, 5);
288   dz= - (kZRear - kZAbsStart) / 2. + cpar[0] - 0.001;
289   gMC->Gspos("ARPB", 1, "AITR", 0., 0., dz, 0, "ONLY");
290   //
291   //     concrete cone: concrete 
292   //
293   pcpar[3]  = pcpar[9] - (kZRear - kDRear - kZAbsStart);
294   pcpar[4] = (kZRear-kDRear) * TMath::Tan(kAccMin);
295   pcpar[5] = (kZRear-kDRear) * TMath::Tan(kAccMax);
296   gMC->Gsvolu("ACON", "PCON", idtmed[fMLayers[0][2]+40], pcpar, 12);
297   gMC->Gspos("ACON", 1, "AITR", 0., 0., 0., 0, "ONLY");
298 //
299 //    Fe Cone 
300 //
301   zr = kZRear - kDRear - dzFe;
302
303   cpar[0] = dzFe/2.;
304   cpar[3] = zr * TMath::Tan(kAccMin);
305   cpar[4] = zr * TMath::Tan(kAccMax);
306   cpar[1] = cpar[3] + TMath::Tan(kAccMin) * dzFe;
307   cpar[2] = cpar[4] + TMath::Tan(kAccMax) * dzFe;
308
309   gMC->Gsvolu("ACFE", "CONE",idtmed[fMLayers[0][3]], cpar, 5);
310
311   dz = - (kZRear - kZAbsStart) / 2. + kDRear + dzFe / 2.;
312
313   gMC->Gspos("ACFE", 1, "ACON", 0., 0., dz, 0, "ONLY");
314
315   
316   //
317   //
318   //     carbon cone: carbon
319   //
320   pcpar[3]   = pcpar[9] - (kZAbsCc - kZAbsStart);
321   pcpar[4]   = kZAbsCc * TMath::Tan(kAccMin);
322   pcpar[5]   = kZAbsCc * TMath::Tan(kAccMax);
323   gMC->Gsvolu("ACAR", "PCON", idtmed[fMLayers[0][1]+40], pcpar, 12);
324   gMC->Gspos("ACAR", 1, "ACON", 0., 0., 0., 0, "ONLY");
325  //
326  //     carbon cone outer region
327  //
328   cpar[0]  = 10.;
329   cpar[3]  = kRAbs;
330   cpar[4]  = kZAbsStart * TMath::Tan(kAccMax);
331   cpar[1]  = kRAbs;
332   cpar[2]  = cpar[4] + 2. * cpar[0] * TMath::Tan(kAccMax);
333
334   gMC->Gsvolu("ACAO", "CONE", idtmed[fMLayers[0][1]], cpar, 5);
335   dz= (kZRear-kZAbsStart) / 2. - cpar[0];
336   gMC->Gspos("ACAO", 1, "ACAR", 0., 0., dz, 0, "ONLY");
337   //
338   //     inner W shield
339   Float_t epsi  = 0.;
340   Float_t repsi = 1.;
341   
342   zr = kZRear - (kDRear - epsi);
343   cpar[0] = (kDRear - epsi) / 2.;
344   cpar[3] = zr * TMath::Tan(kAccMin);
345   cpar[4] = zr * TMath::Tan(kThetaR * repsi);
346   cpar[1] = cpar[3] + TMath::Tan(kAccMin) * (kDRear - epsi);
347   cpar[2] = cpar[4] + TMath::Tan(kThetaR * repsi) * (kDRear - epsi);
348
349   gMC->Gsvolu("ARW0", "CONE", idtmed[fMLayers[1][5]+40], cpar, 5);
350   dz= - (kZRear - kZAbsStart) / 2. + cpar[0];
351   gMC->Gspos("ARW0", 1, "AITR", 0., 0., dz, 0, "ONLY");
352   //
353   // special W medium for last 5 cm of W
354   zr = kZRear - 5;
355   cpar[0] = 2.5;
356   cpar[3] = zr * TMath::Tan(kAccMin);
357   cpar[4] = zr * TMath::Tan(kThetaR * repsi);
358   cpar[1] = cpar[3] + TMath::Tan(kAccMin) * 5.;
359   cpar[2] = cpar[4] + TMath::Tan(kThetaR*repsi) * 5.;
360
361   gMC->Gsvolu("ARW1", "CONE", idtmed[fMLayers[1][5]+20], cpar, 5);
362   dz = - (kDRear-epsi) / 2. + cpar[0];
363   gMC->Gspos("ARW1", 1, "ARW0", 0., 0., dz, 0, "ONLY");
364   //
365   // Cu
366   Float_t drMin = TMath::Tan(kThetaR) * 5;
367   Float_t drMax = TMath::Tan(kAccMax) * 5;
368   gMC->Gsvolu("ARPE", "CONE", idtmed[fMLayers[0][4]], cpar, 0);
369   cpar[0] = 2.5;
370
371   for (Int_t i = 0; i < 3; i++) {
372       zr = kZRear - kDRear + 5 + i * 10.;
373       cpar[3] = zr * TMath::Tan(kThetaR);
374       cpar[4] = zr * TMath::Tan(kAccMax);
375       cpar[1] = cpar[3] + drMin;
376       cpar[2] = cpar[4] + drMax;
377       dz = - (kZRear - kZAbsStart) / 2. + cpar[0] + 5. + (2 - i)*10;
378       gMC->Gsposp("ARPE", i+1, "AITR", 0., 0., dz, 0, "ONLY",cpar,5);
379   }
380
381   gMC->Gspos("AITR", 1, "ABSS", 0., 0., 0., 0, "ONLY"); 
382   dz = - (kZRear - kZAbsStart) / 2. - kZAbsStart;
383   gMC->Gspos("ABSM", 1, "ALIC", 0., 0., dz, 0, "ONLY"); 
384 //
385 //
386 // vacuum system
387 //
388 // pipe and heating jackets
389 //
390 //
391 // cylindrical piece
392   tpar0[2] = (kZOpen-kZAbsStart)/2;
393   tpar0[0] = kRVacu;
394   tpar0[1] = kRVacu + dTube + dInsu + dEnve;
395   gMC->Gsvolu("AV11", "TUBE", idtmed[kSteel+40], tpar0, 3);
396 //
397 // insulation
398
399   tpar[2] = tpar0[2];
400   tpar[0] = kRVacu  + dTube;
401   tpar[1] = tpar[0] + dInsu;
402   gMC->Gsvolu("AI11", "TUBE", idtmed[kInsulation+40], tpar, 3);
403   gMC->Gspos("AI11", 1, "AV11", 0., 0., 0., 0, "ONLY"); 
404 //
405   dz = (kZRear - kZAbsStart) / 2. - tpar0[2];
406   gMC->Gspos("AV11", 1, "ABSM", 0., 0., dz, 0, "ONLY"); 
407 //
408 // conical piece
409
410   cpar0[0] = (kZRear - kDRear - kZOpen) / 2.;
411   cpar0[3] = kRVacu - 0.05;
412   cpar0[4] = kRVacu + dTube + dInsu + dEnve;
413   Float_t dR = 2. * cpar0[0] * TMath::Tan(kThetaOpen1);
414   cpar0[1]=cpar0[3] + dR;
415   cpar0[2]=cpar0[4] + dR;
416   gMC->Gsvolu("AV21", "CONE", idtmed[kSteel+40], cpar0, 5);
417   dTube += 0.05;
418
419 //
420 // insulation
421   cpar[0] = cpar0[0];
422   cpar[1] = cpar0[1] + dTube;
423   cpar[2] = cpar0[1] + dTube + dInsu;
424   cpar[3] = cpar0[3] + dTube;
425   cpar[4] = cpar0[3] + dTube + dInsu;
426
427   gMC->Gsvolu("AI21", "CONE", idtmed[kInsulation+40], cpar, 5);
428   gMC->Gspos("AI21", 1, "AV21", 0., 0., 0., 0, "ONLY"); 
429   
430   dz = - (kZRear - kZAbsStart) / 2. + cpar0[0] + kDRear;
431   gMC->Gspos("AV21", 1, "ABSM", 0., 0., dz, 0, "ONLY"); 
432 ////////////////////////////////////////////////////
433 //                                                // 
434 //    Front Absorber Support Structure FASS       // 
435 //                                                //
436 //    Drawing ALIP2A__0035                        //
437 //    Drawing ALIP2A__0089                        //
438 //    Drawing ALIP2A__0090                        //
439 //    Drawing ALIP2A__0109                        //
440 ////////////////////////////////////////////////////
441   TGeoTranslation* vec0 = new TGeoTranslation(0., 0., 0.);
442   
443   TGeoVolumeAssembly* voFass   = new TGeoVolumeAssembly("Fass");
444   const Float_t kDegRad        = TMath::Pi() / 180.;
445   const TGeoMedium* kMedSteel  = gGeoManager->GetMedium("ABSO_ST_C0");
446   const TGeoMedium* kMedAlu    = gGeoManager->GetMedium("ABSO_ALU_C0");
447   
448   const Float_t kFassUBFlangeH = 380.;
449   const Float_t kFassUBFlangeW =  77.;
450   
451   const Float_t kFassUMFlangeH = 380.;
452   const Float_t kFassUMFlangeB = 246.;
453   const Float_t kFassUMFlangeT =  10.;
454   const Float_t kFassUMFalpha  = - TMath::ATan((kFassUMFlangeB-kFassUMFlangeT)/ kFassUMFlangeH / 2.) / kDegRad;      
455 // Upper back   flange
456 // B1
457 // 380 x 77
458   TGeoVolume* voFassUBFlange = new TGeoVolume("FassUBFlange", new TGeoBBox(kFassUBFlangeW/2., 
459                                                                            kFassUBFlangeH/2., 3./2.), kMedSteel);
460   voFass->AddNode(voFassUBFlange, 1, new TGeoTranslation(+1.5 + kFassUBFlangeW/2., 
461                                                          180. + kFassUBFlangeH/2.,
462                                                          kFassUMFlangeB - 1.5));
463   voFass->AddNode(voFassUBFlange, 2, new TGeoTranslation(-1.5 - kFassUBFlangeW/2., 
464                                                          180. + kFassUBFlangeH/2.,
465                                                          kFassUMFlangeB - 1.5));
466   
467   
468 // Lower back   flange
469 // Upper median flange
470 //    Drawing ALIP2A__0090                        //
471 //    Drawing ALIP2A__0089                        //
472 //    A2
473   
474   TGeoVolume* voFassUMFlange = new TGeoVolume("FassUMFlange", 
475                                               new TGeoTrap(kFassUMFlangeH/2., kFassUMFalpha,  
476                                                            0., 1.5, 
477                                                            kFassUMFlangeB/2., kFassUMFlangeB/2.,
478                                                            0., 1.5, 
479                                                            kFassUMFlangeT/2., kFassUMFlangeT/2.,
480                                                            0.), kMedSteel);
481   
482   TGeoRotation* rotFass1 = new TGeoRotation("rotFass1", 180., 0., 90., 0., 90., 90.);
483   voFass->AddNode(voFassUMFlange,1 , 
484                   new TGeoCombiTrans(0., 180. + kFassUMFlangeH/2., -(kFassUMFlangeB+kFassUMFlangeT)/4. + kFassUMFlangeB, 
485                                      rotFass1));
486   
487   
488 // Lower median flange
489 //    Drawing ALIP2A__0090                        //
490 //    Drawing ALIP2A__0089                        //
491 //    A1
492   const Float_t kFassLMFlangeH = 242.;
493   const Float_t kFassLMFlangeB = 246.;
494   const Float_t kFassLMFlangeT =  43.;
495   const Float_t kFassLMFalpha  = - TMath::ATan((kFassLMFlangeB-kFassLMFlangeT)/ kFassLMFlangeH / 2.) / kDegRad;
496   TGeoVolume* voFassLMFlange = new TGeoVolume("FassLMFlange", 
497                                               new TGeoTrap(kFassLMFlangeH/2., kFassLMFalpha,  
498                                                            0., 1.5, 
499                                                            kFassLMFlangeB/2., kFassLMFlangeB/2.,
500                                                            0., 1.5, 
501                                                            kFassLMFlangeT/2., kFassLMFlangeT/2.,
502                                                            0.), kMedSteel);
503   TGeoRotation* rotFass2 = new TGeoRotation("rotFass2", 180., 0., 90., 0., 90., 270.);
504   voFass->AddNode(voFassLMFlange, 1, 
505                   new TGeoCombiTrans(0., -180. - kFassLMFlangeH/2., -(kFassLMFlangeB+kFassLMFlangeT)/4. + kFassLMFlangeB, 
506                                      rotFass2));
507   
508 // Stiffeners
509 // Support Plate
510 //
511 // Central cone
512   TGeoPgon* shFassCone = new TGeoPgon(22.5, 360., 8, 4);
513   shFassCone->DefineSection(0,   0.,   0., 180.);
514   shFassCone->DefineSection(1,   3.,   0., 180.);
515   shFassCone->DefineSection(2,   3., 177., 180.);
516   shFassCone->DefineSection(3, 246., 177., 180.);
517   shFassCone->SetName("FassCone");
518   
519   TGeoBBox* shFassWindow = new TGeoBBox( 190., 53., 28.);
520   shFassWindow->SetName("FassWindow");
521   TGeoTranslation* tFassWindow = new TGeoTranslation("tFassWindow", 0., 0., 78.);
522   tFassWindow->RegisterYourself();
523   
524   TGeoTube* shFassApperture = new TGeoTube(0., 104., 3.01);
525   shFassApperture->SetName("FassApperture");
526   
527   TGeoCompositeShape* shFassCentral = 
528       new TGeoCompositeShape("shFassCentral", "FassCone-(FassWindow:tFassWindow+FassApperture)");
529   
530   TGeoVolume* voFassCentral = new TGeoVolume("FassCentral", shFassCentral, kMedSteel);
531   voFass->AddNode(voFassCentral, 1, vec0);
532   
533 //
534 // Aluminum ring
535 //
536   TGeoVolume* voFassAlRing = new TGeoVolume("FassAlRing", new TGeoTube(100., 180., 10.), kMedAlu);
537   voFass->AddNode(voFassAlRing, 1, new TGeoTranslation(0., 0., -11.));
538   TGeoRotation* rotxz = new TGeoRotation("rotxz",  90., 0., 90., 90., 180., 0.);
539   gGeoManager->GetVolume("ALIC")->AddNode(voFass, 1, new TGeoCombiTrans(0., 0., -388.45 - 90., rotxz));
540 }
541
542 //_____________________________________________________________________________
543
544 void AliABSOv0::Init()
545 {
546   //
547   // Initialisation of the muon absorber after it has been built
548   Int_t i;
549   //
550   if(AliLog::GetGlobalDebugLevel()>0) {
551     printf("\n%s: ",ClassName());
552     for(i=0;i<35;i++) printf("*");
553     printf(" ABSOv0_INIT ");
554     for(i=0;i<35;i++) printf("*");
555     printf("\n%s: ",ClassName());
556     //
557     for(i=0;i<80;i++) printf("*");
558     printf("\n");
559   }
560 }
561  
562
563
564
565
566
567
568
569
570