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