File indexing completed on 2026-09-19 08:36:08
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #include "FlashApplicator.hh"
0032 #include "FlashDetectorConstruction.hh"
0033 #include "G4Box.hh"
0034 #include "G4Colour.hh"
0035 #include "G4Cons.hh"
0036 #include "G4LogicalVolume.hh"
0037 #include "G4NistElementBuilder.hh"
0038 #include "G4NistManager.hh"
0039 #include "G4PVPlacement.hh"
0040 #include "G4RotationMatrix.hh"
0041 #include "G4RunManager.hh"
0042 #include "G4SubtractionSolid.hh"
0043 #include "G4SystemOfUnits.hh"
0044 #include "G4Tubs.hh"
0045 #include "G4VisAttributes.hh"
0046 #include "globals.hh"
0047
0048 FlashApplicator::FlashApplicator(G4VPhysicalVolume *physicalTreatmentRoom)
0049 : fMotherPhys(physicalTreatmentRoom),
0050
0051
0052 solidFTFlash(0), physiFTFlash(0) {
0053 ConstructCollimator(fMotherPhys);
0054
0055
0056
0057 }
0058
0059 FlashApplicator::~FlashApplicator() {}
0060
0061 void FlashApplicator::ConstructCollimator(G4VPhysicalVolume *) {
0062
0063 SetDefaultDimensions();
0064
0065
0066 SetOuterRadius(55*mm);
0067 SetApplicatorLength(365*mm);
0068
0069
0070
0071
0072
0073
0074
0075 ConstructApplicator();
0076 }
0077
0078 void FlashApplicator::SetDefaultDimensions() {
0079
0080 white = new G4VisAttributes(G4Colour());
0081 white->SetVisibility(true);
0082
0083 blue = new G4VisAttributes(G4Colour(0., 0., 1.));
0084 blue->SetVisibility(true);
0085
0086 gray = new G4VisAttributes(G4Colour(0.5, 0.5, 0.5));
0087 gray->SetVisibility(true);
0088
0089 red = new G4VisAttributes(G4Colour(1., 0., 0.));
0090 red->SetVisibility(true);
0091
0092 yellow = new G4VisAttributes(G4Colour(1., 1., 0.));
0093 yellow->SetVisibility(true);
0094
0095 green = new G4VisAttributes(G4Colour(25 / 255., 255 / 255., 25 / 255.));
0096 green->SetVisibility(true);
0097
0098 darkGreen = new G4VisAttributes(G4Colour(0 / 255., 100 / 255., 0 / 255.));
0099 darkGreen->SetVisibility(true);
0100
0101 darkOrange3 =
0102 new G4VisAttributes(G4Colour(205 / 255., 102 / 255., 000 / 255.));
0103 darkOrange3->SetVisibility(true);
0104
0105 skyBlue = new G4VisAttributes(G4Colour(135 / 255., 206 / 255., 235 / 255.));
0106 skyBlue->SetVisibility(true);
0107
0108 magenta = new G4VisAttributes(G4Colour(255 / 255., 0 / 255., 255 / 255.));
0109 magenta->SetVisibility(true);
0110
0111
0112 fInitial_pos = -113*cm;
0113
0114
0115
0116
0117
0118 G4double defaultinnerRadiusFirstApplicatorFlash =
0119 fOuterRadiusFirstApplicatorFlash - 5. * mm;
0120 fInnerRadiusFirstApplicatorFlash = defaultinnerRadiusFirstApplicatorFlash;
0121
0122
0123
0124
0125 G4double density;
0126 G4int ncomponents;
0127 G4bool isotopes = false;
0128 aluminumNist =
0129 G4NistManager::Instance()->FindOrBuildMaterial("G4_Al", isotopes);
0130
0131
0132 Fe = G4NistManager::Instance()->FindOrBuildMaterial("G4_Fe");
0133
0134 PVDF = new G4Material("PVDF", density=1780 *kg/m3, ncomponents=3);
0135
0136
0137
0138 PVDF->AddElement(G4NistManager::Instance()->FindOrBuildElement("C"), 34 * perCent);
0139 PVDF->AddElement(G4NistManager::Instance()->FindOrBuildElement("H"), 33 * perCent);
0140 PVDF->AddElement(G4NistManager::Instance()->FindOrBuildElement("F"), 33 * perCent);
0141
0142
0143
0144 FILM= new G4Material("FILM", density=1430 *kg/m3, ncomponents = 4);
0145
0146 FILM->AddElement(G4NistManager::Instance()->FindOrBuildElement("C"), 69 * perCent);
0147 FILM->AddElement(G4NistManager::Instance()->FindOrBuildElement("H"), 3 * perCent);
0148 FILM->AddElement(G4NistManager::Instance()->FindOrBuildElement("N"), 7 * perCent);
0149 FILM->AddElement(G4NistManager::Instance()->FindOrBuildElement("O"), 21 * perCent);
0150
0151
0152
0153
0154 G4Material *galacticNist =
0155 G4NistManager::Instance()->FindOrBuildMaterial("G4_Galactic", isotopes);
0156 PMMA =
0157 G4NistManager::Instance()->FindOrBuildMaterial("G4_PLEXIGLASS", isotopes);
0158
0159 G4Material *titanioNist =
0160 G4NistManager::Instance()->FindOrBuildMaterial("G4_Ti", isotopes);
0161
0162
0163
0164
0165
0166 fFirstApplicatorMaterialFlash = PMMA;
0167
0168
0169 FTFlashMaterialFlash = titanioNist;
0170
0171
0172 VSFlashMaterialFlash = galacticNist;
0173 }
0174
0175 void FlashApplicator::ConstructApplicator() {
0176
0177
0178
0179 FlashBeamLineVacuumSource();
0180 FlashBeamLineTitaniumWindows();
0181 FlashVWAlcover();
0182 FlashAlCover2();
0183 FlashExitBit();
0184 FlashToroid();
0185 OverCover();
0186
0187 MonitorChamber();
0188 Flash_connector();
0189 Bigconnector();
0190 Bigconnector2();
0191 FlashBeamLineApplicator();
0192
0193
0194
0195 }
0196
0197 void FlashApplicator::FlashBeamLineVacuumSource() {
0198
0199
0200
0201
0202 G4double phi1 = 90. * deg;
0203
0204 G4RotationMatrix rm1;
0205 rm1.rotateY(phi1);
0206
0207 fOutRadiusVSFlash = 20 * mm;
0208 const G4double innRadiusVSFlash = 0. * mm;
0209 fHightVSFlash = 8 * mm;
0210 const G4double startAngleVSFlash = 0. * deg;
0211 const G4double spanningAngleVSFlash = 360. * deg;
0212 fXPositionVSFlash = fInitial_pos-fHightVSFlash-0.055/2*mm;
0213
0214 solidVSFlash =
0215 new G4Tubs("VSFlash", innRadiusVSFlash, fOutRadiusVSFlash, fHightVSFlash,
0216 startAngleVSFlash, spanningAngleVSFlash);
0217
0218 G4LogicalVolume *logVSFlash = new G4LogicalVolume(
0219 solidVSFlash, VSFlashMaterialFlash, "VSFlash", 0, 0, 0);
0220
0221 physiVSFlash = new G4PVPlacement(
0222 G4Transform3D(rm1, G4ThreeVector((fXPositionVSFlash), 0., 0.)), "VSFlash",
0223 logVSFlash, fMotherPhys, false, 0);
0224
0225 logVSFlash->SetVisAttributes(green);
0226 }
0227
0228 void FlashApplicator::FlashBeamLineTitaniumWindows() {
0229
0230
0231
0232
0233 G4double phi2 = 90. * deg;
0234
0235 G4RotationMatrix rm2;
0236 rm2.rotateY(phi2);
0237
0238 fOutRadiusFTFlash = fOutRadiusVSFlash;
0239 const G4double innRadiusFTFlash = 19 * mm;
0240 fHightFTFlash = 0.055/2 * mm;
0241 const G4double startAngleFTFlash = 0. * deg;
0242 const G4double spanningAngleFTFlash = 360. * deg;
0243 const G4double XPositionFTFlash = fInitial_pos ;
0244
0245 solidFTFlash =
0246 new G4Tubs("FTFlash", innRadiusFTFlash, fOutRadiusFTFlash, fHightFTFlash,
0247 startAngleFTFlash, spanningAngleFTFlash);
0248
0249 G4LogicalVolume *logFTFlash = new G4LogicalVolume(
0250 solidFTFlash, FTFlashMaterialFlash, "FTFlash", 0, 0, 0);
0251
0252 physiFTFlash = new G4PVPlacement(
0253 G4Transform3D(rm2, G4ThreeVector((XPositionFTFlash), 0., 0.)), "FTFlash",
0254 logFTFlash, fMotherPhys, false, 0);
0255
0256 logFTFlash->SetVisAttributes(yellow);
0257 }
0258 void FlashApplicator::FlashVWAlcover(){
0259
0260 G4double phi2 = 90. * deg;
0261
0262 G4RotationMatrix rm2;
0263 rm2.rotateY(phi2);
0264
0265
0266 const G4double innRadius = fOutRadiusVSFlash;
0267 fOutRadius = innRadius+8*mm;
0268 const G4double hight = fHightVSFlash;
0269 const G4double startAngle = 0. * deg;
0270 const G4double spanningAngle = 360. * deg;
0271 const G4double XPosition = fXPositionVSFlash ;
0272
0273 G4VSolid * solid =
0274 new G4Tubs("cover1", innRadius, fOutRadius, hight,
0275 startAngle, spanningAngle);
0276
0277 G4LogicalVolume *log = new G4LogicalVolume(
0278 solid, aluminumNist, "cover1log", 0, 0, 0);
0279
0280 new G4PVPlacement(
0281 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "cover1phys",
0282 log, fMotherPhys, false, 0);
0283
0284 log->SetVisAttributes(white);
0285
0286
0287 }
0288 void FlashApplicator::FlashAlCover2(){
0289
0290 G4double phi2 = 90. * deg;
0291
0292 G4RotationMatrix rm2;
0293 rm2.rotateY(phi2);
0294
0295
0296 const G4double innRadius = fOutRadiusVSFlash;
0297
0298 const G4double hight = fHightVSFlash+fHightFTFlash;
0299 const G4double startAngle = 0. * deg;
0300 const G4double spanningAngle = 360. * deg;
0301 const G4double XPosition = fInitial_pos+hight+fHightFTFlash;
0302
0303 G4VSolid * solid =
0304 new G4Tubs("cover1", innRadius, fOutRadius, hight,
0305 startAngle, spanningAngle);
0306
0307 G4LogicalVolume *log = new G4LogicalVolume(
0308 solid, aluminumNist, "cover1log", 0, 0, 0);
0309
0310 new G4PVPlacement(
0311 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "cover1phys",
0312 log, fMotherPhys, false, 0);
0313
0314 log->SetVisAttributes(red);
0315
0316 fInitial_pos=fInitial_pos + fHightFTFlash;
0317 }
0318 void FlashApplicator::FlashExitBit(){
0319
0320 G4double phi2 = 90. * deg;
0321
0322 G4RotationMatrix rm2;
0323 rm2.rotateY(phi2);
0324
0325
0326 const G4double innRadius = 0*mm;
0327 fOutRadius = fOutRadiusVSFlash;
0328 const G4double hight = 16/2*mm;
0329 const G4double startAngle = 0. * deg;
0330 const G4double spanningAngle = 360. * deg;
0331 const G4double XPosition = fInitial_pos+hight;
0332
0333
0334 G4VSolid *t1 = new G4Tubs("t1", innRadius, fOutRadius, hight,
0335 startAngle, spanningAngle);
0336
0337 G4VSolid *t2 = new G4Cons("t2", 0*mm,13/2*mm, 0*mm,38/2*mm,16.1/2*mm, startAngle,spanningAngle);
0338
0339 G4RotationMatrix rotm_t2 = G4RotationMatrix();
0340 rotm_t2.rotateX(0 * deg);
0341 G4ThreeVector zTrans(0, 0, 0);
0342
0343 G4SubtractionSolid *hollowcover =
0344 new G4SubtractionSolid("hollowcover_log", t1, t2, 0, zTrans);
0345
0346
0347 G4LogicalVolume *logic =
0348 new G4LogicalVolume(hollowcover, aluminumNist, "hollowcover", 0, 0, 0);
0349
0350 new G4PVPlacement(
0351 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "cover1phys",
0352 logic, fMotherPhys, false, 0);
0353
0354 logic->SetVisAttributes(darkOrange3);
0355 fInitial_pos=XPosition+hight;
0356 }
0357 void FlashApplicator::FlashToroid(){
0358
0359 G4double phi2 = 90. * deg;
0360
0361 G4RotationMatrix rm2;
0362 rm2.rotateY(phi2);
0363
0364
0365 const G4double innRadius = 50.8/2*mm;
0366 fToroid_outRadius = innRadius + 45*mm;
0367 fToroid_hight = 50.8/2*mm;
0368 const G4double startAngle = 0. * deg;
0369 const G4double spanningAngle = 360. * deg;
0370 fToroid_XPosition = fInitial_pos+fToroid_hight + 8*mm;
0371
0372 G4VSolid * solid =
0373 new G4Tubs("toroid", innRadius, fToroid_outRadius, fToroid_hight,
0374 startAngle, spanningAngle);
0375
0376 G4LogicalVolume *log = new G4LogicalVolume(
0377 solid, Fe, "toroidlog", 0, 0, 0);
0378
0379 new G4PVPlacement(
0380 G4Transform3D(rm2, G4ThreeVector((fToroid_XPosition), 0., 0.)), "toroidphys",
0381 log, fMotherPhys, false, 0);
0382
0383 log->SetVisAttributes(blue);
0384
0385 fInitial_pos=fToroid_XPosition+fToroid_hight;
0386 }
0387 void FlashApplicator::OverCover(){
0388
0389 G4double phi2 = 90. * deg;
0390
0391 G4RotationMatrix rm2;
0392 rm2.rotateY(phi2);
0393
0394
0395 const G4double innRadius = fOutRadius;
0396 const G4double out_Radius = 5*fOutRadius ;
0397 fBigcover_hight = 7.5*mm;
0398 const G4double startAngle = 0. * deg;
0399 const G4double spanningAngle = 360. * deg;
0400 fBigcover_XPosition = fXPositionVSFlash - fHightVSFlash+fBigcover_hight;
0401
0402 G4VSolid * solid =
0403 new G4Tubs("coverbig", innRadius, out_Radius, fBigcover_hight,
0404 startAngle, spanningAngle);
0405
0406 G4LogicalVolume *log = new G4LogicalVolume(
0407 solid, aluminumNist, "coverbig_log", 0, 0, 0);
0408
0409 new G4PVPlacement(
0410 G4Transform3D(rm2, G4ThreeVector((fBigcover_XPosition), 0., 0.)), "coverbig_phys",
0411 log, fMotherPhys, false, 0);
0412
0413 log->SetVisAttributes(skyBlue);
0414
0415
0416 const G4double innRadius_2 = fToroid_outRadius;
0417 const G4double out_Radius_2 = innRadius_2 + 1.2*cm ;
0418 const G4double fBigcover_hight_2 = 30*mm;
0419 const G4double startAngle_2 = 0. * deg;
0420 const G4double spanningAngle_2 = 360. * deg;
0421 const double fBigcover_XPosition_2 = fBigcover_XPosition+fBigcover_hight_2+fBigcover_hight;
0422
0423 G4VSolid * solid_2 =
0424 new G4Tubs("coverbig_2", innRadius_2, out_Radius_2, fBigcover_hight_2,
0425 startAngle_2, spanningAngle_2);
0426
0427 G4LogicalVolume *log_2 = new G4LogicalVolume(
0428 solid_2, aluminumNist, "coverbig_log", 0, 0, 0);
0429
0430 new G4PVPlacement(
0431 G4Transform3D(rm2, G4ThreeVector((fBigcover_XPosition_2), 0., 0.)), "coverbig_phys",
0432 log_2, fMotherPhys, false, 0);
0433
0434 log_2->SetVisAttributes(green);
0435
0436
0437 }
0438
0439 void FlashApplicator::OverCover2() {
0440
0441 G4double phi2 = 90. * deg;
0442
0443 G4RotationMatrix rm2;
0444 rm2.rotateY(phi2);
0445
0446
0447 const G4double innRadius = fToroid_outRadius;
0448 const G4double out_Radius = innRadius+40*mm ;
0449 const G4double hight = 34*mm;
0450 const G4double startAngle = 0. * deg;
0451 const G4double spanningAngle = 360. * deg;
0452 const G4double XPosition = fBigcover_XPosition+fBigcover_hight+hight;
0453
0454 G4VSolid * solid =
0455 new G4Tubs("coverbig", innRadius, out_Radius, hight,
0456 startAngle, spanningAngle);
0457
0458 G4LogicalVolume *log = new G4LogicalVolume(
0459 solid, aluminumNist, "coverbig_log", 0, 0, 0);
0460
0461 new G4PVPlacement(
0462 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "coverbig_phys",
0463 log, fMotherPhys, false, 0);
0464
0465 log->SetVisAttributes(yellow);
0466
0467 }
0468
0469 void FlashApplicator::MonitorChamber(){
0470
0471 G4double phi2 = 90. * deg;
0472
0473 G4RotationMatrix rm2;
0474 rm2.rotateY(phi2);
0475
0476
0477 const G4double innRadius = 20*mm;
0478 const G4double out_Radius = innRadius+1.7*mm ;
0479 const G4double hight = 3*mm;
0480 const G4double startAngle = 0. * deg;
0481 const G4double spanningAngle = 360. * deg;
0482 G4double XPosition = fInitial_pos+hight;
0483
0484 G4VSolid * solid =
0485 new G4Tubs("first", innRadius, out_Radius, hight,
0486 startAngle, spanningAngle);
0487
0488
0489
0490 G4LogicalVolume *log = new G4LogicalVolume(
0491 solid, PVDF, "chamberfirst_log", 0, 0, 0);
0492
0493 new G4PVPlacement(
0494 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "coverbig_phys",
0495 log, fMotherPhys, false, 0);
0496
0497 log->SetVisAttributes(red);
0498
0499 G4VSolid * solid_pvdf=
0500 new G4Tubs("s_pvdf", innRadius, out_Radius, 0.5*mm,
0501 startAngle, spanningAngle);
0502
0503
0504 G4LogicalVolume *log_pvdf= new G4LogicalVolume(
0505 solid_pvdf, PVDF, "pvdf_log", 0, 0, 0);
0506
0507 G4VSolid * solid_film =
0508 new G4Tubs("s_film", innRadius, out_Radius, 0.05/2*mm,
0509 startAngle, spanningAngle);
0510 G4LogicalVolume *log_film = new G4LogicalVolume(
0511 solid_film, FILM, "ka_log", 0, 0, 0);
0512
0513 G4VSolid * solid_al =
0514 new G4Tubs("s_al", innRadius, out_Radius, 0.005/2*mm,
0515 startAngle, spanningAngle);
0516
0517 G4LogicalVolume *log_al = new G4LogicalVolume(
0518 solid_al, aluminumNist, "al_log", 0, 0, 0);
0519 XPosition=XPosition+hight;
0520
0521 G4int j=0;
0522 for(G4int i = 0;i<3;i++){
0523 XPosition=XPosition+(i+1)*0.05/2*mm;
0524 new G4PVPlacement(
0525 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "ka_phys",
0526 log_film, fMotherPhys, false, j);
0527 XPosition=XPosition+(i+1)*0.005/2*mm;
0528 new G4PVPlacement(
0529 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "al_phys",
0530 log_al, fMotherPhys, false, j);
0531
0532 XPosition=XPosition+(i+1)*1/2*mm;
0533 new G4PVPlacement(
0534 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "pvdf_phys",
0535 log_pvdf, fMotherPhys, false, j);
0536
0537
0538
0539 }
0540 fChamberpos = XPosition +1/2*mm;
0541 log_film->SetVisAttributes(green);
0542 log_al->SetVisAttributes(blue);
0543 log_pvdf->SetVisAttributes(yellow);
0544
0545
0546 }
0547
0548 void FlashApplicator::Flash_connector(){
0549
0550 G4double phi2 = 90. * deg;
0551
0552 G4RotationMatrix rm2;
0553 rm2.rotateY(phi2);
0554
0555
0556 const G4double innRadius = 10*cm;
0557 const G4double out_Radius = innRadius+2.5*cm ;
0558 const G4double hight = 15*mm;
0559 const G4double startAngle = 0. * deg;
0560 const G4double spanningAngle = 360. * deg;
0561 const G4double XPosition = fChamberpos+hight;
0562
0563 G4VSolid * solid =
0564 new G4Tubs("cover", innRadius, out_Radius, hight,
0565 startAngle, spanningAngle);
0566
0567 G4LogicalVolume *log = new G4LogicalVolume(
0568 solid, aluminumNist, "coverbig_log", 0, 0, 0);
0569
0570 new G4PVPlacement(
0571 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "coverbig_phys",
0572 log, fMotherPhys, false, 0);
0573
0574 log->SetVisAttributes(magenta);
0575
0576
0577 G4VSolid * solid_ =
0578 new G4Tubs("littlecover", 22*mm, innRadius, 0.2*mm,
0579 startAngle, spanningAngle);
0580 G4LogicalVolume *log_ = new G4LogicalVolume(
0581 solid_, aluminumNist, "covers_log", 0, 0, 0);
0582
0583 new G4PVPlacement(
0584 G4Transform3D(rm2, G4ThreeVector((fChamberpos+0.2*mm), 0., 0.)), "coverl_phys",
0585 log_, fMotherPhys, false, 0);
0586 log_->SetVisAttributes(green);
0587
0588 fInitial_pos=XPosition+hight;
0589 }
0590
0591 void FlashApplicator::Bigconnector() {
0592
0593 G4double phi2 = 90. * deg;
0594
0595 G4RotationMatrix rm2;
0596 rm2.rotateY(phi2);
0597
0598
0599 const G4double innRadius = 10*cm;
0600 const G4double out_Radius = innRadius+30*mm ;
0601 const G4double hight = 7.05*cm + 0.0075/2*mm;
0602 const G4double startAngle = 0. * deg;
0603 const G4double spanningAngle = 360. * deg;
0604 const G4double XPosition = fInitial_pos+hight;
0605
0606 G4VSolid * solid =
0607 new G4Tubs("coverbig", innRadius, out_Radius, hight,
0608 startAngle, spanningAngle);
0609
0610 G4LogicalVolume *log = new G4LogicalVolume(
0611 solid, aluminumNist, "coverbig_log", 0, 0, 0);
0612
0613 new G4PVPlacement(
0614 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "coverbig_phys",
0615 log, fMotherPhys, false, 0);
0616
0617 log->SetVisAttributes(red);
0618 fInitial_pos=XPosition+hight;
0619 }
0620 void FlashApplicator::Bigconnector2() {
0621
0622 G4double phi2 = 90. * deg;
0623
0624 G4RotationMatrix rm2;
0625 rm2.rotateY(phi2);
0626
0627
0628 const G4double innRadius = 6*cm;
0629 const G4double out_Radius = innRadius+70*mm ;
0630 const G4double hight = 4.4*cm-12/4*mm;
0631 const G4double startAngle = 0. * deg;
0632 const G4double spanningAngle = 360. * deg;
0633 const G4double XPosition = fInitial_pos+hight;
0634
0635 G4VSolid * solid =
0636 new G4Tubs("coverbig", innRadius, out_Radius, hight,
0637 startAngle, spanningAngle);
0638
0639
0640
0641
0642 G4LogicalVolume *log = new G4LogicalVolume(
0643 solid, PVDF, "coverbig_log", 0, 0, 0);
0644
0645 new G4PVPlacement(
0646 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "coverbig_phys",
0647 log, fMotherPhys, false, 0);
0648
0649 log->SetVisAttributes(blue);
0650 fInitial_pos=XPosition+hight;
0651 }
0652
0653 void FlashApplicator::Bigconnector3() {
0654
0655 G4double phi2 = 90. * deg;
0656
0657 G4RotationMatrix rm2;
0658 rm2.rotateY(phi2);
0659
0660
0661 const G4double innRadius = 6*cm;
0662 const G4double out_Radius = innRadius+60*mm ;
0663 const G4double hight = 3.4*cm-11/4*mm;
0664 const G4double startAngle = 0. * deg;
0665 const G4double spanningAngle = 360. * deg;
0666 const G4double XPosition = fInitial_pos+hight;
0667
0668
0669
0670 G4VSolid *t1 = new G4Tubs("t1_", 0*mm, out_Radius, hight,
0671 startAngle, spanningAngle);
0672
0673 G4VSolid *t2 = new G4Cons("t2_", 0*mm,60*mm, 0*mm,fInnerRadiusFirstApplicatorFlash,hight +0.1*mm, startAngle,spanningAngle);
0674
0675
0676 G4ThreeVector zTrans(0, 0, 0);
0677
0678 G4SubtractionSolid *hollowcover =
0679 new G4SubtractionSolid("hollowcover_log_", t1, t2, 0, zTrans);
0680
0681 G4LogicalVolume *log = new G4LogicalVolume(
0682 hollowcover, PMMA, "coverbig_log_", 0, 0, 0);
0683
0684 new G4PVPlacement(
0685 G4Transform3D(rm2, G4ThreeVector((XPosition), 0., 0.)), "coverbig_phys_",
0686 log, fMotherPhys, false, 0);
0687
0688 log->SetVisAttributes(yellow);
0689 fInitial_pos=XPosition+hight;
0690 }
0691
0692 void FlashApplicator::FlashBeamLineApplicator() {
0693
0694
0695
0696
0697
0698 if (fHightFinalApplicatorFlash != 0*mm){
0699 Bigconnector3();
0700 const G4double startAngleFirstApplicatorFlash = 0. * deg;
0701 const G4double spanningAngleFirstApplicatorFlash = 360. * deg;
0702 fFinalApplicatorXPositionFlash = fInitial_pos+fHightFinalApplicatorFlash;
0703
0704 G4double phi6 = 90. * deg;
0705
0706 G4RotationMatrix rm6;
0707 rm6.rotateY(phi6);
0708
0709 fSolidFirstApplicatorFlash = new G4Tubs(
0710 "FirstApplicatorFlash", fInnerRadiusFirstApplicatorFlash,
0711 fOuterRadiusFirstApplicatorFlash, fHightFinalApplicatorFlash,
0712 startAngleFirstApplicatorFlash, spanningAngleFirstApplicatorFlash);
0713
0714 G4LogicalVolume *logFirstApplicatorFlash = new G4LogicalVolume(
0715 fSolidFirstApplicatorFlash, fFirstApplicatorMaterialFlash,
0716 "FirstApplicatorFlash", 0, 0, 0);
0717
0718 fPhysiFirstApplicatorFlash = new G4PVPlacement(
0719 G4Transform3D(rm6,
0720 G4ThreeVector((fFinalApplicatorXPositionFlash), 0., 0.)),
0721 "FirstApplicatorFlash", logFirstApplicatorFlash, fMotherPhys, false, 0);
0722
0723 logFirstApplicatorFlash->SetVisAttributes(magenta); } else{fFinalApplicatorXPositionFlash = fInitial_pos+3*cm;}
0724 }
0725
0726
0727 void FlashApplicator::SetOuterRadius(G4double radius)
0728 {
0729
0730 fOuterRadiusFirstApplicatorFlash=radius;
0731 fInnerRadiusFirstApplicatorFlash= fOuterRadiusFirstApplicatorFlash-5*mm;
0732
0733 }
0734
0735 void FlashApplicator::SetApplicatorLength(G4double length)
0736 {
0737 fHightFinalApplicatorFlash=length;
0738
0739 }
0740
0741
0742
0743
0744