File indexing completed on 2025-01-31 09:22:28
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
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 #include "globals.hh"
0042 #include "G4SystemOfUnits.hh"
0043 #include "G4Box.hh"
0044 #include "G4Tubs.hh"
0045 #include "G4Cons.hh"
0046 #include "G4VisAttributes.hh"
0047 #include "G4Colour.hh"
0048 #include "G4RunManager.hh"
0049 #include "G4LogicalVolume.hh"
0050 #include "G4PVPlacement.hh"
0051 #include "G4RotationMatrix.hh"
0052 #include "G4NistManager.hh"
0053 #include "G4NistElementBuilder.hh"
0054 #include "G4SubtractionSolid.hh"
0055 #include "IORTDetectorConstruction.hh"
0056 #include "Collimator100BeamLine.hh"
0057 #include "Collimator100BeamLineMessenger.hh"
0058
0059 Collimator100BeamLine::Collimator100BeamLine():
0060 physicalTreatmentRoom(0),iortDetectorConstruction(0),
0061
0062
0063 solidFinalCollimatorIORT(0),
0064 physiFinalCollimatorIORT(0),
0065
0066 solidGiunz1FinalCollIORT(0),
0067 physiGiunz1FinalCollIORT(0),
0068
0069 solidGiunz2FinalCollIORT(0),
0070 physiGiunz2FinalCollIORT(0),
0071
0072 solidGiunz3FinalCollIORT(0),
0073 physiGiunz3FinalCollIORT(0),
0074
0075 solidGiunz3FinalCollIntIORT(0),
0076 physiGiunz3FinalCollIntIORT(0),
0077
0078 solidGiunz4FinalCollIORT(0),
0079 physiGiunz4FinalCollIORT(0),
0080
0081 solidGiunz5FinalCollIORT(0),
0082 physiGiunz5FinalCollIORT(0),
0083
0084 solidBlocco1IORT(0),
0085 physiBlocco1IORT(0),
0086
0087 solidBlocco2IORT(0),
0088 physiBlocco2IORT(0),
0089
0090 solidBlocco3IORT(0),
0091 physiBlocco3IORT(0),
0092
0093 solidBlocco20mmIORT(0),
0094 physiBlocco20mmIORT(0),
0095
0096 solidCM1_1_2IORT(0),
0097 physiCM1_1_2IORT(0),
0098
0099 solidCM1_2_2IORT(0),
0100 physiCM1_2_2IORT(0),
0101
0102 solidCM2_1_2IORT(0),
0103 physiCM2_1_2IORT(0),
0104
0105 solidCM2_2_2IORT(0),
0106 physiCM2_2_2IORT(0),
0107
0108 solidCCMIORT(0),
0109 physiCCMIORT(0),
0110
0111 solidPFS1IORT(0),
0112 physiPFS1IORT(0),
0113
0114 solidPFS2IORT(0),
0115 physiPFS2IORT(0),
0116
0117 solidPFS3IORT(0),
0118 physiPFS3IORT(0),
0119
0120 solidFTIORT(0),
0121 physiFTIORT(0)
0122
0123
0124 {
0125
0126 collimatorMessenger = new Collimator100BeamLineMessenger(this);
0127
0128 }
0129
0130 Collimator100BeamLine::~Collimator100BeamLine()
0131 {
0132 delete collimatorMessenger;
0133 delete iortDetectorConstruction;
0134 }
0135
0136
0137
0138
0139 G4VPhysicalVolume* Collimator100BeamLine::Construct()
0140 {
0141
0142 SetDefaultDimensions();
0143
0144
0145 ConstructCollimator100BeamLine();
0146
0147
0148
0149 iortDetectorConstruction = new IORTDetectorConstruction(physicalTreatmentRoom);
0150
0151 return physicalTreatmentRoom;
0152 }
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 void Collimator100BeamLine::SetDefaultDimensions()
0165 {
0166
0167
0168 white = new G4VisAttributes( G4Colour());
0169 white -> SetVisibility(true);
0170
0171
0172 blue = new G4VisAttributes(G4Colour(0. ,0. ,1.));
0173 blue -> SetVisibility(true);
0174
0175
0176 gray = new G4VisAttributes( G4Colour(0.5, 0.5, 0.5 ));
0177 gray-> SetVisibility(true);
0178
0179
0180 red = new G4VisAttributes(G4Colour(1. ,0. ,0.));
0181 red-> SetVisibility(true);
0182
0183
0184 yellow = new G4VisAttributes(G4Colour(1., 1., 0. ));
0185 yellow-> SetVisibility(true);
0186
0187
0188 green = new G4VisAttributes( G4Colour(25/255. , 255/255. , 25/255. ));
0189 green -> SetVisibility(true);
0190
0191
0192 darkGreen = new G4VisAttributes( G4Colour(0/255. , 100/255. , 0/255. ));
0193 darkGreen -> SetVisibility(true);
0194
0195
0196 darkOrange3 = new G4VisAttributes( G4Colour(205/255. , 102/255. , 000/255. ));
0197 darkOrange3 -> SetVisibility(true);
0198
0199
0200 skyBlue = new G4VisAttributes( G4Colour(135/255. , 206/255. , 235/255. ));
0201 skyBlue -> SetVisibility(true);
0202
0203
0204
0205
0206
0207
0208 G4double defaultOuterRadiusFinalCollimatorIORT = 55. *mm;
0209 OuterRadiusFinalCollimatorIORT = defaultOuterRadiusFinalCollimatorIORT;
0210
0211 G4double defaultinnerRadiusFinalCollimatorIORT = 50. *mm;
0212 innerRadiusFinalCollimatorIORT = defaultinnerRadiusFinalCollimatorIORT;
0213
0214
0215
0216
0217
0218 G4bool isotopes = false;
0219 G4Material* aluminumNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Al", isotopes);
0220
0221
0222 G4Element* zincNist = G4NistManager::Instance()->FindOrBuildElement("Zn");
0223 G4Element* copperNist = G4NistManager::Instance()->FindOrBuildElement("Cu");
0224
0225
0226 G4Material* airNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR", isotopes);
0227
0228 G4Material* galacticNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Galactic", isotopes);
0229 G4Material* PMMANist = G4NistManager::Instance()->FindOrBuildMaterial("G4_PLEXIGLASS", isotopes);
0230
0231 G4Material* titanioNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Ti", isotopes);
0232
0233
0234 G4double d;
0235 G4int nComponents;
0236 G4double fractionmass;
0237
0238 d = 8.40*g/cm3;
0239 nComponents = 2;
0240 G4Material* brass = new G4Material("Brass", d, nComponents);
0241 brass -> AddElement(zincNist, fractionmass = 30 *perCent);
0242 brass -> AddElement(copperNist, fractionmass = 70 *perCent);
0243
0244
0245
0246
0247
0248
0249 finalCollimatorMaterialIORT = PMMANist;
0250
0251
0252 Giunz1FinalCollMaterialIORT = PMMANist;
0253
0254
0255 Giunz2FinalCollMaterialIORT = PMMANist;
0256
0257
0258 Giunz3FinalCollMaterialIORT = PMMANist;
0259
0260
0261 Giunz3FinalCollMaterialIntIORT = airNist;
0262
0263
0264 Giunz4FinalCollMaterialIORT = PMMANist;
0265
0266
0267 Giunz5FinalCollMaterialIORT = PMMANist;
0268
0269
0270 Blocco1IORTMaterialIORT = PMMANist;
0271
0272
0273 Blocco2IORTMaterialIORT = PMMANist;
0274
0275
0276 Blocco3IORTMaterialIORT = PMMANist;
0277
0278
0279 Blocco20mmIORTMaterialIORT = PMMANist;
0280
0281
0282 CM1_1_2IORTMaterialIORT = aluminumNist;
0283
0284
0285 CM1_2_2IORTMaterialIORT = aluminumNist;
0286
0287
0288 CM2_1_2IORTMaterialIORT = aluminumNist;
0289
0290
0291 CM2_2_2IORTMaterialIORT = aluminumNist;
0292
0293
0294 CCMIORTMaterialIORT = PMMANist;
0295
0296
0297 PFS1IORTMaterialIORT = PMMANist;
0298
0299
0300 PFS2IORTMaterialIORT = PMMANist;
0301
0302
0303 PFS3IORTMaterialIORT = PMMANist;
0304
0305
0306 FTIORTMaterialIORT = titanioNist;
0307
0308
0309 VSIORTMaterialIORT = galacticNist;
0310
0311 }
0312
0313
0314 void Collimator100BeamLine::ConstructCollimator100BeamLine()
0315 {
0316
0317
0318
0319
0320 const G4double worldX = 400.0 *cm;
0321 const G4double worldY = 400.0 *cm;
0322 const G4double worldZ = 400.0 *cm;
0323 G4bool isotopes = false;
0324
0325 G4Material* airNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR", isotopes);
0326 G4Box* treatmentRoom = new G4Box("TreatmentRoom",worldX,worldY,worldZ);
0327 G4LogicalVolume* logicTreatmentRoom = new G4LogicalVolume(treatmentRoom,
0328 airNist,
0329 "logicTreatmentRoom",
0330 0,0,0);
0331 physicalTreatmentRoom = new G4PVPlacement(0,
0332 G4ThreeVector(),
0333 "physicalTreatmentRoom",
0334 logicTreatmentRoom,
0335 0,false,0);
0336
0337
0338
0339 logicTreatmentRoom -> SetVisAttributes (G4VisAttributes::GetInvisible());
0340
0341
0342
0343 IortBeamLineVacuumSource();
0344 IortBeamLineTitaniumWindows();
0345 IortBeamLineMonitorChambers();
0346 IortBeamLineBlocks() ;
0347 IortBeamLineJunctions();
0348 IortBeamLineFinalCollimator();
0349
0350 }
0351
0352
0353 void Collimator100BeamLine::IortBeamLineVacuumSource()
0354 {
0355
0356
0357
0358
0359
0360 G4double phi1 = 90. *deg;
0361
0362
0363 G4RotationMatrix rm1;
0364 rm1.rotateY(phi1);
0365
0366 const G4double outRadiusVSIORT = 44.75 *mm;
0367 const G4double innRadiusVSIORT = 0.*mm;
0368 const G4double hightVSIORT = 1. *mm;
0369 const G4double startAngleVSIORT = 0.*deg;
0370 const G4double spanningAngleVSIORT = 360.*deg;
0371 const G4double XPositionVSIORT = -1062.797 *mm;
0372
0373 solidVSIORT = new G4Tubs("VSIORT", innRadiusVSIORT,
0374 outRadiusVSIORT,
0375 hightVSIORT,
0376 startAngleVSIORT,
0377 spanningAngleVSIORT);
0378
0379 G4LogicalVolume* logVSIORT = new G4LogicalVolume(solidVSIORT,
0380 VSIORTMaterialIORT, "VSIORT", 0, 0, 0);
0381
0382 physiVSIORT = new G4PVPlacement(G4Transform3D(rm1, G4ThreeVector((XPositionVSIORT),0.,0.)),
0383 "VSIORT", logVSIORT, physicalTreatmentRoom, false, 0);
0384 logVSIORT -> SetVisAttributes(green);
0385 }
0386
0387 void Collimator100BeamLine::IortBeamLineTitaniumWindows()
0388 {
0389
0390
0391
0392
0393 G4double phi2 = 90. *deg;
0394
0395
0396 G4RotationMatrix rm2;
0397 rm2.rotateY(phi2);
0398
0399
0400 const G4double outRadiusFTIORT = 44.75 *mm;
0401 const G4double innRadiusFTIORT = 8.5 *mm;
0402 const G4double hightFTIORT = 0.006 *mm;
0403 const G4double startAngleFTIORT = 0.*deg;
0404 const G4double spanningAngleFTIORT = 360.*deg;
0405 const G4double XPositionFTIORT = -1061.791 *mm;
0406
0407
0408 solidFTIORT = new G4Tubs("FTIORT", innRadiusFTIORT,
0409 outRadiusFTIORT,
0410 hightFTIORT,
0411 startAngleFTIORT,
0412 spanningAngleFTIORT);
0413
0414 G4LogicalVolume* logFTIORT = new G4LogicalVolume(solidFTIORT,
0415 FTIORTMaterialIORT, "FTIORT", 0, 0, 0);
0416
0417 physiFTIORT = new G4PVPlacement(G4Transform3D(rm2, G4ThreeVector((XPositionFTIORT),0.,0.)),
0418 "FTIORT", logFTIORT, physicalTreatmentRoom, false, 0);
0419
0420 logFTIORT -> SetVisAttributes(yellow);
0421 }
0422
0423 void Collimator100BeamLine::IortBeamLineMonitorChambers()
0424 {
0425
0426 G4double phi3 = 90. *deg;
0427
0428
0429 G4RotationMatrix rm3;
0430 rm3.rotateY(phi3);
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442 const G4double outRadiusPFS3IORT = 44.75 *mm;
0443 const G4double innRadiusPFS3IORT = 17.5 *mm;
0444 const G4double hightPFS3IORT = 3.03 *mm;
0445 const G4double startAnglePFS3IORT = 0.*deg;
0446 const G4double spanningAnglePFS3IORT = 360.*deg;
0447 const G4double XPositionPFS3IORT = -1048.755 *mm;
0448
0449
0450 solidPFS3IORT = new G4Tubs("PFS3IORT", innRadiusPFS3IORT,
0451 outRadiusPFS3IORT,
0452 hightPFS3IORT,
0453 startAnglePFS3IORT,
0454 spanningAnglePFS3IORT);
0455
0456 G4LogicalVolume* logPFS3IORT = new G4LogicalVolume(solidPFS3IORT,
0457 PFS3IORTMaterialIORT, "PFS3IORT", 0, 0, 0);
0458
0459 physiPFS3IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS3IORT),0.,0.)),
0460 "PFS3IORT", logPFS3IORT, physicalTreatmentRoom, false, 0);
0461
0462 logPFS3IORT -> SetVisAttributes(white);
0463
0464
0465
0466
0467
0468
0469 const G4double outRadiusPFS2IORT = 44.75 *mm;
0470 const G4double innRadiusPFS2IORT = 10. *mm;
0471 const G4double hightPFS2IORT = 1.47 *mm;
0472 const G4double startAnglePFS2IORT = 0.*deg;
0473 const G4double spanningAnglePFS2IORT = 360.*deg;
0474 const G4double XPositionPFS2IORT = -1044.255 *mm;
0475
0476
0477 solidPFS2IORT = new G4Tubs("PFS2IORT", innRadiusPFS2IORT,
0478 outRadiusPFS2IORT,
0479 hightPFS2IORT,
0480 startAnglePFS2IORT,
0481 spanningAnglePFS2IORT);
0482
0483 G4LogicalVolume* logPFS2IORT = new G4LogicalVolume(solidPFS2IORT,
0484 PFS2IORTMaterialIORT, "PFS2IORT", 0, 0, 0);
0485
0486 physiPFS2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS2IORT),0.,0.)),
0487 "PFS2IORT", logPFS2IORT, physicalTreatmentRoom, false, 0);
0488
0489 logPFS2IORT -> SetVisAttributes(green);
0490
0491
0492
0493
0494
0495 const G4double outRadiusPFS1IORT = 35. *mm;
0496 const G4double innRadiusPFS1IORT = 10. *mm;
0497 const G4double hightPFS1IORT = 0.88 *mm;
0498 const G4double startAnglePFS1IORT = 0.*deg;
0499 const G4double spanningAnglePFS1IORT = 360.*deg;
0500 const G4double XPositionPFS1IORT = -1041.905 *mm;
0501
0502
0503 solidPFS1IORT = new G4Tubs("PFS1IORT", innRadiusPFS1IORT,
0504 outRadiusPFS1IORT,
0505 hightPFS1IORT,
0506 startAnglePFS1IORT,
0507 spanningAnglePFS1IORT);
0508
0509 G4LogicalVolume* logPFS1IORT = new G4LogicalVolume(solidPFS1IORT,
0510 PFS1IORTMaterialIORT, "PFS1IORT", 0, 0, 0);
0511
0512 physiPFS1IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS1IORT),0.,0.)),
0513 "PFS1IORT", logPFS1IORT, physicalTreatmentRoom, false, 0);
0514
0515 logPFS1IORT -> SetVisAttributes(green);
0516
0517
0518
0519
0520
0521 const G4double outRadiusCCMIORT = 35. *mm;
0522 const G4double innRadiusCCMIORT = 10. *mm;
0523 const G4double hightCCMIORT = 4.0125 *mm;
0524 const G4double startAngleCCMIORT = 0.*deg;
0525 const G4double spanningAngleCCMIORT = 360.*deg;
0526 const G4double XPositionCCMIORT = -1037.0125 *mm;
0527
0528
0529 solidCCMIORT = new G4Tubs("CCMIORT", innRadiusCCMIORT,
0530 outRadiusCCMIORT,
0531 hightCCMIORT,
0532 startAngleCCMIORT,
0533 spanningAngleCCMIORT);
0534
0535 G4LogicalVolume* logCCMIORT = new G4LogicalVolume(solidCCMIORT,
0536 CCMIORTMaterialIORT, "CCMIORT", 0, 0, 0);
0537
0538 physiCCMIORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCCMIORT),0.,0.)),
0539 "CCMIORT", logCCMIORT, physicalTreatmentRoom, false, 0);
0540
0541 logCCMIORT -> SetVisAttributes(green);
0542
0543
0544
0545
0546
0547
0548 const G4double outRadiusCM2_2_2IORT = 20. *mm;
0549 const G4double innRadiusCM2_2_2IORT = 0. *mm;
0550 const G4double hightCM2_2_2IORT = 0.025 *mm;
0551 const G4double startAngleCM2_2_2IORT = 0.*deg;
0552 const G4double spanningAngleCM2_2_2IORT = 360.*deg;
0553 const G4double XPositionCM2_2_2IORT = -1041. *mm;
0554
0555
0556 solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT", innRadiusCM2_2_2IORT,
0557 outRadiusCM2_2_2IORT,
0558 hightCM2_2_2IORT,
0559 startAngleCM2_2_2IORT,
0560 spanningAngleCM2_2_2IORT);
0561
0562 G4LogicalVolume* logCM2_2_2IORT = new G4LogicalVolume(solidCM2_2_2IORT,
0563 CM2_2_2IORTMaterialIORT, "CM2_2_2IORT", 0, 0, 0);
0564
0565 physiCM2_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_2_2IORT),0.,0.)),
0566 "CM2_2_2ORT", logCM2_2_2IORT, physicalTreatmentRoom, false, 0);
0567
0568 logCM2_2_2IORT -> SetVisAttributes(green);
0569
0570
0571
0572
0573
0574
0575 const G4double outRadiusCM2_1_2IORT = 20. *mm;
0576 const G4double innRadiusCM2_1_2IORT = 0. *mm;
0577 const G4double hightCM2_1_2IORT = 0.025 *mm;
0578 const G4double startAngleCM2_1_2IORT = 0.*deg;
0579 const G4double spanningAngleCM2_1_2IORT = 360.*deg;
0580 const G4double XPositionCM2_1_2IORT = -1039. *mm;
0581
0582
0583 solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT", innRadiusCM2_1_2IORT,
0584 outRadiusCM2_1_2IORT,
0585 hightCM2_1_2IORT,
0586 startAngleCM2_1_2IORT,
0587 spanningAngleCM2_1_2IORT);
0588
0589 G4LogicalVolume* logCM2_1_2IORT = new G4LogicalVolume(solidCM2_1_2IORT,
0590 CM2_1_2IORTMaterialIORT, "CM2_1_2IORT", 0, 0, 0);
0591
0592 physiCM2_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_1_2IORT),0.,0.)),
0593 "CM2_1_2ORT", logCM2_1_2IORT, physicalTreatmentRoom, false, 0);
0594
0595 logCM2_1_2IORT -> SetVisAttributes(yellow);
0596
0597
0598
0599
0600
0601 const G4double outRadiusCM1_2_2IORT = 20. *mm;
0602 const G4double innRadiusCM1_2_2IORT = 0. *mm;
0603 const G4double hightCM1_2_2IORT = 0.025 *mm;
0604 const G4double startAngleCM1_2_2IORT = 0.*deg;
0605 const G4double spanningAngleCM1_2_2IORT = 360.*deg;
0606 const G4double XPositionCM1_2_2IORT = -1037. *mm;
0607
0608
0609 solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT", innRadiusCM1_2_2IORT,
0610 outRadiusCM1_2_2IORT,
0611 hightCM1_2_2IORT,
0612 startAngleCM1_2_2IORT,
0613 spanningAngleCM1_2_2IORT);
0614
0615 G4LogicalVolume* logCM1_2_2IORT = new G4LogicalVolume(solidCM1_2_2IORT,
0616 CM1_2_2IORTMaterialIORT, "CM1_2_2IORT", 0, 0, 0);
0617
0618 physiCM1_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_2_2IORT),0.,0.)),
0619 "CM1_2_2ORT", logCM1_2_2IORT, physicalTreatmentRoom, false, 0);
0620
0621
0622 logCM1_2_2IORT -> SetVisAttributes(yellow);
0623
0624
0625
0626
0627
0628 const G4double outRadiusCM1_1_2IORT = 20. *mm;
0629 const G4double innRadiusCM1_1_2IORT = 0. *mm;
0630 const G4double hightCM1_1_2IORT = 0.025 *mm;
0631 const G4double startAngleCM1_1_2IORT = 0.*deg;
0632 const G4double spanningAngleCM1_1_2IORT = 360.*deg;
0633 const G4double XPositionCM1_1_2IORT = -1035. *mm;
0634
0635
0636
0637 solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT", innRadiusCM1_1_2IORT,
0638 outRadiusCM1_1_2IORT,
0639 hightCM1_1_2IORT,
0640 startAngleCM1_1_2IORT,
0641 spanningAngleCM1_1_2IORT);
0642
0643 G4LogicalVolume* logCM1_1_2IORT = new G4LogicalVolume(solidCM1_1_2IORT,
0644 CM1_1_2IORTMaterialIORT, "CM1_1_2IORT", 0, 0, 0);
0645
0646 physiCM1_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_1_2IORT),0.,0.)),
0647 "CM1_1_2ORT", logCM1_1_2IORT, physicalTreatmentRoom, false, 0);
0648 logCM1_1_2IORT -> SetVisAttributes(yellow);
0649 }
0650
0651 void Collimator100BeamLine::IortBeamLineBlocks()
0652 {
0653
0654 G4double phi4 = 90. *deg;
0655
0656
0657 G4RotationMatrix rm4;
0658 rm4.rotateY(phi4);
0659
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669
0670 const G4double outRadiusBlocco20mmIORT = 36.5 *mm;
0671 const G4double innRadiusBlocco20mmIORT = 10. *mm;
0672 const G4double hightBlocco20mmIORT = 3. *mm;
0673 const G4double startAngleBlocco20mmIORT = 0.*deg;
0674 const G4double spanningAngleBlocco20mmIORT = 360.*deg;
0675 const G4double XPositionBlocco20mmIORT = -1030. *mm;
0676
0677
0678 solidBlocco20mmIORT = new G4Tubs("Blocco20mmIORT", innRadiusBlocco20mmIORT,
0679 outRadiusBlocco20mmIORT,
0680 hightBlocco20mmIORT,
0681 startAngleBlocco20mmIORT,
0682 spanningAngleBlocco20mmIORT);
0683
0684 G4LogicalVolume* logBlocco20mmIORT = new G4LogicalVolume(solidBlocco20mmIORT,
0685 Blocco20mmIORTMaterialIORT, "Blocco20mmIORT", 0, 0, 0);
0686
0687 physiBlocco20mmIORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco20mmIORT),0.,0.)),
0688 "Blocco20mmORT", logBlocco20mmIORT, physicalTreatmentRoom, false, 0);
0689
0690
0691 logBlocco20mmIORT -> SetVisAttributes(green);
0692
0693
0694
0695
0696
0697
0698 const G4double outRadiusBlocco3IORT = 36.5 *mm;
0699 const G4double innRadiusBlocco3IORT = 15. *mm;
0700 const G4double hightBlocco3IORT = 3.5 *mm;
0701 const G4double startAngleBlocco3IORT = 0.*deg;
0702 const G4double spanningAngleBlocco3IORT = 360.*deg;
0703 const G4double XPositionBlocco3IORT = -1023.5 *mm;
0704
0705
0706 solidBlocco3IORT = new G4Tubs("Blocco3IORT", innRadiusBlocco3IORT,
0707 outRadiusBlocco3IORT,
0708 hightBlocco3IORT,
0709 startAngleBlocco3IORT,
0710 spanningAngleBlocco3IORT);
0711
0712 G4LogicalVolume* logBlocco3IORT = new G4LogicalVolume(solidBlocco3IORT,
0713 Blocco3IORTMaterialIORT, "Blocco3IORT", 0, 0, 0);
0714
0715 physiBlocco3IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco3IORT),0.,0.)),
0716 "Blocco3ORT", logBlocco3IORT, physicalTreatmentRoom, false, 0);
0717
0718
0719 logBlocco3IORT -> SetVisAttributes(yellow);
0720
0721
0722
0723
0724
0725 const G4double outRadiusBlocco2IORT = 41.5 *mm;
0726 const G4double innRadiusBlocco2IORT = 15. *mm;
0727 const G4double hightBlocco2IORT = 8. *mm;
0728 const G4double startAngleBlocco2IORT = 0.*deg;
0729 const G4double spanningAngleBlocco2IORT = 360.*deg;
0730 const G4double XPositionBlocco2IORT = -1012. *mm;
0731
0732
0733 solidBlocco2IORT = new G4Tubs("Blocco2IORT", innRadiusBlocco2IORT,
0734 outRadiusBlocco2IORT,
0735 hightBlocco2IORT,
0736 startAngleBlocco2IORT,
0737 spanningAngleBlocco2IORT);
0738
0739 G4LogicalVolume* logBlocco2IORT = new G4LogicalVolume(solidBlocco2IORT,
0740 Blocco2IORTMaterialIORT, "Blocco2IORT", 0, 0, 0);
0741
0742 physiBlocco2IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco2IORT),0.,0.)),
0743 "Blocco2IORT", logBlocco2IORT, physicalTreatmentRoom, false, 0);
0744
0745
0746 logBlocco2IORT -> SetVisAttributes(red);
0747
0748
0749
0750
0751
0752 const G4double outRadiusBlocco1IORT = 52.0 *mm;
0753 const G4double innRadiusBlocco1IORT = 15. *mm;
0754 const G4double hightBlocco1IORT = 8.5 *mm;
0755 const G4double startAngleBlocco1IORT = 0.*deg;
0756 const G4double spanningAngleBlocco1IORT = 360.*deg;
0757 const G4double XPositionBlocco1IORT = -995.5*mm;
0758
0759
0760 solidBlocco1IORT = new G4Tubs("Blocco1IORT", innRadiusBlocco1IORT,
0761 outRadiusBlocco1IORT,
0762 hightBlocco1IORT,
0763 startAngleBlocco1IORT,
0764 spanningAngleBlocco1IORT);
0765
0766 G4LogicalVolume* logBlocco1IORT = new G4LogicalVolume(solidBlocco1IORT,
0767 Blocco1IORTMaterialIORT, "Blocco1IORT", 0, 0, 0);
0768
0769 physiBlocco1IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco1IORT),0.,0.)),
0770 "Blocco1IORT", logBlocco1IORT, physicalTreatmentRoom, false, 0);
0771
0772
0773 logBlocco1IORT -> SetVisAttributes(white);
0774
0775 }
0776
0777 void Collimator100BeamLine::IortBeamLineJunctions()
0778 {
0779
0780
0781 G4double phi5 = 90. *deg;
0782
0783
0784 G4RotationMatrix rm5;
0785 rm5.rotateY(phi5);
0786
0787
0788
0789
0790 const G4double outRadiusGiunz5FinalCollIORT = 48.25 *mm;
0791 const G4double innRadiusGiunz5FinalCollIORT = 13.75 *mm;
0792 const G4double hightGiunz5FinalCollIORT = 3.5 *mm;
0793 const G4double startAngleGiunz5FinalCollIORT = 0.*deg;
0794 const G4double spanningAngleGiunz5FinalCollIORT = 360.*deg;
0795 const G4double Giunz5FinalCollXPositionIORT = -983.5 *mm;
0796
0797
0798
0799 solidGiunz5FinalCollIORT = new G4Tubs("Giunz5FinalCollIORT", innRadiusGiunz5FinalCollIORT,
0800 outRadiusGiunz5FinalCollIORT,
0801 hightGiunz5FinalCollIORT,
0802 startAngleGiunz5FinalCollIORT,
0803 spanningAngleGiunz5FinalCollIORT);
0804
0805 G4LogicalVolume* logGiunz5FinalCollIORT = new G4LogicalVolume(solidGiunz5FinalCollIORT,
0806 Giunz5FinalCollMaterialIORT, "Giunz5FinalCollIORT", 0, 0, 0);
0807
0808 physiGiunz5FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz5FinalCollXPositionIORT),0.,0.)),
0809 "Giunz5FinalCollIORT", logGiunz5FinalCollIORT, physicalTreatmentRoom, false, 0);
0810
0811 logGiunz5FinalCollIORT -> SetVisAttributes(yellow);
0812
0813
0814
0815
0816
0817 const G4double outRadiusGiunz4FinalCollIORT = 42. *mm;
0818 const G4double innRadiusGiunz4FinalCollIORT = 13.75 *mm;
0819 const G4double hightGiunz4FinalCollIORT = 8.5 *mm;
0820 const G4double startAngleGiunz4FinalCollIORT = 0.*deg;
0821 const G4double spanningAngleGiunz4FinalCollIORT = 360.*deg;
0822 const G4double Giunz4FinalCollXPositionIORT = -971.5 *mm;
0823
0824
0825
0826 solidGiunz4FinalCollIORT = new G4Tubs("Giunz4FinalCollIORT", innRadiusGiunz4FinalCollIORT,
0827 outRadiusGiunz4FinalCollIORT,
0828 hightGiunz4FinalCollIORT,
0829 startAngleGiunz4FinalCollIORT,
0830 spanningAngleGiunz4FinalCollIORT);
0831
0832 G4LogicalVolume* logGiunz4FinalCollIORT = new G4LogicalVolume(solidGiunz4FinalCollIORT,
0833 Giunz4FinalCollMaterialIORT, "Giunz4FinalCollIORT", 0, 0, 0);
0834
0835 physiGiunz4FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz4FinalCollXPositionIORT),0.,0.)),
0836 "Giunz4FinalCollIORT", logGiunz4FinalCollIORT, physicalTreatmentRoom, false, 0);
0837
0838 logGiunz4FinalCollIORT -> SetVisAttributes(blue);
0839
0840
0841
0842
0843
0844
0845
0846 const G4double outRadiusGiunz3FinalCollIORT = 42. *mm;
0847 const G4double innRadiusGiunz3FinalCollIORT = 0. *mm;
0848 const G4double hightGiunz3FinalCollIORT = 4.25 *mm;
0849 const G4double startAngleGiunz3FinalCollIORT = 0.*deg;
0850 const G4double spanningAngleGiunz3FinalCollIORT = 360.*deg;
0851 const G4double Giunz3FinalCollXPositionIORT = -958.75 *mm;
0852
0853
0854 solidGiunz3FinalCollIORT = new G4Tubs("Giunz3FinalCollIORT", innRadiusGiunz3FinalCollIORT,
0855 outRadiusGiunz3FinalCollIORT,
0856 hightGiunz3FinalCollIORT,
0857 startAngleGiunz3FinalCollIORT,
0858 spanningAngleGiunz3FinalCollIORT);
0859
0860 G4LogicalVolume* logicsolidGiunz3FinalCollIORT = new G4LogicalVolume(solidGiunz3FinalCollIORT,
0861 Giunz3FinalCollMaterialIORT, "Giunz3FinalCollIORT", 0, 0, 0);
0862
0863 physiGiunz3FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz3FinalCollXPositionIORT),0.,0.)),
0864 "Giunz3FinalCollIORT", logicsolidGiunz3FinalCollIORT, physicalTreatmentRoom, false, 0);
0865
0866 logicsolidGiunz3FinalCollIORT -> SetVisAttributes(yellow);
0867
0868
0869
0870
0871
0872
0873
0874
0875
0876
0877 solidGiunz3FinalCollIntIORT = new G4Cons("Giunz3FinalCollIntIORT",0.*mm,13.75*mm,0.*mm,22.25*mm,4.25*mm,0.*deg,360.*deg);
0878
0879 G4LogicalVolume* logicsolidGiunz3FinalCollIntIORT = new G4LogicalVolume(solidGiunz3FinalCollIntIORT,
0880 Giunz3FinalCollMaterialIntIORT, "Giunz3FinalCollIntIORT", 0, 0, 0);
0881
0882 physiGiunz3FinalCollIntIORT = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.),"Giunz3FinalCollIntIORT", logicsolidGiunz3FinalCollIntIORT,physiGiunz3FinalCollIORT, false, 0);
0883
0884 logicsolidGiunz3FinalCollIntIORT -> SetVisAttributes(yellow);
0885
0886
0887
0888
0889
0890
0891 const G4double outRadiusGiunz2FinalCollIORT = 42. *mm;
0892 const G4double innRadiusGiunz2FinalCollIORT = 22.25 *mm;
0893 const G4double hightGiunz2FinalCollIORT = 5.75 *mm;
0894 const G4double startAngleGiunz2FinalCollIORT = 0.*deg;
0895 const G4double spanningAngleGiunz2FinalCollIORT = 360.*deg;
0896 const G4double Giunz2FinalCollXPositionIORT = -948.75 *mm;
0897
0898
0899
0900 solidGiunz2FinalCollIORT = new G4Tubs("Giunz2FinalCollIORT", innRadiusGiunz2FinalCollIORT,
0901 outRadiusGiunz2FinalCollIORT,
0902 hightGiunz2FinalCollIORT,
0903 startAngleGiunz2FinalCollIORT,
0904 spanningAngleGiunz2FinalCollIORT);
0905
0906 G4LogicalVolume* logGiunz2FinalCollIORT = new G4LogicalVolume(solidGiunz2FinalCollIORT,
0907 Giunz2FinalCollMaterialIORT, "Giunz2FinalCollIORT", 0, 0, 0);
0908
0909 physiGiunz2FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz2FinalCollXPositionIORT),0.,0.)),
0910 "Giunz2FinalCollIORT", logGiunz2FinalCollIORT, physicalTreatmentRoom, false, 0);
0911
0912 logGiunz2FinalCollIORT -> SetVisAttributes(red);
0913
0914
0915
0916
0917
0918 const G4double outRadiusGiunz1FinalCollIORT = 65. *mm;
0919 const G4double innRadiusGiunz1FinalCollIORT = 22.25 *mm;
0920 const G4double hightGiunz1FinalCollIORT = 10. *mm;
0921 const G4double startAngleGiunz1FinalCollIORT = 0.*deg;
0922 const G4double spanningAngleGiunz1FinalCollIORT = 360.*deg;
0923 const G4double Giunz1FinalCollXPositionIORT = -933.*mm;
0924
0925
0926
0927 solidGiunz1FinalCollIORT = new G4Tubs("Giunz1FinalCollIORT", innRadiusGiunz1FinalCollIORT,
0928 outRadiusGiunz1FinalCollIORT,
0929 hightGiunz1FinalCollIORT,
0930 startAngleGiunz1FinalCollIORT,
0931 spanningAngleGiunz1FinalCollIORT);
0932
0933 G4LogicalVolume* logGiunz1FinalCollIORT = new G4LogicalVolume(solidGiunz1FinalCollIORT,
0934 Giunz1FinalCollMaterialIORT, "Giunz1FinalCollIORT", 0, 0, 0);
0935
0936 physiGiunz1FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz1FinalCollXPositionIORT),0.,0.)),
0937 "Giunz1FinalCollIORT", logGiunz1FinalCollIORT, physicalTreatmentRoom, false, 0);
0938
0939 logGiunz1FinalCollIORT -> SetVisAttributes(gray);
0940
0941 }
0942
0943 void Collimator100BeamLine::IortBeamLineFinalCollimator()
0944 {
0945
0946
0947
0948
0949
0950
0951 const G4double hightFinalCollimatorIORT = 434. *mm;
0952 const G4double startAngleFinalCollimatorIORT = 0.*deg;
0953 const G4double spanningAngleFinalCollimatorIORT = 360.*deg;
0954 const G4double finalCollimatorXPositionIORT = -489.*mm;
0955
0956
0957
0958
0959 G4double phi6 = 90. *deg;
0960
0961
0962 G4RotationMatrix rm6;
0963 rm6.rotateY(phi6);
0964
0965
0966 solidFinalCollimatorIORT = new G4Tubs("FinalCollimatorIORT", innerRadiusFinalCollimatorIORT,
0967 OuterRadiusFinalCollimatorIORT,
0968 hightFinalCollimatorIORT,
0969 startAngleFinalCollimatorIORT,
0970 spanningAngleFinalCollimatorIORT);
0971
0972 G4LogicalVolume* logFinalCollimatorIORT = new G4LogicalVolume(solidFinalCollimatorIORT,
0973 finalCollimatorMaterialIORT, "FinalCollimatorIORT", 0, 0, 0);
0974
0975 physiFinalCollimatorIORT = new G4PVPlacement(G4Transform3D(rm6, G4ThreeVector((finalCollimatorXPositionIORT),0.,0.)),
0976 "FinalCollimatorIORT", logFinalCollimatorIORT, physicalTreatmentRoom, false, 0);
0977
0978
0979 logFinalCollimatorIORT -> SetVisAttributes(darkGreen);
0980
0981 }
0982
0983
0984
0985
0986
0987
0988 void Collimator100BeamLine::SetInnerRadiusFinalCollimatorIORT(G4double value)
0989 {
0990 solidFinalCollimatorIORT -> SetInnerRadius(value);
0991 G4RunManager::GetRunManager() -> GeometryHasBeenModified();
0992 G4cout<<"Inner Radius of the final collimator IORT is (mm):"
0993 << solidFinalCollimatorIORT -> GetInnerRadius()/mm
0994 << G4endl;
0995 }
0996
0997
0998
0999 void Collimator100BeamLine::SetOuterRadiusFinalCollimatorIORT(G4double value)
1000 {
1001 solidFinalCollimatorIORT -> SetOuterRadius(value);
1002 G4RunManager::GetRunManager() -> GeometryHasBeenModified();
1003 G4cout<<"Outer Radius of the final collimator IORT is (mm):"
1004 << solidFinalCollimatorIORT -> GetOuterRadius()/mm
1005 << G4endl;
1006 }
1007
1008
1009
1010
1011