Clean-up of include files
[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
eeacf08b 16/* $Id$ */
43d014f0 17
18///////////////////////////////////////////////////////////////////////////////
19// //
20// Muon ABSOrber //
21// This class contains the description of the muon absorber geometry //
22// //
23//Begin_Html
24/*
25<img src="picts/AliABSOClass.gif">
26</pre>
27<br clear=left>
28<font size=+2 color=red>
29<p>The responsible person for this module is
30<a href="mailto:andreas.morsch@cern.ch">Andreas Morsch</a>.
31</font>
32<pre>
33*/
34//End_Html
35// //
36// //
37///////////////////////////////////////////////////////////////////////////////
38
88cb7938 39#include <TVirtualMC.h>
84e91a25 40#include <TGeoManager.h>
41#include <TGeoVolume.h>
42#include <TGeoMatrix.h>
43#include <TGeoCompositeShape.h>
44#include <TGeoBBox.h>
45#include <TGeoXtru.h>
46#include <TGeoTube.h>
47#include <TGeoPgon.h>
48#include <TGeoArb8.h>
49#include <TGeoMedium.h>
c93255fe 50#include <TArrayI.h>
88cb7938 51
43d014f0 52#include "AliABSOv0.h"
43d014f0 53#include "AliConst.h"
88cb7938 54#include "AliRun.h"
4951e003 55#include "AliLog.h"
b2ef5f06 56
43d014f0 57ClassImp(AliABSOv0)
58
59//_____________________________________________________________________________
60AliABSOv0::AliABSOv0()
61{
62 //
63 // Default constructor
64 //
65}
66
67//_____________________________________________________________________________
68AliABSOv0::AliABSOv0(const char *name, const char *title)
69 : AliABSO(name,title)
70{
71 //
72 // Standard constructor
73 //
43d014f0 74}
75
76//_____________________________________________________________________________
77void AliABSOv0::CreateGeometry()
78{
b2ef5f06 79 //
80 // Creation of the geometry of the muon absorber
81 //
82 //Begin_Html
83 /*
84 <img src="picts/AliABSOv0Tree.gif">
85 */
86 //End_Html
87 //Begin_Html
88 /*
89 <img src="picts/AliABSOv0.gif">
90 */
91 //End_Html
92
93 //
94 //
56f14ac2 95
96 enum {kC=1605, kAl=1608, kFe=1609, kCu=1610, kW=1611, kPb=1612,
77976fd8 97 kNiCuW=1620, kVacuum=1615, kAir=1614, kConcrete=1616,
84e91a25 98 kPolyCH2=1617, kSteel=1618, kInsulation=1613, kPolyCc=1619};
b2ef5f06 99
100 Int_t *idtmed = fIdtmed->GetArray()-1599;
43d014f0 101
b2ef5f06 102 Float_t par[24], cpar[5], cpar0[5], pcpar[12], tpar[3], tpar0[3];
103 Float_t dz;
b2ef5f06 104#include "ABSOSHILConst.h"
105#include "ABSOConst.h"
381ec9af 106//
107// Structure of Tracking Region
108//
109 Float_t dzFe = 25.;
110
111// 3 < theta < 9
112 fNLayers[0] = 5;
dbbe5bc1 113 fMLayers[0][0] = kAir; fZLayers[0][0] = kZAbsStart;
114 fMLayers[0][1] = kC; fZLayers[0][1] = kZAbsCc;
50ad31cc 115 fMLayers[0][2] = kConcrete; fZLayers[0][2] = kZRear - kDRear - dzFe;
116 fMLayers[0][3] = kSteel; fZLayers[0][3] = kZRear - kDRear;
dbbe5bc1 117 fMLayers[0][4] = kSteel; fZLayers[0][4] = kZRear;
381ec9af 118// 2 < theta < 3
dbbe5bc1 119 fNLayers[1] = 6;
120
50ad31cc 121 fMLayers[1][0] = kAir ; fZLayers[1][0] = fZLayers[0][0] - 10.;
dbbe5bc1 122 fMLayers[1][1] = kAl ; fZLayers[1][1] = fZLayers[0][0];
123 fMLayers[1][2] = fMLayers[0][1]; fZLayers[1][2] = fZLayers[0][1];
124 fMLayers[1][3] = fMLayers[0][2]; fZLayers[1][3] = fZLayers[0][2];
125 fMLayers[1][4] = fMLayers[0][3]; fZLayers[1][4] = fZLayers[0][3];
b14ff348 126 fMLayers[1][5] = kNiCuW; fZLayers[1][5] = fZLayers[0][4];
381ec9af 127//
128
50ad31cc 129 Float_t dTube = 0.1; // tube thickness
130 Float_t dInsu = 0.5; // insulation thickness
131 Float_t dEnve = 0.1; // protective envelope thickness
b2ef5f06 132
133
134// Mother volume and outer shielding: Pb
43d014f0 135 par[0] = 0.;
136 par[1] = 360.;
137 par[2] = 7.;
b2ef5f06 138
50ad31cc 139 par[21] = (kZRear - kZAbsStart) / 2.;
140 par[22] = kRAbs;
141 par[23] = kZAbsStart * TMath::Tan(kTheta1);
43d014f0 142
50ad31cc 143 par[18] = par[21] - (kZNose - kZAbsStart);
144 par[19] = kRAbs;
145 par[20] = kZNose * TMath::Tan(kTheta1);
43d014f0 146
50ad31cc 147 par[15] = par[21] - (kZConeTPC - kZAbsStart);
148 par[16] = kRAbs;
149 par[17] = par[20] - (par[15] - par[18]) * TMath::Tan(kTheta2);
43d014f0 150
50ad31cc 151 par[12] = par[21] - (kZOpen - kZAbsStart);
dbbe5bc1 152 par[13] = kRAbs;
50ad31cc 153 par[14] = par[17] - (par[12] - par[15]) * TMath::Tan(kAccMax);
43d014f0 154
50ad31cc 155 par[9] = par[21] - (kZRear - kDRear - kZAbsStart);
156 par[10] = kRAbs - (par[9] - par[12]) * TMath::Tan(kThetaOpen1) ;
157 par[11] = par[14] - (par[9] - par[12]) * TMath::Tan(kAccMax);
43d014f0 158
50ad31cc 159 par[6] = par[21] - (kZRear - kDRear - kZAbsStart);
160 par[7] = (kZRear - kDRear) * TMath::Tan(kAccMin);
161 par[8] = par[14] - (par[6] - par[12]) * TMath::Tan(kAccMax);
43d014f0 162
50ad31cc 163 par[3] = - par[21];
164 par[4] = kZRear * TMath::Tan(kAccMin);
165 par[5] = par[8] - (par[3] - par[6]) * TMath::Tan(kAccMax);
7c8f009e 166 gMC->Gsvolu("ABSS", "PCON", idtmed[kPb+40], par, 24);
50ad31cc 167
168 for (Int_t i = 22; i > 7; i -= 3) par[i] = 0;
169
b2ef5f06 170 gMC->Gsvolu("ABSM", "PCON", idtmed[kVacuum+40], par, 24);
43d014f0 171 gMC->Gspos("ABSS", 1, "ABSM", 0., 0., 0., 0, "ONLY");
172
173//
174// Steel envelope
175//
50ad31cc 176 par[4] = par[5] - kDSteel;
177 par[7] = par[8] - kDSteel;
178 par[10]= par[11] - kDSteel;
179 par[13]= par[14] - kDSteel;
180 par[16]= par[17] - kDSteel;
181 par[19]= par[20] - kDSteel;
182 par[22]= par[23] - kDSteel;
183
b2ef5f06 184 gMC->Gsvolu("ABST", "PCON", idtmed[kSteel], par, 24);
43d014f0 185 gMC->Gspos("ABST", 1, "ABSS", 0., 0., 0., 0, "ONLY");
186//
187// Polyethylene shield
188//
dbbe5bc1 189 cpar[0] = (kZRear - kZConeTPC) / 2.;
50ad31cc 190 cpar[1] = kZRear * TMath::Tan(kAccMax);
dbbe5bc1 191 cpar[2] = cpar[1] + kDPoly;
50ad31cc 192 cpar[3] = kZConeTPC * TMath::Tan(kAccMax);
dbbe5bc1 193 cpar[4] = cpar[3] + kDPoly;
50ad31cc 194
b2ef5f06 195 gMC->Gsvolu("APOL", "CONE", idtmed[kPolyCH2+40], cpar, 5);
50ad31cc 196 dz = - (kZRear - kZAbsStart) / 2. + cpar[0];
43d014f0 197 gMC->Gspos("APOL", 1, "ABSS", 0., 0., dz, 0, "ONLY");
198
199//
200// Tungsten nose to protect TPC
201//
dbbe5bc1 202 cpar[0] = (kZNose - kZAbsStart) / 2.;
50ad31cc 203 cpar[1] = kZNose * TMath::Tan(kAccMax);
204 cpar[2] = kZNose * TMath::Tan(kTheta1) - kDSteel;
205 cpar[3] = kZAbsStart * TMath::Tan(kAccMax);
206 cpar[4] = kZAbsStart * TMath::Tan(kTheta1) - kDSteel;
207
84e91a25 208 gMC->Gsvolu("ANOS", "CONE", idtmed[kNiCuW], cpar, 5);
8f657ed5 209 //
50ad31cc 210 dz = (kZRear - kZAbsStart) / 2. - cpar[0];
43d014f0 211 gMC->Gspos("ANOS", 1, "ABSS", 0., 0., dz, 0, "ONLY");
8f657ed5 212 //
213 // Tungsten inner shield
214 //
50ad31cc 215 Float_t zW = kZTwoDeg + .1;
216 Float_t dZ = zW + (kZRear - kDRear - zW) / 2.;
43d014f0 217 //
b2ef5f06 218 pcpar[0] = 0.;
219 pcpar[1] = 360.;
220 pcpar[2] = 3.;
50ad31cc 221 pcpar[9] = - (zW - dZ);
222 pcpar[10] = kRAbs;
223 pcpar[11] = zW * TMath::Tan(kAccMin);
224 pcpar[6] = - (kZOpen - dZ);
dbbe5bc1 225 pcpar[7] = kRAbs;
226 pcpar[8] = kZOpen * TMath::Tan(kAccMin);
50ad31cc 227 pcpar[3] = - (kZRear - kDRear - dZ);
228 pcpar[4] = kRAbs + (kZRear - kDRear - kZOpen) * TMath::Tan(kThetaOpen1);
229 pcpar[5] = (kZRear - kDRear) * TMath::Tan(kAccMin);
b2ef5f06 230
231 gMC->Gsvolu("AWIN", "PCON", idtmed[kNiCuW+40], pcpar, 12);
50ad31cc 232 dz = -(zW + kZRear - kDRear) / 2 + (kZAbsStart + kZRear) / 2.;
43d014f0 233 gMC->Gspos("AWIN", 1, "ABSS", 0., 0., dz, 0, "ONLY");
8f657ed5 234//
235// First part replaced by Carbon
236//
513b07d0 237 cpar[0] = (200.-zW)/2.;
50ad31cc 238
dbbe5bc1 239 cpar[1] = kRAbs;
50ad31cc 240 cpar[2] = 200. * TMath::Tan(kAccMin);
dbbe5bc1 241 cpar[3] = kRAbs;
50ad31cc 242 cpar[4] = pcpar[11];
243
513b07d0 244 gMC->Gsvolu("ACNO", "CONE", idtmed[kC], cpar, 5);
50ad31cc 245 dz = - (zW - dZ+cpar[0]);
513b07d0 246 gMC->Gspos("ACNO", 1, "AWIN", 0., 0., dz, 0, "ONLY");
8f657ed5 247
8f657ed5 248/*
ba47c054 249 Float_t zWW = 383.5;
dbbe5bc1 250 cpar[0] = (kZRear-kDRear-zWW)/2.;
251 cpar[1] = kRAbs + (zWW-kZOpen) * TMath::Tan(kThetaOpen1);
252 cpar[2] = zWW * TMath::Tan(kAccMin);
8f657ed5 253 cpar[3] = pcpar[10];
254 cpar[4] = pcpar[11];
255 gMC->Gsvolu("AWNO", "CONE", idtmed[kCu+40], cpar, 5);
256 dz = zWW-dZ+cpar[0];
257
258 gMC->Gspos("AWNO", 1, "AWIN", 0., 0., dz, 0, "ONLY");
259*/
260 //
43d014f0 261 // Inner tracking region
262 //
43d014f0 263 //
8f657ed5 264 //
43d014f0 265 pcpar[0] = 0.;
266 pcpar[1] = 360.;
267 pcpar[2] = 3.;
50ad31cc 268 pcpar[9] = (kZRear - kZAbsStart) / 2.;
269 pcpar[10] = kRAbs;
270 pcpar[11] = kZAbsStart * TMath::Tan(kAccMax);
271 pcpar[6] = pcpar[9] - (kZTwoDeg - kZAbsStart);
dbbe5bc1 272 pcpar[7] = kRAbs;
273 pcpar[8] = kZTwoDeg * TMath::Tan(kAccMax);
50ad31cc 274 pcpar[3] = - pcpar[9];
275 pcpar[4] = kZRear * TMath::Tan(kAccMin);
276 pcpar[5] = kZRear * TMath::Tan(kAccMax);
381ec9af 277 gMC->Gsvolu("AITR", "PCON", idtmed[fMLayers[0][4]], pcpar, 12);
43d014f0 278 //
279 // special Pb medium for last 5 cm of Pb
50ad31cc 280 Float_t zr = kZRear - 2. - 0.001;
b2ef5f06 281 cpar[0] = 1.0;
50ad31cc 282 cpar[3] = zr * TMath::Tan(kThetaR);
283 cpar[4] = zr * TMath::Tan(kAccMax);
284 cpar[1] = cpar[3] + TMath::Tan(kThetaR) * 2;
285 cpar[2] = cpar[4] + TMath::Tan(kAccMax) * 2;
286
381ec9af 287 gMC->Gsvolu("ARPB", "CONE", idtmed[fMLayers[0][4]], cpar, 5);
50ad31cc 288 dz= - (kZRear - kZAbsStart) / 2. + cpar[0] - 0.001;
43d014f0 289 gMC->Gspos("ARPB", 1, "AITR", 0., 0., dz, 0, "ONLY");
43d014f0 290 //
291 // concrete cone: concrete
292 //
50ad31cc 293 pcpar[3] = pcpar[9] - (kZRear - kDRear - kZAbsStart);
294 pcpar[4] = (kZRear-kDRear) * TMath::Tan(kAccMin);
295 pcpar[5] = (kZRear-kDRear) * TMath::Tan(kAccMax);
381ec9af 296 gMC->Gsvolu("ACON", "PCON", idtmed[fMLayers[0][2]+40], pcpar, 12);
43d014f0 297 gMC->Gspos("ACON", 1, "AITR", 0., 0., 0., 0, "ONLY");
381ec9af 298//
299// Fe Cone
300//
50ad31cc 301 zr = kZRear - kDRear - dzFe;
302
303 cpar[0] = dzFe/2.;
304 cpar[3] = zr * TMath::Tan(kAccMin);
305 cpar[4] = zr * TMath::Tan(kAccMax);
306 cpar[1] = cpar[3] + TMath::Tan(kAccMin) * dzFe;
307 cpar[2] = cpar[4] + TMath::Tan(kAccMax) * dzFe;
308
381ec9af 309 gMC->Gsvolu("ACFE", "CONE",idtmed[fMLayers[0][3]], cpar, 5);
310
50ad31cc 311 dz = - (kZRear - kZAbsStart) / 2. + kDRear + dzFe / 2.;
381ec9af 312
313 gMC->Gspos("ACFE", 1, "ACON", 0., 0., dz, 0, "ONLY");
314
315
316 //
43d014f0 317 //
318 // carbon cone: carbon
319 //
50ad31cc 320 pcpar[3] = pcpar[9] - (kZAbsCc - kZAbsStart);
321 pcpar[4] = kZAbsCc * TMath::Tan(kAccMin);
322 pcpar[5] = kZAbsCc * TMath::Tan(kAccMax);
381ec9af 323 gMC->Gsvolu("ACAR", "PCON", idtmed[fMLayers[0][1]+40], pcpar, 12);
43d014f0 324 gMC->Gspos("ACAR", 1, "ACON", 0., 0., 0., 0, "ONLY");
b2ef5f06 325 //
326 // carbon cone outer region
327 //
328 cpar[0] = 10.;
dbbe5bc1 329 cpar[3] = kRAbs;
50ad31cc 330 cpar[4] = kZAbsStart * TMath::Tan(kAccMax);
331 cpar[1] = kRAbs;
332 cpar[2] = cpar[4] + 2. * cpar[0] * TMath::Tan(kAccMax);
b2ef5f06 333
381ec9af 334 gMC->Gsvolu("ACAO", "CONE", idtmed[fMLayers[0][1]], cpar, 5);
50ad31cc 335 dz= (kZRear-kZAbsStart) / 2. - cpar[0];
b2ef5f06 336 gMC->Gspos("ACAO", 1, "ACAR", 0., 0., dz, 0, "ONLY");
43d014f0 337 //
338 // inner W shield
50ad31cc 339 Float_t epsi = 0.;
340 Float_t repsi = 1.;
b2ef5f06 341
50ad31cc 342 zr = kZRear - (kDRear - epsi);
343 cpar[0] = (kDRear - epsi) / 2.;
344 cpar[3] = zr * TMath::Tan(kAccMin);
345 cpar[4] = zr * TMath::Tan(kThetaR * repsi);
346 cpar[1] = cpar[3] + TMath::Tan(kAccMin) * (kDRear - epsi);
347 cpar[2] = cpar[4] + TMath::Tan(kThetaR * repsi) * (kDRear - epsi);
348
b14ff348 349 gMC->Gsvolu("ARW0", "CONE", idtmed[fMLayers[1][5]+40], cpar, 5);
50ad31cc 350 dz= - (kZRear - kZAbsStart) / 2. + cpar[0];
43d014f0 351 gMC->Gspos("ARW0", 1, "AITR", 0., 0., dz, 0, "ONLY");
352 //
353 // special W medium for last 5 cm of W
50ad31cc 354 zr = kZRear - 5;
43d014f0 355 cpar[0] = 2.5;
50ad31cc 356 cpar[3] = zr * TMath::Tan(kAccMin);
357 cpar[4] = zr * TMath::Tan(kThetaR * repsi);
358 cpar[1] = cpar[3] + TMath::Tan(kAccMin) * 5.;
359 cpar[2] = cpar[4] + TMath::Tan(kThetaR*repsi) * 5.;
360
b14ff348 361 gMC->Gsvolu("ARW1", "CONE", idtmed[fMLayers[1][5]+20], cpar, 5);
50ad31cc 362 dz = - (kDRear-epsi) / 2. + cpar[0];
43d014f0 363 gMC->Gspos("ARW1", 1, "ARW0", 0., 0., dz, 0, "ONLY");
364 //
381ec9af 365 // Cu
50ad31cc 366 Float_t drMin = TMath::Tan(kThetaR) * 5;
367 Float_t drMax = TMath::Tan(kAccMax) * 5;
381ec9af 368 gMC->Gsvolu("ARPE", "CONE", idtmed[fMLayers[0][4]], cpar, 0);
50ad31cc 369 cpar[0] = 2.5;
370
371 for (Int_t i = 0; i < 3; i++) {
372 zr = kZRear - kDRear + 5 + i * 10.;
373 cpar[3] = zr * TMath::Tan(kThetaR);
374 cpar[4] = zr * TMath::Tan(kAccMax);
375 cpar[1] = cpar[3] + drMin;
376 cpar[2] = cpar[4] + drMax;
377 dz = - (kZRear - kZAbsStart) / 2. + cpar[0] + 5. + (2 - i)*10;
378 gMC->Gsposp("ARPE", i+1, "AITR", 0., 0., dz, 0, "ONLY",cpar,5);
379 }
380
43d014f0 381 gMC->Gspos("AITR", 1, "ABSS", 0., 0., 0., 0, "ONLY");
50ad31cc 382 dz = - (kZRear - kZAbsStart) / 2. - kZAbsStart;
43d014f0 383 gMC->Gspos("ABSM", 1, "ALIC", 0., 0., dz, 0, "ONLY");
384//
385//
386// vacuum system
387//
388// pipe and heating jackets
389//
390//
391// cylindrical piece
50ad31cc 392 tpar0[2] = (kZOpen-kZAbsStart)/2;
393 tpar0[0] = kRVacu;
394 tpar0[1] = kRVacu + dTube + dInsu + dEnve;
b2ef5f06 395 gMC->Gsvolu("AV11", "TUBE", idtmed[kSteel+40], tpar0, 3);
43d014f0 396//
397// insulation
b2ef5f06 398
50ad31cc 399 tpar[2] = tpar0[2];
400 tpar[0] = kRVacu + dTube;
401 tpar[1] = tpar[0] + dInsu;
b2ef5f06 402 gMC->Gsvolu("AI11", "TUBE", idtmed[kInsulation+40], tpar, 3);
43d014f0 403 gMC->Gspos("AI11", 1, "AV11", 0., 0., 0., 0, "ONLY");
404//
50ad31cc 405 dz = (kZRear - kZAbsStart) / 2. - tpar0[2];
43d014f0 406 gMC->Gspos("AV11", 1, "ABSM", 0., 0., dz, 0, "ONLY");
43d014f0 407//
408// conical piece
b2ef5f06 409
50ad31cc 410 cpar0[0] = (kZRear - kDRear - kZOpen) / 2.;
411 cpar0[3] = kRVacu - 0.05;
412 cpar0[4] = kRVacu + dTube + dInsu + dEnve;
413 Float_t dR = 2. * cpar0[0] * TMath::Tan(kThetaOpen1);
414 cpar0[1]=cpar0[3] + dR;
415 cpar0[2]=cpar0[4] + dR;
b2ef5f06 416 gMC->Gsvolu("AV21", "CONE", idtmed[kSteel+40], cpar0, 5);
50ad31cc 417 dTube += 0.05;
b2ef5f06 418
43d014f0 419//
420// insulation
50ad31cc 421 cpar[0] = cpar0[0];
422 cpar[1] = cpar0[1] + dTube;
423 cpar[2] = cpar0[1] + dTube + dInsu;
424 cpar[3] = cpar0[3] + dTube;
425 cpar[4] = cpar0[3] + dTube + dInsu;
426
b2ef5f06 427 gMC->Gsvolu("AI21", "CONE", idtmed[kInsulation+40], cpar, 5);
43d014f0 428 gMC->Gspos("AI21", 1, "AV21", 0., 0., 0., 0, "ONLY");
43d014f0 429
50ad31cc 430 dz = - (kZRear - kZAbsStart) / 2. + cpar0[0] + kDRear;
43d014f0 431 gMC->Gspos("AV21", 1, "ABSM", 0., 0., dz, 0, "ONLY");
84e91a25 432////////////////////////////////////////////////////
433// //
434// Front Absorber Support Structure FASS //
435// //
436// Drawing ALIP2A__0035 //
437// Drawing ALIP2A__0089 //
438// Drawing ALIP2A__0090 //
439// Drawing ALIP2A__0109 //
440////////////////////////////////////////////////////
441 TGeoTranslation* vec0 = new TGeoTranslation(0., 0., 0.);
442
443 TGeoVolumeAssembly* voFass = new TGeoVolumeAssembly("Fass");
444 const Float_t kDegRad = TMath::Pi() / 180.;
445 const TGeoMedium* kMedSteel = gGeoManager->GetMedium("ABSO_ST_C0");
446 const TGeoMedium* kMedAlu = gGeoManager->GetMedium("ABSO_ALU_C0");
447
448 const Float_t kFassUBFlangeH = 380.;
449 const Float_t kFassUBFlangeW = 77.;
450
451 const Float_t kFassUMFlangeH = 380.;
452 const Float_t kFassUMFlangeB = 246.;
453 const Float_t kFassUMFlangeT = 10.;
454 const Float_t kFassUMFalpha = - TMath::ATan((kFassUMFlangeB-kFassUMFlangeT)/ kFassUMFlangeH / 2.) / kDegRad;
455// Upper back flange
456// B1
457// 380 x 77
458 TGeoVolume* voFassUBFlange = new TGeoVolume("FassUBFlange", new TGeoBBox(kFassUBFlangeW/2.,
459 kFassUBFlangeH/2., 3./2.), kMedSteel);
460 voFass->AddNode(voFassUBFlange, 1, new TGeoTranslation(+1.5 + kFassUBFlangeW/2.,
461 180. + kFassUBFlangeH/2.,
462 kFassUMFlangeB - 1.5));
463 voFass->AddNode(voFassUBFlange, 2, new TGeoTranslation(-1.5 - kFassUBFlangeW/2.,
464 180. + kFassUBFlangeH/2.,
465 kFassUMFlangeB - 1.5));
466
467
468// Lower back flange
469// Upper median flange
470// Drawing ALIP2A__0090 //
471// Drawing ALIP2A__0089 //
472// A2
473
474 TGeoVolume* voFassUMFlange = new TGeoVolume("FassUMFlange",
475 new TGeoTrap(kFassUMFlangeH/2., kFassUMFalpha,
476 0., 1.5,
477 kFassUMFlangeB/2., kFassUMFlangeB/2.,
478 0., 1.5,
479 kFassUMFlangeT/2., kFassUMFlangeT/2.,
480 0.), kMedSteel);
481
482 TGeoRotation* rotFass1 = new TGeoRotation("rotFass1", 180., 0., 90., 0., 90., 90.);
483 voFass->AddNode(voFassUMFlange,1 ,
484 new TGeoCombiTrans(0., 180. + kFassUMFlangeH/2., -(kFassUMFlangeB+kFassUMFlangeT)/4. + kFassUMFlangeB,
485 rotFass1));
486
487
488// Lower median flange
489// Drawing ALIP2A__0090 //
490// Drawing ALIP2A__0089 //
491// A1
492 const Float_t kFassLMFlangeH = 242.;
493 const Float_t kFassLMFlangeB = 246.;
494 const Float_t kFassLMFlangeT = 43.;
495 const Float_t kFassLMFalpha = - TMath::ATan((kFassLMFlangeB-kFassLMFlangeT)/ kFassLMFlangeH / 2.) / kDegRad;
496 TGeoVolume* voFassLMFlange = new TGeoVolume("FassLMFlange",
497 new TGeoTrap(kFassLMFlangeH/2., kFassLMFalpha,
498 0., 1.5,
499 kFassLMFlangeB/2., kFassLMFlangeB/2.,
500 0., 1.5,
501 kFassLMFlangeT/2., kFassLMFlangeT/2.,
502 0.), kMedSteel);
503 TGeoRotation* rotFass2 = new TGeoRotation("rotFass2", 180., 0., 90., 0., 90., 270.);
504 voFass->AddNode(voFassLMFlange, 1,
505 new TGeoCombiTrans(0., -180. - kFassLMFlangeH/2., -(kFassLMFlangeB+kFassLMFlangeT)/4. + kFassLMFlangeB,
506 rotFass2));
507
508// Stiffeners
509// Support Plate
381ec9af 510//
84e91a25 511// Central cone
512 TGeoPgon* shFassCone = new TGeoPgon(22.5, 360., 8, 4);
513 shFassCone->DefineSection(0, 0., 0., 180.);
514 shFassCone->DefineSection(1, 3., 0., 180.);
515 shFassCone->DefineSection(2, 3., 177., 180.);
516 shFassCone->DefineSection(3, 246., 177., 180.);
517 shFassCone->SetName("FassCone");
381ec9af 518
84e91a25 519 TGeoBBox* shFassWindow = new TGeoBBox( 190., 53., 28.);
520 shFassWindow->SetName("FassWindow");
521 TGeoTranslation* tFassWindow = new TGeoTranslation("tFassWindow", 0., 0., 78.);
522 tFassWindow->RegisterYourself();
381ec9af 523
5edc6a19 524 TGeoTube* shFassApperture = new TGeoTube(0., 104., 3.01);
84e91a25 525 shFassApperture->SetName("FassApperture");
513b07d0 526
84e91a25 527 TGeoCompositeShape* shFassCentral =
528 new TGeoCompositeShape("shFassCentral", "FassCone-(FassWindow:tFassWindow+FassApperture)");
529
530 TGeoVolume* voFassCentral = new TGeoVolume("FassCentral", shFassCentral, kMedSteel);
531 voFass->AddNode(voFassCentral, 1, vec0);
532
533//
534// Aluminum ring
535//
536 TGeoVolume* voFassAlRing = new TGeoVolume("FassAlRing", new TGeoTube(100., 180., 10.), kMedAlu);
537 voFass->AddNode(voFassAlRing, 1, new TGeoTranslation(0., 0., -11.));
538 TGeoRotation* rotxz = new TGeoRotation("rotxz", 90., 0., 90., 90., 180., 0.);
c5aa46e0 539 gGeoManager->GetVolume("ALIC")->AddNode(voFass, 1, new TGeoCombiTrans(0., 0., -388.45 - 90., rotxz));
43d014f0 540}
541
542//_____________________________________________________________________________
543
544void AliABSOv0::Init()
545{
546 //
547 // Initialisation of the muon absorber after it has been built
548 Int_t i;
549 //
4951e003 550 if(AliLog::GetGlobalDebugLevel()>0) {
9e1a0ddb 551 printf("\n%s: ",ClassName());
552 for(i=0;i<35;i++) printf("*");
553 printf(" ABSOv0_INIT ");
554 for(i=0;i<35;i++) printf("*");
555 printf("\n%s: ",ClassName());
556 //
557 for(i=0;i<80;i++) printf("*");
558 printf("\n");
559 }
43d014f0 560}
561
562
563
564
565
566
567
568
569
570