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