KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
KVFAZIABlock.cpp
1//Created by KVClassFactory on Thu May 30 10:13:17 2013
2//Author: Eric Bonnet
3
4#include "KVFAZIABlock.h"
5#include "KVUnits.h"
6#include "KVMaterial.h"
7#include "TMath.h"
8#include "KVMultiDetArray.h"
9#include "TGeoManager.h"
10#include "TGeoMedium.h"
11#include "TGeoVolume.h"
12#include "TGeoMatrix.h"
13
15
16
17// BEGIN_HTML <!--
18/* -->
19<h2>KVFAZIABlock</h2>
20<h4>Block of 16 telescopes FAZIA</h4>
21<!-- */
22// --> END_HTML
24
25
26
29
31{
32 // Default constructor
33
34 // Set default dimensions for all parts of geometry
35 frame_side = 4.415;
36 centre_cross_thick = 0.12;
37 side_thick = 0.0475;
38 si_holder_side = 2.1;
39 si_centre = 0.5 * centre_cross_thick + 0.5 * si_holder_side;
40 front_frame_depth = 0.3;
41 frame_depth_300 = 0.273;
42 frame_depth_500 = 0.24;
43 frame_edge_depth = 0.16;
44 si300_position = -0.5 * frame_depth_300 + frame_edge_depth;
45 si500_position = -0.5 * frame_depth_500 + frame_edge_depth;
46 full_width = front_frame_depth + frame_depth_300 + frame_depth_500;
47 dist_si2_csi = 0.;// should be ~1mm between si2 ergal edge and csi
48 csi_depth = 10;
49 full_length_quartet = full_width + dist_si2_csi + csi_depth;
50 thick_si1 = 300 * KVUnits::um;
51 thick_si2 = 500 * KVUnits::um;
52 dist_csi_sarco = 4.25;
53 sarco_length = 49.7;
54 sarco_width = 9.6;
55 sarco_height = 10.4;
56 sarco_epaisseur = 0.4;
57 sarco_uplift = 0.5; //how much the sarco sides overlap the copper plate
58
59 SetMedium(gGeoManager->GetMedium("Vacuum"));//to avoid warnings about STRUCT_BLOCK has dummy medium
60
61//Coordonnées extraite des côtes données par Yvan M.
62//vecteur pointant le milieu d un quartet
63//X=-2.231625
64//Y=-2.230525
65//Z=99.950350
66// Mag=100.000139
67// Theta=1.808104
68// Phi = -135.014124
69 TVector3 placement(2.231625, 2.230525, 99.950350);
70 TVector3 Centre;
71
72 // what distance does the centre of the quartet have to be at so that its SI1
73 // is 100 cm from the target ?
74 double trans_z = GetNominalDistanceTargetBlockCentre();
75
76 // calculate linear dimensions of block
77 TVector3 Q1 = placement;
78 TVector3 Q2(-placement.X(), placement.Y(), placement.Z());
79 // adjust for depth of si1
80 Q1.SetMag(100 - front_frame_depth - frame_edge_depth);
81 Q2.SetMag(100 - front_frame_depth - frame_edge_depth);
82 fTotSidWBld = frame_side + (Q1 - Q2).Mag();
83
84 // Order of placement of quartets in block:
85 // clockwise starting at top left corner
86 // (=>X +ve, Y -ve) (remember KV geo convention)
87 Double_t tx[4] = {1, 1, -1, -1};
88 Double_t ty[4] = {-1, 1, 1, -1};
89
90 TGeoVolume* quartet = MakeQuartet();
91
92 TGeoTranslation invTrans(0, 0, -trans_z);
93
94 for (Int_t nq = 1; nq <= 4; nq += 1) {
95
96 Centre.SetXYZ(placement.X()*tx[nq - 1], placement.Y()*ty[nq - 1], placement.Z());
97
98 double theta = Centre.Theta() * TMath::RadToDeg();
99 double phi = Centre.Phi() * TMath::RadToDeg();
100
101 AddNode(quartet, nq,
102 KVMultiDetArray::GetVolumePositioningMatrix(trans_z, theta, phi, &invTrans));
103 }
104
105 AddNode(MakeSarco(), 1, new TGeoTranslation(0, 0, 0.5 * (full_length_quartet + sarco_length) + dist_csi_sarco));
106}
107
108
109
110
113
114TGeoVolume* KVFAZIABlock::MakeCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
115{
116 // Part of aluminium frame which holds the CsI
117
118 Projector proj(distPlane, depth);
119 std::vector<TVector3> coins;
120 double sep = separation / 2.;
121
122#ifdef WITH_CPP11
123 coins.emplace_back(-sep, sep + front_side, -depth / 2);
124 coins.emplace_back(sep, sep + front_side, -depth / 2);
125 coins.emplace_back(sep, -sep - front_side, -depth / 2);
126 coins.emplace_back(-sep, -sep - front_side, -depth / 2);
127#else
128 coins.push_back(TVector3(-sep, sep + front_side, -depth / 2));
129 coins.push_back(TVector3(sep, sep + front_side, -depth / 2));
130 coins.push_back(TVector3(sep, -sep - front_side, -depth / 2));
131 coins.push_back(TVector3(-sep, -sep - front_side, -depth / 2));
132#endif
133 for (int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
134 std::vector<double> coords;
135#ifdef WITH_CPP11
136 for (auto& vec : coins) {
137 coords.push_back(vec.X());
138 coords.push_back(vec.Y());
139#else
140 for (std::vector<TVector3>::iterator vec = coins.begin(); vec != coins.end(); ++vec) {
141 coords.push_back(vec->X());
142 coords.push_back(vec->Y());
143#endif
144 }
145 KVMaterial alu("Al");
146 return gGeoManager->MakeArb8("DEADZONE_CROSS_CSI", alu.GetGeoMedium(), depth / 2,
147#ifdef WITH_CPP11
148 coords.data()
149#else
150 & coords[0]
151#endif
152 );
153}
154
155
156
159
160TGeoVolume* KVFAZIABlock::MakeLeftCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
161{
162 // Part of aluminium frame which holds the CsI
163 Projector proj(distPlane, depth);
164 std::vector<TVector3> coins;
165 double sep = separation / 2.;
166
167#ifdef WITH_CPP11
168 coins.emplace_back(-sep - front_side, sep, -depth / 2);
169 coins.emplace_back(-sep, sep, -depth / 2);
170 coins.emplace_back(-sep, -sep, -depth / 2);
171 coins.emplace_back(-sep - front_side, -sep, -depth / 2);
172#else
173 coins.push_back(TVector3(-sep - front_side, sep, -depth / 2));
174 coins.push_back(TVector3(-sep, sep, -depth / 2));
175 coins.push_back(TVector3(-sep, -sep, -depth / 2));
176 coins.push_back(TVector3(-sep - front_side, -sep, -depth / 2));
177#endif
178 for (int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
179 std::vector<double> coords;
180#ifdef WITH_CPP11
181 for (auto& vec : coins) {
182 coords.push_back(vec.X());
183 coords.push_back(vec.Y());
184#else
185 for (std::vector<TVector3>::iterator vec = coins.begin(); vec != coins.end(); ++vec) {
186 coords.push_back(vec->X());
187 coords.push_back(vec->Y());
188#endif
189 }
190 KVMaterial alu("Al");
191 return gGeoManager->MakeArb8("DEADZONE_CROSS_CSI_LEFT", alu.GetGeoMedium(), depth / 2,
192#ifdef WITH_CPP11
193 coords.data()
194#else
195 & coords[0]
196#endif
197 );
198}
199
200
201
204
205TGeoVolume* KVFAZIABlock::MakeRightCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
206{
207 // Part of aluminium frame which holds the CsI
208 Projector proj(distPlane, depth);
209 std::vector<TVector3> coins;
210 double sep = separation / 2.;
211
212#ifdef WITH_CPP11
213 coins.emplace_back(sep, sep, -depth / 2);
214 coins.emplace_back(sep + front_side, sep, -depth / 2);
215 coins.emplace_back(sep + front_side, -sep, -depth / 2);
216 coins.emplace_back(sep, -sep, -depth / 2);
217#else
218 coins.push_back(TVector3(sep, sep, -depth / 2));
219 coins.push_back(TVector3(sep + front_side, sep, -depth / 2));
220 coins.push_back(TVector3(sep + front_side, -sep, -depth / 2));
221 coins.push_back(TVector3(sep, -sep, -depth / 2));
222#endif
223 for (int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
224 std::vector<double> coords;
225#ifdef WITH_CPP11
226 for (auto& vec : coins) {
227 coords.push_back(vec.X());
228 coords.push_back(vec.Y());
229#else
230 for (std::vector<TVector3>::iterator vec = coins.begin(); vec != coins.end(); ++vec) {
231 coords.push_back(vec->X());
232 coords.push_back(vec->Y());
233#endif
234 }
235 KVMaterial alu("Al");
236 return gGeoManager->MakeArb8("DEADZONE_CROSS_CSI_RIGHT", alu.GetGeoMedium(), depth / 2,
237#ifdef WITH_CPP11
238 coords.data()
239#else
240 & coords[0]
241#endif
242 );
243}
244
245
246
248
249std::vector<double> KVFAZIABlock::GetCoordsCSI(int tel_num, double front_side, double separation, double distPlane, double depth)
250{
251 Projector proj(distPlane, depth);
252 std::vector<TVector3> coins;
253 double sep = separation / 2.;
254 switch (tel_num) {
255 case 3:
256 //tel_num=3 phi=135
257#ifdef WITH_CPP11
258 coins.emplace_back(-sep - front_side, sep + front_side, -depth / 2);
259 coins.emplace_back(-sep, sep + front_side, -depth / 2);
260 coins.emplace_back(-sep, sep, -depth / 2);
261 coins.emplace_back(-sep - front_side, sep, -depth / 2);
262#else
263 coins.push_back(TVector3(-sep - front_side, sep + front_side, -depth / 2));
264 coins.push_back(TVector3(-sep, sep + front_side, -depth / 2));
265 coins.push_back(TVector3(-sep, sep, -depth / 2));
266 coins.push_back(TVector3(-sep - front_side, sep, -depth / 2));
267#endif
268 break;
269 case 2:
270 //tel_num=2 phi=45
271#ifdef WITH_CPP11
272 coins.emplace_back(sep, sep + front_side, -depth / 2);
273 coins.emplace_back(sep + front_side, sep + front_side, -depth / 2);
274 coins.emplace_back(sep + front_side, sep, -depth / 2);
275 coins.emplace_back(sep, sep, -depth / 2);
276#else
277 coins.push_back(TVector3(sep, sep + front_side, -depth / 2));
278 coins.push_back(TVector3(sep + front_side, sep + front_side, -depth / 2));
279 coins.push_back(TVector3(sep + front_side, sep, -depth / 2));
280 coins.push_back(TVector3(sep, sep, -depth / 2));
281#endif
282 break;
283 case 1:
284 //tel_num=1 phi=315
285#ifdef WITH_CPP11
286 coins.emplace_back(sep, -sep, -depth / 2);
287 coins.emplace_back(sep + front_side, -sep, -depth / 2);
288 coins.emplace_back(sep + front_side, -sep - front_side, -depth / 2);
289 coins.emplace_back(sep, -sep - front_side, -depth / 2);
290#else
291 coins.push_back(TVector3(sep, -sep, -depth / 2));
292 coins.push_back(TVector3(sep + front_side, -sep, -depth / 2));
293 coins.push_back(TVector3(sep + front_side, -sep - front_side, -depth / 2));
294 coins.push_back(TVector3(sep, -sep - front_side, -depth / 2));
295#endif
296 break;
297 case 4:
298 //tel_num=4 phi=225
299#ifdef WITH_CPP11
300 coins.emplace_back(-sep - front_side, -sep, -depth / 2);
301 coins.emplace_back(-sep, -sep, -depth / 2);
302 coins.emplace_back(-sep, -sep - front_side, -depth / 2);
303 coins.emplace_back(-sep - front_side, -sep - front_side, -depth / 2);
304#else
305 coins.push_back(TVector3(-sep - front_side, -sep, -depth / 2));
306 coins.push_back(TVector3(-sep, -sep, -depth / 2));
307 coins.push_back(TVector3(-sep, -sep - front_side, -depth / 2));
308 coins.push_back(TVector3(-sep - front_side, -sep - front_side, -depth / 2));
309#endif
310 }
311 for (int i = 0; i < 4; ++i) coins.push_back(proj(coins[i]));
312 std::vector<double> coords;
313#ifdef WITH_CPP11
314 for (auto& vec : coins) {
315 coords.push_back(vec.X());
316 coords.push_back(vec.Y());
317#else
318 for (std::vector<TVector3>::iterator vec = coins.begin(); vec != coins.end(); ++vec) {
319 coords.push_back(vec->X());
320 coords.push_back(vec->Y());
321#endif
322 }
323 return coords;
324}
325
326
327
329
330TGeoVolume* KVFAZIABlock::MakeErgalFrame(double frame_depth, double ergal_edge_depth)
331{
332 KVMaterial alu("Cu");
333
334 TGeoVolume* erg_a =
335 gGeoManager->MakeBox("ERG_A", alu.GetGeoMedium(),
336 0.5 * frame_side, 0.5 * side_thick, 0.5 * ergal_edge_depth);
337 TGeoVolume* erg_b =
338 gGeoManager->MakeBox("ERG_B", alu.GetGeoMedium(), 0.5 * frame_side, 0.5 * centre_cross_thick, 0.5 * frame_depth);
339 TGeoVolume* erg_c =
340 gGeoManager->MakeBox("ERG_C", alu.GetGeoMedium(), 0.5 * side_thick,
341 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2.,
342 0.5 * ergal_edge_depth);
343 TGeoVolume* erg_d =
344 gGeoManager->MakeBox("ERG_D", alu.GetGeoMedium(), 0.5 * centre_cross_thick,
345 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2.,
346 0.5 * frame_depth);
347 TGeoVolumeAssembly* ergal_frame
348 = new TGeoVolumeAssembly("DEADZONE_ERGAL");
349 ergal_frame->AddNode(erg_a, 1, new TGeoTranslation(0, frame_side / 2. - side_thick / 2., -0.5 * frame_depth + 0.5 * ergal_edge_depth));
350 ergal_frame->AddNode(erg_a, 2, new TGeoTranslation(0, -(frame_side / 2. - side_thick / 2.), -0.5 * frame_depth + 0.5 * ergal_edge_depth));
351 ergal_frame->AddNode(erg_b, 1);
352 ergal_frame->AddNode(erg_c, 1,
353 new TGeoTranslation(-(frame_side / 2. - side_thick / 2.),
355 + 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2., -0.5 * frame_depth + 0.5 * ergal_edge_depth));
356 ergal_frame->AddNode(erg_c, 2,
357 new TGeoTranslation((frame_side / 2. - side_thick / 2.),
359 + 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2., -0.5 * frame_depth + 0.5 * ergal_edge_depth));
360 ergal_frame->AddNode(erg_c, 3,
361 new TGeoTranslation((frame_side / 2. - side_thick / 2.),
362 -(centre_cross_thick / 2.
363 + 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2.), -0.5 * frame_depth + 0.5 * ergal_edge_depth));
364 ergal_frame->AddNode(erg_c, 4,
365 new TGeoTranslation(-(frame_side / 2. - side_thick / 2.),
366 -(centre_cross_thick / 2.
367 + 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2.), -0.5 * frame_depth + 0.5 * ergal_edge_depth));
368 ergal_frame->AddNode(erg_d, 1,
369 new TGeoTranslation(0,
371 + 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2.), 0));
372 ergal_frame->AddNode(erg_d, 2,
373 new TGeoTranslation(0,
374 -(centre_cross_thick / 2.
375 + 0.5 * (frame_side - 2 * side_thick - centre_cross_thick) / 2.), 0));
376
377 return ergal_frame;
378}
379
380
381
385
387{
388 // Create geometry of one quartet (quartetto) of a FAZIA block
389
390 // make volumes for 300um frame
392
393 KVMaterial silicon("Si");
394 TGeoVolume* si300vol = gGeoManager->MakeBox("DET_SI1", silicon.GetGeoMedium(), 0.5 * si_holder_side, 0.5 * si_holder_side, thick_si1 / 2.);
395 TGeoVolumeAssembly* si300frame = new TGeoVolumeAssembly("QUARTETTO_SI300");
396 si300frame->AddNode(ergal_frame_300, 1);
397 si300frame->AddNode(si300vol, 1, new TGeoTranslation(si_centre, -si_centre, si300_position));
398 dynamic_cast<TNamed*>(si300frame->GetNodes()->Last())->SetName("DET_SI1-T1");
399 si300frame->AddNode(si300vol, 2, new TGeoTranslation(si_centre, si_centre, si300_position));
400 dynamic_cast<TNamed*>(si300frame->GetNodes()->Last())->SetName("DET_SI1-T2");
401 si300frame->AddNode(si300vol, 3, new TGeoTranslation(-si_centre, si_centre, si300_position));
402 dynamic_cast<TNamed*>(si300frame->GetNodes()->Last())->SetName("DET_SI1-T3");
403 si300frame->AddNode(si300vol, 4, new TGeoTranslation(-si_centre, -si_centre, si300_position));
404 dynamic_cast<TNamed*>(si300frame->GetNodes()->Last())->SetName("DET_SI1-T4");
405
406 // make volumes for 500um frame
408 TGeoVolume* si500vol = gGeoManager->MakeBox("DET_SI2", silicon.GetGeoMedium(), 0.5 * si_holder_side, 0.5 * si_holder_side, thick_si2 / 2.);
409 TGeoVolumeAssembly* si500frame = new TGeoVolumeAssembly("QUARTETTO_SI500");
410 si500frame->AddNode(ergal_frame_500, 1);
411 si500frame->AddNode(si500vol, 1, new TGeoTranslation(si_centre, -si_centre, si500_position));
412 dynamic_cast<TNamed*>(si500frame->GetNodes()->Last())->SetName("DET_SI2-T1");
413 si500frame->AddNode(si500vol, 2, new TGeoTranslation(si_centre, si_centre, si500_position));
414 dynamic_cast<TNamed*>(si500frame->GetNodes()->Last())->SetName("DET_SI2-T2");
415 si500frame->AddNode(si500vol, 3, new TGeoTranslation(-si_centre, si_centre, si500_position));
416 dynamic_cast<TNamed*>(si500frame->GetNodes()->Last())->SetName("DET_SI2-T3");
417 si500frame->AddNode(si500vol, 4, new TGeoTranslation(-si_centre, -si_centre, si500_position));
418 dynamic_cast<TNamed*>(si500frame->GetNodes()->Last())->SetName("DET_SI2-T4");
419
420 // make front cache
422
423 // add CsI
424 TGeoVolumeAssembly* quartet = new TGeoVolumeAssembly("STRUCT_QUARTET");
425
426 quartet->AddNode(ergal_frame_front, 1, new TGeoTranslation(0, 0, -0.5 * full_length_quartet + 0.5 * front_frame_depth));
427 quartet->AddNode(si300frame, 1, new TGeoTranslation(0, 0, -0.5 * full_length_quartet + front_frame_depth + 0.5 * frame_depth_300));
428 quartet->AddNode(si500frame, 1, new TGeoTranslation(0, 0, -0.5 * full_length_quartet + front_frame_depth + frame_depth_300 + .5 * frame_depth_500));
429 KVMaterial csi("CsI");
430 // to make the CsI we need the distance from the target to the front of the CsI
431 // the SI1 is supposed to be 100cm from the target
432 // it is placed at (front_frame_depth+frame_edge_depth) behind the front frame
433 double dist_targ_csi = 100 - (front_frame_depth + frame_edge_depth) + full_width + dist_si2_csi;
434 for (int tel_num = 1; tel_num <= 4; ++tel_num) {
435 TGeoVolume* csi_vol =
436 gGeoManager->MakeArb8(Form("DET_CSI-T%d", tel_num), csi.GetGeoMedium(), csi_depth / 2,
437 GetCoordsCSI(tel_num, si_holder_side, centre_cross_thick, dist_targ_csi, csi_depth).data());
438 quartet->AddNode(csi_vol, tel_num, new TGeoTranslation(0, 0, 0.5 * full_length_quartet - 0.5 * csi_depth));
439 dynamic_cast<TNamed*>(quartet->GetNodes()->Last())->SetName(Form("DET_CSI-T%d", tel_num));
440 }
442 1, new TGeoTranslation(0, 0, 0.5 * full_length_quartet - 0.5 * csi_depth));
444 1, new TGeoTranslation(0, 0, 0.5 * full_length_quartet - 0.5 * csi_depth));
446 1, new TGeoTranslation(0, 0, 0.5 * full_length_quartet - 0.5 * csi_depth));
447
448 return quartet;
449}
450
451
452
454
456{
457 KVMaterial al("Al"), cu("Cu");
458
459 TGeoVolume* side = gGeoManager->MakeBox("DEADZONE_SARCO_SIDE", al.GetGeoMedium(), .5 * sarco_height, .5 * sarco_epaisseur, .5 * sarco_length);
460 TGeoVolume* top = gGeoManager->MakeBox("DEADZONE_SARCO_TOP", al.GetGeoMedium(), .5 * sarco_epaisseur, .5 * (sarco_width - 2 * sarco_epaisseur), .5 * sarco_length);
461 TGeoVolume* bottom = gGeoManager->MakeBox("DEADZONE_SARCO_BOT", cu.GetGeoMedium(), sarco_epaisseur, .5 * (sarco_width - 2 * sarco_epaisseur), .5 * sarco_length);
462 TGeoVolume* back = gGeoManager->MakeBox("DEADZONE_SARCO_BACK", al.GetGeoMedium(), 0.5 * (sarco_height - 3 * sarco_epaisseur - sarco_uplift),
463 0.5 * (sarco_width - 2 * sarco_epaisseur), 0.5 * sarco_epaisseur);
464
465 TGeoVolumeAssembly* sarco = new TGeoVolumeAssembly("DEADZONE_ASCO_SARCO");
466 sarco->AddNode(side, 1, new TGeoTranslation(0, -0.5 * sarco_width + 0.5 * sarco_epaisseur, 0));
467 sarco->AddNode(side, 2, new TGeoTranslation(0, 0.5 * sarco_width - 0.5 * sarco_epaisseur, 0));
468 sarco->AddNode(top, 1, new TGeoTranslation(0.5 * sarco_height - 0.5 * sarco_epaisseur, 0, 0));
469 sarco->AddNode(bottom, 1, new TGeoTranslation(-.5 * sarco_height + sarco_uplift + sarco_epaisseur, 0, 0));
470 sarco->AddNode(back, 1, new TGeoTranslation(0.5 * (sarco_epaisseur + sarco_uplift), 0, 0.5 * sarco_length - 0.5 * sarco_epaisseur));
471
472 return sarco;
473}
474
475
int Int_t
double Double_t
R__EXTERN TGeoManager * gGeoManager
char * Form(const char *fmt,...)
Standard geometry of 16-telescope FAZIA block.
double full_width
double si_centre
TGeoVolume * MakeSarco()
double dist_si2_csi
TGeoVolume * MakeLeftCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
Part of aluminium frame which holds the CsI.
std::vector< double > GetCoordsCSI(int tel_num, double front_side, double separation, double distPlane, double depth)
double thick_si1
TGeoVolume * MakeCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
Part of aluminium frame which holds the CsI.
double frame_depth_300
double centre_cross_thick
double frame_edge_depth
TGeoVolume * MakeErgalFrame(double frame_depth, double ergal_edge_depth)
double full_length_quartet
double sarco_length
double sarco_epaisseur
double si_holder_side
double si300_position
double si500_position
TGeoVolume * MakeRightCrossPieceCSI(double front_side, double separation, double distPlane, double depth)
Part of aluminium frame which holds the CsI.
double sarco_uplift
double thick_si2
double sarco_height
double frame_depth_500
double front_frame_depth
double frame_side
double side_thick
double sarco_width
TGeoVolume * MakeQuartet()
double csi_depth
Description of physical materials used to construct detectors & targets; interface to range tables.
Definition KVMaterial.h:94
virtual TGeoMedium * GetGeoMedium(const Char_t *="")
static TGeoHMatrix * GetVolumePositioningMatrix(Double_t distance, Double_t theta, Double_t phi, TGeoTranslation *postTrans=nullptr)
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=nullptr)
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
TGeoMedium * GetMedium(const char *medium) const
TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="") override
TObjArray * GetNodes()
virtual void SetName(const char *name)
TObject * Last() const override
Double_t Z() const
void SetXYZ(Double_t x, Double_t y, Double_t z)
Double_t Phi() const
Double_t Y() const
Double_t X() const
Double_t Theta() const
void SetMag(Double_t)
T Mag(const SVector< T, D > &rhs)
const long double um
Definition KVUnits.h:68
sep
constexpr Double_t RadToDeg()
ClassImp(TPyArg)