Project
Loading...
Searching...
No Matches
Absorber.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15#include <TGeoArb8.h> // for TGeoTrap
16#include <TGeoCompositeShape.h>
17#include <TGeoCone.h>
18#include <TGeoManager.h>
19#include <TGeoMatrix.h>
20#include <TGeoPcon.h>
21#include <TGeoPgon.h>
22#include <TGeoTube.h>
23#include <TGeoVolume.h>
24#ifdef NDEBUG
25#undef NDEBUG
26#endif
27#include <cassert>
28
29using namespace o2::passive;
30
32
34Alice3Absorber::Alice3Absorber(const char* name, const char* Title) : Alice3PassiveBase(name, Title) {}
36
37Alice3Absorber& Alice3Absorber::operator=(const Alice3Absorber& rhs)
38{
39 // self assignment
40 if (this == &rhs) {
41 return *this;
42 }
43
44 // base class assignment
45 FairModule::operator=(rhs);
46
47 return *this;
48}
49
51{
52
54 // Define materials for muon absorber
55 //
56 int isxfld = 2.;
57 float sxmgmx = 10.;
59
60 //
61 // Steel
62 //
63 float asteel[4] = {55.847, 51.9961, 58.6934, 28.0855};
64 float zsteel[4] = {26., 24., 28., 14.};
65 float wsteel[4] = {.715, .18, .1, .005};
66
67 // Iron
68 float airon[2] = {55.845, 56.};
69 float ziron[2] = {26., 26.};
70 float wiron[2] = {.923, .077};
71
72 //
73 // Air
74 //
75 float aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
76 float zAir[4] = {6., 7., 8., 18.};
77 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
78 float dAir = 1.20479E-3;
79 float dAir1 = 1.20479E-11;
80
81 // ****************
82 // Defines tracking media parameters.
83 //
84 float epsil, stmin, tmaxfd, deemax, stemax;
85 epsil = .001; // Tracking precision,
86 stemax = -0.01; // Maximum displacement for multiple scat
87 tmaxfd = -20.; // Maximum angle due to field deflection
88 deemax = -.3; // Maximum fractional energy loss, DLS
89 stmin = -.8;
90 // ***************
91 //
92
93 matmgr.Mixture("ALICE3_ABSORBER", 16, "VACUUM$", aAir, zAir, dAir1, 4, wAir);
94 matmgr.Medium("ALICE3_ABSORBER", 16, "VA_C0", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
95
96 //
97 // Steel
98 // matmgr.Mixture("ALICE3_ABSORBER", 19, "STAINLESS_STEEL$", asteel, zsteel, 7.88, 4, wsteel);
99 // matmgr.Medium("ALICE3_ABSORBER", 19, "ST_C0", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
100
101 //
102 // Iron
103 matmgr.Material("ALICE3_ABSORBER", 26, "IRON$", 55.845, 26., 7.874, 1.757, 17.1);
104 matmgr.Medium("ALICE3_ABSORBER", 26, "FE", 26, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
105}
106
108{
110
111 //
112 // Build muon shield geometry
113 //
114 //
115
117
118 //
119 // Media
120 //
121
122 auto kMedVac = matmgr.getTGeoMedium("ALICE3_ABSORBER_VA_C0");
123 auto kMedIron = matmgr.getTGeoMedium("ALICE3_ABSORBER_FE");
124
125 // The top volume
126 TGeoVolume* top = gGeoManager->GetVolume("cave");
127 TGeoVolume* barrel = gGeoManager->GetVolume("barrel");
128 if (!barrel) {
129 LOG(fatal) << "Could not find the barrel volume while constructing absorber geometry";
130 }
131
132 TGeoPcon* absorings = new TGeoPcon(0., 360., 18);
133
134 absorings->DefineSection(0, 500, 236, 274);
135 absorings->DefineSection(1, 400, 236, 274);
136 absorings->DefineSection(2, 400, 232.5, 277.5);
137 absorings->DefineSection(3, 300, 232.5, 277.5);
138 absorings->DefineSection(4, 300, 227.5, 282.5);
139 absorings->DefineSection(5, 200, 227.5, 282.5);
140 absorings->DefineSection(6, 200, 222.5, 287.5);
141 absorings->DefineSection(7, 100, 222.5, 287.5);
142 absorings->DefineSection(8, 100, 220, 290);
143 absorings->DefineSection(9, -100, 220, 290);
144 absorings->DefineSection(10, -100, 222.5, 287.5);
145 absorings->DefineSection(11, -200, 222.5, 287.5);
146 absorings->DefineSection(12, -200, 227.5, 282.5);
147 absorings->DefineSection(13, -300, 227.5, 282.5);
148 absorings->DefineSection(14, -300, 232.5, 277.5);
149 absorings->DefineSection(15, -400, 232.5, 277.5);
150 absorings->DefineSection(16, -400, 236, 274);
151 absorings->DefineSection(17, -500, 236, 274);
152
153 // Insert
154 absorings->SetName("absorings");
155
156 TGeoVolume* abso = new TGeoVolume("Absorber", absorings, kMedIron);
157
158 abso->SetVisibility(1);
159 abso->SetLineColor(kGray + 3);
160
161 //
162 // Adding volumes to mother volume
163 //
164
165 barrel->AddNode(abso, 1, new TGeoTranslation(0, 30.f, 0));
166}
167
Definition of the Detector class.
ClassImp(IdPath)
static void initFieldTrackingParams(int &mode, float &maxfield)
Definition Detector.cxx:143
static MaterialManager & Instance()
void ConstructGeometry() override
Definition Absorber.cxx:107
FairModule * CloneModule() const override
Clone this object (used in MT mode only)
Definition Absorber.cxx:168
a common base class for passive modules - implementing generic functions
Definition PassiveBase.h:24
GLdouble GLdouble GLdouble GLdouble top
Definition glcorearb.h:4077
GLuint const GLchar * name
Definition glcorearb.h:781
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"