Belle II Software development
GeoBeamPipeCreator Class Reference

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

#include <GeoBeamPipeCreator.h>

Inheritance diagram for GeoBeamPipeCreator:
CreatorBase

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.
 
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.
 

Detailed Description

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


Definition at line 32 of file GeoBeamPipeCreator.h.

Constructor & Destructor Documentation

◆ GeoBeamPipeCreator()

Constructor of the GeoBeamPipeCreator class.

Definition at line 55 of file GeoBeamPipeCreator.cc.

56 {
57 }

◆ ~GeoBeamPipeCreator()

~GeoBeamPipeCreator ( )
virtual

The destructor of the GeoBeamPipeCreator class.

Definition at line 59 of file GeoBeamPipeCreator.cc.

60 {
61 //Delete all sensitive detectors
62 for (SensitiveDetector* sensitive : m_sensitive) {
63 delete sensitive;
64 }
65 m_sensitive.clear();
66 }
std::vector< SensitiveDetector * > m_sensitive
Sensitive detector.

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 {
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:202

◆ createConfiguration()

BeamPipeGeo createConfiguration ( const GearDir param)
inlineprivate

Reads IR geometry parameters from the xml files and createst DB class BeamPipeGeo.

Definition at line 36 of file GeoBeamPipeCreator.h.

37 {
38 BeamPipeGeo BeamPipeGeoConfig;
39 BeamPipeGeoConfig.initialize(param);
40 return BeamPipeGeoConfig;
41 }

◆ createFromDB()

virtual void createFromDB ( const std::string &  name,
G4LogicalVolume &  topVolume,
geometry::GeometryTypes  type 
)
inlineoverridevirtual

Create the geometry from the Database.

Reimplemented from CreatorBase.

Definition at line 86 of file GeoBeamPipeCreator.h.

87 {
88 DBObjPtr<BeamPipeGeo> dbObj;
89 if (!dbObj) {
90 // Check that we found the object and if not report the problem
91 B2FATAL("No configuration for " << name << " found.");
92 }
93 m_config = *dbObj;
94 createGeometry(topVolume, type);
95 }

◆ createGeometry()

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

Create detector geometry.

Parameters
topVolumeGeant4 logical top volume.
typeGeometry type.

Definition at line 68 of file GeoBeamPipeCreator.cc.

69 {
70
71 //########## Index ##########
72 //
73 // "IP pipe" -9.0 cm to 13.85 cm
74 // Lv1SUS
75 // Lv2OutBe
76 // Lv2InBe
77 // Lv2Paraf
78 // Lv2Vacuum
79 // Lv3AuCoat
80 // "crotch pipe Forward " 13.85 cm to 40.0 cm
81 // Lv1TaFwd
82 // Lv2VacFwd
83 // "crotch pipe Backward " -9.0 cm to -40.0 cm
84 // Lv1TaBwd
85 // Lv2VacBwd
86 // "beam pipe more Forward " 40.0 cm to 63.35 cm
87 // Lv1TaLERUp
88 // Lv2VacLERUp
89 // Lv1TaHERDwn
90 // Lv2VacHERDwn
91 // "beam pipe more Backward " -40.0 cm to -62.725 cm
92 // Lv1TaHERUp
93 // Lv2VacHERUp
94 // Lv1TaLERDwn
95 // Lv2VacLERDwn
96 // Tangusten End Mounts
97 // PXDMountFwd
98 // PXDMountFixtureFwd
99 // PXDMountBwd
100 // PXDMountFixtureBwd
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 + (boost::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 + (boost::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 + (boost::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 double Lv1TaFwd_aR1 = m_config.getParameter(prep + "aR1") * Unit::cm / Unit::mm;
578 double Lv1TaFwd_aR2 = m_config.getParameter(prep + "aR2") * Unit::cm / Unit::mm;
579 double Lv1TaFwd_aL1 = m_config.getParameter(prep + "aL1") * Unit::cm / Unit::mm;
580 double Lv1TaFwd_aL2 = m_config.getParameter(prep + "aL2") * Unit::cm / Unit::mm;
581 double Lv1TaFwd_aL3 = m_config.getParameter(prep + "aL3") * Unit::cm / Unit::mm;
582 double Lv1TaFwd_bL1 = Lv1TaFwd_L1 - Lv1TaFwd_aL1 - Lv1TaFwd_aL2 - Lv1TaFwd_aL3;
583 double Lv1TaFwd_bL2 = m_config.getParameter(prep + "bL2") * Unit::cm / Unit::mm;
584 double Lv1TaFwd_bL3 = m_config.getParameter(prep + "bL3") * Unit::cm / Unit::mm;
585 //
586 string strMat_Lv1TaFwd = m_config.getParameterStr(prep + "Material");
587 G4Material* mat_Lv1TaFwd = Materials::get(strMat_Lv1TaFwd);
588
589 //define geometry
590 //G4Trd* geo_Lv1TaFwd_xx = new G4Trd("geo_Lv1TaFwd_xx_name", Lv1TaFwd_L2, Lv1TaFwd_L3, Lv1TaFwd_T1, Lv1TaFwd_T1, Lv1TaFwd_L1 / 2.0);
591 double Lv1TaFwd_aR[4] = {Lv1TaFwd_aR1, Lv1TaFwd_aR1, Lv1TaFwd_aR2, Lv1TaFwd_aR2};
592 double Lv1TaFwd_ar[4] = {0, 0, 0, 0};
593 double Lv1TaFwd_aL[4] = { -Lv1TaFwd_L1 / 2.0 + 0,
594 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1,
595 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2,
596 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3
597 };
598 G4VSolid* geo_Lv1TaFwd_a = new G4Polycone("geo_Lv1TaFwd_a_name", 0, 2 * M_PI, 4, Lv1TaFwd_aL, Lv1TaFwd_ar, Lv1TaFwd_aR);
599 G4VSolid* geo_Lv1TaFwd_b = new G4Trd("geo_Lv1TaFwd_b_name", Lv1TaFwd_bL2, Lv1TaFwd_bL3, Lv1TaFwd_T1, Lv1TaFwd_T1,
600 Lv1TaFwd_bL1 / 2.0);
601 G4VSolid* geo_Lv1TaFwd_c = new G4Box("geo_Lv1TaFwd_c_name", 200, Lv1TaFwd_T1, (Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) / 2.0);
602 G4VSolid* geo_Lv1TaFwd_d = new G4IntersectionSolid("geo_Lv1TaFwd_d_name", geo_Lv1TaFwd_a, geo_Lv1TaFwd_c, G4Translate3D(0, 0,
603 -Lv1TaFwd_L1 / 2.0 + (Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) / 2.0));
604 G4VSolid* geo_Lv1TaFwd_xx = new G4UnionSolid("geo_Lv1TaFwd_xx_name", geo_Lv1TaFwd_d, geo_Lv1TaFwd_b, G4Translate3D(0, 0,
605 Lv1TaFwd_L1 / 2.0 - Lv1TaFwd_bL1 / 2.0));
606 G4UnionSolid* geo_Lv1TaFwd_x
607 = new G4UnionSolid("geo_Lv1TaFwd_x_name", geo_Lv1TaFwd_xx, geo_Flange,
608 G4Translate3D(0, 0, Flange_D - (Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
609
610 //===MODIFY ME!!===
611 //avoid overlap with HeavyMetalShield
612 double HMS_Z[4] = {350, 410, 450, 482};
613 double HMS_rI[4] = {35.5, 35.5, 42.5, 42.5};
614 double HMS_rO[4] = {100, 100, 100, 100};
615 G4Polycone* geo_HMS = new G4Polycone("geo_HMS_name", 0, 2 * M_PI, 4, HMS_Z, HMS_rI, HMS_rO);
616 G4SubtractionSolid* geo_Lv1TaFwd = new G4SubtractionSolid("geo_Lv1TaFwd_name", geo_Lv1TaFwd_x, geo_HMS,
617 G4Translate3D(0, 0, -(Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
618
619 G4LogicalVolume* logi_Lv1TaFwd = new G4LogicalVolume(geo_Lv1TaFwd, mat_Lv1TaFwd, "logi_Lv1TaFwd_name");
620
621 //- put volume at (0.,0.,D1 + L1/2)
622 setColor(*logi_Lv1TaFwd, "#333333");
623 new G4PVPlacement(0, G4ThreeVector(0, 0, Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0), logi_Lv1TaFwd, "phys_Lv1TaFwd_name", &topVolume, false,
624 0);
625
626
627 //----------
628 //- Lv2VacFwd
629
630 //get parameters from .xml file
631 prep = "Lv2VacFwd.";
632 //
633 double Lv2VacFwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
634 double Lv2VacFwd_D2 = m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
635 double Lv2VacFwd_D3 = m_config.getParameter(prep + "D3") * Unit::cm / Unit::mm;
636 double Lv2VacFwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
637 double Lv2VacFwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
638 double Lv2VacFwd_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
639 double Lv2VacFwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
640 double Lv2VacFwd_R2 = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
641 double Lv2VacFwd_R3 = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
642 double Lv2VacFwd_R4 = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
643 double Lv2VacFwd_A1 = m_config.getParameter(prep + "A1");
644 double Lv2VacFwd_A2 = m_config.getParameter(prep + "A2");
645 //
646 string strMat_Lv2VacFwd = m_config.getParameterStr(prep + "Material");
647 G4Material* mat_Lv2VacFwd = Materials::get(strMat_Lv2VacFwd);
648 //
649 // Part 1
650 double Lv2VacFwd1_Z1 = sqrt(Lv2VacFwd_D1 * Lv2VacFwd_D1 + Lv2VacFwd_D2 * Lv2VacFwd_D2 - 2.*Lv2VacFwd_D1 * Lv2VacFwd_D2 * cos(
651 Lv2VacFwd_A1));
652 double Lv2VacFwd1_rI1 = 0.0;
653 double Lv2VacFwd1_rO1 = Lv2VacFwd_R1;
654 //
655 double Lv2VacFwd1_Z2 = (Lv2VacFwd1_Z1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
656 double Lv2VacFwd1_rI2 = 0.0;
657 double Lv2VacFwd1_rO2 = 2 * Lv2VacFwd_R1;
658 // Part 2
659 double Lv2VacFwd2_Z1 = Lv2VacFwd_L1;
660 double Lv2VacFwd2_rI1 = 0.0;
661 double Lv2VacFwd2_rO1 = Lv2VacFwd_R2;
662 //
663 double Lv2VacFwd2_Z2 = (Lv2VacFwd_L1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
664 double Lv2VacFwd2_rI2 = 0.0;
665 double Lv2VacFwd2_rO2 = 2 * Lv2VacFwd_R2;
666 // Part 3
667 const int Lv2VacFwd3_num1 = 2; // Cylindrical part
668 const int Lv2VacFwd3_num2 = 3; // Policone part
669 //-----------> Cylindrical part
670 double Lv2VacFwd_Z1[Lv2VacFwd3_num1];
671 Lv2VacFwd_Z1[0] = 0.0;
672// Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
673 Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2 + 0.03 * SafetyLength;
674 double Lv2VacFwd_rI1[Lv2VacFwd3_num1];
675 for (int tmpn = 0; tmpn < Lv2VacFwd3_num1; tmpn++)
676 { Lv2VacFwd_rI1[tmpn] = 0.0; }
677 double Lv2VacFwd_rO1[Lv2VacFwd3_num1];
678 Lv2VacFwd_rO1[0] = Lv2VacFwd_R3;
679 Lv2VacFwd_rO1[1] = Lv2VacFwd_R3;
680 //<---------------
681 //----------->Policone part
682 double Lv2VacFwd_Z2[Lv2VacFwd3_num2];
683 Lv2VacFwd_Z2[0] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
684 Lv2VacFwd_Z2[1] = Lv2VacFwd_D3;
685 Lv2VacFwd_Z2[2] = Lv2VacFwd_D3 + Lv2VacFwd_L3;
686 double Lv2VacFwd_rI2[Lv2VacFwd3_num2];
687 for (int tmpn = 0; tmpn < Lv2VacFwd3_num2; tmpn++)
688 { Lv2VacFwd_rI2[tmpn] = 0.0; }
689 double Lv2VacFwd_rO2[Lv2VacFwd3_num2];
690 Lv2VacFwd_rO2[0] = Lv2VacFwd_R3;
691 Lv2VacFwd_rO2[1] = Lv2VacFwd_R4;
692 Lv2VacFwd_rO2[2] = Lv2VacFwd_R4;
693 //<-------------------
694 //
695
696 //define geometry
697 // Part 1
698 G4Tubs* geo_Lv2VacFwdPart1_1 = new G4Tubs("geo_Lv2VacFwdPart1_1_name", Lv2VacFwd1_rI1, Lv2VacFwd1_rO1, Lv2VacFwd1_Z1, 0, 2 * M_PI);
699 G4Tubs* geo_Lv2VacFwdPart1_2 = new G4Tubs("geo_Lv2VacFwdPart1_2_name", Lv2VacFwd1_rI2, Lv2VacFwd1_rO2, Lv2VacFwd1_Z2, 0, 2 * M_PI);
700 //Slanted tube of Part 1
701 G4Transform3D transform_Lv2VacFwdPart1_2 = G4Translate3D(0., 0., 0.);
702 transform_Lv2VacFwdPart1_2 = transform_Lv2VacFwdPart1_2 * G4RotateY3D(-Lv2VacFwd_A2 / 2.);
703 G4IntersectionSolid* geo_Lv2VacFwdPart1 = new G4IntersectionSolid("geo_Lv2VacFwdPart1_name", geo_Lv2VacFwdPart1_1,
704 geo_Lv2VacFwdPart1_2, transform_Lv2VacFwdPart1_2);
705 // Part 2
706 G4Tubs* geo_Lv2VacFwdPart2_1 = new G4Tubs("geo_Lv2VacFwdPart2_1_name", Lv2VacFwd2_rI1, Lv2VacFwd2_rO1, Lv2VacFwd2_Z1, 0, 2 * M_PI);
707 G4Tubs* geo_Lv2VacFwdPart2_2 = new G4Tubs("geo_Lv2VacFwdPart2_2_name", Lv2VacFwd2_rI2, Lv2VacFwd2_rO2, Lv2VacFwd2_Z2, 0, 2 * M_PI);
708 //Slanted tube of Part 2
709 G4Transform3D transform_Lv2VacFwdPart2_2 = G4Translate3D(0., 0., 0.);
710 transform_Lv2VacFwdPart2_2 = transform_Lv2VacFwdPart2_2 * G4RotateY3D(Lv2VacFwd_A2 / 2.);
711 G4IntersectionSolid* geo_Lv2VacFwdPart2 = new G4IntersectionSolid("geo_Lv2VacFwdPart2_name", geo_Lv2VacFwdPart2_1,
712 geo_Lv2VacFwdPart2_2, transform_Lv2VacFwdPart2_2);
713 // Part 3
714// G4Polycone* geo_Lv2VacFwdPart3 = new G4Polycone("geo_Lv2VacFwdPart3", 0, 2 * M_PI, Lv2VacFwd3_num, Lv2VacFwd_Z, Lv2VacFwd_rI, Lv2VacFwd_rO);
715 G4Polycone* geo_Lv2VacFwdPart3_1 = new G4Polycone("geo_Lv2VacFwdPart3_1", 0, 2 * M_PI, Lv2VacFwd3_num1, Lv2VacFwd_Z1, Lv2VacFwd_rI1,
716 Lv2VacFwd_rO1);
717 G4Polycone* geo_Lv2VacFwdPart3_2 = new G4Polycone("geo_Lv2VacFwdPart3_2", 0, 2 * M_PI, Lv2VacFwd3_num2, Lv2VacFwd_Z2, Lv2VacFwd_rI2,
718 Lv2VacFwd_rO2);
719 G4Transform3D transform_Lv2VacFwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
720 transform_Lv2VacFwdPart3_1 = transform_Lv2VacFwdPart3_1 * G4RotateY3D(Lv2VacFwd_A1 - A11);
721 G4UnionSolid* geo_Lv2VacFwdPart3 = new G4UnionSolid("geo_Lv2VacFwdPart3_name", geo_Lv2VacFwdPart3_2, geo_Lv2VacFwdPart3_1,
722 transform_Lv2VacFwdPart3_1);
723 // Part1+2+3
724 //tmp begin
725 G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(
726 2.*Lv2VacFwd_A1)) / 2.,
727 0.,
728 (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 2.);
729 //G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1)) / 1.9 ,
730 // 0.,
731 // (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 1.9);
732 transform_Lv2VacFwdPart1 = transform_Lv2VacFwdPart1 * G4RotateY3D(Lv2VacFwd_A1 + Lv2VacFwd_A2);
733 //
734 G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(
735 2.*Lv2VacFwd_A1) / 2.0,
736 0.,
737 Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.0);
738 //G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(2.*Lv2VacFwd_A1) / 2.05,
739 // 0.,
740 // Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.05);
741 //tmp end
742 transform_Lv2VacFwdPart2 = transform_Lv2VacFwdPart2 * G4RotateY3D(2.*Lv2VacFwd_A1);
743 //
744 G4UnionSolid* geo_Lv2VacFwdxx = new G4UnionSolid("geo_Lv2VacFwdxx_name", geo_Lv2VacFwdPart3, geo_Lv2VacFwdPart1,
745 transform_Lv2VacFwdPart1);
746 G4UnionSolid* geo_Lv2VacFwdx = new G4UnionSolid("geo_Lv2VacFwdx_name", geo_Lv2VacFwdxx, geo_Lv2VacFwdPart2,
747 transform_Lv2VacFwdPart2);
748 // Intersection
749 G4Transform3D transform_Lv2VacFwd = G4Translate3D(0., 0., -Lv1TaFwd_D1 - Lv1TaFwd_L1 / 2.);
750 transform_Lv2VacFwd = transform_Lv2VacFwd * G4RotateY3D(-Lv2VacFwd_A1);
751 //
752 G4IntersectionSolid* geo_Lv2VacFwd = new G4IntersectionSolid("geo_Lv2VacFwd_name", geo_Lv1TaFwd, geo_Lv2VacFwdx,
753 transform_Lv2VacFwd);
754 G4LogicalVolume* logi_Lv2VacFwd = new G4LogicalVolume(geo_Lv2VacFwd, mat_Lv2VacFwd, "logi_Lv2VacFwd_name");
755 if (flag_limitStep) logi_Lv2VacFwd->SetUserLimits(new G4UserLimits(stepMax));
756
757 //- put volume
758 setColor(*logi_Lv2VacFwd, "#CCCCCC");
759 //you must set this invisible, otherwise encounter segV.
760 setVisibility(*logi_Lv2VacFwd, false);
761 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacFwd, "phys_Lv2VacFwd_name", logi_Lv1TaFwd, false, 0);
762
763 //-
764 //----------
765
768
769
772
773 //----------
774 //- Lv1TaBwd
775
776 //get parameters from .xml file
777 prep = "Lv1TaBwd.";
778 //
779 double Lv1TaBwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
780 double Lv1TaBwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
781 //double Lv1TaBwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
782 //double Lv1TaBwd_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
783 double Lv1TaBwd_T1 = m_config.getParameter(prep + "T1") * Unit::cm / Unit::mm;
784 double Lv1TaBwd_aR1 = m_config.getParameter(prep + "aR1") * Unit::cm / Unit::mm;
785 double Lv1TaBwd_aR2 = m_config.getParameter(prep + "aR2") * Unit::cm / Unit::mm;
786 double Lv1TaBwd_aL1 = m_config.getParameter(prep + "aL1") * Unit::cm / Unit::mm;
787 double Lv1TaBwd_aL2 = m_config.getParameter(prep + "aL2") * Unit::cm / Unit::mm;
788 double Lv1TaBwd_aL3 = m_config.getParameter(prep + "aL3") * Unit::cm / Unit::mm;
789 double Lv1TaBwd_bL1 = Lv1TaBwd_L1 - Lv1TaBwd_aL1 - Lv1TaBwd_aL2 - Lv1TaBwd_aL3;
790 double Lv1TaBwd_bL2 = m_config.getParameter(prep + "bL2") * Unit::cm / Unit::mm;
791 double Lv1TaBwd_bL3 = m_config.getParameter(prep + "bL3") * Unit::cm / Unit::mm;
792 //
793 string strMat_Lv1TaBwd = m_config.getParameterStr(prep + "Material");
794 G4Material* mat_Lv1TaBwd = Materials::get(strMat_Lv1TaBwd);
795
796 //define geometry
797 //G4Trd* geo_Lv1TaBwd_x = new G4Trd("geo_Lv1TaBwd_x_name", Lv1TaBwd_L2, Lv1TaBwd_L3, Lv1TaBwd_T1, Lv1TaBwd_T1, Lv1TaBwd_L1 / 2.0);
798 double Lv1TaBwd_aR[4] = {Lv1TaBwd_aR2, Lv1TaBwd_aR2, Lv1TaBwd_aR1, Lv1TaBwd_aR1};
799 double Lv1TaBwd_ar[4] = {0, 0, 0, 0};
800 double Lv1TaBwd_aL[4] = { +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3),
801 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2),
802 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1),
803 +Lv1TaBwd_L1 / 2.0 - 0
804 };
805 G4VSolid* geo_Lv1TaBwd_a = new G4Polycone("geo_Lv1TaBwd_a_name", 0, 2 * M_PI, 4, Lv1TaBwd_aL, Lv1TaBwd_ar, Lv1TaBwd_aR);
806 G4VSolid* geo_Lv1TaBwd_b = new G4Trd("geo_Lv1TaBwd_b_name", Lv1TaBwd_bL2, Lv1TaBwd_bL3, Lv1TaBwd_T1, Lv1TaBwd_T1,
807 Lv1TaBwd_bL1 / 2.0);
808 G4VSolid* geo_Lv1TaBwd_c = new G4Box("geo_Lv1TaBwd_c_name", 200, Lv1TaBwd_T1, (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3) / 2.0);
809 G4VSolid* geo_Lv1TaBwd_d = new G4IntersectionSolid("geo_Lv1TaBwd_d_name", geo_Lv1TaBwd_a, geo_Lv1TaBwd_c, G4Translate3D(0, 0,
810 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3) / 2.0));
811 G4VSolid* geo_Lv1TaBwd_x = new G4UnionSolid("geo_Lv1TaBwd_x_name", geo_Lv1TaBwd_d, geo_Lv1TaBwd_b, G4Translate3D(0, 0,
812 -Lv1TaBwd_L1 / 2.0 + Lv1TaBwd_bL1 / 2.0));
813 G4UnionSolid* geo_Lv1TaBwd = new G4UnionSolid("geo_Lv1TaBwd_name", geo_Lv1TaBwd_x, geo_Flange,
814 G4Translate3D(0, 0, -Flange_D - (-Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0)));
815 G4LogicalVolume* logi_Lv1TaBwd = new G4LogicalVolume(geo_Lv1TaBwd, mat_Lv1TaBwd, "logi_Lv1TaBwd_name");
816
817 //- put volume
818 setColor(*logi_Lv1TaBwd, "#333333");
819 new G4PVPlacement(0, G4ThreeVector(0, 0, -Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0), logi_Lv1TaBwd, "phys_Lv1TaBwd_name", &topVolume, false,
820 0);
821
822 //-
823 //----------
824
825 //----------
826 //- Lv2VacBwd
827
828 //get parameters from .xml file
829 prep = "Lv2VacBwd.";
830 //
831 double Lv2VacBwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
832 double Lv2VacBwd_D2 = m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
833 double Lv2VacBwd_D3 = m_config.getParameter(prep + "D3") * Unit::cm / Unit::mm;
834 double Lv2VacBwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
835 double Lv2VacBwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
836 double Lv2VacBwd_L3 = m_config.getParameter(prep + "L3") * Unit::cm / Unit::mm;
837 double Lv2VacBwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
838 double Lv2VacBwd_R2 = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
839 double Lv2VacBwd_R3 = m_config.getParameter(prep + "R3") * Unit::cm / Unit::mm;
840 double Lv2VacBwd_R4 = m_config.getParameter(prep + "R4") * Unit::cm / Unit::mm;
841 double Lv2VacBwd_A1 = m_config.getParameter(prep + "A1");
842 double Lv2VacBwd_A2 = m_config.getParameter(prep + "A2");
843 //
844 string strMat_Lv2VacBwd = m_config.getParameterStr(prep + "Material");
845 G4Material* mat_Lv2VacBwd = Materials::get(strMat_Lv2VacBwd);
846 //
847 // Part 1
848 double Lv2VacBwd1_Z1 = sqrt(Lv2VacBwd_D1 * Lv2VacBwd_D1 + Lv2VacBwd_D2 * Lv2VacBwd_D2 - 2.*Lv2VacBwd_D1 * Lv2VacBwd_D2 * cos(
849 Lv2VacBwd_A1));
850 double Lv2VacBwd1_rI1 = 0.0;
851 double Lv2VacBwd1_rO1 = Lv2VacBwd_R1;
852 //
853 double Lv2VacBwd1_Z2 = (Lv2VacBwd1_Z1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
854 double Lv2VacBwd1_rI2 = 0.0;
855 double Lv2VacBwd1_rO2 = 2 * Lv2VacBwd_R1;
856 // Part 2
857 double Lv2VacBwd2_Z1 = Lv2VacBwd_L1;
858 double Lv2VacBwd2_rI1 = 0.0;
859 double Lv2VacBwd2_rO1 = Lv2VacBwd_R2;
860 //
861 double Lv2VacBwd2_Z2 = (Lv2VacBwd_L1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
862 double Lv2VacBwd2_rI2 = 0.0;
863 double Lv2VacBwd2_rO2 = 2 * Lv2VacBwd_R2;
864 // Part 3
865 const int Lv2VacBwd3_num1 = 2; // cylindrical part
866 const int Lv2VacBwd3_num2 = 3; // policone part
867 // ----------->Cylindrical part
868 double Lv2VacBwd_Z1[Lv2VacBwd3_num1];
869 Lv2VacBwd_Z1[0] = 0.0;
870 Lv2VacBwd_Z1[1] = -Lv2VacBwd_D3 + Lv2VacBwd_L2 - 0.03 * SafetyLength;
871 double Lv2VacBwd_rI1[Lv2VacBwd3_num1];
872 for (int tmpn = 0; tmpn < Lv2VacBwd3_num1; tmpn++)
873 { Lv2VacBwd_rI1[tmpn] = 0.0; }
874 double Lv2VacBwd_rO1[Lv2VacBwd3_num1];
875 Lv2VacBwd_rO1[0] = Lv2VacBwd_R3;
876 Lv2VacBwd_rO1[1] = Lv2VacBwd_R3;
877 //<----------------
878 //------------> Policone part
879 double Lv2VacBwd_Z2[Lv2VacBwd3_num2];
880 Lv2VacBwd_Z2[0] = -Lv2VacBwd_D3 + Lv2VacBwd_L2;
881 Lv2VacBwd_Z2[1] = -Lv2VacBwd_D3;
882 Lv2VacBwd_Z2[2] = -Lv2VacBwd_D3 - Lv2VacBwd_L3;
883 double Lv2VacBwd_rI2[Lv2VacBwd3_num2];
884 for (int tmpn = 0; tmpn < Lv2VacBwd3_num2; tmpn++)
885 { Lv2VacBwd_rI2[tmpn] = 0.0; }
886 double Lv2VacBwd_rO2[Lv2VacBwd3_num2];
887 Lv2VacBwd_rO2[0] = Lv2VacBwd_R3;
888 Lv2VacBwd_rO2[1] = Lv2VacBwd_R4;
889 Lv2VacBwd_rO2[2] = Lv2VacBwd_R4;
890 //<--------------
891 //
892
893 //define geometry
894 // Part 1
895 G4Tubs* geo_Lv2VacBwdPart1_1 = new G4Tubs("geo_Lv2VacBwdPart1_1_name", Lv2VacBwd1_rI1, Lv2VacBwd1_rO1, Lv2VacBwd1_Z1, 0, 2 * M_PI);
896 G4Tubs* geo_Lv2VacBwdPart1_2 = new G4Tubs("geo_Lv2VacBwdPart1_2_name", Lv2VacBwd1_rI2, Lv2VacBwd1_rO2, Lv2VacBwd1_Z2, 0, 2 * M_PI);
897 G4Transform3D transform_Lv2VacBwdPart1_2 = G4Translate3D(0., 0., 0.);
898 transform_Lv2VacBwdPart1_2 = transform_Lv2VacBwdPart1_2 * G4RotateY3D(Lv2VacBwd_A2 / 2.);
899 G4IntersectionSolid* geo_Lv2VacBwdPart1 = new G4IntersectionSolid("geo_Lv2VacBwdPart1_name", geo_Lv2VacBwdPart1_1,
900 geo_Lv2VacBwdPart1_2, transform_Lv2VacBwdPart1_2);
901 // Part 2
902 G4Tubs* geo_Lv2VacBwdPart2_1 = new G4Tubs("geo_Lv2VacBwdPart2_1_name", Lv2VacBwd2_rI1, Lv2VacBwd2_rO1, Lv2VacBwd2_Z1, 0, 2 * M_PI);
903 G4Tubs* geo_Lv2VacBwdPart2_2 = new G4Tubs("geo_Lv2VacBwdPart2_2_name", Lv2VacBwd2_rI2, Lv2VacBwd2_rO2, Lv2VacBwd2_Z2, 0, 2 * M_PI);
904 G4Transform3D transform_Lv2VacBwdPart2_2 = G4Translate3D(0., 0., 0.);
905 transform_Lv2VacBwdPart2_2 = transform_Lv2VacBwdPart2_2 * G4RotateY3D(-Lv2VacBwd_A2 / 2.);
906 G4IntersectionSolid* geo_Lv2VacBwdPart2 = new G4IntersectionSolid("geo_Lv2VacBwdPart2_name", geo_Lv2VacBwdPart2_1,
907 geo_Lv2VacBwdPart2_2, transform_Lv2VacBwdPart2_2);
908 // Part 3
909// G4Polycone* geo_Lv2VacBwdPart3 = new G4Polycone("geo_Lv2VacBwdPart3", 0, 2 * M_PI, Lv2VacBwd3_num, Lv2VacBwd_Z, Lv2VacBwd_rI, Lv2VacBwd_rO);
910 G4Polycone* geo_Lv2VacBwdPart3_1 = new G4Polycone("geo_Lv2VacBwdPart3_1", 0, 2 * M_PI, Lv2VacBwd3_num1, Lv2VacBwd_Z1, Lv2VacBwd_rI1,
911 Lv2VacBwd_rO1);
912 G4Polycone* geo_Lv2VacBwdPart3_2 = new G4Polycone("geo_Lv2VacBwdPart3_2", 0, 2 * M_PI, Lv2VacBwd3_num2, Lv2VacBwd_Z2, Lv2VacBwd_rI2,
913 Lv2VacBwd_rO2);
914 G4Transform3D transform_Lv2VacBwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
915 transform_Lv2VacBwdPart3_1 = transform_Lv2VacBwdPart3_1 * G4RotateY3D(-Lv2VacBwd_A1 + A11);
916 G4UnionSolid* geo_Lv2VacBwdPart3 = new G4UnionSolid("geo_Lv2VacBwdPart3_name", geo_Lv2VacBwdPart3_2, geo_Lv2VacBwdPart3_1,
917 transform_Lv2VacBwdPart3_1);
918 // Part1+2+3
919 //tmp begin
920 G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(
921 2.*Lv2VacBwd_A1)) / 2.,
922 0.,
923 -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.);
924 //G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(2.*Lv2VacBwd_A1)) / 2.05,
925 // 0.,
926 // -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.05);
927 transform_Lv2VacBwdPart1 = transform_Lv2VacBwdPart1 * G4RotateY3D(-Lv2VacBwd_A1 - Lv2VacBwd_A2);
928 //tmp end
929 //
930 G4Transform3D transform_Lv2VacBwdPart2 = G4Translate3D((Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * sin(2.*Lv2VacBwd_A1),
931 0.,
932 -(Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * cos(2.*Lv2VacBwd_A1));
933 transform_Lv2VacBwdPart2 = transform_Lv2VacBwdPart2 * G4RotateY3D(-2.*Lv2VacBwd_A1);
934 //
935 G4UnionSolid* geo_Lv2VacBwdxx = new G4UnionSolid("geo_Lv2VacBwdxx_name", geo_Lv2VacBwdPart3, geo_Lv2VacBwdPart1,
936 transform_Lv2VacBwdPart1);
937 G4UnionSolid* geo_Lv2VacBwdx = new G4UnionSolid("geo_Lv2VacBwdx_name", geo_Lv2VacBwdxx, geo_Lv2VacBwdPart2,
938 transform_Lv2VacBwdPart2);
939 // Intersection
940 G4Transform3D transform_Lv2VacBwd = G4Translate3D(0., 0., +Lv1TaBwd_D1 + Lv1TaBwd_L1 / 2.);
941 transform_Lv2VacBwd = transform_Lv2VacBwd * G4RotateY3D(+Lv2VacBwd_A1);
942 //
943 G4IntersectionSolid* geo_Lv2VacBwd = new G4IntersectionSolid("geo_Lv2VacBwd_name", geo_Lv1TaBwd, geo_Lv2VacBwdx,
944 transform_Lv2VacBwd);
945 G4LogicalVolume* logi_Lv2VacBwd = new G4LogicalVolume(geo_Lv2VacBwd, mat_Lv2VacBwd, "logi_Lv2VacBwd_name");
946 if (flag_limitStep) logi_Lv2VacBwd->SetUserLimits(new G4UserLimits(stepMax));
947
948 //- put volume
949 setColor(*logi_Lv2VacBwd, "#CCCCCC");
950 //you must set this invisible, otherwise encounter segV.
951 setVisibility(*logi_Lv2VacBwd, false);
952 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacBwd, "phys_Lv2VacBwd_name", logi_Lv1TaBwd, false, 0);
953
954 //-
955
958
959 //get parameters from .xml file
960 prep = "AreaTubeFwd.";
961 //
962 const int AreaTubeFwd_num = 2;
963 //
964 double AreaTubeFwd_Z[AreaTubeFwd_num];
965 AreaTubeFwd_Z[0] = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
966 AreaTubeFwd_Z[1] = m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
967 //
968 double AreaTubeFwd_rI[AreaTubeFwd_num];
969 for (int i = 0; i < AreaTubeFwd_num; i++)
970 { AreaTubeFwd_rI[i] = 0.0; }
971 //
972 double AreaTubeFwd_rO[AreaTubeFwd_num];
973 AreaTubeFwd_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
974 AreaTubeFwd_rO[1] = AreaTubeFwd_rO[0];
975
976 //define geometry
977 G4Polycone* geo_AreaTubeFwdpcon = new G4Polycone("geo_AreaTubeFwdpcon_name", 0, 2 * M_PI, AreaTubeFwd_num, AreaTubeFwd_Z,
978 AreaTubeFwd_rI, AreaTubeFwd_rO);
979
980 //----------
981 //- Lv1TaLERUp
982
983 //get parameters from .xml file
984 prep = "Lv1TaLERUp.";
985 //
986 double Lv1TaLERUp_A1 = m_config.getParameter(prep + "A1");
987 //
988 const int Lv1TaLERUp_num = 12;
989 //
990 double Lv1TaLERUp_Z[Lv1TaLERUp_num];
991 double Lv1TaLERUp_rO[Lv1TaLERUp_num];
992 for (int i = 0; i < Lv1TaLERUp_num; i++) {
993 ostringstream ossZ_Lv1TaLERUp;
994 ossZ_Lv1TaLERUp << "L" << i + 1;
995
996 ostringstream ossR_Lv1TaLERUp;
997 ossR_Lv1TaLERUp << "R" << i + 1;
998
999 Lv1TaLERUp_Z[i] = m_config.getParameter(prep + ossZ_Lv1TaLERUp.str()) * Unit::cm / Unit::mm;
1000 Lv1TaLERUp_rO[i] = m_config.getParameter(prep + ossR_Lv1TaLERUp.str()) * Unit::cm / Unit::mm;
1001 }
1002 //
1003 double Lv1TaLERUp_rI[Lv1TaLERUp_num];
1004 for (int i = 0; i < Lv1TaLERUp_num; i++)
1005 { Lv1TaLERUp_rI[i] = 0.0; }
1006 //
1007 string strMat_Lv1TaLERUp = m_config.getParameterStr(prep + "Material");
1008 G4Material* mat_Lv1TaLERUp = Materials::get(strMat_Lv1TaLERUp);
1009
1010 //define geometry
1011 G4Polycone* geo_Lv1TaLERUppcon = new G4Polycone("geo_Lv1TaLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z, Lv1TaLERUp_rI,
1012 Lv1TaLERUp_rO);
1013 G4Transform3D transform_AreaTubeFwdForLER = G4Translate3D(0., 0., 0.);
1014 transform_AreaTubeFwdForLER = transform_AreaTubeFwdForLER * G4RotateY3D(-Lv1TaLERUp_A1);
1015 G4IntersectionSolid* geo_Lv1TaLERUp = new G4IntersectionSolid("geo_Lv1TaLERUp_name", geo_Lv1TaLERUppcon, geo_AreaTubeFwdpcon,
1016 transform_AreaTubeFwdForLER);
1017 G4LogicalVolume* logi_Lv1TaLERUp = new G4LogicalVolume(geo_Lv1TaLERUp, mat_Lv1TaLERUp, "logi_Lv1TaLERUp_name");
1018
1019 //- put volume
1020 setColor(*logi_Lv1TaLERUp, "#0000CC");
1021 G4Transform3D transform_Lv1TaLERUp = G4Translate3D(0., 0., 0.);
1022 transform_Lv1TaLERUp = transform_Lv1TaLERUp * G4RotateY3D(Lv1TaLERUp_A1);
1023 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1TaLERUp, "phys_Lv1TaLERUp_name", &topVolume, false, 0);
1024
1025 //----------
1026 //-Lv1SUSLERUp
1027 prep = "Lv1SUSLERUp.";
1028 const int Lv1SUSLERUp_num = 6;
1029 double Lv1SUSLERUp_Z[Lv1SUSLERUp_num];
1030 double Lv1SUSLERUp_rO[Lv1SUSLERUp_num];
1031 double Lv1SUSLERUp_rI[Lv1SUSLERUp_num];
1032
1033 for (int i = 0; i < Lv1SUSLERUp_num; i++) {
1034 ostringstream ossZ_Lv1SUSLERUp;
1035 ossZ_Lv1SUSLERUp << "Z" << i + 1;
1036 ostringstream ossRI_Lv1SUSLERUp;
1037 ossRI_Lv1SUSLERUp << "RI" << i + 1;
1038 ostringstream ossRO_Lv1SUSLERUp;
1039 ossRO_Lv1SUSLERUp << "RO" << i + 1;
1040
1041 Lv1SUSLERUp_Z[i] = m_config.getParameter(prep + ossZ_Lv1SUSLERUp.str()) * Unit::cm / Unit::mm;
1042 Lv1SUSLERUp_rI[i] = m_config.getParameter(prep + ossRI_Lv1SUSLERUp.str()) * Unit::cm / Unit::mm;
1043 Lv1SUSLERUp_rO[i] = m_config.getParameter(prep + ossRO_Lv1SUSLERUp.str()) * Unit::cm / Unit::mm;
1044 }
1045
1046 string strMat_Lv1SUSLERUp = m_config.getParameterStr(prep + "Material");
1047 G4Material* mat_Lv1SUSLERUp = Materials::get(strMat_Lv1SUSLERUp);
1048
1049 G4Polycone* geo_Lv1SUSLERUppcon = new G4Polycone("geo_Lv1SUSLERUppcon_name", 0, 2 * M_PI, Lv1SUSLERUp_num, Lv1SUSLERUp_Z,
1050 Lv1SUSLERUp_rI, Lv1SUSLERUp_rO);
1051 G4IntersectionSolid* geo_Lv1SUSLERUp = new G4IntersectionSolid("", geo_Lv1SUSLERUppcon, geo_AreaTubeFwdpcon,
1052 transform_AreaTubeFwdForLER);
1053 G4LogicalVolume* logi_Lv1SUSLERUp = new G4LogicalVolume(geo_Lv1SUSLERUp, mat_Lv1SUSLERUp, "logi_Lv1SUSLERUp_name");
1054
1055 //-put volume
1056 setColor(*logi_Lv1SUSLERUp, "#666666");
1057 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1SUSLERUp, "phys_Lv1SUSLERUp_name", &topVolume, false, 0);
1058
1059 //----------
1060 //- Lv2VacLERUp
1061
1062 //get parameters from .xml file
1063 prep = "Lv2VacLERUp.";
1064 //
1065 double Lv2VacLERUp_rO[Lv1TaLERUp_num];
1066 for (int i = 0; i < Lv1TaLERUp_num; i++) {
1067 Lv2VacLERUp_rO[i] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1068 }
1069 //
1070 string strMat_Lv2VacLERUp = m_config.getParameterStr(prep + "Material");
1071 G4Material* mat_Lv2VacLERUp = Materials::get(strMat_Lv2VacLERUp);
1072
1073 //define geometry
1074 G4Polycone* geo_Lv2VacLERUppcon = new G4Polycone("geo_Lv2VacLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z,
1075 Lv1TaLERUp_rI, Lv2VacLERUp_rO);
1076 G4IntersectionSolid* geo_Lv2VacLERUp = new G4IntersectionSolid("geo_Lv2VacLERUp_name", geo_Lv2VacLERUppcon, geo_AreaTubeFwdpcon,
1077 transform_AreaTubeFwdForLER);
1078 G4LogicalVolume* logi_Lv2VacLERUp = new G4LogicalVolume(geo_Lv2VacLERUp, mat_Lv2VacLERUp, "logi_Lv2VacLERUp_name");
1079 if (flag_limitStep) logi_Lv2VacLERUp->SetUserLimits(new G4UserLimits(stepMax));
1080
1081
1082 //- put volume
1083 setColor(*logi_Lv2VacLERUp, "#CCCCCC");
1084 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERUp, "phys_Lv2VacLERUp_name", logi_Lv1TaLERUp, false, 0);
1085 //-
1086 //----------
1087
1088 //----------
1089 //- Lv1TaHERDwn
1090
1091 //get parameters from .xml file
1092 prep = "Lv1TaHERDwn.";
1093 //
1094 double Lv1TaHERDwn_A1 = m_config.getParameter(prep + "A1");
1095 //
1096 const int Lv1TaHERDwn_num = 12;
1097 //
1098 double Lv1TaHERDwn_Z[Lv1TaHERDwn_num];
1099 double Lv1TaHERDwn_rO[Lv1TaHERDwn_num];
1100 for (int i = 0; i < Lv1TaHERDwn_num; i++) {
1101 ostringstream ossZ_Lv1TaHERDwn;
1102 ossZ_Lv1TaHERDwn << "L" << i + 1;
1103
1104 ostringstream ossR_Lv1TaHERDwn;
1105 ossR_Lv1TaHERDwn << "R" << i + 1;
1106
1107 Lv1TaHERDwn_Z[i] = m_config.getParameter(prep + ossZ_Lv1TaHERDwn.str()) * Unit::cm / Unit::mm;
1108 Lv1TaHERDwn_rO[i] = m_config.getParameter(prep + ossR_Lv1TaHERDwn.str()) * Unit::cm / Unit::mm;
1109 }
1110 //
1111 double Lv1TaHERDwn_rI[Lv1TaHERDwn_num];
1112 for (int i = 0; i < Lv1TaHERDwn_num; i++)
1113 { Lv1TaHERDwn_rI[i] = 0.0; }
1114 //
1115 string strMat_Lv1TaHERDwn = m_config.getParameterStr(prep + "Material");
1116 G4Material* mat_Lv1TaHERDwn = Materials::get(strMat_Lv1TaHERDwn);
1117
1118 //define geometry
1119 G4Polycone* geo_Lv1TaHERDwnpcon = new G4Polycone("geo_Lv1TaHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1120 Lv1TaHERDwn_rI, Lv1TaHERDwn_rO);
1121 G4Transform3D transform_AreaTubeFwdForHER = G4Translate3D(0., 0., 0.);
1122 transform_AreaTubeFwdForHER = transform_AreaTubeFwdForHER * G4RotateY3D(-Lv1TaHERDwn_A1);
1123 G4IntersectionSolid* geo_Lv1TaHERDwn = new G4IntersectionSolid("", geo_Lv1TaHERDwnpcon, geo_AreaTubeFwdpcon,
1124 transform_AreaTubeFwdForHER);
1125 G4LogicalVolume* logi_Lv1TaHERDwn = new G4LogicalVolume(geo_Lv1TaHERDwn, mat_Lv1TaHERDwn, "logi_Lv1TaHERDwn_name");
1126
1127 //- put volume
1128 setColor(*logi_Lv1TaHERDwn, "#00CC00");
1129 G4Transform3D transform_Lv1TaHERDwn = G4Translate3D(0., 0., 0.);
1130 transform_Lv1TaHERDwn = transform_Lv1TaHERDwn * G4RotateY3D(Lv1TaHERDwn_A1);
1131 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1TaHERDwn, "phys_Lv1TaHERDwn_name", &topVolume, false, 0);
1132
1133 //----------
1134 //-Lv1SUSHERDwn
1135 prep = "Lv1SUSHERDwn.";
1136 const int Lv1SUSHERDwn_num = 6;
1137 double Lv1SUSHERDwn_Z[Lv1SUSHERDwn_num];
1138 double Lv1SUSHERDwn_rO[Lv1SUSHERDwn_num];
1139 double Lv1SUSHERDwn_rI[Lv1SUSHERDwn_num];
1140
1141 for (int i = 0; i < Lv1SUSHERDwn_num; i++) {
1142 ostringstream ossZ_Lv1SUSHERDwn;
1143 ossZ_Lv1SUSHERDwn << "Z" << i + 1;
1144 ostringstream ossRI_Lv1SUSHERDwn;
1145 ossRI_Lv1SUSHERDwn << "RI" << i + 1;
1146 ostringstream ossRO_Lv1SUSHERDwn;
1147 ossRO_Lv1SUSHERDwn << "RO" << i + 1;
1148
1149 Lv1SUSHERDwn_Z[i] = m_config.getParameter(prep + ossZ_Lv1SUSHERDwn.str()) * Unit::cm / Unit::mm;
1150 Lv1SUSHERDwn_rI[i] = m_config.getParameter(prep + ossRI_Lv1SUSHERDwn.str()) * Unit::cm / Unit::mm;
1151 Lv1SUSHERDwn_rO[i] = m_config.getParameter(prep + ossRO_Lv1SUSHERDwn.str()) * Unit::cm / Unit::mm;
1152 }
1153
1154 string strMat_Lv1SUSHERDwn = m_config.getParameterStr(prep + "Material");
1155 G4Material* mat_Lv1SUSHERDwn = Materials::get(strMat_Lv1SUSHERDwn);
1156 //G4Material* mat_Lv1SUSHERDwn = mat_Lv1SUS;
1157
1158 G4Polycone* geo_Lv1SUSHERDwnpcon = new G4Polycone("geo_Lv1SUSHERDwnpcon_name", 0, 2 * M_PI, Lv1SUSHERDwn_num, Lv1SUSHERDwn_Z,
1159 Lv1SUSHERDwn_rI, Lv1SUSHERDwn_rO);
1160 G4IntersectionSolid* geo_Lv1SUSHERDwn = new G4IntersectionSolid("", geo_Lv1SUSHERDwnpcon, geo_AreaTubeFwdpcon,
1161 transform_AreaTubeFwdForHER);
1162 G4LogicalVolume* logi_Lv1SUSHERDwn = new G4LogicalVolume(geo_Lv1SUSHERDwn, mat_Lv1SUSHERDwn, "logi_Lv1SUSHERDwn_name");
1163
1164 //-put volume
1165 setColor(*logi_Lv1SUSHERDwn, "#666666");
1166 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1SUSHERDwn, "phys_Lv1SUSHERDwn_name", &topVolume, false, 0);
1167
1168 //----------
1169 //- Lv2VacHERDwn
1170
1171 //get parameters from .xml file
1172 prep = "Lv2VacHERDwn.";
1173 //
1174 double Lv2VacHERDwn_rO[Lv1TaHERDwn_num];
1175 for (int i = 0; i < Lv1TaHERDwn_num; i++) {
1176 Lv2VacHERDwn_rO[i] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1177 }
1178 //
1179 string strMat_Lv2VacHERDwn = m_config.getParameterStr(prep + "Material");
1180 G4Material* mat_Lv2VacHERDwn = Materials::get(strMat_Lv2VacHERDwn);
1181
1182 //define geometry
1183 G4Polycone* geo_Lv2VacHERDwnpcon = new G4Polycone("geo_Lv2VacHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1184 Lv1TaHERDwn_rI, Lv2VacHERDwn_rO);
1185 G4IntersectionSolid* geo_Lv2VacHERDwn = new G4IntersectionSolid("", geo_Lv2VacHERDwnpcon, geo_AreaTubeFwdpcon,
1186 transform_AreaTubeFwdForHER);
1187 G4LogicalVolume* logi_Lv2VacHERDwn = new G4LogicalVolume(geo_Lv2VacHERDwn, mat_Lv2VacHERDwn, "logi_Lv2VacHERDwn_name");
1188 if (flag_limitStep) logi_Lv2VacHERDwn->SetUserLimits(new G4UserLimits(stepMax));
1189
1190 //- put volume
1191 setColor(*logi_Lv2VacHERDwn, "#CCCCCC");
1192 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERDwn, "phys_Lv2VacHERDwn_name", logi_Lv1TaHERDwn, false, 0);
1193
1194 //-
1195 //----------
1196
1199
1202
1203 //get parameters from .xml file
1204 prep = "AreaTubeBwd.";
1205 //
1206 const int AreaTubeBwd_num = 2;
1207 //
1208 double AreaTubeBwd_Z[AreaTubeBwd_num];
1209 AreaTubeBwd_Z[0] = -m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
1210 AreaTubeBwd_Z[1] = -m_config.getParameter(prep + "D2") * Unit::cm / Unit::mm;
1211 //
1212 double AreaTubeBwd_rI[AreaTubeBwd_num];
1213 for (int i = 0; i < AreaTubeBwd_num; i++)
1214 { AreaTubeBwd_rI[i] = 0.0; }
1215 //
1216 double AreaTubeBwd_rO[AreaTubeBwd_num];
1217 AreaTubeBwd_rO[0] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1218 AreaTubeBwd_rO[1] = AreaTubeBwd_rO[0];
1219
1220 //define geometry
1221 G4Polycone* geo_AreaTubeBwdpcon = new G4Polycone("geo_AreaTubeBwdpcon_name", 0, 2 * M_PI, AreaTubeBwd_num, AreaTubeBwd_Z,
1222 AreaTubeBwd_rI, AreaTubeBwd_rO);
1223
1224 //----------
1225 //- Lv1TaHERUp
1226
1227 //get parameters from .xml file
1228 prep = "Lv1TaHERUp.";
1229 //
1230 double Lv1TaHERUp_A1 = m_config.getParameter(prep + "A1");
1231 //
1232 const int Lv1TaHERUp_num = 12;
1233 double Lv1TaHERUp_Z[Lv1TaHERUp_num];
1234 double Lv1TaHERUp_rO[Lv1TaHERUp_num];
1235 for (int i = 0; i < Lv1TaHERUp_num; i++) {
1236 ostringstream ossZ_Lv1TaHERUp;
1237 ossZ_Lv1TaHERUp << "L" << i + 1;
1238
1239 ostringstream ossR_Lv1TaHERUp;
1240 ossR_Lv1TaHERUp << "R" << i + 1;
1241
1242 Lv1TaHERUp_Z[i] = -m_config.getParameter(prep + ossZ_Lv1TaHERUp.str()) * Unit::cm / Unit::mm;
1243 Lv1TaHERUp_rO[i] = m_config.getParameter(prep + ossR_Lv1TaHERUp.str()) * Unit::cm / Unit::mm;
1244 }
1245 //
1246 double Lv1TaHERUp_rI[Lv1TaHERUp_num];
1247 for (int i = 0; i < Lv1TaHERUp_num; i++)
1248 { Lv1TaHERUp_rI[i] = 0.0; }
1249 //
1250 string strMat_Lv1TaHERUp = m_config.getParameterStr(prep + "Material");
1251 G4Material* mat_Lv1TaHERUp = Materials::get(strMat_Lv1TaHERUp);
1252
1253 //define geometry
1254 G4Polycone* geo_Lv1TaHERUppcon = new G4Polycone("geo_Lv1TaHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z, Lv1TaHERUp_rI,
1255 Lv1TaHERUp_rO);
1256 G4Transform3D transform_AreaTubeBwdForHER = G4Translate3D(0., 0., 0.);
1257 transform_AreaTubeBwdForHER = transform_AreaTubeBwdForHER * G4RotateY3D(-Lv1TaHERUp_A1);
1258 G4IntersectionSolid* geo_Lv1TaHERUp = new G4IntersectionSolid("", geo_Lv1TaHERUppcon, geo_AreaTubeBwdpcon,
1259 transform_AreaTubeBwdForHER);
1260 G4LogicalVolume* logi_Lv1TaHERUp = new G4LogicalVolume(geo_Lv1TaHERUp, mat_Lv1TaHERUp, "logi_Lv1TaHERUp_name");
1261
1262 //- put volume
1263 setColor(*logi_Lv1TaHERUp, "#00CC00");
1264 G4Transform3D transform_Lv1TaHERUp = G4Translate3D(0., 0., 0.);
1265 transform_Lv1TaHERUp = transform_Lv1TaHERUp * G4RotateY3D(Lv1TaHERUp_A1);
1266 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1TaHERUp, "phys_Lv1TaHERUp_name", &topVolume, false, 0);
1267
1268 //----------
1269 //-Lv1SUSHERUp
1270 prep = "Lv1SUSHERUp.";
1271 const int Lv1SUSHERUp_num = 6;
1272 double Lv1SUSHERUp_Z[Lv1SUSHERUp_num];
1273 double Lv1SUSHERUp_rO[Lv1SUSHERUp_num];
1274 double Lv1SUSHERUp_rI[Lv1SUSHERUp_num];
1275
1276 for (int i = 0; i < Lv1SUSHERUp_num; i++) {
1277 ostringstream ossZ_Lv1SUSHERUp;
1278 ossZ_Lv1SUSHERUp << "Z" << i + 1;
1279 ostringstream ossRI_Lv1SUSHERUp;
1280 ossRI_Lv1SUSHERUp << "RI" << i + 1;
1281 ostringstream ossRO_Lv1SUSHERUp;
1282 ossRO_Lv1SUSHERUp << "RO" << i + 1;
1283
1284 Lv1SUSHERUp_Z[i] = -m_config.getParameter(prep + ossZ_Lv1SUSHERUp.str()) * Unit::cm / Unit::mm;
1285 Lv1SUSHERUp_rI[i] = m_config.getParameter(prep + ossRI_Lv1SUSHERUp.str()) * Unit::cm / Unit::mm;
1286 Lv1SUSHERUp_rO[i] = m_config.getParameter(prep + ossRO_Lv1SUSHERUp.str()) * Unit::cm / Unit::mm;
1287 }
1288
1289 string strMat_Lv1SUSHERUp = m_config.getParameterStr(prep + "Material");
1290 G4Material* mat_Lv1SUSHERUp = Materials::get(strMat_Lv1SUSHERUp);
1291
1292 G4Polycone* geo_Lv1SUSHERUppcon = new G4Polycone("geo_Lv1SUSHERUppcon_name", 0, 2 * M_PI, Lv1SUSHERUp_num, Lv1SUSHERUp_Z,
1293 Lv1SUSHERUp_rI, Lv1SUSHERUp_rO);
1294 G4IntersectionSolid* geo_Lv1SUSHERUp = new G4IntersectionSolid("", geo_Lv1SUSHERUppcon, geo_AreaTubeBwdpcon,
1295 transform_AreaTubeFwdForHER);
1296 G4LogicalVolume* logi_Lv1SUSHERUp = new G4LogicalVolume(geo_Lv1SUSHERUp, mat_Lv1SUSHERUp, "logi_Lv1SUSHERUp_name");
1297
1298 //-put volume
1299 setColor(*logi_Lv1SUSHERUp, "#666666");
1300 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1SUSHERUp, "phys_Lv1SUSHERUp_name", &topVolume, false, 0);
1301
1302 //----------
1303 //- Lv2VacHERUp
1304
1305 //get parameters from .xml file
1306 prep = "Lv2VacHERUp.";
1307 //
1308 double Lv2VacHERUp_rO[Lv1TaHERUp_num];
1309 for (int i = 0; i < Lv1TaHERUp_num; i++) {
1310 Lv2VacHERUp_rO[i] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1311 }
1312 //
1313 string strMat_Lv2VacHERUp = m_config.getParameterStr(prep + "Material");
1314 G4Material* mat_Lv2VacHERUp = Materials::get(strMat_Lv2VacHERUp);
1315
1316 //define geometry
1317 G4Polycone* geo_Lv2VacHERUppcon = new G4Polycone("geo_Lv2VacHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z,
1318 Lv1TaHERUp_rI, Lv2VacHERUp_rO);
1319 G4IntersectionSolid* geo_Lv2VacHERUp = new G4IntersectionSolid("", geo_Lv2VacHERUppcon, geo_AreaTubeBwdpcon,
1320 transform_AreaTubeFwdForHER);
1321 G4LogicalVolume* logi_Lv2VacHERUp = new G4LogicalVolume(geo_Lv2VacHERUp, mat_Lv2VacHERUp, "logi_Lv2VacHERUp_name");
1322 if (flag_limitStep) logi_Lv2VacHERUp->SetUserLimits(new G4UserLimits(stepMax));
1323
1324 //- put volume
1325 setColor(*logi_Lv2VacHERUp, "#CCCCCC");
1326 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERUp, "phys_Lv2VacHERUp_name", logi_Lv1TaHERUp, false, 0);
1327
1328 //-
1329 //----------
1330
1331 //----------
1332 //- Lv1TaLERDwn
1333
1334 //get parameters from .xml file
1335 prep = "Lv1TaLERDwn.";
1336 //
1337 double Lv1TaLERDwn_A1 = m_config.getParameter(prep + "A1");
1338 //
1339 const int Lv1TaLERDwn_num = 12;
1340 //
1341 double Lv1TaLERDwn_Z[Lv1TaLERDwn_num];
1342 double Lv1TaLERDwn_rO[Lv1TaLERDwn_num];
1343 for (int i = 0; i < Lv1TaLERDwn_num; i++) {
1344 ostringstream ossZ_Lv1TaLERDwn;
1345 ossZ_Lv1TaLERDwn << "L" << i + 1;
1346
1347 ostringstream ossR_Lv1TaLERDwn;
1348 ossR_Lv1TaLERDwn << "R" << i + 1;
1349
1350 Lv1TaLERDwn_Z[i] = -m_config.getParameter(prep + ossZ_Lv1TaLERDwn.str()) * Unit::cm / Unit::mm;
1351 Lv1TaLERDwn_rO[i] = m_config.getParameter(prep + ossR_Lv1TaLERDwn.str()) * Unit::cm / Unit::mm;
1352 }
1353 //
1354 double Lv1TaLERDwn_rI[Lv1TaLERDwn_num];
1355 for (int i = 0; i < Lv1TaLERDwn_num; i++)
1356 { Lv1TaLERDwn_rI[i] = 0.0; }
1357 //
1358 string strMat_Lv1TaLERDwn = m_config.getParameterStr(prep + "Material");
1359 G4Material* mat_Lv1TaLERDwn = Materials::get(strMat_Lv1TaLERDwn);
1360
1361 //define geometry
1362 G4Polycone* geo_Lv1TaLERDwnpcon = new G4Polycone("geo_Lv1TaLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1363 Lv1TaLERDwn_rI, Lv1TaLERDwn_rO);
1364 G4Transform3D transform_AreaTubeBwdForLER = G4Translate3D(0., 0., 0.);
1365 transform_AreaTubeBwdForLER = transform_AreaTubeBwdForLER * G4RotateY3D(-Lv1TaLERDwn_A1);
1366 G4IntersectionSolid* geo_Lv1TaLERDwn = new G4IntersectionSolid("", geo_Lv1TaLERDwnpcon, geo_AreaTubeBwdpcon,
1367 transform_AreaTubeBwdForLER);
1368 G4LogicalVolume* logi_Lv1TaLERDwn = new G4LogicalVolume(geo_Lv1TaLERDwn, mat_Lv1TaLERDwn, "logi_Lv1TaLERDwn_name");
1369
1370 //- put volume
1371 setColor(*logi_Lv1TaLERDwn, "#0000CC");
1372 G4Transform3D transform_Lv1TaLERDwn = G4Translate3D(0., 0., 0.);
1373 transform_Lv1TaLERDwn = transform_Lv1TaLERDwn * G4RotateY3D(Lv1TaLERDwn_A1);
1374 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1TaLERDwn, "phys_Lv1TaLERDwn_name", &topVolume, false, 0);
1375
1376 //----------
1377 //-Lv1SUSLERDwn
1378 prep = "Lv1SUSLERDwn.";
1379 const int Lv1SUSLERDwn_num = 6;
1380 double Lv1SUSLERDwn_Z[Lv1SUSLERDwn_num];
1381 double Lv1SUSLERDwn_rO[Lv1SUSLERDwn_num];
1382 double Lv1SUSLERDwn_rI[Lv1SUSLERDwn_num];
1383
1384 for (int i = 0; i < Lv1SUSLERDwn_num; i++) {
1385 ostringstream ossZ_Lv1SUSLERDwn;
1386 ossZ_Lv1SUSLERDwn << "Z" << i + 1;
1387 ostringstream ossRI_Lv1SUSLERDwn;
1388 ossRI_Lv1SUSLERDwn << "RI" << i + 1;
1389 ostringstream ossRO_Lv1SUSLERDwn;
1390 ossRO_Lv1SUSLERDwn << "RO" << i + 1;
1391
1392 Lv1SUSLERDwn_Z[i] = -m_config.getParameter(prep + ossZ_Lv1SUSLERDwn.str()) * Unit::cm / Unit::mm;
1393 Lv1SUSLERDwn_rI[i] = m_config.getParameter(prep + ossRI_Lv1SUSLERDwn.str()) * Unit::cm / Unit::mm;
1394 Lv1SUSLERDwn_rO[i] = m_config.getParameter(prep + ossRO_Lv1SUSLERDwn.str()) * Unit::cm / Unit::mm;
1395 }
1396
1397 string strMat_Lv1SUSLERDwn = m_config.getParameterStr(prep + "Material");
1398 G4Material* mat_Lv1SUSLERDwn = Materials::get(strMat_Lv1SUSLERDwn);
1399
1400 G4Polycone* geo_Lv1SUSLERDwnpcon = new G4Polycone("geo_Lv1SUSLERDwnpcon_name", 0, 2 * M_PI, Lv1SUSLERDwn_num, Lv1SUSLERDwn_Z,
1401 Lv1SUSLERDwn_rI, Lv1SUSLERDwn_rO);
1402 G4IntersectionSolid* geo_Lv1SUSLERDwn = new G4IntersectionSolid("", geo_Lv1SUSLERDwnpcon, geo_AreaTubeBwdpcon,
1403 transform_AreaTubeFwdForHER);
1404 G4LogicalVolume* logi_Lv1SUSLERDwn = new G4LogicalVolume(geo_Lv1SUSLERDwn, mat_Lv1SUSLERDwn, "logi_Lv1SUSLERDwn_name");
1405
1406 //-put volume
1407 setColor(*logi_Lv1SUSLERDwn, "#666666");
1408 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1SUSLERDwn, "phys_Lv1SUSLERDwn_name", &topVolume, false, 0);
1409
1410 //----------
1411 //- Lv2VacLERDwn
1412
1413 //get parameters from .xml file
1414 prep = "Lv2VacLERDwn.";
1415 //
1416 double Lv2VacLERDwn_rO[Lv1TaLERDwn_num];
1417 for (int i = 0; i < Lv1TaLERDwn_num; i++) {
1418 Lv2VacLERDwn_rO[i] = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1419 }
1420 //
1421 string strMat_Lv2VacLERDwn = m_config.getParameterStr(prep + "Material");
1422 G4Material* mat_Lv2VacLERDwn = Materials::get(strMat_Lv2VacLERDwn);
1423
1424 //define geometry
1425 G4Polycone* geo_Lv2VacLERDwnpcon = new G4Polycone("geo_Lv2VacLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1426 Lv1TaLERDwn_rI, Lv2VacLERDwn_rO);
1427 G4IntersectionSolid* geo_Lv2VacLERDwn = new G4IntersectionSolid("", geo_Lv2VacLERDwnpcon, geo_AreaTubeBwdpcon,
1428 transform_AreaTubeBwdForLER);
1429 G4LogicalVolume* logi_Lv2VacLERDwn = new G4LogicalVolume(geo_Lv2VacLERDwn, mat_Lv2VacLERDwn, "logi_Lv2VacLERDwn_name");
1430 if (flag_limitStep) logi_Lv2VacLERDwn->SetUserLimits(new G4UserLimits(stepMax));
1431
1432 //- put volume
1433 setColor(*logi_Lv2VacLERDwn, "#CCCCCC");
1434 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERDwn, "phys_Lv2VacLERDwn_name", logi_Lv1TaLERDwn, false, 0);
1435
1436
1437 //----------
1438 // Cu flange
1439
1440 G4IntersectionSolid* geo_CuFlangeFwd_x2 = new G4IntersectionSolid("geo_CuFlangeFwd_x2_name", geo_AreaTubeFwdpcon, geo_Flange,
1441 G4Translate3D(0, 0, Flange_D + Flange_T * 2));
1442 G4SubtractionSolid* geo_CuFlangeFwd_x = new G4SubtractionSolid("geo_CuFlangeFwd_x_name", geo_CuFlangeFwd_x2, geo_Lv1TaLERUp,
1443 transform_Lv1TaLERUp);
1444 G4SubtractionSolid* geo_CuFlangeFwd = new G4SubtractionSolid("geo_CuFlangeFwd_name", geo_CuFlangeFwd_x, geo_Lv1TaHERDwn,
1445 transform_Lv1TaHERDwn);
1446
1447 G4LogicalVolume* logi_CuFlangeFwd = new G4LogicalVolume(geo_CuFlangeFwd, mat_Lv1TaLERUp, "logi_CuFlangeFwd_name");
1448
1449 //- put volume
1450 setColor(*logi_CuFlangeFwd, "#CCCCCC");
1451 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeFwd, "phys_CuFlangeFwd_name", &topVolume, false, 0);
1452
1453
1454
1455
1456 G4IntersectionSolid* geo_CuFlangeBwd_x2 = new G4IntersectionSolid("geo_CuFlangeBwd_x2_name", geo_AreaTubeBwdpcon, geo_Flange,
1457 G4Translate3D(0, 0, -Flange_D - Flange_T * 2));
1458 G4SubtractionSolid* geo_CuFlangeBwd_x = new G4SubtractionSolid("geo_CuFlangeBwd_x_name", geo_CuFlangeBwd_x2, geo_Lv1TaHERUp,
1459 transform_Lv1TaHERUp);
1460 G4SubtractionSolid* geo_CuFlangeBwd = new G4SubtractionSolid("geo_CuFlangeBwd_name", geo_CuFlangeBwd_x, geo_Lv1TaLERDwn,
1461 transform_Lv1TaLERDwn);
1462
1463 G4LogicalVolume* logi_CuFlangeBwd = new G4LogicalVolume(geo_CuFlangeBwd, mat_Lv1TaLERUp, "logi_CuFlangeBwd_name");
1464
1465 //- put volume
1466 setColor(*logi_CuFlangeBwd, "#CCCCCC");
1467 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeBwd, "phys_CuFlangeBwd_name", &topVolume, false, 0);
1468
1471
1472 //----------
1473 //- PXDMountFwd
1474
1475 //get parameters from .xml file
1476 prep = "PXDMountFwd.";
1477 //
1478 double PXDMountFwd_Z1 = m_config.getParameter(prep + "Z1") * Unit::cm / Unit::mm;
1479 double PXDMountFwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1480 double PXDMountFwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
1481 double PXDMountFwd_R2 = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
1482 double PXDMountFwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
1483 double PXDMountFwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
1484 //
1485 string strMat_PXDMountFwd = m_config.getParameterStr(prep + "Material");
1486 G4Material* mat_PXDMountFwd = Materials::get(strMat_PXDMountFwd);
1487
1488 //define geometry
1489 G4VSolid* geo_PXDMountFwd_a = new G4Tubs("geo_PXDMountFwd_a", 0, PXDMountFwd_R1, PXDMountFwd_D1 / 2, 0, 2 * M_PI);
1490 G4VSolid* geo_PXDMountFwd_b = new G4SubtractionSolid("geo_PXDMountFwd_b", geo_PXDMountFwd_a, geo_Lv1TaFwd_d, G4Translate3D(0., 0.,
1491 -(-Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) + PXDMountFwd_D1 / 2));
1492 G4VSolid* geo_PXDMountFwd_c = new G4Tubs("geo_PXDMountFwd_c", 0, PXDMountFwd_R2, 100, 0, 2 * M_PI);
1493 G4VSolid* geo_PXDMountFwd_d = new G4Box("geo_PXDMountFwd_d", PXDMountFwd_R1 - PXDMountFwd_L1, 100, PXDMountFwd_R2);
1494
1495 G4VSolid* geo_PXDMountFwd_p1 = new G4SubtractionSolid("geo_PXDMountFwd_p1", geo_PXDMountFwd_b, geo_PXDMountFwd_c,
1496 G4Translate3D(+PXDMountFwd_L1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1497 G4VSolid* geo_PXDMountFwd_p2 = new G4SubtractionSolid("geo_PXDMountFwd_p2", geo_PXDMountFwd_p1, geo_PXDMountFwd_c,
1498 G4Translate3D(+PXDMountFwd_L1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1499 G4VSolid* geo_PXDMountFwd_p3 = new G4SubtractionSolid("geo_PXDMountFwd_p3", geo_PXDMountFwd_p2, geo_PXDMountFwd_c,
1500 G4Translate3D(-PXDMountFwd_L1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1501 G4VSolid* geo_PXDMountFwd_p4 = new G4SubtractionSolid("geo_PXDMountFwd_p4", geo_PXDMountFwd_p3, geo_PXDMountFwd_c,
1502 G4Translate3D(-PXDMountFwd_L1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1503
1504 G4VSolid* geo_PXDMountFwd_q1 = new G4SubtractionSolid("geo_PXDMountFwd_q1", geo_PXDMountFwd_p4, geo_PXDMountFwd_d,
1505 G4Translate3D(+PXDMountFwd_R1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1506 G4VSolid* geo_PXDMountFwd_q2 = new G4SubtractionSolid("geo_PXDMountFwd_q2", geo_PXDMountFwd_q1, geo_PXDMountFwd_d,
1507 G4Translate3D(+PXDMountFwd_R1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1508 G4VSolid* geo_PXDMountFwd_q3 = new G4SubtractionSolid("geo_PXDMountFwd_q3", geo_PXDMountFwd_q2, geo_PXDMountFwd_d,
1509 G4Translate3D(-PXDMountFwd_R1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1510 G4VSolid* geo_PXDMountFwd_q4 = new G4SubtractionSolid("geo_PXDMountFwd_q4", geo_PXDMountFwd_q3, geo_PXDMountFwd_d,
1511 G4Translate3D(-PXDMountFwd_R1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1512
1513 G4VSolid* geo_PXDMountFwd = geo_PXDMountFwd_q4;
1514
1515 G4LogicalVolume* logi_PXDMountFwd = new G4LogicalVolume(geo_PXDMountFwd, mat_PXDMountFwd, "logi_PXDMountFwd_name");
1516 setColor(*logi_PXDMountFwd, "#333333");
1517
1518 new G4PVPlacement(0, G4ThreeVector(0, 0, +PXDMountFwd_D1 / 2 + PXDMountFwd_Z1), logi_PXDMountFwd, "phys_PXDMountFwd_name",
1519 &topVolume, false, 0);
1520
1521
1522 //adding the screws
1523 double PXDMountFixture_screw_radius = 0.2 * Unit::cm / Unit::mm;
1524 double PXDMountFixture_screw_length = 0.5 * Unit::cm / Unit::mm; //half z
1525 G4VSolid* geo_PXDMountFwd_s1 = new G4Tubs("geo_PXDMountFwd_s1", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1526 2 * M_PI);
1527 G4VSolid* geo_PXDMountFwd_s2 = new G4Tubs("geo_PXDMountFwd_s2", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1528 2 * M_PI);
1529 G4VSolid* geo_PXDMountFwd_s3 = new G4Tubs("geo_PXDMountFwd_s3", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1530 2 * M_PI);
1531 G4VSolid* geo_PXDMountFwd_s4 = new G4Tubs("geo_PXDMountFwd_s4", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1532 2 * M_PI);
1533
1534 G4Material* mat_PXDMountFwd_s = Materials::get("Cu");
1535
1536 G4Rotate3D rotate_PXDMountFwd = G4RotateX3D(-M_PI / 2.0 / Unit::rad);
1537 G4Transform3D transform_PXDMountFwd_s1 = G4Translate3D(+PXDMountFwd_L1, 0,
1538 PXDMountFwd_Z1 + PXDMountFwd_D1 - PXDMountFwd_L2) * rotate_PXDMountFwd;
1539 G4Transform3D transform_PXDMountFwd_s2 = G4Translate3D(+PXDMountFwd_L1, 0, PXDMountFwd_Z1 + PXDMountFwd_L2) * rotate_PXDMountFwd;
1540 G4Transform3D transform_PXDMountFwd_s3 = G4Translate3D(-PXDMountFwd_L1, 0,
1541 PXDMountFwd_Z1 + PXDMountFwd_D1 - PXDMountFwd_L2) * rotate_PXDMountFwd;
1542 G4Transform3D transform_PXDMountFwd_s4 = G4Translate3D(-PXDMountFwd_L1, 0, PXDMountFwd_Z1 + PXDMountFwd_L2) * rotate_PXDMountFwd;
1543
1544 G4LogicalVolume* logi_PXDMountFwd_s1 = new G4LogicalVolume(geo_PXDMountFwd_s1, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s1");
1545 G4LogicalVolume* logi_PXDMountFwd_s2 = new G4LogicalVolume(geo_PXDMountFwd_s2, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s2");
1546 G4LogicalVolume* logi_PXDMountFwd_s3 = new G4LogicalVolume(geo_PXDMountFwd_s3, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s3");
1547 G4LogicalVolume* logi_PXDMountFwd_s4 = new G4LogicalVolume(geo_PXDMountFwd_s4, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s4");
1548
1549 new G4PVPlacement(transform_PXDMountFwd_s1, logi_PXDMountFwd_s1, "phys_PXDMountFwd_name_s1", &topVolume, false, 0);
1550 new G4PVPlacement(transform_PXDMountFwd_s2, logi_PXDMountFwd_s2, "phys_PXDMountFwd_name_s2", &topVolume, false, 0);
1551 new G4PVPlacement(transform_PXDMountFwd_s3, logi_PXDMountFwd_s3, "phys_PXDMountFwd_name_s3", &topVolume, false, 0);
1552 new G4PVPlacement(transform_PXDMountFwd_s4, logi_PXDMountFwd_s4, "phys_PXDMountFwd_name_s4", &topVolume, false, 0);
1553
1554 //----------
1555 //- PXDMountFixtureFwd
1556 prep = "PXDMountFixtureFwd.";
1557 //
1558 double PXDMountFixtureFwd_Z1 = m_config.getParameter(prep + "Z1") * Unit::cm / Unit::mm;
1559 double PXDMountFixtureFwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1560 double PXDMountFixtureFwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
1561 double PXDMountFixtureFwd_T1 = m_config.getParameter(prep + "T1") * Unit::cm / Unit::mm;
1562 double PXDMountFixtureFwd_T2 = m_config.getParameter(prep + "T2") * Unit::cm / Unit::mm;
1563 double PXDMountFixtureFwd_FL = m_config.getParameter(prep + "I1") * Unit::cm / Unit::mm;
1564 double PXDMountFixtureFwd_inner_cut_phi = PXDMountFixtureFwd_FL / (PXDMountFwd_R1 + PXDMountFixtureFwd_T1);
1565 double PXDMountFixtureFwd_outter_uni_phi = (1 / 6.0) * M_PI - PXDMountFixtureFwd_FL / PXDMountFixtureFwd_R1;
1566
1567 string strMat_PXDMountFixtureFwd = m_config.getParameterStr(prep + "Material");
1568 G4Material* mat_PXDMountFixtureFwd = Materials::get(strMat_PXDMountFixtureFwd);
1569
1570 //define geometry
1571 G4VSolid* geo_PXDMountFixtureFwd_a = new G4Tubs("geo_PXDMountFixtureFwd_a", 0, PXDMountFixtureFwd_R1 - PXDMountFixtureFwd_T2,
1572 PXDMountFixtureFwd_D1 / 2, 0,
1573 2 * M_PI);
1574 G4VSolid* geo_PXDMountFixtureFwd_b = new G4Box("geo_PXDMountFixtureFwd_b", PXDMountFixtureFwd_R1 * 0.5, 0.1 * Unit::cm / Unit::mm,
1575 100);
1576
1577 G4VSolid* geo_PXDMountFixtureFwd_b1 = new G4Box("geo_PXDMountFixtureFwd_b1", PXDMountFwd_R1 + PXDMountFixtureFwd_T1,
1578 PXDMountFixtureFwd_FL * 0.5, 100);
1579 G4VSolid* geo_PXDMountFixtureFwd_b2 = new G4Tubs("geo_PXDMountFixtureFwd_b2", PXDMountFwd_R1 + PXDMountFixtureFwd_T1,
1580 PXDMountFixtureFwd_R1, PXDMountFixtureFwd_D1 / 2,
1581 0, PXDMountFixtureFwd_outter_uni_phi);
1582 G4VSolid* geo_PXDMountFixtureFwd_b3 = new G4Box("geo_PXDMountFixtureFwd_b3", 0.2 * Unit::cm / Unit::mm, 0.35 * Unit::cm / Unit::mm,
1583 100 * Unit::cm / Unit::mm);
1584
1585 G4VSolid* geo_PXDMountFixtureFwd_a1 = new G4Tubs("geo_PXDMountFixtureFwd_a1", 0, PXDMountFwd_R1, 100, 0, 2 * M_PI);
1586
1587 G4VSolid* geo_PXDMountFixtureFwd_c1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_c1", geo_PXDMountFixtureFwd_a,
1588 geo_PXDMountFixtureFwd_a1);
1589
1590
1591 G4VSolid* geo_PXDMountFixtureFwd_d1 = geo_PXDMountFixtureFwd_c1;
1592 for (int i = 0; i < 4; ++i) {
1593
1594 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1595 geo_PXDMountFixtureFwd_b1, G4RotateZ3D(i * 0.25 * M_PI));
1596 }
1597 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1598 geo_PXDMountFixtureFwd_b, G4Translate3D(PXDMountFixtureFwd_R1, - PXDMountFixtureFwd_FL * 0.5, 0));
1599 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1600 geo_PXDMountFixtureFwd_b, G4Translate3D(-PXDMountFixtureFwd_R1, PXDMountFixtureFwd_FL * 0.5, 0));
1601
1602
1603 double PXDMountFixtureFwd_R1_temp = PXDMountFixtureFwd_R1 - PXDMountFixtureFwd_T2;
1604 for (int i = 2; i < 7; i += 4) {
1605
1606 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1607 geo_PXDMountFixtureFwd_b3,
1608 G4Translate3D(PXDMountFixtureFwd_R1_temp * cos(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1609 PXDMountFixtureFwd_R1_temp * sin(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1610 0)*G4RotateZ3D(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi));
1611
1612 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1613 geo_PXDMountFixtureFwd_b3,
1614 G4Translate3D(PXDMountFixtureFwd_R1_temp * cos(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1615 PXDMountFixtureFwd_R1_temp * sin(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1616 0)*G4RotateZ3D(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi));
1617
1618 }
1619 G4VSolid* geo_PXDMountFixtureFwd_d2 = geo_PXDMountFixtureFwd_d1;
1620 for (int i = 0; i < 12; ++i) {
1621 if (i == 2 || i == 3 || i == 8 || i == 9) continue;
1622 geo_PXDMountFixtureFwd_d2 = new G4UnionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d2,
1623 geo_PXDMountFixtureFwd_b2, G4RotateZ3D(i * (1 / 6.0) * M_PI + ((1 / 12.0)*M_PI - 0.5 * PXDMountFixtureFwd_outter_uni_phi)));
1624
1625 }
1626
1627 G4VSolid* geo_PXDMountFixtureFwd = geo_PXDMountFixtureFwd_d2;
1628 G4LogicalVolume* logi_PXDMountFixtureFwd = new G4LogicalVolume(geo_PXDMountFixtureFwd, mat_PXDMountFixtureFwd,
1629 "logi_PXDMountFixtureFwd_name");
1630 setColor(*logi_PXDMountFixtureFwd, "#333333");
1631
1632 new G4PVPlacement(0, G4ThreeVector(0, 0, +PXDMountFixtureFwd_D1 / 2 + PXDMountFixtureFwd_Z1), logi_PXDMountFixtureFwd,
1633 "phys_PXDMountFixtureFwd_name",
1634 &topVolume, false, 0);
1635 //----------
1636 //- PXDMountBwd
1637
1638 //get parameters from .xml file
1639 prep = "PXDMountBwd.";
1640 //
1641 double PXDMountBwd_Z1 = m_config.getParameter(prep + "Z1") * Unit::cm / Unit::mm;
1642 double PXDMountBwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1643 double PXDMountBwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
1644 double PXDMountBwd_R2 = m_config.getParameter(prep + "R2") * Unit::cm / Unit::mm;
1645 double PXDMountBwd_L1 = m_config.getParameter(prep + "L1") * Unit::cm / Unit::mm;
1646 double PXDMountBwd_L2 = m_config.getParameter(prep + "L2") * Unit::cm / Unit::mm;
1647 //
1648 string strMat_PXDMountBwd = m_config.getParameterStr(prep + "Material");
1649 G4Material* mat_PXDMountBwd = Materials::get(strMat_PXDMountBwd);
1650
1651 //define geometry
1652 G4VSolid* geo_PXDMountBwd_a = new G4Tubs("geo_PXDMountBwd_a", 0, PXDMountBwd_R1, PXDMountBwd_D1 / 2, 0, 2 * M_PI);
1653 G4VSolid* geo_PXDMountBwd_b = new G4SubtractionSolid("geo_PXDMountBwd_b", geo_PXDMountBwd_a, geo_Lv1TaBwd_d, G4Translate3D(0., 0.,
1654 -(+Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3)) - PXDMountBwd_D1 / 2));
1655 G4VSolid* geo_PXDMountBwd_c = new G4Tubs("geo_PXDMountBwd_c", 0, PXDMountBwd_R2, 100, 0, 2 * M_PI);
1656 G4VSolid* geo_PXDMountBwd_d = new G4Box("geo_PXDMountBwd_d", PXDMountBwd_R1 - PXDMountBwd_L1, 100, PXDMountBwd_R2);
1657
1658 G4VSolid* geo_PXDMountBwd_p1 = new G4SubtractionSolid("geo_PXDMountBwd_p1", geo_PXDMountBwd_b, geo_PXDMountBwd_c,
1659 G4Translate3D(+PXDMountBwd_L1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1660 G4VSolid* geo_PXDMountBwd_p2 = new G4SubtractionSolid("geo_PXDMountBwd_p2", geo_PXDMountBwd_p1, geo_PXDMountBwd_c,
1661 G4Translate3D(+PXDMountBwd_L1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1662 G4VSolid* geo_PXDMountBwd_p3 = new G4SubtractionSolid("geo_PXDMountBwd_p3", geo_PXDMountBwd_p2, geo_PXDMountBwd_c,
1663 G4Translate3D(-PXDMountBwd_L1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1664 G4VSolid* geo_PXDMountBwd_p4 = new G4SubtractionSolid("geo_PXDMountBwd_p4", geo_PXDMountBwd_p3, geo_PXDMountBwd_c,
1665 G4Translate3D(-PXDMountBwd_L1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1666
1667 G4VSolid* geo_PXDMountBwd_q1 = new G4SubtractionSolid("geo_PXDMountBwd_q1", geo_PXDMountBwd_p4, geo_PXDMountBwd_d,
1668 G4Translate3D(+PXDMountBwd_R1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1669 G4VSolid* geo_PXDMountBwd_q2 = new G4SubtractionSolid("geo_PXDMountBwd_q2", geo_PXDMountBwd_q1, geo_PXDMountBwd_d,
1670 G4Translate3D(+PXDMountBwd_R1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1671 G4VSolid* geo_PXDMountBwd_q3 = new G4SubtractionSolid("geo_PXDMountBwd_q3", geo_PXDMountBwd_q2, geo_PXDMountBwd_d,
1672 G4Translate3D(-PXDMountBwd_R1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1673 G4VSolid* geo_PXDMountBwd_q4 = new G4SubtractionSolid("geo_PXDMountBwd_q4", geo_PXDMountBwd_q3, geo_PXDMountBwd_d,
1674 G4Translate3D(-PXDMountBwd_R1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1675
1676 G4VSolid* geo_PXDMountBwd = geo_PXDMountBwd_q4;
1677
1678 G4LogicalVolume* logi_PXDMountBwd = new G4LogicalVolume(geo_PXDMountBwd, mat_PXDMountBwd, "logi_PXDMountBwd_name");
1679 setColor(*logi_PXDMountBwd, "#333333");
1680
1681 new G4PVPlacement(0, G4ThreeVector(0, 0, -PXDMountBwd_D1 / 2 - PXDMountBwd_Z1), logi_PXDMountBwd, "phys_PXDMountBwd_name",
1682 &topVolume, false, 0);
1683
1684 // adding screws
1685 //
1686 G4VSolid* geo_PXDMountBwd_s1 = new G4Tubs("geo_PXDMountBwd_s1", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1687 2 * M_PI);
1688 G4VSolid* geo_PXDMountBwd_s2 = new G4Tubs("geo_PXDMountBwd_s2", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1689 2 * M_PI);
1690 G4VSolid* geo_PXDMountBwd_s3 = new G4Tubs("geo_PXDMountBwd_s3", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1691 2 * M_PI);
1692 G4VSolid* geo_PXDMountBwd_s4 = new G4Tubs("geo_PXDMountBwd_s4", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1693 2 * M_PI);
1694
1695 G4Material* mat_PXDMountBwd_s = Materials::get("Cu");
1696
1697 G4Rotate3D rotate_PXDMountBwd = G4RotateX3D(-M_PI / 2.0 / Unit::rad);
1698 G4Transform3D transform_PXDMountBwd_s1 = G4Translate3D(+PXDMountBwd_L1, 0,
1699 -PXDMountBwd_Z1 - PXDMountBwd_D1 + PXDMountBwd_L2) * rotate_PXDMountBwd;
1700 G4Transform3D transform_PXDMountBwd_s2 = G4Translate3D(+PXDMountBwd_L1, 0, -PXDMountBwd_Z1 - PXDMountBwd_L2) * rotate_PXDMountBwd;
1701 G4Transform3D transform_PXDMountBwd_s3 = G4Translate3D(-PXDMountBwd_L1, 0,
1702 -PXDMountBwd_Z1 - PXDMountBwd_D1 + PXDMountBwd_L2) * rotate_PXDMountBwd;
1703 G4Transform3D transform_PXDMountBwd_s4 = G4Translate3D(-PXDMountBwd_L1, 0, -PXDMountBwd_Z1 - PXDMountBwd_L2) * rotate_PXDMountBwd;
1704
1705 G4LogicalVolume* logi_PXDMountBwd_s1 = new G4LogicalVolume(geo_PXDMountBwd_s1, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s1");
1706 G4LogicalVolume* logi_PXDMountBwd_s2 = new G4LogicalVolume(geo_PXDMountBwd_s2, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s2");
1707 G4LogicalVolume* logi_PXDMountBwd_s3 = new G4LogicalVolume(geo_PXDMountBwd_s3, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s3");
1708 G4LogicalVolume* logi_PXDMountBwd_s4 = new G4LogicalVolume(geo_PXDMountBwd_s4, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s4");
1709
1710 new G4PVPlacement(transform_PXDMountBwd_s1, logi_PXDMountBwd_s1, "phys_PXDMountBwd_name_s1", &topVolume, false, 0);
1711 new G4PVPlacement(transform_PXDMountBwd_s2, logi_PXDMountBwd_s2, "phys_PXDMountBwd_name_s2", &topVolume, false, 0);
1712 new G4PVPlacement(transform_PXDMountBwd_s3, logi_PXDMountBwd_s3, "phys_PXDMountBwd_name_s3", &topVolume, false, 0);
1713 new G4PVPlacement(transform_PXDMountBwd_s4, logi_PXDMountBwd_s4, "phys_PXDMountBwd_name_s4", &topVolume, false, 0);
1714
1715 //----------
1716 //- PXDMountFixtureBwd
1717 prep = "PXDMountFixtureBwd.";
1718 //
1719 double PXDMountFixtureBwd_Z1 = m_config.getParameter(prep + "Z1") * Unit::cm / Unit::mm;
1720 double PXDMountFixtureBwd_R1 = m_config.getParameter(prep + "R1") * Unit::cm / Unit::mm;
1721 double PXDMountFixtureBwd_D1 = m_config.getParameter(prep + "D1") * Unit::cm / Unit::mm;
1722 double PXDMountFixtureBwd_T1 = m_config.getParameter(prep + "T1") * Unit::cm / Unit::mm;
1723 double PXDMountFixtureBwd_T2 = m_config.getParameter(prep + "T2") * Unit::cm / Unit::mm;
1724 double PXDMountFixtureBwd_FL = m_config.getParameter(prep + "I1") * Unit::cm / Unit::mm;
1725 double PXDMountFixtureBwd_inner_cut_phi = PXDMountFixtureBwd_FL / (PXDMountBwd_R1 + PXDMountFixtureBwd_T1);
1726 double PXDMountFixtureBwd_outter_uni_phi = (1 / 6.0) * M_PI - PXDMountFixtureBwd_FL / PXDMountFixtureBwd_R1;
1727
1728 string strMat_PXDMountFixtureBwd = m_config.getParameterStr(prep + "Material");
1729 G4Material* mat_PXDMountFixtureBwd = Materials::get(strMat_PXDMountFixtureBwd);
1730
1731 //define geometry
1732 G4VSolid* geo_PXDMountFixtureBwd_a = new G4Tubs("geo_PXDMountFixtureBwd_a", 0, PXDMountFixtureBwd_R1 - PXDMountFixtureBwd_T2,
1733 PXDMountFixtureBwd_D1 / 2, 0,
1734 2 * M_PI);
1735 G4VSolid* geo_PXDMountFixtureBwd_b = new G4Box("geo_PXDMountFixtureBwd_b", PXDMountFixtureBwd_R1 * 0.5, 0.1 * Unit::cm / Unit::mm,
1736 100);
1737
1738 G4VSolid* geo_PXDMountFixtureBwd_b1 = new G4Box("geo_PXDMountFixtureBwd_b1", PXDMountBwd_R1 + PXDMountFixtureBwd_T1,
1739 PXDMountFixtureBwd_FL * 0.5, 100);
1740 G4VSolid* geo_PXDMountFixtureBwd_b2 = new G4Tubs("geo_PXDMountFixtureBwd_b2", PXDMountBwd_R1 + PXDMountFixtureBwd_T1,
1741 PXDMountFixtureBwd_R1, PXDMountFixtureBwd_D1 / 2,
1742 0, PXDMountFixtureBwd_outter_uni_phi);
1743 G4VSolid* geo_PXDMountFixtureBwd_b3 = new G4Box("geo_PXDMountFixtureBwd_b3", 0.2 * Unit::cm / Unit::mm, 0.35 * Unit::cm / Unit::mm,
1744 100 * Unit::cm / Unit::mm);
1745
1746 G4VSolid* geo_PXDMountFixtureBwd_a1 = new G4Tubs("geo_PXDMountFixtureBwd_a1", 0, PXDMountBwd_R1, 100, 0, 2 * M_PI);
1747
1748 G4VSolid* geo_PXDMountFixtureBwd_c1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_c1", geo_PXDMountFixtureBwd_a,
1749 geo_PXDMountFixtureBwd_a1);
1750
1751
1752 G4VSolid* geo_PXDMountFixtureBwd_d1 = geo_PXDMountFixtureBwd_c1;
1753 for (int i = 0; i < 4; ++i) {
1754
1755 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1756 geo_PXDMountFixtureBwd_b1, G4RotateZ3D(i * 0.25 * M_PI));
1757 }
1758 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1759 geo_PXDMountFixtureBwd_b, G4Translate3D(PXDMountFixtureBwd_R1, - PXDMountFixtureBwd_FL * 0.5, 0));
1760 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1761 geo_PXDMountFixtureBwd_b, G4Translate3D(-PXDMountFixtureBwd_R1, PXDMountFixtureBwd_FL * 0.5, 0));
1762
1763
1764 double PXDMountFixtureBwd_R1_temp = PXDMountFixtureBwd_R1 - PXDMountFixtureBwd_T2;
1765 for (int i = 2; i < 7; i += 4) {
1766
1767 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1768 geo_PXDMountFixtureBwd_b3,
1769 G4Translate3D(PXDMountFixtureBwd_R1_temp * cos(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1770 PXDMountFixtureBwd_R1_temp * sin(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1771 0)*G4RotateZ3D(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi));
1772
1773 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1774 geo_PXDMountFixtureBwd_b3,
1775 G4Translate3D(PXDMountFixtureBwd_R1_temp * cos(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1776 PXDMountFixtureBwd_R1_temp * sin(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1777 0)*G4RotateZ3D(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi));
1778
1779 }
1780 G4VSolid* geo_PXDMountFixtureBwd_d2 = geo_PXDMountFixtureBwd_d1;
1781 for (int i = 0; i < 12; ++i) {
1782 if (i == 2 || i == 3 || i == 8 || i == 9) continue;
1783 geo_PXDMountFixtureBwd_d2 = new G4UnionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d2,
1784 geo_PXDMountFixtureBwd_b2, G4RotateZ3D(i * (1 / 6.0) * M_PI + ((1 / 12.0)*M_PI - 0.5 * PXDMountFixtureBwd_outter_uni_phi)));
1785
1786 }
1787
1788 G4VSolid* geo_PXDMountFixtureBwd = geo_PXDMountFixtureBwd_d2;
1789 G4LogicalVolume* logi_PXDMountFixtureBwd = new G4LogicalVolume(geo_PXDMountFixtureBwd, mat_PXDMountFixtureBwd,
1790 "logi_PXDMountFixtureBwd_name");
1791 setColor(*logi_PXDMountFixtureBwd, "#333333");
1792
1793 new G4PVPlacement(0, G4ThreeVector(0, 0, -PXDMountFixtureBwd_D1 / 2 - PXDMountFixtureBwd_Z1), logi_PXDMountFixtureBwd,
1794 "phys_PXDMountFixtureBwd_name",
1795 &topVolume, false, 0);
1796
1797
1798 //---------------------------
1799 // for dose simulation
1800 //---------------------------
1801
1802 int Index_sensi = 11;
1803 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1804 logi_Lv3AuCoat->SetSensitiveDetector(m_sensitive.back());
1805
1806 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1807 logi_Lv1TaFwd->SetSensitiveDetector(m_sensitive.back());
1808
1809 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1810 logi_Lv1TaBwd->SetSensitiveDetector(m_sensitive.back());
1811
1812 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1813 logi_Lv1TaLERUp->SetSensitiveDetector(m_sensitive.back());
1814
1815 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1816 logi_Lv1SUSLERUp->SetSensitiveDetector(m_sensitive.back());
1817
1818 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1819 logi_Lv1TaHERDwn->SetSensitiveDetector(m_sensitive.back());
1820
1821 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1822 logi_Lv1SUSHERDwn->SetSensitiveDetector(m_sensitive.back());
1823
1824 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1825 logi_Lv1TaHERUp->SetSensitiveDetector(m_sensitive.back());
1826
1827 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1828 logi_Lv1SUSHERUp->SetSensitiveDetector(m_sensitive.back());
1829
1830 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1831 logi_Lv1TaLERDwn->SetSensitiveDetector(m_sensitive.back());
1832
1833 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1834 logi_Lv1SUSLERDwn->SetSensitiveDetector(m_sensitive.back());
1835
1836 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1837 logi_CuFlangeFwd->SetSensitiveDetector(m_sensitive.back());
1838
1839 m_sensitive.push_back((SensitiveDetector*)(new BkgSensitiveDetector("IR", Index_sensi++)));
1840 logi_CuFlangeBwd->SetSensitiveDetector(m_sensitive.back());
1841
1842 //-
1843 //----------
1844
1847 }
const std::string & getParameterStr(const std::string &name) const
Get string parameter.
Definition: IRGeoBase.h:64
double getParameter(const std::string &name) const
Get parameter value.
Definition: IRGeoBase.h:41
static const double mm
[millimeters]
Definition: Unit.h:70
static const double rad
Standard of [angle].
Definition: Unit.h:50
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
double sqrt(double a)
sqrt for double
Definition: beamHelpers.h:28
void setVisibility(G4LogicalVolume &volume, bool visible)
Helper function to quickly set the visibility of a given volume.
Definition: utilities.cc:108
void setColor(G4LogicalVolume &volume, const std::string &color)
Set the color of a logical volume.
Definition: utilities.cc:100

◆ createPayloads()

virtual void createPayloads ( const GearDir content,
const IntervalOfValidity iov 
)
inlineoverridevirtual

creates DB payload for BeamPipeGeo class

Reimplemented from CreatorBase.

Definition at line 78 of file GeoBeamPipeCreator.h.

79 {
80 DBImportObjPtr<BeamPipeGeo> importObj;
81 importObj.construct(createConfiguration(content));
82 importObj.import(iov);
83 }

Member Data Documentation

◆ m_config

BeamPipeGeo m_config
protected

geometry parameters object

Definition at line 101 of file GeoBeamPipeCreator.h.

◆ m_sensitive

std::vector<SensitiveDetector*> m_sensitive
protected

Sensitive detector.

Definition at line 99 of file GeoBeamPipeCreator.h.


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