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