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