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
16#include <TGeoArb8.h> // for TGeoTrap
17#include <TGeoCompositeShape.h>
18#include <TGeoCone.h>
19#include <TGeoManager.h>
20#include <TGeoMatrix.h>
21#include <TGeoPcon.h>
22#include <TGeoPgon.h>
23#include <TGeoTube.h>
24#include <TGeoVolume.h>
25#ifdef NDEBUG
26#undef NDEBUG
27#endif
28#include <cassert>
29
30using namespace o2::passive;
31
33
35Alice3Absorber::Alice3Absorber(const char* name, const char* Title) : Alice3PassiveBase(name, Title) {}
37
38Alice3Absorber& Alice3Absorber::operator=(const Alice3Absorber& rhs)
39{
40 // self assignment
41 if (this == &rhs) {
42 return *this;
43 }
44
45 // base class assignment
46 FairModule::operator=(rhs);
47
48 return *this;
49}
50
52{
53
55 // Define materials for muon absorber
56 //
57 int isxfld = 2.;
58 float sxmgmx = 10.;
60
61 //
62 // Steel
63 //
64 float asteel[4] = {55.847, 51.9961, 58.6934, 28.0855};
65 float zsteel[4] = {26., 24., 28., 14.};
66 float wsteel[4] = {.715, .18, .1, .005};
67
68 // Iron
69 float airon[2] = {55.845, 56.};
70 float ziron[2] = {26., 26.};
71 float wiron[2] = {.923, .077};
72
73 //
74 // Air
75 //
76 float aAir[4] = {12.0107, 14.0067, 15.9994, 39.948};
77 float zAir[4] = {6., 7., 8., 18.};
78 float wAir[4] = {0.000124, 0.755267, 0.231781, 0.012827};
79 float dAir = 1.20479E-3;
80 float dAir1 = 1.20479E-11;
81
82 // ****************
83 // Defines tracking media parameters.
84 //
85 float epsil, stmin, tmaxfd, deemax, stemax;
86 epsil = .001; // Tracking precision,
87 stemax = -0.01; // Maximum displacement for multiple scat
88 tmaxfd = -20.; // Maximum angle due to field deflection
89 deemax = -.3; // Maximum fractional energy loss, DLS
90 stmin = -.8;
91 // ***************
92 //
93
94 matmgr.Mixture("ALICE3_ABSORBER", 16, "VACUUM$", aAir, zAir, dAir1, 4, wAir);
95 matmgr.Medium("ALICE3_ABSORBER", 16, "VA_C0", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
96
97 //
98 // Steel
99 // matmgr.Mixture("ALICE3_ABSORBER", 19, "STAINLESS_STEEL$", asteel, zsteel, 7.88, 4, wsteel);
100 // matmgr.Medium("ALICE3_ABSORBER", 19, "ST_C0", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
101
102 //
103 // Iron
104 matmgr.Material("ALICE3_ABSORBER", 26, "IRON$", 55.845, 26., 7.874, 1.757, 17.1);
105 matmgr.Medium("ALICE3_ABSORBER", 26, "FE", 26, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
106}
107
109{
111
112 //
113 // Build muon shield geometry
114 //
115 //
116
118
119 //
120 // Media
121 //
122
123 auto kMedVac = matmgr.getTGeoMedium("ALICE3_ABSORBER_VA_C0");
124 auto kMedIron = matmgr.getTGeoMedium("ALICE3_ABSORBER_FE");
125
126 // The top volume
127 TGeoVolume* top = gGeoManager->GetVolume("cave");
128 TGeoVolume* barrel = gGeoManager->GetVolume("barrel");
129 if (!barrel) {
130 LOG(fatal) << "Could not find the barrel volume while constructing absorber geometry";
131 }
132
133 TGeoPcon* absorings = new TGeoPcon(0., 360., 18);
134 auto& passiveBaseParam = Alice3PassiveBaseParam::Instance();
135 switch (passiveBaseParam.mDetLayout) {
137 absorings->DefineSection(0, 500, 236, 274);
138 absorings->DefineSection(1, 400, 236, 274);
139 absorings->DefineSection(2, 400, 232.5, 277.5);
140 absorings->DefineSection(3, 300, 232.5, 277.5);
141 absorings->DefineSection(4, 300, 227.5, 282.5);
142 absorings->DefineSection(5, 200, 227.5, 282.5);
143 absorings->DefineSection(6, 200, 222.5, 287.5);
144 absorings->DefineSection(7, 100, 222.5, 287.5);
145 absorings->DefineSection(8, 100, 220, 290);
146 absorings->DefineSection(9, -100, 220, 290);
147 absorings->DefineSection(10, -100, 222.5, 287.5);
148 absorings->DefineSection(11, -200, 222.5, 287.5);
149 absorings->DefineSection(12, -200, 227.5, 282.5);
150 absorings->DefineSection(13, -300, 227.5, 282.5);
151 absorings->DefineSection(14, -300, 232.5, 277.5);
152 absorings->DefineSection(15, -400, 232.5, 277.5);
153 absorings->DefineSection(16, -400, 236, 274);
154 absorings->DefineSection(17, -500, 236, 274);
155 break;
157 absorings->DefineSection(0, 500, 201, 239);
158 absorings->DefineSection(1, 400, 201, 239);
159 absorings->DefineSection(2, 400, 197.5, 242.5);
160 absorings->DefineSection(3, 300, 197.5, 242.5);
161 absorings->DefineSection(4, 300, 192.5, 247.5);
162 absorings->DefineSection(5, 200, 192.5, 247.5);
163 absorings->DefineSection(6, 200, 187.5, 252.5);
164 absorings->DefineSection(7, 100, 187.5, 252.5);
165 absorings->DefineSection(8, 100, 185, 255);
166 absorings->DefineSection(9, -100, 185, 255);
167 absorings->DefineSection(10, -100, 187.5, 252.5);
168 absorings->DefineSection(11, -200, 187.5, 252.5);
169 absorings->DefineSection(12, -200, 192.5, 247.5);
170 absorings->DefineSection(13, -300, 192.5, 247.5);
171 absorings->DefineSection(14, -300, 197.5, 242.5);
172 absorings->DefineSection(15, -400, 197.5, 242.5);
173 absorings->DefineSection(16, -400, 201, 239);
174 absorings->DefineSection(17, -500, 201, 239);
175 break;
176 default:
177 LOG(fatal) << "Unknown detector layout " << passiveBaseParam.mDetLayout;
178 break;
179 }
180
181 // Insert
182 absorings->SetName("absorings");
183
184 TGeoVolume* abso = new TGeoVolume("Absorber", absorings, kMedIron);
185
186 abso->SetVisibility(1);
187 abso->SetLineColor(kGray + 3);
188
189 //
190 // Adding volumes to mother volume
191 //
192
193 barrel->AddNode(abso, 1, new TGeoTranslation(0, 30.f, 0));
194}
195
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:108
FairModule * CloneModule() const override
Clone this object (used in MT mode only)
Definition Absorber.cxx:196
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"