Belle II Software  release-06-01-15
GeoBeamPipeCreator Class Reference

The creator for the BeamPipe geometry of the Belle II detector. More...

#include <GeoBeamPipeCreator.h>

Inheritance diagram for GeoBeamPipeCreator:
Collaboration diagram for GeoBeamPipeCreator:

Public Member Functions

 GeoBeamPipeCreator ()
 Constructor of the GeoBeamPipeCreator class.
 
virtual ~GeoBeamPipeCreator ()
 The destructor of the GeoBeamPipeCreator class.
 
virtual void create (const GearDir &content, G4LogicalVolume &topVolume, geometry::GeometryTypes type) override
 Creates the ROOT Objects for the BeamPipe geometry. More...
 
virtual void createPayloads (const GearDir &content, const IntervalOfValidity &iov) override
 creates DB payload for BeamPipeGeo class
 
virtual void createFromDB (const std::string &name, G4LogicalVolume &topVolume, geometry::GeometryTypes type) override
 Create the geometry from the Database.
 
 BELLE2_DEFINE_EXCEPTION (DBNotImplemented, "Cannot create geometry from Database.")
 Exception that will be thrown in createFromDB if member is not yet implemented by creator.
 

Protected Attributes

std::vector< SensitiveDetector * > m_sensitive
 Sensitive detector.
 
BeamPipeGeo m_config
 geometry parameters object
 

Private Member Functions

BeamPipeGeo createConfiguration (const GearDir &param)
 Reads IR geometry parameters from the xml files and createst DB class BeamPipeGeo.
 
void createGeometry (G4LogicalVolume &topVolume, geometry::GeometryTypes type)
 Create detector geometry. More...
 

Detailed Description

The creator for the BeamPipe geometry of the Belle II detector.


Definition at line 32 of file GeoBeamPipeCreator.h.

Member Function Documentation

◆ create()

virtual void create ( const GearDir content,
G4LogicalVolume &  topVolume,
geometry::GeometryTypes  type 
)
inlineoverridevirtual

Creates the ROOT Objects for the BeamPipe geometry.

Parameters
contentA reference to the content part of the parameter description, which should to be used to create the ROOT objects.
topVolumeGeant4 logical top volume.
typeGeometry type.

Implements CreatorBase.

Definition at line 67 of file GeoBeamPipeCreator.h.

68  {
69  m_config = createConfiguration(content);
70 
71  // override geometry configuration from the DB
72  DBStore::Instance().addConstantOverride("BeamPipeGeo", new BeamPipeGeo(m_config));
73 
74  createGeometry(topVolume, type);
75  }
BeamPipeGeo createConfiguration(const GearDir &param)
Reads IR geometry parameters from the xml files and createst DB class BeamPipeGeo.
void createGeometry(G4LogicalVolume &topVolume, geometry::GeometryTypes type)
Create detector geometry.
BeamPipeGeo m_config
geometry parameters object
static DBStore & Instance()
Instance of a singleton DBStore.
Definition: DBStore.cc:26
void addConstantOverride(const std::string &name, TObject *obj, bool oneRun=false)
Add constant override payload.
Definition: DBStore.cc:194

◆ createGeometry()

void createGeometry ( G4LogicalVolume &  topVolume,
geometry::GeometryTypes  type 
)
private

Create detector geometry.

Parameters
topVolumeGeant4 logical top volume.
typeGeometry type.

Definition at line 70 of file GeoBeamPipeCreator.cc.

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

The documentation for this class was generated from the following files: