Belle II Software  release-05-01-25
GeoBeamPipeCreator.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Hiroshi Nakano, Hiroyuki Nakayama,Yuri Soloviev *
7  * Luka Santelj *
8  * *
9  * This software is provided "as is" without any warranty. *
10  **************************************************************************/
11 
12 #include <ir/geometry/GeoBeamPipeCreator.h>
13 
14 #include <geometry/Materials.h>
15 #include <geometry/CreatorFactory.h>
16 #include <geometry/utilities.h>
17 #include <framework/gearbox/Unit.h>
18 #include <ir/simulation/SensitiveDetector.h>
19 
20 #include <cmath>
21 #include <boost/format.hpp>
22 #include <boost/foreach.hpp>
23 #include <boost/algorithm/string.hpp>
24 
25 #include <G4LogicalVolume.hh>
26 #include <G4PVPlacement.hh>
27 
28 //Shapes
29 #include <G4Trd.hh>
30 #include <G4Tubs.hh>
31 #include <G4Polycone.hh>
32 #include <G4UnionSolid.hh>
33 #include <G4IntersectionSolid.hh>
34 #include <G4SubtractionSolid.hh>
35 #include <G4UserLimits.hh>
36 
37 using namespace std;
38 using namespace boost;
39 
40 namespace Belle2 {
46  using namespace geometry;
47 
48  namespace ir {
49 
50  //-----------------------------------------------------------------
51  // Register the Creator
52  //-----------------------------------------------------------------
53 
54  geometry::CreatorFactory<GeoBeamPipeCreator> GeoBeamPipeFactory("BeamPipeCreator");
55 
56  //-----------------------------------------------------------------
57  // Implementation
58  //-----------------------------------------------------------------
59 
60  GeoBeamPipeCreator::GeoBeamPipeCreator()
61  {
62  }
63 
64  GeoBeamPipeCreator::~GeoBeamPipeCreator()
65  {
66  //Delete all sensitive detectors
67  BOOST_FOREACH(SensitiveDetector * sensitive, m_sensitive) {
68  delete sensitive;
69  }
70  m_sensitive.clear();
71  }
72 
73  void GeoBeamPipeCreator::createGeometry(G4LogicalVolume& topVolume, GeometryTypes)
74  {
75 
76  //########## Index ##########
77  //
78  // "IP pipe" -9.0 cm to 13.85 cm
79  // Lv1SUS
80  // Lv2OutBe
81  // Lv2InBe
82  // Lv2Paraf
83  // Lv2Vacuum
84  // Lv3AuCoat
85  // "crotch pipe Forward " 13.85 cm to 40.0 cm
86  // Lv1TaFwd
87  // Lv2VacFwd
88  // "crotch pipe Backward " -9.0 cm to -40.0 cm
89  // Lv1TaBwd
90  // Lv2VacBwd
91  // "beam pipe more Forward " 40.0 cm to 63.35 cm
92  // Lv1TaLERUp
93  // Lv2VacLERUp
94  // Lv1TaHERDwn
95  // Lv2VacHERDwn
96  // "beam pipe more Backward " -40.0 cm to -62.725 cm
97  // Lv1TaHERUp
98  // Lv2VacHERUp
99  // Lv1TaLERDwn
100  // Lv2VacLERDwn
101  //
102  //###########################
103 
104  double SafetyLength = m_config.getParameter("Safety.L1") * Unit::cm / Unit::mm;
105 
106  double stepMax = 5.0 * Unit::mm;
107  int flag_limitStep = int(m_config.getParameter("LimitStepLength"));
108 
109  double A11 = 0.03918;
110 
113 
114  //----------
115  //- Lv1SUS
116 
117  //get parameters from .xml file
118  std::string prep = "Lv1SUS.";
119  //
120  const int Lv1SUS_num = 21;
121  //
122  double Lv1SUS_Z[Lv1SUS_num];
123  Lv1SUS_Z[0] = 0.0;
124  for (int tmpn = 0; tmpn < 8; tmpn++) {
125  Lv1SUS_Z[0] -= m_config.getParameter(prep + (format("L%1%") % (tmpn + 1)).str().c_str()) * Unit::cm / Unit::mm;
126  }
127  Lv1SUS_Z[1] = Lv1SUS_Z[0] + m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
128  Lv1SUS_Z[2] = Lv1SUS_Z[1];
129  Lv1SUS_Z[3] = Lv1SUS_Z[2] + m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
130  Lv1SUS_Z[4] = Lv1SUS_Z[3] + m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
131  Lv1SUS_Z[5] = Lv1SUS_Z[4];
132  Lv1SUS_Z[6] = Lv1SUS_Z[5] + m_config.getParameter(prep + "L4") * Unit::cm / Unit::mm;
133  Lv1SUS_Z[7] = Lv1SUS_Z[6] + m_config.getParameter(prep + "L5") * Unit::cm / Unit::mm;
134  Lv1SUS_Z[8] = Lv1SUS_Z[7] + m_config.getParameter(prep + "L6") * Unit::cm / Unit::mm;
135  Lv1SUS_Z[9] = Lv1SUS_Z[8] + m_config.getParameter(prep + "L7") * Unit::cm / Unit::mm;
136  Lv1SUS_Z[10] = Lv1SUS_Z[9] + m_config.getParameter(prep + "L8") * Unit::cm / Unit::mm;
137  Lv1SUS_Z[11] = Lv1SUS_Z[10] + m_config.getParameter(prep + "L9") * Unit::cm / Unit::mm;
138  Lv1SUS_Z[12] = Lv1SUS_Z[11] + m_config.getParameter(prep + "L10") * Unit::cm / Unit::mm;
139  Lv1SUS_Z[13] = Lv1SUS_Z[12] + m_config.getParameter(prep + "L11") * Unit::cm / Unit::mm;
140  Lv1SUS_Z[14] = Lv1SUS_Z[13] + m_config.getParameter(prep + "L12") * Unit::cm / Unit::mm;
141  Lv1SUS_Z[15] = Lv1SUS_Z[14] + m_config.getParameter(prep + "L13") * Unit::cm / Unit::mm;
142  Lv1SUS_Z[16] = Lv1SUS_Z[15];
143  Lv1SUS_Z[17] = Lv1SUS_Z[16] + m_config.getParameter(prep + "L14") * Unit::cm / Unit::mm;
144  Lv1SUS_Z[18] = Lv1SUS_Z[17] + m_config.getParameter(prep + "L15") * Unit::cm / Unit::mm;
145  Lv1SUS_Z[19] = Lv1SUS_Z[18];
146  Lv1SUS_Z[20] = Lv1SUS_Z[19] + m_config.getParameter(prep + "L16") * Unit::cm / Unit::mm;
147  //
148  double Lv1SUS_rI[Lv1SUS_num];
149  for (int tmpn = 0; tmpn < Lv1SUS_num; tmpn++)
150  { Lv1SUS_rI[tmpn] = 0.0; }
151  //m_config.getParameter(prep+"L1")
152  double Lv1SUS_rO[Lv1SUS_num];
153  Lv1SUS_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
154  Lv1SUS_rO[1] = Lv1SUS_rO[0];
155  Lv1SUS_rO[2] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
156  Lv1SUS_rO[3] = Lv1SUS_rO[2];
157  Lv1SUS_rO[4] = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
158  Lv1SUS_rO[5] = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
159  Lv1SUS_rO[6] = Lv1SUS_rO[5];
160  Lv1SUS_rO[7] = m_config.getParameter(prep + "R5") * Unit::cm / Unit::mm;
161  Lv1SUS_rO[8] = Lv1SUS_rO[7];
162  Lv1SUS_rO[9] = m_config.getParameter(prep + "R6") * Unit::cm / Unit::mm;
163  Lv1SUS_rO[10] = Lv1SUS_rO[9];
164  Lv1SUS_rO[11] = Lv1SUS_rO[10];
165  Lv1SUS_rO[12] = m_config.getParameter(prep + "R7") * Unit::cm / Unit::mm;
166  Lv1SUS_rO[13] = Lv1SUS_rO[12];
167  Lv1SUS_rO[14] = m_config.getParameter(prep + "R8") * Unit::cm / Unit::mm;
168  Lv1SUS_rO[15] = Lv1SUS_rO[14];
169  Lv1SUS_rO[16] = m_config.getParameter(prep + "R9") * Unit::cm / Unit::mm;
170  Lv1SUS_rO[17] = m_config.getParameter(prep + "R10") * Unit::cm / Unit::mm;
171  Lv1SUS_rO[18] = Lv1SUS_rO[17];
172  Lv1SUS_rO[19] = m_config.getParameter(prep + "R11") * Unit::cm / Unit::mm;
173  Lv1SUS_rO[20] = Lv1SUS_rO[19];
174  //
175  string strMat_Lv1SUS = m_config.getParameterStr(prep + "Material");
176  G4Material* mat_Lv1SUS = Materials::get(strMat_Lv1SUS);
177 
178  //define geometry
179  G4Polycone* geo_Lv1SUS = new G4Polycone("geo_Lv1SUS_name", 0, 2 * M_PI, Lv1SUS_num, Lv1SUS_Z, Lv1SUS_rI, Lv1SUS_rO);
180  G4LogicalVolume* logi_Lv1SUS = new G4LogicalVolume(geo_Lv1SUS, mat_Lv1SUS, "logi_Lv1SUS_name");
181 
182  //for (int i=0;i<Lv1SUS_num;i++)printf("%f %f\n",Lv1SUS_Z[i],Lv1SUS_rO[i]);
183 
184  //- put volume
185  setColor(*logi_Lv1SUS, "#666666");
186  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv1SUS, "phys_Lv1SUS_name", &topVolume, false, 0);
187 
188 
189  //----------
190  //- Lv2OutTi added for Phase 3.
191  //-
192  //----------
193  //get parameters from .xml file
194  if (m_config.getParameter("Lv2OutTi.L1", -1) > 0) {
195  prep = "Lv2OutTi.";
196  //
197  const int Lv2OutTi_num = 2;
198  //
199  double Lv2OutTi_Z[Lv2OutTi_num];
200  Lv2OutTi_Z[0] = -m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
201  Lv2OutTi_Z[1] = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
202  //
203  double Lv2OutTi_rI[Lv2OutTi_num];
204  Lv2OutTi_rI[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
205  Lv2OutTi_rI[1] = Lv2OutTi_rI[0];
206  //
207  double Lv2OutTi_rO[Lv2OutTi_num];
208  Lv2OutTi_rO[0] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
209  Lv2OutTi_rO[1] = Lv2OutTi_rO[0];
210  //
211  string strMat_Lv2OutTi = m_config.getParameterStr(prep + "Material");
212  G4Material* mat_Lv2OutTi = Materials::get(strMat_Lv2OutTi);
213 
214  //define geometry
215  G4Polycone* geo_Lv2OutTi = new G4Polycone("geo_Lv2OutTi_name", 0, 2 * M_PI, Lv2OutTi_num, Lv2OutTi_Z, Lv2OutTi_rI, Lv2OutTi_rO);
216  G4LogicalVolume* logi_Lv2OutTi = new G4LogicalVolume(geo_Lv2OutTi, mat_Lv2OutTi, "logi_Lv2OutTi_name");
217 
218  //- put volume
219  setColor(*logi_Lv2OutTi, "#333300");
220  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutTi, "phys_Lv2OutTi_name", logi_Lv1SUS, false, 0);
221  }
222 
223 
224  //----------
225  //- Lv2OutBe
226  //-
227  //----------
228 
229  //get parameters from .xml file
230  prep = "Lv2OutBe.";
231  //
232  const int Lv2OutBe_num = 2;
233  //
234  double Lv2OutBe_Z[Lv2OutBe_num];
235  Lv2OutBe_Z[0] = -m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
236  Lv2OutBe_Z[1] = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
237  //
238  double Lv2OutBe_rI[Lv2OutBe_num];
239  Lv2OutBe_rI[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
240  Lv2OutBe_rI[1] = Lv2OutBe_rI[0];
241  //
242  double Lv2OutBe_rO[Lv2OutBe_num];
243  Lv2OutBe_rO[0] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
244  Lv2OutBe_rO[1] = Lv2OutBe_rO[0];
245  //
246  string strMat_Lv2OutBe = m_config.getParameterStr(prep + "Material");
247  G4Material* mat_Lv2OutBe = Materials::get(strMat_Lv2OutBe);
248 
249  //define geometry
250  G4Polycone* geo_Lv2OutBe = new G4Polycone("geo_Lv2OutBe_name", 0, 2 * M_PI, Lv2OutBe_num, Lv2OutBe_Z, Lv2OutBe_rI, Lv2OutBe_rO);
251  G4LogicalVolume* logi_Lv2OutBe = new G4LogicalVolume(geo_Lv2OutBe, mat_Lv2OutBe, "logi_Lv2OutBe_name");
252 
253  //- put volume
254  setColor(*logi_Lv2OutBe, "#333300");
255  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutBe, "phys_Lv2OutBe_name", logi_Lv1SUS, false, 0);
256 
257 
258  //----------
259  //- Lv2InBe
260  //-
261  //----------
262 
263  //get parameters from .xml file
264  prep = "Lv2InBe.";
265  //
266  const int Lv2InBe_num = 2;
267  //
268  double Lv2InBe_Z[Lv2InBe_num];
269  Lv2InBe_Z[0] = -m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
270  Lv2InBe_Z[1] = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
271  //
272  double Lv2InBe_rI[Lv2InBe_num];
273  Lv2InBe_rI[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
274  Lv2InBe_rI[1] = Lv2InBe_rI[0];
275  //
276  double Lv2InBe_rO[Lv2InBe_num];
277  Lv2InBe_rO[0] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
278  Lv2InBe_rO[1] = Lv2InBe_rO[0];
279  //
280  string strMat_Lv2InBe = m_config.getParameterStr(prep + "Material");
281  G4Material* mat_Lv2InBe = Materials::get(strMat_Lv2InBe);
282 
283  //define geometry
284  G4Polycone* geo_Lv2InBe = new G4Polycone("geo_Lv2InBe_name", 0, 2 * M_PI, Lv2InBe_num, Lv2InBe_Z, Lv2InBe_rI, Lv2InBe_rO);
285  G4LogicalVolume* logi_Lv2InBe = new G4LogicalVolume(geo_Lv2InBe, mat_Lv2InBe, "logi_Lv2InBe_name");
286 
287  //- put volume
288  setColor(*logi_Lv2InBe, "#333300");
289  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2InBe, "phys_Lv2InBe_name", logi_Lv1SUS, false, 0);
290 
291  //----------
292  //- Lv2Vacuum
293 
294  //get parameters from .xml file
295  prep = "Lv2Vacuum.";
296  //
297  double Lv2Vacuum_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
298  double Lv2Vacuum_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
299  double Lv2Vacuum_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
300  double Lv2Vacuum_L4 = m_config.getParameter(prep + "L4") * Unit::cm / Unit::mm;
301  double Lv2Vacuum_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
302  double Lv2Vacuum_R2 = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
303  double Lv2Vacuum_R3 = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
304  //double Lv2Vacuum_A1 = cLv2Vacuum.getAngle("A1");
305  double Lv2Vacuum_A2 = m_config.getParameter(prep + "A2");
306  //
307  string strMat_Lv2Vacuum = m_config.getParameterStr(prep + "Material");
308  G4Material* mat_Lv2Vacuum = Materials::get(strMat_Lv2Vacuum);
309  //
310  // Part 1
311  const int Lv2Vacuum1_num = 2;
312  //
313  double Lv2Vacuum1_Z[Lv2Vacuum1_num];
314  Lv2Vacuum1_Z[0] = -Lv2Vacuum_L1;
315  Lv2Vacuum1_Z[1] = Lv2Vacuum_L2;
316  double Lv2Vacuum1_rI[Lv2Vacuum1_num];
317  for (int tmpn = 0; tmpn < Lv2Vacuum1_num; tmpn++)
318  { Lv2Vacuum1_rI[tmpn] = 0.0; }
319  double Lv2Vacuum1_rO[Lv2Vacuum1_num];
320  Lv2Vacuum1_rO[0] = Lv2Vacuum_R1;
321  Lv2Vacuum1_rO[1] = Lv2Vacuum_R1;
322  // Part 2
323  double Lv2Vacuum2_Z1 = 2. * Lv2Vacuum_L3;
324  double Lv2Vacuum2_rI1 = 0.0;
325  double Lv2Vacuum2_rO1 = Lv2Vacuum_R2;
326  //
327  double Lv2Vacuum2_Z2 = (Lv2Vacuum_L3 * cos(Lv2Vacuum_A2)) + SafetyLength;
328  double Lv2Vacuum2_rI2 = 0.0;
329  double Lv2Vacuum2_rO2 = 2 * Lv2Vacuum_R2;
330  // Part 3
331  const int Lv2Vacuum3_num = 2;
332  //
333  double Lv2Vacuum3_Z[Lv2Vacuum3_num];
334  Lv2Vacuum3_Z[0] = 0.0;
335  Lv2Vacuum3_Z[1] = Lv2Vacuum_L4;
336  double Lv2Vacuum3_rI[Lv2Vacuum3_num];
337  for (int tmpn = 0; tmpn < Lv2Vacuum3_num; tmpn++)
338  { Lv2Vacuum3_rI[tmpn] = 0.0; }
339  double Lv2Vacuum3_rO[Lv2Vacuum3_num];
340  Lv2Vacuum3_rO[0] = Lv2Vacuum_R3;
341  Lv2Vacuum3_rO[1] = Lv2Vacuum_R3;
342 
343  //define geometry
344  // Part 1
345  G4Polycone* geo_Lv2VacuumPart1 = new G4Polycone("geo_Lv2VacuumPart1_name", 0, 2 * M_PI, Lv2Vacuum1_num, Lv2Vacuum1_Z, Lv2Vacuum1_rI,
346  Lv2Vacuum1_rO);
347  // Part 2
348  G4Tubs* geo_Lv2VacuumPart2_1 = new G4Tubs("geo_Lv2VacuumPart2_1_name", Lv2Vacuum2_rI1, Lv2Vacuum2_rO1, Lv2Vacuum2_Z1, 0, 2 * M_PI);
349  G4Tubs* geo_Lv2VacuumPart2_2 = new G4Tubs("geo_Lv2VacuumPart2_2_name", Lv2Vacuum2_rI2, Lv2Vacuum2_rO2, Lv2Vacuum2_Z2, 0, 2 * M_PI);
350  G4Transform3D transform_Lv2VacuumPart2_2 = G4Translate3D(0., 0., 0.);
351  transform_Lv2VacuumPart2_2 = transform_Lv2VacuumPart2_2 * G4RotateY3D(-Lv2Vacuum_A2);
352  G4IntersectionSolid* geo_Lv2VacuumPart2 = new G4IntersectionSolid("geo_Lv2VacuumPart2_name", geo_Lv2VacuumPart2_1,
353  geo_Lv2VacuumPart2_2, transform_Lv2VacuumPart2_2);
354  // Part 3
355  G4Polycone* geo_Lv2VacuumPart3 = new G4Polycone("geo_Lv2VacuumPart3_name", 0, 2 * M_PI, Lv2Vacuum3_num, Lv2Vacuum3_Z, Lv2Vacuum3_rI,
356  Lv2Vacuum3_rO);
357  // Part1+2+3
358 // G4Transform3D transform_Lv2VacuumPart3 = G4Translate3D(0., 0., 0.);
359  G4Transform3D transform_Lv2VacuumPart3 = G4Translate3D(-0.5, 0., 0.);
360  // A11 instead of A1
361  transform_Lv2VacuumPart3 = transform_Lv2VacuumPart3 * G4RotateY3D(-A11);
362  G4UnionSolid* geo_Lv2Vacuumxx = new G4UnionSolid("geo_Lv2Vacuumxx_name", geo_Lv2VacuumPart1, geo_Lv2VacuumPart3,
363  transform_Lv2VacuumPart3);
364  G4Transform3D transform_Lv2VacuumPart2 = G4Translate3D(Lv2Vacuum_L3 * sin(Lv2Vacuum_A2), 0.,
365  Lv2Vacuum_L2 + Lv2Vacuum_L3 * cos(Lv2Vacuum_A2));
366  transform_Lv2VacuumPart2 = transform_Lv2VacuumPart2 * G4RotateY3D(Lv2Vacuum_A2);
367  G4UnionSolid* geo_Lv2Vacuumx = new G4UnionSolid("geo_Lv2Vacuumx_name", geo_Lv2Vacuumxx, geo_Lv2VacuumPart2,
368  transform_Lv2VacuumPart2);
369  // Intersection with mother
370  G4IntersectionSolid* geo_Lv2Vacuum = new G4IntersectionSolid("geo_Lv2Vacuum_name", geo_Lv2Vacuumx, geo_Lv1SUS);
371  G4LogicalVolume* logi_Lv2Vacuum = new G4LogicalVolume(geo_Lv2Vacuum, mat_Lv2Vacuum, "logi_Lv2Vacuum_name");
372  if (flag_limitStep) logi_Lv2Vacuum->SetUserLimits(new G4UserLimits(stepMax));
373 
374  //- put volume
375  setColor(*logi_Lv2Vacuum, "#CCCCCC");
376  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Vacuum, "phys_Lv2Vacuum_name", logi_Lv1SUS, false, 0);
377 
378  //-
379  //----------
380 
381  //----------
382  //- Lv2Paraf
383 
384  //get parameters from .xml file
385  prep = "Lv2Paraf.";
386  //
387  const int Lv2Paraf1_num = 20;
388  const int Lv2Paraf2_num = 3;
389  //
390  double Lv2Paraf1_Z[Lv2Paraf1_num];
391  Lv2Paraf1_Z[0] = 0.0;
392  for (int tmpn = 0; tmpn < 9; tmpn++) {
393  Lv2Paraf1_Z[0] -= m_config.getParameter(prep + (format("L%1%") % (tmpn + 1)).str().c_str()) * Unit::cm / Unit::mm;
394  }
395  Lv2Paraf1_Z[1] = Lv2Paraf1_Z[0] + m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
396  Lv2Paraf1_Z[2] = Lv2Paraf1_Z[1];
397  Lv2Paraf1_Z[3] = Lv2Paraf1_Z[2] + m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
398  Lv2Paraf1_Z[4] = Lv2Paraf1_Z[3] + m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
399  Lv2Paraf1_Z[5] = Lv2Paraf1_Z[4] + m_config.getParameter(prep + "L4") * Unit::cm / Unit::mm;
400  Lv2Paraf1_Z[6] = Lv2Paraf1_Z[5] + m_config.getParameter(prep + "L5") * Unit::cm / Unit::mm;
401  Lv2Paraf1_Z[7] = Lv2Paraf1_Z[6] + m_config.getParameter(prep + "L6") * Unit::cm / Unit::mm;
402  Lv2Paraf1_Z[8] = Lv2Paraf1_Z[7] + m_config.getParameter(prep + "L7") * Unit::cm / Unit::mm;
403  Lv2Paraf1_Z[9] = Lv2Paraf1_Z[8] + m_config.getParameter(prep + "L8") * Unit::cm / Unit::mm;
404  Lv2Paraf1_Z[10] = Lv2Paraf1_Z[9] + m_config.getParameter(prep + "L9") * Unit::cm / Unit::mm + m_config.getParameter(
405  prep + "L10") * Unit::cm / Unit::mm;
406  Lv2Paraf1_Z[11] = Lv2Paraf1_Z[10] + m_config.getParameter(prep + "L11") * Unit::cm / Unit::mm;
407  Lv2Paraf1_Z[12] = Lv2Paraf1_Z[11] + m_config.getParameter(prep + "L12") * Unit::cm / Unit::mm;
408  Lv2Paraf1_Z[13] = Lv2Paraf1_Z[12] + m_config.getParameter(prep + "L13") * Unit::cm / Unit::mm;
409  Lv2Paraf1_Z[14] = Lv2Paraf1_Z[13] + m_config.getParameter(prep + "L14") * Unit::cm / Unit::mm;
410  Lv2Paraf1_Z[15] = Lv2Paraf1_Z[14] + m_config.getParameter(prep + "L15") * Unit::cm / Unit::mm + m_config.getParameter(
411  prep + "L16") * Unit::cm / Unit::mm;
412  Lv2Paraf1_Z[16] = Lv2Paraf1_Z[15] + m_config.getParameter(prep + "L17") * Unit::cm / Unit::mm + m_config.getParameter(
413  prep + "L18") * Unit::cm / Unit::mm;
414  Lv2Paraf1_Z[17] = Lv2Paraf1_Z[16] + m_config.getParameter(prep + "L19") * Unit::cm / Unit::mm;
415  Lv2Paraf1_Z[18] = Lv2Paraf1_Z[17];
416  Lv2Paraf1_Z[19] = Lv2Paraf1_Z[18] + m_config.getParameter(prep + "L20") * Unit::cm / Unit::mm;
417  //
418  double Lv2Paraf1_rI[Lv2Paraf1_num];
419  Lv2Paraf1_rI[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
420  Lv2Paraf1_rI[1] = Lv2Paraf1_rI[0];
421  Lv2Paraf1_rI[2] = Lv2Paraf1_rI[1];
422  Lv2Paraf1_rI[3] = Lv2Paraf1_rI[2];
423  Lv2Paraf1_rI[4] = Lv2Paraf1_rI[3];
424  Lv2Paraf1_rI[5] = Lv2Paraf1_rI[4];
425  Lv2Paraf1_rI[6] = Lv2Paraf1_rI[5];
426  Lv2Paraf1_rI[7] = m_config.getParameter(prep + "R6") * Unit::cm / Unit::mm;
427  Lv2Paraf1_rI[8] = Lv2Paraf1_rI[7];
428  Lv2Paraf1_rI[9] = Lv2Paraf1_rI[8];
429  Lv2Paraf1_rI[10] = Lv2Paraf1_rI[9];
430  Lv2Paraf1_rI[11] = Lv2Paraf1_rI[10];
431  Lv2Paraf1_rI[12] = Lv2Paraf1_rI[11];
432  Lv2Paraf1_rI[13] = m_config.getParameter(prep + "R9") * Unit::cm / Unit::mm;
433  Lv2Paraf1_rI[14] = Lv2Paraf1_rI[13];
434  Lv2Paraf1_rI[15] = Lv2Paraf1_rI[14];
435  Lv2Paraf1_rI[16] = Lv2Paraf1_rI[15];
436  Lv2Paraf1_rI[17] = Lv2Paraf1_rI[16];
437  Lv2Paraf1_rI[18] = Lv2Paraf1_rI[17];
438  Lv2Paraf1_rI[19] = Lv2Paraf1_rI[18];
439  //
440  double Lv2Paraf1_rO[Lv2Paraf1_num];
441  Lv2Paraf1_rO[0] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
442  Lv2Paraf1_rO[1] = Lv2Paraf1_rO[0];
443  Lv2Paraf1_rO[2] = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
444  Lv2Paraf1_rO[3] = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
445  Lv2Paraf1_rO[4] = Lv2Paraf1_rO[3];
446  Lv2Paraf1_rO[5] = m_config.getParameter(prep + "R5") * Unit::cm / Unit::mm;
447  Lv2Paraf1_rO[6] = Lv2Paraf1_rO[5];
448  Lv2Paraf1_rO[7] = Lv2Paraf1_rO[6];
449  Lv2Paraf1_rO[8] = Lv2Paraf1_rO[7];
450  Lv2Paraf1_rO[9] = m_config.getParameter(prep + "R7") * Unit::cm / Unit::mm;
451  Lv2Paraf1_rO[10] = Lv2Paraf1_rO[9];
452  Lv2Paraf1_rO[11] = m_config.getParameter(prep + "R8") * Unit::cm / Unit::mm;
453  Lv2Paraf1_rO[12] = Lv2Paraf1_rO[11];
454  Lv2Paraf1_rO[13] = Lv2Paraf1_rO[12];
455  Lv2Paraf1_rO[14] = Lv2Paraf1_rO[13];
456  Lv2Paraf1_rO[15] = m_config.getParameter(prep + "R10") * Unit::cm / Unit::mm;
457  Lv2Paraf1_rO[16] = Lv2Paraf1_rO[15];
458  Lv2Paraf1_rO[17] = m_config.getParameter(prep + "R12") * Unit::cm / Unit::mm;
459  Lv2Paraf1_rO[18] = m_config.getParameter(prep + "R13") * Unit::cm / Unit::mm;
460  Lv2Paraf1_rO[19] = Lv2Paraf1_rO[18];
461  //
462  //
463  double Lv2Paraf2_Z[Lv2Paraf2_num];
464  Lv2Paraf2_Z[0] = 0.0;
465  for (int tmpn = 10; tmpn <= 15; tmpn++) {
466  Lv2Paraf2_Z[0] += m_config.getParameter(prep + (format("L%1%") % tmpn).str().c_str()) * Unit::cm / Unit::mm;
467  }
468  Lv2Paraf2_Z[1] = Lv2Paraf2_Z[0] + m_config.getParameter(prep + "L16") * Unit::cm / Unit::mm + m_config.getParameter(
469  prep + "L17") * Unit::cm / Unit::mm;
470  Lv2Paraf2_Z[2] = Lv2Paraf2_Z[1] + m_config.getParameter(prep + "L18") * Unit::cm / Unit::mm + m_config.getParameter(
471  prep + "L19") * Unit::cm / Unit::mm +
472  m_config.getParameter(prep + "L20") * Unit::cm / Unit::mm + 1.0;
473  //
474  double Lv2Paraf2_rI[Lv2Paraf2_num];
475  for (int tmpn = 0; tmpn < Lv2Paraf2_num; tmpn++)
476  { Lv2Paraf2_rI[tmpn] = 0.0; }
477  //
478  double Lv2Paraf2_rO[Lv2Paraf2_num];
479  Lv2Paraf2_rO[0] = m_config.getParameter(prep + "R9") * Unit::cm / Unit::mm;
480  Lv2Paraf2_rO[1] = m_config.getParameter(prep + "R11") * Unit::cm / Unit::mm;
481  Lv2Paraf2_rO[2] = Lv2Paraf2_rO[1];
482  //
483  string strMat_Lv2Paraf = m_config.getParameterStr(prep + "Material");
484  G4Material* mat_Lv2Paraf = Materials::get(strMat_Lv2Paraf);
485 
486  //define geometry
487  G4Polycone* geo_Lv2Parafpcon1 = new G4Polycone("geo_Lv2Parafpcon1_name", 0, 2 * M_PI, Lv2Paraf1_num, Lv2Paraf1_Z, Lv2Paraf1_rI,
488  Lv2Paraf1_rO);
489  G4Polycone* geo_Lv2Parafpcon2 = new G4Polycone("geo_Lv2Parafpcon2_name", 0, 2 * M_PI, Lv2Paraf2_num, Lv2Paraf2_Z, Lv2Paraf2_rI,
490  Lv2Paraf2_rO);
491  G4SubtractionSolid* geo_Lv2Paraf = new G4SubtractionSolid("geo_Lv2Paraf_name", geo_Lv2Parafpcon1, geo_Lv2Parafpcon2);
492  G4LogicalVolume* logi_Lv2Paraf = new G4LogicalVolume(geo_Lv2Paraf, mat_Lv2Paraf, "logi_Lv2Paraf_name");
493 
494  //- put volume
495  setColor(*logi_Lv2Paraf, "#00CCCC");
496  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Paraf, "phys_Lv2Paraf_name", logi_Lv1SUS, false, 0);
497 
498  //-
499  //----------
500 
501  //----------
502  //- Lv3AuCoat
503 
504  //get parameters from .xml file
505  prep = "Lv3AuCoat.";
506  //
507  const int Lv3AuCoat_num = 2;
508  //
509  double Lv3AuCoat_Z[Lv3AuCoat_num];
510  Lv3AuCoat_Z[0] = -m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
511  Lv3AuCoat_Z[1] = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
512  //
513  double Lv3AuCoat_rI[Lv3AuCoat_num];
514  Lv3AuCoat_rI[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
515  Lv3AuCoat_rI[1] = Lv3AuCoat_rI[0];
516  //
517  double Lv3AuCoat_rO[Lv3AuCoat_num];
518  Lv3AuCoat_rO[0] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
519  Lv3AuCoat_rO[1] = Lv3AuCoat_rO[0];
520  //
521  string strMat_Lv3AuCoat = m_config.getParameterStr(prep + "Material");
522  G4Material* mat_Lv3AuCoat = Materials::get(strMat_Lv3AuCoat);
523 
524  //define geometry
525  G4Polycone* geo_Lv3AuCoat = new G4Polycone("geo_Lv3AuCoat_name", 0, 2 * M_PI, Lv3AuCoat_num, Lv3AuCoat_Z, Lv3AuCoat_rI,
526  Lv3AuCoat_rO);
527  G4LogicalVolume* logi_Lv3AuCoat = new G4LogicalVolume(geo_Lv3AuCoat, mat_Lv3AuCoat, "logi_Lv3AuCoat_name");
528 
529  //- put volume
530  setColor(*logi_Lv3AuCoat, "#CCCC00");
531  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv3AuCoat, "phys_Lv3AuCoat_name", logi_Lv2Vacuum, false, 0);
532 
533  //-
534  //----------
535 
538 
539  //get parameters from .xml file
540  prep = "Flange.";
541  //
542  double Flange_R = m_config.getParameter(prep + "R") * Unit::cm / Unit::mm;
543  double Flange_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
544  //double Flange_L2 = m_config.getParameter(prep+"L2") * Unit::cm / Unit::mm;// Not used (2015/April/16. masked by T.Hara)
545  double Flange_D = m_config.getParameter(prep + "D") * Unit::cm / Unit::mm;
546  double Flange_T = m_config.getParameter(prep + "T") * Unit::cm / Unit::mm;
547 
548  //define geometry
549  //G4Box* geo_Flange0 = new G4Box("geo_Flange0_name", Flange_L2, Flange_R, Flange_T);
550  G4Tubs* geo_Flange0 = new G4Tubs("geo_Flange0_name", 0, 424 * Unit::mm, Flange_T, 0, 2 * M_PI);
551  G4Tubs* geo_Flange1 = new G4Tubs("geo_Flange1_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
552  G4Tubs* geo_Flange2 = new G4Tubs("geo_Flange2_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
553 
554  G4UnionSolid* geo_Flange_x = new G4UnionSolid("geo_Flange_x_name", geo_Flange1, geo_Flange2, G4Translate3D(-Flange_L1 * 2, 0, 0));
555  G4IntersectionSolid* geo_Flange = new G4IntersectionSolid("geo_Flange_name", geo_Flange0, geo_Flange_x, G4Translate3D(Flange_L1, 0,
556  0));
557 
558 
561 
564 
565 
566  //----------
567  //- Lv1TaFwd
568 
569  //get parameters from .xml file
570  prep = "Lv1TaFwd.";
571  //
572  double Lv1TaFwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
573  double Lv1TaFwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
574  double Lv1TaFwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
575  double Lv1TaFwd_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
576  double Lv1TaFwd_T1 = m_config.getParameter(prep + "T1") * Unit::cm / Unit::mm;
577  //
578  string strMat_Lv1TaFwd = m_config.getParameterStr(prep + "Material");
579  G4Material* mat_Lv1TaFwd = Materials::get(strMat_Lv1TaFwd);
580 
581  //define geometry
582  G4Trd* geo_Lv1TaFwd_xx = new G4Trd("geo_Lv1TaFwd_xx_name", Lv1TaFwd_L2, Lv1TaFwd_L3, Lv1TaFwd_T1, Lv1TaFwd_T1, Lv1TaFwd_L1 / 2.0);
583  G4UnionSolid* geo_Lv1TaFwd_x
584  = new G4UnionSolid("geo_Lv1TaFwd_x_name", geo_Lv1TaFwd_xx, geo_Flange,
585  G4Translate3D(0, 0, Flange_D - (Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
586 
587  //===MODIFY ME!!===
588  //avoid overlap with HeavyMetalShield
589  double HMS_Z[4] = {350, 410, 450, 482};
590  double HMS_rI[4] = {35.5, 35.5, 42.5, 42.5};
591  double HMS_rO[4] = {100, 100, 100, 100};
592  G4Polycone* geo_HMS = new G4Polycone("geo_HMS_name", 0, 2 * M_PI, 4, HMS_Z, HMS_rI, HMS_rO);
593  G4SubtractionSolid* geo_Lv1TaFwd = new G4SubtractionSolid("geo_Lv1TaFwd_name", geo_Lv1TaFwd_x, geo_HMS,
594  G4Translate3D(0, 0, -(Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
595 
596  G4LogicalVolume* logi_Lv1TaFwd = new G4LogicalVolume(geo_Lv1TaFwd, mat_Lv1TaFwd, "logi_Lv1TaFwd_name");
597 
598  //- put volume at (0.,0.,D1 + L1/2)
599  setColor(*logi_Lv1TaFwd, "#333333");
600  new G4PVPlacement(0, G4ThreeVector(0, 0, Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0), logi_Lv1TaFwd, "phys_Lv1TaFwd_name", &topVolume, false,
601  0);
602 
603 
604  //----------
605  //- Lv2VacFwd
606 
607  //get parameters from .xml file
608  prep = "Lv2VacFwd.";
609  //
610  double Lv2VacFwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
611  double Lv2VacFwd_D2 = m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
612  double Lv2VacFwd_D3 = m_config.getParameter(prep + "D3") * Unit::cm / Unit::mm;
613  double Lv2VacFwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
614  double Lv2VacFwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
615  double Lv2VacFwd_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
616  double Lv2VacFwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
617  double Lv2VacFwd_R2 = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
618  double Lv2VacFwd_R3 = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
619  double Lv2VacFwd_R4 = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
620  double Lv2VacFwd_A1 = m_config.getParameter(prep + "A1");
621  double Lv2VacFwd_A2 = m_config.getParameter(prep + "A2");
622  //
623  string strMat_Lv2VacFwd = m_config.getParameterStr(prep + "Material");
624  G4Material* mat_Lv2VacFwd = Materials::get(strMat_Lv2VacFwd);
625  //
626  // Part 1
627  double Lv2VacFwd1_Z1 = sqrt(Lv2VacFwd_D1 * Lv2VacFwd_D1 + Lv2VacFwd_D2 * Lv2VacFwd_D2 - 2.*Lv2VacFwd_D1 * Lv2VacFwd_D2 * cos(
628  Lv2VacFwd_A1));
629  double Lv2VacFwd1_rI1 = 0.0;
630  double Lv2VacFwd1_rO1 = Lv2VacFwd_R1;
631  //
632  double Lv2VacFwd1_Z2 = (Lv2VacFwd1_Z1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
633  double Lv2VacFwd1_rI2 = 0.0;
634  double Lv2VacFwd1_rO2 = 2 * Lv2VacFwd_R1;
635  // Part 2
636  double Lv2VacFwd2_Z1 = Lv2VacFwd_L1;
637  double Lv2VacFwd2_rI1 = 0.0;
638  double Lv2VacFwd2_rO1 = Lv2VacFwd_R2;
639  //
640  double Lv2VacFwd2_Z2 = (Lv2VacFwd_L1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
641  double Lv2VacFwd2_rI2 = 0.0;
642  double Lv2VacFwd2_rO2 = 2 * Lv2VacFwd_R2;
643  // Part 3
644  const int Lv2VacFwd3_num1 = 2; // Cylindrical part
645  const int Lv2VacFwd3_num2 = 3; // Policone part
646  //-----------> Cylindrical part
647  double Lv2VacFwd_Z1[Lv2VacFwd3_num1];
648  Lv2VacFwd_Z1[0] = 0.0;
649 // Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
650  Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2 + 0.03 * SafetyLength;
651  double Lv2VacFwd_rI1[Lv2VacFwd3_num1];
652  for (int tmpn = 0; tmpn < Lv2VacFwd3_num1; tmpn++)
653  { Lv2VacFwd_rI1[tmpn] = 0.0; }
654  double Lv2VacFwd_rO1[Lv2VacFwd3_num1];
655  Lv2VacFwd_rO1[0] = Lv2VacFwd_R3;
656  Lv2VacFwd_rO1[1] = Lv2VacFwd_R3;
657  //<---------------
658  //----------->Policone part
659  double Lv2VacFwd_Z2[Lv2VacFwd3_num2];
660  Lv2VacFwd_Z2[0] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
661  Lv2VacFwd_Z2[1] = Lv2VacFwd_D3;
662  Lv2VacFwd_Z2[2] = Lv2VacFwd_D3 + Lv2VacFwd_L3;
663  double Lv2VacFwd_rI2[Lv2VacFwd3_num2];
664  for (int tmpn = 0; tmpn < Lv2VacFwd3_num2; tmpn++)
665  { Lv2VacFwd_rI2[tmpn] = 0.0; }
666  double Lv2VacFwd_rO2[Lv2VacFwd3_num2];
667  Lv2VacFwd_rO2[0] = Lv2VacFwd_R3;
668  Lv2VacFwd_rO2[1] = Lv2VacFwd_R4;
669  Lv2VacFwd_rO2[2] = Lv2VacFwd_R4;
670  //<-------------------
671  //
672 
673  //define geometry
674  // Part 1
675  G4Tubs* geo_Lv2VacFwdPart1_1 = new G4Tubs("geo_Lv2VacFwdPart1_1_name", Lv2VacFwd1_rI1, Lv2VacFwd1_rO1, Lv2VacFwd1_Z1, 0, 2 * M_PI);
676  G4Tubs* geo_Lv2VacFwdPart1_2 = new G4Tubs("geo_Lv2VacFwdPart1_2_name", Lv2VacFwd1_rI2, Lv2VacFwd1_rO2, Lv2VacFwd1_Z2, 0, 2 * M_PI);
677  //Slanted tube of Part 1
678  G4Transform3D transform_Lv2VacFwdPart1_2 = G4Translate3D(0., 0., 0.);
679  transform_Lv2VacFwdPart1_2 = transform_Lv2VacFwdPart1_2 * G4RotateY3D(-Lv2VacFwd_A2 / 2.);
680  G4IntersectionSolid* geo_Lv2VacFwdPart1 = new G4IntersectionSolid("geo_Lv2VacFwdPart1_name", geo_Lv2VacFwdPart1_1,
681  geo_Lv2VacFwdPart1_2, transform_Lv2VacFwdPart1_2);
682  // Part 2
683  G4Tubs* geo_Lv2VacFwdPart2_1 = new G4Tubs("geo_Lv2VacFwdPart2_1_name", Lv2VacFwd2_rI1, Lv2VacFwd2_rO1, Lv2VacFwd2_Z1, 0, 2 * M_PI);
684  G4Tubs* geo_Lv2VacFwdPart2_2 = new G4Tubs("geo_Lv2VacFwdPart2_2_name", Lv2VacFwd2_rI2, Lv2VacFwd2_rO2, Lv2VacFwd2_Z2, 0, 2 * M_PI);
685  //Slanted tube of Part 2
686  G4Transform3D transform_Lv2VacFwdPart2_2 = G4Translate3D(0., 0., 0.);
687  transform_Lv2VacFwdPart2_2 = transform_Lv2VacFwdPart2_2 * G4RotateY3D(Lv2VacFwd_A2 / 2.);
688  G4IntersectionSolid* geo_Lv2VacFwdPart2 = new G4IntersectionSolid("geo_Lv2VacFwdPart2_name", geo_Lv2VacFwdPart2_1,
689  geo_Lv2VacFwdPart2_2, transform_Lv2VacFwdPart2_2);
690  // Part 3
691 // G4Polycone* geo_Lv2VacFwdPart3 = new G4Polycone("geo_Lv2VacFwdPart3", 0, 2 * M_PI, Lv2VacFwd3_num, Lv2VacFwd_Z, Lv2VacFwd_rI, Lv2VacFwd_rO);
692  G4Polycone* geo_Lv2VacFwdPart3_1 = new G4Polycone("geo_Lv2VacFwdPart3_1", 0, 2 * M_PI, Lv2VacFwd3_num1, Lv2VacFwd_Z1, Lv2VacFwd_rI1,
693  Lv2VacFwd_rO1);
694  G4Polycone* geo_Lv2VacFwdPart3_2 = new G4Polycone("geo_Lv2VacFwdPart3_2", 0, 2 * M_PI, Lv2VacFwd3_num2, Lv2VacFwd_Z2, Lv2VacFwd_rI2,
695  Lv2VacFwd_rO2);
696  G4Transform3D transform_Lv2VacFwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
697  transform_Lv2VacFwdPart3_1 = transform_Lv2VacFwdPart3_1 * G4RotateY3D(Lv2VacFwd_A1 - A11);
698  G4UnionSolid* geo_Lv2VacFwdPart3 = new G4UnionSolid("geo_Lv2VacFwdPart3_name", geo_Lv2VacFwdPart3_2, geo_Lv2VacFwdPart3_1,
699  transform_Lv2VacFwdPart3_1);
700  // Part1+2+3
701  //tmp begin
702  G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(
703  2.*Lv2VacFwd_A1)) / 2. ,
704  0.,
705  (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 2.);
706  //G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1)) / 1.9 ,
707  // 0.,
708  // (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 1.9);
709  transform_Lv2VacFwdPart1 = transform_Lv2VacFwdPart1 * G4RotateY3D(Lv2VacFwd_A1 + Lv2VacFwd_A2);
710  //
711  G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(
712  2.*Lv2VacFwd_A1) / 2.0,
713  0.,
714  Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.0);
715  //G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(2.*Lv2VacFwd_A1) / 2.05,
716  // 0.,
717  // Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.05);
718  //tmp end
719  transform_Lv2VacFwdPart2 = transform_Lv2VacFwdPart2 * G4RotateY3D(2.*Lv2VacFwd_A1);
720  //
721  G4UnionSolid* geo_Lv2VacFwdxx = new G4UnionSolid("geo_Lv2VacFwdxx_name", geo_Lv2VacFwdPart3, geo_Lv2VacFwdPart1,
722  transform_Lv2VacFwdPart1);
723  G4UnionSolid* geo_Lv2VacFwdx = new G4UnionSolid("geo_Lv2VacFwdx_name", geo_Lv2VacFwdxx, geo_Lv2VacFwdPart2,
724  transform_Lv2VacFwdPart2);
725  // Intersection
726  G4Transform3D transform_Lv2VacFwd = G4Translate3D(0., 0., -Lv1TaFwd_D1 - Lv1TaFwd_L1 / 2.);
727  transform_Lv2VacFwd = transform_Lv2VacFwd * G4RotateY3D(-Lv2VacFwd_A1);
728  //
729  G4IntersectionSolid* geo_Lv2VacFwd = new G4IntersectionSolid("geo_Lv2VacFwd_name", geo_Lv1TaFwd, geo_Lv2VacFwdx,
730  transform_Lv2VacFwd);
731  G4LogicalVolume* logi_Lv2VacFwd = new G4LogicalVolume(geo_Lv2VacFwd, mat_Lv2VacFwd, "logi_Lv2VacFwd_name");
732  if (flag_limitStep) logi_Lv2VacFwd->SetUserLimits(new G4UserLimits(stepMax));
733 
734  //- put volume
735  setColor(*logi_Lv2VacFwd, "#CCCCCC");
736  //you must set this invisible, otherwise encounter segV.
737  setVisibility(*logi_Lv2VacFwd, false);
738  new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacFwd, "phys_Lv2VacFwd_name", logi_Lv1TaFwd, false, 0);
739 
740  //-
741  //----------
742 
745 
746 
749 
750  //----------
751  //- Lv1TaBwd
752 
753  //get parameters from .xml file
754  prep = "Lv1TaBwd.";
755  //
756  double Lv1TaBwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
757  double Lv1TaBwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
758  double Lv1TaBwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
759  double Lv1TaBwd_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
760  double Lv1TaBwd_T1 = m_config.getParameter(prep + "T1") * Unit::cm / Unit::mm;
761  //
762  string strMat_Lv1TaBwd = m_config.getParameterStr(prep + "Material");
763  G4Material* mat_Lv1TaBwd = Materials::get(strMat_Lv1TaBwd);
764 
765  //define geometry
766  G4Trd* geo_Lv1TaBwd_x = new G4Trd("geo_Lv1TaBwd_x_name", Lv1TaBwd_L2, Lv1TaBwd_L3, Lv1TaBwd_T1, Lv1TaBwd_T1, Lv1TaBwd_L1 / 2.0);
767  G4UnionSolid* geo_Lv1TaBwd = new G4UnionSolid("geo_Lv1TaBwd_name", geo_Lv1TaBwd_x, geo_Flange,
768  G4Translate3D(0, 0, -Flange_D - (-Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0)));
769  G4LogicalVolume* logi_Lv1TaBwd = new G4LogicalVolume(geo_Lv1TaBwd, mat_Lv1TaBwd, "logi_Lv1TaBwd_name");
770 
771  //- put volume
772  setColor(*logi_Lv1TaBwd, "#333333");
773  new G4PVPlacement(0, G4ThreeVector(0, 0, -Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0), logi_Lv1TaBwd, "phys_Lv1TaBwd_name", &topVolume, false,
774  0);
775 
776  //-
777  //----------
778 
779  //----------
780  //- Lv2VacBwd
781 
782  //get parameters from .xml file
783  prep = "Lv2VacBwd.";
784  //
785  double Lv2VacBwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
786  double Lv2VacBwd_D2 = m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
787  double Lv2VacBwd_D3 = m_config.getParameter(prep + "D3") * Unit::cm / Unit::mm;
788  double Lv2VacBwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
789  double Lv2VacBwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
790  double Lv2VacBwd_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
791  double Lv2VacBwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
792  double Lv2VacBwd_R2 = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
793  double Lv2VacBwd_R3 = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
794  double Lv2VacBwd_R4 = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
795  double Lv2VacBwd_A1 = m_config.getParameter(prep + "A1");
796  double Lv2VacBwd_A2 = m_config.getParameter(prep + "A2");
797  //
798  string strMat_Lv2VacBwd = m_config.getParameterStr(prep + "Material");
799  G4Material* mat_Lv2VacBwd = Materials::get(strMat_Lv2VacBwd);
800  //
801  // Part 1
802  double Lv2VacBwd1_Z1 = sqrt(Lv2VacBwd_D1 * Lv2VacBwd_D1 + Lv2VacBwd_D2 * Lv2VacBwd_D2 - 2.*Lv2VacBwd_D1 * Lv2VacBwd_D2 * cos(
803  Lv2VacBwd_A1));
804  double Lv2VacBwd1_rI1 = 0.0;
805  double Lv2VacBwd1_rO1 = Lv2VacBwd_R1;
806  //
807  double Lv2VacBwd1_Z2 = (Lv2VacBwd1_Z1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
808  double Lv2VacBwd1_rI2 = 0.0;
809  double Lv2VacBwd1_rO2 = 2 * Lv2VacBwd_R1;
810  // Part 2
811  double Lv2VacBwd2_Z1 = Lv2VacBwd_L1;
812  double Lv2VacBwd2_rI1 = 0.0;
813  double Lv2VacBwd2_rO1 = Lv2VacBwd_R2;
814  //
815  double Lv2VacBwd2_Z2 = (Lv2VacBwd_L1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
816  double Lv2VacBwd2_rI2 = 0.0;
817  double Lv2VacBwd2_rO2 = 2 * Lv2VacBwd_R2;
818  // Part 3
819  const int Lv2VacBwd3_num1 = 2; // cylindrical part
820  const int Lv2VacBwd3_num2 = 3; // policone part
821  // ----------->Cylindrical part
822  double Lv2VacBwd_Z1[Lv2VacBwd3_num1];
823  Lv2VacBwd_Z1[0] = 0.0;
824  Lv2VacBwd_Z1[1] = -Lv2VacBwd_D3 + Lv2VacBwd_L2 - 0.03 * SafetyLength;
825  double Lv2VacBwd_rI1[Lv2VacBwd3_num1];
826  for (int tmpn = 0; tmpn < Lv2VacBwd3_num1; tmpn++)
827  { Lv2VacBwd_rI1[tmpn] = 0.0; }
828  double Lv2VacBwd_rO1[Lv2VacBwd3_num1];
829  Lv2VacBwd_rO1[0] = Lv2VacBwd_R3;
830  Lv2VacBwd_rO1[1] = Lv2VacBwd_R3;
831  //<----------------
832  //------------> Policone part
833  double Lv2VacBwd_Z2[Lv2VacBwd3_num2];
834  Lv2VacBwd_Z2[0] = -Lv2VacBwd_D3 + Lv2VacBwd_L2;
835  Lv2VacBwd_Z2[1] = -Lv2VacBwd_D3;
836  Lv2VacBwd_Z2[2] = -Lv2VacBwd_D3 - Lv2VacBwd_L3;
837  double Lv2VacBwd_rI2[Lv2VacBwd3_num2];
838  for (int tmpn = 0; tmpn < Lv2VacBwd3_num2; tmpn++)
839  { Lv2VacBwd_rI2[tmpn] = 0.0; }
840  double Lv2VacBwd_rO2[Lv2VacBwd3_num2];
841  Lv2VacBwd_rO2[0] = Lv2VacBwd_R3;
842  Lv2VacBwd_rO2[1] = Lv2VacBwd_R4;
843  Lv2VacBwd_rO2[2] = Lv2VacBwd_R4;
844  //<--------------
845  //
846 
847  //define geometry
848  // Part 1
849  G4Tubs* geo_Lv2VacBwdPart1_1 = new G4Tubs("geo_Lv2VacBwdPart1_1_name", Lv2VacBwd1_rI1, Lv2VacBwd1_rO1, Lv2VacBwd1_Z1, 0, 2 * M_PI);
850  G4Tubs* geo_Lv2VacBwdPart1_2 = new G4Tubs("geo_Lv2VacBwdPart1_2_name", Lv2VacBwd1_rI2, Lv2VacBwd1_rO2, Lv2VacBwd1_Z2, 0, 2 * M_PI);
851  G4Transform3D transform_Lv2VacBwdPart1_2 = G4Translate3D(0., 0., 0.);
852  transform_Lv2VacBwdPart1_2 = transform_Lv2VacBwdPart1_2 * G4RotateY3D(Lv2VacBwd_A2 / 2.);
853  G4IntersectionSolid* geo_Lv2VacBwdPart1 = new G4IntersectionSolid("geo_Lv2VacBwdPart1_name", geo_Lv2VacBwdPart1_1,
854  geo_Lv2VacBwdPart1_2, transform_Lv2VacBwdPart1_2);
855  // Part 2
856  G4Tubs* geo_Lv2VacBwdPart2_1 = new G4Tubs("geo_Lv2VacBwdPart2_1_name", Lv2VacBwd2_rI1, Lv2VacBwd2_rO1, Lv2VacBwd2_Z1, 0, 2 * M_PI);
857  G4Tubs* geo_Lv2VacBwdPart2_2 = new G4Tubs("geo_Lv2VacBwdPart2_2_name", Lv2VacBwd2_rI2, Lv2VacBwd2_rO2, Lv2VacBwd2_Z2, 0, 2 * M_PI);
858  G4Transform3D transform_Lv2VacBwdPart2_2 = G4Translate3D(0., 0., 0.);
859  transform_Lv2VacBwdPart2_2 = transform_Lv2VacBwdPart2_2 * G4RotateY3D(-Lv2VacBwd_A2 / 2.);
860  G4IntersectionSolid* geo_Lv2VacBwdPart2 = new G4IntersectionSolid("geo_Lv2VacBwdPart2_name", geo_Lv2VacBwdPart2_1,
861  geo_Lv2VacBwdPart2_2, transform_Lv2VacBwdPart2_2);
862  // Part 3
863 // G4Polycone* geo_Lv2VacBwdPart3 = new G4Polycone("geo_Lv2VacBwdPart3", 0, 2 * M_PI, Lv2VacBwd3_num, Lv2VacBwd_Z, Lv2VacBwd_rI, Lv2VacBwd_rO);
864  G4Polycone* geo_Lv2VacBwdPart3_1 = new G4Polycone("geo_Lv2VacBwdPart3_1", 0, 2 * M_PI, Lv2VacBwd3_num1, Lv2VacBwd_Z1, Lv2VacBwd_rI1,
865  Lv2VacBwd_rO1);
866  G4Polycone* geo_Lv2VacBwdPart3_2 = new G4Polycone("geo_Lv2VacBwdPart3_2", 0, 2 * M_PI, Lv2VacBwd3_num2, Lv2VacBwd_Z2, Lv2VacBwd_rI2,
867  Lv2VacBwd_rO2);
868  G4Transform3D transform_Lv2VacBwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
869  transform_Lv2VacBwdPart3_1 = transform_Lv2VacBwdPart3_1 * G4RotateY3D(-Lv2VacBwd_A1 + A11);
870  G4UnionSolid* geo_Lv2VacBwdPart3 = new G4UnionSolid("geo_Lv2VacBwdPart3_name", geo_Lv2VacBwdPart3_2, geo_Lv2VacBwdPart3_1,
871  transform_Lv2VacBwdPart3_1);
872  // Part1+2+3
873  //tmp begin
874  G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(
875  2.*Lv2VacBwd_A1)) / 2. ,
876  0.,
877  -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.);
878  //G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(2.*Lv2VacBwd_A1)) / 2.05,
879  // 0.,
880  // -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.05);
881  transform_Lv2VacBwdPart1 = transform_Lv2VacBwdPart1 * G4RotateY3D(-Lv2VacBwd_A1 - Lv2VacBwd_A2);
882  //tmp end
883  //
884  G4Transform3D transform_Lv2VacBwdPart2 = G4Translate3D((Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * sin(2.*Lv2VacBwd_A1) ,
885  0.,
886  -(Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * cos(2.*Lv2VacBwd_A1));
887  transform_Lv2VacBwdPart2 = transform_Lv2VacBwdPart2 * G4RotateY3D(-2.*Lv2VacBwd_A1);
888  //
889  G4UnionSolid* geo_Lv2VacBwdxx = new G4UnionSolid("geo_Lv2VacBwdxx_name", geo_Lv2VacBwdPart3, geo_Lv2VacBwdPart1,
890  transform_Lv2VacBwdPart1);
891  G4UnionSolid* geo_Lv2VacBwdx = new G4UnionSolid("geo_Lv2VacBwdx_name", geo_Lv2VacBwdxx, geo_Lv2VacBwdPart2,
892  transform_Lv2VacBwdPart2);
893  // Intersection
894  G4Transform3D transform_Lv2VacBwd = G4Translate3D(0., 0., +Lv1TaBwd_D1 + Lv1TaBwd_L1 / 2.);
895  transform_Lv2VacBwd = transform_Lv2VacBwd * G4RotateY3D(+Lv2VacBwd_A1);
896  //
897  G4IntersectionSolid* geo_Lv2VacBwd = new G4IntersectionSolid("geo_Lv2VacBwd_name", geo_Lv1TaBwd, geo_Lv2VacBwdx,
898  transform_Lv2VacBwd);
899  G4LogicalVolume* logi_Lv2VacBwd = new G4LogicalVolume(geo_Lv2VacBwd, mat_Lv2VacBwd, "logi_Lv2VacBwd_name");
900  if (flag_limitStep) logi_Lv2VacBwd->SetUserLimits(new G4UserLimits(stepMax));
901 
902  //- put volume
903  setColor(*logi_Lv2VacBwd, "#CCCCCC");
904  //you must set this invisible, otherwise encounter segV.
905  setVisibility(*logi_Lv2VacBwd, false);
906  new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacBwd, "phys_Lv2VacBwd_name", logi_Lv1TaBwd, false, 0);
907 
908  //-
909 
912 
913  //get parameters from .xml file
914  prep = "AreaTubeFwd.";
915  //
916  const int AreaTubeFwd_num = 2;
917  //
918  double AreaTubeFwd_Z[AreaTubeFwd_num];
919  AreaTubeFwd_Z[0] = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
920  AreaTubeFwd_Z[1] = m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
921  //
922  double AreaTubeFwd_rI[AreaTubeFwd_num];
923  for (int i = 0; i < AreaTubeFwd_num; i++)
924  { AreaTubeFwd_rI[i] = 0.0; }
925  //
926  double AreaTubeFwd_rO[AreaTubeFwd_num];
927  AreaTubeFwd_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
928  AreaTubeFwd_rO[1] = AreaTubeFwd_rO[0];
929 
930  //define geometry
931  G4Polycone* geo_AreaTubeFwdpcon = new G4Polycone("geo_AreaTubeFwdpcon_name", 0, 2 * M_PI, AreaTubeFwd_num, AreaTubeFwd_Z,
932  AreaTubeFwd_rI, AreaTubeFwd_rO);
933 
934  //----------
935  //- Lv1TaLERUp
936 
937  //get parameters from .xml file
938  prep = "Lv1TaLERUp.";
939  //
940  double Lv1TaLERUp_A1 = m_config.getParameter(prep + "A1");
941  //
942  const int Lv1TaLERUp_num = 4;
943  //
944  double Lv1TaLERUp_Z[Lv1TaLERUp_num];
945  Lv1TaLERUp_Z[0] = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
946  Lv1TaLERUp_Z[1] = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
947  Lv1TaLERUp_Z[2] = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
948  Lv1TaLERUp_Z[3] = m_config.getParameter(prep + "L4") * Unit::cm / Unit::mm;
949  //
950  double Lv1TaLERUp_rI[Lv1TaLERUp_num];
951  for (int i = 0; i < Lv1TaLERUp_num; i++)
952  { Lv1TaLERUp_rI[i] = 0.0; }
953  //
954  double Lv1TaLERUp_rO[Lv1TaLERUp_num];
955  Lv1TaLERUp_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
956  Lv1TaLERUp_rO[1] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
957  Lv1TaLERUp_rO[2] = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
958  Lv1TaLERUp_rO[3] = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
959  //
960  string strMat_Lv1TaLERUp = m_config.getParameterStr(prep + "Material");
961  G4Material* mat_Lv1TaLERUp = Materials::get(strMat_Lv1TaLERUp);
962 
963  //define geometry
964  G4Polycone* geo_Lv1TaLERUppcon = new G4Polycone("geo_Lv1TaLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z, Lv1TaLERUp_rI,
965  Lv1TaLERUp_rO);
966  G4Transform3D transform_AreaTubeFwdForLER = G4Translate3D(0., 0., 0.);
967  transform_AreaTubeFwdForLER = transform_AreaTubeFwdForLER * G4RotateY3D(-Lv1TaLERUp_A1);
968  G4IntersectionSolid* geo_Lv1TaLERUp = new G4IntersectionSolid("geo_Lv1TaLERUp_name", geo_Lv1TaLERUppcon, geo_AreaTubeFwdpcon,
969  transform_AreaTubeFwdForLER);
970  G4LogicalVolume* logi_Lv1TaLERUp = new G4LogicalVolume(geo_Lv1TaLERUp, mat_Lv1TaLERUp, "logi_Lv1TaLERUp_name");
971 
972  //- put volume
973  setColor(*logi_Lv1TaLERUp, "#0000CC");
974  G4Transform3D transform_Lv1TaLERUp = G4Translate3D(0., 0., 0.);
975  transform_Lv1TaLERUp = transform_Lv1TaLERUp * G4RotateY3D(Lv1TaLERUp_A1);
976  new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1TaLERUp, "phys_Lv1TaLERUp_name", &topVolume, false, 0);
977 
978  //-
979  //----------
980 
981  //----------
982  //- Lv2VacLERUp
983 
984  //get parameters from .xml file
985  prep = "Lv2VacLERUp.";
986  //
987  double Lv2VacLERUp_rO[Lv1TaLERUp_num];
988  Lv2VacLERUp_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
989  Lv2VacLERUp_rO[1] = Lv2VacLERUp_rO[0];
990  Lv2VacLERUp_rO[2] = Lv2VacLERUp_rO[0];
991  Lv2VacLERUp_rO[3] = Lv2VacLERUp_rO[0];
992  //
993  string strMat_Lv2VacLERUp = m_config.getParameterStr(prep + "Material");
994  G4Material* mat_Lv2VacLERUp = Materials::get(strMat_Lv2VacLERUp);
995 
996  //define geometry
997  G4Polycone* geo_Lv2VacLERUppcon = new G4Polycone("geo_Lv2VacLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z,
998  Lv1TaLERUp_rI, Lv2VacLERUp_rO);
999  G4IntersectionSolid* geo_Lv2VacLERUp = new G4IntersectionSolid("geo_Lv2VacLERUp_name", geo_Lv2VacLERUppcon, geo_AreaTubeFwdpcon,
1000  transform_AreaTubeFwdForLER);
1001  G4LogicalVolume* logi_Lv2VacLERUp = new G4LogicalVolume(geo_Lv2VacLERUp, mat_Lv2VacLERUp, "logi_Lv2VacLERUp_name");
1002  if (flag_limitStep) logi_Lv2VacLERUp->SetUserLimits(new G4UserLimits(stepMax));
1003 
1004 
1005  //- put volume
1006  setColor(*logi_Lv2VacLERUp, "#CCCCCC");
1007  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERUp, "phys_Lv2VacLERUp_name", logi_Lv1TaLERUp, false, 0);
1008  //-
1009  //----------
1010 
1011  //----------
1012  //- Lv1TaHERDwn
1013 
1014  //get parameters from .xml file
1015  prep = "Lv1TaHERDwn.";
1016  //
1017  double Lv1TaHERDwn_A1 = m_config.getParameter(prep + "A1");
1018  //
1019  const int Lv1TaHERDwn_num = 4;
1020  //
1021  double Lv1TaHERDwn_Z[Lv1TaHERDwn_num];
1022  Lv1TaHERDwn_Z[0] = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
1023  Lv1TaHERDwn_Z[1] = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
1024  Lv1TaHERDwn_Z[2] = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
1025  Lv1TaHERDwn_Z[3] = m_config.getParameter(prep + "L4") * Unit::cm / Unit::mm;
1026  //
1027  double Lv1TaHERDwn_rI[Lv1TaHERDwn_num];
1028  for (int i = 0; i < Lv1TaHERDwn_num; i++)
1029  { Lv1TaHERDwn_rI[i] = 0.0; }
1030  //
1031  double Lv1TaHERDwn_rO[Lv1TaHERDwn_num];
1032  Lv1TaHERDwn_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1033  Lv1TaHERDwn_rO[1] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
1034  Lv1TaHERDwn_rO[2] = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
1035  Lv1TaHERDwn_rO[3] = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
1036  //
1037  string strMat_Lv1TaHERDwn = m_config.getParameterStr(prep + "Material");
1038  G4Material* mat_Lv1TaHERDwn = Materials::get(strMat_Lv1TaHERDwn);
1039 
1040  //define geometry
1041  G4Polycone* geo_Lv1TaHERDwnpcon = new G4Polycone("geo_Lv1TaHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1042  Lv1TaHERDwn_rI, Lv1TaHERDwn_rO);
1043  G4Transform3D transform_AreaTubeFwdForHER = G4Translate3D(0., 0., 0.);
1044  transform_AreaTubeFwdForHER = transform_AreaTubeFwdForHER * G4RotateY3D(-Lv1TaHERDwn_A1);
1045  G4IntersectionSolid* geo_Lv1TaHERDwn = new G4IntersectionSolid("", geo_Lv1TaHERDwnpcon, geo_AreaTubeFwdpcon,
1046  transform_AreaTubeFwdForHER);
1047  G4LogicalVolume* logi_Lv1TaHERDwn = new G4LogicalVolume(geo_Lv1TaHERDwn, mat_Lv1TaHERDwn, "logi_Lv1TaHERDwn_name");
1048 
1049  //- put volume
1050  setColor(*logi_Lv1TaHERDwn, "#00CC00");
1051  G4Transform3D transform_Lv1TaHERDwn = G4Translate3D(0., 0., 0.);
1052  transform_Lv1TaHERDwn = transform_Lv1TaHERDwn * G4RotateY3D(Lv1TaHERDwn_A1);
1053  new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1TaHERDwn, "phys_Lv1TaHERDwn_name", &topVolume, false, 0);
1054 
1055  //-
1056  //----------
1057 
1058  //----------
1059  //- Lv2VacHERDwn
1060 
1061  //get parameters from .xml file
1062  prep = "Lv2VacHERDwn.";
1063  //
1064  double Lv2VacHERDwn_rO[Lv1TaHERDwn_num];
1065  Lv2VacHERDwn_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1066  Lv2VacHERDwn_rO[1] = Lv2VacHERDwn_rO[0];
1067  Lv2VacHERDwn_rO[2] = Lv2VacHERDwn_rO[0];
1068  Lv2VacHERDwn_rO[3] = Lv2VacHERDwn_rO[0];
1069  //
1070  string strMat_Lv2VacHERDwn = m_config.getParameterStr(prep + "Material");
1071  G4Material* mat_Lv2VacHERDwn = Materials::get(strMat_Lv2VacHERDwn);
1072 
1073  //define geometry
1074  G4Polycone* geo_Lv2VacHERDwnpcon = new G4Polycone("geo_Lv2VacHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1075  Lv1TaHERDwn_rI, Lv2VacHERDwn_rO);
1076  G4IntersectionSolid* geo_Lv2VacHERDwn = new G4IntersectionSolid("", geo_Lv2VacHERDwnpcon, geo_AreaTubeFwdpcon,
1077  transform_AreaTubeFwdForHER);
1078  G4LogicalVolume* logi_Lv2VacHERDwn = new G4LogicalVolume(geo_Lv2VacHERDwn, mat_Lv2VacHERDwn, "logi_Lv2VacHERDwn_name");
1079  if (flag_limitStep) logi_Lv2VacHERDwn->SetUserLimits(new G4UserLimits(stepMax));
1080 
1081  //- put volume
1082  setColor(*logi_Lv2VacHERDwn, "#CCCCCC");
1083  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERDwn, "phys_Lv2VacHERDwn_name", logi_Lv1TaHERDwn, false, 0);
1084 
1085  //-
1086  //----------
1087 
1090 
1093 
1094  //get parameters from .xml file
1095  prep = "AreaTubeBwd.";
1096  //
1097  const int AreaTubeBwd_num = 2;
1098  //
1099  double AreaTubeBwd_Z[AreaTubeBwd_num];
1100  AreaTubeBwd_Z[0] = -m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
1101  AreaTubeBwd_Z[1] = -m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
1102  //
1103  double AreaTubeBwd_rI[AreaTubeBwd_num];
1104  for (int i = 0; i < AreaTubeBwd_num; i++)
1105  { AreaTubeBwd_rI[i] = 0.0; }
1106  //
1107  double AreaTubeBwd_rO[AreaTubeBwd_num];
1108  AreaTubeBwd_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1109  AreaTubeBwd_rO[1] = AreaTubeBwd_rO[0];
1110 
1111  //define geometry
1112  G4Polycone* geo_AreaTubeBwdpcon = new G4Polycone("geo_AreaTubeBwdpcon_name", 0, 2 * M_PI, AreaTubeBwd_num, AreaTubeBwd_Z,
1113  AreaTubeBwd_rI, AreaTubeBwd_rO);
1114 
1115  //----------
1116  //- Lv1TaHERUp
1117 
1118  //get parameters from .xml file
1119  prep = "Lv1TaHERUp.";
1120  //
1121  double Lv1TaHERUp_A1 = m_config.getParameter(prep + "A1");
1122  //
1123  const int Lv1TaHERUp_num = 4;
1124  //
1125  double Lv1TaHERUp_Z[Lv1TaHERUp_num];
1126  Lv1TaHERUp_Z[0] = -m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
1127  Lv1TaHERUp_Z[1] = -m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
1128  Lv1TaHERUp_Z[2] = -m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
1129  Lv1TaHERUp_Z[3] = -m_config.getParameter(prep + "L4") * Unit::cm / Unit::mm;
1130  //
1131  double Lv1TaHERUp_rI[Lv1TaHERUp_num];
1132  for (int i = 0; i < Lv1TaHERUp_num; i++)
1133  { Lv1TaHERUp_rI[i] = 0.0; }
1134  //
1135  double Lv1TaHERUp_rO[Lv1TaHERUp_num];
1136  Lv1TaHERUp_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1137  Lv1TaHERUp_rO[1] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
1138  Lv1TaHERUp_rO[2] = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
1139  Lv1TaHERUp_rO[3] = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
1140  //
1141  string strMat_Lv1TaHERUp = m_config.getParameterStr(prep + "Material");
1142  G4Material* mat_Lv1TaHERUp = Materials::get(strMat_Lv1TaHERUp);
1143 
1144  //define geometry
1145  G4Polycone* geo_Lv1TaHERUppcon = new G4Polycone("geo_Lv1TaHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z, Lv1TaHERUp_rI,
1146  Lv1TaHERUp_rO);
1147  G4Transform3D transform_AreaTubeBwdForHER = G4Translate3D(0., 0., 0.);
1148  transform_AreaTubeBwdForHER = transform_AreaTubeBwdForHER * G4RotateY3D(-Lv1TaHERUp_A1);
1149  G4IntersectionSolid* geo_Lv1TaHERUp = new G4IntersectionSolid("", geo_Lv1TaHERUppcon, geo_AreaTubeBwdpcon,
1150  transform_AreaTubeBwdForHER);
1151  G4LogicalVolume* logi_Lv1TaHERUp = new G4LogicalVolume(geo_Lv1TaHERUp, mat_Lv1TaHERUp, "logi_Lv1TaHERUp_name");
1152 
1153  //- put volume
1154  setColor(*logi_Lv1TaHERUp, "#00CC00");
1155  G4Transform3D transform_Lv1TaHERUp = G4Translate3D(0., 0., 0.);
1156  transform_Lv1TaHERUp = transform_Lv1TaHERUp * G4RotateY3D(Lv1TaHERUp_A1);
1157  new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1TaHERUp, "phys_Lv1TaHERUp_name", &topVolume, false, 0);
1158 
1159  //-
1160  //----------
1161 
1162  //----------
1163  //- Lv2VacHERUp
1164 
1165  //get parameters from .xml file
1166  prep = "Lv2VacHERUp.";
1167  //
1168  double Lv2VacHERUp_rO[Lv1TaHERUp_num];
1169  Lv2VacHERUp_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1170  Lv2VacHERUp_rO[1] = Lv2VacHERUp_rO[0];
1171  Lv2VacHERUp_rO[2] = Lv2VacHERUp_rO[0];
1172  Lv2VacHERUp_rO[3] = Lv2VacHERUp_rO[0];
1173  //
1174  string strMat_Lv2VacHERUp = m_config.getParameterStr(prep + "Material");
1175  G4Material* mat_Lv2VacHERUp = Materials::get(strMat_Lv2VacHERUp);
1176 
1177  //define geometry
1178  G4Polycone* geo_Lv2VacHERUppcon = new G4Polycone("geo_Lv2VacHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z,
1179  Lv1TaHERUp_rI, Lv2VacHERUp_rO);
1180  G4IntersectionSolid* geo_Lv2VacHERUp = new G4IntersectionSolid("", geo_Lv2VacHERUppcon, geo_AreaTubeBwdpcon,
1181  transform_AreaTubeFwdForHER);
1182  G4LogicalVolume* logi_Lv2VacHERUp = new G4LogicalVolume(geo_Lv2VacHERUp, mat_Lv2VacHERUp, "logi_Lv2VacHERUp_name");
1183  if (flag_limitStep) logi_Lv2VacHERUp->SetUserLimits(new G4UserLimits(stepMax));
1184 
1185  //- put volume
1186  setColor(*logi_Lv2VacHERUp, "#CCCCCC");
1187  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERUp, "phys_Lv2VacHERUp_name", logi_Lv1TaHERUp, false, 0);
1188 
1189  //-
1190  //----------
1191 
1192  //----------
1193  //- Lv1TaLERDwn
1194 
1195  //get parameters from .xml file
1196  prep = "Lv1TaLERDwn.";
1197  //
1198  double Lv1TaLERDwn_A1 = m_config.getParameter(prep + "A1");
1199  //
1200  const int Lv1TaLERDwn_num = 4;
1201  //
1202  double Lv1TaLERDwn_Z[Lv1TaLERDwn_num];
1203  Lv1TaLERDwn_Z[0] = -m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
1204  Lv1TaLERDwn_Z[1] = -m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
1205  Lv1TaLERDwn_Z[2] = -m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
1206  Lv1TaLERDwn_Z[3] = -m_config.getParameter(prep + "L4") * Unit::cm / Unit::mm;
1207  //
1208  double Lv1TaLERDwn_rI[Lv1TaLERDwn_num];
1209  for (int i = 0; i < Lv1TaLERDwn_num; i++)
1210  { Lv1TaLERDwn_rI[i] = 0.0; }
1211  //
1212  double Lv1TaLERDwn_rO[Lv1TaLERDwn_num];
1213  Lv1TaLERDwn_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1214  Lv1TaLERDwn_rO[1] = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
1215  Lv1TaLERDwn_rO[2] = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
1216  Lv1TaLERDwn_rO[3] = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
1217  //
1218  string strMat_Lv1TaLERDwn = m_config.getParameterStr(prep + "Material");
1219  G4Material* mat_Lv1TaLERDwn = Materials::get(strMat_Lv1TaLERDwn);
1220 
1221  //define geometry
1222  G4Polycone* geo_Lv1TaLERDwnpcon = new G4Polycone("geo_Lv1TaLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1223  Lv1TaLERDwn_rI, Lv1TaLERDwn_rO);
1224  G4Transform3D transform_AreaTubeBwdForLER = G4Translate3D(0., 0., 0.);
1225  transform_AreaTubeBwdForLER = transform_AreaTubeBwdForLER * G4RotateY3D(-Lv1TaLERDwn_A1);
1226  G4IntersectionSolid* geo_Lv1TaLERDwn = new G4IntersectionSolid("", geo_Lv1TaLERDwnpcon, geo_AreaTubeBwdpcon,
1227  transform_AreaTubeBwdForLER);
1228  G4LogicalVolume* logi_Lv1TaLERDwn = new G4LogicalVolume(geo_Lv1TaLERDwn, mat_Lv1TaLERDwn, "logi_Lv1TaLERDwn_name");
1229 
1230  //- put volume
1231  setColor(*logi_Lv1TaLERDwn, "#0000CC");
1232  G4Transform3D transform_Lv1TaLERDwn = G4Translate3D(0., 0., 0.);
1233  transform_Lv1TaLERDwn = transform_Lv1TaLERDwn * G4RotateY3D(Lv1TaLERDwn_A1);
1234  new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1TaLERDwn, "phys_Lv1TaLERDwn_name", &topVolume, false, 0);
1235 
1236  //-
1237  //----------
1238 
1239  //----------
1240  //- Lv2VacLERDwn
1241 
1242  //get parameters from .xml file
1243  prep = "Lv2VacLERDwn.";
1244  //
1245  double Lv2VacLERDwn_rO[Lv1TaLERDwn_num];
1246  Lv2VacLERDwn_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1247  Lv2VacLERDwn_rO[1] = Lv2VacLERDwn_rO[0];
1248  Lv2VacLERDwn_rO[2] = Lv2VacLERDwn_rO[0];
1249  Lv2VacLERDwn_rO[3] = Lv2VacLERDwn_rO[0];
1250  //
1251  string strMat_Lv2VacLERDwn = m_config.getParameterStr(prep + "Material");
1252  G4Material* mat_Lv2VacLERDwn = Materials::get(strMat_Lv2VacLERDwn);
1253 
1254  //define geometry
1255  G4Polycone* geo_Lv2VacLERDwnpcon = new G4Polycone("geo_Lv2VacLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1256  Lv1TaLERDwn_rI, Lv2VacLERDwn_rO);
1257  G4IntersectionSolid* geo_Lv2VacLERDwn = new G4IntersectionSolid("", geo_Lv2VacLERDwnpcon, geo_AreaTubeBwdpcon,
1258  transform_AreaTubeBwdForLER);
1259  G4LogicalVolume* logi_Lv2VacLERDwn = new G4LogicalVolume(geo_Lv2VacLERDwn, mat_Lv2VacLERDwn, "logi_Lv2VacLERDwn_name");
1260  if (flag_limitStep) logi_Lv2VacLERDwn->SetUserLimits(new G4UserLimits(stepMax));
1261 
1262  //- put volume
1263  setColor(*logi_Lv2VacLERDwn, "#CCCCCC");
1264  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERDwn, "phys_Lv2VacLERDwn_name", logi_Lv1TaLERDwn, false, 0);
1265 
1266 
1267  //----------
1268  // Cu flange
1269 
1270  G4IntersectionSolid* geo_CuFlangeFwd_x2 = new G4IntersectionSolid("geo_CuFlangeFwd_x2_name", geo_AreaTubeFwdpcon, geo_Flange,
1271  G4Translate3D(0, 0, Flange_D + Flange_T * 2));
1272  G4SubtractionSolid* geo_CuFlangeFwd_x = new G4SubtractionSolid("geo_CuFlangeFwd_x_name", geo_CuFlangeFwd_x2, geo_Lv1TaLERUp,
1273  transform_Lv1TaLERUp);
1274  G4SubtractionSolid* geo_CuFlangeFwd = new G4SubtractionSolid("geo_CuFlangeFwd_name", geo_CuFlangeFwd_x, geo_Lv1TaHERDwn,
1275  transform_Lv1TaHERDwn);
1276 
1277  G4LogicalVolume* logi_CuFlangeFwd = new G4LogicalVolume(geo_CuFlangeFwd, mat_Lv1TaLERUp, "logi_CuFlangeFwd_name");
1278 
1279  //- put volume
1280  setColor(*logi_CuFlangeFwd, "#CCCCCC");
1281  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeFwd, "phys_CuFlangeFwd_name", &topVolume, false, 0);
1282 
1283 
1284 
1285 
1286  G4IntersectionSolid* geo_CuFlangeBwd_x2 = new G4IntersectionSolid("geo_CuFlangeBwd_x2_name", geo_AreaTubeBwdpcon, geo_Flange,
1287  G4Translate3D(0, 0, -Flange_D - Flange_T * 2));
1288  G4SubtractionSolid* geo_CuFlangeBwd_x = new G4SubtractionSolid("geo_CuFlangeBwd_x_name", geo_CuFlangeBwd_x2, geo_Lv1TaHERUp,
1289  transform_Lv1TaHERUp);
1290  G4SubtractionSolid* geo_CuFlangeBwd = new G4SubtractionSolid("geo_CuFlangeBwd_name", geo_CuFlangeBwd_x, geo_Lv1TaLERDwn,
1291  transform_Lv1TaLERDwn);
1292 
1293  G4LogicalVolume* logi_CuFlangeBwd = new G4LogicalVolume(geo_CuFlangeBwd, mat_Lv1TaLERUp, "logi_CuFlangeBwd_name");
1294 
1295  //- put volume
1296  setColor(*logi_CuFlangeBwd, "#CCCCCC");
1297  new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeBwd, "phys_CuFlangeBwd_name", &topVolume, false, 0);
1298 
1299 
1300 
1301 
1302  //logi_Lv3AuCoat->SetSensitiveDetector(new BkgSensitiveDetector("IR", 11));
1303  //logi_Lv1TaFwd->SetSensitiveDetector(new BkgSensitiveDetector("IR", 12));
1304  //logi_Lv1TaBwd->SetSensitiveDetector(new BkgSensitiveDetector("IR", 13));
1305  //logi_Lv1TaLERUp->SetSensitiveDetector(new BkgSensitiveDetector("IR", 14));
1306  //logi_Lv1TaHERDwn->SetSensitiveDetector(new BkgSensitiveDetector("IR", 15));
1307  //logi_Lv1TaHERUp->SetSensitiveDetector(new BkgSensitiveDetector("IR", 16));
1308  //logi_Lv1TaLERDwn->SetSensitiveDetector(new BkgSensitiveDetector("IR", 17));
1309  //m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", 11)));
1310  //logi_Lv3AuCoat->SetSensitiveDetector(m_sensitive.back());
1311  //m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", 12)));
1312  //logi_Lv1TaFwd->SetSensitiveDetector(m_sensitive.back());
1313  //m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", 13)));
1314  //logi_Lv1TaBwd->SetSensitiveDetector(m_sensitive.back());
1315  //m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", 14)));
1316  //logi_Lv1TaLERUp->SetSensitiveDetector(m_sensitive.back());
1317  //m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", 15)));
1318  //logi_Lv1TaHERDwn->SetSensitiveDetector(m_sensitive.back());
1319  //m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", 16)));
1320  //logi_Lv1TaHERUp->SetSensitiveDetector(m_sensitive.back());
1321  //m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", 17)));
1322  //logi_Lv1TaLERDwn->SetSensitiveDetector(m_sensitive.back());
1323 
1324 
1325 
1326  //-
1327  //----------
1328 
1331  }
1332  }
1334 }
Belle2::geometry::setColor
void setColor(G4LogicalVolume &volume, const std::string &color)
Set the color of a logical volume.
Definition: utilities.cc:107
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::geometry::setVisibility
void setVisibility(G4LogicalVolume &volume, bool visible)
Helper function to quickly set the visibility of a given volume.
Definition: utilities.cc:115
Belle2::ir::SensitiveDetector
The IR Sensitive Detector class.
Definition: SensitiveDetector.h:54
Belle2::geometry::GeometryTypes
GeometryTypes
Flag indiciating the type of geometry to be used.
Definition: GeometryManager.h:39