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