Create detector geometry.
69 {
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
105
108
109 double A11 = 0.03918;
110
113
114
115
116
117
118 std::string prep = "Lv1SUS.";
119
120 const int Lv1SUS_num = 21;
121
122 double Lv1SUS_Z[Lv1SUS_num];
123 Lv1SUS_Z[0] = 0.0;
124 for (int tmpn = 0; tmpn < 8; tmpn++) {
126 }
128 Lv1SUS_Z[2] = Lv1SUS_Z[1];
131 Lv1SUS_Z[5] = Lv1SUS_Z[4];
142 Lv1SUS_Z[16] = Lv1SUS_Z[15];
145 Lv1SUS_Z[19] = Lv1SUS_Z[18];
147
148 double Lv1SUS_rI[Lv1SUS_num];
149 for (int tmpn = 0; tmpn < Lv1SUS_num; tmpn++)
150 { Lv1SUS_rI[tmpn] = 0.0; }
151
152 double Lv1SUS_rO[Lv1SUS_num];
154 Lv1SUS_rO[1] = Lv1SUS_rO[0];
156 Lv1SUS_rO[3] = Lv1SUS_rO[2];
159 Lv1SUS_rO[6] = Lv1SUS_rO[5];
161 Lv1SUS_rO[8] = Lv1SUS_rO[7];
163 Lv1SUS_rO[10] = Lv1SUS_rO[9];
164 Lv1SUS_rO[11] = Lv1SUS_rO[10];
166 Lv1SUS_rO[13] = Lv1SUS_rO[12];
168 Lv1SUS_rO[15] = Lv1SUS_rO[14];
171 Lv1SUS_rO[18] = Lv1SUS_rO[17];
173 Lv1SUS_rO[20] = Lv1SUS_rO[19];
174
177
178
179 G4Polycone* geo_Lv1SUS = new G4Polycone("geo_Lv1SUS_name", 0, 2 * M_PI, Lv1SUS_num, Lv1SUS_Z, Lv1SUS_rI, Lv1SUS_rO);
180 G4LogicalVolume* logi_Lv1SUS = new G4LogicalVolume(geo_Lv1SUS, mat_Lv1SUS, "logi_Lv1SUS_name");
181
182
183
184
186 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv1SUS, "phys_Lv1SUS_name", &topVolume, false, 0);
187
188
189
190
191
192
193
195 prep = "Lv2OutTi.";
196
197 const int Lv2OutTi_num = 2;
198
199 double Lv2OutTi_Z[Lv2OutTi_num];
202
203 double Lv2OutTi_rI[Lv2OutTi_num];
205 Lv2OutTi_rI[1] = Lv2OutTi_rI[0];
206
207 double Lv2OutTi_rO[Lv2OutTi_num];
209 Lv2OutTi_rO[1] = Lv2OutTi_rO[0];
210
213
214
215 G4Polycone* geo_Lv2OutTi = new G4Polycone("geo_Lv2OutTi_name", 0, 2 * M_PI, Lv2OutTi_num, Lv2OutTi_Z, Lv2OutTi_rI, Lv2OutTi_rO);
216 G4LogicalVolume* logi_Lv2OutTi = new G4LogicalVolume(geo_Lv2OutTi, mat_Lv2OutTi, "logi_Lv2OutTi_name");
217
218
219 setColor(*logi_Lv2OutTi,
"#333300");
220 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutTi, "phys_Lv2OutTi_name", logi_Lv1SUS, false, 0);
221 }
222
223
224
225
226
227
228
229
230 prep = "Lv2OutBe.";
231
232 const int Lv2OutBe_num = 2;
233
234 double Lv2OutBe_Z[Lv2OutBe_num];
237
238 double Lv2OutBe_rI[Lv2OutBe_num];
240 Lv2OutBe_rI[1] = Lv2OutBe_rI[0];
241
242 double Lv2OutBe_rO[Lv2OutBe_num];
244 Lv2OutBe_rO[1] = Lv2OutBe_rO[0];
245
248
249
250 G4Polycone* geo_Lv2OutBe = new G4Polycone("geo_Lv2OutBe_name", 0, 2 * M_PI, Lv2OutBe_num, Lv2OutBe_Z, Lv2OutBe_rI, Lv2OutBe_rO);
251 G4LogicalVolume* logi_Lv2OutBe = new G4LogicalVolume(geo_Lv2OutBe, mat_Lv2OutBe, "logi_Lv2OutBe_name");
252
253
254 setColor(*logi_Lv2OutBe,
"#333300");
255 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2OutBe, "phys_Lv2OutBe_name", logi_Lv1SUS, false, 0);
256
257
258
259
260
261
262
263
264 prep = "Lv2InBe.";
265
266 const int Lv2InBe_num = 2;
267
268 double Lv2InBe_Z[Lv2InBe_num];
271
272 double Lv2InBe_rI[Lv2InBe_num];
274 Lv2InBe_rI[1] = Lv2InBe_rI[0];
275
276 double Lv2InBe_rO[Lv2InBe_num];
278 Lv2InBe_rO[1] = Lv2InBe_rO[0];
279
282
283
284 G4Polycone* geo_Lv2InBe = new G4Polycone("geo_Lv2InBe_name", 0, 2 * M_PI, Lv2InBe_num, Lv2InBe_Z, Lv2InBe_rI, Lv2InBe_rO);
285 G4LogicalVolume* logi_Lv2InBe = new G4LogicalVolume(geo_Lv2InBe, mat_Lv2InBe, "logi_Lv2InBe_name");
286
287
289 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2InBe, "phys_Lv2InBe_name", logi_Lv1SUS, false, 0);
290
291
292
293
294
295 prep = "Lv2Vacuum.";
296
304
306
309
310
311 const int Lv2Vacuum1_num = 2;
312
313 double Lv2Vacuum1_Z[Lv2Vacuum1_num];
314 Lv2Vacuum1_Z[0] = -Lv2Vacuum_L1;
315 Lv2Vacuum1_Z[1] = Lv2Vacuum_L2;
316 double Lv2Vacuum1_rI[Lv2Vacuum1_num];
317 for (int tmpn = 0; tmpn < Lv2Vacuum1_num; tmpn++)
318 { Lv2Vacuum1_rI[tmpn] = 0.0; }
319 double Lv2Vacuum1_rO[Lv2Vacuum1_num];
320 Lv2Vacuum1_rO[0] = Lv2Vacuum_R1;
321 Lv2Vacuum1_rO[1] = Lv2Vacuum_R1;
322
323 double Lv2Vacuum2_Z1 = 2. * Lv2Vacuum_L3;
324 double Lv2Vacuum2_rI1 = 0.0;
325 double Lv2Vacuum2_rO1 = Lv2Vacuum_R2;
326
327 double Lv2Vacuum2_Z2 = (Lv2Vacuum_L3 * cos(Lv2Vacuum_A2)) + SafetyLength;
328 double Lv2Vacuum2_rI2 = 0.0;
329 double Lv2Vacuum2_rO2 = 2 * Lv2Vacuum_R2;
330
331 const int Lv2Vacuum3_num = 2;
332
333 double Lv2Vacuum3_Z[Lv2Vacuum3_num];
334 Lv2Vacuum3_Z[0] = 0.0;
335 Lv2Vacuum3_Z[1] = Lv2Vacuum_L4;
336 double Lv2Vacuum3_rI[Lv2Vacuum3_num];
337 for (int tmpn = 0; tmpn < Lv2Vacuum3_num; tmpn++)
338 { Lv2Vacuum3_rI[tmpn] = 0.0; }
339 double Lv2Vacuum3_rO[Lv2Vacuum3_num];
340 Lv2Vacuum3_rO[0] = Lv2Vacuum_R3;
341 Lv2Vacuum3_rO[1] = Lv2Vacuum_R3;
342
343
344
345 G4Polycone* geo_Lv2VacuumPart1 = new G4Polycone("geo_Lv2VacuumPart1_name", 0, 2 * M_PI, Lv2Vacuum1_num, Lv2Vacuum1_Z, Lv2Vacuum1_rI,
346 Lv2Vacuum1_rO);
347
348 G4Tubs* geo_Lv2VacuumPart2_1 = new G4Tubs("geo_Lv2VacuumPart2_1_name", Lv2Vacuum2_rI1, Lv2Vacuum2_rO1, Lv2Vacuum2_Z1, 0, 2 * M_PI);
349 G4Tubs* geo_Lv2VacuumPart2_2 = new G4Tubs("geo_Lv2VacuumPart2_2_name", Lv2Vacuum2_rI2, Lv2Vacuum2_rO2, Lv2Vacuum2_Z2, 0, 2 * M_PI);
350 G4Transform3D transform_Lv2VacuumPart2_2 = G4Translate3D(0., 0., 0.);
351 transform_Lv2VacuumPart2_2 = transform_Lv2VacuumPart2_2 * G4RotateY3D(-Lv2Vacuum_A2);
352 G4IntersectionSolid* geo_Lv2VacuumPart2 = new G4IntersectionSolid("geo_Lv2VacuumPart2_name", geo_Lv2VacuumPart2_1,
353 geo_Lv2VacuumPart2_2, transform_Lv2VacuumPart2_2);
354
355 G4Polycone* geo_Lv2VacuumPart3 = new G4Polycone("geo_Lv2VacuumPart3_name", 0, 2 * M_PI, Lv2Vacuum3_num, Lv2Vacuum3_Z, Lv2Vacuum3_rI,
356 Lv2Vacuum3_rO);
357
358
359 G4Transform3D transform_Lv2VacuumPart3 = G4Translate3D(-0.5, 0., 0.);
360
361 transform_Lv2VacuumPart3 = transform_Lv2VacuumPart3 * G4RotateY3D(-A11);
362 G4UnionSolid* geo_Lv2Vacuumxx = new G4UnionSolid("geo_Lv2Vacuumxx_name", geo_Lv2VacuumPart1, geo_Lv2VacuumPart3,
363 transform_Lv2VacuumPart3);
364 G4Transform3D transform_Lv2VacuumPart2 = G4Translate3D(Lv2Vacuum_L3 * sin(Lv2Vacuum_A2), 0.,
365 Lv2Vacuum_L2 + Lv2Vacuum_L3 * cos(Lv2Vacuum_A2));
366 transform_Lv2VacuumPart2 = transform_Lv2VacuumPart2 * G4RotateY3D(Lv2Vacuum_A2);
367 G4UnionSolid* geo_Lv2Vacuumx = new G4UnionSolid("geo_Lv2Vacuumx_name", geo_Lv2Vacuumxx, geo_Lv2VacuumPart2,
368 transform_Lv2VacuumPart2);
369
370 G4IntersectionSolid* geo_Lv2Vacuum = new G4IntersectionSolid("geo_Lv2Vacuum_name", geo_Lv2Vacuumx, geo_Lv1SUS);
371 G4LogicalVolume* logi_Lv2Vacuum = new G4LogicalVolume(geo_Lv2Vacuum, mat_Lv2Vacuum, "logi_Lv2Vacuum_name");
372 if (flag_limitStep) logi_Lv2Vacuum->SetUserLimits(new G4UserLimits(stepMax));
373
374
375 setColor(*logi_Lv2Vacuum,
"#CCCCCC");
376 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Vacuum, "phys_Lv2Vacuum_name", logi_Lv1SUS, false, 0);
377
378
379
380
381
382
383
384
385 prep = "Lv2Paraf.";
386
387 const int Lv2Paraf1_num = 20;
388 const int Lv2Paraf2_num = 3;
389
390 double Lv2Paraf1_Z[Lv2Paraf1_num];
391 Lv2Paraf1_Z[0] = 0.0;
392 for (int tmpn = 0; tmpn < 9; tmpn++) {
394 }
396 Lv2Paraf1_Z[2] = Lv2Paraf1_Z[1];
415 Lv2Paraf1_Z[18] = Lv2Paraf1_Z[17];
417
418 double Lv2Paraf1_rI[Lv2Paraf1_num];
420 Lv2Paraf1_rI[1] = Lv2Paraf1_rI[0];
421 Lv2Paraf1_rI[2] = Lv2Paraf1_rI[1];
422 Lv2Paraf1_rI[3] = Lv2Paraf1_rI[2];
423 Lv2Paraf1_rI[4] = Lv2Paraf1_rI[3];
424 Lv2Paraf1_rI[5] = Lv2Paraf1_rI[4];
425 Lv2Paraf1_rI[6] = Lv2Paraf1_rI[5];
427 Lv2Paraf1_rI[8] = Lv2Paraf1_rI[7];
428 Lv2Paraf1_rI[9] = Lv2Paraf1_rI[8];
429 Lv2Paraf1_rI[10] = Lv2Paraf1_rI[9];
430 Lv2Paraf1_rI[11] = Lv2Paraf1_rI[10];
431 Lv2Paraf1_rI[12] = Lv2Paraf1_rI[11];
433 Lv2Paraf1_rI[14] = Lv2Paraf1_rI[13];
434 Lv2Paraf1_rI[15] = Lv2Paraf1_rI[14];
435 Lv2Paraf1_rI[16] = Lv2Paraf1_rI[15];
436 Lv2Paraf1_rI[17] = Lv2Paraf1_rI[16];
437 Lv2Paraf1_rI[18] = Lv2Paraf1_rI[17];
438 Lv2Paraf1_rI[19] = Lv2Paraf1_rI[18];
439
440 double Lv2Paraf1_rO[Lv2Paraf1_num];
442 Lv2Paraf1_rO[1] = Lv2Paraf1_rO[0];
445 Lv2Paraf1_rO[4] = Lv2Paraf1_rO[3];
447 Lv2Paraf1_rO[6] = Lv2Paraf1_rO[5];
448 Lv2Paraf1_rO[7] = Lv2Paraf1_rO[6];
449 Lv2Paraf1_rO[8] = Lv2Paraf1_rO[7];
451 Lv2Paraf1_rO[10] = Lv2Paraf1_rO[9];
453 Lv2Paraf1_rO[12] = Lv2Paraf1_rO[11];
454 Lv2Paraf1_rO[13] = Lv2Paraf1_rO[12];
455 Lv2Paraf1_rO[14] = Lv2Paraf1_rO[13];
457 Lv2Paraf1_rO[16] = Lv2Paraf1_rO[15];
460 Lv2Paraf1_rO[19] = Lv2Paraf1_rO[18];
461
462
463 double Lv2Paraf2_Z[Lv2Paraf2_num];
464 Lv2Paraf2_Z[0] = 0.0;
465 for (int tmpn = 10; tmpn <= 15; tmpn++) {
467 }
473
474 double Lv2Paraf2_rI[Lv2Paraf2_num];
475 for (int tmpn = 0; tmpn < Lv2Paraf2_num; tmpn++)
476 { Lv2Paraf2_rI[tmpn] = 0.0; }
477
478 double Lv2Paraf2_rO[Lv2Paraf2_num];
481 Lv2Paraf2_rO[2] = Lv2Paraf2_rO[1];
482
485
486
487 G4Polycone* geo_Lv2Parafpcon1 = new G4Polycone("geo_Lv2Parafpcon1_name", 0, 2 * M_PI, Lv2Paraf1_num, Lv2Paraf1_Z, Lv2Paraf1_rI,
488 Lv2Paraf1_rO);
489 G4Polycone* geo_Lv2Parafpcon2 = new G4Polycone("geo_Lv2Parafpcon2_name", 0, 2 * M_PI, Lv2Paraf2_num, Lv2Paraf2_Z, Lv2Paraf2_rI,
490 Lv2Paraf2_rO);
491 G4SubtractionSolid* geo_Lv2Paraf = new G4SubtractionSolid("geo_Lv2Paraf_name", geo_Lv2Parafpcon1, geo_Lv2Parafpcon2);
492 G4LogicalVolume* logi_Lv2Paraf = new G4LogicalVolume(geo_Lv2Paraf, mat_Lv2Paraf, "logi_Lv2Paraf_name");
493
494
495 setColor(*logi_Lv2Paraf,
"#00CCCC");
496 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2Paraf, "phys_Lv2Paraf_name", logi_Lv1SUS, false, 0);
497
498
499
500
501
502
503
504
505 prep = "Lv3AuCoat.";
506
507 const int Lv3AuCoat_num = 2;
508
509 double Lv3AuCoat_Z[Lv3AuCoat_num];
512
513 double Lv3AuCoat_rI[Lv3AuCoat_num];
515 Lv3AuCoat_rI[1] = Lv3AuCoat_rI[0];
516
517 double Lv3AuCoat_rO[Lv3AuCoat_num];
519 Lv3AuCoat_rO[1] = Lv3AuCoat_rO[0];
520
523
524
525 G4Polycone* geo_Lv3AuCoat = new G4Polycone("geo_Lv3AuCoat_name", 0, 2 * M_PI, Lv3AuCoat_num, Lv3AuCoat_Z, Lv3AuCoat_rI,
526 Lv3AuCoat_rO);
527 G4LogicalVolume* logi_Lv3AuCoat = new G4LogicalVolume(geo_Lv3AuCoat, mat_Lv3AuCoat, "logi_Lv3AuCoat_name");
528
529
530 setColor(*logi_Lv3AuCoat,
"#CCCC00");
531 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv3AuCoat, "phys_Lv3AuCoat_name", logi_Lv2Vacuum, false, 0);
532
533
534
535
538
539
540 prep = "Flange.";
541
544
547
548
549
550 G4Tubs* geo_Flange0 =
new G4Tubs(
"geo_Flange0_name", 0, 424 *
Unit::mm, Flange_T, 0, 2 * M_PI);
551 G4Tubs* geo_Flange1 = new G4Tubs("geo_Flange1_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
552 G4Tubs* geo_Flange2 = new G4Tubs("geo_Flange2_name", 0, Flange_R, Flange_T, 0, 2 * M_PI);
553
554 G4UnionSolid* geo_Flange_x = new G4UnionSolid("geo_Flange_x_name", geo_Flange1, geo_Flange2, G4Translate3D(-Flange_L1 * 2, 0, 0));
555 G4IntersectionSolid* geo_Flange = new G4IntersectionSolid("geo_Flange_name", geo_Flange0, geo_Flange_x, G4Translate3D(Flange_L1, 0,
556 0));
557
558
561
564
565
566
567
568
569
570 prep = "Lv1TaFwd.";
571
574
575
582 double Lv1TaFwd_bL1 = Lv1TaFwd_L1 - Lv1TaFwd_aL1 - Lv1TaFwd_aL2 - Lv1TaFwd_aL3;
585
588
589
590
591 double Lv1TaFwd_aR[4] = {Lv1TaFwd_aR1, Lv1TaFwd_aR1, Lv1TaFwd_aR2, Lv1TaFwd_aR2};
592 double Lv1TaFwd_ar[4] = {0, 0, 0, 0};
593 double Lv1TaFwd_aL[4] = { -Lv1TaFwd_L1 / 2.0 + 0,
594 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1,
595 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2,
596 -Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3
597 };
598 G4VSolid* geo_Lv1TaFwd_a = new G4Polycone("geo_Lv1TaFwd_a_name", 0, 2 * M_PI, 4, Lv1TaFwd_aL, Lv1TaFwd_ar, Lv1TaFwd_aR);
599 G4VSolid* geo_Lv1TaFwd_b = new G4Trd("geo_Lv1TaFwd_b_name", Lv1TaFwd_bL2, Lv1TaFwd_bL3, Lv1TaFwd_T1, Lv1TaFwd_T1,
600 Lv1TaFwd_bL1 / 2.0);
601 G4VSolid* geo_Lv1TaFwd_c = new G4Box("geo_Lv1TaFwd_c_name", 200, Lv1TaFwd_T1, (Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) / 2.0);
602 G4VSolid* geo_Lv1TaFwd_d = new G4IntersectionSolid("geo_Lv1TaFwd_d_name", geo_Lv1TaFwd_a, geo_Lv1TaFwd_c, G4Translate3D(0, 0,
603 -Lv1TaFwd_L1 / 2.0 + (Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) / 2.0));
604 G4VSolid* geo_Lv1TaFwd_xx = new G4UnionSolid("geo_Lv1TaFwd_xx_name", geo_Lv1TaFwd_d, geo_Lv1TaFwd_b, G4Translate3D(0, 0,
605 Lv1TaFwd_L1 / 2.0 - Lv1TaFwd_bL1 / 2.0));
606 G4UnionSolid* geo_Lv1TaFwd_x
607 = new G4UnionSolid("geo_Lv1TaFwd_x_name", geo_Lv1TaFwd_xx, geo_Flange,
608 G4Translate3D(0, 0, Flange_D - (Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
609
610
611
612 double HMS_Z[4] = {350, 410, 450, 482};
613 double HMS_rI[4] = {35.5, 35.5, 42.5, 42.5};
614 double HMS_rO[4] = {100, 100, 100, 100};
615 G4Polycone* geo_HMS = new G4Polycone("geo_HMS_name", 0, 2 * M_PI, 4, HMS_Z, HMS_rI, HMS_rO);
616 G4SubtractionSolid* geo_Lv1TaFwd = new G4SubtractionSolid("geo_Lv1TaFwd_name", geo_Lv1TaFwd_x, geo_HMS,
617 G4Translate3D(0, 0, -(Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0)));
618
619 G4LogicalVolume* logi_Lv1TaFwd = new G4LogicalVolume(geo_Lv1TaFwd, mat_Lv1TaFwd, "logi_Lv1TaFwd_name");
620
621
622 setColor(*logi_Lv1TaFwd,
"#333333");
623 new G4PVPlacement(0, G4ThreeVector(0, 0, Lv1TaFwd_D1 + Lv1TaFwd_L1 / 2.0), logi_Lv1TaFwd, "phys_Lv1TaFwd_name", &topVolume, false,
624 0);
625
626
627
628
629
630
631 prep = "Lv2VacFwd.";
632
645
648
649
650 double Lv2VacFwd1_Z1 =
sqrt(Lv2VacFwd_D1 * Lv2VacFwd_D1 + Lv2VacFwd_D2 * Lv2VacFwd_D2 - 2.*Lv2VacFwd_D1 * Lv2VacFwd_D2 * cos(
651 Lv2VacFwd_A1));
652 double Lv2VacFwd1_rI1 = 0.0;
653 double Lv2VacFwd1_rO1 = Lv2VacFwd_R1;
654
655 double Lv2VacFwd1_Z2 = (Lv2VacFwd1_Z1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
656 double Lv2VacFwd1_rI2 = 0.0;
657 double Lv2VacFwd1_rO2 = 2 * Lv2VacFwd_R1;
658
659 double Lv2VacFwd2_Z1 = Lv2VacFwd_L1;
660 double Lv2VacFwd2_rI1 = 0.0;
661 double Lv2VacFwd2_rO1 = Lv2VacFwd_R2;
662
663 double Lv2VacFwd2_Z2 = (Lv2VacFwd_L1 / 2. * cos(Lv2VacFwd_A2)) + SafetyLength;
664 double Lv2VacFwd2_rI2 = 0.0;
665 double Lv2VacFwd2_rO2 = 2 * Lv2VacFwd_R2;
666
667 const int Lv2VacFwd3_num1 = 2;
668 const int Lv2VacFwd3_num2 = 3;
669
670 double Lv2VacFwd_Z1[Lv2VacFwd3_num1];
671 Lv2VacFwd_Z1[0] = 0.0;
672
673 Lv2VacFwd_Z1[1] = Lv2VacFwd_D3 - Lv2VacFwd_L2 + 0.03 * SafetyLength;
674 double Lv2VacFwd_rI1[Lv2VacFwd3_num1];
675 for (int tmpn = 0; tmpn < Lv2VacFwd3_num1; tmpn++)
676 { Lv2VacFwd_rI1[tmpn] = 0.0; }
677 double Lv2VacFwd_rO1[Lv2VacFwd3_num1];
678 Lv2VacFwd_rO1[0] = Lv2VacFwd_R3;
679 Lv2VacFwd_rO1[1] = Lv2VacFwd_R3;
680
681
682 double Lv2VacFwd_Z2[Lv2VacFwd3_num2];
683 Lv2VacFwd_Z2[0] = Lv2VacFwd_D3 - Lv2VacFwd_L2;
684 Lv2VacFwd_Z2[1] = Lv2VacFwd_D3;
685 Lv2VacFwd_Z2[2] = Lv2VacFwd_D3 + Lv2VacFwd_L3;
686 double Lv2VacFwd_rI2[Lv2VacFwd3_num2];
687 for (int tmpn = 0; tmpn < Lv2VacFwd3_num2; tmpn++)
688 { Lv2VacFwd_rI2[tmpn] = 0.0; }
689 double Lv2VacFwd_rO2[Lv2VacFwd3_num2];
690 Lv2VacFwd_rO2[0] = Lv2VacFwd_R3;
691 Lv2VacFwd_rO2[1] = Lv2VacFwd_R4;
692 Lv2VacFwd_rO2[2] = Lv2VacFwd_R4;
693
694
695
696
697
698 G4Tubs* geo_Lv2VacFwdPart1_1 = new G4Tubs("geo_Lv2VacFwdPart1_1_name", Lv2VacFwd1_rI1, Lv2VacFwd1_rO1, Lv2VacFwd1_Z1, 0, 2 * M_PI);
699 G4Tubs* geo_Lv2VacFwdPart1_2 = new G4Tubs("geo_Lv2VacFwdPart1_2_name", Lv2VacFwd1_rI2, Lv2VacFwd1_rO2, Lv2VacFwd1_Z2, 0, 2 * M_PI);
700
701 G4Transform3D transform_Lv2VacFwdPart1_2 = G4Translate3D(0., 0., 0.);
702 transform_Lv2VacFwdPart1_2 = transform_Lv2VacFwdPart1_2 * G4RotateY3D(-Lv2VacFwd_A2 / 2.);
703 G4IntersectionSolid* geo_Lv2VacFwdPart1 = new G4IntersectionSolid("geo_Lv2VacFwdPart1_name", geo_Lv2VacFwdPart1_1,
704 geo_Lv2VacFwdPart1_2, transform_Lv2VacFwdPart1_2);
705
706 G4Tubs* geo_Lv2VacFwdPart2_1 = new G4Tubs("geo_Lv2VacFwdPart2_1_name", Lv2VacFwd2_rI1, Lv2VacFwd2_rO1, Lv2VacFwd2_Z1, 0, 2 * M_PI);
707 G4Tubs* geo_Lv2VacFwdPart2_2 = new G4Tubs("geo_Lv2VacFwdPart2_2_name", Lv2VacFwd2_rI2, Lv2VacFwd2_rO2, Lv2VacFwd2_Z2, 0, 2 * M_PI);
708
709 G4Transform3D transform_Lv2VacFwdPart2_2 = G4Translate3D(0., 0., 0.);
710 transform_Lv2VacFwdPart2_2 = transform_Lv2VacFwdPart2_2 * G4RotateY3D(Lv2VacFwd_A2 / 2.);
711 G4IntersectionSolid* geo_Lv2VacFwdPart2 = new G4IntersectionSolid("geo_Lv2VacFwdPart2_name", geo_Lv2VacFwdPart2_1,
712 geo_Lv2VacFwdPart2_2, transform_Lv2VacFwdPart2_2);
713
714
715 G4Polycone* geo_Lv2VacFwdPart3_1 = new G4Polycone("geo_Lv2VacFwdPart3_1", 0, 2 * M_PI, Lv2VacFwd3_num1, Lv2VacFwd_Z1, Lv2VacFwd_rI1,
716 Lv2VacFwd_rO1);
717 G4Polycone* geo_Lv2VacFwdPart3_2 = new G4Polycone("geo_Lv2VacFwdPart3_2", 0, 2 * M_PI, Lv2VacFwd3_num2, Lv2VacFwd_Z2, Lv2VacFwd_rI2,
718 Lv2VacFwd_rO2);
719 G4Transform3D transform_Lv2VacFwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
720 transform_Lv2VacFwdPart3_1 = transform_Lv2VacFwdPart3_1 * G4RotateY3D(Lv2VacFwd_A1 - A11);
721 G4UnionSolid* geo_Lv2VacFwdPart3 = new G4UnionSolid("geo_Lv2VacFwdPart3_name", geo_Lv2VacFwdPart3_2, geo_Lv2VacFwdPart3_1,
722 transform_Lv2VacFwdPart3_1);
723
724
725 G4Transform3D transform_Lv2VacFwdPart1 = G4Translate3D((Lv2VacFwd_D1 * sin(Lv2VacFwd_A1) + Lv2VacFwd_D2 * sin(
726 2.*Lv2VacFwd_A1)) / 2.,
727 0.,
728 (Lv2VacFwd_D1 * cos(Lv2VacFwd_A1) + Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1)) / 2.);
729
730
731
732 transform_Lv2VacFwdPart1 = transform_Lv2VacFwdPart1 * G4RotateY3D(Lv2VacFwd_A1 + Lv2VacFwd_A2);
733
734 G4Transform3D transform_Lv2VacFwdPart2 = G4Translate3D(Lv2VacFwd_D2 * sin(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * sin(
735 2.*Lv2VacFwd_A1) / 2.0,
736 0.,
737 Lv2VacFwd_D2 * cos(2.*Lv2VacFwd_A1) + Lv2VacFwd_L1 * cos(2.*Lv2VacFwd_A1) / 2.0);
738
739
740
741
742 transform_Lv2VacFwdPart2 = transform_Lv2VacFwdPart2 * G4RotateY3D(2.*Lv2VacFwd_A1);
743
744 G4UnionSolid* geo_Lv2VacFwdxx = new G4UnionSolid("geo_Lv2VacFwdxx_name", geo_Lv2VacFwdPart3, geo_Lv2VacFwdPart1,
745 transform_Lv2VacFwdPart1);
746 G4UnionSolid* geo_Lv2VacFwdx = new G4UnionSolid("geo_Lv2VacFwdx_name", geo_Lv2VacFwdxx, geo_Lv2VacFwdPart2,
747 transform_Lv2VacFwdPart2);
748
749 G4Transform3D transform_Lv2VacFwd = G4Translate3D(0., 0., -Lv1TaFwd_D1 - Lv1TaFwd_L1 / 2.);
750 transform_Lv2VacFwd = transform_Lv2VacFwd * G4RotateY3D(-Lv2VacFwd_A1);
751
752 G4IntersectionSolid* geo_Lv2VacFwd = new G4IntersectionSolid("geo_Lv2VacFwd_name", geo_Lv1TaFwd, geo_Lv2VacFwdx,
753 transform_Lv2VacFwd);
754 G4LogicalVolume* logi_Lv2VacFwd = new G4LogicalVolume(geo_Lv2VacFwd, mat_Lv2VacFwd, "logi_Lv2VacFwd_name");
755 if (flag_limitStep) logi_Lv2VacFwd->SetUserLimits(new G4UserLimits(stepMax));
756
757
758 setColor(*logi_Lv2VacFwd,
"#CCCCCC");
759
761 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacFwd, "phys_Lv2VacFwd_name", logi_Lv1TaFwd, false, 0);
762
763
764
765
768
769
772
773
774
775
776
777 prep = "Lv1TaBwd.";
778
781
782
789 double Lv1TaBwd_bL1 = Lv1TaBwd_L1 - Lv1TaBwd_aL1 - Lv1TaBwd_aL2 - Lv1TaBwd_aL3;
792
795
796
797
798 double Lv1TaBwd_aR[4] = {Lv1TaBwd_aR2, Lv1TaBwd_aR2, Lv1TaBwd_aR1, Lv1TaBwd_aR1};
799 double Lv1TaBwd_ar[4] = {0, 0, 0, 0};
800 double Lv1TaBwd_aL[4] = { +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3),
801 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2),
802 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1),
803 +Lv1TaBwd_L1 / 2.0 - 0
804 };
805 G4VSolid* geo_Lv1TaBwd_a = new G4Polycone("geo_Lv1TaBwd_a_name", 0, 2 * M_PI, 4, Lv1TaBwd_aL, Lv1TaBwd_ar, Lv1TaBwd_aR);
806 G4VSolid* geo_Lv1TaBwd_b = new G4Trd("geo_Lv1TaBwd_b_name", Lv1TaBwd_bL2, Lv1TaBwd_bL3, Lv1TaBwd_T1, Lv1TaBwd_T1,
807 Lv1TaBwd_bL1 / 2.0);
808 G4VSolid* geo_Lv1TaBwd_c = new G4Box("geo_Lv1TaBwd_c_name", 200, Lv1TaBwd_T1, (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3) / 2.0);
809 G4VSolid* geo_Lv1TaBwd_d = new G4IntersectionSolid("geo_Lv1TaBwd_d_name", geo_Lv1TaBwd_a, geo_Lv1TaBwd_c, G4Translate3D(0, 0,
810 +Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3) / 2.0));
811 G4VSolid* geo_Lv1TaBwd_x = new G4UnionSolid("geo_Lv1TaBwd_x_name", geo_Lv1TaBwd_d, geo_Lv1TaBwd_b, G4Translate3D(0, 0,
812 -Lv1TaBwd_L1 / 2.0 + Lv1TaBwd_bL1 / 2.0));
813 G4UnionSolid* geo_Lv1TaBwd = new G4UnionSolid("geo_Lv1TaBwd_name", geo_Lv1TaBwd_x, geo_Flange,
814 G4Translate3D(0, 0, -Flange_D - (-Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0)));
815 G4LogicalVolume* logi_Lv1TaBwd = new G4LogicalVolume(geo_Lv1TaBwd, mat_Lv1TaBwd, "logi_Lv1TaBwd_name");
816
817
818 setColor(*logi_Lv1TaBwd,
"#333333");
819 new G4PVPlacement(0, G4ThreeVector(0, 0, -Lv1TaBwd_D1 - Lv1TaBwd_L1 / 2.0), logi_Lv1TaBwd, "phys_Lv1TaBwd_name", &topVolume, false,
820 0);
821
822
823
824
825
826
827
828
829 prep = "Lv2VacBwd.";
830
843
846
847
848 double Lv2VacBwd1_Z1 =
sqrt(Lv2VacBwd_D1 * Lv2VacBwd_D1 + Lv2VacBwd_D2 * Lv2VacBwd_D2 - 2.*Lv2VacBwd_D1 * Lv2VacBwd_D2 * cos(
849 Lv2VacBwd_A1));
850 double Lv2VacBwd1_rI1 = 0.0;
851 double Lv2VacBwd1_rO1 = Lv2VacBwd_R1;
852
853 double Lv2VacBwd1_Z2 = (Lv2VacBwd1_Z1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
854 double Lv2VacBwd1_rI2 = 0.0;
855 double Lv2VacBwd1_rO2 = 2 * Lv2VacBwd_R1;
856
857 double Lv2VacBwd2_Z1 = Lv2VacBwd_L1;
858 double Lv2VacBwd2_rI1 = 0.0;
859 double Lv2VacBwd2_rO1 = Lv2VacBwd_R2;
860
861 double Lv2VacBwd2_Z2 = (Lv2VacBwd_L1 / 2. * cos(Lv2VacBwd_A2)) + SafetyLength;
862 double Lv2VacBwd2_rI2 = 0.0;
863 double Lv2VacBwd2_rO2 = 2 * Lv2VacBwd_R2;
864
865 const int Lv2VacBwd3_num1 = 2;
866 const int Lv2VacBwd3_num2 = 3;
867
868 double Lv2VacBwd_Z1[Lv2VacBwd3_num1];
869 Lv2VacBwd_Z1[0] = 0.0;
870 Lv2VacBwd_Z1[1] = -Lv2VacBwd_D3 + Lv2VacBwd_L2 - 0.03 * SafetyLength;
871 double Lv2VacBwd_rI1[Lv2VacBwd3_num1];
872 for (int tmpn = 0; tmpn < Lv2VacBwd3_num1; tmpn++)
873 { Lv2VacBwd_rI1[tmpn] = 0.0; }
874 double Lv2VacBwd_rO1[Lv2VacBwd3_num1];
875 Lv2VacBwd_rO1[0] = Lv2VacBwd_R3;
876 Lv2VacBwd_rO1[1] = Lv2VacBwd_R3;
877
878
879 double Lv2VacBwd_Z2[Lv2VacBwd3_num2];
880 Lv2VacBwd_Z2[0] = -Lv2VacBwd_D3 + Lv2VacBwd_L2;
881 Lv2VacBwd_Z2[1] = -Lv2VacBwd_D3;
882 Lv2VacBwd_Z2[2] = -Lv2VacBwd_D3 - Lv2VacBwd_L3;
883 double Lv2VacBwd_rI2[Lv2VacBwd3_num2];
884 for (int tmpn = 0; tmpn < Lv2VacBwd3_num2; tmpn++)
885 { Lv2VacBwd_rI2[tmpn] = 0.0; }
886 double Lv2VacBwd_rO2[Lv2VacBwd3_num2];
887 Lv2VacBwd_rO2[0] = Lv2VacBwd_R3;
888 Lv2VacBwd_rO2[1] = Lv2VacBwd_R4;
889 Lv2VacBwd_rO2[2] = Lv2VacBwd_R4;
890
891
892
893
894
895 G4Tubs* geo_Lv2VacBwdPart1_1 = new G4Tubs("geo_Lv2VacBwdPart1_1_name", Lv2VacBwd1_rI1, Lv2VacBwd1_rO1, Lv2VacBwd1_Z1, 0, 2 * M_PI);
896 G4Tubs* geo_Lv2VacBwdPart1_2 = new G4Tubs("geo_Lv2VacBwdPart1_2_name", Lv2VacBwd1_rI2, Lv2VacBwd1_rO2, Lv2VacBwd1_Z2, 0, 2 * M_PI);
897 G4Transform3D transform_Lv2VacBwdPart1_2 = G4Translate3D(0., 0., 0.);
898 transform_Lv2VacBwdPart1_2 = transform_Lv2VacBwdPart1_2 * G4RotateY3D(Lv2VacBwd_A2 / 2.);
899 G4IntersectionSolid* geo_Lv2VacBwdPart1 = new G4IntersectionSolid("geo_Lv2VacBwdPart1_name", geo_Lv2VacBwdPart1_1,
900 geo_Lv2VacBwdPart1_2, transform_Lv2VacBwdPart1_2);
901
902 G4Tubs* geo_Lv2VacBwdPart2_1 = new G4Tubs("geo_Lv2VacBwdPart2_1_name", Lv2VacBwd2_rI1, Lv2VacBwd2_rO1, Lv2VacBwd2_Z1, 0, 2 * M_PI);
903 G4Tubs* geo_Lv2VacBwdPart2_2 = new G4Tubs("geo_Lv2VacBwdPart2_2_name", Lv2VacBwd2_rI2, Lv2VacBwd2_rO2, Lv2VacBwd2_Z2, 0, 2 * M_PI);
904 G4Transform3D transform_Lv2VacBwdPart2_2 = G4Translate3D(0., 0., 0.);
905 transform_Lv2VacBwdPart2_2 = transform_Lv2VacBwdPart2_2 * G4RotateY3D(-Lv2VacBwd_A2 / 2.);
906 G4IntersectionSolid* geo_Lv2VacBwdPart2 = new G4IntersectionSolid("geo_Lv2VacBwdPart2_name", geo_Lv2VacBwdPart2_1,
907 geo_Lv2VacBwdPart2_2, transform_Lv2VacBwdPart2_2);
908
909
910 G4Polycone* geo_Lv2VacBwdPart3_1 = new G4Polycone("geo_Lv2VacBwdPart3_1", 0, 2 * M_PI, Lv2VacBwd3_num1, Lv2VacBwd_Z1, Lv2VacBwd_rI1,
911 Lv2VacBwd_rO1);
912 G4Polycone* geo_Lv2VacBwdPart3_2 = new G4Polycone("geo_Lv2VacBwdPart3_2", 0, 2 * M_PI, Lv2VacBwd3_num2, Lv2VacBwd_Z2, Lv2VacBwd_rI2,
913 Lv2VacBwd_rO2);
914 G4Transform3D transform_Lv2VacBwdPart3_1 = G4Translate3D(-0.5, 0., 0.);
915 transform_Lv2VacBwdPart3_1 = transform_Lv2VacBwdPart3_1 * G4RotateY3D(-Lv2VacBwd_A1 + A11);
916 G4UnionSolid* geo_Lv2VacBwdPart3 = new G4UnionSolid("geo_Lv2VacBwdPart3_name", geo_Lv2VacBwdPart3_2, geo_Lv2VacBwdPart3_1,
917 transform_Lv2VacBwdPart3_1);
918
919
920 G4Transform3D transform_Lv2VacBwdPart1 = G4Translate3D((Lv2VacBwd_D1 * sin(Lv2VacBwd_A1) + Lv2VacBwd_D2 * sin(
921 2.*Lv2VacBwd_A1)) / 2.,
922 0.,
923 -(Lv2VacBwd_D1 * cos(Lv2VacBwd_A1) + Lv2VacBwd_D2 * cos(2.*Lv2VacBwd_A1)) / 2.);
924
925
926
927 transform_Lv2VacBwdPart1 = transform_Lv2VacBwdPart1 * G4RotateY3D(-Lv2VacBwd_A1 - Lv2VacBwd_A2);
928
929
930 G4Transform3D transform_Lv2VacBwdPart2 = G4Translate3D((Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * sin(2.*Lv2VacBwd_A1),
931 0.,
932 -(Lv2VacBwd_D2 + Lv2VacBwd_L1 / 2.0) * cos(2.*Lv2VacBwd_A1));
933 transform_Lv2VacBwdPart2 = transform_Lv2VacBwdPart2 * G4RotateY3D(-2.*Lv2VacBwd_A1);
934
935 G4UnionSolid* geo_Lv2VacBwdxx = new G4UnionSolid("geo_Lv2VacBwdxx_name", geo_Lv2VacBwdPart3, geo_Lv2VacBwdPart1,
936 transform_Lv2VacBwdPart1);
937 G4UnionSolid* geo_Lv2VacBwdx = new G4UnionSolid("geo_Lv2VacBwdx_name", geo_Lv2VacBwdxx, geo_Lv2VacBwdPart2,
938 transform_Lv2VacBwdPart2);
939
940 G4Transform3D transform_Lv2VacBwd = G4Translate3D(0., 0., +Lv1TaBwd_D1 + Lv1TaBwd_L1 / 2.);
941 transform_Lv2VacBwd = transform_Lv2VacBwd * G4RotateY3D(+Lv2VacBwd_A1);
942
943 G4IntersectionSolid* geo_Lv2VacBwd = new G4IntersectionSolid("geo_Lv2VacBwd_name", geo_Lv1TaBwd, geo_Lv2VacBwdx,
944 transform_Lv2VacBwd);
945 G4LogicalVolume* logi_Lv2VacBwd = new G4LogicalVolume(geo_Lv2VacBwd, mat_Lv2VacBwd, "logi_Lv2VacBwd_name");
946 if (flag_limitStep) logi_Lv2VacBwd->SetUserLimits(new G4UserLimits(stepMax));
947
948
949 setColor(*logi_Lv2VacBwd,
"#CCCCCC");
950
952 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logi_Lv2VacBwd, "phys_Lv2VacBwd_name", logi_Lv1TaBwd, false, 0);
953
954
955
958
959
960 prep = "AreaTubeFwd.";
961
962 const int AreaTubeFwd_num = 2;
963
964 double AreaTubeFwd_Z[AreaTubeFwd_num];
967
968 double AreaTubeFwd_rI[AreaTubeFwd_num];
969 for (int i = 0; i < AreaTubeFwd_num; i++)
970 { AreaTubeFwd_rI[i] = 0.0; }
971
972 double AreaTubeFwd_rO[AreaTubeFwd_num];
974 AreaTubeFwd_rO[1] = AreaTubeFwd_rO[0];
975
976
977 G4Polycone* geo_AreaTubeFwdpcon = new G4Polycone("geo_AreaTubeFwdpcon_name", 0, 2 * M_PI, AreaTubeFwd_num, AreaTubeFwd_Z,
978 AreaTubeFwd_rI, AreaTubeFwd_rO);
979
980
981
982
983
984 prep = "Lv1TaLERUp.";
985
987
988 const int Lv1TaLERUp_num = 12;
989
990 double Lv1TaLERUp_Z[Lv1TaLERUp_num];
991 double Lv1TaLERUp_rO[Lv1TaLERUp_num];
992 for (int i = 0; i < Lv1TaLERUp_num; i++) {
993 ostringstream ossZ_Lv1TaLERUp;
994 ossZ_Lv1TaLERUp << "L" << i + 1;
995
996 ostringstream ossR_Lv1TaLERUp;
997 ossR_Lv1TaLERUp << "R" << i + 1;
998
1001 }
1002
1003 double Lv1TaLERUp_rI[Lv1TaLERUp_num];
1004 for (int i = 0; i < Lv1TaLERUp_num; i++)
1005 { Lv1TaLERUp_rI[i] = 0.0; }
1006
1009
1010
1011 G4Polycone* geo_Lv1TaLERUppcon = new G4Polycone("geo_Lv1TaLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z, Lv1TaLERUp_rI,
1012 Lv1TaLERUp_rO);
1013 G4Transform3D transform_AreaTubeFwdForLER = G4Translate3D(0., 0., 0.);
1014 transform_AreaTubeFwdForLER = transform_AreaTubeFwdForLER * G4RotateY3D(-Lv1TaLERUp_A1);
1015 G4IntersectionSolid* geo_Lv1TaLERUp = new G4IntersectionSolid("geo_Lv1TaLERUp_name", geo_Lv1TaLERUppcon, geo_AreaTubeFwdpcon,
1016 transform_AreaTubeFwdForLER);
1017 G4LogicalVolume* logi_Lv1TaLERUp = new G4LogicalVolume(geo_Lv1TaLERUp, mat_Lv1TaLERUp, "logi_Lv1TaLERUp_name");
1018
1019
1020 setColor(*logi_Lv1TaLERUp,
"#0000CC");
1021 G4Transform3D transform_Lv1TaLERUp = G4Translate3D(0., 0., 0.);
1022 transform_Lv1TaLERUp = transform_Lv1TaLERUp * G4RotateY3D(Lv1TaLERUp_A1);
1023 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1TaLERUp, "phys_Lv1TaLERUp_name", &topVolume, false, 0);
1024
1025
1026
1027 prep = "Lv1SUSLERUp.";
1028 const int Lv1SUSLERUp_num = 6;
1029 double Lv1SUSLERUp_Z[Lv1SUSLERUp_num];
1030 double Lv1SUSLERUp_rO[Lv1SUSLERUp_num];
1031 double Lv1SUSLERUp_rI[Lv1SUSLERUp_num];
1032
1033 for (int i = 0; i < Lv1SUSLERUp_num; i++) {
1034 ostringstream ossZ_Lv1SUSLERUp;
1035 ossZ_Lv1SUSLERUp << "Z" << i + 1;
1036 ostringstream ossRI_Lv1SUSLERUp;
1037 ossRI_Lv1SUSLERUp << "RI" << i + 1;
1038 ostringstream ossRO_Lv1SUSLERUp;
1039 ossRO_Lv1SUSLERUp << "RO" << i + 1;
1040
1044 }
1045
1047 G4Material* mat_Lv1SUSLERUp =
Materials::get(strMat_Lv1SUSLERUp);
1048
1049 G4Polycone* geo_Lv1SUSLERUppcon = new G4Polycone("geo_Lv1SUSLERUppcon_name", 0, 2 * M_PI, Lv1SUSLERUp_num, Lv1SUSLERUp_Z,
1050 Lv1SUSLERUp_rI, Lv1SUSLERUp_rO);
1051 G4IntersectionSolid* geo_Lv1SUSLERUp = new G4IntersectionSolid("", geo_Lv1SUSLERUppcon, geo_AreaTubeFwdpcon,
1052 transform_AreaTubeFwdForLER);
1053 G4LogicalVolume* logi_Lv1SUSLERUp = new G4LogicalVolume(geo_Lv1SUSLERUp, mat_Lv1SUSLERUp, "logi_Lv1SUSLERUp_name");
1054
1055
1056 setColor(*logi_Lv1SUSLERUp,
"#666666");
1057 new G4PVPlacement(transform_Lv1TaLERUp, logi_Lv1SUSLERUp, "phys_Lv1SUSLERUp_name", &topVolume, false, 0);
1058
1059
1060
1061
1062
1063 prep = "Lv2VacLERUp.";
1064
1065 double Lv2VacLERUp_rO[Lv1TaLERUp_num];
1066 for (int i = 0; i < Lv1TaLERUp_num; i++) {
1068 }
1069
1071 G4Material* mat_Lv2VacLERUp =
Materials::get(strMat_Lv2VacLERUp);
1072
1073
1074 G4Polycone* geo_Lv2VacLERUppcon = new G4Polycone("geo_Lv2VacLERUppcon_name", 0, 2 * M_PI, Lv1TaLERUp_num, Lv1TaLERUp_Z,
1075 Lv1TaLERUp_rI, Lv2VacLERUp_rO);
1076 G4IntersectionSolid* geo_Lv2VacLERUp = new G4IntersectionSolid("geo_Lv2VacLERUp_name", geo_Lv2VacLERUppcon, geo_AreaTubeFwdpcon,
1077 transform_AreaTubeFwdForLER);
1078 G4LogicalVolume* logi_Lv2VacLERUp = new G4LogicalVolume(geo_Lv2VacLERUp, mat_Lv2VacLERUp, "logi_Lv2VacLERUp_name");
1079 if (flag_limitStep) logi_Lv2VacLERUp->SetUserLimits(new G4UserLimits(stepMax));
1080
1081
1082
1083 setColor(*logi_Lv2VacLERUp,
"#CCCCCC");
1084 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERUp, "phys_Lv2VacLERUp_name", logi_Lv1TaLERUp, false, 0);
1085
1086
1087
1088
1089
1090
1091
1092 prep = "Lv1TaHERDwn.";
1093
1095
1096 const int Lv1TaHERDwn_num = 12;
1097
1098 double Lv1TaHERDwn_Z[Lv1TaHERDwn_num];
1099 double Lv1TaHERDwn_rO[Lv1TaHERDwn_num];
1100 for (int i = 0; i < Lv1TaHERDwn_num; i++) {
1101 ostringstream ossZ_Lv1TaHERDwn;
1102 ossZ_Lv1TaHERDwn << "L" << i + 1;
1103
1104 ostringstream ossR_Lv1TaHERDwn;
1105 ossR_Lv1TaHERDwn << "R" << i + 1;
1106
1109 }
1110
1111 double Lv1TaHERDwn_rI[Lv1TaHERDwn_num];
1112 for (int i = 0; i < Lv1TaHERDwn_num; i++)
1113 { Lv1TaHERDwn_rI[i] = 0.0; }
1114
1116 G4Material* mat_Lv1TaHERDwn =
Materials::get(strMat_Lv1TaHERDwn);
1117
1118
1119 G4Polycone* geo_Lv1TaHERDwnpcon = new G4Polycone("geo_Lv1TaHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1120 Lv1TaHERDwn_rI, Lv1TaHERDwn_rO);
1121 G4Transform3D transform_AreaTubeFwdForHER = G4Translate3D(0., 0., 0.);
1122 transform_AreaTubeFwdForHER = transform_AreaTubeFwdForHER * G4RotateY3D(-Lv1TaHERDwn_A1);
1123 G4IntersectionSolid* geo_Lv1TaHERDwn = new G4IntersectionSolid("", geo_Lv1TaHERDwnpcon, geo_AreaTubeFwdpcon,
1124 transform_AreaTubeFwdForHER);
1125 G4LogicalVolume* logi_Lv1TaHERDwn = new G4LogicalVolume(geo_Lv1TaHERDwn, mat_Lv1TaHERDwn, "logi_Lv1TaHERDwn_name");
1126
1127
1128 setColor(*logi_Lv1TaHERDwn,
"#00CC00");
1129 G4Transform3D transform_Lv1TaHERDwn = G4Translate3D(0., 0., 0.);
1130 transform_Lv1TaHERDwn = transform_Lv1TaHERDwn * G4RotateY3D(Lv1TaHERDwn_A1);
1131 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1TaHERDwn, "phys_Lv1TaHERDwn_name", &topVolume, false, 0);
1132
1133
1134
1135 prep = "Lv1SUSHERDwn.";
1136 const int Lv1SUSHERDwn_num = 6;
1137 double Lv1SUSHERDwn_Z[Lv1SUSHERDwn_num];
1138 double Lv1SUSHERDwn_rO[Lv1SUSHERDwn_num];
1139 double Lv1SUSHERDwn_rI[Lv1SUSHERDwn_num];
1140
1141 for (int i = 0; i < Lv1SUSHERDwn_num; i++) {
1142 ostringstream ossZ_Lv1SUSHERDwn;
1143 ossZ_Lv1SUSHERDwn << "Z" << i + 1;
1144 ostringstream ossRI_Lv1SUSHERDwn;
1145 ossRI_Lv1SUSHERDwn << "RI" << i + 1;
1146 ostringstream ossRO_Lv1SUSHERDwn;
1147 ossRO_Lv1SUSHERDwn << "RO" << i + 1;
1148
1152 }
1153
1155 G4Material* mat_Lv1SUSHERDwn =
Materials::get(strMat_Lv1SUSHERDwn);
1156
1157
1158 G4Polycone* geo_Lv1SUSHERDwnpcon = new G4Polycone("geo_Lv1SUSHERDwnpcon_name", 0, 2 * M_PI, Lv1SUSHERDwn_num, Lv1SUSHERDwn_Z,
1159 Lv1SUSHERDwn_rI, Lv1SUSHERDwn_rO);
1160 G4IntersectionSolid* geo_Lv1SUSHERDwn = new G4IntersectionSolid("", geo_Lv1SUSHERDwnpcon, geo_AreaTubeFwdpcon,
1161 transform_AreaTubeFwdForHER);
1162 G4LogicalVolume* logi_Lv1SUSHERDwn = new G4LogicalVolume(geo_Lv1SUSHERDwn, mat_Lv1SUSHERDwn, "logi_Lv1SUSHERDwn_name");
1163
1164
1165 setColor(*logi_Lv1SUSHERDwn,
"#666666");
1166 new G4PVPlacement(transform_Lv1TaHERDwn, logi_Lv1SUSHERDwn, "phys_Lv1SUSHERDwn_name", &topVolume, false, 0);
1167
1168
1169
1170
1171
1172 prep = "Lv2VacHERDwn.";
1173
1174 double Lv2VacHERDwn_rO[Lv1TaHERDwn_num];
1175 for (int i = 0; i < Lv1TaHERDwn_num; i++) {
1177 }
1178
1180 G4Material* mat_Lv2VacHERDwn =
Materials::get(strMat_Lv2VacHERDwn);
1181
1182
1183 G4Polycone* geo_Lv2VacHERDwnpcon = new G4Polycone("geo_Lv2VacHERDwnpcon_name", 0, 2 * M_PI, Lv1TaHERDwn_num, Lv1TaHERDwn_Z,
1184 Lv1TaHERDwn_rI, Lv2VacHERDwn_rO);
1185 G4IntersectionSolid* geo_Lv2VacHERDwn = new G4IntersectionSolid("", geo_Lv2VacHERDwnpcon, geo_AreaTubeFwdpcon,
1186 transform_AreaTubeFwdForHER);
1187 G4LogicalVolume* logi_Lv2VacHERDwn = new G4LogicalVolume(geo_Lv2VacHERDwn, mat_Lv2VacHERDwn, "logi_Lv2VacHERDwn_name");
1188 if (flag_limitStep) logi_Lv2VacHERDwn->SetUserLimits(new G4UserLimits(stepMax));
1189
1190
1191 setColor(*logi_Lv2VacHERDwn,
"#CCCCCC");
1192 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERDwn, "phys_Lv2VacHERDwn_name", logi_Lv1TaHERDwn, false, 0);
1193
1194
1195
1196
1199
1202
1203
1204 prep = "AreaTubeBwd.";
1205
1206 const int AreaTubeBwd_num = 2;
1207
1208 double AreaTubeBwd_Z[AreaTubeBwd_num];
1211
1212 double AreaTubeBwd_rI[AreaTubeBwd_num];
1213 for (int i = 0; i < AreaTubeBwd_num; i++)
1214 { AreaTubeBwd_rI[i] = 0.0; }
1215
1216 double AreaTubeBwd_rO[AreaTubeBwd_num];
1218 AreaTubeBwd_rO[1] = AreaTubeBwd_rO[0];
1219
1220
1221 G4Polycone* geo_AreaTubeBwdpcon = new G4Polycone("geo_AreaTubeBwdpcon_name", 0, 2 * M_PI, AreaTubeBwd_num, AreaTubeBwd_Z,
1222 AreaTubeBwd_rI, AreaTubeBwd_rO);
1223
1224
1225
1226
1227
1228 prep = "Lv1TaHERUp.";
1229
1231
1232 const int Lv1TaHERUp_num = 12;
1233 double Lv1TaHERUp_Z[Lv1TaHERUp_num];
1234 double Lv1TaHERUp_rO[Lv1TaHERUp_num];
1235 for (int i = 0; i < Lv1TaHERUp_num; i++) {
1236 ostringstream ossZ_Lv1TaHERUp;
1237 ossZ_Lv1TaHERUp << "L" << i + 1;
1238
1239 ostringstream ossR_Lv1TaHERUp;
1240 ossR_Lv1TaHERUp << "R" << i + 1;
1241
1244 }
1245
1246 double Lv1TaHERUp_rI[Lv1TaHERUp_num];
1247 for (int i = 0; i < Lv1TaHERUp_num; i++)
1248 { Lv1TaHERUp_rI[i] = 0.0; }
1249
1252
1253
1254 G4Polycone* geo_Lv1TaHERUppcon = new G4Polycone("geo_Lv1TaHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z, Lv1TaHERUp_rI,
1255 Lv1TaHERUp_rO);
1256 G4Transform3D transform_AreaTubeBwdForHER = G4Translate3D(0., 0., 0.);
1257 transform_AreaTubeBwdForHER = transform_AreaTubeBwdForHER * G4RotateY3D(-Lv1TaHERUp_A1);
1258 G4IntersectionSolid* geo_Lv1TaHERUp = new G4IntersectionSolid("", geo_Lv1TaHERUppcon, geo_AreaTubeBwdpcon,
1259 transform_AreaTubeBwdForHER);
1260 G4LogicalVolume* logi_Lv1TaHERUp = new G4LogicalVolume(geo_Lv1TaHERUp, mat_Lv1TaHERUp, "logi_Lv1TaHERUp_name");
1261
1262
1263 setColor(*logi_Lv1TaHERUp,
"#00CC00");
1264 G4Transform3D transform_Lv1TaHERUp = G4Translate3D(0., 0., 0.);
1265 transform_Lv1TaHERUp = transform_Lv1TaHERUp * G4RotateY3D(Lv1TaHERUp_A1);
1266 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1TaHERUp, "phys_Lv1TaHERUp_name", &topVolume, false, 0);
1267
1268
1269
1270 prep = "Lv1SUSHERUp.";
1271 const int Lv1SUSHERUp_num = 6;
1272 double Lv1SUSHERUp_Z[Lv1SUSHERUp_num];
1273 double Lv1SUSHERUp_rO[Lv1SUSHERUp_num];
1274 double Lv1SUSHERUp_rI[Lv1SUSHERUp_num];
1275
1276 for (int i = 0; i < Lv1SUSHERUp_num; i++) {
1277 ostringstream ossZ_Lv1SUSHERUp;
1278 ossZ_Lv1SUSHERUp << "Z" << i + 1;
1279 ostringstream ossRI_Lv1SUSHERUp;
1280 ossRI_Lv1SUSHERUp << "RI" << i + 1;
1281 ostringstream ossRO_Lv1SUSHERUp;
1282 ossRO_Lv1SUSHERUp << "RO" << i + 1;
1283
1287 }
1288
1290 G4Material* mat_Lv1SUSHERUp =
Materials::get(strMat_Lv1SUSHERUp);
1291
1292 G4Polycone* geo_Lv1SUSHERUppcon = new G4Polycone("geo_Lv1SUSHERUppcon_name", 0, 2 * M_PI, Lv1SUSHERUp_num, Lv1SUSHERUp_Z,
1293 Lv1SUSHERUp_rI, Lv1SUSHERUp_rO);
1294 G4IntersectionSolid* geo_Lv1SUSHERUp = new G4IntersectionSolid("", geo_Lv1SUSHERUppcon, geo_AreaTubeBwdpcon,
1295 transform_AreaTubeFwdForHER);
1296 G4LogicalVolume* logi_Lv1SUSHERUp = new G4LogicalVolume(geo_Lv1SUSHERUp, mat_Lv1SUSHERUp, "logi_Lv1SUSHERUp_name");
1297
1298
1299 setColor(*logi_Lv1SUSHERUp,
"#666666");
1300 new G4PVPlacement(transform_Lv1TaHERUp, logi_Lv1SUSHERUp, "phys_Lv1SUSHERUp_name", &topVolume, false, 0);
1301
1302
1303
1304
1305
1306 prep = "Lv2VacHERUp.";
1307
1308 double Lv2VacHERUp_rO[Lv1TaHERUp_num];
1309 for (int i = 0; i < Lv1TaHERUp_num; i++) {
1311 }
1312
1314 G4Material* mat_Lv2VacHERUp =
Materials::get(strMat_Lv2VacHERUp);
1315
1316
1317 G4Polycone* geo_Lv2VacHERUppcon = new G4Polycone("geo_Lv2VacHERUppcon_name", 0, 2 * M_PI, Lv1TaHERUp_num, Lv1TaHERUp_Z,
1318 Lv1TaHERUp_rI, Lv2VacHERUp_rO);
1319 G4IntersectionSolid* geo_Lv2VacHERUp = new G4IntersectionSolid("", geo_Lv2VacHERUppcon, geo_AreaTubeBwdpcon,
1320 transform_AreaTubeFwdForHER);
1321 G4LogicalVolume* logi_Lv2VacHERUp = new G4LogicalVolume(geo_Lv2VacHERUp, mat_Lv2VacHERUp, "logi_Lv2VacHERUp_name");
1322 if (flag_limitStep) logi_Lv2VacHERUp->SetUserLimits(new G4UserLimits(stepMax));
1323
1324
1325 setColor(*logi_Lv2VacHERUp,
"#CCCCCC");
1326 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacHERUp, "phys_Lv2VacHERUp_name", logi_Lv1TaHERUp, false, 0);
1327
1328
1329
1330
1331
1332
1333
1334
1335 prep = "Lv1TaLERDwn.";
1336
1338
1339 const int Lv1TaLERDwn_num = 12;
1340
1341 double Lv1TaLERDwn_Z[Lv1TaLERDwn_num];
1342 double Lv1TaLERDwn_rO[Lv1TaLERDwn_num];
1343 for (int i = 0; i < Lv1TaLERDwn_num; i++) {
1344 ostringstream ossZ_Lv1TaLERDwn;
1345 ossZ_Lv1TaLERDwn << "L" << i + 1;
1346
1347 ostringstream ossR_Lv1TaLERDwn;
1348 ossR_Lv1TaLERDwn << "R" << i + 1;
1349
1352 }
1353
1354 double Lv1TaLERDwn_rI[Lv1TaLERDwn_num];
1355 for (int i = 0; i < Lv1TaLERDwn_num; i++)
1356 { Lv1TaLERDwn_rI[i] = 0.0; }
1357
1359 G4Material* mat_Lv1TaLERDwn =
Materials::get(strMat_Lv1TaLERDwn);
1360
1361
1362 G4Polycone* geo_Lv1TaLERDwnpcon = new G4Polycone("geo_Lv1TaLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1363 Lv1TaLERDwn_rI, Lv1TaLERDwn_rO);
1364 G4Transform3D transform_AreaTubeBwdForLER = G4Translate3D(0., 0., 0.);
1365 transform_AreaTubeBwdForLER = transform_AreaTubeBwdForLER * G4RotateY3D(-Lv1TaLERDwn_A1);
1366 G4IntersectionSolid* geo_Lv1TaLERDwn = new G4IntersectionSolid("", geo_Lv1TaLERDwnpcon, geo_AreaTubeBwdpcon,
1367 transform_AreaTubeBwdForLER);
1368 G4LogicalVolume* logi_Lv1TaLERDwn = new G4LogicalVolume(geo_Lv1TaLERDwn, mat_Lv1TaLERDwn, "logi_Lv1TaLERDwn_name");
1369
1370
1371 setColor(*logi_Lv1TaLERDwn,
"#0000CC");
1372 G4Transform3D transform_Lv1TaLERDwn = G4Translate3D(0., 0., 0.);
1373 transform_Lv1TaLERDwn = transform_Lv1TaLERDwn * G4RotateY3D(Lv1TaLERDwn_A1);
1374 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1TaLERDwn, "phys_Lv1TaLERDwn_name", &topVolume, false, 0);
1375
1376
1377
1378 prep = "Lv1SUSLERDwn.";
1379 const int Lv1SUSLERDwn_num = 6;
1380 double Lv1SUSLERDwn_Z[Lv1SUSLERDwn_num];
1381 double Lv1SUSLERDwn_rO[Lv1SUSLERDwn_num];
1382 double Lv1SUSLERDwn_rI[Lv1SUSLERDwn_num];
1383
1384 for (int i = 0; i < Lv1SUSLERDwn_num; i++) {
1385 ostringstream ossZ_Lv1SUSLERDwn;
1386 ossZ_Lv1SUSLERDwn << "Z" << i + 1;
1387 ostringstream ossRI_Lv1SUSLERDwn;
1388 ossRI_Lv1SUSLERDwn << "RI" << i + 1;
1389 ostringstream ossRO_Lv1SUSLERDwn;
1390 ossRO_Lv1SUSLERDwn << "RO" << i + 1;
1391
1395 }
1396
1398 G4Material* mat_Lv1SUSLERDwn =
Materials::get(strMat_Lv1SUSLERDwn);
1399
1400 G4Polycone* geo_Lv1SUSLERDwnpcon = new G4Polycone("geo_Lv1SUSLERDwnpcon_name", 0, 2 * M_PI, Lv1SUSLERDwn_num, Lv1SUSLERDwn_Z,
1401 Lv1SUSLERDwn_rI, Lv1SUSLERDwn_rO);
1402 G4IntersectionSolid* geo_Lv1SUSLERDwn = new G4IntersectionSolid("", geo_Lv1SUSLERDwnpcon, geo_AreaTubeBwdpcon,
1403 transform_AreaTubeFwdForHER);
1404 G4LogicalVolume* logi_Lv1SUSLERDwn = new G4LogicalVolume(geo_Lv1SUSLERDwn, mat_Lv1SUSLERDwn, "logi_Lv1SUSLERDwn_name");
1405
1406
1407 setColor(*logi_Lv1SUSLERDwn,
"#666666");
1408 new G4PVPlacement(transform_Lv1TaLERDwn, logi_Lv1SUSLERDwn, "phys_Lv1SUSLERDwn_name", &topVolume, false, 0);
1409
1410
1411
1412
1413
1414 prep = "Lv2VacLERDwn.";
1415
1416 double Lv2VacLERDwn_rO[Lv1TaLERDwn_num];
1417 for (int i = 0; i < Lv1TaLERDwn_num; i++) {
1419 }
1420
1422 G4Material* mat_Lv2VacLERDwn =
Materials::get(strMat_Lv2VacLERDwn);
1423
1424
1425 G4Polycone* geo_Lv2VacLERDwnpcon = new G4Polycone("geo_Lv2VacLERDwnpcon_name", 0, 2 * M_PI, Lv1TaLERDwn_num, Lv1TaLERDwn_Z,
1426 Lv1TaLERDwn_rI, Lv2VacLERDwn_rO);
1427 G4IntersectionSolid* geo_Lv2VacLERDwn = new G4IntersectionSolid("", geo_Lv2VacLERDwnpcon, geo_AreaTubeBwdpcon,
1428 transform_AreaTubeBwdForLER);
1429 G4LogicalVolume* logi_Lv2VacLERDwn = new G4LogicalVolume(geo_Lv2VacLERDwn, mat_Lv2VacLERDwn, "logi_Lv2VacLERDwn_name");
1430 if (flag_limitStep) logi_Lv2VacLERDwn->SetUserLimits(new G4UserLimits(stepMax));
1431
1432
1433 setColor(*logi_Lv2VacLERDwn,
"#CCCCCC");
1434 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_Lv2VacLERDwn, "phys_Lv2VacLERDwn_name", logi_Lv1TaLERDwn, false, 0);
1435
1436
1437
1438
1439
1440 G4IntersectionSolid* geo_CuFlangeFwd_x2 = new G4IntersectionSolid("geo_CuFlangeFwd_x2_name", geo_AreaTubeFwdpcon, geo_Flange,
1441 G4Translate3D(0, 0, Flange_D + Flange_T * 2));
1442 G4SubtractionSolid* geo_CuFlangeFwd_x = new G4SubtractionSolid("geo_CuFlangeFwd_x_name", geo_CuFlangeFwd_x2, geo_Lv1TaLERUp,
1443 transform_Lv1TaLERUp);
1444 G4SubtractionSolid* geo_CuFlangeFwd = new G4SubtractionSolid("geo_CuFlangeFwd_name", geo_CuFlangeFwd_x, geo_Lv1TaHERDwn,
1445 transform_Lv1TaHERDwn);
1446
1447 G4LogicalVolume* logi_CuFlangeFwd = new G4LogicalVolume(geo_CuFlangeFwd, mat_Lv1TaLERUp, "logi_CuFlangeFwd_name");
1448
1449
1450 setColor(*logi_CuFlangeFwd,
"#CCCCCC");
1451 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeFwd, "phys_CuFlangeFwd_name", &topVolume, false, 0);
1452
1453
1454
1455
1456 G4IntersectionSolid* geo_CuFlangeBwd_x2 = new G4IntersectionSolid("geo_CuFlangeBwd_x2_name", geo_AreaTubeBwdpcon, geo_Flange,
1457 G4Translate3D(0, 0, -Flange_D - Flange_T * 2));
1458 G4SubtractionSolid* geo_CuFlangeBwd_x = new G4SubtractionSolid("geo_CuFlangeBwd_x_name", geo_CuFlangeBwd_x2, geo_Lv1TaHERUp,
1459 transform_Lv1TaHERUp);
1460 G4SubtractionSolid* geo_CuFlangeBwd = new G4SubtractionSolid("geo_CuFlangeBwd_name", geo_CuFlangeBwd_x, geo_Lv1TaLERDwn,
1461 transform_Lv1TaLERDwn);
1462
1463 G4LogicalVolume* logi_CuFlangeBwd = new G4LogicalVolume(geo_CuFlangeBwd, mat_Lv1TaLERUp, "logi_CuFlangeBwd_name");
1464
1465
1466 setColor(*logi_CuFlangeBwd,
"#CCCCCC");
1467 new G4PVPlacement(0, G4ThreeVector(0, 0, 0), logi_CuFlangeBwd, "phys_CuFlangeBwd_name", &topVolume, false, 0);
1468
1471
1472
1473
1474
1475
1476 prep = "PXDMountFwd.";
1477
1484
1486 G4Material* mat_PXDMountFwd =
Materials::get(strMat_PXDMountFwd);
1487
1488
1489 G4VSolid* geo_PXDMountFwd_a = new G4Tubs("geo_PXDMountFwd_a", 0, PXDMountFwd_R1, PXDMountFwd_D1 / 2, 0, 2 * M_PI);
1490 G4VSolid* geo_PXDMountFwd_b = new G4SubtractionSolid("geo_PXDMountFwd_b", geo_PXDMountFwd_a, geo_Lv1TaFwd_d, G4Translate3D(0., 0.,
1491 -(-Lv1TaFwd_L1 / 2.0 + Lv1TaFwd_aL1 + Lv1TaFwd_aL2 + Lv1TaFwd_aL3) + PXDMountFwd_D1 / 2));
1492 G4VSolid* geo_PXDMountFwd_c = new G4Tubs("geo_PXDMountFwd_c", 0, PXDMountFwd_R2, 100, 0, 2 * M_PI);
1493 G4VSolid* geo_PXDMountFwd_d = new G4Box("geo_PXDMountFwd_d", PXDMountFwd_R1 - PXDMountFwd_L1, 100, PXDMountFwd_R2);
1494
1495 G4VSolid* geo_PXDMountFwd_p1 = new G4SubtractionSolid("geo_PXDMountFwd_p1", geo_PXDMountFwd_b, geo_PXDMountFwd_c,
1496 G4Translate3D(+PXDMountFwd_L1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1497 G4VSolid* geo_PXDMountFwd_p2 = new G4SubtractionSolid("geo_PXDMountFwd_p2", geo_PXDMountFwd_p1, geo_PXDMountFwd_c,
1498 G4Translate3D(+PXDMountFwd_L1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1499 G4VSolid* geo_PXDMountFwd_p3 = new G4SubtractionSolid("geo_PXDMountFwd_p3", geo_PXDMountFwd_p2, geo_PXDMountFwd_c,
1500 G4Translate3D(-PXDMountFwd_L1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1501 G4VSolid* geo_PXDMountFwd_p4 = new G4SubtractionSolid("geo_PXDMountFwd_p4", geo_PXDMountFwd_p3, geo_PXDMountFwd_c,
1502 G4Translate3D(-PXDMountFwd_L1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2))*G4RotateX3D(M_PI / 2));
1503
1504 G4VSolid* geo_PXDMountFwd_q1 = new G4SubtractionSolid("geo_PXDMountFwd_q1", geo_PXDMountFwd_p4, geo_PXDMountFwd_d,
1505 G4Translate3D(+PXDMountFwd_R1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1506 G4VSolid* geo_PXDMountFwd_q2 = new G4SubtractionSolid("geo_PXDMountFwd_q2", geo_PXDMountFwd_q1, geo_PXDMountFwd_d,
1507 G4Translate3D(+PXDMountFwd_R1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1508 G4VSolid* geo_PXDMountFwd_q3 = new G4SubtractionSolid("geo_PXDMountFwd_q3", geo_PXDMountFwd_q2, geo_PXDMountFwd_d,
1509 G4Translate3D(-PXDMountFwd_R1, 0., +(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1510 G4VSolid* geo_PXDMountFwd_q4 = new G4SubtractionSolid("geo_PXDMountFwd_q4", geo_PXDMountFwd_q3, geo_PXDMountFwd_d,
1511 G4Translate3D(-PXDMountFwd_R1, 0., -(PXDMountFwd_D1 / 2 - PXDMountFwd_L2)));
1512
1513 G4VSolid* geo_PXDMountFwd = geo_PXDMountFwd_q4;
1514
1515 G4LogicalVolume* logi_PXDMountFwd = new G4LogicalVolume(geo_PXDMountFwd, mat_PXDMountFwd, "logi_PXDMountFwd_name");
1516 setColor(*logi_PXDMountFwd,
"#333333");
1517
1518 new G4PVPlacement(0, G4ThreeVector(0, 0, +PXDMountFwd_D1 / 2 + PXDMountFwd_Z1), logi_PXDMountFwd, "phys_PXDMountFwd_name",
1519 &topVolume, false, 0);
1520
1521
1522
1525 G4VSolid* geo_PXDMountFwd_s1 = new G4Tubs("geo_PXDMountFwd_s1", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1526 2 * M_PI);
1527 G4VSolid* geo_PXDMountFwd_s2 = new G4Tubs("geo_PXDMountFwd_s2", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1528 2 * M_PI);
1529 G4VSolid* geo_PXDMountFwd_s3 = new G4Tubs("geo_PXDMountFwd_s3", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1530 2 * M_PI);
1531 G4VSolid* geo_PXDMountFwd_s4 = new G4Tubs("geo_PXDMountFwd_s4", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1532 2 * M_PI);
1533
1535
1536 G4Rotate3D rotate_PXDMountFwd = G4RotateX3D(-M_PI / 2.0 /
Unit::rad);
1537 G4Transform3D transform_PXDMountFwd_s1 = G4Translate3D(+PXDMountFwd_L1, 0,
1538 PXDMountFwd_Z1 + PXDMountFwd_D1 - PXDMountFwd_L2) * rotate_PXDMountFwd;
1539 G4Transform3D transform_PXDMountFwd_s2 = G4Translate3D(+PXDMountFwd_L1, 0, PXDMountFwd_Z1 + PXDMountFwd_L2) * rotate_PXDMountFwd;
1540 G4Transform3D transform_PXDMountFwd_s3 = G4Translate3D(-PXDMountFwd_L1, 0,
1541 PXDMountFwd_Z1 + PXDMountFwd_D1 - PXDMountFwd_L2) * rotate_PXDMountFwd;
1542 G4Transform3D transform_PXDMountFwd_s4 = G4Translate3D(-PXDMountFwd_L1, 0, PXDMountFwd_Z1 + PXDMountFwd_L2) * rotate_PXDMountFwd;
1543
1544 G4LogicalVolume* logi_PXDMountFwd_s1 = new G4LogicalVolume(geo_PXDMountFwd_s1, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s1");
1545 G4LogicalVolume* logi_PXDMountFwd_s2 = new G4LogicalVolume(geo_PXDMountFwd_s2, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s2");
1546 G4LogicalVolume* logi_PXDMountFwd_s3 = new G4LogicalVolume(geo_PXDMountFwd_s3, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s3");
1547 G4LogicalVolume* logi_PXDMountFwd_s4 = new G4LogicalVolume(geo_PXDMountFwd_s4, mat_PXDMountFwd_s, "logi_PXDMountFwd_name_s4");
1548
1549 new G4PVPlacement(transform_PXDMountFwd_s1, logi_PXDMountFwd_s1, "phys_PXDMountFwd_name_s1", &topVolume, false, 0);
1550 new G4PVPlacement(transform_PXDMountFwd_s2, logi_PXDMountFwd_s2, "phys_PXDMountFwd_name_s2", &topVolume, false, 0);
1551 new G4PVPlacement(transform_PXDMountFwd_s3, logi_PXDMountFwd_s3, "phys_PXDMountFwd_name_s3", &topVolume, false, 0);
1552 new G4PVPlacement(transform_PXDMountFwd_s4, logi_PXDMountFwd_s4, "phys_PXDMountFwd_name_s4", &topVolume, false, 0);
1553
1554
1555
1556 prep = "PXDMountFixtureFwd.";
1557
1564 double PXDMountFixtureFwd_inner_cut_phi = PXDMountFixtureFwd_FL / (PXDMountFwd_R1 + PXDMountFixtureFwd_T1);
1565 double PXDMountFixtureFwd_outter_uni_phi = (1 / 6.0) * M_PI - PXDMountFixtureFwd_FL / PXDMountFixtureFwd_R1;
1566
1568 G4Material* mat_PXDMountFixtureFwd =
Materials::get(strMat_PXDMountFixtureFwd);
1569
1570
1571 G4VSolid* geo_PXDMountFixtureFwd_a = new G4Tubs("geo_PXDMountFixtureFwd_a", 0, PXDMountFixtureFwd_R1 - PXDMountFixtureFwd_T2,
1572 PXDMountFixtureFwd_D1 / 2, 0,
1573 2 * M_PI);
1574 G4VSolid* geo_PXDMountFixtureFwd_b =
new G4Box(
"geo_PXDMountFixtureFwd_b", PXDMountFixtureFwd_R1 * 0.5, 0.1 *
Unit::cm /
Unit::mm,
1575 100);
1576
1577 G4VSolid* geo_PXDMountFixtureFwd_b1 = new G4Box("geo_PXDMountFixtureFwd_b1", PXDMountFwd_R1 + PXDMountFixtureFwd_T1,
1578 PXDMountFixtureFwd_FL * 0.5, 100);
1579 G4VSolid* geo_PXDMountFixtureFwd_b2 = new G4Tubs("geo_PXDMountFixtureFwd_b2", PXDMountFwd_R1 + PXDMountFixtureFwd_T1,
1580 PXDMountFixtureFwd_R1, PXDMountFixtureFwd_D1 / 2,
1581 0, PXDMountFixtureFwd_outter_uni_phi);
1584
1585 G4VSolid* geo_PXDMountFixtureFwd_a1 = new G4Tubs("geo_PXDMountFixtureFwd_a1", 0, PXDMountFwd_R1, 100, 0, 2 * M_PI);
1586
1587 G4VSolid* geo_PXDMountFixtureFwd_c1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_c1", geo_PXDMountFixtureFwd_a,
1588 geo_PXDMountFixtureFwd_a1);
1589
1590
1591 G4VSolid* geo_PXDMountFixtureFwd_d1 = geo_PXDMountFixtureFwd_c1;
1592 for (int i = 0; i < 4; ++i) {
1593
1594 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1595 geo_PXDMountFixtureFwd_b1, G4RotateZ3D(i * 0.25 * M_PI));
1596 }
1597 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1598 geo_PXDMountFixtureFwd_b, G4Translate3D(PXDMountFixtureFwd_R1, - PXDMountFixtureFwd_FL * 0.5, 0));
1599 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1600 geo_PXDMountFixtureFwd_b, G4Translate3D(-PXDMountFixtureFwd_R1, PXDMountFixtureFwd_FL * 0.5, 0));
1601
1602
1603 double PXDMountFixtureFwd_R1_temp = PXDMountFixtureFwd_R1 - PXDMountFixtureFwd_T2;
1604 for (int i = 2; i < 7; i += 4) {
1605
1606 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1607 geo_PXDMountFixtureFwd_b3,
1608 G4Translate3D(PXDMountFixtureFwd_R1_temp * cos(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1609 PXDMountFixtureFwd_R1_temp * sin(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1610 0)*G4RotateZ3D(i * 0.25 * M_PI - 0.5 * PXDMountFixtureFwd_inner_cut_phi));
1611
1612 geo_PXDMountFixtureFwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d1,
1613 geo_PXDMountFixtureFwd_b3,
1614 G4Translate3D(PXDMountFixtureFwd_R1_temp * cos(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1615 PXDMountFixtureFwd_R1_temp * sin(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi),
1616 0)*G4RotateZ3D(i * 0.25 * M_PI + 0.5 * PXDMountFixtureFwd_inner_cut_phi));
1617
1618 }
1619 G4VSolid* geo_PXDMountFixtureFwd_d2 = geo_PXDMountFixtureFwd_d1;
1620 for (int i = 0; i < 12; ++i) {
1621 if (i == 2 || i == 3 || i == 8 || i == 9) continue;
1622 geo_PXDMountFixtureFwd_d2 = new G4UnionSolid("geo_PXDMountFixtureFwd_d1", geo_PXDMountFixtureFwd_d2,
1623 geo_PXDMountFixtureFwd_b2, G4RotateZ3D(i * (1 / 6.0) * M_PI + ((1 / 12.0)*M_PI - 0.5 * PXDMountFixtureFwd_outter_uni_phi)));
1624
1625 }
1626
1627 G4VSolid* geo_PXDMountFixtureFwd = geo_PXDMountFixtureFwd_d2;
1628 G4LogicalVolume* logi_PXDMountFixtureFwd = new G4LogicalVolume(geo_PXDMountFixtureFwd, mat_PXDMountFixtureFwd,
1629 "logi_PXDMountFixtureFwd_name");
1630 setColor(*logi_PXDMountFixtureFwd,
"#333333");
1631
1632 new G4PVPlacement(0, G4ThreeVector(0, 0, +PXDMountFixtureFwd_D1 / 2 + PXDMountFixtureFwd_Z1), logi_PXDMountFixtureFwd,
1633 "phys_PXDMountFixtureFwd_name",
1634 &topVolume, false, 0);
1635
1636
1637
1638
1639 prep = "PXDMountBwd.";
1640
1647
1649 G4Material* mat_PXDMountBwd =
Materials::get(strMat_PXDMountBwd);
1650
1651
1652 G4VSolid* geo_PXDMountBwd_a = new G4Tubs("geo_PXDMountBwd_a", 0, PXDMountBwd_R1, PXDMountBwd_D1 / 2, 0, 2 * M_PI);
1653 G4VSolid* geo_PXDMountBwd_b = new G4SubtractionSolid("geo_PXDMountBwd_b", geo_PXDMountBwd_a, geo_Lv1TaBwd_d, G4Translate3D(0., 0.,
1654 -(+Lv1TaBwd_L1 / 2.0 - (Lv1TaBwd_aL1 + Lv1TaBwd_aL2 + Lv1TaBwd_aL3)) - PXDMountBwd_D1 / 2));
1655 G4VSolid* geo_PXDMountBwd_c = new G4Tubs("geo_PXDMountBwd_c", 0, PXDMountBwd_R2, 100, 0, 2 * M_PI);
1656 G4VSolid* geo_PXDMountBwd_d = new G4Box("geo_PXDMountBwd_d", PXDMountBwd_R1 - PXDMountBwd_L1, 100, PXDMountBwd_R2);
1657
1658 G4VSolid* geo_PXDMountBwd_p1 = new G4SubtractionSolid("geo_PXDMountBwd_p1", geo_PXDMountBwd_b, geo_PXDMountBwd_c,
1659 G4Translate3D(+PXDMountBwd_L1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1660 G4VSolid* geo_PXDMountBwd_p2 = new G4SubtractionSolid("geo_PXDMountBwd_p2", geo_PXDMountBwd_p1, geo_PXDMountBwd_c,
1661 G4Translate3D(+PXDMountBwd_L1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1662 G4VSolid* geo_PXDMountBwd_p3 = new G4SubtractionSolid("geo_PXDMountBwd_p3", geo_PXDMountBwd_p2, geo_PXDMountBwd_c,
1663 G4Translate3D(-PXDMountBwd_L1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1664 G4VSolid* geo_PXDMountBwd_p4 = new G4SubtractionSolid("geo_PXDMountBwd_p4", geo_PXDMountBwd_p3, geo_PXDMountBwd_c,
1665 G4Translate3D(-PXDMountBwd_L1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2))*G4RotateX3D(M_PI / 2));
1666
1667 G4VSolid* geo_PXDMountBwd_q1 = new G4SubtractionSolid("geo_PXDMountBwd_q1", geo_PXDMountBwd_p4, geo_PXDMountBwd_d,
1668 G4Translate3D(+PXDMountBwd_R1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1669 G4VSolid* geo_PXDMountBwd_q2 = new G4SubtractionSolid("geo_PXDMountBwd_q2", geo_PXDMountBwd_q1, geo_PXDMountBwd_d,
1670 G4Translate3D(+PXDMountBwd_R1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1671 G4VSolid* geo_PXDMountBwd_q3 = new G4SubtractionSolid("geo_PXDMountBwd_q3", geo_PXDMountBwd_q2, geo_PXDMountBwd_d,
1672 G4Translate3D(-PXDMountBwd_R1, 0., +(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1673 G4VSolid* geo_PXDMountBwd_q4 = new G4SubtractionSolid("geo_PXDMountBwd_q4", geo_PXDMountBwd_q3, geo_PXDMountBwd_d,
1674 G4Translate3D(-PXDMountBwd_R1, 0., -(PXDMountBwd_D1 / 2 - PXDMountBwd_L2)));
1675
1676 G4VSolid* geo_PXDMountBwd = geo_PXDMountBwd_q4;
1677
1678 G4LogicalVolume* logi_PXDMountBwd = new G4LogicalVolume(geo_PXDMountBwd, mat_PXDMountBwd, "logi_PXDMountBwd_name");
1679 setColor(*logi_PXDMountBwd,
"#333333");
1680
1681 new G4PVPlacement(0, G4ThreeVector(0, 0, -PXDMountBwd_D1 / 2 - PXDMountBwd_Z1), logi_PXDMountBwd, "phys_PXDMountBwd_name",
1682 &topVolume, false, 0);
1683
1684
1685
1686 G4VSolid* geo_PXDMountBwd_s1 = new G4Tubs("geo_PXDMountBwd_s1", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1687 2 * M_PI);
1688 G4VSolid* geo_PXDMountBwd_s2 = new G4Tubs("geo_PXDMountBwd_s2", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1689 2 * M_PI);
1690 G4VSolid* geo_PXDMountBwd_s3 = new G4Tubs("geo_PXDMountBwd_s3", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1691 2 * M_PI);
1692 G4VSolid* geo_PXDMountBwd_s4 = new G4Tubs("geo_PXDMountBwd_s4", 0, PXDMountFixture_screw_radius, PXDMountFixture_screw_length, 0,
1693 2 * M_PI);
1694
1696
1697 G4Rotate3D rotate_PXDMountBwd = G4RotateX3D(-M_PI / 2.0 /
Unit::rad);
1698 G4Transform3D transform_PXDMountBwd_s1 = G4Translate3D(+PXDMountBwd_L1, 0,
1699 -PXDMountBwd_Z1 - PXDMountBwd_D1 + PXDMountBwd_L2) * rotate_PXDMountBwd;
1700 G4Transform3D transform_PXDMountBwd_s2 = G4Translate3D(+PXDMountBwd_L1, 0, -PXDMountBwd_Z1 - PXDMountBwd_L2) * rotate_PXDMountBwd;
1701 G4Transform3D transform_PXDMountBwd_s3 = G4Translate3D(-PXDMountBwd_L1, 0,
1702 -PXDMountBwd_Z1 - PXDMountBwd_D1 + PXDMountBwd_L2) * rotate_PXDMountBwd;
1703 G4Transform3D transform_PXDMountBwd_s4 = G4Translate3D(-PXDMountBwd_L1, 0, -PXDMountBwd_Z1 - PXDMountBwd_L2) * rotate_PXDMountBwd;
1704
1705 G4LogicalVolume* logi_PXDMountBwd_s1 = new G4LogicalVolume(geo_PXDMountBwd_s1, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s1");
1706 G4LogicalVolume* logi_PXDMountBwd_s2 = new G4LogicalVolume(geo_PXDMountBwd_s2, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s2");
1707 G4LogicalVolume* logi_PXDMountBwd_s3 = new G4LogicalVolume(geo_PXDMountBwd_s3, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s3");
1708 G4LogicalVolume* logi_PXDMountBwd_s4 = new G4LogicalVolume(geo_PXDMountBwd_s4, mat_PXDMountBwd_s, "logi_PXDMountBwd_name_s4");
1709
1710 new G4PVPlacement(transform_PXDMountBwd_s1, logi_PXDMountBwd_s1, "phys_PXDMountBwd_name_s1", &topVolume, false, 0);
1711 new G4PVPlacement(transform_PXDMountBwd_s2, logi_PXDMountBwd_s2, "phys_PXDMountBwd_name_s2", &topVolume, false, 0);
1712 new G4PVPlacement(transform_PXDMountBwd_s3, logi_PXDMountBwd_s3, "phys_PXDMountBwd_name_s3", &topVolume, false, 0);
1713 new G4PVPlacement(transform_PXDMountBwd_s4, logi_PXDMountBwd_s4, "phys_PXDMountBwd_name_s4", &topVolume, false, 0);
1714
1715
1716
1717 prep = "PXDMountFixtureBwd.";
1718
1725 double PXDMountFixtureBwd_inner_cut_phi = PXDMountFixtureBwd_FL / (PXDMountBwd_R1 + PXDMountFixtureBwd_T1);
1726 double PXDMountFixtureBwd_outter_uni_phi = (1 / 6.0) * M_PI - PXDMountFixtureBwd_FL / PXDMountFixtureBwd_R1;
1727
1729 G4Material* mat_PXDMountFixtureBwd =
Materials::get(strMat_PXDMountFixtureBwd);
1730
1731
1732 G4VSolid* geo_PXDMountFixtureBwd_a = new G4Tubs("geo_PXDMountFixtureBwd_a", 0, PXDMountFixtureBwd_R1 - PXDMountFixtureBwd_T2,
1733 PXDMountFixtureBwd_D1 / 2, 0,
1734 2 * M_PI);
1735 G4VSolid* geo_PXDMountFixtureBwd_b =
new G4Box(
"geo_PXDMountFixtureBwd_b", PXDMountFixtureBwd_R1 * 0.5, 0.1 *
Unit::cm /
Unit::mm,
1736 100);
1737
1738 G4VSolid* geo_PXDMountFixtureBwd_b1 = new G4Box("geo_PXDMountFixtureBwd_b1", PXDMountBwd_R1 + PXDMountFixtureBwd_T1,
1739 PXDMountFixtureBwd_FL * 0.5, 100);
1740 G4VSolid* geo_PXDMountFixtureBwd_b2 = new G4Tubs("geo_PXDMountFixtureBwd_b2", PXDMountBwd_R1 + PXDMountFixtureBwd_T1,
1741 PXDMountFixtureBwd_R1, PXDMountFixtureBwd_D1 / 2,
1742 0, PXDMountFixtureBwd_outter_uni_phi);
1745
1746 G4VSolid* geo_PXDMountFixtureBwd_a1 = new G4Tubs("geo_PXDMountFixtureBwd_a1", 0, PXDMountBwd_R1, 100, 0, 2 * M_PI);
1747
1748 G4VSolid* geo_PXDMountFixtureBwd_c1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_c1", geo_PXDMountFixtureBwd_a,
1749 geo_PXDMountFixtureBwd_a1);
1750
1751
1752 G4VSolid* geo_PXDMountFixtureBwd_d1 = geo_PXDMountFixtureBwd_c1;
1753 for (int i = 0; i < 4; ++i) {
1754
1755 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1756 geo_PXDMountFixtureBwd_b1, G4RotateZ3D(i * 0.25 * M_PI));
1757 }
1758 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1759 geo_PXDMountFixtureBwd_b, G4Translate3D(PXDMountFixtureBwd_R1, - PXDMountFixtureBwd_FL * 0.5, 0));
1760 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1761 geo_PXDMountFixtureBwd_b, G4Translate3D(-PXDMountFixtureBwd_R1, PXDMountFixtureBwd_FL * 0.5, 0));
1762
1763
1764 double PXDMountFixtureBwd_R1_temp = PXDMountFixtureBwd_R1 - PXDMountFixtureBwd_T2;
1765 for (int i = 2; i < 7; i += 4) {
1766
1767 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1768 geo_PXDMountFixtureBwd_b3,
1769 G4Translate3D(PXDMountFixtureBwd_R1_temp * cos(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1770 PXDMountFixtureBwd_R1_temp * sin(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1771 0)*G4RotateZ3D(i * 0.25 * M_PI - 0.5 * PXDMountFixtureBwd_inner_cut_phi));
1772
1773 geo_PXDMountFixtureBwd_d1 = new G4SubtractionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d1,
1774 geo_PXDMountFixtureBwd_b3,
1775 G4Translate3D(PXDMountFixtureBwd_R1_temp * cos(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1776 PXDMountFixtureBwd_R1_temp * sin(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi),
1777 0)*G4RotateZ3D(i * 0.25 * M_PI + 0.5 * PXDMountFixtureBwd_inner_cut_phi));
1778
1779 }
1780 G4VSolid* geo_PXDMountFixtureBwd_d2 = geo_PXDMountFixtureBwd_d1;
1781 for (int i = 0; i < 12; ++i) {
1782 if (i == 2 || i == 3 || i == 8 || i == 9) continue;
1783 geo_PXDMountFixtureBwd_d2 = new G4UnionSolid("geo_PXDMountFixtureBwd_d1", geo_PXDMountFixtureBwd_d2,
1784 geo_PXDMountFixtureBwd_b2, G4RotateZ3D(i * (1 / 6.0) * M_PI + ((1 / 12.0)*M_PI - 0.5 * PXDMountFixtureBwd_outter_uni_phi)));
1785
1786 }
1787
1788 G4VSolid* geo_PXDMountFixtureBwd = geo_PXDMountFixtureBwd_d2;
1789 G4LogicalVolume* logi_PXDMountFixtureBwd = new G4LogicalVolume(geo_PXDMountFixtureBwd, mat_PXDMountFixtureBwd,
1790 "logi_PXDMountFixtureBwd_name");
1791 setColor(*logi_PXDMountFixtureBwd,
"#333333");
1792
1793 new G4PVPlacement(0, G4ThreeVector(0, 0, -PXDMountFixtureBwd_D1 / 2 - PXDMountFixtureBwd_Z1), logi_PXDMountFixtureBwd,
1794 "phys_PXDMountFixtureBwd_name",
1795 &topVolume, false, 0);
1796
1797
1798
1799
1800
1801
1802 int Index_sensi = 11;
1803 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1804 logi_Lv3AuCoat->SetSensitiveDetector(
m_sensitive.back());
1805
1806 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1807 logi_Lv1TaFwd->SetSensitiveDetector(
m_sensitive.back());
1808
1809 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1810 logi_Lv1TaBwd->SetSensitiveDetector(
m_sensitive.back());
1811
1812 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1813 logi_Lv1TaLERUp->SetSensitiveDetector(
m_sensitive.back());
1814
1815 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1816 logi_Lv1SUSLERUp->SetSensitiveDetector(
m_sensitive.back());
1817
1818 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1819 logi_Lv1TaHERDwn->SetSensitiveDetector(
m_sensitive.back());
1820
1821 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1822 logi_Lv1SUSHERDwn->SetSensitiveDetector(
m_sensitive.back());
1823
1824 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1825 logi_Lv1TaHERUp->SetSensitiveDetector(
m_sensitive.back());
1826
1827 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1828 logi_Lv1SUSHERUp->SetSensitiveDetector(
m_sensitive.back());
1829
1830 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1831 logi_Lv1TaLERDwn->SetSensitiveDetector(
m_sensitive.back());
1832
1833 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1834 logi_Lv1SUSLERDwn->SetSensitiveDetector(
m_sensitive.back());
1835
1836 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1837 logi_CuFlangeFwd->SetSensitiveDetector(
m_sensitive.back());
1838
1839 m_sensitive.push_back((SensitiveDetector*)(
new BkgSensitiveDetector(
"IR", Index_sensi++)));
1840 logi_CuFlangeBwd->SetSensitiveDetector(
m_sensitive.back());
1841
1842
1843
1844
1847 }
const std::string & getParameterStr(const std::string &name) const
Get string parameter.
double getParameter(const std::string &name) const
Get parameter value.
static const double mm
[millimeters]
static const double rad
Standard of [angle].
static const double cm
Standard units with the value = 1.
static G4Material * get(const std::string &name)
Find given material.
double sqrt(double a)
sqrt for double
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.