Obsolete typedef keyword removed
[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 /*
17 $Log$
18 Revision 1.5  2000/06/12 19:39:01  morsch
19 New structure of beam pipe and heating jacket.
20
21 Revision 1.4  2000/04/03 08:13:40  fca
22 Introduce extra scope for non ANSI compliant C++ compilers
23
24 Revision 1.3  2000/01/18 17:49:56  morsch
25 Serious overlap of ABSM with shield corrected
26 Small error in ARPB parameters corrected
27
28 Revision 1.2  2000/01/13 11:23:59  morsch
29 Last layer of Pb outer angle corrected
30
31 Revision 1.1  2000/01/12 15:39:30  morsch
32 Standard version of ABSO
33
34 */
35
36 ///////////////////////////////////////////////////////////////////////////////
37 //                                                                           //
38 //  Muon ABSOrber                                                            //
39 //  This class contains the description of the muon absorber geometry        //
40 //                                                                           //
41 //Begin_Html
42 /*
43 <img src="picts/AliABSOClass.gif">
44 </pre>
45 <br clear=left>
46 <font size=+2 color=red>
47 <p>The responsible person for this module is
48 <a href="mailto:andreas.morsch@cern.ch">Andreas Morsch</a>.
49 </font>
50 <pre>
51 */
52 //End_Html
53 //                                                                           //
54 //                                                                           //
55 ///////////////////////////////////////////////////////////////////////////////
56
57 #include "AliABSOv0.h"
58 #include "AliRun.h"
59 #include "AliConst.h"
60
61 ClassImp(AliABSOv0)
62  
63 //_____________________________________________________________________________
64 AliABSOv0::AliABSOv0()
65 {
66   //
67   // Default constructor
68   //
69 }
70  
71 //_____________________________________________________________________________
72 AliABSOv0::AliABSOv0(const char *name, const char *title)
73        : AliABSO(name,title)
74 {
75   //
76   // Standard constructor
77   //
78   SetMarkerColor(7);
79   SetMarkerStyle(2);
80   SetMarkerSize(0.4);
81 }
82  
83 //_____________________________________________________________________________
84 void AliABSOv0::CreateGeometry()
85 {
86     //
87     // Creation of the geometry of the muon absorber
88     //
89     //Begin_Html
90     /*
91       <img src="picts/AliABSOv0Tree.gif">
92     */
93     //End_Html
94     //Begin_Html
95     /*
96       <img src="picts/AliABSOv0.gif">
97     */
98     //End_Html
99     
100     //
101     //
102
103     enum {kC=1605, kAl=1608, kFe=1609, kCu=1610, kW=1611, kPb=1612,
104                   kNiCuW=1620, kVacuum=1615, kAir=1614, kConcrete=1616,
105                   kPolyCH2=1617, kSteel=1609, kInsulation=1613};          
106     
107     Int_t *idtmed = fIdtmed->GetArray()-1599;
108     
109     Float_t par[24], cpar[5], cpar0[5], pcpar[12], tpar[3], tpar0[3]; 
110     Float_t dz;
111
112 #include "ABSOSHILConst.h"
113 #include "ABSOConst.h"
114     Float_t dTube=0.1;                     // tube thickness
115     Float_t dInsu=0.5;                     // insulation thickness
116     Float_t dEnve=0.1;                     // protective envelope thickness
117     Float_t dFree=0.5;                     // clearance thickness
118
119
120 // Mother volume and outer shielding: Pb
121   par[0]  = 0.;
122   par[1]  = 360.;
123   par[2]  = 7.;
124     
125   par[3]  = -(zRear-zAbsStart)/2.;
126   par[4]  = rAbs;
127   par[5]  = zAbsStart * TMath::Tan(theta1);
128
129   par[6]  = par[3]+(zNose-zAbsStart);
130   par[7]  = rAbs;
131   par[8]  = zNose * TMath::Tan(theta1);
132
133   par[9]  = par[3]+(zConeTPC-zAbsStart);
134   par[10] = rAbs;
135   par[11] = par[8] + (par[9] - par[6]) * TMath::Tan(theta2);
136
137   par[12]  = par[3]+(zOpen-zAbsStart);
138   par[13] = rAbs;
139   par[14] = par[11] + (par[12] - par[9]) * TMath::Tan(accMax);
140
141   par[15] = par[3]+(zRear-dRear-zAbsStart);
142   par[16] = rAbs   + (par[15] - par[12]) * TMath::Tan(thetaOpen1) ;
143   par[17] = par[14] + (par[15] - par[12]) * TMath::Tan(accMax);
144
145   par[18] = par[3]+(zRear-dRear-zAbsStart);
146   par[19] = (zRear-dRear) * TMath::Tan(accMin);
147   par[20] = par[14] + (par[18] - par[12]) * TMath::Tan(accMax);
148
149   par[21] = -par[3];
150   par[22] =  zRear* TMath::Tan(accMin);
151   par[23] = par[20] + (par[21] - par[18]) * TMath::Tan(accMax);
152   gMC->Gsvolu("ABSS", "PCON", idtmed[kPb], par, 24);
153   { // Begin local scope for i
154       for (Int_t i=4; i<18; i+=3) par[i]  = 0;
155   } // End local scope for i
156   gMC->Gsvolu("ABSM", "PCON", idtmed[kVacuum+40], par, 24);
157   gMC->Gspos("ABSS", 1, "ABSM", 0., 0., 0., 0, "ONLY");
158
159 //
160 // Steel envelope
161 //
162   par[4] = par[5] -dSteel;
163   par[7] = par[8] -dSteel;
164   par[10]= par[11]-dSteel;  
165   par[13]= par[14]-dSteel;  
166   par[16]= par[17]-dSteel;  
167   par[19]= par[20]-dSteel;  
168   par[22]= par[23]-dSteel;  
169   gMC->Gsvolu("ABST", "PCON", idtmed[kSteel], par, 24);
170   gMC->Gspos("ABST", 1, "ABSS", 0., 0., 0., 0, "ONLY");
171 //
172 // Polyethylene shield
173 // 
174   cpar[0] = (zRear - zConeTPC) / 2.;
175   cpar[1] = zConeTPC * TMath::Tan(accMax);
176   cpar[2] = cpar[1] + dPoly;
177   cpar[3] = zRear * TMath::Tan(accMax);
178   cpar[4] = cpar[3] + dPoly;
179   gMC->Gsvolu("APOL", "CONE", idtmed[kPolyCH2+40], cpar, 5);
180   dz = (zRear-zAbsStart)/2.-cpar[0];
181   gMC->Gspos("APOL", 1, "ABSS", 0., 0., dz, 0, "ONLY");
182
183 //
184 // Tungsten nose to protect TPC
185 // 
186   cpar[0] = (zNose - zAbsStart) / 2.;
187   cpar[1] = zAbsStart * TMath::Tan(accMax);
188   cpar[2] = zAbsStart * TMath::Tan(theta1)-dSteel;
189   cpar[3] = zNose * TMath::Tan(accMax);
190   cpar[4] = zNose * TMath::Tan(theta1)-dSteel;
191   gMC->Gsvolu("ANOS", "CONE", idtmed[kW], cpar, 5);
192 //
193   dz = -(zRear-zAbsStart)/2.+cpar[0];
194   gMC->Gspos("ANOS", 1, "ABSS", 0., 0., dz, 0, "ONLY");
195 //
196 // Tungsten inner shield
197 //
198   Float_t zW=zTwoDeg+.1;
199   Float_t dZ = zW+(zRear-dRear-zW)/2.;
200   //
201   pcpar[0]  = 0.;
202   pcpar[1]  = 360.;
203   pcpar[2]  = 3.;
204   pcpar[3]  = zW-dZ;
205   pcpar[4]  = rAbs;
206   pcpar[5]  = zW * TMath::Tan(accMin);
207   pcpar[6]  = zOpen-dZ;
208   pcpar[7]  = rAbs;
209   pcpar[8]  = zOpen * TMath::Tan(accMin);
210   pcpar[9]  = zRear-dRear-dZ;
211   pcpar[10] = rAbs+(zRear-dRear-zOpen) * TMath::Tan(thetaOpen1);
212   pcpar[11] = (zRear-dRear) * TMath::Tan(accMin);
213   
214   gMC->Gsvolu("AWIN", "PCON", idtmed[kNiCuW+40], pcpar, 12);
215   //
216   dz=(zW+zRear-dRear)/2-(zAbsStart+zRear)/2.;
217   gMC->Gspos("AWIN", 1, "ABSS", 0., 0., dz, 0, "ONLY");
218
219   //     Inner tracking region
220   //
221   //     mother volume: Pb
222   //
223   pcpar[0]  = 0.;
224   pcpar[1]  = 360.;
225   pcpar[2]  = 3.;
226   pcpar[3]  = -(zRear-zAbsStart)/2.;
227   pcpar[4]  = rAbs;
228   pcpar[5]  = zAbsStart * TMath::Tan(accMax);
229   pcpar[6]  = pcpar[3]+(zTwoDeg-zAbsStart);
230   pcpar[7]  = rAbs;
231   pcpar[8]  = zTwoDeg * TMath::Tan(accMax);
232   pcpar[9]  = -pcpar[3];
233   pcpar[10] = zRear * TMath::Tan(accMin);
234   pcpar[11] = zRear * TMath::Tan(accMax);
235   gMC->Gsvolu("AITR", "PCON", idtmed[kPb], pcpar, 12);
236   //
237   // special Pb medium for last 5 cm of Pb
238   Float_t zr=zRear-2.-0.001;
239   cpar[0] = 1.0;
240   cpar[1] = zr * TMath::Tan(thetaR);
241   cpar[2] = zr * TMath::Tan(accMax);
242   cpar[3] = cpar[1] + TMath::Tan(thetaR) * 2;
243   cpar[4] = cpar[2] + TMath::Tan(accMax) * 2;
244   gMC->Gsvolu("ARPB", "CONE", idtmed[kPb], cpar, 5);
245   dz=(zRear-zAbsStart)/2.-cpar[0]-0.001;
246   gMC->Gspos("ARPB", 1, "AITR", 0., 0., dz, 0, "ONLY");
247   //
248   //     concrete cone: concrete 
249   //
250   pcpar[9]  = pcpar[3]+(zRear-dRear-zAbsStart);
251   pcpar[10] = (zRear-dRear) * TMath::Tan(accMin);
252   pcpar[11] = (zRear-dRear) * TMath::Tan(accMax);
253   gMC->Gsvolu("ACON", "PCON", idtmed[kConcrete+40], pcpar, 12);
254   gMC->Gspos("ACON", 1, "AITR", 0., 0., 0., 0, "ONLY");
255   //
256   //     carbon cone: carbon
257   //
258   pcpar[9]  = pcpar[3]+(zAbsCc-zAbsStart);
259   pcpar[10]  = zAbsCc * TMath::Tan(accMin);
260   pcpar[11]  = zAbsCc * TMath::Tan(accMax);
261   gMC->Gsvolu("ACAR", "PCON", idtmed[kC+40], pcpar, 12);
262   gMC->Gspos("ACAR", 1, "ACON", 0., 0., 0., 0, "ONLY");
263  //
264  //     carbon cone outer region
265  //
266   cpar[0]  = 10.;
267   cpar[1]  = rAbs;
268   cpar[2]  = zAbsStart* TMath::Tan(accMax);
269   cpar[3]  = rAbs;
270   cpar[4]  = cpar[2]+2. * cpar[0] * TMath::Tan(accMax);
271
272   gMC->Gsvolu("ACAO", "CONE", idtmed[kC], cpar, 5);
273   dz=-(zRear-zAbsStart)/2.+cpar[0];
274   gMC->Gspos("ACAO", 1, "ACAR", 0., 0., dz, 0, "ONLY");
275   //
276   //     inner W shield
277   Float_t epsi=0.;
278   Float_t repsi=1.;
279   
280   zr=zRear-(dRear-epsi);
281   cpar[0] = (dRear-epsi)/2.;
282   cpar[1] = zr * TMath::Tan(accMin);
283   cpar[2] = zr * TMath::Tan(thetaR*repsi);
284   cpar[3] = cpar[1] + TMath::Tan(accMin) * (dRear-epsi);
285   cpar[4] = cpar[2] + TMath::Tan(thetaR*repsi) * (dRear-epsi);
286   gMC->Gsvolu("ARW0", "CONE", idtmed[kNiCuW+40], cpar, 5);
287   dz=(zRear-zAbsStart)/2.-cpar[0];
288   gMC->Gspos("ARW0", 1, "AITR", 0., 0., dz, 0, "ONLY");
289   //
290   // special W medium for last 5 cm of W
291   zr=zRear-5;
292   cpar[0] = 2.5;
293   cpar[1] = zr * TMath::Tan(accMin);
294   cpar[2] = zr * TMath::Tan(thetaR*repsi);
295   cpar[3] = cpar[1] + TMath::Tan(accMin) * 5.;
296   cpar[4] = cpar[2] + TMath::Tan(thetaR*repsi) * 5.;
297   gMC->Gsvolu("ARW1", "CONE", idtmed[kNiCuW+20], cpar, 5);
298   dz=(dRear-epsi)/2.-cpar[0];
299   gMC->Gspos("ARW1", 1, "ARW0", 0., 0., dz, 0, "ONLY");
300   //
301   // PolyEthylene Layers
302   Float_t drMin=TMath::Tan(thetaR) * 5;
303   Float_t drMax=TMath::Tan(accMax) * 5;
304   gMC->Gsvolu("ARPE", "CONE", idtmed[kPolyCH2], cpar, 0);
305   cpar[0]=2.5;
306   { // Begin local scope for i
307       for (Int_t i=0; i<3; i++) {
308           zr=zRear-dRear+5+i*10.;
309           cpar[1] = zr * TMath::Tan(thetaR);
310           cpar[2] = zr * TMath::Tan(accMax);
311           cpar[3] = cpar[1] + drMin;
312           cpar[4] = cpar[2] + drMax;
313           dz=(zRear-zAbsStart)/2.-cpar[0]-5.-(2-i)*10;
314           gMC->Gsposp("ARPE", i+1, "AITR", 0., 0., dz, 0, "ONLY",cpar,5);
315       }
316   } // End local scope for i
317   gMC->Gspos("AITR", 1, "ABSS", 0., 0., 0., 0, "ONLY"); 
318   dz = (zRear-zAbsStart)/2.+zAbsStart;
319   gMC->Gspos("ABSM", 1, "ALIC", 0., 0., dz, 0, "ONLY"); 
320 //
321 //
322 // vacuum system
323 //
324 // pipe and heating jackets
325 //
326 //
327 // cylindrical piece
328   tpar0[2]=(zOpen-zAbsStart)/2;
329   tpar0[0]=rVacu;
330   tpar0[1]=rAbs;
331   gMC->Gsvolu("AV11", "TUBE", idtmed[kSteel+40], tpar0, 3);
332 //
333 // insulation
334
335   tpar[2]=tpar0[2];
336   tpar[0]=rVacu+dTube;
337   tpar[1]=tpar[0]+dInsu;
338   gMC->Gsvolu("AI11", "TUBE", idtmed[kInsulation+40], tpar, 3);
339   gMC->Gspos("AI11", 1, "AV11", 0., 0., 0., 0, "ONLY"); 
340 //
341 // clearance 
342   tpar[0]=tpar[1]+dEnve;
343   tpar[1]=tpar[0]+dFree;
344   gMC->Gsvolu("AP11", "TUBE", idtmed[kAir+40], tpar, 3);
345   gMC->Gspos("AP11", 1, "AV11", 0., 0., 0., 0, "ONLY"); 
346 //
347   dz=-(zRear-zAbsStart)/2.+tpar0[2];
348   gMC->Gspos("AV11", 1, "ABSM", 0., 0., dz, 0, "ONLY"); 
349 //
350 // conical piece
351
352   cpar0[0]=(zRear-dRear-zOpen)/2;
353   cpar0[1]=rVacu-0.05;
354   cpar0[2]=rAbs;
355   Float_t dR=2.*cpar0[0]*TMath::Tan(thetaOpen1);
356   cpar0[3]=cpar0[1]+dR;
357   cpar0[4]=cpar0[2]+dR;
358   gMC->Gsvolu("AV21", "CONE", idtmed[kSteel+40], cpar0, 5);
359   dTube+=0.05;
360
361 //
362 // insulation
363   cpar[0]=cpar0[0];
364   cpar[1]=cpar0[1]+dTube;
365   cpar[2]=cpar0[1]+dTube+dInsu;
366   cpar[3]=cpar0[3]+dTube;
367   cpar[4]=cpar0[3]+dTube+dInsu;
368   gMC->Gsvolu("AI21", "CONE", idtmed[kInsulation+40], cpar, 5);
369   gMC->Gspos("AI21", 1, "AV21", 0., 0., 0., 0, "ONLY"); 
370 //
371 // clearance
372   cpar[1]=cpar0[1]+dTube+dInsu+dEnve;
373   cpar[2]=rAbs;
374   cpar[3]=cpar0[1]+dTube+dInsu+dEnve+dR;
375   cpar[4]=rAbs+dR;
376
377   gMC->Gsvolu("AP21", "CONE", idtmed[kAir+40], cpar, 5);
378   gMC->Gspos("AP21", 1, "AV21", 0., 0., 0., 0, "ONLY"); 
379   
380   dz=(zRear-zAbsStart)/2.-cpar0[0]-dRear;
381   gMC->Gspos("AV21", 1, "ABSM", 0., 0., dz, 0, "ONLY"); 
382 }
383
384 //_____________________________________________________________________________
385
386 void AliABSOv0::Init()
387 {
388   //
389   // Initialisation of the muon absorber after it has been built
390   Int_t i;
391   //
392   printf("\n");
393   for(i=0;i<35;i++) printf("*");
394   printf(" ABSOv0_INIT ");
395   for(i=0;i<35;i++) printf("*");
396   printf("\n");
397   //
398   for(i=0;i<80;i++) printf("*");
399   printf("\n");
400 }
401  
402
403
404
405
406
407
408
409
410