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