KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVFAZIABlock.cpp
Go to the documentation of this file.
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 // BEGIN_HTML <!--
18 /* -->
19 <h2>KVFAZIABlock</h2>
20 <h4>Block of 16 telescopes FAZIA</h4>
21 <!-- */
22 // --> END_HTML
24 
25 
26 
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 
114 TGeoVolume* 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 
160 TGeoVolume* 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 
205 TGeoVolume* 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 
249 std::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 
330 TGeoVolume* 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.),
354  centre_cross_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.),
358  centre_cross_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,
370  (centre_cross_thick / 2.
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
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
double Double_t
R__EXTERN TGeoManager * gGeoManager
char * Form(const char *fmt,...)
Standard geometry of 16-telescope FAZIA block.
Definition: KVFAZIABlock.h:16
double full_width
Definition: KVFAZIABlock.h:30
double si_centre
Definition: KVFAZIABlock.h:23
TGeoVolume * MakeSarco()
double dist_si2_csi
Definition: KVFAZIABlock.h:31
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:34
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:25
double centre_cross_thick
Definition: KVFAZIABlock.h:20
double frame_edge_depth
Definition: KVFAZIABlock.h:27
TGeoVolume * MakeErgalFrame(double frame_depth, double ergal_edge_depth)
double full_length_quartet
Definition: KVFAZIABlock.h:33
double sarco_length
Definition: KVFAZIABlock.h:37
double sarco_epaisseur
Definition: KVFAZIABlock.h:40
double si_holder_side
Definition: KVFAZIABlock.h:22
double si300_position
Definition: KVFAZIABlock.h:28
double si500_position
Definition: KVFAZIABlock.h:29
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:41
double thick_si2
Definition: KVFAZIABlock.h:35
double sarco_height
Definition: KVFAZIABlock.h:39
double frame_depth_500
Definition: KVFAZIABlock.h:26
double front_frame_depth
Definition: KVFAZIABlock.h:24
double frame_side
Definition: KVFAZIABlock.h:19
double side_thick
Definition: KVFAZIABlock.h:21
double sarco_width
Definition: KVFAZIABlock.h:38
TGeoVolume * MakeQuartet()
double csi_depth
Definition: KVFAZIABlock.h:32
Description of physical materials used to construct detectors & targets; interface to range tables.
Definition: KVMaterial.h:93
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=0)
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
TGeoMedium * GetMedium(const char *medium) const
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
TObjArray * GetNodes()
virtual void SetName(const char *name)
TObject * Last() const
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()