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