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