108 double SafetyLength =
m_config.getParameter(
"Safety.L1") * unitFactor;
110 double stepMax = 5.0 *
Unit::mm * unitFactor;
111 int flag_limitStep = int(
m_config.getParameter(
"LimitStepLength"));
113 double A11 = 0.03918;
118 int Index_sensi = 11;
126 if (
m_config.getParameter(
"Lv2OutTi.R1", -1.0) < 0.0) {
128 }
else if (
m_config.getParameter(
"Lv2AuCoat.R1", -1.0) < 0.0) {
144 string prep =
"AreaTubeFwd.";
146 const int AreaTubeFwd_num = 2;
148 double AreaTubeFwd_Z[AreaTubeFwd_num];
149 AreaTubeFwd_Z[0] =
m_config.getParameter(prep +
"D1") * unitFactor;
150 AreaTubeFwd_Z[1] =
m_config.getParameter(prep +
"D2") * unitFactor;
152 double AreaTubeFwd_rI[AreaTubeFwd_num];
153 for (
int i = 0; i < AreaTubeFwd_num; ++i) {
154 AreaTubeFwd_rI[i] = 0.0;
157 double AreaTubeFwd_rO[AreaTubeFwd_num];
158 AreaTubeFwd_rO[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
159 AreaTubeFwd_rO[1] = AreaTubeFwd_rO[0];
162 G4Polycone* geo_AreaTubeFwdpcon =
new G4Polycone(
"geo_AreaTubeFwdpcon_name", 0, 2 * M_PI, AreaTubeFwd_num, AreaTubeFwd_Z,
163 AreaTubeFwd_rI, AreaTubeFwd_rO);
169 prep =
"AreaTubeBwd.";
171 const int AreaTubeBwd_num = 2;
173 double AreaTubeBwd_Z[AreaTubeBwd_num];
174 AreaTubeBwd_Z[0] =
m_config.getParameter(prep +
"D1") * unitFactor;
175 AreaTubeBwd_Z[1] =
m_config.getParameter(prep +
"D2") * unitFactor;
177 double AreaTubeBwd_rI[AreaTubeBwd_num];
178 for (
int i = 0; i < AreaTubeBwd_num; ++i) {
179 AreaTubeBwd_rI[i] = 0.0;
182 double AreaTubeBwd_rO[AreaTubeBwd_num];
183 AreaTubeBwd_rO[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
184 AreaTubeBwd_rO[1] = AreaTubeBwd_rO[0];
187 G4Polycone* geo_AreaTubeBwdpcon =
new G4Polycone(
"geo_AreaTubeBwdpcon_name", 0, 2 * M_PI, AreaTubeBwd_num, AreaTubeBwd_Z,
188 AreaTubeBwd_rI, AreaTubeBwd_rO);
194 prep =
"Lv1TaLERUp.";
196 double Lv1TaLERUp_A1 =
m_config.getParameter(prep +
"A1");
198 int Lv1TaLERUp_num = int(
m_config.getParameter(prep +
"N"));
199 vector<double> Lv1TaLERUp_Z(Lv1TaLERUp_num);
200 vector<double> Lv1TaLERUp_rI(Lv1TaLERUp_num);
201 vector<double> Lv1TaLERUp_rO(Lv1TaLERUp_num);
202 for (
int i = 0; i < Lv1TaLERUp_num; ++i) {
203 ostringstream ossZ_Lv1TaLERUp;
204 ossZ_Lv1TaLERUp <<
"L" << i;
206 ostringstream ossR_Lv1TaLERUp;
207 ossR_Lv1TaLERUp <<
"R" << i;
209 Lv1TaLERUp_Z[i] =
m_config.getParameter(prep + ossZ_Lv1TaLERUp.str()) * unitFactor;
210 Lv1TaLERUp_rO[i] =
m_config.getParameter(prep + ossR_Lv1TaLERUp.str()) * unitFactor;
212 for (
int i = 0; i < Lv1TaLERUp_num; ++i) {
213 Lv1TaLERUp_rI[i] = 0.0;
216 string strMat_Lv1TaLERUp =
m_config.getParameterStr(prep +
"Material");
220 G4Polycone* geo_Lv1TaLERUppcon =
new G4Polycone(
"geo_Lv1TaLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, &(Lv1TaLERUp_Z[0]),
222 &(Lv1TaLERUp_rO[0]));
223 G4Transform3D transform_AreaTubeFwdForLER = G4Translate3D(0., 0., 0.);
224 transform_AreaTubeFwdForLER = transform_AreaTubeFwdForLER * G4RotateY3D(-Lv1TaLERUp_A1);
225 G4IntersectionSolid* geo_Lv1TaLERUp =
new G4IntersectionSolid(
"geo_Lv1TaLERUp_name", geo_Lv1TaLERUppcon, geo_AreaTubeFwdpcon,
226 transform_AreaTubeFwdForLER);
227 G4LogicalVolume* logi_Lv1TaLERUp =
new G4LogicalVolume(geo_Lv1TaLERUp, mat_Lv1TaLERUp,
"logi_Lv1TaLERUp_name");
230 setColor(*logi_Lv1TaLERUp,
"#0000CC");
231 G4Transform3D transform_Lv1TaLERUp = G4Translate3D(0., 0., 0.);
232 transform_Lv1TaLERUp = transform_Lv1TaLERUp * G4RotateY3D(Lv1TaLERUp_A1);
233 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1TaLERUp,
"phys_Lv1TaLERUp_name", &topVolume,
false, 0);
240 prep =
"Lv1TaHERUp.";
242 double Lv1TaHERUp_A1 =
m_config.getParameter(prep +
"A1");
244 int Lv1TaHERUp_num = int(
m_config.getParameter(prep +
"N"));
245 vector<double> Lv1TaHERUp_Z(Lv1TaHERUp_num);
246 vector<double> Lv1TaHERUp_rI(Lv1TaHERUp_num);
247 vector<double> Lv1TaHERUp_rO(Lv1TaHERUp_num);
248 for (
int i = 0; i < Lv1TaHERUp_num; ++i) {
249 ostringstream ossZ_Lv1TaHERUp;
250 ossZ_Lv1TaHERUp <<
"L" << i;
252 ostringstream ossR_Lv1TaHERUp;
253 ossR_Lv1TaHERUp <<
"R" << i;
255 Lv1TaHERUp_Z[i] =
m_config.getParameter(prep + ossZ_Lv1TaHERUp.str()) * unitFactor;
256 Lv1TaHERUp_rO[i] =
m_config.getParameter(prep + ossR_Lv1TaHERUp.str()) * unitFactor;
258 for (
int i = 0; i < Lv1TaHERUp_num; ++i) {
259 Lv1TaHERUp_rI[i] = 0.0;
262 string strMat_Lv1TaHERUp =
m_config.getParameterStr(prep +
"Material");
266 G4Polycone* geo_Lv1TaHERUppcon =
new G4Polycone(
"geo_Lv1TaHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, &(Lv1TaHERUp_Z[0]),
268 &(Lv1TaHERUp_rO[0]));
269 G4Transform3D transform_AreaTubeBwdForHER = G4Translate3D(0., 0., 0.);
270 transform_AreaTubeBwdForHER = transform_AreaTubeBwdForHER * G4RotateY3D(-Lv1TaHERUp_A1);
271 G4IntersectionSolid* geo_Lv1TaHERUp =
new G4IntersectionSolid(
"", geo_Lv1TaHERUppcon, geo_AreaTubeBwdpcon,
272 transform_AreaTubeBwdForHER);
273 G4LogicalVolume* logi_Lv1TaHERUp =
new G4LogicalVolume(geo_Lv1TaHERUp, mat_Lv1TaHERUp,
"logi_Lv1TaHERUp_name");
276 setColor(*logi_Lv1TaHERUp,
"#00CC00");
277 G4Transform3D transform_Lv1TaHERUp = G4Translate3D(0., 0., 0.);
278 transform_Lv1TaHERUp = transform_Lv1TaHERUp * G4RotateY3D(Lv1TaHERUp_A1);
279 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1TaHERUp,
"phys_Lv1TaHERUp_name", &topVolume,
false, 0);
286 prep =
"Lv1TaLERDwn.";
288 double Lv1TaLERDwn_A1 =
m_config.getParameter(prep +
"A1");
290 int Lv1TaLERDwn_num = int(
m_config.getParameter(prep +
"N"));
291 vector<double> Lv1TaLERDwn_Z(Lv1TaLERDwn_num);
292 vector<double> Lv1TaLERDwn_rI(Lv1TaLERDwn_num);
293 vector<double> Lv1TaLERDwn_rO(Lv1TaLERDwn_num);
294 for (
int i = 0; i < Lv1TaLERDwn_num; ++i) {
295 ostringstream ossZ_Lv1TaLERDwn;
296 ossZ_Lv1TaLERDwn <<
"L" << i;
298 ostringstream ossR_Lv1TaLERDwn;
299 ossR_Lv1TaLERDwn <<
"R" << i;
301 Lv1TaLERDwn_Z[i] =
m_config.getParameter(prep + ossZ_Lv1TaLERDwn.str()) * unitFactor;
302 Lv1TaLERDwn_rO[i] =
m_config.getParameter(prep + ossR_Lv1TaLERDwn.str()) * unitFactor;
304 for (
int i = 0; i < Lv1TaLERDwn_num; ++i) {
305 Lv1TaLERDwn_rI[i] = 0.0;
308 string strMat_Lv1TaLERDwn =
m_config.getParameterStr(prep +
"Material");
312 G4Polycone* geo_Lv1TaLERDwnpcon =
new G4Polycone(
"geo_Lv1TaLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, &(Lv1TaLERDwn_Z[0]),
313 &(Lv1TaLERDwn_rI[0]), &(Lv1TaLERDwn_rO[0]));
314 G4Transform3D transform_AreaTubeBwdForLER = G4Translate3D(0., 0., 0.);
315 transform_AreaTubeBwdForLER = transform_AreaTubeBwdForLER * G4RotateY3D(-Lv1TaLERDwn_A1);
316 G4IntersectionSolid* geo_Lv1TaLERDwn =
new G4IntersectionSolid(
"", geo_Lv1TaLERDwnpcon, geo_AreaTubeBwdpcon,
317 transform_AreaTubeBwdForLER);
318 G4LogicalVolume* logi_Lv1TaLERDwn =
new G4LogicalVolume(geo_Lv1TaLERDwn, mat_Lv1TaLERDwn,
"logi_Lv1TaLERDwn_name");
321 setColor(*logi_Lv1TaLERDwn,
"#0000CC");
322 G4Transform3D transform_Lv1TaLERDwn = G4Translate3D(0., 0., 0.);
323 transform_Lv1TaLERDwn = transform_Lv1TaLERDwn * G4RotateY3D(Lv1TaLERDwn_A1);
324 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1TaLERDwn,
"phys_Lv1TaLERDwn_name", &topVolume,
false, 0);
331 prep =
"Lv1TaHERDwn.";
333 double Lv1TaHERDwn_A1 =
m_config.getParameter(prep +
"A1");
335 int Lv1TaHERDwn_num = int(
m_config.getParameter(prep +
"N"));
336 vector<double> Lv1TaHERDwn_Z(Lv1TaHERDwn_num);
337 vector<double> Lv1TaHERDwn_rI(Lv1TaHERDwn_num);
338 vector<double> Lv1TaHERDwn_rO(Lv1TaHERDwn_num);
339 for (
int i = 0; i < Lv1TaHERDwn_num; ++i) {
340 ostringstream ossZ_Lv1TaHERDwn;
341 ossZ_Lv1TaHERDwn <<
"L" << i;
343 ostringstream ossR_Lv1TaHERDwn;
344 ossR_Lv1TaHERDwn <<
"R" << i;
346 Lv1TaHERDwn_Z[i] =
m_config.getParameter(prep + ossZ_Lv1TaHERDwn.str()) * unitFactor;
347 Lv1TaHERDwn_rO[i] =
m_config.getParameter(prep + ossR_Lv1TaHERDwn.str()) * unitFactor;
349 for (
int i = 0; i < Lv1TaHERDwn_num; ++i) {
350 Lv1TaHERDwn_rI[i] = 0.0;
353 string strMat_Lv1TaHERDwn =
m_config.getParameterStr(prep +
"Material");
357 G4Polycone* geo_Lv1TaHERDwnpcon =
new G4Polycone(
"geo_Lv1TaHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, &(Lv1TaHERDwn_Z[0]),
358 &(Lv1TaHERDwn_rI[0]), &(Lv1TaHERDwn_rO[0]));
359 G4Transform3D transform_AreaTubeFwdForHER = G4Translate3D(0., 0., 0.);
360 transform_AreaTubeFwdForHER = transform_AreaTubeFwdForHER * G4RotateY3D(-Lv1TaHERDwn_A1);
361 G4IntersectionSolid* geo_Lv1TaHERDwn =
new G4IntersectionSolid(
"", geo_Lv1TaHERDwnpcon, geo_AreaTubeFwdpcon,
362 transform_AreaTubeFwdForHER);
363 G4LogicalVolume* logi_Lv1TaHERDwn =
new G4LogicalVolume(geo_Lv1TaHERDwn, mat_Lv1TaHERDwn,
"logi_Lv1TaHERDwn_name");
366 setColor(*logi_Lv1TaHERDwn,
"#00CC00");
367 G4Transform3D transform_Lv1TaHERDwn = G4Translate3D(0., 0., 0.);
368 transform_Lv1TaHERDwn = transform_Lv1TaHERDwn * G4RotateY3D(Lv1TaHERDwn_A1);
369 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1TaHERDwn,
"phys_Lv1TaHERDwn_name", &topVolume,
false, 0);
378 int Lv1SUS_num = int(
m_config.getParameter(prep +
"N"));
379 vector<double> Lv1SUS_Z(Lv1SUS_num);
380 vector<double> Lv1SUS_rI(Lv1SUS_num);
381 vector<double> Lv1SUS_rO(Lv1SUS_num);
383 for (
int i = 0; i < Lv1SUS_num; ++i) {
384 ostringstream ossZID;
387 ostringstream ossrOID;
390 ostringstream ossrIID;
393 Lv1SUS_Z[i] =
m_config.getParameter(prep + ossZID.str()) * unitFactor;
394 Lv1SUS_rO[i] =
m_config.getParameter(prep + ossrOID.str()) * unitFactor;
395 Lv1SUS_rI[i] =
m_config.getParameter(prep + ossrIID.str(), 0.0) * unitFactor;
399 string strMat_Lv1SUS =
m_config.getParameterStr(prep +
"Material");
403 G4Polycone* geo_Lv1SUS =
new G4Polycone(
"geo_Lv1SUS_name", 0, 2 * M_PI, Lv1SUS_num, &(Lv1SUS_Z[0]), &(Lv1SUS_rI[0]),
405 G4LogicalVolume* logi_Lv1SUS =
new G4LogicalVolume(geo_Lv1SUS, mat_Lv1SUS,
"logi_Lv1SUS_name");
409 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv1SUS,
"phys_Lv1SUS_name", &topVolume,
false, 0);
420 const int Lv2OutBe_num = 2;
422 double Lv2OutBe_Z[Lv2OutBe_num];
423 Lv2OutBe_Z[0] =
m_config.getParameter(prep +
"L1") * unitFactor;
424 Lv2OutBe_Z[1] =
m_config.getParameter(prep +
"L2") * unitFactor;
426 double Lv2OutBe_rI[Lv2OutBe_num];
427 Lv2OutBe_rI[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
428 Lv2OutBe_rI[1] = Lv2OutBe_rI[0];
430 double Lv2OutBe_rO[Lv2OutBe_num];
431 Lv2OutBe_rO[0] =
m_config.getParameter(prep +
"R2") * unitFactor;
432 Lv2OutBe_rO[1] = Lv2OutBe_rO[0];
434 string strMat_Lv2OutBe =
m_config.getParameterStr(prep +
"Material");
438 G4Polycone* geo_Lv2OutBe =
new G4Polycone(
"geo_Lv2OutBe_name", 0, 2 * M_PI, Lv2OutBe_num, Lv2OutBe_Z, Lv2OutBe_rI, Lv2OutBe_rO);
439 G4LogicalVolume* logi_Lv2OutBe =
new G4LogicalVolume(geo_Lv2OutBe, mat_Lv2OutBe,
"logi_Lv2OutBe_name");
442 setColor(*logi_Lv2OutBe,
"#333300");
443 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutBe,
"phys_Lv2OutBe_name", logi_Lv1SUS,
false, 0);
454 const int Lv2InBe_num = 2;
456 double Lv2InBe_Z[Lv2InBe_num];
457 Lv2InBe_Z[0] =
m_config.getParameter(prep +
"L1") * unitFactor;
458 Lv2InBe_Z[1] =
m_config.getParameter(prep +
"L2") * unitFactor;
460 double Lv2InBe_rI[Lv2InBe_num];
461 Lv2InBe_rI[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
462 Lv2InBe_rI[1] = Lv2InBe_rI[0];
464 double Lv2InBe_rO[Lv2InBe_num];
465 Lv2InBe_rO[0] =
m_config.getParameter(prep +
"R2") * unitFactor;
466 Lv2InBe_rO[1] = Lv2InBe_rO[0];
468 string strMat_Lv2InBe =
m_config.getParameterStr(prep +
"Material");
472 G4Polycone* geo_Lv2InBe =
new G4Polycone(
"geo_Lv2InBe_name", 0, 2 * M_PI, Lv2InBe_num, Lv2InBe_Z, Lv2InBe_rI, Lv2InBe_rO);
473 G4LogicalVolume* logi_Lv2InBe =
new G4LogicalVolume(geo_Lv2InBe, mat_Lv2InBe,
"logi_Lv2InBe_name");
477 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2InBe,
"phys_Lv2InBe_name", logi_Lv1SUS,
false, 0);
482 G4UnionSolid* geo_Lv2Vacuumx = NULL;
483 if (phase2 || Run1) {
485 double Lv2Vacuum_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
486 double Lv2Vacuum_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
487 double Lv2Vacuum_L3 =
m_config.getParameter(prep +
"L3") * unitFactor;
488 double Lv2Vacuum_L4 =
m_config.getParameter(prep +
"L4") * unitFactor;
489 double Lv2Vacuum_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
490 double Lv2Vacuum_R2 =
m_config.getParameter(prep +
"R2") * unitFactor;
491 double Lv2Vacuum_R3 =
m_config.getParameter(prep +
"R3") * unitFactor;
493 double Lv2Vacuum_A2 =
m_config.getParameter(prep +
"A2");
496 const int Lv2Vacuum1_num = 2;
498 double Lv2Vacuum1_Z[Lv2Vacuum1_num];
499 Lv2Vacuum1_Z[0] = Lv2Vacuum_L1;
500 Lv2Vacuum1_Z[1] = Lv2Vacuum_L2;
501 double Lv2Vacuum1_rI[Lv2Vacuum1_num];
502 for (
int tmpn = 0; tmpn < Lv2Vacuum1_num; ++tmpn) {
503 Lv2Vacuum1_rI[tmpn] = 0.0;
505 double Lv2Vacuum1_rO[Lv2Vacuum1_num];
506 Lv2Vacuum1_rO[0] = Lv2Vacuum_R1;
507 Lv2Vacuum1_rO[1] = Lv2Vacuum_R1;
509 double Lv2Vacuum2_Z1 = 2. * Lv2Vacuum_L3;
510 double Lv2Vacuum2_rI1 = 0.0;
511 double Lv2Vacuum2_rO1 = Lv2Vacuum_R2;
513 double Lv2Vacuum2_Z2 = (Lv2Vacuum_L3 * cos(Lv2Vacuum_A2)) + SafetyLength;
514 double Lv2Vacuum2_rI2 = 0.0;
515 double Lv2Vacuum2_rO2 = 2 * Lv2Vacuum_R2;
517 const int Lv2Vacuum3_num = 2;
519 double Lv2Vacuum3_Z[Lv2Vacuum3_num];
520 Lv2Vacuum3_Z[0] = 0.0;
521 Lv2Vacuum3_Z[1] = Lv2Vacuum_L4;
522 double Lv2Vacuum3_rI[Lv2Vacuum3_num];
523 for (
int tmpn = 0; tmpn < Lv2Vacuum3_num; ++tmpn) {
524 Lv2Vacuum3_rI[tmpn] = 0.0;
526 double Lv2Vacuum3_rO[Lv2Vacuum3_num];
527 Lv2Vacuum3_rO[0] = Lv2Vacuum_R3;
528 Lv2Vacuum3_rO[1] = Lv2Vacuum_R3;
532 G4Polycone* geo_Lv2VacuumPart1 =
new G4Polycone(
"geo_Lv2VacuumPart1_name", 0, 2 * M_PI, Lv2Vacuum1_num, Lv2Vacuum1_Z, Lv2Vacuum1_rI,
535 G4Tubs* geo_Lv2VacuumPart2_1 =
new G4Tubs(
"geo_Lv2VacuumPart2_1_name", Lv2Vacuum2_rI1, Lv2Vacuum2_rO1, Lv2Vacuum2_Z1, 0, 2 * M_PI);
536 G4Tubs* geo_Lv2VacuumPart2_2 =
new G4Tubs(
"geo_Lv2VacuumPart2_2_name", Lv2Vacuum2_rI2, Lv2Vacuum2_rO2, Lv2Vacuum2_Z2, 0, 2 * M_PI);
537 G4Transform3D transform_Lv2VacuumPart2_2 = G4Translate3D(0., 0., 0.);
538 transform_Lv2VacuumPart2_2 = transform_Lv2VacuumPart2_2 * G4RotateY3D(-Lv2Vacuum_A2);
539 G4IntersectionSolid* geo_Lv2VacuumPart2 =
new G4IntersectionSolid(
"geo_Lv2VacuumPart2_name", geo_Lv2VacuumPart2_1,
540 geo_Lv2VacuumPart2_2, transform_Lv2VacuumPart2_2);
542 G4Polycone* geo_Lv2VacuumPart3 =
new G4Polycone(
"geo_Lv2VacuumPart3_name", 0, 2 * M_PI, Lv2Vacuum3_num, Lv2Vacuum3_Z, Lv2Vacuum3_rI,
546 G4Transform3D transform_Lv2VacuumPart3 = G4Translate3D(-0.5, 0., 0.);
548 transform_Lv2VacuumPart3 = transform_Lv2VacuumPart3 * G4RotateY3D(-A11);
549 G4UnionSolid* geo_Lv2Vacuumxx =
new G4UnionSolid(
"geo_Lv2Vacuumxx_name", geo_Lv2VacuumPart1, geo_Lv2VacuumPart3,
550 transform_Lv2VacuumPart3);
551 G4Transform3D transform_Lv2VacuumPart2 = G4Translate3D(Lv2Vacuum_L3 * sin(Lv2Vacuum_A2), 0.,
552 Lv2Vacuum_L2 + Lv2Vacuum_L3 * cos(Lv2Vacuum_A2));
553 transform_Lv2VacuumPart2 = transform_Lv2VacuumPart2 * G4RotateY3D(Lv2Vacuum_A2);
554 geo_Lv2Vacuumx =
new G4UnionSolid(
"geo_Lv2Vacuumx_name", geo_Lv2Vacuumxx, geo_Lv2VacuumPart2,
555 transform_Lv2VacuumPart2);
557 double Lv2Vacuum_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
558 double Lv2Vacuum_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
559 double Lv2Vacuum_L3 =
m_config.getParameter(prep +
"L3") * unitFactor;
561 double Lv2Vacuum_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
562 double Lv2Vacuum_D2 =
m_config.getParameter(prep +
"D2") * unitFactor;
563 double Lv2Vacuum_D3 =
m_config.getParameter(prep +
"D3") * unitFactor;
564 double Lv2Vacuum_D4 =
m_config.getParameter(prep +
"D4") * unitFactor;
565 double Lv2Vacuum_D5 =
m_config.getParameter(prep +
"D5") * unitFactor;
566 double Lv2Vacuum_D6 =
m_config.getParameter(prep +
"D6") * unitFactor;
567 double Lv2Vacuum_S1 =
m_config.getParameter(prep +
"S1") * unitFactor;
568 double Lv2Vacuum_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
569 double Lv2Vacuum_R2 =
m_config.getParameter(prep +
"R2") * unitFactor;
571 double Lv2Vacuum_P1 =
m_config.getParameter(prep +
"P1") * unitFactor;
573 double Lv2Vacuum_A1 =
m_config.getParameter(prep +
"A1");
574 double Lv2Vacuum_A2 =
m_config.getParameter(prep +
"A2");
575 double Lv2Vacuum_A3 =
m_config.getParameter(prep +
"A3");
578 const int Lv2Vacuum1_num = 2;
580 double Lv2Vacuum1_Z[Lv2Vacuum1_num];
581 Lv2Vacuum1_Z[0] = Lv2Vacuum_L1;
582 Lv2Vacuum1_Z[1] = Lv2Vacuum_L2;
583 double Lv2Vacuum1_rI[Lv2Vacuum1_num];
584 for (
int tmpn = 0; tmpn < Lv2Vacuum1_num; ++tmpn) {
585 Lv2Vacuum1_rI[tmpn] = 0.0;
587 double Lv2Vacuum1_rO[Lv2Vacuum1_num];
588 Lv2Vacuum1_rO[0] = Lv2Vacuum_R1;
589 Lv2Vacuum1_rO[1] = Lv2Vacuum_R1;
591 double Lv2Vacuum2_Z1 = 2. * Lv2Vacuum_L3;
592 double Lv2Vacuum2_rI1 = 0.0;
593 double Lv2Vacuum2_rO1 = Lv2Vacuum_R2;
595 double Lv2Vacuum2_Z2 = (Lv2Vacuum_L3 * cos(Lv2Vacuum_A2)) + SafetyLength;
596 double Lv2Vacuum2_rI2 = 0.0;
597 double Lv2Vacuum2_rO2 = 2 * Lv2Vacuum_R2;
613 double Lv2Vacuum3_dx1 = Lv2Vacuum_D1;
614 double Lv2Vacuum3_dx2 = Lv2Vacuum_D2;
615 double Lv2Vacuum3_dy1 = Lv2Vacuum_D3;
616 double Lv2Vacuum3_dy2 = Lv2Vacuum_D4;
617 double Lv2Vacuum3_dz = Lv2Vacuum_D5;
618 double Lv2Vacuum3_Dz = Lv2Vacuum_D6;
619 double Lv2Vacuum3_L_a = Lv2Vacuum_S1;
620 double Lv2Vacuum3_L_b = Lv2Vacuum3_L_a * sin(Lv2Vacuum_A3);
621 double Lv2Vacuum3_pXYZ = Lv2Vacuum_P1;
625 G4Polycone* geo_Lv2VacuumPart1 =
new G4Polycone(
"geo_Lv2VacuumPart1_name", 0, 2 * M_PI, Lv2Vacuum1_num, Lv2Vacuum1_Z, Lv2Vacuum1_rI,
628 G4Tubs* geo_Lv2VacuumPart2_1 =
new G4Tubs(
"geo_Lv2VacuumPart2_1_name", Lv2Vacuum2_rI1, Lv2Vacuum2_rO1, Lv2Vacuum2_Z1, 0, 2 * M_PI);
629 G4Tubs* geo_Lv2VacuumPart2_2 =
new G4Tubs(
"geo_Lv2VacuumPart2_2_name", Lv2Vacuum2_rI2, Lv2Vacuum2_rO2, Lv2Vacuum2_Z2, 0, 2 * M_PI);
630 G4Transform3D transform_Lv2VacuumPart2_2 = G4Translate3D(0., 0., 0.);
631 transform_Lv2VacuumPart2_2 = transform_Lv2VacuumPart2_2 * G4RotateY3D(-Lv2Vacuum_A2);
632 G4IntersectionSolid* geo_Lv2VacuumPart2 =
new G4IntersectionSolid(
"geo_Lv2VacuumPart2_name", geo_Lv2VacuumPart2_1,
633 geo_Lv2VacuumPart2_2, transform_Lv2VacuumPart2_2);
637 G4Trd* geo_Lv2VacuumPart3_1 =
new G4Trd(
"geo_Lv2VacuumPart3_1_name", Lv2Vacuum3_dx1, Lv2Vacuum3_dx2, Lv2Vacuum3_dy1, Lv2Vacuum3_dy2,
639 G4EllipticalTube* geo_Lv2VacuumPart3_2 =
new G4EllipticalTube(
"geo_Lv2VacuumPart3_2_name", Lv2Vacuum3_L_b, Lv2Vacuum3_L_a,
641 G4Box* geo_Lv2VacuumPart3_3 =
new G4Box(
"geo_Lv2VacuumPart3_3_name", Lv2Vacuum3_pXYZ, Lv2Vacuum3_pXYZ, Lv2Vacuum3_pXYZ);
643 G4Transform3D transform_Lv2VacuumPart3_1 = G4Translate3D(0.5, 0., 0.);
644 transform_Lv2VacuumPart3_1 = transform_Lv2VacuumPart3_1 * G4RotateY3D(M_PI / 2 - Lv2Vacuum_A3);
645 G4UnionSolid* geo_Lv2VacuumPart3xx =
new G4UnionSolid(
"geo_Lv2VacuumPart3xx_name", geo_Lv2VacuumPart3_1, geo_Lv2VacuumPart3_2,
646 transform_Lv2VacuumPart3_1);
648 G4Transform3D transform_Lv2VacuumPart3_2 = G4Translate3D(-0.5, 0., 0.);
649 transform_Lv2VacuumPart3_2 = transform_Lv2VacuumPart3_2 * G4RotateY3D(Lv2Vacuum_A3 - M_PI / 2);
650 G4UnionSolid* geo_Lv2VacuumPart3x =
new G4UnionSolid(
"geo_Lv2VacuumPart3x_name", geo_Lv2VacuumPart3xx, geo_Lv2VacuumPart3_2,
651 transform_Lv2VacuumPart3_2);
655 G4IntersectionSolid* geo_Lv2VacuumPart3 =
new G4IntersectionSolid(
"geo_Lv2VacuumPart3_name", geo_Lv2VacuumPart3x,
656 geo_Lv2VacuumPart3_3);
659 G4Transform3D transform_Lv2VacuumPart3 = G4Translate3D(-(67.5 + 85) * sin(Lv2Vacuum_A1), 0., (67.5 + 85) * cos(Lv2Vacuum_A1));
660 transform_Lv2VacuumPart3 = transform_Lv2VacuumPart3 * G4RotateY3D(M_PI - Lv2Vacuum_A1);
661 G4UnionSolid* geo_Lv2Vacuumxx =
new G4UnionSolid(
"geo_Lv2Vacuumxx_name", geo_Lv2VacuumPart1, geo_Lv2VacuumPart3,
662 transform_Lv2VacuumPart3);
663 G4Transform3D transform_Lv2VacuumPart2 = G4Translate3D(Lv2Vacuum_L3 * sin(Lv2Vacuum_A2), 0.,
664 Lv2Vacuum_L2 + Lv2Vacuum_L3 * cos(Lv2Vacuum_A2));
665 transform_Lv2VacuumPart2 = transform_Lv2VacuumPart2 * G4RotateY3D(Lv2Vacuum_A2);
666 geo_Lv2Vacuumx =
new G4UnionSolid(
"geo_Lv2Vacuumx_name", geo_Lv2Vacuumxx, geo_Lv2VacuumPart2,
667 transform_Lv2VacuumPart2);
671 string strMat_Lv2Vacuum =
m_config.getParameterStr(prep +
"Material");
675 G4IntersectionSolid* geo_Lv2Vacuum =
new G4IntersectionSolid(
"geo_Lv2Vacuum_name", geo_Lv2Vacuumx, geo_Lv1SUS);
676 G4LogicalVolume* logi_Lv2Vacuum =
new G4LogicalVolume(geo_Lv2Vacuum, mat_Lv2Vacuum,
"logi_Lv2Vacuum_name");
677 if (flag_limitStep) logi_Lv2Vacuum->SetUserLimits(
new G4UserLimits(stepMax));
680 setColor(*logi_Lv2Vacuum,
"#CCCCCC");
681 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Vacuum,
"phys_Lv2Vacuum_name", logi_Lv1SUS,
false, 0);
690 int Lv2Paraf1_num = int(
m_config.getParameter(prep +
"N"));
691 vector<double> Lv2Paraf1_Z(Lv2Paraf1_num);
692 vector<double> Lv2Paraf1_rI(Lv2Paraf1_num);
693 vector<double> Lv2Paraf1_rO(Lv2Paraf1_num);
695 for (
int i = 0; i < Lv2Paraf1_num; ++i) {
696 ostringstream ossZID;
699 ostringstream ossrOID;
702 ostringstream ossrIID;
705 Lv2Paraf1_Z[i] =
m_config.getParameter(prep + ossZID.str()) * unitFactor;
706 Lv2Paraf1_rO[i] =
m_config.getParameter(prep + ossrOID.str()) * unitFactor;
707 Lv2Paraf1_rI[i] =
m_config.getParameter(prep + ossrIID.str(), 0.0) * unitFactor;
713 int Lv2Paraf2_num = int(
m_config.getParameter(prep +
"N"));
714 vector<double> Lv2Paraf2_Z(Lv2Paraf2_num);
715 vector<double> Lv2Paraf2_rI(Lv2Paraf2_num);
716 vector<double> Lv2Paraf2_rO(Lv2Paraf2_num);
718 for (
int i = 0; i < Lv2Paraf2_num; ++i) {
719 ostringstream ossZID;
722 ostringstream ossrOID;
725 ostringstream ossrIID;
728 Lv2Paraf2_Z[i] =
m_config.getParameter(prep + ossZID.str()) * unitFactor;
729 Lv2Paraf2_rO[i] =
m_config.getParameter(prep + ossrOID.str()) * unitFactor;
730 Lv2Paraf2_rI[i] =
m_config.getParameter(prep + ossrIID.str(), 0.0) * unitFactor;
734 string strMat_Lv2Paraf =
m_config.getParameterStr(prep +
"Material");
738 G4Polycone* geo_Lv2Parafpcon1 =
new G4Polycone(
"geo_Lv2Parafpcon1_name", 0, 2 * M_PI, Lv2Paraf1_num, &(Lv2Paraf1_Z[0]),
741 G4Polycone* geo_Lv2Parafpcon2 =
new G4Polycone(
"geo_Lv2Parafpcon2_name", 0, 2 * M_PI, Lv2Paraf2_num, &(Lv2Paraf2_Z[0]),
744 G4SubtractionSolid* geo_Lv2Paraf =
new G4SubtractionSolid(
"geo_Lv2Paraf_name", geo_Lv2Parafpcon1, geo_Lv2Parafpcon2);
745 G4LogicalVolume* logi_Lv2Paraf =
new G4LogicalVolume(geo_Lv2Paraf, mat_Lv2Paraf,
"logi_Lv2Paraf_name");
748 setColor(*logi_Lv2Paraf,
"#00CCCC");
749 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Paraf,
"phys_Lv2Paraf_name", logi_Lv1SUS,
false, 0);
758 const int Lv3AuCoat_num = 2;
760 double Lv3AuCoat_Z[Lv3AuCoat_num];
761 Lv3AuCoat_Z[0] =
m_config.getParameter(prep +
"L1") * unitFactor;
762 Lv3AuCoat_Z[1] =
m_config.getParameter(prep +
"L2") * unitFactor;
764 double Lv3AuCoat_rI[Lv3AuCoat_num];
765 Lv3AuCoat_rI[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
766 Lv3AuCoat_rI[1] = Lv3AuCoat_rI[0];
768 double Lv3AuCoat_rO[Lv3AuCoat_num];
769 Lv3AuCoat_rO[0] =
m_config.getParameter(prep +
"R2") * unitFactor;
770 Lv3AuCoat_rO[1] = Lv3AuCoat_rO[0];
772 string strMat_Lv3AuCoat =
m_config.getParameterStr(prep +
"Material");
776 G4Polycone* geo_Lv3AuCoat =
new G4Polycone(
"geo_Lv3AuCoat_name", 0, 2 * M_PI, Lv3AuCoat_num, Lv3AuCoat_Z, Lv3AuCoat_rI,
778 G4LogicalVolume* logi_Lv3AuCoat =
new G4LogicalVolume(geo_Lv3AuCoat, mat_Lv3AuCoat,
"logi_Lv3AuCoat_name");
781 setColor(*logi_Lv3AuCoat,
"#CCCC00");
782 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv3AuCoat,
"phys_Lv3AuCoat_name", logi_Lv2Vacuum,
false, 0);
791 double Flange_R =
m_config.getParameter(prep +
"R") * unitFactor;
792 double Flange_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
793 double Flange_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
794 double Flange_D =
m_config.getParameter(prep +
"D") * unitFactor;
795 double Flange_T =
m_config.getParameter(prep +
"T") * unitFactor;
799 G4Tubs* geo_Flange0 =
new G4Tubs(
"geo_Flange0_name", 0, Flange_L2, Flange_T, 0, 2 * M_PI);
800 G4Tubs* geo_Flange1 =
new G4Tubs(
"geo_Flange1_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
801 G4Tubs* geo_Flange2 =
new G4Tubs(
"geo_Flange2_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
803 G4UnionSolid* geo_Flange_x =
new G4UnionSolid(
"geo_Flange_x_name", geo_Flange1, geo_Flange2, G4Translate3D(-Flange_L1 * 2, 0, 0));
804 G4IntersectionSolid* geo_Flange =
new G4IntersectionSolid(
"geo_Flange_name", geo_Flange0, geo_Flange_x, G4Translate3D(Flange_L1, 0,
814 int HMS_num = int(
m_config.getParameter(prep +
"N"));
815 vector<double> HMS_Z(HMS_num);
816 vector<double> HMS_rI(HMS_num);
817 vector<double> HMS_rO(HMS_num);
819 for (
int i = 0; i < HMS_num; ++i) {
820 ostringstream ossZID;
823 ostringstream ossrIID;
824 ossrIID <<
"rI" << i;
826 ostringstream ossrOID;
827 ossrOID <<
"rO" << i;
829 HMS_Z[i] =
m_config.getParameter(prep + ossZID.str()) * unitFactor;
830 HMS_rI[i] =
m_config.getParameter(prep + ossrIID.str()) * unitFactor;
831 HMS_rO[i] =
m_config.getParameter(prep + ossrOID.str()) * unitFactor;
834 G4Polycone* geo_HMS =
new G4Polycone(
"geo_HMS_name", 0, 2 * M_PI, HMS_num, &(HMS_Z[0]), &(HMS_rI[0]), &(HMS_rO[0]));
842 double Lv1TaFwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
843 double Lv1TaFwd_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
844 double Lv1TaFwd_aL1 =
m_config.getParameter(prep +
"aL1", 0.0) * unitFactor;
845 double Lv1TaFwd_aL2 =
m_config.getParameter(prep +
"aL2", 0.0) * unitFactor;
846 double Lv1TaFwd_aL3 =
m_config.getParameter(prep +
"aL3", 0.0) * unitFactor;
847 G4SubtractionSolid* geo_Lv1TaFwd = NULL;
848 G4VSolid* geo_Lv1TaFwd_d = NULL;
849 G4LogicalVolume* logi_Lv1TaFwd = NULL;
852 double Lv1TaFwd_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
853 double Lv1TaFwd_L3 =
m_config.getParameter(prep +
"L3") * unitFactor;
854 double Lv1TaFwd_T1 =
m_config.getParameter(prep +
"T1") * unitFactor;
856 string strMat_Lv1TaFwd =
m_config.getParameterStr(prep +
"Material");
860 G4Trd* geo_Lv1TaFwd_xx =
new G4Trd(
"geo_Lv1TaFwd_xx_name", Lv1TaFwd_L2, Lv1TaFwd_L3, Lv1TaFwd_T1, Lv1TaFwd_T1, Lv1TaFwd_L1 / 2.0);
861 G4UnionSolid* geo_Lv1TaFwd_x
862 =
new G4UnionSolid(
"geo_Lv1TaFwd_x_name", geo_Lv1TaFwd_xx, geo_Flange,
863 G4Translate3D(0, 0, Flange_D - (Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
865 geo_Lv1TaFwd =
new G4SubtractionSolid(
"geo_Lv1TaFwd_name", geo_Lv1TaFwd_x, geo_HMS,
866 G4Translate3D(0, 0, -(Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
868 logi_Lv1TaFwd =
new G4LogicalVolume(geo_Lv1TaFwd, mat_Lv1TaFwd,
"logi_Lv1TaFwd_name");
871 setColor(*logi_Lv1TaFwd,
"#333333");
872 new G4PVPlacement(0, G4ThreeVector(0, 0, Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0), logi_Lv1TaFwd,
"phys_Lv1TaFwd_name", &topVolume,
false,
878 double Lv1TaFwd_T1 =
m_config.getParameter(prep +
"T1") * unitFactor;
879 double Lv1TaFwd_aR1 =
m_config.getParameter(prep +
"aR1") * unitFactor;
880 double Lv1TaFwd_aR2 =
m_config.getParameter(prep +
"aR2") * unitFactor;
881 double Lv1TaFwd_bL1 = Lv1TaFwd_L1 - Lv1TaFwd_aL1 - Lv1TaFwd_aL2 - Lv1TaFwd_aL3;
882 double Lv1TaFwd_bL2 =
m_config.getParameter(prep +
"bL2") * unitFactor;
883 double Lv1TaFwd_bL3 =
m_config.getParameter(prep +
"bL3") * unitFactor;
885 string strMat_Lv1TaFwd =
m_config.getParameterStr(prep +
"Material");
890 double Lv1TaFwd_aR[4] = {Lv1TaFwd_aR1, Lv1TaFwd_aR1, Lv1TaFwd_aR2, Lv1TaFwd_aR2};
891 double Lv1TaFwd_ar[4] = {0, 0, 0, 0};
892 double Lv1TaFwd_aL[4] = { -Lv1TaFwd_L1 / 2.0 + 0,
893 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1,
894 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2,
895 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3
898 G4VSolid* geo_Lv1TaFwd_a =
new G4Polycone(
"geo_Lv1TaFwd_a_name", 0, 2 * M_PI, 4, Lv1TaFwd_aL, Lv1TaFwd_ar, Lv1TaFwd_aR);
899 G4VSolid* geo_Lv1TaFwd_b =
new G4Trd(
"geo_Lv1TaFwd_b_name", Lv1TaFwd_bL2, Lv1TaFwd_bL3, Lv1TaFwd_T1, Lv1TaFwd_T1,
901 G4VSolid* geo_Lv1TaFwd_c =
new G4Box(
"geo_Lv1TaFwd_c_name", 200, Lv1TaFwd_T1, (Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) / 2.0);
902 geo_Lv1TaFwd_d =
new G4IntersectionSolid(
"geo_Lv1TaFwd_d_name", geo_Lv1TaFwd_a, geo_Lv1TaFwd_c, G4Translate3D(0, 0,
903 -Lv1TaFwd_L1 / 2.0 + (Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) / 2.0));
904 G4VSolid* geo_Lv1TaFwd_xx =
new G4UnionSolid(
"geo_Lv1TaFwd_xx_name", geo_Lv1TaFwd_d, geo_Lv1TaFwd_b, G4Translate3D(0, 0,
905 Lv1TaFwd_L1 / 2.0 - Lv1TaFwd_bL1 / 2.0));
906 G4UnionSolid* geo_Lv1TaFwd_x
907 =
new G4UnionSolid(
"geo_Lv1TaFwd_x_name", geo_Lv1TaFwd_xx, geo_Flange,
908 G4Translate3D(0, 0, Flange_D - (Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
910 geo_Lv1TaFwd =
new G4SubtractionSolid(
"geo_Lv1TaFwd_name", geo_Lv1TaFwd_x, geo_HMS,
911 G4Translate3D(0, 0, -(Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
913 logi_Lv1TaFwd =
new G4LogicalVolume(geo_Lv1TaFwd, mat_Lv1TaFwd,
"logi_Lv1TaFwd_name");
916 setColor(*logi_Lv1TaFwd,
"#333333");
917 new G4PVPlacement(0, G4ThreeVector(0, 0, Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0), logi_Lv1TaFwd,
"phys_Lv1TaFwd_name", &topVolume,
false,
928 double Lv2VacFwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
929 double Lv2VacFwd_D2 =
m_config.getParameter(prep +
"D2") * unitFactor;
930 double Lv2VacFwd_D3 =
m_config.getParameter(prep +
"D3") * unitFactor;
931 double Lv2VacFwd_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
932 double Lv2VacFwd_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
933 double Lv2VacFwd_L3 =
m_config.getParameter(prep +
"L3") * unitFactor;
934 double Lv2VacFwd_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
935 double Lv2VacFwd_R2 =
m_config.getParameter(prep +
"R2") * unitFactor;
936 double Lv2VacFwd_R3 =
m_config.getParameter(prep +
"R3") * unitFactor;
937 double Lv2VacFwd_R4 =
m_config.getParameter(prep +
"R4") * unitFactor;
938 double Lv2VacFwd_A1 =
m_config.getParameter(prep +
"A1");
939 double Lv2VacFwd_A2 =
m_config.getParameter(prep +
"A2");
941 string strMat_Lv2VacFwd =
m_config.getParameterStr(prep +
"Material");
945 double Lv2VacFwd1_Z1 =
sqrt(Lv2VacFwd_D1 * Lv2VacFwd_D1 + Lv2VacFwd_D2 * Lv2VacFwd_D2 - 2.*Lv2VacFwd_D1 * Lv2VacFwd_D2 * cos(
947 double Lv2VacFwd1_rI1 = 0.0;
948 double Lv2VacFwd1_rO1 = Lv2VacFwd_R1;
950 double Lv2VacFwd1_Z2 = (Lv2VacFwd1_Z1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
951 double Lv2VacFwd1_rI2 = 0.0;
952 double Lv2VacFwd1_rO2 = 2 * Lv2VacFwd_R1;
954 double Lv2VacFwd2_Z1 = Lv2VacFwd_L1;
955 double Lv2VacFwd2_rI1 = 0.0;
956 double Lv2VacFwd2_rO1 = Lv2VacFwd_R2;
958 double Lv2VacFwd2_Z2 = (Lv2VacFwd_L1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
959 double Lv2VacFwd2_rI2 = 0.0;
960 double Lv2VacFwd2_rO2 = 2 * Lv2VacFwd_R2;
962 const int Lv2VacFwd3_num1 = 2;
963 const int Lv2VacFwd3_num2 = 3;
965 double Lv2VacFwd_Z1[Lv2VacFwd3_num1];
966 Lv2VacFwd_Z1[0] = 0.0;
968 Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2 + 0.03 * SafetyLength;
969 double Lv2VacFwd_rI1[Lv2VacFwd3_num1];
970 for (
int tmpn = 0; tmpn < Lv2VacFwd3_num1; ++tmpn) {
971 Lv2VacFwd_rI1[tmpn] = 0.0;
973 double Lv2VacFwd_rO1[Lv2VacFwd3_num1];
974 Lv2VacFwd_rO1[0] = Lv2VacFwd_R3;
975 Lv2VacFwd_rO1[1] = Lv2VacFwd_R3;
978 double Lv2VacFwd_Z2[Lv2VacFwd3_num2];
979 Lv2VacFwd_Z2[0] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
980 Lv2VacFwd_Z2[1] = Lv2VacFwd_D3;
981 Lv2VacFwd_Z2[2] = Lv2VacFwd_D3 + Lv2VacFwd_L3;
982 double Lv2VacFwd_rI2[Lv2VacFwd3_num2];
983 for (
int tmpn = 0; tmpn < Lv2VacFwd3_num2; ++tmpn) {
984 Lv2VacFwd_rI2[tmpn] = 0.0;
986 double Lv2VacFwd_rO2[Lv2VacFwd3_num2];
987 Lv2VacFwd_rO2[0] = Lv2VacFwd_R3;
988 Lv2VacFwd_rO2[1] = Lv2VacFwd_R4;
989 Lv2VacFwd_rO2[2] = Lv2VacFwd_R4;
995 G4Tubs* geo_Lv2VacFwdPart1_1 =
new G4Tubs(
"geo_Lv2VacFwdPart1_1_name", Lv2VacFwd1_rI1, Lv2VacFwd1_rO1, Lv2VacFwd1_Z1, 0, 2 * M_PI);
996 G4Tubs* geo_Lv2VacFwdPart1_2 =
new G4Tubs(
"geo_Lv2VacFwdPart1_2_name", Lv2VacFwd1_rI2, Lv2VacFwd1_rO2, Lv2VacFwd1_Z2, 0, 2 * M_PI);
998 G4Transform3D transform_Lv2VacFwdPart1_2 = G4Translate3D(0., 0., 0.);
999 transform_Lv2VacFwdPart1_2 = transform_Lv2VacFwdPart1_2 * G4RotateY3D(-Lv2VacFwd_A2 / 2.);
1000 G4IntersectionSolid* geo_Lv2VacFwdPart1 =
new G4IntersectionSolid(
"geo_Lv2VacFwdPart1_name", geo_Lv2VacFwdPart1_1,
1001 geo_Lv2VacFwdPart1_2, transform_Lv2VacFwdPart1_2);
1003 G4Tubs* geo_Lv2VacFwdPart2_1 =
new G4Tubs(
"geo_Lv2VacFwdPart2_1_name", Lv2VacFwd2_rI1, Lv2VacFwd2_rO1, Lv2VacFwd2_Z1, 0, 2 * M_PI);
1004 G4Tubs* geo_Lv2VacFwdPart2_2 =
new G4Tubs(
"geo_Lv2VacFwdPart2_2_name", Lv2VacFwd2_rI2, Lv2VacFwd2_rO2, Lv2VacFwd2_Z2, 0, 2 * M_PI);
1006 G4Transform3D transform_Lv2VacFwdPart2_2 = G4Translate3D(0., 0., 0.);
1007 transform_Lv2VacFwdPart2_2 = transform_Lv2VacFwdPart2_2 * G4RotateY3D(Lv2VacFwd_A2 / 2.);
1008 G4IntersectionSolid* geo_Lv2VacFwdPart2 =
new G4IntersectionSolid(
"geo_Lv2VacFwdPart2_name", geo_Lv2VacFwdPart2_1,
1009 geo_Lv2VacFwdPart2_2, transform_Lv2VacFwdPart2_2);
1012 G4Polycone* geo_Lv2VacFwdPart3_1 =
new G4Polycone(
"geo_Lv2VacFwdPart3_1", 0, 2 * M_PI, Lv2VacFwd3_num1, Lv2VacFwd_Z1, Lv2VacFwd_rI1,
1014 G4Polycone* geo_Lv2VacFwdPart3_2 =
new G4Polycone(
"geo_Lv2VacFwdPart3_2", 0, 2 * M_PI, Lv2VacFwd3_num2, Lv2VacFwd_Z2, Lv2VacFwd_rI2,
1016 G4Transform3D transform_Lv2VacFwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
1017 transform_Lv2VacFwdPart3_1 = transform_Lv2VacFwdPart3_1 * G4RotateY3D(Lv2VacFwd_A1 - A11);
1018 G4UnionSolid* geo_Lv2VacFwdPart3 =
new G4UnionSolid(
"geo_Lv2VacFwdPart3_name", geo_Lv2VacFwdPart3_2, geo_Lv2VacFwdPart3_1,
1019 transform_Lv2VacFwdPart3_1);
1022 G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(
1023 2.*Lv2VacFwd_A1)) / 2.,
1025 (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 2.);
1029 transform_Lv2VacFwdPart1 = transform_Lv2VacFwdPart1 * G4RotateY3D(Lv2VacFwd_A1 + Lv2VacFwd_A2);
1031 G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(
1032 2.*Lv2VacFwd_A1) / 2.0,
1034 Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.0);
1039 transform_Lv2VacFwdPart2 = transform_Lv2VacFwdPart2 * G4RotateY3D(2.*Lv2VacFwd_A1);
1041 G4UnionSolid* geo_Lv2VacFwdxx =
new G4UnionSolid(
"geo_Lv2VacFwdxx_name", geo_Lv2VacFwdPart3, geo_Lv2VacFwdPart1,
1042 transform_Lv2VacFwdPart1);
1043 G4UnionSolid* geo_Lv2VacFwdx =
new G4UnionSolid(
"geo_Lv2VacFwdx_name", geo_Lv2VacFwdxx, geo_Lv2VacFwdPart2,
1044 transform_Lv2VacFwdPart2);
1046 G4Transform3D transform_Lv2VacFwd = G4Translate3D(0., 0., -Lv1TaFwd_D1 - Lv1TaFwd_L1 / 2.);
1047 transform_Lv2VacFwd = transform_Lv2VacFwd * G4RotateY3D(-Lv2VacFwd_A1);
1049 G4IntersectionSolid* geo_Lv2VacFwd =
new G4IntersectionSolid(
"geo_Lv2VacFwd_name", geo_Lv1TaFwd, geo_Lv2VacFwdx,
1050 transform_Lv2VacFwd);
1051 G4LogicalVolume* logi_Lv2VacFwd =
new G4LogicalVolume(geo_Lv2VacFwd, mat_Lv2VacFwd,
"logi_Lv2VacFwd_name");
1052 if (flag_limitStep) logi_Lv2VacFwd->SetUserLimits(
new G4UserLimits(stepMax));
1055 setColor(*logi_Lv2VacFwd,
"#CCCCCC");
1058 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacFwd,
"phys_Lv2VacFwd_name", logi_Lv1TaFwd,
false, 0);
1069 double Lv1TaBwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
1070 double Lv1TaBwd_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
1071 double Lv1TaBwd_aL1 =
m_config.getParameter(prep +
"aL1", 0.0) * unitFactor;
1072 double Lv1TaBwd_aL2 =
m_config.getParameter(prep +
"aL2", 0.0) * unitFactor;
1073 double Lv1TaBwd_aL3 =
m_config.getParameter(prep +
"aL3", 0.0) * unitFactor;
1074 G4UnionSolid* geo_Lv1TaBwd = NULL;
1075 G4VSolid* geo_Lv1TaBwd_d = NULL;
1076 G4LogicalVolume* logi_Lv1TaBwd = NULL;
1079 double Lv1TaBwd_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
1080 double Lv1TaBwd_L3 =
m_config.getParameter(prep +
"L3") * unitFactor;
1081 double Lv1TaBwd_T1 =
m_config.getParameter(prep +
"T1") * unitFactor;
1083 string strMat_Lv1TaBwd =
m_config.getParameterStr(prep +
"Material");
1087 G4Trd* geo_Lv1TaBwd_x =
new G4Trd(
"geo_Lv1TaBwd_x_name", Lv1TaBwd_L2, Lv1TaBwd_L3, Lv1TaBwd_T1, Lv1TaBwd_T1, Lv1TaBwd_L1 / 2.0);
1088 geo_Lv1TaBwd =
new G4UnionSolid(
"geo_Lv1TaBwd_name", geo_Lv1TaBwd_x, geo_Flange,
1089 G4Translate3D(0, 0, -Flange_D - (-Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0)));
1090 logi_Lv1TaBwd =
new G4LogicalVolume(geo_Lv1TaBwd, mat_Lv1TaBwd,
"logi_Lv1TaBwd_name");
1093 setColor(*logi_Lv1TaBwd,
"#333333");
1094 new G4PVPlacement(0, G4ThreeVector(0, 0, -Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0), logi_Lv1TaBwd,
"phys_Lv1TaBwd_name", &topVolume,
false,
1100 double Lv1TaBwd_T1 =
m_config.getParameter(prep +
"T1") * unitFactor;
1101 double Lv1TaBwd_aR1 =
m_config.getParameter(prep +
"aR1") * unitFactor;
1102 double Lv1TaBwd_aR2 =
m_config.getParameter(prep +
"aR2") * unitFactor;
1103 double Lv1TaBwd_bL1 = Lv1TaBwd_L1 - Lv1TaBwd_aL1 - Lv1TaBwd_aL2 - Lv1TaBwd_aL3;
1104 double Lv1TaBwd_bL2 =
m_config.getParameter(prep +
"bL2") * unitFactor;
1105 double Lv1TaBwd_bL3 =
m_config.getParameter(prep +
"bL3") * unitFactor;
1107 string strMat_Lv1TaBwd =
m_config.getParameterStr(prep +
"Material");
1112 double Lv1TaBwd_aR[4] = {Lv1TaBwd_aR2, Lv1TaBwd_aR2, Lv1TaBwd_aR1, Lv1TaBwd_aR1};
1113 double Lv1TaBwd_ar[4] = {0, 0, 0, 0};
1114 double Lv1TaBwd_aL[4] = { +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3),
1115 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2),
1116 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1),
1117 +Lv1TaBwd_L1 / 2.0 - 0
1119 G4VSolid* geo_Lv1TaBwd_a =
new G4Polycone(
"geo_Lv1TaBwd_a_name", 0, 2 * M_PI, 4, Lv1TaBwd_aL, Lv1TaBwd_ar, Lv1TaBwd_aR);
1120 G4VSolid* geo_Lv1TaBwd_b =
new G4Trd(
"geo_Lv1TaBwd_b_name", Lv1TaBwd_bL2, Lv1TaBwd_bL3, Lv1TaBwd_T1, Lv1TaBwd_T1,
1121 Lv1TaBwd_bL1 / 2.0);
1122 G4VSolid* geo_Lv1TaBwd_c =
new G4Box(
"geo_Lv1TaBwd_c_name", 200, Lv1TaBwd_T1, (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3) / 2.0);
1123 geo_Lv1TaBwd_d =
new G4IntersectionSolid(
"geo_Lv1TaBwd_d_name", geo_Lv1TaBwd_a, geo_Lv1TaBwd_c, G4Translate3D(0, 0,
1124 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3) / 2.0));
1125 G4VSolid* geo_Lv1TaBwd_x =
new G4UnionSolid(
"geo_Lv1TaBwd_x_name", geo_Lv1TaBwd_d, geo_Lv1TaBwd_b, G4Translate3D(0, 0,
1126 -Lv1TaBwd_L1 / 2.0 + Lv1TaBwd_bL1 / 2.0));
1127 geo_Lv1TaBwd =
new G4UnionSolid(
"geo_Lv1TaBwd_name", geo_Lv1TaBwd_x, geo_Flange,
1128 G4Translate3D(0, 0, -Flange_D - (-Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0)));
1129 logi_Lv1TaBwd =
new G4LogicalVolume(geo_Lv1TaBwd, mat_Lv1TaBwd,
"logi_Lv1TaBwd_name");
1132 setColor(*logi_Lv1TaBwd,
"#333333");
1133 new G4PVPlacement(0, G4ThreeVector(0, 0, -Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0), logi_Lv1TaBwd,
"phys_Lv1TaBwd_name", &topVolume,
false,
1142 prep =
"Lv2VacBwd.";
1144 double Lv2VacBwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
1145 double Lv2VacBwd_D2 =
m_config.getParameter(prep +
"D2") * unitFactor;
1146 double Lv2VacBwd_D3 =
m_config.getParameter(prep +
"D3") * unitFactor;
1147 double Lv2VacBwd_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
1148 double Lv2VacBwd_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
1149 double Lv2VacBwd_L3 =
m_config.getParameter(prep +
"L3") * unitFactor;
1150 double Lv2VacBwd_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
1151 double Lv2VacBwd_R2 =
m_config.getParameter(prep +
"R2") * unitFactor;
1152 double Lv2VacBwd_R3 =
m_config.getParameter(prep +
"R3") * unitFactor;
1153 double Lv2VacBwd_R4 =
m_config.getParameter(prep +
"R4") * unitFactor;
1154 double Lv2VacBwd_A1 =
m_config.getParameter(prep +
"A1");
1155 double Lv2VacBwd_A2 =
m_config.getParameter(prep +
"A2");
1157 string strMat_Lv2VacBwd =
m_config.getParameterStr(prep +
"Material");
1161 double Lv2VacBwd1_Z1 =
sqrt(Lv2VacBwd_D1 * Lv2VacBwd_D1 + Lv2VacBwd_D2 * Lv2VacBwd_D2 - 2.*Lv2VacBwd_D1 * Lv2VacBwd_D2 * cos(
1163 double Lv2VacBwd1_rI1 = 0.0;
1164 double Lv2VacBwd1_rO1 = Lv2VacBwd_R1;
1166 double Lv2VacBwd1_Z2 = (Lv2VacBwd1_Z1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
1167 double Lv2VacBwd1_rI2 = 0.0;
1168 double Lv2VacBwd1_rO2 = 2 * Lv2VacBwd_R1;
1170 double Lv2VacBwd2_Z1 = Lv2VacBwd_L1;
1171 double Lv2VacBwd2_rI1 = 0.0;
1172 double Lv2VacBwd2_rO1 = Lv2VacBwd_R2;
1174 double Lv2VacBwd2_Z2 = (Lv2VacBwd_L1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
1175 double Lv2VacBwd2_rI2 = 0.0;
1176 double Lv2VacBwd2_rO2 = 2 * Lv2VacBwd_R2;
1178 const int Lv2VacBwd3_num1 = 2;
1179 const int Lv2VacBwd3_num2 = 3;
1181 double Lv2VacBwd_Z1[Lv2VacBwd3_num1];
1182 Lv2VacBwd_Z1[0] = 0.0;
1183 Lv2VacBwd_Z1[1] = -Lv2VacBwd_D3 + Lv2VacBwd_L2 - 0.03 * SafetyLength;
1184 double Lv2VacBwd_rI1[Lv2VacBwd3_num1];
1185 for (
int tmpn = 0; tmpn < Lv2VacBwd3_num1; ++tmpn) {
1186 Lv2VacBwd_rI1[tmpn] = 0.0;
1188 double Lv2VacBwd_rO1[Lv2VacBwd3_num1];
1189 Lv2VacBwd_rO1[0] = Lv2VacBwd_R3;
1190 Lv2VacBwd_rO1[1] = Lv2VacBwd_R3;
1193 double Lv2VacBwd_Z2[Lv2VacBwd3_num2];
1194 Lv2VacBwd_Z2[0] = -Lv2VacBwd_D3 + Lv2VacBwd_L2;
1195 Lv2VacBwd_Z2[1] = -Lv2VacBwd_D3;
1196 Lv2VacBwd_Z2[2] = -Lv2VacBwd_D3 - Lv2VacBwd_L3;
1197 double Lv2VacBwd_rI2[Lv2VacBwd3_num2];
1198 for (
int tmpn = 0; tmpn < Lv2VacBwd3_num2; ++tmpn) {
1199 Lv2VacBwd_rI2[tmpn] = 0.0;
1201 double Lv2VacBwd_rO2[Lv2VacBwd3_num2];
1202 Lv2VacBwd_rO2[0] = Lv2VacBwd_R3;
1203 Lv2VacBwd_rO2[1] = Lv2VacBwd_R4;
1204 Lv2VacBwd_rO2[2] = Lv2VacBwd_R4;
1210 G4Tubs* geo_Lv2VacBwdPart1_1 =
new G4Tubs(
"geo_Lv2VacBwdPart1_1_name", Lv2VacBwd1_rI1, Lv2VacBwd1_rO1, Lv2VacBwd1_Z1, 0, 2 * M_PI);
1211 G4Tubs* geo_Lv2VacBwdPart1_2 =
new G4Tubs(
"geo_Lv2VacBwdPart1_2_name", Lv2VacBwd1_rI2, Lv2VacBwd1_rO2, Lv2VacBwd1_Z2, 0, 2 * M_PI);
1212 G4Transform3D transform_Lv2VacBwdPart1_2 = G4Translate3D(0., 0., 0.);
1213 transform_Lv2VacBwdPart1_2 = transform_Lv2VacBwdPart1_2 * G4RotateY3D(Lv2VacBwd_A2 / 2.);
1214 G4IntersectionSolid* geo_Lv2VacBwdPart1 =
new G4IntersectionSolid(
"geo_Lv2VacBwdPart1_name", geo_Lv2VacBwdPart1_1,
1215 geo_Lv2VacBwdPart1_2, transform_Lv2VacBwdPart1_2);
1217 G4Tubs* geo_Lv2VacBwdPart2_1 =
new G4Tubs(
"geo_Lv2VacBwdPart2_1_name", Lv2VacBwd2_rI1, Lv2VacBwd2_rO1, Lv2VacBwd2_Z1, 0, 2 * M_PI);
1218 G4Tubs* geo_Lv2VacBwdPart2_2 =
new G4Tubs(
"geo_Lv2VacBwdPart2_2_name", Lv2VacBwd2_rI2, Lv2VacBwd2_rO2, Lv2VacBwd2_Z2, 0, 2 * M_PI);
1219 G4Transform3D transform_Lv2VacBwdPart2_2 = G4Translate3D(0., 0., 0.);
1220 transform_Lv2VacBwdPart2_2 = transform_Lv2VacBwdPart2_2 * G4RotateY3D(-Lv2VacBwd_A2 / 2.);
1221 G4IntersectionSolid* geo_Lv2VacBwdPart2 =
new G4IntersectionSolid(
"geo_Lv2VacBwdPart2_name", geo_Lv2VacBwdPart2_1,
1222 geo_Lv2VacBwdPart2_2, transform_Lv2VacBwdPart2_2);
1225 G4Polycone* geo_Lv2VacBwdPart3_1 =
new G4Polycone(
"geo_Lv2VacBwdPart3_1", 0, 2 * M_PI, Lv2VacBwd3_num1, Lv2VacBwd_Z1, Lv2VacBwd_rI1,
1227 G4Polycone* geo_Lv2VacBwdPart3_2 =
new G4Polycone(
"geo_Lv2VacBwdPart3_2", 0, 2 * M_PI, Lv2VacBwd3_num2, Lv2VacBwd_Z2, Lv2VacBwd_rI2,
1229 G4Transform3D transform_Lv2VacBwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
1230 transform_Lv2VacBwdPart3_1 = transform_Lv2VacBwdPart3_1 * G4RotateY3D(-Lv2VacBwd_A1 + A11);
1231 G4UnionSolid* geo_Lv2VacBwdPart3 =
new G4UnionSolid(
"geo_Lv2VacBwdPart3_name", geo_Lv2VacBwdPart3_2, geo_Lv2VacBwdPart3_1,
1232 transform_Lv2VacBwdPart3_1);
1235 G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(
1236 2.*Lv2VacBwd_A1)) / 2., 0.,
1237 -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.);
1241 transform_Lv2VacBwdPart1 = transform_Lv2VacBwdPart1 * G4RotateY3D(-Lv2VacBwd_A1 - Lv2VacBwd_A2);
1244 G4Transform3D transform_Lv2VacBwdPart2 = G4Translate3D((Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * sin(2.*Lv2VacBwd_A1), 0.,
1245 -(Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * cos(2.*Lv2VacBwd_A1));
1246 transform_Lv2VacBwdPart2 = transform_Lv2VacBwdPart2 * G4RotateY3D(-2.*Lv2VacBwd_A1);
1248 G4UnionSolid* geo_Lv2VacBwdxx =
new G4UnionSolid(
"geo_Lv2VacBwdxx_name", geo_Lv2VacBwdPart3, geo_Lv2VacBwdPart1,
1249 transform_Lv2VacBwdPart1);
1250 G4UnionSolid* geo_Lv2VacBwdx =
new G4UnionSolid(
"geo_Lv2VacBwdx_name", geo_Lv2VacBwdxx, geo_Lv2VacBwdPart2,
1251 transform_Lv2VacBwdPart2);
1253 G4Transform3D transform_Lv2VacBwd = G4Translate3D(0., 0., +Lv1TaBwd_D1 + Lv1TaBwd_L1 / 2.);
1254 transform_Lv2VacBwd = transform_Lv2VacBwd * G4RotateY3D(+Lv2VacBwd_A1);
1256 G4IntersectionSolid* geo_Lv2VacBwd =
new G4IntersectionSolid(
"geo_Lv2VacBwd_name", geo_Lv1TaBwd, geo_Lv2VacBwdx,
1257 transform_Lv2VacBwd);
1258 G4LogicalVolume* logi_Lv2VacBwd =
new G4LogicalVolume(geo_Lv2VacBwd, mat_Lv2VacBwd,
"logi_Lv2VacBwd_name");
1259 if (flag_limitStep) logi_Lv2VacBwd->SetUserLimits(
new G4UserLimits(stepMax));
1262 setColor(*logi_Lv2VacBwd,
"#CCCCCC");
1265 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacBwd,
"phys_Lv2VacBwd_name", logi_Lv1TaBwd,
false, 0);
1272 prep =
"Lv2VacLERUp.";
1274 vector<double> Lv2VacLERUp_rO(Lv1TaLERUp_num);
1275 for (
int i = 0; i < Lv1TaLERUp_num; ++i) {
1276 Lv2VacLERUp_rO[i] =
m_config.getParameter(prep +
"R1") * unitFactor;
1279 string strMat_Lv2VacLERUp =
m_config.getParameterStr(prep +
"Material");
1280 G4Material* mat_Lv2VacLERUp =
Materials::get(strMat_Lv2VacLERUp);
1283 G4Polycone* geo_Lv2VacLERUppcon =
new G4Polycone(
"geo_Lv2VacLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, &(Lv1TaLERUp_Z[0]),
1284 &(Lv1TaLERUp_rI[0]), &(Lv2VacLERUp_rO[0]));
1285 G4IntersectionSolid* geo_Lv2VacLERUp =
new G4IntersectionSolid(
"geo_Lv2VacLERUp_name", geo_Lv2VacLERUppcon, geo_AreaTubeFwdpcon,
1286 transform_AreaTubeFwdForLER);
1287 G4LogicalVolume* logi_Lv2VacLERUp =
new G4LogicalVolume(geo_Lv2VacLERUp, mat_Lv2VacLERUp,
"logi_Lv2VacLERUp_name");
1288 if (flag_limitStep) logi_Lv2VacLERUp->SetUserLimits(
new G4UserLimits(stepMax));
1292 setColor(*logi_Lv2VacLERUp,
"#CCCCCC");
1293 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERUp,
"phys_Lv2VacLERUp_name", logi_Lv1TaLERUp,
false, 0);
1300 prep =
"Lv2VacHERDwn.";
1302 vector<double> Lv2VacHERDwn_rO(Lv1TaHERDwn_num);
1303 for (
int i = 0; i < Lv1TaHERDwn_num; ++i) {
1304 Lv2VacHERDwn_rO[i] =
m_config.getParameter(prep +
"R1") * unitFactor;
1307 string strMat_Lv2VacHERDwn =
m_config.getParameterStr(prep +
"Material");
1308 G4Material* mat_Lv2VacHERDwn =
Materials::get(strMat_Lv2VacHERDwn);
1311 G4Polycone* geo_Lv2VacHERDwnpcon =
new G4Polycone(
"geo_Lv2VacHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, &(Lv1TaHERDwn_Z[0]),
1312 &(Lv1TaHERDwn_rI[0]), &(Lv2VacHERDwn_rO[0]));
1313 G4IntersectionSolid* geo_Lv2VacHERDwn =
new G4IntersectionSolid(
"", geo_Lv2VacHERDwnpcon, geo_AreaTubeFwdpcon,
1314 transform_AreaTubeFwdForHER);
1315 G4LogicalVolume* logi_Lv2VacHERDwn =
new G4LogicalVolume(geo_Lv2VacHERDwn, mat_Lv2VacHERDwn,
"logi_Lv2VacHERDwn_name");
1316 if (flag_limitStep) logi_Lv2VacHERDwn->SetUserLimits(
new G4UserLimits(stepMax));
1319 setColor(*logi_Lv2VacHERDwn,
"#CCCCCC");
1320 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERDwn,
"phys_Lv2VacHERDwn_name", logi_Lv1TaHERDwn,
false, 0);
1327 prep =
"Lv2VacHERUp.";
1329 vector<double> Lv2VacHERUp_rO(Lv1TaHERUp_num);
1330 for (
int i = 0; i < Lv1TaHERUp_num; ++i) {
1331 Lv2VacHERUp_rO[i] =
m_config.getParameter(prep +
"R1") * unitFactor;
1334 string strMat_Lv2VacHERUp =
m_config.getParameterStr(prep +
"Material");
1335 G4Material* mat_Lv2VacHERUp =
Materials::get(strMat_Lv2VacHERUp);
1338 G4Polycone* geo_Lv2VacHERUppcon =
new G4Polycone(
"geo_Lv2VacHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, &(Lv1TaHERUp_Z[0]),
1339 &(Lv1TaHERUp_rI[0]), &(Lv2VacHERUp_rO[0]));
1340 G4IntersectionSolid* geo_Lv2VacHERUp =
new G4IntersectionSolid(
"", geo_Lv2VacHERUppcon, geo_AreaTubeBwdpcon,
1341 transform_AreaTubeFwdForHER);
1342 G4LogicalVolume* logi_Lv2VacHERUp =
new G4LogicalVolume(geo_Lv2VacHERUp, mat_Lv2VacHERUp,
"logi_Lv2VacHERUp_name");
1343 if (flag_limitStep) logi_Lv2VacHERUp->SetUserLimits(
new G4UserLimits(stepMax));
1346 setColor(*logi_Lv2VacHERUp,
"#CCCCCC");
1347 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERUp,
"phys_Lv2VacHERUp_name", logi_Lv1TaHERUp,
false, 0);
1354 prep =
"Lv2VacLERDwn.";
1356 vector<double> Lv2VacLERDwn_rO(Lv1TaLERDwn_num);
1357 for (
int i = 0; i < Lv1TaLERDwn_num; ++i) {
1358 Lv2VacLERDwn_rO[i] =
m_config.getParameter(prep +
"R1") * unitFactor;
1361 string strMat_Lv2VacLERDwn =
m_config.getParameterStr(prep +
"Material");
1362 G4Material* mat_Lv2VacLERDwn =
Materials::get(strMat_Lv2VacLERDwn);
1365 G4Polycone* geo_Lv2VacLERDwnpcon =
new G4Polycone(
"geo_Lv2VacLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, &(Lv1TaLERDwn_Z[0]),
1366 &(Lv1TaLERDwn_rI[0]), &(Lv2VacLERDwn_rO[0]));
1367 G4IntersectionSolid* geo_Lv2VacLERDwn =
new G4IntersectionSolid(
"", geo_Lv2VacLERDwnpcon, geo_AreaTubeBwdpcon,
1368 transform_AreaTubeBwdForLER);
1369 G4LogicalVolume* logi_Lv2VacLERDwn =
new G4LogicalVolume(geo_Lv2VacLERDwn, mat_Lv2VacLERDwn,
"logi_Lv2VacLERDwn_name");
1370 if (flag_limitStep) logi_Lv2VacLERDwn->SetUserLimits(
new G4UserLimits(stepMax));
1373 setColor(*logi_Lv2VacLERDwn,
"#CCCCCC");
1374 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERDwn,
"phys_Lv2VacLERDwn_name", logi_Lv1TaLERDwn,
false, 0);
1380 G4IntersectionSolid* geo_CuFlangeFwd_x2 =
new G4IntersectionSolid(
"geo_CuFlangeFwd_x2_name", geo_AreaTubeFwdpcon, geo_Flange,
1381 G4Translate3D(0, 0, Flange_D + Flange_T * 2));
1382 G4SubtractionSolid* geo_CuFlangeFwd_x =
new G4SubtractionSolid(
"geo_CuFlangeFwd_x_name", geo_CuFlangeFwd_x2, geo_Lv1TaLERUp,
1383 transform_Lv1TaLERUp);
1384 G4SubtractionSolid* geo_CuFlangeFwd =
new G4SubtractionSolid(
"geo_CuFlangeFwd_name", geo_CuFlangeFwd_x, geo_Lv1TaHERDwn,
1385 transform_Lv1TaHERDwn);
1387 G4LogicalVolume* logi_CuFlangeFwd =
new G4LogicalVolume(geo_CuFlangeFwd, mat_Lv1TaLERUp,
"logi_CuFlangeFwd_name");
1390 setColor(*logi_CuFlangeFwd,
"#CCCCCC");
1391 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeFwd,
"phys_CuFlangeFwd_name", &topVolume,
false, 0);
1396 G4IntersectionSolid* geo_CuFlangeBwd_x2 =
new G4IntersectionSolid(
"geo_CuFlangeBwd_x2_name", geo_AreaTubeBwdpcon, geo_Flange,
1397 G4Translate3D(0, 0, -Flange_D - Flange_T * 2));
1398 G4SubtractionSolid* geo_CuFlangeBwd_x =
new G4SubtractionSolid(
"geo_CuFlangeBwd_x_name", geo_CuFlangeBwd_x2, geo_Lv1TaHERUp,
1399 transform_Lv1TaHERUp);
1400 G4SubtractionSolid* geo_CuFlangeBwd =
new G4SubtractionSolid(
"geo_CuFlangeBwd_name", geo_CuFlangeBwd_x, geo_Lv1TaLERDwn,
1401 transform_Lv1TaLERDwn);
1403 G4LogicalVolume* logi_CuFlangeBwd =
new G4LogicalVolume(geo_CuFlangeBwd, mat_Lv1TaLERUp,
"logi_CuFlangeBwd_name");
1406 setColor(*logi_CuFlangeBwd,
"#CCCCCC");
1407 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeBwd,
"phys_CuFlangeBwd_name", &topVolume,
false, 0);
1416 const int Lv2OutTi_num = 2;
1418 double Lv2OutTi_Z[Lv2OutTi_num];
1419 Lv2OutTi_Z[0] =
m_config.getParameter(prep +
"L1") * unitFactor;
1420 Lv2OutTi_Z[1] =
m_config.getParameter(prep +
"L2") * unitFactor;
1422 double Lv2OutTi_rI[Lv2OutTi_num];
1423 Lv2OutTi_rI[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
1424 Lv2OutTi_rI[1] = Lv2OutTi_rI[0];
1426 double Lv2OutTi_rO[Lv2OutTi_num];
1427 Lv2OutTi_rO[0] =
m_config.getParameter(prep +
"R2") * unitFactor;
1428 Lv2OutTi_rO[1] = Lv2OutTi_rO[0];
1430 string strMat_Lv2OutTi =
m_config.getParameterStr(prep +
"Material");
1434 G4Polycone* geo_Lv2OutTi =
new G4Polycone(
"geo_Lv2OutTi_name", 0, 2 * M_PI, Lv2OutTi_num, Lv2OutTi_Z, Lv2OutTi_rI, Lv2OutTi_rO);
1435 G4LogicalVolume* logi_Lv2OutTi =
new G4LogicalVolume(geo_Lv2OutTi, mat_Lv2OutTi,
"logi_Lv2OutTi_name");
1438 setColor(*logi_Lv2OutTi,
"#333300");
1439 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutTi,
"phys_Lv2OutTi_name", logi_Lv1SUS,
false, 0);
1444 prep =
"Lv1SUSLERUp.";
1445 int Lv1SUSLERUp_num = int(
m_config.getParameter(prep +
"N"));
1446 vector<double> Lv1SUSLERUp_Z(Lv1SUSLERUp_num);
1447 vector<double> Lv1SUSLERUp_rI(Lv1SUSLERUp_num);
1448 vector<double> Lv1SUSLERUp_rO(Lv1SUSLERUp_num);
1450 for (
int i = 0; i < Lv1SUSLERUp_num; ++i) {
1451 ostringstream ossZ_Lv1SUSLERUp;
1452 ossZ_Lv1SUSLERUp <<
"Z" << i;
1453 ostringstream ossRI_Lv1SUSLERUp;
1454 ossRI_Lv1SUSLERUp <<
"RI" << i;
1455 ostringstream ossRO_Lv1SUSLERUp;
1456 ossRO_Lv1SUSLERUp <<
"RO" << i;
1458 Lv1SUSLERUp_Z[i] =
m_config.getParameter(prep + ossZ_Lv1SUSLERUp.str()) * unitFactor;
1459 Lv1SUSLERUp_rI[i] =
m_config.getParameter(prep + ossRI_Lv1SUSLERUp.str()) * unitFactor;
1460 Lv1SUSLERUp_rO[i] =
m_config.getParameter(prep + ossRO_Lv1SUSLERUp.str()) * unitFactor;
1463 string strMat_Lv1SUSLERUp =
m_config.getParameterStr(prep +
"Material");
1464 G4Material* mat_Lv1SUSLERUp =
Materials::get(strMat_Lv1SUSLERUp);
1466 G4Polycone* geo_Lv1SUSLERUppcon =
new G4Polycone(
"geo_Lv1SUSLERUppcon_name", 0, 2 * M_PI, Lv1SUSLERUp_num, &(Lv1SUSLERUp_Z[0]),
1467 &(Lv1SUSLERUp_rI[0]), &(Lv1SUSLERUp_rO[0]));
1468 G4IntersectionSolid* geo_Lv1SUSLERUp =
new G4IntersectionSolid(
"", geo_Lv1SUSLERUppcon, geo_AreaTubeFwdpcon,
1469 transform_AreaTubeFwdForLER);
1470 G4LogicalVolume* logi_Lv1SUSLERUp =
new G4LogicalVolume(geo_Lv1SUSLERUp, mat_Lv1SUSLERUp,
"logi_Lv1SUSLERUp_name");
1473 setColor(*logi_Lv1SUSLERUp,
"#666666");
1474 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1SUSLERUp,
"phys_Lv1SUSLERUp_name", &topVolume,
false, 0);
1479 prep =
"Lv1SUSHERDwn.";
1480 int Lv1SUSHERDwn_num = int(
m_config.getParameter(prep +
"N"));
1481 vector<double> Lv1SUSHERDwn_Z(Lv1SUSHERDwn_num);
1482 vector<double> Lv1SUSHERDwn_rI(Lv1SUSHERDwn_num);
1483 vector<double> Lv1SUSHERDwn_rO(Lv1SUSHERDwn_num);
1485 for (
int i = 0; i < Lv1SUSHERDwn_num; ++i) {
1486 ostringstream ossZ_Lv1SUSHERDwn;
1487 ossZ_Lv1SUSHERDwn <<
"Z" << i;
1488 ostringstream ossRI_Lv1SUSHERDwn;
1489 ossRI_Lv1SUSHERDwn <<
"RI" << i;
1490 ostringstream ossRO_Lv1SUSHERDwn;
1491 ossRO_Lv1SUSHERDwn <<
"RO" << i;
1493 Lv1SUSHERDwn_Z[i] =
m_config.getParameter(prep + ossZ_Lv1SUSHERDwn.str()) * unitFactor;
1494 Lv1SUSHERDwn_rI[i] =
m_config.getParameter(prep + ossRI_Lv1SUSHERDwn.str()) * unitFactor;
1495 Lv1SUSHERDwn_rO[i] =
m_config.getParameter(prep + ossRO_Lv1SUSHERDwn.str()) * unitFactor;
1498 string strMat_Lv1SUSHERDwn =
m_config.getParameterStr(prep +
"Material");
1499 G4Material* mat_Lv1SUSHERDwn =
Materials::get(strMat_Lv1SUSHERDwn);
1502 G4Polycone* geo_Lv1SUSHERDwnpcon =
new G4Polycone(
"geo_Lv1SUSHERDwnpcon_name", 0, 2 * M_PI, Lv1SUSHERDwn_num, &(Lv1SUSHERDwn_Z[0]),
1503 &(Lv1SUSHERDwn_rI[0]), &(Lv1SUSHERDwn_rO[0]));
1504 G4IntersectionSolid* geo_Lv1SUSHERDwn =
new G4IntersectionSolid(
"", geo_Lv1SUSHERDwnpcon, geo_AreaTubeFwdpcon,
1505 transform_AreaTubeFwdForHER);
1506 G4LogicalVolume* logi_Lv1SUSHERDwn =
new G4LogicalVolume(geo_Lv1SUSHERDwn, mat_Lv1SUSHERDwn,
"logi_Lv1SUSHERDwn_name");
1509 setColor(*logi_Lv1SUSHERDwn,
"#666666");
1510 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1SUSHERDwn,
"phys_Lv1SUSHERDwn_name", &topVolume,
false, 0);
1515 prep =
"Lv1SUSHERUp.";
1516 int Lv1SUSHERUp_num = int(
m_config.getParameter(prep +
"N"));
1517 vector<double> Lv1SUSHERUp_Z(Lv1SUSHERUp_num);
1518 vector<double> Lv1SUSHERUp_rI(Lv1SUSHERUp_num);
1519 vector<double> Lv1SUSHERUp_rO(Lv1SUSHERUp_num);
1521 for (
int i = 0; i < Lv1SUSHERUp_num; ++i) {
1522 ostringstream ossZ_Lv1SUSHERUp;
1523 ossZ_Lv1SUSHERUp <<
"Z" << i;
1524 ostringstream ossRI_Lv1SUSHERUp;
1525 ossRI_Lv1SUSHERUp <<
"RI" << i;
1526 ostringstream ossRO_Lv1SUSHERUp;
1527 ossRO_Lv1SUSHERUp <<
"RO" << i;
1529 Lv1SUSHERUp_Z[i] =
m_config.getParameter(prep + ossZ_Lv1SUSHERUp.str()) * unitFactor;
1530 Lv1SUSHERUp_rI[i] =
m_config.getParameter(prep + ossRI_Lv1SUSHERUp.str()) * unitFactor;
1531 Lv1SUSHERUp_rO[i] =
m_config.getParameter(prep + ossRO_Lv1SUSHERUp.str()) * unitFactor;
1534 string strMat_Lv1SUSHERUp =
m_config.getParameterStr(prep +
"Material");
1535 G4Material* mat_Lv1SUSHERUp =
Materials::get(strMat_Lv1SUSHERUp);
1537 G4Polycone* geo_Lv1SUSHERUppcon =
new G4Polycone(
"geo_Lv1SUSHERUppcon_name", 0, 2 * M_PI, Lv1SUSHERUp_num, &(Lv1SUSHERUp_Z[0]),
1538 &(Lv1SUSHERUp_rI[0]), &(Lv1SUSHERUp_rO[0]));
1539 G4IntersectionSolid* geo_Lv1SUSHERUp =
new G4IntersectionSolid(
"", geo_Lv1SUSHERUppcon, geo_AreaTubeBwdpcon,
1540 transform_AreaTubeFwdForHER);
1541 G4LogicalVolume* logi_Lv1SUSHERUp =
new G4LogicalVolume(geo_Lv1SUSHERUp, mat_Lv1SUSHERUp,
"logi_Lv1SUSHERUp_name");
1544 setColor(*logi_Lv1SUSHERUp,
"#666666");
1545 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1SUSHERUp,
"phys_Lv1SUSHERUp_name", &topVolume,
false, 0);
1550 prep =
"Lv1SUSLERDwn.";
1551 int Lv1SUSLERDwn_num = int(
m_config.getParameter(prep +
"N"));
1552 vector<double> Lv1SUSLERDwn_Z(Lv1SUSLERDwn_num);
1553 vector<double> Lv1SUSLERDwn_rI(Lv1SUSLERDwn_num);
1554 vector<double> Lv1SUSLERDwn_rO(Lv1SUSLERDwn_num);
1556 for (
int i = 0; i < Lv1SUSLERDwn_num; ++i) {
1557 ostringstream ossZ_Lv1SUSLERDwn;
1558 ossZ_Lv1SUSLERDwn <<
"Z" << i;
1559 ostringstream ossRI_Lv1SUSLERDwn;
1560 ossRI_Lv1SUSLERDwn <<
"RI" << i;
1561 ostringstream ossRO_Lv1SUSLERDwn;
1562 ossRO_Lv1SUSLERDwn <<
"RO" << i;
1564 Lv1SUSLERDwn_Z[i] =
m_config.getParameter(prep + ossZ_Lv1SUSLERDwn.str()) * unitFactor;
1565 Lv1SUSLERDwn_rI[i] =
m_config.getParameter(prep + ossRI_Lv1SUSLERDwn.str()) * unitFactor;
1566 Lv1SUSLERDwn_rO[i] =
m_config.getParameter(prep + ossRO_Lv1SUSLERDwn.str()) * unitFactor;
1569 string strMat_Lv1SUSLERDwn =
m_config.getParameterStr(prep +
"Material");
1570 G4Material* mat_Lv1SUSLERDwn =
Materials::get(strMat_Lv1SUSLERDwn);
1572 G4Polycone* geo_Lv1SUSLERDwnpcon =
new G4Polycone(
"geo_Lv1SUSLERDwnpcon_name", 0, 2 * M_PI, Lv1SUSLERDwn_num, &(Lv1SUSLERDwn_Z[0]),
1573 &(Lv1SUSLERDwn_rI[0]), &(Lv1SUSLERDwn_rO[0]));
1574 G4IntersectionSolid* geo_Lv1SUSLERDwn =
new G4IntersectionSolid(
"", geo_Lv1SUSLERDwnpcon, geo_AreaTubeBwdpcon,
1575 transform_AreaTubeFwdForHER);
1576 G4LogicalVolume* logi_Lv1SUSLERDwn =
new G4LogicalVolume(geo_Lv1SUSLERDwn, mat_Lv1SUSLERDwn,
"logi_Lv1SUSLERDwn_name");
1579 setColor(*logi_Lv1SUSLERDwn,
"#666666");
1580 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1SUSLERDwn,
"phys_Lv1SUSLERDwn_name", &topVolume,
false, 0);
1590 prep =
"PXDMountFwd.";
1592 double PXDMountFwd_Z1 =
m_config.getParameter(prep +
"Z1") * unitFactor;
1593 double PXDMountFwd_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
1594 double PXDMountFwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
1595 double PXDMountFwd_R2 =
m_config.getParameter(prep +
"R2") * unitFactor;
1596 double PXDMountFwd_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
1597 double PXDMountFwd_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
1599 string strMat_PXDMountFwd =
m_config.getParameterStr(prep +
"Material");
1600 G4Material* mat_PXDMountFwd =
Materials::get(strMat_PXDMountFwd);
1603 G4VSolid* geo_PXDMountFwd_a =
new G4Tubs(
"geo_PXDMountFwd_a", 0, PXDMountFwd_R1, PXDMountFwd_D1 / 2, 0, 2 * M_PI);
1604 G4VSolid* geo_PXDMountFwd_b =
new G4SubtractionSolid(
"geo_PXDMountFwd_b", geo_PXDMountFwd_a, geo_Lv1TaFwd_d, G4Translate3D(0., 0.,
1605 -(-Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) + PXDMountFwd_D1 / 2));
1606 G4VSolid* geo_PXDMountFwd_c =
new G4Tubs(
"geo_PXDMountFwd_c", 0, PXDMountFwd_R2, 100, 0, 2 * M_PI);
1607 G4VSolid* geo_PXDMountFwd_d =
new G4Box(
"geo_PXDMountFwd_d", PXDMountFwd_R1 - PXDMountFwd_L1, 100, PXDMountFwd_R2);
1609 G4VSolid* geo_PXDMountFwd_p1 =
new G4SubtractionSolid(
"geo_PXDMountFwd_p1", geo_PXDMountFwd_b, geo_PXDMountFwd_c,
1610 G4Translate3D(+PXDMountFwd_L1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1611 G4VSolid* geo_PXDMountFwd_p2 =
new G4SubtractionSolid(
"geo_PXDMountFwd_p2", geo_PXDMountFwd_p1, geo_PXDMountFwd_c,
1612 G4Translate3D(+PXDMountFwd_L1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1613 G4VSolid* geo_PXDMountFwd_p3 =
new G4SubtractionSolid(
"geo_PXDMountFwd_p3", geo_PXDMountFwd_p2, geo_PXDMountFwd_c,
1614 G4Translate3D(-PXDMountFwd_L1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1615 G4VSolid* geo_PXDMountFwd_p4 =
new G4SubtractionSolid(
"geo_PXDMountFwd_p4", geo_PXDMountFwd_p3, geo_PXDMountFwd_c,
1616 G4Translate3D(-PXDMountFwd_L1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1618 G4VSolid* geo_PXDMountFwd_q1 =
new G4SubtractionSolid(
"geo_PXDMountFwd_q1", geo_PXDMountFwd_p4, geo_PXDMountFwd_d,
1619 G4Translate3D(+PXDMountFwd_R1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1620 G4VSolid* geo_PXDMountFwd_q2 =
new G4SubtractionSolid(
"geo_PXDMountFwd_q2", geo_PXDMountFwd_q1, geo_PXDMountFwd_d,
1621 G4Translate3D(+PXDMountFwd_R1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1622 G4VSolid* geo_PXDMountFwd_q3 =
new G4SubtractionSolid(
"geo_PXDMountFwd_q3", geo_PXDMountFwd_q2, geo_PXDMountFwd_d,
1623 G4Translate3D(-PXDMountFwd_R1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1624 G4VSolid* geo_PXDMountFwd_q4 =
new G4SubtractionSolid(
"geo_PXDMountFwd_q4", geo_PXDMountFwd_q3, geo_PXDMountFwd_d,
1625 G4Translate3D(-PXDMountFwd_R1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1627 G4VSolid* geo_PXDMountFwd = geo_PXDMountFwd_q4;
1629 G4LogicalVolume* logi_PXDMountFwd =
new G4LogicalVolume(geo_PXDMountFwd, mat_PXDMountFwd,
"logi_PXDMountFwd_name");
1630 setColor(*logi_PXDMountFwd,
"#333333");
1632 new G4PVPlacement(0, G4ThreeVector(0, 0, +PXDMountFwd_D1 / 2 + PXDMountFwd_Z1), logi_PXDMountFwd,
"phys_PXDMountFwd_name",
1633 &topVolume,
false, 0);
1637 double PXDMountFixture_screw_radius = 0.2 * unitFactor;
1638 double PXDMountFixture_screw_length = 0.5 * unitFactor;
1639 G4VSolid* geo_PXDMountFwd_s1 =
new G4Tubs(
"geo_PXDMountFwd_s1", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1641 G4VSolid* geo_PXDMountFwd_s2 =
new G4Tubs(
"geo_PXDMountFwd_s2", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1643 G4VSolid* geo_PXDMountFwd_s3 =
new G4Tubs(
"geo_PXDMountFwd_s3", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1645 G4VSolid* geo_PXDMountFwd_s4 =
new G4Tubs(
"geo_PXDMountFwd_s4", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1650 G4Rotate3D rotate_PXDMountFwd = G4RotateX3D(-M_PI / 2.0 /
Unit::rad);
1651 G4Transform3D transform_PXDMountFwd_s1 = G4Translate3D(+PXDMountFwd_L1, 0,
1652 PXDMountFwd_Z1 + PXDMountFwd_D1 - PXDMountFwd_L2) * rotate_PXDMountFwd;
1653 G4Transform3D transform_PXDMountFwd_s2 = G4Translate3D(+PXDMountFwd_L1, 0, PXDMountFwd_Z1 + PXDMountFwd_L2) * rotate_PXDMountFwd;
1654 G4Transform3D transform_PXDMountFwd_s3 = G4Translate3D(-PXDMountFwd_L1, 0,
1655 PXDMountFwd_Z1 + PXDMountFwd_D1 - PXDMountFwd_L2) * rotate_PXDMountFwd;
1656 G4Transform3D transform_PXDMountFwd_s4 = G4Translate3D(-PXDMountFwd_L1, 0, PXDMountFwd_Z1 + PXDMountFwd_L2) * rotate_PXDMountFwd;
1658 G4LogicalVolume* logi_PXDMountFwd_s1 =
new G4LogicalVolume(geo_PXDMountFwd_s1, mat_PXDMountFwd_s,
"logi_PXDMountFwd_name_s1");
1659 G4LogicalVolume* logi_PXDMountFwd_s2 =
new G4LogicalVolume(geo_PXDMountFwd_s2, mat_PXDMountFwd_s,
"logi_PXDMountFwd_name_s2");
1660 G4LogicalVolume* logi_PXDMountFwd_s3 =
new G4LogicalVolume(geo_PXDMountFwd_s3, mat_PXDMountFwd_s,
"logi_PXDMountFwd_name_s3");
1661 G4LogicalVolume* logi_PXDMountFwd_s4 =
new G4LogicalVolume(geo_PXDMountFwd_s4, mat_PXDMountFwd_s,
"logi_PXDMountFwd_name_s4");
1663 new G4PVPlacement(transform_PXDMountFwd_s1, logi_PXDMountFwd_s1,
"phys_PXDMountFwd_name_s1", &topVolume,
false, 0);
1664 new G4PVPlacement(transform_PXDMountFwd_s2, logi_PXDMountFwd_s2,
"phys_PXDMountFwd_name_s2", &topVolume,
false, 0);
1665 new G4PVPlacement(transform_PXDMountFwd_s3, logi_PXDMountFwd_s3,
"phys_PXDMountFwd_name_s3", &topVolume,
false, 0);
1666 new G4PVPlacement(transform_PXDMountFwd_s4, logi_PXDMountFwd_s4,
"phys_PXDMountFwd_name_s4", &topVolume,
false, 0);
1671 prep =
"PXDMountFixtureFwd.";
1673 double PXDMountFixtureFwd_Z1 =
m_config.getParameter(prep +
"Z1") * unitFactor;
1674 double PXDMountFixtureFwd_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
1675 double PXDMountFixtureFwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
1676 double PXDMountFixtureFwd_T1 =
m_config.getParameter(prep +
"T1") * unitFactor;
1677 double PXDMountFixtureFwd_T2 =
m_config.getParameter(prep +
"T2") * unitFactor;
1678 double PXDMountFixtureFwd_FL =
m_config.getParameter(prep +
"I1") * unitFactor;
1679 double PXDMountFixtureFwd_inner_cut_phi = PXDMountFixtureFwd_FL / (PXDMountFwd_R1 + PXDMountFixtureFwd_T1);
1680 double PXDMountFixtureFwd_outter_uni_phi = (1 / 6.0) * M_PI - PXDMountFixtureFwd_FL / PXDMountFixtureFwd_R1;
1682 string strMat_PXDMountFixtureFwd =
m_config.getParameterStr(prep +
"Material");
1683 G4Material* mat_PXDMountFixtureFwd =
Materials::get(strMat_PXDMountFixtureFwd);
1686 G4VSolid* geo_PXDMountFixtureFwd_a =
new G4Tubs(
"geo_PXDMountFixtureFwd_a", 0, PXDMountFixtureFwd_R1 - PXDMountFixtureFwd_T2,
1687 PXDMountFixtureFwd_D1 / 2, 0,
1689 G4VSolid* geo_PXDMountFixtureFwd_b =
new G4Box(
"geo_PXDMountFixtureFwd_b", PXDMountFixtureFwd_R1 * 0.5, 0.1 * unitFactor,
1692 G4VSolid* geo_PXDMountFixtureFwd_b1 =
new G4Box(
"geo_PXDMountFixtureFwd_b1", PXDMountFwd_R1 + PXDMountFixtureFwd_T1,
1693 PXDMountFixtureFwd_FL * 0.5, 100);
1694 G4VSolid* geo_PXDMountFixtureFwd_b2 =
new G4Tubs(
"geo_PXDMountFixtureFwd_b2", PXDMountFwd_R1 + PXDMountFixtureFwd_T1,
1695 PXDMountFixtureFwd_R1, PXDMountFixtureFwd_D1 / 2,
1696 0, PXDMountFixtureFwd_outter_uni_phi);
1697 G4VSolid* geo_PXDMountFixtureFwd_b3 =
new G4Box(
"geo_PXDMountFixtureFwd_b3", 0.2 * unitFactor, 0.35 * unitFactor,
1700 G4VSolid* geo_PXDMountFixtureFwd_a1 =
new G4Tubs(
"geo_PXDMountFixtureFwd_a1", 0, PXDMountFwd_R1, 100, 0, 2 * M_PI);
1702 G4VSolid* geo_PXDMountFixtureFwd_c1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureFwd_c1", geo_PXDMountFixtureFwd_a,
1703 geo_PXDMountFixtureFwd_a1);
1706 G4VSolid* geo_PXDMountFixtureFwd_d1 = geo_PXDMountFixtureFwd_c1;
1707 for (
int i = 0; i < 4; ++i) {
1709 geo_PXDMountFixtureFwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1710 geo_PXDMountFixtureFwd_b1, G4RotateZ3D(i * 0.25 * M_PI));
1712 geo_PXDMountFixtureFwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1713 geo_PXDMountFixtureFwd_b, G4Translate3D(PXDMountFixtureFwd_R1, - PXDMountFixtureFwd_FL * 0.5, 0));
1714 geo_PXDMountFixtureFwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1715 geo_PXDMountFixtureFwd_b, G4Translate3D(-PXDMountFixtureFwd_R1, PXDMountFixtureFwd_FL * 0.5, 0));
1718 double PXDMountFixtureFwd_R1_temp = PXDMountFixtureFwd_R1 - PXDMountFixtureFwd_T2;
1719 for (
int i = 2; i < 7; i += 4) {
1721 geo_PXDMountFixtureFwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1722 geo_PXDMountFixtureFwd_b3,
1723 G4Translate3D(PXDMountFixtureFwd_R1_temp * cos(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1724 PXDMountFixtureFwd_R1_temp * sin(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1725 0)*G4RotateZ3D(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi));
1727 geo_PXDMountFixtureFwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1728 geo_PXDMountFixtureFwd_b3,
1729 G4Translate3D(PXDMountFixtureFwd_R1_temp * cos(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1730 PXDMountFixtureFwd_R1_temp * sin(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1731 0)*G4RotateZ3D(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi));
1734 G4VSolid* geo_PXDMountFixtureFwd_d2 = geo_PXDMountFixtureFwd_d1;
1735 for (
int i = 0; i < 12; ++i) {
1736 if (i == 2 || i == 3 || i == 8 || i == 9)
continue;
1737 geo_PXDMountFixtureFwd_d2 =
new G4UnionSolid(
"geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d2,
1738 geo_PXDMountFixtureFwd_b2, G4RotateZ3D(i * (1 / 6.0) * M_PI + ((1 / 12.0)*M_PI - 0.5 * PXDMountFixtureFwd_outter_uni_phi)));
1742 G4VSolid* geo_PXDMountFixtureFwd = geo_PXDMountFixtureFwd_d2;
1743 G4LogicalVolume* logi_PXDMountFixtureFwd =
new G4LogicalVolume(geo_PXDMountFixtureFwd, mat_PXDMountFixtureFwd,
1744 "logi_PXDMountFixtureFwd_name");
1745 setColor(*logi_PXDMountFixtureFwd,
"#333333");
1747 new G4PVPlacement(0, G4ThreeVector(0, 0, +PXDMountFixtureFwd_D1 / 2 + PXDMountFixtureFwd_Z1), logi_PXDMountFixtureFwd,
1748 "phys_PXDMountFixtureFwd_name",
1749 &topVolume,
false, 0);
1755 prep =
"PXDMountBwd.";
1757 double PXDMountBwd_Z1 =
m_config.getParameter(prep +
"Z1") * unitFactor;
1758 double PXDMountBwd_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
1759 double PXDMountBwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
1760 double PXDMountBwd_R2 =
m_config.getParameter(prep +
"R2") * unitFactor;
1761 double PXDMountBwd_L1 =
m_config.getParameter(prep +
"L1") * unitFactor;
1762 double PXDMountBwd_L2 =
m_config.getParameter(prep +
"L2") * unitFactor;
1764 string strMat_PXDMountBwd =
m_config.getParameterStr(prep +
"Material");
1765 G4Material* mat_PXDMountBwd =
Materials::get(strMat_PXDMountBwd);
1768 G4VSolid* geo_PXDMountBwd_a =
new G4Tubs(
"geo_PXDMountBwd_a", 0, PXDMountBwd_R1, PXDMountBwd_D1 / 2, 0, 2 * M_PI);
1769 G4VSolid* geo_PXDMountBwd_b =
new G4SubtractionSolid(
"geo_PXDMountBwd_b", geo_PXDMountBwd_a, geo_Lv1TaBwd_d, G4Translate3D(0., 0.,
1770 -(+Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3)) - PXDMountBwd_D1 / 2));
1771 G4VSolid* geo_PXDMountBwd_c =
new G4Tubs(
"geo_PXDMountBwd_c", 0, PXDMountBwd_R2, 100, 0, 2 * M_PI);
1772 G4VSolid* geo_PXDMountBwd_d =
new G4Box(
"geo_PXDMountBwd_d", PXDMountBwd_R1 - PXDMountBwd_L1, 100, PXDMountBwd_R2);
1774 G4VSolid* geo_PXDMountBwd_p1 =
new G4SubtractionSolid(
"geo_PXDMountBwd_p1", geo_PXDMountBwd_b, geo_PXDMountBwd_c,
1775 G4Translate3D(+PXDMountBwd_L1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1776 G4VSolid* geo_PXDMountBwd_p2 =
new G4SubtractionSolid(
"geo_PXDMountBwd_p2", geo_PXDMountBwd_p1, geo_PXDMountBwd_c,
1777 G4Translate3D(+PXDMountBwd_L1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1778 G4VSolid* geo_PXDMountBwd_p3 =
new G4SubtractionSolid(
"geo_PXDMountBwd_p3", geo_PXDMountBwd_p2, geo_PXDMountBwd_c,
1779 G4Translate3D(-PXDMountBwd_L1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1780 G4VSolid* geo_PXDMountBwd_p4 =
new G4SubtractionSolid(
"geo_PXDMountBwd_p4", geo_PXDMountBwd_p3, geo_PXDMountBwd_c,
1781 G4Translate3D(-PXDMountBwd_L1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1783 G4VSolid* geo_PXDMountBwd_q1 =
new G4SubtractionSolid(
"geo_PXDMountBwd_q1", geo_PXDMountBwd_p4, geo_PXDMountBwd_d,
1784 G4Translate3D(+PXDMountBwd_R1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1785 G4VSolid* geo_PXDMountBwd_q2 =
new G4SubtractionSolid(
"geo_PXDMountBwd_q2", geo_PXDMountBwd_q1, geo_PXDMountBwd_d,
1786 G4Translate3D(+PXDMountBwd_R1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1787 G4VSolid* geo_PXDMountBwd_q3 =
new G4SubtractionSolid(
"geo_PXDMountBwd_q3", geo_PXDMountBwd_q2, geo_PXDMountBwd_d,
1788 G4Translate3D(-PXDMountBwd_R1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1789 G4VSolid* geo_PXDMountBwd_q4 =
new G4SubtractionSolid(
"geo_PXDMountBwd_q4", geo_PXDMountBwd_q3, geo_PXDMountBwd_d,
1790 G4Translate3D(-PXDMountBwd_R1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1792 G4VSolid* geo_PXDMountBwd = geo_PXDMountBwd_q4;
1794 G4LogicalVolume* logi_PXDMountBwd =
new G4LogicalVolume(geo_PXDMountBwd, mat_PXDMountBwd,
"logi_PXDMountBwd_name");
1795 setColor(*logi_PXDMountBwd,
"#333333");
1797 new G4PVPlacement(0, G4ThreeVector(0, 0, -PXDMountBwd_D1 / 2 - PXDMountBwd_Z1), logi_PXDMountBwd,
"phys_PXDMountBwd_name",
1798 &topVolume,
false, 0);
1802 G4VSolid* geo_PXDMountBwd_s1 =
new G4Tubs(
"geo_PXDMountBwd_s1", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1804 G4VSolid* geo_PXDMountBwd_s2 =
new G4Tubs(
"geo_PXDMountBwd_s2", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1806 G4VSolid* geo_PXDMountBwd_s3 =
new G4Tubs(
"geo_PXDMountBwd_s3", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1808 G4VSolid* geo_PXDMountBwd_s4 =
new G4Tubs(
"geo_PXDMountBwd_s4", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1813 G4Rotate3D rotate_PXDMountBwd = G4RotateX3D(-M_PI / 2.0 /
Unit::rad);
1814 G4Transform3D transform_PXDMountBwd_s1 = G4Translate3D(+PXDMountBwd_L1, 0,
1815 -PXDMountBwd_Z1 - PXDMountBwd_D1 + PXDMountBwd_L2) * rotate_PXDMountBwd;
1816 G4Transform3D transform_PXDMountBwd_s2 = G4Translate3D(+PXDMountBwd_L1, 0, -PXDMountBwd_Z1 - PXDMountBwd_L2) * rotate_PXDMountBwd;
1817 G4Transform3D transform_PXDMountBwd_s3 = G4Translate3D(-PXDMountBwd_L1, 0,
1818 -PXDMountBwd_Z1 - PXDMountBwd_D1 + PXDMountBwd_L2) * rotate_PXDMountBwd;
1819 G4Transform3D transform_PXDMountBwd_s4 = G4Translate3D(-PXDMountBwd_L1, 0, -PXDMountBwd_Z1 - PXDMountBwd_L2) * rotate_PXDMountBwd;
1821 G4LogicalVolume* logi_PXDMountBwd_s1 =
new G4LogicalVolume(geo_PXDMountBwd_s1, mat_PXDMountBwd_s,
"logi_PXDMountBwd_name_s1");
1822 G4LogicalVolume* logi_PXDMountBwd_s2 =
new G4LogicalVolume(geo_PXDMountBwd_s2, mat_PXDMountBwd_s,
"logi_PXDMountBwd_name_s2");
1823 G4LogicalVolume* logi_PXDMountBwd_s3 =
new G4LogicalVolume(geo_PXDMountBwd_s3, mat_PXDMountBwd_s,
"logi_PXDMountBwd_name_s3");
1824 G4LogicalVolume* logi_PXDMountBwd_s4 =
new G4LogicalVolume(geo_PXDMountBwd_s4, mat_PXDMountBwd_s,
"logi_PXDMountBwd_name_s4");
1826 new G4PVPlacement(transform_PXDMountBwd_s1, logi_PXDMountBwd_s1,
"phys_PXDMountBwd_name_s1", &topVolume,
false, 0);
1827 new G4PVPlacement(transform_PXDMountBwd_s2, logi_PXDMountBwd_s2,
"phys_PXDMountBwd_name_s2", &topVolume,
false, 0);
1828 new G4PVPlacement(transform_PXDMountBwd_s3, logi_PXDMountBwd_s3,
"phys_PXDMountBwd_name_s3", &topVolume,
false, 0);
1829 new G4PVPlacement(transform_PXDMountBwd_s4, logi_PXDMountBwd_s4,
"phys_PXDMountBwd_name_s4", &topVolume,
false, 0);
1834 prep =
"PXDMountFixtureBwd.";
1836 double PXDMountFixtureBwd_Z1 =
m_config.getParameter(prep +
"Z1") * unitFactor;
1837 double PXDMountFixtureBwd_R1 =
m_config.getParameter(prep +
"R1") * unitFactor;
1838 double PXDMountFixtureBwd_D1 =
m_config.getParameter(prep +
"D1") * unitFactor;
1839 double PXDMountFixtureBwd_T1 =
m_config.getParameter(prep +
"T1") * unitFactor;
1840 double PXDMountFixtureBwd_T2 =
m_config.getParameter(prep +
"T2") * unitFactor;
1841 double PXDMountFixtureBwd_FL =
m_config.getParameter(prep +
"I1") * unitFactor;
1842 double PXDMountFixtureBwd_inner_cut_phi = PXDMountFixtureBwd_FL / (PXDMountBwd_R1 + PXDMountFixtureBwd_T1);
1843 double PXDMountFixtureBwd_outter_uni_phi = (1 / 6.0) * M_PI - PXDMountFixtureBwd_FL / PXDMountFixtureBwd_R1;
1845 string strMat_PXDMountFixtureBwd =
m_config.getParameterStr(prep +
"Material");
1846 G4Material* mat_PXDMountFixtureBwd =
Materials::get(strMat_PXDMountFixtureBwd);
1849 G4VSolid* geo_PXDMountFixtureBwd_a =
new G4Tubs(
"geo_PXDMountFixtureBwd_a", 0, PXDMountFixtureBwd_R1 - PXDMountFixtureBwd_T2,
1850 PXDMountFixtureBwd_D1 / 2, 0,
1852 G4VSolid* geo_PXDMountFixtureBwd_b =
new G4Box(
"geo_PXDMountFixtureBwd_b", PXDMountFixtureBwd_R1 * 0.5, 0.1 * unitFactor,
1855 G4VSolid* geo_PXDMountFixtureBwd_b1 =
new G4Box(
"geo_PXDMountFixtureBwd_b1", PXDMountBwd_R1 + PXDMountFixtureBwd_T1,
1856 PXDMountFixtureBwd_FL * 0.5, 100);
1857 G4VSolid* geo_PXDMountFixtureBwd_b2 =
new G4Tubs(
"geo_PXDMountFixtureBwd_b2", PXDMountBwd_R1 + PXDMountFixtureBwd_T1,
1858 PXDMountFixtureBwd_R1, PXDMountFixtureBwd_D1 / 2,
1859 0, PXDMountFixtureBwd_outter_uni_phi);
1860 G4VSolid* geo_PXDMountFixtureBwd_b3 =
new G4Box(
"geo_PXDMountFixtureBwd_b3", 0.2 * unitFactor, 0.35 * unitFactor,
1863 G4VSolid* geo_PXDMountFixtureBwd_a1 =
new G4Tubs(
"geo_PXDMountFixtureBwd_a1", 0, PXDMountBwd_R1, 100, 0, 2 * M_PI);
1865 G4VSolid* geo_PXDMountFixtureBwd_c1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureBwd_c1", geo_PXDMountFixtureBwd_a,
1866 geo_PXDMountFixtureBwd_a1);
1869 G4VSolid* geo_PXDMountFixtureBwd_d1 = geo_PXDMountFixtureBwd_c1;
1870 for (
int i = 0; i < 4; ++i) {
1872 geo_PXDMountFixtureBwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1873 geo_PXDMountFixtureBwd_b1, G4RotateZ3D(i * 0.25 * M_PI));
1875 geo_PXDMountFixtureBwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1876 geo_PXDMountFixtureBwd_b, G4Translate3D(PXDMountFixtureBwd_R1, - PXDMountFixtureBwd_FL * 0.5, 0));
1877 geo_PXDMountFixtureBwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1878 geo_PXDMountFixtureBwd_b, G4Translate3D(-PXDMountFixtureBwd_R1, PXDMountFixtureBwd_FL * 0.5, 0));
1881 double PXDMountFixtureBwd_R1_temp = PXDMountFixtureBwd_R1 - PXDMountFixtureBwd_T2;
1882 for (
int i = 2; i < 7; i += 4) {
1884 geo_PXDMountFixtureBwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1885 geo_PXDMountFixtureBwd_b3,
1886 G4Translate3D(PXDMountFixtureBwd_R1_temp * cos(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1887 PXDMountFixtureBwd_R1_temp * sin(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1888 0)*G4RotateZ3D(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi));
1890 geo_PXDMountFixtureBwd_d1 =
new G4SubtractionSolid(
"geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1891 geo_PXDMountFixtureBwd_b3,
1892 G4Translate3D(PXDMountFixtureBwd_R1_temp * cos(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1893 PXDMountFixtureBwd_R1_temp * sin(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1894 0)*G4RotateZ3D(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi));
1897 G4VSolid* geo_PXDMountFixtureBwd_d2 = geo_PXDMountFixtureBwd_d1;
1898 for (
int i = 0; i < 12; ++i) {
1899 if (i == 2 || i == 3 || i == 8 || i == 9)
continue;
1900 geo_PXDMountFixtureBwd_d2 =
new G4UnionSolid(
"geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d2,
1901 geo_PXDMountFixtureBwd_b2, G4RotateZ3D(i * (1 / 6.0) * M_PI + ((1 / 12.0)*M_PI - 0.5 * PXDMountFixtureBwd_outter_uni_phi)));
1905 G4VSolid* geo_PXDMountFixtureBwd = geo_PXDMountFixtureBwd_d2;
1906 G4LogicalVolume* logi_PXDMountFixtureBwd =
new G4LogicalVolume(geo_PXDMountFixtureBwd, mat_PXDMountFixtureBwd,
1907 "logi_PXDMountFixtureBwd_name");
1908 setColor(*logi_PXDMountFixtureBwd,
"#333333");
1910 new G4PVPlacement(0, G4ThreeVector(0, 0, -PXDMountFixtureBwd_D1 / 2 - PXDMountFixtureBwd_Z1), logi_PXDMountFixtureBwd,
1911 "phys_PXDMountFixtureBwd_name",
1912 &topVolume,
false, 0);
1919 logi_Lv1SUSLERUp->SetSensitiveDetector(
m_sensitive.back());
1922 logi_Lv1SUSHERDwn->SetSensitiveDetector(
m_sensitive.back());
1925 logi_Lv1SUSHERUp->SetSensitiveDetector(
m_sensitive.back());
1928 logi_Lv1SUSLERDwn->SetSensitiveDetector(
m_sensitive.back());
1933 if (!(phase2 || Run1)) {
1935 prep =
"Lv2AuCoat.";
1937 const int Lv2AuCoat_num = 2;
1941 double Lv2AuCoat1_Z[Lv2AuCoat_num];
1942 Lv2AuCoat1_Z[0] =
m_config.getParameter(prep +
"L1") * unitFactor;
1943 Lv2AuCoat1_Z[1] =
m_config.getParameter(prep +
"L2") * unitFactor;
1944 double Lv2AuCoat1_rI[Lv2AuCoat_num];
1945 Lv2AuCoat1_rI[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
1946 Lv2AuCoat1_rI[1] = Lv2AuCoat1_rI[0];
1947 double Lv2AuCoat1_rO[Lv2AuCoat_num];
1948 Lv2AuCoat1_rO[0] =
m_config.getParameter(prep +
"R2") * unitFactor;
1949 Lv2AuCoat1_rO[1] = Lv2AuCoat1_rO[0];
1953 double Lv2AuCoat2_Z[Lv2AuCoat_num];
1954 Lv2AuCoat2_Z[0] =
m_config.getParameter(prep +
"L3") * unitFactor;
1955 Lv2AuCoat2_Z[1] =
m_config.getParameter(prep +
"L4") * unitFactor;
1956 double Lv2AuCoat2_rI[Lv2AuCoat_num];
1957 Lv2AuCoat2_rI[0] =
m_config.getParameter(prep +
"R1") * unitFactor;
1958 Lv2AuCoat2_rI[1] = Lv2AuCoat2_rI[0];
1959 double Lv2AuCoat2_rO[Lv2AuCoat_num];
1960 Lv2AuCoat2_rO[0] =
m_config.getParameter(prep +
"R2") * unitFactor;
1961 Lv2AuCoat2_rO[1] = Lv2AuCoat2_rO[0];
1963 string strMat_Lv2AuCoat =
m_config.getParameterStr(prep +
"Material");
1967 G4Polycone* geo_Lv2AuCoat1 =
new G4Polycone(
"geo_Lv2AuCoat1_name", 0, 2 * M_PI, Lv2AuCoat_num, Lv2AuCoat1_Z, Lv2AuCoat1_rI,
1969 G4Polycone* geo_Lv2AuCoat2 =
new G4Polycone(
"geo_Lv2AuCoat2_name", 0, 2 * M_PI, Lv2AuCoat_num, Lv2AuCoat2_Z, Lv2AuCoat2_rI,
1973 G4LogicalVolume* logi_Lv2AuCoat1 =
new G4LogicalVolume(geo_Lv2AuCoat1, mat_Lv2AuCoat,
"logi_Lv2AuCoat1_name");
1974 G4LogicalVolume* logi_Lv2AuCoat2 =
new G4LogicalVolume(geo_Lv2AuCoat2, mat_Lv2AuCoat,
"logi_Lv2AuCoat2_name");
1977 setColor(*logi_Lv2AuCoat1,
"#CCCC00");
1978 setColor(*logi_Lv2AuCoat1,
"#CCCC00");
1979 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2AuCoat1,
"phys_Lv2AuCoat1_name", logi_Lv2Paraf,
false, 0);
1980 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2AuCoat2,
"phys_Lv2AuCoat2_name", logi_Lv2Paraf,
false, 0);
1989 logi_Lv3AuCoat->SetSensitiveDetector(
m_sensitive.back());
1992 logi_Lv1TaFwd->SetSensitiveDetector(
m_sensitive.back());
1995 logi_Lv1TaBwd->SetSensitiveDetector(
m_sensitive.back());
1998 logi_Lv1TaLERUp->SetSensitiveDetector(
m_sensitive.back());
2001 logi_Lv1TaHERDwn->SetSensitiveDetector(
m_sensitive.back());
2004 logi_Lv1TaHERUp->SetSensitiveDetector(
m_sensitive.back());
2007 logi_Lv1TaLERDwn->SetSensitiveDetector(
m_sensitive.back());
2010 logi_CuFlangeFwd->SetSensitiveDetector(
m_sensitive.back());
2013 logi_CuFlangeBwd->SetSensitiveDetector(
m_sensitive.back());