12 #include <ir/geometry/GeoBeamPipeCreator.h>
14 #include <geometry/Materials.h>
15 #include <geometry/CreatorFactory.h>
16 #include <geometry/utilities.h>
17 #include <framework/gearbox/Unit.h>
18 #include <ir/simulation/SensitiveDetector.h>
21 #include <boost/format.hpp>
22 #include <boost/foreach.hpp>
23 #include <boost/algorithm/string.hpp>
25 #include <G4LogicalVolume.hh>
26 #include <G4PVPlacement.hh>
31 #include <G4Polycone.hh>
32 #include <G4UnionSolid.hh>
33 #include <G4IntersectionSolid.hh>
34 #include <G4SubtractionSolid.hh>
35 #include <G4UserLimits.hh>
38 using namespace boost;
46 using namespace geometry;
54 geometry::CreatorFactory<GeoBeamPipeCreator> GeoBeamPipeFactory(
"BeamPipeCreator");
60 GeoBeamPipeCreator::GeoBeamPipeCreator()
64 GeoBeamPipeCreator::~GeoBeamPipeCreator()
73 void GeoBeamPipeCreator::createGeometry(G4LogicalVolume& topVolume,
GeometryTypes)
104 double SafetyLength = m_config.getParameter(
"Safety.L1") * Unit::cm / Unit::mm;
106 double stepMax = 5.0 * Unit::mm;
107 int flag_limitStep = int(m_config.getParameter(
"LimitStepLength"));
109 double A11 = 0.03918;
118 std::string prep =
"Lv1SUS.";
120 const int Lv1SUS_num = 21;
122 double Lv1SUS_Z[Lv1SUS_num];
124 for (
int tmpn = 0; tmpn < 8; tmpn++) {
125 Lv1SUS_Z[0] -= m_config.getParameter(prep + (format(
"L%1%") % (tmpn + 1)).str().c_str()) * Unit::cm / Unit::mm;
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;
148 double Lv1SUS_rI[Lv1SUS_num];
149 for (
int tmpn = 0; tmpn < Lv1SUS_num; tmpn++)
150 { Lv1SUS_rI[tmpn] = 0.0; }
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];
175 string strMat_Lv1SUS = m_config.getParameterStr(prep +
"Material");
176 G4Material* mat_Lv1SUS = Materials::get(strMat_Lv1SUS);
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");
186 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv1SUS,
"phys_Lv1SUS_name", &topVolume,
false, 0);
194 if (m_config.getParameter(
"Lv2OutTi.L1", -1) > 0) {
197 const int Lv2OutTi_num = 2;
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;
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];
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];
211 string strMat_Lv2OutTi = m_config.getParameterStr(prep +
"Material");
212 G4Material* mat_Lv2OutTi = Materials::get(strMat_Lv2OutTi);
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");
219 setColor(*logi_Lv2OutTi,
"#333300");
220 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutTi,
"phys_Lv2OutTi_name", logi_Lv1SUS,
false, 0);
232 const int Lv2OutBe_num = 2;
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;
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];
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];
246 string strMat_Lv2OutBe = m_config.getParameterStr(prep +
"Material");
247 G4Material* mat_Lv2OutBe = Materials::get(strMat_Lv2OutBe);
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");
254 setColor(*logi_Lv2OutBe,
"#333300");
255 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutBe,
"phys_Lv2OutBe_name", logi_Lv1SUS,
false, 0);
266 const int Lv2InBe_num = 2;
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;
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];
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];
280 string strMat_Lv2InBe = m_config.getParameterStr(prep +
"Material");
281 G4Material* mat_Lv2InBe = Materials::get(strMat_Lv2InBe);
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");
289 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2InBe,
"phys_Lv2InBe_name", logi_Lv1SUS,
false, 0);
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;
305 double Lv2Vacuum_A2 = m_config.getParameter(prep +
"A2");
307 string strMat_Lv2Vacuum = m_config.getParameterStr(prep +
"Material");
308 G4Material* mat_Lv2Vacuum = Materials::get(strMat_Lv2Vacuum);
311 const int Lv2Vacuum1_num = 2;
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;
323 double Lv2Vacuum2_Z1 = 2. * Lv2Vacuum_L3;
324 double Lv2Vacuum2_rI1 = 0.0;
325 double Lv2Vacuum2_rO1 = Lv2Vacuum_R2;
327 double Lv2Vacuum2_Z2 = (Lv2Vacuum_L3 * cos(Lv2Vacuum_A2)) + SafetyLength;
328 double Lv2Vacuum2_rI2 = 0.0;
329 double Lv2Vacuum2_rO2 = 2 * Lv2Vacuum_R2;
331 const int Lv2Vacuum3_num = 2;
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;
345 G4Polycone* geo_Lv2VacuumPart1 =
new G4Polycone(
"geo_Lv2VacuumPart1_name", 0, 2 * M_PI, Lv2Vacuum1_num, Lv2Vacuum1_Z, Lv2Vacuum1_rI,
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);
355 G4Polycone* geo_Lv2VacuumPart3 =
new G4Polycone(
"geo_Lv2VacuumPart3_name", 0, 2 * M_PI, Lv2Vacuum3_num, Lv2Vacuum3_Z, Lv2Vacuum3_rI,
359 G4Transform3D transform_Lv2VacuumPart3 = G4Translate3D(-0.5, 0., 0.);
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);
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));
375 setColor(*logi_Lv2Vacuum,
"#CCCCCC");
376 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Vacuum,
"phys_Lv2Vacuum_name", logi_Lv1SUS,
false, 0);
387 const int Lv2Paraf1_num = 20;
388 const int Lv2Paraf2_num = 3;
390 double Lv2Paraf1_Z[Lv2Paraf1_num];
391 Lv2Paraf1_Z[0] = 0.0;
392 for (
int tmpn = 0; tmpn < 9; tmpn++) {
393 Lv2Paraf1_Z[0] -= m_config.getParameter(prep + (format(
"L%1%") % (tmpn + 1)).str().c_str()) * Unit::cm / Unit::mm;
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;
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];
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];
463 double Lv2Paraf2_Z[Lv2Paraf2_num];
464 Lv2Paraf2_Z[0] = 0.0;
465 for (
int tmpn = 10; tmpn <= 15; tmpn++) {
466 Lv2Paraf2_Z[0] += m_config.getParameter(prep + (format(
"L%1%") % tmpn).str().c_str()) * Unit::cm / Unit::mm;
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;
474 double Lv2Paraf2_rI[Lv2Paraf2_num];
475 for (
int tmpn = 0; tmpn < Lv2Paraf2_num; tmpn++)
476 { Lv2Paraf2_rI[tmpn] = 0.0; }
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];
483 string strMat_Lv2Paraf = m_config.getParameterStr(prep +
"Material");
484 G4Material* mat_Lv2Paraf = Materials::get(strMat_Lv2Paraf);
487 G4Polycone* geo_Lv2Parafpcon1 =
new G4Polycone(
"geo_Lv2Parafpcon1_name", 0, 2 * M_PI, Lv2Paraf1_num, Lv2Paraf1_Z, Lv2Paraf1_rI,
489 G4Polycone* geo_Lv2Parafpcon2 =
new G4Polycone(
"geo_Lv2Parafpcon2_name", 0, 2 * M_PI, Lv2Paraf2_num, Lv2Paraf2_Z, Lv2Paraf2_rI,
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");
495 setColor(*logi_Lv2Paraf,
"#00CCCC");
496 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Paraf,
"phys_Lv2Paraf_name", logi_Lv1SUS,
false, 0);
507 const int Lv3AuCoat_num = 2;
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;
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];
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];
521 string strMat_Lv3AuCoat = m_config.getParameterStr(prep +
"Material");
522 G4Material* mat_Lv3AuCoat = Materials::get(strMat_Lv3AuCoat);
525 G4Polycone* geo_Lv3AuCoat =
new G4Polycone(
"geo_Lv3AuCoat_name", 0, 2 * M_PI, Lv3AuCoat_num, Lv3AuCoat_Z, Lv3AuCoat_rI,
527 G4LogicalVolume* logi_Lv3AuCoat =
new G4LogicalVolume(geo_Lv3AuCoat, mat_Lv3AuCoat,
"logi_Lv3AuCoat_name");
530 setColor(*logi_Lv3AuCoat,
"#CCCC00");
531 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv3AuCoat,
"phys_Lv3AuCoat_name", logi_Lv2Vacuum,
false, 0);
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;
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;
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);
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,
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;
578 string strMat_Lv1TaFwd = m_config.getParameterStr(prep +
"Material");
579 G4Material* mat_Lv1TaFwd = Materials::get(strMat_Lv1TaFwd);
582 G4Trd* geo_Lv1TaFwd_xx =
new G4Trd(
"geo_Lv1TaFwd_xx_name", Lv1TaFwd_L2, Lv1TaFwd_L3, Lv1TaFwd_T1, Lv1TaFwd_T1, Lv1TaFwd_L1 / 2.0);
583 G4UnionSolid* geo_Lv1TaFwd_x
584 =
new G4UnionSolid(
"geo_Lv1TaFwd_x_name", geo_Lv1TaFwd_xx, geo_Flange,
585 G4Translate3D(0, 0, Flange_D - (Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
589 double HMS_Z[4] = {350, 410, 450, 482};
590 double HMS_rI[4] = {35.5, 35.5, 42.5, 42.5};
591 double HMS_rO[4] = {100, 100, 100, 100};
592 G4Polycone* geo_HMS =
new G4Polycone(
"geo_HMS_name", 0, 2 * M_PI, 4, HMS_Z, HMS_rI, HMS_rO);
593 G4SubtractionSolid* geo_Lv1TaFwd =
new G4SubtractionSolid(
"geo_Lv1TaFwd_name", geo_Lv1TaFwd_x, geo_HMS,
594 G4Translate3D(0, 0, -(Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
596 G4LogicalVolume* logi_Lv1TaFwd =
new G4LogicalVolume(geo_Lv1TaFwd, mat_Lv1TaFwd,
"logi_Lv1TaFwd_name");
599 setColor(*logi_Lv1TaFwd,
"#333333");
600 new G4PVPlacement(0, G4ThreeVector(0, 0, Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0), logi_Lv1TaFwd,
"phys_Lv1TaFwd_name", &topVolume,
false,
610 double Lv2VacFwd_D1 = m_config.getParameter(prep +
"D1") * Unit::cm / Unit::mm;
611 double Lv2VacFwd_D2 = m_config.getParameter(prep +
"D2") * Unit::cm / Unit::mm;
612 double Lv2VacFwd_D3 = m_config.getParameter(prep +
"D3") * Unit::cm / Unit::mm;
613 double Lv2VacFwd_L1 = m_config.getParameter(prep +
"L1") * Unit::cm / Unit::mm;
614 double Lv2VacFwd_L2 = m_config.getParameter(prep +
"L2") * Unit::cm / Unit::mm;
615 double Lv2VacFwd_L3 = m_config.getParameter(prep +
"L3") * Unit::cm / Unit::mm;
616 double Lv2VacFwd_R1 = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
617 double Lv2VacFwd_R2 = m_config.getParameter(prep +
"R2") * Unit::cm / Unit::mm;
618 double Lv2VacFwd_R3 = m_config.getParameter(prep +
"R3") * Unit::cm / Unit::mm;
619 double Lv2VacFwd_R4 = m_config.getParameter(prep +
"R4") * Unit::cm / Unit::mm;
620 double Lv2VacFwd_A1 = m_config.getParameter(prep +
"A1");
621 double Lv2VacFwd_A2 = m_config.getParameter(prep +
"A2");
623 string strMat_Lv2VacFwd = m_config.getParameterStr(prep +
"Material");
624 G4Material* mat_Lv2VacFwd = Materials::get(strMat_Lv2VacFwd);
627 double Lv2VacFwd1_Z1 = sqrt(Lv2VacFwd_D1 * Lv2VacFwd_D1 + Lv2VacFwd_D2 * Lv2VacFwd_D2 - 2.*Lv2VacFwd_D1 * Lv2VacFwd_D2 * cos(
629 double Lv2VacFwd1_rI1 = 0.0;
630 double Lv2VacFwd1_rO1 = Lv2VacFwd_R1;
632 double Lv2VacFwd1_Z2 = (Lv2VacFwd1_Z1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
633 double Lv2VacFwd1_rI2 = 0.0;
634 double Lv2VacFwd1_rO2 = 2 * Lv2VacFwd_R1;
636 double Lv2VacFwd2_Z1 = Lv2VacFwd_L1;
637 double Lv2VacFwd2_rI1 = 0.0;
638 double Lv2VacFwd2_rO1 = Lv2VacFwd_R2;
640 double Lv2VacFwd2_Z2 = (Lv2VacFwd_L1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
641 double Lv2VacFwd2_rI2 = 0.0;
642 double Lv2VacFwd2_rO2 = 2 * Lv2VacFwd_R2;
644 const int Lv2VacFwd3_num1 = 2;
645 const int Lv2VacFwd3_num2 = 3;
647 double Lv2VacFwd_Z1[Lv2VacFwd3_num1];
648 Lv2VacFwd_Z1[0] = 0.0;
650 Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2 + 0.03 * SafetyLength;
651 double Lv2VacFwd_rI1[Lv2VacFwd3_num1];
652 for (
int tmpn = 0; tmpn < Lv2VacFwd3_num1; tmpn++)
653 { Lv2VacFwd_rI1[tmpn] = 0.0; }
654 double Lv2VacFwd_rO1[Lv2VacFwd3_num1];
655 Lv2VacFwd_rO1[0] = Lv2VacFwd_R3;
656 Lv2VacFwd_rO1[1] = Lv2VacFwd_R3;
659 double Lv2VacFwd_Z2[Lv2VacFwd3_num2];
660 Lv2VacFwd_Z2[0] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
661 Lv2VacFwd_Z2[1] = Lv2VacFwd_D3;
662 Lv2VacFwd_Z2[2] = Lv2VacFwd_D3 + Lv2VacFwd_L3;
663 double Lv2VacFwd_rI2[Lv2VacFwd3_num2];
664 for (
int tmpn = 0; tmpn < Lv2VacFwd3_num2; tmpn++)
665 { Lv2VacFwd_rI2[tmpn] = 0.0; }
666 double Lv2VacFwd_rO2[Lv2VacFwd3_num2];
667 Lv2VacFwd_rO2[0] = Lv2VacFwd_R3;
668 Lv2VacFwd_rO2[1] = Lv2VacFwd_R4;
669 Lv2VacFwd_rO2[2] = Lv2VacFwd_R4;
675 G4Tubs* geo_Lv2VacFwdPart1_1 =
new G4Tubs(
"geo_Lv2VacFwdPart1_1_name", Lv2VacFwd1_rI1, Lv2VacFwd1_rO1, Lv2VacFwd1_Z1, 0, 2 * M_PI);
676 G4Tubs* geo_Lv2VacFwdPart1_2 =
new G4Tubs(
"geo_Lv2VacFwdPart1_2_name", Lv2VacFwd1_rI2, Lv2VacFwd1_rO2, Lv2VacFwd1_Z2, 0, 2 * M_PI);
678 G4Transform3D transform_Lv2VacFwdPart1_2 = G4Translate3D(0., 0., 0.);
679 transform_Lv2VacFwdPart1_2 = transform_Lv2VacFwdPart1_2 * G4RotateY3D(-Lv2VacFwd_A2 / 2.);
680 G4IntersectionSolid* geo_Lv2VacFwdPart1 =
new G4IntersectionSolid(
"geo_Lv2VacFwdPart1_name", geo_Lv2VacFwdPart1_1,
681 geo_Lv2VacFwdPart1_2, transform_Lv2VacFwdPart1_2);
683 G4Tubs* geo_Lv2VacFwdPart2_1 =
new G4Tubs(
"geo_Lv2VacFwdPart2_1_name", Lv2VacFwd2_rI1, Lv2VacFwd2_rO1, Lv2VacFwd2_Z1, 0, 2 * M_PI);
684 G4Tubs* geo_Lv2VacFwdPart2_2 =
new G4Tubs(
"geo_Lv2VacFwdPart2_2_name", Lv2VacFwd2_rI2, Lv2VacFwd2_rO2, Lv2VacFwd2_Z2, 0, 2 * M_PI);
686 G4Transform3D transform_Lv2VacFwdPart2_2 = G4Translate3D(0., 0., 0.);
687 transform_Lv2VacFwdPart2_2 = transform_Lv2VacFwdPart2_2 * G4RotateY3D(Lv2VacFwd_A2 / 2.);
688 G4IntersectionSolid* geo_Lv2VacFwdPart2 =
new G4IntersectionSolid(
"geo_Lv2VacFwdPart2_name", geo_Lv2VacFwdPart2_1,
689 geo_Lv2VacFwdPart2_2, transform_Lv2VacFwdPart2_2);
692 G4Polycone* geo_Lv2VacFwdPart3_1 =
new G4Polycone(
"geo_Lv2VacFwdPart3_1", 0, 2 * M_PI, Lv2VacFwd3_num1, Lv2VacFwd_Z1, Lv2VacFwd_rI1,
694 G4Polycone* geo_Lv2VacFwdPart3_2 =
new G4Polycone(
"geo_Lv2VacFwdPart3_2", 0, 2 * M_PI, Lv2VacFwd3_num2, Lv2VacFwd_Z2, Lv2VacFwd_rI2,
696 G4Transform3D transform_Lv2VacFwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
697 transform_Lv2VacFwdPart3_1 = transform_Lv2VacFwdPart3_1 * G4RotateY3D(Lv2VacFwd_A1 - A11);
698 G4UnionSolid* geo_Lv2VacFwdPart3 =
new G4UnionSolid(
"geo_Lv2VacFwdPart3_name", geo_Lv2VacFwdPart3_2, geo_Lv2VacFwdPart3_1,
699 transform_Lv2VacFwdPart3_1);
702 G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(
703 2.*Lv2VacFwd_A1)) / 2. ,
705 (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 2.);
709 transform_Lv2VacFwdPart1 = transform_Lv2VacFwdPart1 * G4RotateY3D(Lv2VacFwd_A1 + Lv2VacFwd_A2);
711 G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(
712 2.*Lv2VacFwd_A1) / 2.0,
714 Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.0);
719 transform_Lv2VacFwdPart2 = transform_Lv2VacFwdPart2 * G4RotateY3D(2.*Lv2VacFwd_A1);
721 G4UnionSolid* geo_Lv2VacFwdxx =
new G4UnionSolid(
"geo_Lv2VacFwdxx_name", geo_Lv2VacFwdPart3, geo_Lv2VacFwdPart1,
722 transform_Lv2VacFwdPart1);
723 G4UnionSolid* geo_Lv2VacFwdx =
new G4UnionSolid(
"geo_Lv2VacFwdx_name", geo_Lv2VacFwdxx, geo_Lv2VacFwdPart2,
724 transform_Lv2VacFwdPart2);
726 G4Transform3D transform_Lv2VacFwd = G4Translate3D(0., 0., -Lv1TaFwd_D1 - Lv1TaFwd_L1 / 2.);
727 transform_Lv2VacFwd = transform_Lv2VacFwd * G4RotateY3D(-Lv2VacFwd_A1);
729 G4IntersectionSolid* geo_Lv2VacFwd =
new G4IntersectionSolid(
"geo_Lv2VacFwd_name", geo_Lv1TaFwd, geo_Lv2VacFwdx,
730 transform_Lv2VacFwd);
731 G4LogicalVolume* logi_Lv2VacFwd =
new G4LogicalVolume(geo_Lv2VacFwd, mat_Lv2VacFwd,
"logi_Lv2VacFwd_name");
732 if (flag_limitStep) logi_Lv2VacFwd->SetUserLimits(
new G4UserLimits(stepMax));
735 setColor(*logi_Lv2VacFwd,
"#CCCCCC");
738 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacFwd,
"phys_Lv2VacFwd_name", logi_Lv1TaFwd,
false, 0);
756 double Lv1TaBwd_D1 = m_config.getParameter(prep +
"D1") * Unit::cm / Unit::mm;
757 double Lv1TaBwd_L1 = m_config.getParameter(prep +
"L1") * Unit::cm / Unit::mm;
758 double Lv1TaBwd_L2 = m_config.getParameter(prep +
"L2") * Unit::cm / Unit::mm;
759 double Lv1TaBwd_L3 = m_config.getParameter(prep +
"L3") * Unit::cm / Unit::mm;
760 double Lv1TaBwd_T1 = m_config.getParameter(prep +
"T1") * Unit::cm / Unit::mm;
762 string strMat_Lv1TaBwd = m_config.getParameterStr(prep +
"Material");
763 G4Material* mat_Lv1TaBwd = Materials::get(strMat_Lv1TaBwd);
766 G4Trd* geo_Lv1TaBwd_x =
new G4Trd(
"geo_Lv1TaBwd_x_name", Lv1TaBwd_L2, Lv1TaBwd_L3, Lv1TaBwd_T1, Lv1TaBwd_T1, Lv1TaBwd_L1 / 2.0);
767 G4UnionSolid* geo_Lv1TaBwd =
new G4UnionSolid(
"geo_Lv1TaBwd_name", geo_Lv1TaBwd_x, geo_Flange,
768 G4Translate3D(0, 0, -Flange_D - (-Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0)));
769 G4LogicalVolume* logi_Lv1TaBwd =
new G4LogicalVolume(geo_Lv1TaBwd, mat_Lv1TaBwd,
"logi_Lv1TaBwd_name");
772 setColor(*logi_Lv1TaBwd,
"#333333");
773 new G4PVPlacement(0, G4ThreeVector(0, 0, -Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0), logi_Lv1TaBwd,
"phys_Lv1TaBwd_name", &topVolume,
false,
785 double Lv2VacBwd_D1 = m_config.getParameter(prep +
"D1") * Unit::cm / Unit::mm;
786 double Lv2VacBwd_D2 = m_config.getParameter(prep +
"D2") * Unit::cm / Unit::mm;
787 double Lv2VacBwd_D3 = m_config.getParameter(prep +
"D3") * Unit::cm / Unit::mm;
788 double Lv2VacBwd_L1 = m_config.getParameter(prep +
"L1") * Unit::cm / Unit::mm;
789 double Lv2VacBwd_L2 = m_config.getParameter(prep +
"L2") * Unit::cm / Unit::mm;
790 double Lv2VacBwd_L3 = m_config.getParameter(prep +
"L3") * Unit::cm / Unit::mm;
791 double Lv2VacBwd_R1 = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
792 double Lv2VacBwd_R2 = m_config.getParameter(prep +
"R2") * Unit::cm / Unit::mm;
793 double Lv2VacBwd_R3 = m_config.getParameter(prep +
"R3") * Unit::cm / Unit::mm;
794 double Lv2VacBwd_R4 = m_config.getParameter(prep +
"R4") * Unit::cm / Unit::mm;
795 double Lv2VacBwd_A1 = m_config.getParameter(prep +
"A1");
796 double Lv2VacBwd_A2 = m_config.getParameter(prep +
"A2");
798 string strMat_Lv2VacBwd = m_config.getParameterStr(prep +
"Material");
799 G4Material* mat_Lv2VacBwd = Materials::get(strMat_Lv2VacBwd);
802 double Lv2VacBwd1_Z1 = sqrt(Lv2VacBwd_D1 * Lv2VacBwd_D1 + Lv2VacBwd_D2 * Lv2VacBwd_D2 - 2.*Lv2VacBwd_D1 * Lv2VacBwd_D2 * cos(
804 double Lv2VacBwd1_rI1 = 0.0;
805 double Lv2VacBwd1_rO1 = Lv2VacBwd_R1;
807 double Lv2VacBwd1_Z2 = (Lv2VacBwd1_Z1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
808 double Lv2VacBwd1_rI2 = 0.0;
809 double Lv2VacBwd1_rO2 = 2 * Lv2VacBwd_R1;
811 double Lv2VacBwd2_Z1 = Lv2VacBwd_L1;
812 double Lv2VacBwd2_rI1 = 0.0;
813 double Lv2VacBwd2_rO1 = Lv2VacBwd_R2;
815 double Lv2VacBwd2_Z2 = (Lv2VacBwd_L1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
816 double Lv2VacBwd2_rI2 = 0.0;
817 double Lv2VacBwd2_rO2 = 2 * Lv2VacBwd_R2;
819 const int Lv2VacBwd3_num1 = 2;
820 const int Lv2VacBwd3_num2 = 3;
822 double Lv2VacBwd_Z1[Lv2VacBwd3_num1];
823 Lv2VacBwd_Z1[0] = 0.0;
824 Lv2VacBwd_Z1[1] = -Lv2VacBwd_D3 + Lv2VacBwd_L2 - 0.03 * SafetyLength;
825 double Lv2VacBwd_rI1[Lv2VacBwd3_num1];
826 for (
int tmpn = 0; tmpn < Lv2VacBwd3_num1; tmpn++)
827 { Lv2VacBwd_rI1[tmpn] = 0.0; }
828 double Lv2VacBwd_rO1[Lv2VacBwd3_num1];
829 Lv2VacBwd_rO1[0] = Lv2VacBwd_R3;
830 Lv2VacBwd_rO1[1] = Lv2VacBwd_R3;
833 double Lv2VacBwd_Z2[Lv2VacBwd3_num2];
834 Lv2VacBwd_Z2[0] = -Lv2VacBwd_D3 + Lv2VacBwd_L2;
835 Lv2VacBwd_Z2[1] = -Lv2VacBwd_D3;
836 Lv2VacBwd_Z2[2] = -Lv2VacBwd_D3 - Lv2VacBwd_L3;
837 double Lv2VacBwd_rI2[Lv2VacBwd3_num2];
838 for (
int tmpn = 0; tmpn < Lv2VacBwd3_num2; tmpn++)
839 { Lv2VacBwd_rI2[tmpn] = 0.0; }
840 double Lv2VacBwd_rO2[Lv2VacBwd3_num2];
841 Lv2VacBwd_rO2[0] = Lv2VacBwd_R3;
842 Lv2VacBwd_rO2[1] = Lv2VacBwd_R4;
843 Lv2VacBwd_rO2[2] = Lv2VacBwd_R4;
849 G4Tubs* geo_Lv2VacBwdPart1_1 =
new G4Tubs(
"geo_Lv2VacBwdPart1_1_name", Lv2VacBwd1_rI1, Lv2VacBwd1_rO1, Lv2VacBwd1_Z1, 0, 2 * M_PI);
850 G4Tubs* geo_Lv2VacBwdPart1_2 =
new G4Tubs(
"geo_Lv2VacBwdPart1_2_name", Lv2VacBwd1_rI2, Lv2VacBwd1_rO2, Lv2VacBwd1_Z2, 0, 2 * M_PI);
851 G4Transform3D transform_Lv2VacBwdPart1_2 = G4Translate3D(0., 0., 0.);
852 transform_Lv2VacBwdPart1_2 = transform_Lv2VacBwdPart1_2 * G4RotateY3D(Lv2VacBwd_A2 / 2.);
853 G4IntersectionSolid* geo_Lv2VacBwdPart1 =
new G4IntersectionSolid(
"geo_Lv2VacBwdPart1_name", geo_Lv2VacBwdPart1_1,
854 geo_Lv2VacBwdPart1_2, transform_Lv2VacBwdPart1_2);
856 G4Tubs* geo_Lv2VacBwdPart2_1 =
new G4Tubs(
"geo_Lv2VacBwdPart2_1_name", Lv2VacBwd2_rI1, Lv2VacBwd2_rO1, Lv2VacBwd2_Z1, 0, 2 * M_PI);
857 G4Tubs* geo_Lv2VacBwdPart2_2 =
new G4Tubs(
"geo_Lv2VacBwdPart2_2_name", Lv2VacBwd2_rI2, Lv2VacBwd2_rO2, Lv2VacBwd2_Z2, 0, 2 * M_PI);
858 G4Transform3D transform_Lv2VacBwdPart2_2 = G4Translate3D(0., 0., 0.);
859 transform_Lv2VacBwdPart2_2 = transform_Lv2VacBwdPart2_2 * G4RotateY3D(-Lv2VacBwd_A2 / 2.);
860 G4IntersectionSolid* geo_Lv2VacBwdPart2 =
new G4IntersectionSolid(
"geo_Lv2VacBwdPart2_name", geo_Lv2VacBwdPart2_1,
861 geo_Lv2VacBwdPart2_2, transform_Lv2VacBwdPart2_2);
864 G4Polycone* geo_Lv2VacBwdPart3_1 =
new G4Polycone(
"geo_Lv2VacBwdPart3_1", 0, 2 * M_PI, Lv2VacBwd3_num1, Lv2VacBwd_Z1, Lv2VacBwd_rI1,
866 G4Polycone* geo_Lv2VacBwdPart3_2 =
new G4Polycone(
"geo_Lv2VacBwdPart3_2", 0, 2 * M_PI, Lv2VacBwd3_num2, Lv2VacBwd_Z2, Lv2VacBwd_rI2,
868 G4Transform3D transform_Lv2VacBwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
869 transform_Lv2VacBwdPart3_1 = transform_Lv2VacBwdPart3_1 * G4RotateY3D(-Lv2VacBwd_A1 + A11);
870 G4UnionSolid* geo_Lv2VacBwdPart3 =
new G4UnionSolid(
"geo_Lv2VacBwdPart3_name", geo_Lv2VacBwdPart3_2, geo_Lv2VacBwdPart3_1,
871 transform_Lv2VacBwdPart3_1);
874 G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(
875 2.*Lv2VacBwd_A1)) / 2. ,
877 -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.);
881 transform_Lv2VacBwdPart1 = transform_Lv2VacBwdPart1 * G4RotateY3D(-Lv2VacBwd_A1 - Lv2VacBwd_A2);
884 G4Transform3D transform_Lv2VacBwdPart2 = G4Translate3D((Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * sin(2.*Lv2VacBwd_A1) ,
886 -(Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * cos(2.*Lv2VacBwd_A1));
887 transform_Lv2VacBwdPart2 = transform_Lv2VacBwdPart2 * G4RotateY3D(-2.*Lv2VacBwd_A1);
889 G4UnionSolid* geo_Lv2VacBwdxx =
new G4UnionSolid(
"geo_Lv2VacBwdxx_name", geo_Lv2VacBwdPart3, geo_Lv2VacBwdPart1,
890 transform_Lv2VacBwdPart1);
891 G4UnionSolid* geo_Lv2VacBwdx =
new G4UnionSolid(
"geo_Lv2VacBwdx_name", geo_Lv2VacBwdxx, geo_Lv2VacBwdPart2,
892 transform_Lv2VacBwdPart2);
894 G4Transform3D transform_Lv2VacBwd = G4Translate3D(0., 0., +Lv1TaBwd_D1 + Lv1TaBwd_L1 / 2.);
895 transform_Lv2VacBwd = transform_Lv2VacBwd * G4RotateY3D(+Lv2VacBwd_A1);
897 G4IntersectionSolid* geo_Lv2VacBwd =
new G4IntersectionSolid(
"geo_Lv2VacBwd_name", geo_Lv1TaBwd, geo_Lv2VacBwdx,
898 transform_Lv2VacBwd);
899 G4LogicalVolume* logi_Lv2VacBwd =
new G4LogicalVolume(geo_Lv2VacBwd, mat_Lv2VacBwd,
"logi_Lv2VacBwd_name");
900 if (flag_limitStep) logi_Lv2VacBwd->SetUserLimits(
new G4UserLimits(stepMax));
903 setColor(*logi_Lv2VacBwd,
"#CCCCCC");
906 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacBwd,
"phys_Lv2VacBwd_name", logi_Lv1TaBwd,
false, 0);
914 prep =
"AreaTubeFwd.";
916 const int AreaTubeFwd_num = 2;
918 double AreaTubeFwd_Z[AreaTubeFwd_num];
919 AreaTubeFwd_Z[0] = m_config.getParameter(prep +
"D1") * Unit::cm / Unit::mm;
920 AreaTubeFwd_Z[1] = m_config.getParameter(prep +
"D2") * Unit::cm / Unit::mm;
922 double AreaTubeFwd_rI[AreaTubeFwd_num];
923 for (
int i = 0; i < AreaTubeFwd_num; i++)
924 { AreaTubeFwd_rI[i] = 0.0; }
926 double AreaTubeFwd_rO[AreaTubeFwd_num];
927 AreaTubeFwd_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
928 AreaTubeFwd_rO[1] = AreaTubeFwd_rO[0];
931 G4Polycone* geo_AreaTubeFwdpcon =
new G4Polycone(
"geo_AreaTubeFwdpcon_name", 0, 2 * M_PI, AreaTubeFwd_num, AreaTubeFwd_Z,
932 AreaTubeFwd_rI, AreaTubeFwd_rO);
938 prep =
"Lv1TaLERUp.";
940 double Lv1TaLERUp_A1 = m_config.getParameter(prep +
"A1");
942 const int Lv1TaLERUp_num = 4;
944 double Lv1TaLERUp_Z[Lv1TaLERUp_num];
945 Lv1TaLERUp_Z[0] = m_config.getParameter(prep +
"L1") * Unit::cm / Unit::mm;
946 Lv1TaLERUp_Z[1] = m_config.getParameter(prep +
"L2") * Unit::cm / Unit::mm;
947 Lv1TaLERUp_Z[2] = m_config.getParameter(prep +
"L3") * Unit::cm / Unit::mm;
948 Lv1TaLERUp_Z[3] = m_config.getParameter(prep +
"L4") * Unit::cm / Unit::mm;
950 double Lv1TaLERUp_rI[Lv1TaLERUp_num];
951 for (
int i = 0; i < Lv1TaLERUp_num; i++)
952 { Lv1TaLERUp_rI[i] = 0.0; }
954 double Lv1TaLERUp_rO[Lv1TaLERUp_num];
955 Lv1TaLERUp_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
956 Lv1TaLERUp_rO[1] = m_config.getParameter(prep +
"R2") * Unit::cm / Unit::mm;
957 Lv1TaLERUp_rO[2] = m_config.getParameter(prep +
"R3") * Unit::cm / Unit::mm;
958 Lv1TaLERUp_rO[3] = m_config.getParameter(prep +
"R4") * Unit::cm / Unit::mm;
960 string strMat_Lv1TaLERUp = m_config.getParameterStr(prep +
"Material");
961 G4Material* mat_Lv1TaLERUp = Materials::get(strMat_Lv1TaLERUp);
964 G4Polycone* geo_Lv1TaLERUppcon =
new G4Polycone(
"geo_Lv1TaLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z, Lv1TaLERUp_rI,
966 G4Transform3D transform_AreaTubeFwdForLER = G4Translate3D(0., 0., 0.);
967 transform_AreaTubeFwdForLER = transform_AreaTubeFwdForLER * G4RotateY3D(-Lv1TaLERUp_A1);
968 G4IntersectionSolid* geo_Lv1TaLERUp =
new G4IntersectionSolid(
"geo_Lv1TaLERUp_name", geo_Lv1TaLERUppcon, geo_AreaTubeFwdpcon,
969 transform_AreaTubeFwdForLER);
970 G4LogicalVolume* logi_Lv1TaLERUp =
new G4LogicalVolume(geo_Lv1TaLERUp, mat_Lv1TaLERUp,
"logi_Lv1TaLERUp_name");
973 setColor(*logi_Lv1TaLERUp,
"#0000CC");
974 G4Transform3D transform_Lv1TaLERUp = G4Translate3D(0., 0., 0.);
975 transform_Lv1TaLERUp = transform_Lv1TaLERUp * G4RotateY3D(Lv1TaLERUp_A1);
976 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1TaLERUp,
"phys_Lv1TaLERUp_name", &topVolume,
false, 0);
985 prep =
"Lv2VacLERUp.";
987 double Lv2VacLERUp_rO[Lv1TaLERUp_num];
988 Lv2VacLERUp_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
989 Lv2VacLERUp_rO[1] = Lv2VacLERUp_rO[0];
990 Lv2VacLERUp_rO[2] = Lv2VacLERUp_rO[0];
991 Lv2VacLERUp_rO[3] = Lv2VacLERUp_rO[0];
993 string strMat_Lv2VacLERUp = m_config.getParameterStr(prep +
"Material");
994 G4Material* mat_Lv2VacLERUp = Materials::get(strMat_Lv2VacLERUp);
997 G4Polycone* geo_Lv2VacLERUppcon =
new G4Polycone(
"geo_Lv2VacLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z,
998 Lv1TaLERUp_rI, Lv2VacLERUp_rO);
999 G4IntersectionSolid* geo_Lv2VacLERUp =
new G4IntersectionSolid(
"geo_Lv2VacLERUp_name", geo_Lv2VacLERUppcon, geo_AreaTubeFwdpcon,
1000 transform_AreaTubeFwdForLER);
1001 G4LogicalVolume* logi_Lv2VacLERUp =
new G4LogicalVolume(geo_Lv2VacLERUp, mat_Lv2VacLERUp,
"logi_Lv2VacLERUp_name");
1002 if (flag_limitStep) logi_Lv2VacLERUp->SetUserLimits(
new G4UserLimits(stepMax));
1006 setColor(*logi_Lv2VacLERUp,
"#CCCCCC");
1007 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERUp,
"phys_Lv2VacLERUp_name", logi_Lv1TaLERUp,
false, 0);
1015 prep =
"Lv1TaHERDwn.";
1017 double Lv1TaHERDwn_A1 = m_config.getParameter(prep +
"A1");
1019 const int Lv1TaHERDwn_num = 4;
1021 double Lv1TaHERDwn_Z[Lv1TaHERDwn_num];
1022 Lv1TaHERDwn_Z[0] = m_config.getParameter(prep +
"L1") * Unit::cm / Unit::mm;
1023 Lv1TaHERDwn_Z[1] = m_config.getParameter(prep +
"L2") * Unit::cm / Unit::mm;
1024 Lv1TaHERDwn_Z[2] = m_config.getParameter(prep +
"L3") * Unit::cm / Unit::mm;
1025 Lv1TaHERDwn_Z[3] = m_config.getParameter(prep +
"L4") * Unit::cm / Unit::mm;
1027 double Lv1TaHERDwn_rI[Lv1TaHERDwn_num];
1028 for (
int i = 0; i < Lv1TaHERDwn_num; i++)
1029 { Lv1TaHERDwn_rI[i] = 0.0; }
1031 double Lv1TaHERDwn_rO[Lv1TaHERDwn_num];
1032 Lv1TaHERDwn_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
1033 Lv1TaHERDwn_rO[1] = m_config.getParameter(prep +
"R2") * Unit::cm / Unit::mm;
1034 Lv1TaHERDwn_rO[2] = m_config.getParameter(prep +
"R3") * Unit::cm / Unit::mm;
1035 Lv1TaHERDwn_rO[3] = m_config.getParameter(prep +
"R4") * Unit::cm / Unit::mm;
1037 string strMat_Lv1TaHERDwn = m_config.getParameterStr(prep +
"Material");
1038 G4Material* mat_Lv1TaHERDwn = Materials::get(strMat_Lv1TaHERDwn);
1041 G4Polycone* geo_Lv1TaHERDwnpcon =
new G4Polycone(
"geo_Lv1TaHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1042 Lv1TaHERDwn_rI, Lv1TaHERDwn_rO);
1043 G4Transform3D transform_AreaTubeFwdForHER = G4Translate3D(0., 0., 0.);
1044 transform_AreaTubeFwdForHER = transform_AreaTubeFwdForHER * G4RotateY3D(-Lv1TaHERDwn_A1);
1045 G4IntersectionSolid* geo_Lv1TaHERDwn =
new G4IntersectionSolid(
"", geo_Lv1TaHERDwnpcon, geo_AreaTubeFwdpcon,
1046 transform_AreaTubeFwdForHER);
1047 G4LogicalVolume* logi_Lv1TaHERDwn =
new G4LogicalVolume(geo_Lv1TaHERDwn, mat_Lv1TaHERDwn,
"logi_Lv1TaHERDwn_name");
1050 setColor(*logi_Lv1TaHERDwn,
"#00CC00");
1051 G4Transform3D transform_Lv1TaHERDwn = G4Translate3D(0., 0., 0.);
1052 transform_Lv1TaHERDwn = transform_Lv1TaHERDwn * G4RotateY3D(Lv1TaHERDwn_A1);
1053 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1TaHERDwn,
"phys_Lv1TaHERDwn_name", &topVolume,
false, 0);
1062 prep =
"Lv2VacHERDwn.";
1064 double Lv2VacHERDwn_rO[Lv1TaHERDwn_num];
1065 Lv2VacHERDwn_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
1066 Lv2VacHERDwn_rO[1] = Lv2VacHERDwn_rO[0];
1067 Lv2VacHERDwn_rO[2] = Lv2VacHERDwn_rO[0];
1068 Lv2VacHERDwn_rO[3] = Lv2VacHERDwn_rO[0];
1070 string strMat_Lv2VacHERDwn = m_config.getParameterStr(prep +
"Material");
1071 G4Material* mat_Lv2VacHERDwn = Materials::get(strMat_Lv2VacHERDwn);
1074 G4Polycone* geo_Lv2VacHERDwnpcon =
new G4Polycone(
"geo_Lv2VacHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1075 Lv1TaHERDwn_rI, Lv2VacHERDwn_rO);
1076 G4IntersectionSolid* geo_Lv2VacHERDwn =
new G4IntersectionSolid(
"", geo_Lv2VacHERDwnpcon, geo_AreaTubeFwdpcon,
1077 transform_AreaTubeFwdForHER);
1078 G4LogicalVolume* logi_Lv2VacHERDwn =
new G4LogicalVolume(geo_Lv2VacHERDwn, mat_Lv2VacHERDwn,
"logi_Lv2VacHERDwn_name");
1079 if (flag_limitStep) logi_Lv2VacHERDwn->SetUserLimits(
new G4UserLimits(stepMax));
1082 setColor(*logi_Lv2VacHERDwn,
"#CCCCCC");
1083 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERDwn,
"phys_Lv2VacHERDwn_name", logi_Lv1TaHERDwn,
false, 0);
1095 prep =
"AreaTubeBwd.";
1097 const int AreaTubeBwd_num = 2;
1099 double AreaTubeBwd_Z[AreaTubeBwd_num];
1100 AreaTubeBwd_Z[0] = -m_config.getParameter(prep +
"D1") * Unit::cm / Unit::mm;
1101 AreaTubeBwd_Z[1] = -m_config.getParameter(prep +
"D2") * Unit::cm / Unit::mm;
1103 double AreaTubeBwd_rI[AreaTubeBwd_num];
1104 for (
int i = 0; i < AreaTubeBwd_num; i++)
1105 { AreaTubeBwd_rI[i] = 0.0; }
1107 double AreaTubeBwd_rO[AreaTubeBwd_num];
1108 AreaTubeBwd_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
1109 AreaTubeBwd_rO[1] = AreaTubeBwd_rO[0];
1112 G4Polycone* geo_AreaTubeBwdpcon =
new G4Polycone(
"geo_AreaTubeBwdpcon_name", 0, 2 * M_PI, AreaTubeBwd_num, AreaTubeBwd_Z,
1113 AreaTubeBwd_rI, AreaTubeBwd_rO);
1119 prep =
"Lv1TaHERUp.";
1121 double Lv1TaHERUp_A1 = m_config.getParameter(prep +
"A1");
1123 const int Lv1TaHERUp_num = 4;
1125 double Lv1TaHERUp_Z[Lv1TaHERUp_num];
1126 Lv1TaHERUp_Z[0] = -m_config.getParameter(prep +
"L1") * Unit::cm / Unit::mm;
1127 Lv1TaHERUp_Z[1] = -m_config.getParameter(prep +
"L2") * Unit::cm / Unit::mm;
1128 Lv1TaHERUp_Z[2] = -m_config.getParameter(prep +
"L3") * Unit::cm / Unit::mm;
1129 Lv1TaHERUp_Z[3] = -m_config.getParameter(prep +
"L4") * Unit::cm / Unit::mm;
1131 double Lv1TaHERUp_rI[Lv1TaHERUp_num];
1132 for (
int i = 0; i < Lv1TaHERUp_num; i++)
1133 { Lv1TaHERUp_rI[i] = 0.0; }
1135 double Lv1TaHERUp_rO[Lv1TaHERUp_num];
1136 Lv1TaHERUp_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
1137 Lv1TaHERUp_rO[1] = m_config.getParameter(prep +
"R2") * Unit::cm / Unit::mm;
1138 Lv1TaHERUp_rO[2] = m_config.getParameter(prep +
"R3") * Unit::cm / Unit::mm;
1139 Lv1TaHERUp_rO[3] = m_config.getParameter(prep +
"R4") * Unit::cm / Unit::mm;
1141 string strMat_Lv1TaHERUp = m_config.getParameterStr(prep +
"Material");
1142 G4Material* mat_Lv1TaHERUp = Materials::get(strMat_Lv1TaHERUp);
1145 G4Polycone* geo_Lv1TaHERUppcon =
new G4Polycone(
"geo_Lv1TaHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z, Lv1TaHERUp_rI,
1147 G4Transform3D transform_AreaTubeBwdForHER = G4Translate3D(0., 0., 0.);
1148 transform_AreaTubeBwdForHER = transform_AreaTubeBwdForHER * G4RotateY3D(-Lv1TaHERUp_A1);
1149 G4IntersectionSolid* geo_Lv1TaHERUp =
new G4IntersectionSolid(
"", geo_Lv1TaHERUppcon, geo_AreaTubeBwdpcon,
1150 transform_AreaTubeBwdForHER);
1151 G4LogicalVolume* logi_Lv1TaHERUp =
new G4LogicalVolume(geo_Lv1TaHERUp, mat_Lv1TaHERUp,
"logi_Lv1TaHERUp_name");
1154 setColor(*logi_Lv1TaHERUp,
"#00CC00");
1155 G4Transform3D transform_Lv1TaHERUp = G4Translate3D(0., 0., 0.);
1156 transform_Lv1TaHERUp = transform_Lv1TaHERUp * G4RotateY3D(Lv1TaHERUp_A1);
1157 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1TaHERUp,
"phys_Lv1TaHERUp_name", &topVolume,
false, 0);
1166 prep =
"Lv2VacHERUp.";
1168 double Lv2VacHERUp_rO[Lv1TaHERUp_num];
1169 Lv2VacHERUp_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
1170 Lv2VacHERUp_rO[1] = Lv2VacHERUp_rO[0];
1171 Lv2VacHERUp_rO[2] = Lv2VacHERUp_rO[0];
1172 Lv2VacHERUp_rO[3] = Lv2VacHERUp_rO[0];
1174 string strMat_Lv2VacHERUp = m_config.getParameterStr(prep +
"Material");
1175 G4Material* mat_Lv2VacHERUp = Materials::get(strMat_Lv2VacHERUp);
1178 G4Polycone* geo_Lv2VacHERUppcon =
new G4Polycone(
"geo_Lv2VacHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z,
1179 Lv1TaHERUp_rI, Lv2VacHERUp_rO);
1180 G4IntersectionSolid* geo_Lv2VacHERUp =
new G4IntersectionSolid(
"", geo_Lv2VacHERUppcon, geo_AreaTubeBwdpcon,
1181 transform_AreaTubeFwdForHER);
1182 G4LogicalVolume* logi_Lv2VacHERUp =
new G4LogicalVolume(geo_Lv2VacHERUp, mat_Lv2VacHERUp,
"logi_Lv2VacHERUp_name");
1183 if (flag_limitStep) logi_Lv2VacHERUp->SetUserLimits(
new G4UserLimits(stepMax));
1186 setColor(*logi_Lv2VacHERUp,
"#CCCCCC");
1187 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERUp,
"phys_Lv2VacHERUp_name", logi_Lv1TaHERUp,
false, 0);
1196 prep =
"Lv1TaLERDwn.";
1198 double Lv1TaLERDwn_A1 = m_config.getParameter(prep +
"A1");
1200 const int Lv1TaLERDwn_num = 4;
1202 double Lv1TaLERDwn_Z[Lv1TaLERDwn_num];
1203 Lv1TaLERDwn_Z[0] = -m_config.getParameter(prep +
"L1") * Unit::cm / Unit::mm;
1204 Lv1TaLERDwn_Z[1] = -m_config.getParameter(prep +
"L2") * Unit::cm / Unit::mm;
1205 Lv1TaLERDwn_Z[2] = -m_config.getParameter(prep +
"L3") * Unit::cm / Unit::mm;
1206 Lv1TaLERDwn_Z[3] = -m_config.getParameter(prep +
"L4") * Unit::cm / Unit::mm;
1208 double Lv1TaLERDwn_rI[Lv1TaLERDwn_num];
1209 for (
int i = 0; i < Lv1TaLERDwn_num; i++)
1210 { Lv1TaLERDwn_rI[i] = 0.0; }
1212 double Lv1TaLERDwn_rO[Lv1TaLERDwn_num];
1213 Lv1TaLERDwn_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
1214 Lv1TaLERDwn_rO[1] = m_config.getParameter(prep +
"R2") * Unit::cm / Unit::mm;
1215 Lv1TaLERDwn_rO[2] = m_config.getParameter(prep +
"R3") * Unit::cm / Unit::mm;
1216 Lv1TaLERDwn_rO[3] = m_config.getParameter(prep +
"R4") * Unit::cm / Unit::mm;
1218 string strMat_Lv1TaLERDwn = m_config.getParameterStr(prep +
"Material");
1219 G4Material* mat_Lv1TaLERDwn = Materials::get(strMat_Lv1TaLERDwn);
1222 G4Polycone* geo_Lv1TaLERDwnpcon =
new G4Polycone(
"geo_Lv1TaLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1223 Lv1TaLERDwn_rI, Lv1TaLERDwn_rO);
1224 G4Transform3D transform_AreaTubeBwdForLER = G4Translate3D(0., 0., 0.);
1225 transform_AreaTubeBwdForLER = transform_AreaTubeBwdForLER * G4RotateY3D(-Lv1TaLERDwn_A1);
1226 G4IntersectionSolid* geo_Lv1TaLERDwn =
new G4IntersectionSolid(
"", geo_Lv1TaLERDwnpcon, geo_AreaTubeBwdpcon,
1227 transform_AreaTubeBwdForLER);
1228 G4LogicalVolume* logi_Lv1TaLERDwn =
new G4LogicalVolume(geo_Lv1TaLERDwn, mat_Lv1TaLERDwn,
"logi_Lv1TaLERDwn_name");
1231 setColor(*logi_Lv1TaLERDwn,
"#0000CC");
1232 G4Transform3D transform_Lv1TaLERDwn = G4Translate3D(0., 0., 0.);
1233 transform_Lv1TaLERDwn = transform_Lv1TaLERDwn * G4RotateY3D(Lv1TaLERDwn_A1);
1234 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1TaLERDwn,
"phys_Lv1TaLERDwn_name", &topVolume,
false, 0);
1243 prep =
"Lv2VacLERDwn.";
1245 double Lv2VacLERDwn_rO[Lv1TaLERDwn_num];
1246 Lv2VacLERDwn_rO[0] = m_config.getParameter(prep +
"R1") * Unit::cm / Unit::mm;
1247 Lv2VacLERDwn_rO[1] = Lv2VacLERDwn_rO[0];
1248 Lv2VacLERDwn_rO[2] = Lv2VacLERDwn_rO[0];
1249 Lv2VacLERDwn_rO[3] = Lv2VacLERDwn_rO[0];
1251 string strMat_Lv2VacLERDwn = m_config.getParameterStr(prep +
"Material");
1252 G4Material* mat_Lv2VacLERDwn = Materials::get(strMat_Lv2VacLERDwn);
1255 G4Polycone* geo_Lv2VacLERDwnpcon =
new G4Polycone(
"geo_Lv2VacLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1256 Lv1TaLERDwn_rI, Lv2VacLERDwn_rO);
1257 G4IntersectionSolid* geo_Lv2VacLERDwn =
new G4IntersectionSolid(
"", geo_Lv2VacLERDwnpcon, geo_AreaTubeBwdpcon,
1258 transform_AreaTubeBwdForLER);
1259 G4LogicalVolume* logi_Lv2VacLERDwn =
new G4LogicalVolume(geo_Lv2VacLERDwn, mat_Lv2VacLERDwn,
"logi_Lv2VacLERDwn_name");
1260 if (flag_limitStep) logi_Lv2VacLERDwn->SetUserLimits(
new G4UserLimits(stepMax));
1263 setColor(*logi_Lv2VacLERDwn,
"#CCCCCC");
1264 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERDwn,
"phys_Lv2VacLERDwn_name", logi_Lv1TaLERDwn,
false, 0);
1270 G4IntersectionSolid* geo_CuFlangeFwd_x2 =
new G4IntersectionSolid(
"geo_CuFlangeFwd_x2_name", geo_AreaTubeFwdpcon, geo_Flange,
1271 G4Translate3D(0, 0, Flange_D + Flange_T * 2));
1272 G4SubtractionSolid* geo_CuFlangeFwd_x =
new G4SubtractionSolid(
"geo_CuFlangeFwd_x_name", geo_CuFlangeFwd_x2, geo_Lv1TaLERUp,
1273 transform_Lv1TaLERUp);
1274 G4SubtractionSolid* geo_CuFlangeFwd =
new G4SubtractionSolid(
"geo_CuFlangeFwd_name", geo_CuFlangeFwd_x, geo_Lv1TaHERDwn,
1275 transform_Lv1TaHERDwn);
1277 G4LogicalVolume* logi_CuFlangeFwd =
new G4LogicalVolume(geo_CuFlangeFwd, mat_Lv1TaLERUp,
"logi_CuFlangeFwd_name");
1280 setColor(*logi_CuFlangeFwd,
"#CCCCCC");
1281 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeFwd,
"phys_CuFlangeFwd_name", &topVolume,
false, 0);
1286 G4IntersectionSolid* geo_CuFlangeBwd_x2 =
new G4IntersectionSolid(
"geo_CuFlangeBwd_x2_name", geo_AreaTubeBwdpcon, geo_Flange,
1287 G4Translate3D(0, 0, -Flange_D - Flange_T * 2));
1288 G4SubtractionSolid* geo_CuFlangeBwd_x =
new G4SubtractionSolid(
"geo_CuFlangeBwd_x_name", geo_CuFlangeBwd_x2, geo_Lv1TaHERUp,
1289 transform_Lv1TaHERUp);
1290 G4SubtractionSolid* geo_CuFlangeBwd =
new G4SubtractionSolid(
"geo_CuFlangeBwd_name", geo_CuFlangeBwd_x, geo_Lv1TaLERDwn,
1291 transform_Lv1TaLERDwn);
1293 G4LogicalVolume* logi_CuFlangeBwd =
new G4LogicalVolume(geo_CuFlangeBwd, mat_Lv1TaLERUp,
"logi_CuFlangeBwd_name");
1296 setColor(*logi_CuFlangeBwd,
"#CCCCCC");
1297 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeBwd,
"phys_CuFlangeBwd_name", &topVolume,
false, 0);