Create detector geometry.
106 double A11 = 0.03918;
115 std::string prep =
"Lv1SUS.";
117 const int Lv1SUS_num = 21;
119 double Lv1SUS_Z[Lv1SUS_num];
121 for (
int tmpn = 0; tmpn < 8; tmpn++) {
125 Lv1SUS_Z[2] = Lv1SUS_Z[1];
128 Lv1SUS_Z[5] = Lv1SUS_Z[4];
139 Lv1SUS_Z[16] = Lv1SUS_Z[15];
142 Lv1SUS_Z[19] = Lv1SUS_Z[18];
145 double Lv1SUS_rI[Lv1SUS_num];
146 for (
int tmpn = 0; tmpn < Lv1SUS_num; tmpn++)
147 { Lv1SUS_rI[tmpn] = 0.0; }
149 double Lv1SUS_rO[Lv1SUS_num];
151 Lv1SUS_rO[1] = Lv1SUS_rO[0];
153 Lv1SUS_rO[3] = Lv1SUS_rO[2];
156 Lv1SUS_rO[6] = Lv1SUS_rO[5];
158 Lv1SUS_rO[8] = Lv1SUS_rO[7];
160 Lv1SUS_rO[10] = Lv1SUS_rO[9];
161 Lv1SUS_rO[11] = Lv1SUS_rO[10];
163 Lv1SUS_rO[13] = Lv1SUS_rO[12];
165 Lv1SUS_rO[15] = Lv1SUS_rO[14];
168 Lv1SUS_rO[18] = Lv1SUS_rO[17];
170 Lv1SUS_rO[20] = Lv1SUS_rO[19];
176 G4Polycone* geo_Lv1SUS =
new G4Polycone(
"geo_Lv1SUS_name", 0, 2 * M_PI, Lv1SUS_num, Lv1SUS_Z, Lv1SUS_rI, Lv1SUS_rO);
177 G4LogicalVolume* logi_Lv1SUS =
new G4LogicalVolume(geo_Lv1SUS, mat_Lv1SUS,
"logi_Lv1SUS_name");
183 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv1SUS,
"phys_Lv1SUS_name", &topVolume,
false, 0);
194 const int Lv2OutTi_num = 2;
196 double Lv2OutTi_Z[Lv2OutTi_num];
200 double Lv2OutTi_rI[Lv2OutTi_num];
202 Lv2OutTi_rI[1] = Lv2OutTi_rI[0];
204 double Lv2OutTi_rO[Lv2OutTi_num];
206 Lv2OutTi_rO[1] = Lv2OutTi_rO[0];
212 G4Polycone* geo_Lv2OutTi =
new G4Polycone(
"geo_Lv2OutTi_name", 0, 2 * M_PI, Lv2OutTi_num, Lv2OutTi_Z, Lv2OutTi_rI, Lv2OutTi_rO);
213 G4LogicalVolume* logi_Lv2OutTi =
new G4LogicalVolume(geo_Lv2OutTi, mat_Lv2OutTi,
"logi_Lv2OutTi_name");
216 setColor(*logi_Lv2OutTi,
"#333300");
217 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutTi,
"phys_Lv2OutTi_name", logi_Lv1SUS,
false, 0);
229 const int Lv2OutBe_num = 2;
231 double Lv2OutBe_Z[Lv2OutBe_num];
235 double Lv2OutBe_rI[Lv2OutBe_num];
237 Lv2OutBe_rI[1] = Lv2OutBe_rI[0];
239 double Lv2OutBe_rO[Lv2OutBe_num];
241 Lv2OutBe_rO[1] = Lv2OutBe_rO[0];
247 G4Polycone* geo_Lv2OutBe =
new G4Polycone(
"geo_Lv2OutBe_name", 0, 2 * M_PI, Lv2OutBe_num, Lv2OutBe_Z, Lv2OutBe_rI, Lv2OutBe_rO);
248 G4LogicalVolume* logi_Lv2OutBe =
new G4LogicalVolume(geo_Lv2OutBe, mat_Lv2OutBe,
"logi_Lv2OutBe_name");
251 setColor(*logi_Lv2OutBe,
"#333300");
252 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutBe,
"phys_Lv2OutBe_name", logi_Lv1SUS,
false, 0);
263 const int Lv2InBe_num = 2;
265 double Lv2InBe_Z[Lv2InBe_num];
269 double Lv2InBe_rI[Lv2InBe_num];
271 Lv2InBe_rI[1] = Lv2InBe_rI[0];
273 double Lv2InBe_rO[Lv2InBe_num];
275 Lv2InBe_rO[1] = Lv2InBe_rO[0];
281 G4Polycone* geo_Lv2InBe =
new G4Polycone(
"geo_Lv2InBe_name", 0, 2 * M_PI, Lv2InBe_num, Lv2InBe_Z, Lv2InBe_rI, Lv2InBe_rO);
282 G4LogicalVolume* logi_Lv2InBe =
new G4LogicalVolume(geo_Lv2InBe, mat_Lv2InBe,
"logi_Lv2InBe_name");
286 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2InBe,
"phys_Lv2InBe_name", logi_Lv1SUS,
false, 0);
308 const int Lv2Vacuum1_num = 2;
310 double Lv2Vacuum1_Z[Lv2Vacuum1_num];
311 Lv2Vacuum1_Z[0] = -Lv2Vacuum_L1;
312 Lv2Vacuum1_Z[1] = Lv2Vacuum_L2;
313 double Lv2Vacuum1_rI[Lv2Vacuum1_num];
314 for (
int tmpn = 0; tmpn < Lv2Vacuum1_num; tmpn++)
315 { Lv2Vacuum1_rI[tmpn] = 0.0; }
316 double Lv2Vacuum1_rO[Lv2Vacuum1_num];
317 Lv2Vacuum1_rO[0] = Lv2Vacuum_R1;
318 Lv2Vacuum1_rO[1] = Lv2Vacuum_R1;
320 double Lv2Vacuum2_Z1 = 2. * Lv2Vacuum_L3;
321 double Lv2Vacuum2_rI1 = 0.0;
322 double Lv2Vacuum2_rO1 = Lv2Vacuum_R2;
324 double Lv2Vacuum2_Z2 = (Lv2Vacuum_L3 * cos(Lv2Vacuum_A2)) + SafetyLength;
325 double Lv2Vacuum2_rI2 = 0.0;
326 double Lv2Vacuum2_rO2 = 2 * Lv2Vacuum_R2;
328 const int Lv2Vacuum3_num = 2;
330 double Lv2Vacuum3_Z[Lv2Vacuum3_num];
331 Lv2Vacuum3_Z[0] = 0.0;
332 Lv2Vacuum3_Z[1] = Lv2Vacuum_L4;
333 double Lv2Vacuum3_rI[Lv2Vacuum3_num];
334 for (
int tmpn = 0; tmpn < Lv2Vacuum3_num; tmpn++)
335 { Lv2Vacuum3_rI[tmpn] = 0.0; }
336 double Lv2Vacuum3_rO[Lv2Vacuum3_num];
337 Lv2Vacuum3_rO[0] = Lv2Vacuum_R3;
338 Lv2Vacuum3_rO[1] = Lv2Vacuum_R3;
342 G4Polycone* geo_Lv2VacuumPart1 =
new G4Polycone(
"geo_Lv2VacuumPart1_name", 0, 2 * M_PI, Lv2Vacuum1_num, Lv2Vacuum1_Z, Lv2Vacuum1_rI,
345 G4Tubs* geo_Lv2VacuumPart2_1 =
new G4Tubs(
"geo_Lv2VacuumPart2_1_name", Lv2Vacuum2_rI1, Lv2Vacuum2_rO1, Lv2Vacuum2_Z1, 0, 2 * M_PI);
346 G4Tubs* geo_Lv2VacuumPart2_2 =
new G4Tubs(
"geo_Lv2VacuumPart2_2_name", Lv2Vacuum2_rI2, Lv2Vacuum2_rO2, Lv2Vacuum2_Z2, 0, 2 * M_PI);
347 G4Transform3D transform_Lv2VacuumPart2_2 = G4Translate3D(0., 0., 0.);
348 transform_Lv2VacuumPart2_2 = transform_Lv2VacuumPart2_2 * G4RotateY3D(-Lv2Vacuum_A2);
349 G4IntersectionSolid* geo_Lv2VacuumPart2 =
new G4IntersectionSolid(
"geo_Lv2VacuumPart2_name", geo_Lv2VacuumPart2_1,
350 geo_Lv2VacuumPart2_2, transform_Lv2VacuumPart2_2);
352 G4Polycone* geo_Lv2VacuumPart3 =
new G4Polycone(
"geo_Lv2VacuumPart3_name", 0, 2 * M_PI, Lv2Vacuum3_num, Lv2Vacuum3_Z, Lv2Vacuum3_rI,
356 G4Transform3D transform_Lv2VacuumPart3 = G4Translate3D(-0.5, 0., 0.);
358 transform_Lv2VacuumPart3 = transform_Lv2VacuumPart3 * G4RotateY3D(-A11);
359 G4UnionSolid* geo_Lv2Vacuumxx =
new G4UnionSolid(
"geo_Lv2Vacuumxx_name", geo_Lv2VacuumPart1, geo_Lv2VacuumPart3,
360 transform_Lv2VacuumPart3);
361 G4Transform3D transform_Lv2VacuumPart2 = G4Translate3D(Lv2Vacuum_L3 * sin(Lv2Vacuum_A2), 0.,
362 Lv2Vacuum_L2 + Lv2Vacuum_L3 * cos(Lv2Vacuum_A2));
363 transform_Lv2VacuumPart2 = transform_Lv2VacuumPart2 * G4RotateY3D(Lv2Vacuum_A2);
364 G4UnionSolid* geo_Lv2Vacuumx =
new G4UnionSolid(
"geo_Lv2Vacuumx_name", geo_Lv2Vacuumxx, geo_Lv2VacuumPart2,
365 transform_Lv2VacuumPart2);
367 G4IntersectionSolid* geo_Lv2Vacuum =
new G4IntersectionSolid(
"geo_Lv2Vacuum_name", geo_Lv2Vacuumx, geo_Lv1SUS);
368 G4LogicalVolume* logi_Lv2Vacuum =
new G4LogicalVolume(geo_Lv2Vacuum, mat_Lv2Vacuum,
"logi_Lv2Vacuum_name");
369 if (flag_limitStep) logi_Lv2Vacuum->SetUserLimits(
new G4UserLimits(stepMax));
372 setColor(*logi_Lv2Vacuum,
"#CCCCCC");
373 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Vacuum,
"phys_Lv2Vacuum_name", logi_Lv1SUS,
false, 0);
384 const int Lv2Paraf1_num = 20;
385 const int Lv2Paraf2_num = 3;
387 double Lv2Paraf1_Z[Lv2Paraf1_num];
388 Lv2Paraf1_Z[0] = 0.0;
389 for (
int tmpn = 0; tmpn < 9; tmpn++) {
393 Lv2Paraf1_Z[2] = Lv2Paraf1_Z[1];
412 Lv2Paraf1_Z[18] = Lv2Paraf1_Z[17];
415 double Lv2Paraf1_rI[Lv2Paraf1_num];
417 Lv2Paraf1_rI[1] = Lv2Paraf1_rI[0];
418 Lv2Paraf1_rI[2] = Lv2Paraf1_rI[1];
419 Lv2Paraf1_rI[3] = Lv2Paraf1_rI[2];
420 Lv2Paraf1_rI[4] = Lv2Paraf1_rI[3];
421 Lv2Paraf1_rI[5] = Lv2Paraf1_rI[4];
422 Lv2Paraf1_rI[6] = Lv2Paraf1_rI[5];
424 Lv2Paraf1_rI[8] = Lv2Paraf1_rI[7];
425 Lv2Paraf1_rI[9] = Lv2Paraf1_rI[8];
426 Lv2Paraf1_rI[10] = Lv2Paraf1_rI[9];
427 Lv2Paraf1_rI[11] = Lv2Paraf1_rI[10];
428 Lv2Paraf1_rI[12] = Lv2Paraf1_rI[11];
430 Lv2Paraf1_rI[14] = Lv2Paraf1_rI[13];
431 Lv2Paraf1_rI[15] = Lv2Paraf1_rI[14];
432 Lv2Paraf1_rI[16] = Lv2Paraf1_rI[15];
433 Lv2Paraf1_rI[17] = Lv2Paraf1_rI[16];
434 Lv2Paraf1_rI[18] = Lv2Paraf1_rI[17];
435 Lv2Paraf1_rI[19] = Lv2Paraf1_rI[18];
437 double Lv2Paraf1_rO[Lv2Paraf1_num];
439 Lv2Paraf1_rO[1] = Lv2Paraf1_rO[0];
442 Lv2Paraf1_rO[4] = Lv2Paraf1_rO[3];
444 Lv2Paraf1_rO[6] = Lv2Paraf1_rO[5];
445 Lv2Paraf1_rO[7] = Lv2Paraf1_rO[6];
446 Lv2Paraf1_rO[8] = Lv2Paraf1_rO[7];
448 Lv2Paraf1_rO[10] = Lv2Paraf1_rO[9];
450 Lv2Paraf1_rO[12] = Lv2Paraf1_rO[11];
451 Lv2Paraf1_rO[13] = Lv2Paraf1_rO[12];
452 Lv2Paraf1_rO[14] = Lv2Paraf1_rO[13];
454 Lv2Paraf1_rO[16] = Lv2Paraf1_rO[15];
457 Lv2Paraf1_rO[19] = Lv2Paraf1_rO[18];
460 double Lv2Paraf2_Z[Lv2Paraf2_num];
461 Lv2Paraf2_Z[0] = 0.0;
462 for (
int tmpn = 10; tmpn <= 15; tmpn++) {
471 double Lv2Paraf2_rI[Lv2Paraf2_num];
472 for (
int tmpn = 0; tmpn < Lv2Paraf2_num; tmpn++)
473 { Lv2Paraf2_rI[tmpn] = 0.0; }
475 double Lv2Paraf2_rO[Lv2Paraf2_num];
478 Lv2Paraf2_rO[2] = Lv2Paraf2_rO[1];
484 G4Polycone* geo_Lv2Parafpcon1 =
new G4Polycone(
"geo_Lv2Parafpcon1_name", 0, 2 * M_PI, Lv2Paraf1_num, Lv2Paraf1_Z, Lv2Paraf1_rI,
486 G4Polycone* geo_Lv2Parafpcon2 =
new G4Polycone(
"geo_Lv2Parafpcon2_name", 0, 2 * M_PI, Lv2Paraf2_num, Lv2Paraf2_Z, Lv2Paraf2_rI,
488 G4SubtractionSolid* geo_Lv2Paraf =
new G4SubtractionSolid(
"geo_Lv2Paraf_name", geo_Lv2Parafpcon1, geo_Lv2Parafpcon2);
489 G4LogicalVolume* logi_Lv2Paraf =
new G4LogicalVolume(geo_Lv2Paraf, mat_Lv2Paraf,
"logi_Lv2Paraf_name");
492 setColor(*logi_Lv2Paraf,
"#00CCCC");
493 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Paraf,
"phys_Lv2Paraf_name", logi_Lv1SUS,
false, 0);
504 const int Lv3AuCoat_num = 2;
506 double Lv3AuCoat_Z[Lv3AuCoat_num];
510 double Lv3AuCoat_rI[Lv3AuCoat_num];
512 Lv3AuCoat_rI[1] = Lv3AuCoat_rI[0];
514 double Lv3AuCoat_rO[Lv3AuCoat_num];
516 Lv3AuCoat_rO[1] = Lv3AuCoat_rO[0];
522 G4Polycone* geo_Lv3AuCoat =
new G4Polycone(
"geo_Lv3AuCoat_name", 0, 2 * M_PI, Lv3AuCoat_num, Lv3AuCoat_Z, Lv3AuCoat_rI,
524 G4LogicalVolume* logi_Lv3AuCoat =
new G4LogicalVolume(geo_Lv3AuCoat, mat_Lv3AuCoat,
"logi_Lv3AuCoat_name");
527 setColor(*logi_Lv3AuCoat,
"#CCCC00");
528 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv3AuCoat,
"phys_Lv3AuCoat_name", logi_Lv2Vacuum,
false, 0);
547 G4Tubs* geo_Flange0 =
new G4Tubs(
"geo_Flange0_name", 0, 424 *
Unit::mm, Flange_T, 0, 2 * M_PI);
548 G4Tubs* geo_Flange1 =
new G4Tubs(
"geo_Flange1_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
549 G4Tubs* geo_Flange2 =
new G4Tubs(
"geo_Flange2_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
551 G4UnionSolid* geo_Flange_x =
new G4UnionSolid(
"geo_Flange_x_name", geo_Flange1, geo_Flange2, G4Translate3D(-Flange_L1 * 2, 0, 0));
552 G4IntersectionSolid* geo_Flange =
new G4IntersectionSolid(
"geo_Flange_name", geo_Flange0, geo_Flange_x, G4Translate3D(Flange_L1, 0,
579 G4Trd* geo_Lv1TaFwd_xx =
new G4Trd(
"geo_Lv1TaFwd_xx_name", Lv1TaFwd_L2, Lv1TaFwd_L3, Lv1TaFwd_T1, Lv1TaFwd_T1, Lv1TaFwd_L1 / 2.0);
580 G4UnionSolid* geo_Lv1TaFwd_x
581 =
new G4UnionSolid(
"geo_Lv1TaFwd_x_name", geo_Lv1TaFwd_xx, geo_Flange,
582 G4Translate3D(0, 0, Flange_D - (Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
586 double HMS_Z[4] = {350, 410, 450, 482};
587 double HMS_rI[4] = {35.5, 35.5, 42.5, 42.5};
588 double HMS_rO[4] = {100, 100, 100, 100};
589 G4Polycone* geo_HMS =
new G4Polycone(
"geo_HMS_name", 0, 2 * M_PI, 4, HMS_Z, HMS_rI, HMS_rO);
590 G4SubtractionSolid* geo_Lv1TaFwd =
new G4SubtractionSolid(
"geo_Lv1TaFwd_name", geo_Lv1TaFwd_x, geo_HMS,
591 G4Translate3D(0, 0, -(Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
593 G4LogicalVolume* logi_Lv1TaFwd =
new G4LogicalVolume(geo_Lv1TaFwd, mat_Lv1TaFwd,
"logi_Lv1TaFwd_name");
596 setColor(*logi_Lv1TaFwd,
"#333333");
597 new G4PVPlacement(0, G4ThreeVector(0, 0, Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0), logi_Lv1TaFwd,
"phys_Lv1TaFwd_name", &topVolume,
false,
624 double Lv2VacFwd1_Z1 = sqrt(Lv2VacFwd_D1 * Lv2VacFwd_D1 + Lv2VacFwd_D2 * Lv2VacFwd_D2 - 2.*Lv2VacFwd_D1 * Lv2VacFwd_D2 * cos(
626 double Lv2VacFwd1_rI1 = 0.0;
627 double Lv2VacFwd1_rO1 = Lv2VacFwd_R1;
629 double Lv2VacFwd1_Z2 = (Lv2VacFwd1_Z1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
630 double Lv2VacFwd1_rI2 = 0.0;
631 double Lv2VacFwd1_rO2 = 2 * Lv2VacFwd_R1;
633 double Lv2VacFwd2_Z1 = Lv2VacFwd_L1;
634 double Lv2VacFwd2_rI1 = 0.0;
635 double Lv2VacFwd2_rO1 = Lv2VacFwd_R2;
637 double Lv2VacFwd2_Z2 = (Lv2VacFwd_L1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
638 double Lv2VacFwd2_rI2 = 0.0;
639 double Lv2VacFwd2_rO2 = 2 * Lv2VacFwd_R2;
641 const int Lv2VacFwd3_num1 = 2;
642 const int Lv2VacFwd3_num2 = 3;
644 double Lv2VacFwd_Z1[Lv2VacFwd3_num1];
645 Lv2VacFwd_Z1[0] = 0.0;
647 Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2 + 0.03 * SafetyLength;
648 double Lv2VacFwd_rI1[Lv2VacFwd3_num1];
649 for (
int tmpn = 0; tmpn < Lv2VacFwd3_num1; tmpn++)
650 { Lv2VacFwd_rI1[tmpn] = 0.0; }
651 double Lv2VacFwd_rO1[Lv2VacFwd3_num1];
652 Lv2VacFwd_rO1[0] = Lv2VacFwd_R3;
653 Lv2VacFwd_rO1[1] = Lv2VacFwd_R3;
656 double Lv2VacFwd_Z2[Lv2VacFwd3_num2];
657 Lv2VacFwd_Z2[0] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
658 Lv2VacFwd_Z2[1] = Lv2VacFwd_D3;
659 Lv2VacFwd_Z2[2] = Lv2VacFwd_D3 + Lv2VacFwd_L3;
660 double Lv2VacFwd_rI2[Lv2VacFwd3_num2];
661 for (
int tmpn = 0; tmpn < Lv2VacFwd3_num2; tmpn++)
662 { Lv2VacFwd_rI2[tmpn] = 0.0; }
663 double Lv2VacFwd_rO2[Lv2VacFwd3_num2];
664 Lv2VacFwd_rO2[0] = Lv2VacFwd_R3;
665 Lv2VacFwd_rO2[1] = Lv2VacFwd_R4;
666 Lv2VacFwd_rO2[2] = Lv2VacFwd_R4;
672 G4Tubs* geo_Lv2VacFwdPart1_1 =
new G4Tubs(
"geo_Lv2VacFwdPart1_1_name", Lv2VacFwd1_rI1, Lv2VacFwd1_rO1, Lv2VacFwd1_Z1, 0, 2 * M_PI);
673 G4Tubs* geo_Lv2VacFwdPart1_2 =
new G4Tubs(
"geo_Lv2VacFwdPart1_2_name", Lv2VacFwd1_rI2, Lv2VacFwd1_rO2, Lv2VacFwd1_Z2, 0, 2 * M_PI);
675 G4Transform3D transform_Lv2VacFwdPart1_2 = G4Translate3D(0., 0., 0.);
676 transform_Lv2VacFwdPart1_2 = transform_Lv2VacFwdPart1_2 * G4RotateY3D(-Lv2VacFwd_A2 / 2.);
677 G4IntersectionSolid* geo_Lv2VacFwdPart1 =
new G4IntersectionSolid(
"geo_Lv2VacFwdPart1_name", geo_Lv2VacFwdPart1_1,
678 geo_Lv2VacFwdPart1_2, transform_Lv2VacFwdPart1_2);
680 G4Tubs* geo_Lv2VacFwdPart2_1 =
new G4Tubs(
"geo_Lv2VacFwdPart2_1_name", Lv2VacFwd2_rI1, Lv2VacFwd2_rO1, Lv2VacFwd2_Z1, 0, 2 * M_PI);
681 G4Tubs* geo_Lv2VacFwdPart2_2 =
new G4Tubs(
"geo_Lv2VacFwdPart2_2_name", Lv2VacFwd2_rI2, Lv2VacFwd2_rO2, Lv2VacFwd2_Z2, 0, 2 * M_PI);
683 G4Transform3D transform_Lv2VacFwdPart2_2 = G4Translate3D(0., 0., 0.);
684 transform_Lv2VacFwdPart2_2 = transform_Lv2VacFwdPart2_2 * G4RotateY3D(Lv2VacFwd_A2 / 2.);
685 G4IntersectionSolid* geo_Lv2VacFwdPart2 =
new G4IntersectionSolid(
"geo_Lv2VacFwdPart2_name", geo_Lv2VacFwdPart2_1,
686 geo_Lv2VacFwdPart2_2, transform_Lv2VacFwdPart2_2);
689 G4Polycone* geo_Lv2VacFwdPart3_1 =
new G4Polycone(
"geo_Lv2VacFwdPart3_1", 0, 2 * M_PI, Lv2VacFwd3_num1, Lv2VacFwd_Z1, Lv2VacFwd_rI1,
691 G4Polycone* geo_Lv2VacFwdPart3_2 =
new G4Polycone(
"geo_Lv2VacFwdPart3_2", 0, 2 * M_PI, Lv2VacFwd3_num2, Lv2VacFwd_Z2, Lv2VacFwd_rI2,
693 G4Transform3D transform_Lv2VacFwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
694 transform_Lv2VacFwdPart3_1 = transform_Lv2VacFwdPart3_1 * G4RotateY3D(Lv2VacFwd_A1 - A11);
695 G4UnionSolid* geo_Lv2VacFwdPart3 =
new G4UnionSolid(
"geo_Lv2VacFwdPart3_name", geo_Lv2VacFwdPart3_2, geo_Lv2VacFwdPart3_1,
696 transform_Lv2VacFwdPart3_1);
699 G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(
700 2.*Lv2VacFwd_A1)) / 2. ,
702 (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 2.);
706 transform_Lv2VacFwdPart1 = transform_Lv2VacFwdPart1 * G4RotateY3D(Lv2VacFwd_A1 + Lv2VacFwd_A2);
708 G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(
709 2.*Lv2VacFwd_A1) / 2.0,
711 Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.0);
716 transform_Lv2VacFwdPart2 = transform_Lv2VacFwdPart2 * G4RotateY3D(2.*Lv2VacFwd_A1);
718 G4UnionSolid* geo_Lv2VacFwdxx =
new G4UnionSolid(
"geo_Lv2VacFwdxx_name", geo_Lv2VacFwdPart3, geo_Lv2VacFwdPart1,
719 transform_Lv2VacFwdPart1);
720 G4UnionSolid* geo_Lv2VacFwdx =
new G4UnionSolid(
"geo_Lv2VacFwdx_name", geo_Lv2VacFwdxx, geo_Lv2VacFwdPart2,
721 transform_Lv2VacFwdPart2);
723 G4Transform3D transform_Lv2VacFwd = G4Translate3D(0., 0., -Lv1TaFwd_D1 - Lv1TaFwd_L1 / 2.);
724 transform_Lv2VacFwd = transform_Lv2VacFwd * G4RotateY3D(-Lv2VacFwd_A1);
726 G4IntersectionSolid* geo_Lv2VacFwd =
new G4IntersectionSolid(
"geo_Lv2VacFwd_name", geo_Lv1TaFwd, geo_Lv2VacFwdx,
727 transform_Lv2VacFwd);
728 G4LogicalVolume* logi_Lv2VacFwd =
new G4LogicalVolume(geo_Lv2VacFwd, mat_Lv2VacFwd,
"logi_Lv2VacFwd_name");
729 if (flag_limitStep) logi_Lv2VacFwd->SetUserLimits(
new G4UserLimits(stepMax));
732 setColor(*logi_Lv2VacFwd,
"#CCCCCC");
735 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacFwd,
"phys_Lv2VacFwd_name", logi_Lv1TaFwd,
false, 0);
763 G4Trd* geo_Lv1TaBwd_x =
new G4Trd(
"geo_Lv1TaBwd_x_name", Lv1TaBwd_L2, Lv1TaBwd_L3, Lv1TaBwd_T1, Lv1TaBwd_T1, Lv1TaBwd_L1 / 2.0);
764 G4UnionSolid* geo_Lv1TaBwd =
new G4UnionSolid(
"geo_Lv1TaBwd_name", geo_Lv1TaBwd_x, geo_Flange,
765 G4Translate3D(0, 0, -Flange_D - (-Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0)));
766 G4LogicalVolume* logi_Lv1TaBwd =
new G4LogicalVolume(geo_Lv1TaBwd, mat_Lv1TaBwd,
"logi_Lv1TaBwd_name");
769 setColor(*logi_Lv1TaBwd,
"#333333");
770 new G4PVPlacement(0, G4ThreeVector(0, 0, -Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0), logi_Lv1TaBwd,
"phys_Lv1TaBwd_name", &topVolume,
false,
799 double Lv2VacBwd1_Z1 = sqrt(Lv2VacBwd_D1 * Lv2VacBwd_D1 + Lv2VacBwd_D2 * Lv2VacBwd_D2 - 2.*Lv2VacBwd_D1 * Lv2VacBwd_D2 * cos(
801 double Lv2VacBwd1_rI1 = 0.0;
802 double Lv2VacBwd1_rO1 = Lv2VacBwd_R1;
804 double Lv2VacBwd1_Z2 = (Lv2VacBwd1_Z1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
805 double Lv2VacBwd1_rI2 = 0.0;
806 double Lv2VacBwd1_rO2 = 2 * Lv2VacBwd_R1;
808 double Lv2VacBwd2_Z1 = Lv2VacBwd_L1;
809 double Lv2VacBwd2_rI1 = 0.0;
810 double Lv2VacBwd2_rO1 = Lv2VacBwd_R2;
812 double Lv2VacBwd2_Z2 = (Lv2VacBwd_L1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
813 double Lv2VacBwd2_rI2 = 0.0;
814 double Lv2VacBwd2_rO2 = 2 * Lv2VacBwd_R2;
816 const int Lv2VacBwd3_num1 = 2;
817 const int Lv2VacBwd3_num2 = 3;
819 double Lv2VacBwd_Z1[Lv2VacBwd3_num1];
820 Lv2VacBwd_Z1[0] = 0.0;
821 Lv2VacBwd_Z1[1] = -Lv2VacBwd_D3 + Lv2VacBwd_L2 - 0.03 * SafetyLength;
822 double Lv2VacBwd_rI1[Lv2VacBwd3_num1];
823 for (
int tmpn = 0; tmpn < Lv2VacBwd3_num1; tmpn++)
824 { Lv2VacBwd_rI1[tmpn] = 0.0; }
825 double Lv2VacBwd_rO1[Lv2VacBwd3_num1];
826 Lv2VacBwd_rO1[0] = Lv2VacBwd_R3;
827 Lv2VacBwd_rO1[1] = Lv2VacBwd_R3;
830 double Lv2VacBwd_Z2[Lv2VacBwd3_num2];
831 Lv2VacBwd_Z2[0] = -Lv2VacBwd_D3 + Lv2VacBwd_L2;
832 Lv2VacBwd_Z2[1] = -Lv2VacBwd_D3;
833 Lv2VacBwd_Z2[2] = -Lv2VacBwd_D3 - Lv2VacBwd_L3;
834 double Lv2VacBwd_rI2[Lv2VacBwd3_num2];
835 for (
int tmpn = 0; tmpn < Lv2VacBwd3_num2; tmpn++)
836 { Lv2VacBwd_rI2[tmpn] = 0.0; }
837 double Lv2VacBwd_rO2[Lv2VacBwd3_num2];
838 Lv2VacBwd_rO2[0] = Lv2VacBwd_R3;
839 Lv2VacBwd_rO2[1] = Lv2VacBwd_R4;
840 Lv2VacBwd_rO2[2] = Lv2VacBwd_R4;
846 G4Tubs* geo_Lv2VacBwdPart1_1 =
new G4Tubs(
"geo_Lv2VacBwdPart1_1_name", Lv2VacBwd1_rI1, Lv2VacBwd1_rO1, Lv2VacBwd1_Z1, 0, 2 * M_PI);
847 G4Tubs* geo_Lv2VacBwdPart1_2 =
new G4Tubs(
"geo_Lv2VacBwdPart1_2_name", Lv2VacBwd1_rI2, Lv2VacBwd1_rO2, Lv2VacBwd1_Z2, 0, 2 * M_PI);
848 G4Transform3D transform_Lv2VacBwdPart1_2 = G4Translate3D(0., 0., 0.);
849 transform_Lv2VacBwdPart1_2 = transform_Lv2VacBwdPart1_2 * G4RotateY3D(Lv2VacBwd_A2 / 2.);
850 G4IntersectionSolid* geo_Lv2VacBwdPart1 =
new G4IntersectionSolid(
"geo_Lv2VacBwdPart1_name", geo_Lv2VacBwdPart1_1,
851 geo_Lv2VacBwdPart1_2, transform_Lv2VacBwdPart1_2);
853 G4Tubs* geo_Lv2VacBwdPart2_1 =
new G4Tubs(
"geo_Lv2VacBwdPart2_1_name", Lv2VacBwd2_rI1, Lv2VacBwd2_rO1, Lv2VacBwd2_Z1, 0, 2 * M_PI);
854 G4Tubs* geo_Lv2VacBwdPart2_2 =
new G4Tubs(
"geo_Lv2VacBwdPart2_2_name", Lv2VacBwd2_rI2, Lv2VacBwd2_rO2, Lv2VacBwd2_Z2, 0, 2 * M_PI);
855 G4Transform3D transform_Lv2VacBwdPart2_2 = G4Translate3D(0., 0., 0.);
856 transform_Lv2VacBwdPart2_2 = transform_Lv2VacBwdPart2_2 * G4RotateY3D(-Lv2VacBwd_A2 / 2.);
857 G4IntersectionSolid* geo_Lv2VacBwdPart2 =
new G4IntersectionSolid(
"geo_Lv2VacBwdPart2_name", geo_Lv2VacBwdPart2_1,
858 geo_Lv2VacBwdPart2_2, transform_Lv2VacBwdPart2_2);
861 G4Polycone* geo_Lv2VacBwdPart3_1 =
new G4Polycone(
"geo_Lv2VacBwdPart3_1", 0, 2 * M_PI, Lv2VacBwd3_num1, Lv2VacBwd_Z1, Lv2VacBwd_rI1,
863 G4Polycone* geo_Lv2VacBwdPart3_2 =
new G4Polycone(
"geo_Lv2VacBwdPart3_2", 0, 2 * M_PI, Lv2VacBwd3_num2, Lv2VacBwd_Z2, Lv2VacBwd_rI2,
865 G4Transform3D transform_Lv2VacBwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
866 transform_Lv2VacBwdPart3_1 = transform_Lv2VacBwdPart3_1 * G4RotateY3D(-Lv2VacBwd_A1 + A11);
867 G4UnionSolid* geo_Lv2VacBwdPart3 =
new G4UnionSolid(
"geo_Lv2VacBwdPart3_name", geo_Lv2VacBwdPart3_2, geo_Lv2VacBwdPart3_1,
868 transform_Lv2VacBwdPart3_1);
871 G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(
872 2.*Lv2VacBwd_A1)) / 2. ,
874 -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.);
878 transform_Lv2VacBwdPart1 = transform_Lv2VacBwdPart1 * G4RotateY3D(-Lv2VacBwd_A1 - Lv2VacBwd_A2);
881 G4Transform3D transform_Lv2VacBwdPart2 = G4Translate3D((Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * sin(2.*Lv2VacBwd_A1) ,
883 -(Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * cos(2.*Lv2VacBwd_A1));
884 transform_Lv2VacBwdPart2 = transform_Lv2VacBwdPart2 * G4RotateY3D(-2.*Lv2VacBwd_A1);
886 G4UnionSolid* geo_Lv2VacBwdxx =
new G4UnionSolid(
"geo_Lv2VacBwdxx_name", geo_Lv2VacBwdPart3, geo_Lv2VacBwdPart1,
887 transform_Lv2VacBwdPart1);
888 G4UnionSolid* geo_Lv2VacBwdx =
new G4UnionSolid(
"geo_Lv2VacBwdx_name", geo_Lv2VacBwdxx, geo_Lv2VacBwdPart2,
889 transform_Lv2VacBwdPart2);
891 G4Transform3D transform_Lv2VacBwd = G4Translate3D(0., 0., +Lv1TaBwd_D1 + Lv1TaBwd_L1 / 2.);
892 transform_Lv2VacBwd = transform_Lv2VacBwd * G4RotateY3D(+Lv2VacBwd_A1);
894 G4IntersectionSolid* geo_Lv2VacBwd =
new G4IntersectionSolid(
"geo_Lv2VacBwd_name", geo_Lv1TaBwd, geo_Lv2VacBwdx,
895 transform_Lv2VacBwd);
896 G4LogicalVolume* logi_Lv2VacBwd =
new G4LogicalVolume(geo_Lv2VacBwd, mat_Lv2VacBwd,
"logi_Lv2VacBwd_name");
897 if (flag_limitStep) logi_Lv2VacBwd->SetUserLimits(
new G4UserLimits(stepMax));
900 setColor(*logi_Lv2VacBwd,
"#CCCCCC");
903 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacBwd,
"phys_Lv2VacBwd_name", logi_Lv1TaBwd,
false, 0);
911 prep =
"AreaTubeFwd.";
913 const int AreaTubeFwd_num = 2;
915 double AreaTubeFwd_Z[AreaTubeFwd_num];
919 double AreaTubeFwd_rI[AreaTubeFwd_num];
920 for (
int i = 0; i < AreaTubeFwd_num; i++)
921 { AreaTubeFwd_rI[i] = 0.0; }
923 double AreaTubeFwd_rO[AreaTubeFwd_num];
925 AreaTubeFwd_rO[1] = AreaTubeFwd_rO[0];
928 G4Polycone* geo_AreaTubeFwdpcon =
new G4Polycone(
"geo_AreaTubeFwdpcon_name", 0, 2 * M_PI, AreaTubeFwd_num, AreaTubeFwd_Z,
929 AreaTubeFwd_rI, AreaTubeFwd_rO);
935 prep =
"Lv1TaLERUp.";
939 const int Lv1TaLERUp_num = 4;
941 double Lv1TaLERUp_Z[Lv1TaLERUp_num];
947 double Lv1TaLERUp_rI[Lv1TaLERUp_num];
948 for (
int i = 0; i < Lv1TaLERUp_num; i++)
949 { Lv1TaLERUp_rI[i] = 0.0; }
951 double Lv1TaLERUp_rO[Lv1TaLERUp_num];
961 G4Polycone* geo_Lv1TaLERUppcon =
new G4Polycone(
"geo_Lv1TaLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z, Lv1TaLERUp_rI,
963 G4Transform3D transform_AreaTubeFwdForLER = G4Translate3D(0., 0., 0.);
964 transform_AreaTubeFwdForLER = transform_AreaTubeFwdForLER * G4RotateY3D(-Lv1TaLERUp_A1);
965 G4IntersectionSolid* geo_Lv1TaLERUp =
new G4IntersectionSolid(
"geo_Lv1TaLERUp_name", geo_Lv1TaLERUppcon, geo_AreaTubeFwdpcon,
966 transform_AreaTubeFwdForLER);
967 G4LogicalVolume* logi_Lv1TaLERUp =
new G4LogicalVolume(geo_Lv1TaLERUp, mat_Lv1TaLERUp,
"logi_Lv1TaLERUp_name");
970 setColor(*logi_Lv1TaLERUp,
"#0000CC");
971 G4Transform3D transform_Lv1TaLERUp = G4Translate3D(0., 0., 0.);
972 transform_Lv1TaLERUp = transform_Lv1TaLERUp * G4RotateY3D(Lv1TaLERUp_A1);
973 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1TaLERUp,
"phys_Lv1TaLERUp_name", &topVolume,
false, 0);
982 prep =
"Lv2VacLERUp.";
984 double Lv2VacLERUp_rO[Lv1TaLERUp_num];
986 Lv2VacLERUp_rO[1] = Lv2VacLERUp_rO[0];
987 Lv2VacLERUp_rO[2] = Lv2VacLERUp_rO[0];
988 Lv2VacLERUp_rO[3] = Lv2VacLERUp_rO[0];
994 G4Polycone* geo_Lv2VacLERUppcon =
new G4Polycone(
"geo_Lv2VacLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z,
995 Lv1TaLERUp_rI, Lv2VacLERUp_rO);
996 G4IntersectionSolid* geo_Lv2VacLERUp =
new G4IntersectionSolid(
"geo_Lv2VacLERUp_name", geo_Lv2VacLERUppcon, geo_AreaTubeFwdpcon,
997 transform_AreaTubeFwdForLER);
998 G4LogicalVolume* logi_Lv2VacLERUp =
new G4LogicalVolume(geo_Lv2VacLERUp, mat_Lv2VacLERUp,
"logi_Lv2VacLERUp_name");
999 if (flag_limitStep) logi_Lv2VacLERUp->SetUserLimits(
new G4UserLimits(stepMax));
1003 setColor(*logi_Lv2VacLERUp,
"#CCCCCC");
1004 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERUp,
"phys_Lv2VacLERUp_name", logi_Lv1TaLERUp,
false, 0);
1012 prep =
"Lv1TaHERDwn.";
1016 const int Lv1TaHERDwn_num = 4;
1018 double Lv1TaHERDwn_Z[Lv1TaHERDwn_num];
1024 double Lv1TaHERDwn_rI[Lv1TaHERDwn_num];
1025 for (
int i = 0; i < Lv1TaHERDwn_num; i++)
1026 { Lv1TaHERDwn_rI[i] = 0.0; }
1028 double Lv1TaHERDwn_rO[Lv1TaHERDwn_num];
1035 G4Material* mat_Lv1TaHERDwn =
Materials::get(strMat_Lv1TaHERDwn);
1038 G4Polycone* geo_Lv1TaHERDwnpcon =
new G4Polycone(
"geo_Lv1TaHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1039 Lv1TaHERDwn_rI, Lv1TaHERDwn_rO);
1040 G4Transform3D transform_AreaTubeFwdForHER = G4Translate3D(0., 0., 0.);
1041 transform_AreaTubeFwdForHER = transform_AreaTubeFwdForHER * G4RotateY3D(-Lv1TaHERDwn_A1);
1042 G4IntersectionSolid* geo_Lv1TaHERDwn =
new G4IntersectionSolid(
"", geo_Lv1TaHERDwnpcon, geo_AreaTubeFwdpcon,
1043 transform_AreaTubeFwdForHER);
1044 G4LogicalVolume* logi_Lv1TaHERDwn =
new G4LogicalVolume(geo_Lv1TaHERDwn, mat_Lv1TaHERDwn,
"logi_Lv1TaHERDwn_name");
1047 setColor(*logi_Lv1TaHERDwn,
"#00CC00");
1048 G4Transform3D transform_Lv1TaHERDwn = G4Translate3D(0., 0., 0.);
1049 transform_Lv1TaHERDwn = transform_Lv1TaHERDwn * G4RotateY3D(Lv1TaHERDwn_A1);
1050 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1TaHERDwn,
"phys_Lv1TaHERDwn_name", &topVolume,
false, 0);
1059 prep =
"Lv2VacHERDwn.";
1061 double Lv2VacHERDwn_rO[Lv1TaHERDwn_num];
1063 Lv2VacHERDwn_rO[1] = Lv2VacHERDwn_rO[0];
1064 Lv2VacHERDwn_rO[2] = Lv2VacHERDwn_rO[0];
1065 Lv2VacHERDwn_rO[3] = Lv2VacHERDwn_rO[0];
1068 G4Material* mat_Lv2VacHERDwn =
Materials::get(strMat_Lv2VacHERDwn);
1071 G4Polycone* geo_Lv2VacHERDwnpcon =
new G4Polycone(
"geo_Lv2VacHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1072 Lv1TaHERDwn_rI, Lv2VacHERDwn_rO);
1073 G4IntersectionSolid* geo_Lv2VacHERDwn =
new G4IntersectionSolid(
"", geo_Lv2VacHERDwnpcon, geo_AreaTubeFwdpcon,
1074 transform_AreaTubeFwdForHER);
1075 G4LogicalVolume* logi_Lv2VacHERDwn =
new G4LogicalVolume(geo_Lv2VacHERDwn, mat_Lv2VacHERDwn,
"logi_Lv2VacHERDwn_name");
1076 if (flag_limitStep) logi_Lv2VacHERDwn->SetUserLimits(
new G4UserLimits(stepMax));
1079 setColor(*logi_Lv2VacHERDwn,
"#CCCCCC");
1080 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERDwn,
"phys_Lv2VacHERDwn_name", logi_Lv1TaHERDwn,
false, 0);
1092 prep =
"AreaTubeBwd.";
1094 const int AreaTubeBwd_num = 2;
1096 double AreaTubeBwd_Z[AreaTubeBwd_num];
1100 double AreaTubeBwd_rI[AreaTubeBwd_num];
1101 for (
int i = 0; i < AreaTubeBwd_num; i++)
1102 { AreaTubeBwd_rI[i] = 0.0; }
1104 double AreaTubeBwd_rO[AreaTubeBwd_num];
1106 AreaTubeBwd_rO[1] = AreaTubeBwd_rO[0];
1109 G4Polycone* geo_AreaTubeBwdpcon =
new G4Polycone(
"geo_AreaTubeBwdpcon_name", 0, 2 * M_PI, AreaTubeBwd_num, AreaTubeBwd_Z,
1110 AreaTubeBwd_rI, AreaTubeBwd_rO);
1116 prep =
"Lv1TaHERUp.";
1120 const int Lv1TaHERUp_num = 4;
1122 double Lv1TaHERUp_Z[Lv1TaHERUp_num];
1128 double Lv1TaHERUp_rI[Lv1TaHERUp_num];
1129 for (
int i = 0; i < Lv1TaHERUp_num; i++)
1130 { Lv1TaHERUp_rI[i] = 0.0; }
1132 double Lv1TaHERUp_rO[Lv1TaHERUp_num];
1142 G4Polycone* geo_Lv1TaHERUppcon =
new G4Polycone(
"geo_Lv1TaHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z, Lv1TaHERUp_rI,
1144 G4Transform3D transform_AreaTubeBwdForHER = G4Translate3D(0., 0., 0.);
1145 transform_AreaTubeBwdForHER = transform_AreaTubeBwdForHER * G4RotateY3D(-Lv1TaHERUp_A1);
1146 G4IntersectionSolid* geo_Lv1TaHERUp =
new G4IntersectionSolid(
"", geo_Lv1TaHERUppcon, geo_AreaTubeBwdpcon,
1147 transform_AreaTubeBwdForHER);
1148 G4LogicalVolume* logi_Lv1TaHERUp =
new G4LogicalVolume(geo_Lv1TaHERUp, mat_Lv1TaHERUp,
"logi_Lv1TaHERUp_name");
1151 setColor(*logi_Lv1TaHERUp,
"#00CC00");
1152 G4Transform3D transform_Lv1TaHERUp = G4Translate3D(0., 0., 0.);
1153 transform_Lv1TaHERUp = transform_Lv1TaHERUp * G4RotateY3D(Lv1TaHERUp_A1);
1154 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1TaHERUp,
"phys_Lv1TaHERUp_name", &topVolume,
false, 0);
1163 prep =
"Lv2VacHERUp.";
1165 double Lv2VacHERUp_rO[Lv1TaHERUp_num];
1167 Lv2VacHERUp_rO[1] = Lv2VacHERUp_rO[0];
1168 Lv2VacHERUp_rO[2] = Lv2VacHERUp_rO[0];
1169 Lv2VacHERUp_rO[3] = Lv2VacHERUp_rO[0];
1172 G4Material* mat_Lv2VacHERUp =
Materials::get(strMat_Lv2VacHERUp);
1175 G4Polycone* geo_Lv2VacHERUppcon =
new G4Polycone(
"geo_Lv2VacHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z,
1176 Lv1TaHERUp_rI, Lv2VacHERUp_rO);
1177 G4IntersectionSolid* geo_Lv2VacHERUp =
new G4IntersectionSolid(
"", geo_Lv2VacHERUppcon, geo_AreaTubeBwdpcon,
1178 transform_AreaTubeFwdForHER);
1179 G4LogicalVolume* logi_Lv2VacHERUp =
new G4LogicalVolume(geo_Lv2VacHERUp, mat_Lv2VacHERUp,
"logi_Lv2VacHERUp_name");
1180 if (flag_limitStep) logi_Lv2VacHERUp->SetUserLimits(
new G4UserLimits(stepMax));
1183 setColor(*logi_Lv2VacHERUp,
"#CCCCCC");
1184 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERUp,
"phys_Lv2VacHERUp_name", logi_Lv1TaHERUp,
false, 0);
1193 prep =
"Lv1TaLERDwn.";
1197 const int Lv1TaLERDwn_num = 4;
1199 double Lv1TaLERDwn_Z[Lv1TaLERDwn_num];
1205 double Lv1TaLERDwn_rI[Lv1TaLERDwn_num];
1206 for (
int i = 0; i < Lv1TaLERDwn_num; i++)
1207 { Lv1TaLERDwn_rI[i] = 0.0; }
1209 double Lv1TaLERDwn_rO[Lv1TaLERDwn_num];
1216 G4Material* mat_Lv1TaLERDwn =
Materials::get(strMat_Lv1TaLERDwn);
1219 G4Polycone* geo_Lv1TaLERDwnpcon =
new G4Polycone(
"geo_Lv1TaLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1220 Lv1TaLERDwn_rI, Lv1TaLERDwn_rO);
1221 G4Transform3D transform_AreaTubeBwdForLER = G4Translate3D(0., 0., 0.);
1222 transform_AreaTubeBwdForLER = transform_AreaTubeBwdForLER * G4RotateY3D(-Lv1TaLERDwn_A1);
1223 G4IntersectionSolid* geo_Lv1TaLERDwn =
new G4IntersectionSolid(
"", geo_Lv1TaLERDwnpcon, geo_AreaTubeBwdpcon,
1224 transform_AreaTubeBwdForLER);
1225 G4LogicalVolume* logi_Lv1TaLERDwn =
new G4LogicalVolume(geo_Lv1TaLERDwn, mat_Lv1TaLERDwn,
"logi_Lv1TaLERDwn_name");
1228 setColor(*logi_Lv1TaLERDwn,
"#0000CC");
1229 G4Transform3D transform_Lv1TaLERDwn = G4Translate3D(0., 0., 0.);
1230 transform_Lv1TaLERDwn = transform_Lv1TaLERDwn * G4RotateY3D(Lv1TaLERDwn_A1);
1231 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1TaLERDwn,
"phys_Lv1TaLERDwn_name", &topVolume,
false, 0);
1240 prep =
"Lv2VacLERDwn.";
1242 double Lv2VacLERDwn_rO[Lv1TaLERDwn_num];
1244 Lv2VacLERDwn_rO[1] = Lv2VacLERDwn_rO[0];
1245 Lv2VacLERDwn_rO[2] = Lv2VacLERDwn_rO[0];
1246 Lv2VacLERDwn_rO[3] = Lv2VacLERDwn_rO[0];
1249 G4Material* mat_Lv2VacLERDwn =
Materials::get(strMat_Lv2VacLERDwn);
1252 G4Polycone* geo_Lv2VacLERDwnpcon =
new G4Polycone(
"geo_Lv2VacLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1253 Lv1TaLERDwn_rI, Lv2VacLERDwn_rO);
1254 G4IntersectionSolid* geo_Lv2VacLERDwn =
new G4IntersectionSolid(
"", geo_Lv2VacLERDwnpcon, geo_AreaTubeBwdpcon,
1255 transform_AreaTubeBwdForLER);
1256 G4LogicalVolume* logi_Lv2VacLERDwn =
new G4LogicalVolume(geo_Lv2VacLERDwn, mat_Lv2VacLERDwn,
"logi_Lv2VacLERDwn_name");
1257 if (flag_limitStep) logi_Lv2VacLERDwn->SetUserLimits(
new G4UserLimits(stepMax));
1260 setColor(*logi_Lv2VacLERDwn,
"#CCCCCC");
1261 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERDwn,
"phys_Lv2VacLERDwn_name", logi_Lv1TaLERDwn,
false, 0);
1267 G4IntersectionSolid* geo_CuFlangeFwd_x2 =
new G4IntersectionSolid(
"geo_CuFlangeFwd_x2_name", geo_AreaTubeFwdpcon, geo_Flange,
1268 G4Translate3D(0, 0, Flange_D + Flange_T * 2));
1269 G4SubtractionSolid* geo_CuFlangeFwd_x =
new G4SubtractionSolid(
"geo_CuFlangeFwd_x_name", geo_CuFlangeFwd_x2, geo_Lv1TaLERUp,
1270 transform_Lv1TaLERUp);
1271 G4SubtractionSolid* geo_CuFlangeFwd =
new G4SubtractionSolid(
"geo_CuFlangeFwd_name", geo_CuFlangeFwd_x, geo_Lv1TaHERDwn,
1272 transform_Lv1TaHERDwn);
1274 G4LogicalVolume* logi_CuFlangeFwd =
new G4LogicalVolume(geo_CuFlangeFwd, mat_Lv1TaLERUp,
"logi_CuFlangeFwd_name");
1277 setColor(*logi_CuFlangeFwd,
"#CCCCCC");
1278 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeFwd,
"phys_CuFlangeFwd_name", &topVolume,
false, 0);
1283 G4IntersectionSolid* geo_CuFlangeBwd_x2 =
new G4IntersectionSolid(
"geo_CuFlangeBwd_x2_name", geo_AreaTubeBwdpcon, geo_Flange,
1284 G4Translate3D(0, 0, -Flange_D - Flange_T * 2));
1285 G4SubtractionSolid* geo_CuFlangeBwd_x =
new G4SubtractionSolid(
"geo_CuFlangeBwd_x_name", geo_CuFlangeBwd_x2, geo_Lv1TaHERUp,
1286 transform_Lv1TaHERUp);
1287 G4SubtractionSolid* geo_CuFlangeBwd =
new G4SubtractionSolid(
"geo_CuFlangeBwd_name", geo_CuFlangeBwd_x, geo_Lv1TaLERDwn,
1288 transform_Lv1TaLERDwn);
1290 G4LogicalVolume* logi_CuFlangeBwd =
new G4LogicalVolume(geo_CuFlangeBwd, mat_Lv1TaLERUp,
"logi_CuFlangeBwd_name");
1293 setColor(*logi_CuFlangeBwd,
"#CCCCCC");
1294 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeBwd,
"phys_CuFlangeBwd_name", &topVolume,
false, 0);
double getParameter(const std::string &name) const
Get parameter value.
const std::string & getParameterStr(const std::string &name) const
Get string parameter.
static const double mm
[millimeters]
static const double cm
Standard units with the value = 1.
static G4Material * get(const std::string &name)
Find given material.
void setVisibility(G4LogicalVolume &volume, bool visible)
Helper function to quickly set the visibility of a given volume.
void setColor(G4LogicalVolume &volume, const std::string &color)
Set the color of a logical volume.