6c278dfe78c5f4016ffaa63145e8f28d81c021a2
[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.1  2000/01/12 15:39:30  morsch
19 Standar version of ABSO
20
21 */
22
23 ///////////////////////////////////////////////////////////////////////////////
24 //                                                                           //
25 //  Muon ABSOrber                                                            //
26 //  This class contains the description of the muon absorber geometry        //
27 //                                                                           //
28 //Begin_Html
29 /*
30 <img src="picts/AliABSOClass.gif">
31 </pre>
32 <br clear=left>
33 <font size=+2 color=red>
34 <p>The responsible person for this module is
35 <a href="mailto:andreas.morsch@cern.ch">Andreas Morsch</a>.
36 </font>
37 <pre>
38 */
39 //End_Html
40 //                                                                           //
41 //                                                                           //
42 ///////////////////////////////////////////////////////////////////////////////
43
44 #include "AliABSOv0.h"
45 #include "AliRun.h"
46 #include "AliConst.h"
47  
48 ClassImp(AliABSOv0)
49  
50 //_____________________________________________________________________________
51 AliABSOv0::AliABSOv0()
52 {
53   //
54   // Default constructor
55   //
56 }
57  
58 //_____________________________________________________________________________
59 AliABSOv0::AliABSOv0(const char *name, const char *title)
60        : AliABSO(name,title)
61 {
62   //
63   // Standard constructor
64   //
65   SetMarkerColor(7);
66   SetMarkerStyle(2);
67   SetMarkerSize(0.4);
68 }
69  
70 //_____________________________________________________________________________
71 void AliABSOv0::CreateGeometry()
72 {
73   //
74   // Creation of the geometry of the muon absorber
75   //
76   //Begin_Html
77   /*
78     <img src="picts/AliABSOv0Tree.gif">
79   */
80   //End_Html
81   //Begin_Html
82   /*
83     <img src="picts/AliABSOv0.gif">
84   */
85   //End_Html
86
87
88   Int_t *idtmed = fIdtmed->GetArray()-1599;
89   
90   Float_t par[24], cpar[5], cpar0[5], pcpar[12], tpar[3], tpar0[3]; 
91   Float_t dz;
92 #include "ShieldConst.h"
93 // Mother volume and outer shielding: Pb
94     
95   par[0]  = 0.;
96   par[1]  = 360.;
97   par[2]  = 7.;
98
99   par[3]  = -(abs_l-abs_d)/2.;
100   par[4]  = r_abs;
101   par[5]  = abs_d * TMath::Tan(theta1);
102
103   par[6]  = par[3]+(z_nose-abs_d);
104   par[7]  = r_abs;
105   par[8]  = z_nose * TMath::Tan(theta1);
106
107   par[9]  = par[3]+(z_cone-abs_d);
108   par[10] = r_abs;
109   par[11] = par[8] + (par[9] - par[6]) * TMath::Tan(theta2);
110
111   par[12]  = par[3]+(abs_c-abs_d);
112   par[13] = r_abs;
113   par[14] = par[11] + (par[12] - par[9]) * TMath::Tan(acc_max);
114
115   par[15] = par[3]+(abs_l-d_rear-abs_d);
116   par[16] = r_abs   + (par[15] - par[12]) * TMath::Tan(theta_open1) ;
117   par[17] = par[14] + (par[15] - par[12]) * TMath::Tan(acc_max);
118
119   par[18] = par[3]+(abs_l-d_rear-abs_d);
120   par[19] = (abs_l-d_rear) * TMath::Tan(acc_min);
121   par[20] = par[14] + (par[15] - par[12]) * TMath::Tan(acc_max);
122
123   par[21] = -par[3];
124   par[22] =  abs_l* TMath::Tan(acc_min);
125   par[23] = par[20] + (par[21] - par[18]) * TMath::Tan(acc_max);
126   gMC->Gsvolu("ABSS", "PCON", idtmed[1612], par, 24);
127   for (Int_t i=4; i<24; i+=3) par[i]  = 0;
128   gMC->Gsvolu("ABSM", "PCON", idtmed[1655], par, 24);
129   gMC->Gspos("ABSS", 1, "ABSM", 0., 0., 0., 0, "ONLY");
130
131 //
132 // Steel envelope
133 //
134   par[4] = par[5] -d_steel;
135   par[7] = par[8] -d_steel;
136   par[10]= par[11]-d_steel;  
137   par[13]= par[14]-d_steel;  
138   par[16]= par[17]-d_steel;  
139   par[19]= par[20]-d_steel;  
140   par[22]= par[23]-d_steel;  
141   gMC->Gsvolu("ABST", "PCON", idtmed[1618], par, 24);
142   gMC->Gspos("ABST", 1, "ABSS", 0., 0., 0., 0, "ONLY");
143 //
144 // Polyethylene shield
145 // 
146   cpar[0] = (abs_l - z_cone) / 2.;
147   cpar[1] = z_cone * TMath::Tan(acc_max);
148   cpar[2] = cpar[1] + d_poly;
149   cpar[3] = abs_l * TMath::Tan(acc_max);
150   cpar[4] = cpar[3] + d_poly;
151   gMC->Gsvolu("APOL", "CONE", idtmed[1657], cpar, 5);
152   dz = (abs_l-abs_d)/2.-cpar[0];
153   gMC->Gspos("APOL", 1, "ABSS", 0., 0., dz, 0, "ONLY");
154
155 //
156 // Tungsten nose to protect TPC
157 // 
158   cpar[0] = (z_nose - abs_d) / 2.;
159   cpar[1] = abs_d * TMath::Tan(acc_max);
160   cpar[2] = abs_d * TMath::Tan(theta1)-d_steel;
161   cpar[3] = z_nose * TMath::Tan(acc_max);
162   cpar[4] = z_nose * TMath::Tan(theta1)-d_steel;
163   gMC->Gsvolu("ANOS", "CONE", idtmed[1611], cpar, 5);
164   //
165   dz = -(abs_l-abs_d)/2.+cpar[0];
166   gMC->Gspos("ANOS", 1, "ABSS", 0., 0., dz, 0, "ONLY");
167 //
168 // Tungsten inner shield
169 //
170   cpar[0] = (abs_l-d_rear - abs_c)/ 2.;
171   cpar[1] = r_abs;
172   cpar[2] = abs_c * TMath::Tan(acc_min);
173   cpar[3] = r_abs + 2. * cpar[0] * TMath::Tan(theta_open1);
174   cpar[4] = (abs_l-d_rear)  * TMath::Tan(acc_min);
175   gMC->Gsvolu("AWIN", "CONE", idtmed[1651], cpar, 5);
176   //
177   dz = (abs_l-abs_d)/2.-cpar[0]-d_rear;
178   gMC->Gspos("AWIN", 1, "ABSS", 0., 0., dz, 0, "ONLY");
179
180   //     Inner tracking region
181   //
182   //     mother volume: Pb
183   //
184   pcpar[0]  = 0.;
185   pcpar[1]  = 360.;
186   pcpar[2]  = 3.;
187   pcpar[3]  = -(abs_l-abs_d)/2.;
188   pcpar[4]  = r_abs;
189   pcpar[5]  = abs_d * TMath::Tan(acc_max);
190   pcpar[6]  = pcpar[3]+(z_2deg-abs_d);
191   pcpar[7]  = r_abs;
192   pcpar[8]  = z_2deg * TMath::Tan(acc_max);
193   pcpar[9]  = -par[3];
194   pcpar[10] = abs_l * TMath::Tan(acc_min);
195   pcpar[11] = abs_l * TMath::Tan(acc_max);
196   gMC->Gsvolu("AITR", "PCON", idtmed[1612], pcpar, 12);
197   //
198   // special Pb medium for last 5 cm of Pb
199   zr=abs_l-5;
200   cpar[0] = 2.5;
201   cpar[1] = zr * TMath::Tan(theta_r);
202   cpar[2] = zr * TMath::Tan(acc_max);
203   cpar[3] = cpar[1] + TMath::Tan(acc_min) * 5;
204   cpar[4] = cpar[2] + TMath::Tan(acc_max) * 5;
205   gMC->Gsvolu("ARPB", "CONE", idtmed[1632], cpar, 5);
206   dz=(abs_l-abs_d)/2.-cpar[0];
207   gMC->Gspos("ARPB", 1, "AITR", 0., 0., dz, 0, "ONLY");
208
209   //
210   //     concrete cone: concrete 
211   //
212   pcpar[9]  = par[3]+(abs_l-d_rear-abs_d);
213   pcpar[10] = (abs_l-d_rear) * TMath::Tan(acc_min);
214   pcpar[11] = (abs_l-d_rear) * TMath::Tan(acc_max);
215   gMC->Gsvolu("ACON", "PCON", idtmed[1616], pcpar, 12);
216   gMC->Gspos("ACON", 1, "AITR", 0., 0., 0., 0, "ONLY");
217   //
218   //     carbon cone: carbon
219   //
220   pcpar[9]  = pcpar[3]+(abs_cc-abs_d);
221   pcpar[10]  = abs_cc * TMath::Tan(acc_min);
222   pcpar[11]  = abs_cc * TMath::Tan(acc_max);
223   gMC->Gsvolu("ACAR", "PCON", idtmed[1605], pcpar, 12);
224   gMC->Gspos("ACAR", 1, "ACON", 0., 0., 0., 0, "ONLY");
225   //
226   //     inner W shield
227   zr=abs_l-d_rear;
228   cpar[0] = d_rear/2.;
229   cpar[1] = zr * TMath::Tan(acc_min);
230   cpar[2] = zr * TMath::Tan(theta_r);
231   cpar[3] = cpar[1] + TMath::Tan(acc_min) * 35;
232   cpar[4] = cpar[2] + TMath::Tan(theta_r) * 35;
233   gMC->Gsvolu("ARW0", "CONE", idtmed[1611], cpar, 5);
234   dz=(abs_l-abs_d)/2.-cpar[0];
235   gMC->Gspos("ARW0", 1, "AITR", 0., 0., dz, 0, "ONLY");
236   //
237   // special W medium for last 5 cm of W
238   zr=abs_l-5;
239   cpar[0] = 2.5;
240   cpar[1] = zr * TMath::Tan(acc_min);
241   cpar[2] = zr * TMath::Tan(theta_r);
242   cpar[3] = cpar[1] + TMath::Tan(acc_min) * 5.;
243   cpar[4] = cpar[2] + TMath::Tan(theta_r) * 5.;
244   gMC->Gsvolu("ARW1", "CONE", idtmed[1631], cpar, 5);
245   dz=d_rear/2.-cpar[0];
246   gMC->Gspos("ARW1", 1, "ARW0", 0., 0., dz, 0, "ONLY");
247   //
248   // PolyEthylene Layers
249   Float_t dr_min=TMath::Tan(theta_r) * 5;
250   Float_t dr_max=TMath::Tan(acc_max) * 5;
251   gMC->Gsvolu("ARPE", "CONE", idtmed[1617], cpar, 0);
252   cpar[0]=2.5;
253   for (Int_t i=0; i<3; i++) {
254       zr=abs_l-d_rear+5+i*10.;
255       cpar[1] = zr * TMath::Tan(theta_r);
256       cpar[2] = zr * TMath::Tan(acc_max);
257       cpar[3] = cpar[1] + dr_min;
258       cpar[4] = cpar[2] + dr_max;
259       dz=(abs_l-abs_d)/2.-cpar[0]-5.-(2-i)*10;
260       gMC->Gsposp("ARPE", i+1, "AITR", 0., 0., dz, 0, "ONLY",cpar,5);
261   }
262   gMC->Gspos("AITR", 1, "ABSS", 0., 0., 0., 0, "ONLY"); 
263   dz = (abs_l-abs_d)/2.+abs_d;
264   gMC->Gspos("ABSM", 1, "ALIC", 0., 0., dz, 0, "ONLY"); 
265 //
266 //
267 // vacuum system
268 //
269 // pipe and heating jackets
270 //
271 //
272 // cylindrical piece
273   tpar0[2]=(abs_c-abs_d)/2;
274   tpar0[0]=r_vacu;
275   tpar0[1]=r_abs;
276   gMC->Gsvolu("AV11", "TUBE", idtmed[1658], tpar0, 3);
277 //
278 // insulation
279   tpar[2]=tpar0[2];
280   tpar[0]=tpar0[0]+d_tube;
281   tpar[1]=tpar0[0]+d_tube+d_insu;
282   gMC->Gsvolu("AI11", "TUBE", idtmed[1653], tpar, 3);
283   gMC->Gspos("AI11", 1, "AV11", 0., 0., 0., 0, "ONLY"); 
284 //
285 // clearance
286   tpar[0]=tpar0[1]-d_prot-d_free;
287   tpar[1]=tpar0[1]-d_prot;
288   gMC->Gsvolu("AP11", "TUBE", idtmed[1655], tpar, 3);
289   gMC->Gspos("AP11", 1, "AV11", 0., 0., 0., 0, "ONLY"); 
290   
291   dz=-(abs_l-abs_d)/2.+tpar0[2];
292   gMC->Gspos("AV11", 1, "ABSM", 0., 0., dz, 0, "ONLY"); 
293   
294 //
295 // conical piece
296   cpar0[0]=(abs_l-d_rear-abs_c)/2;
297   cpar0[1]=r_vacu;
298   cpar0[2]=r_abs;
299   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(theta_open1);
300   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(theta_open1);
301   gMC->Gsvolu("AV21", "CONE", idtmed[1658], cpar0, 5);
302 //
303 // insulation
304   cpar[0]=cpar0[0];
305   cpar[1]=cpar0[1]+d_tube;
306   cpar[2]=cpar0[1]+d_tube+d_insu;
307   cpar[3]=cpar0[3]+d_tube;
308   cpar[4]=cpar0[3]+d_tube+d_insu;
309   gMC->Gsvolu("AI21", "CONE", idtmed[1653], cpar, 5);
310   gMC->Gspos("AI21", 1, "AV21", 0., 0., 0., 0, "ONLY"); 
311 //
312 // clearance
313   cpar[1]=cpar0[2]-d_prot-d_free;
314   cpar[2]=cpar0[2]-d_prot;
315   cpar[3]=cpar0[4]-d_prot-d_free;
316   cpar[4]=cpar0[4]-d_prot;
317   gMC->Gsvolu("AP21", "CONE", idtmed[1655], cpar, 5);
318   gMC->Gspos("AP21", 1, "AV21", 0., 0., 0., 0, "ONLY"); 
319   
320   dz=(abs_l-abs_d)/2.-cpar0[0]-d_rear;
321   gMC->Gspos("AV21", 1, "ABSM", 0., 0., dz, 0, "ONLY"); 
322
323 }
324
325 //_____________________________________________________________________________
326
327 void AliABSOv0::Init()
328 {
329   //
330   // Initialisation of the muon absorber after it has been built
331   Int_t i;
332   //
333   printf("\n");
334   for(i=0;i<35;i++) printf("*");
335   printf(" ABSOv0_INIT ");
336   for(i=0;i<35;i++) printf("*");
337   printf("\n");
338   //
339   for(i=0;i<80;i++) printf("*");
340   printf("\n");
341 }
342  
343
344
345
346
347
348
349
350
351