File indexing completed on 2025-01-31 09:22:30
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 "Collimator70BeamLine.hh"
0057 #include "Collimator70BeamLineMessenger.hh"
0058
0059 Collimator70BeamLine::Collimator70BeamLine():
0060 physicalTreatmentRoom(0),iortDetectorConstruction(0),
0061
0062
0063
0064 solidFinalCollimatorIORT(0),
0065 physiFinalCollimatorIORT(0),
0066
0067 solidGiunz1FinalCollIORT(0),
0068 physiGiunz1FinalCollIORT(0),
0069
0070 solidGiunz2FinalCollIORT(0),
0071 physiGiunz2FinalCollIORT(0),
0072
0073 solidGiunz3FinalCollIORT(0),
0074 physiGiunz3FinalCollIORT(0),
0075
0076 solidGiunz3FinalCollIntIORT(0),
0077 physiGiunz3FinalCollIntIORT(0),
0078
0079 solidGiunz4FinalCollIORT(0),
0080 physiGiunz4FinalCollIORT(0),
0081
0082 solidGiunz5FinalCollIORT(0),
0083 physiGiunz5FinalCollIORT(0),
0084
0085 solidBlocco1IORT(0),
0086 physiBlocco1IORT(0),
0087
0088 solidBlocco2IORT(0),
0089 physiBlocco2IORT(0),
0090
0091 solidBlocco3IORT(0),
0092 physiBlocco3IORT(0),
0093
0094 solidBlocco20mmIORT(0),
0095 physiBlocco20mmIORT(0),
0096
0097 solidCM1_1_2IORT(0),
0098 physiCM1_1_2IORT(0),
0099
0100 solidCM1_2_2IORT(0),
0101 physiCM1_2_2IORT(0),
0102
0103 solidCM2_1_2IORT(0),
0104 physiCM2_1_2IORT(0),
0105
0106 solidCM2_2_2IORT(0),
0107 physiCM2_2_2IORT(0),
0108
0109 solidCCMIORT(0),
0110 physiCCMIORT(0),
0111
0112 solidPFS1IORT(0),
0113 physiPFS1IORT(0),
0114
0115 solidPFS2IORT(0),
0116 physiPFS2IORT(0),
0117
0118 solidPFS3IORT(0),
0119 physiPFS3IORT(0),
0120
0121 solidFTIORT(0),
0122 physiFTIORT(0)
0123
0124
0125 {
0126
0127 collimatorMessenger = new Collimator70BeamLineMessenger(this);
0128
0129 }
0130
0131 Collimator70BeamLine::~Collimator70BeamLine()
0132 {
0133 delete collimatorMessenger;
0134 delete iortDetectorConstruction;
0135 }
0136
0137
0138
0139
0140 G4VPhysicalVolume* Collimator70BeamLine::Construct()
0141 {
0142
0143 SetDefaultDimensions();
0144
0145
0146 ConstructCollimator70BeamLine();
0147
0148
0149
0150 iortDetectorConstruction = new IORTDetectorConstruction(physicalTreatmentRoom);
0151
0152 return physicalTreatmentRoom;
0153 }
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165 void Collimator70BeamLine::SetDefaultDimensions()
0166 {
0167
0168
0169 white = new G4VisAttributes( G4Colour());
0170 white -> SetVisibility(true);
0171
0172
0173 blue = new G4VisAttributes(G4Colour(0. ,0. ,1.));
0174 blue -> SetVisibility(true);
0175
0176
0177 gray = new G4VisAttributes( G4Colour(0.5, 0.5, 0.5 ));
0178 gray-> SetVisibility(true);
0179
0180
0181 red = new G4VisAttributes(G4Colour(1. ,0. ,0.));
0182 red-> SetVisibility(true);
0183
0184
0185 yellow = new G4VisAttributes(G4Colour(1., 1., 0. ));
0186 yellow-> SetVisibility(true);
0187
0188
0189 green = new G4VisAttributes( G4Colour(25/255. , 255/255. , 25/255. ));
0190 green -> SetVisibility(true);
0191
0192
0193 darkGreen = new G4VisAttributes( G4Colour(0/255. , 100/255. , 0/255. ));
0194 darkGreen -> SetVisibility(true);
0195
0196
0197 darkOrange3 = new G4VisAttributes( G4Colour(205/255. , 102/255. , 000/255. ));
0198 darkOrange3 -> SetVisibility(true);
0199
0200
0201 skyBlue = new G4VisAttributes( G4Colour(135/255. , 206/255. , 235/255. ));
0202 skyBlue -> SetVisibility(true);
0203
0204
0205
0206
0207
0208 G4double defaultOuterRadiusFinalCollimatorIORT = 40. *mm;
0209 OuterRadiusFinalCollimatorIORT = defaultOuterRadiusFinalCollimatorIORT;
0210
0211 G4double defaultinnerRadiusFinalCollimatorIORT = 35. *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 Collimator70BeamLine::ConstructCollimator70BeamLine()
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 Collimator70BeamLine::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 = -862.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
0385 logVSIORT -> SetVisAttributes(green);
0386 }
0387
0388 void Collimator70BeamLine::IortBeamLineTitaniumWindows()
0389 {
0390
0391
0392
0393
0394 G4double phi2 = 90. *deg;
0395
0396
0397 G4RotationMatrix rm2;
0398 rm2.rotateY(phi2);
0399
0400
0401 const G4double outRadiusFTIORT = 44.75 *mm;
0402 const G4double innRadiusFTIORT = 8.5 *mm;
0403 const G4double hightFTIORT = 0.006 *mm;
0404 const G4double startAngleFTIORT = 0.*deg;
0405 const G4double spanningAngleFTIORT = 360.*deg;
0406 const G4double XPositionFTIORT = -861.791 *mm;
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 Collimator70BeamLine::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 = -848.755 *mm;
0448
0449 solidPFS3IORT = new G4Tubs("PFS3IORT", innRadiusPFS3IORT,
0450 outRadiusPFS3IORT,
0451 hightPFS3IORT,
0452 startAnglePFS3IORT,
0453 spanningAnglePFS3IORT);
0454
0455 G4LogicalVolume* logPFS3IORT = new G4LogicalVolume(solidPFS3IORT,
0456 PFS3IORTMaterialIORT, "PFS3IORT", 0, 0, 0);
0457
0458 physiPFS3IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS3IORT),0.,0.)),
0459 "PFS3IORT", logPFS3IORT, physicalTreatmentRoom, false, 0);
0460
0461 logPFS3IORT -> SetVisAttributes(white);
0462
0463
0464
0465
0466
0467
0468 const G4double outRadiusPFS2IORT = 44.75 *mm;
0469 const G4double innRadiusPFS2IORT = 10. *mm;
0470 const G4double hightPFS2IORT = 1.47 *mm;
0471 const G4double startAnglePFS2IORT = 0.*deg;
0472 const G4double spanningAnglePFS2IORT = 360.*deg;
0473 const G4double XPositionPFS2IORT = -844.255 *mm;
0474
0475 solidPFS2IORT = new G4Tubs("PFS2IORT", innRadiusPFS2IORT,
0476 outRadiusPFS2IORT,
0477 hightPFS2IORT,
0478 startAnglePFS2IORT,
0479 spanningAnglePFS2IORT);
0480
0481 G4LogicalVolume* logPFS2IORT = new G4LogicalVolume(solidPFS2IORT,
0482 PFS2IORTMaterialIORT, "PFS2IORT", 0, 0, 0);
0483
0484 physiPFS2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS2IORT),0.,0.)),
0485 "PFS2IORT", logPFS2IORT, physicalTreatmentRoom, false, 0);
0486
0487 logPFS2IORT -> SetVisAttributes(green);
0488
0489
0490
0491
0492
0493 const G4double outRadiusPFS1IORT = 35. *mm;
0494 const G4double innRadiusPFS1IORT = 10. *mm;
0495 const G4double hightPFS1IORT = 0.88 *mm;
0496 const G4double startAnglePFS1IORT = 0.*deg;
0497 const G4double spanningAnglePFS1IORT = 360.*deg;
0498 const G4double XPositionPFS1IORT = -841.905 *mm;
0499
0500 solidPFS1IORT = new G4Tubs("PFS1IORT", innRadiusPFS1IORT,
0501 outRadiusPFS1IORT,
0502 hightPFS1IORT,
0503 startAnglePFS1IORT,
0504 spanningAnglePFS1IORT);
0505
0506 G4LogicalVolume* logPFS1IORT = new G4LogicalVolume(solidPFS1IORT,
0507 PFS1IORTMaterialIORT, "PFS1IORT", 0, 0, 0);
0508
0509 physiPFS1IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS1IORT),0.,0.)),
0510 "PFS1IORT", logPFS1IORT, physicalTreatmentRoom, false, 0);
0511
0512 logPFS1IORT -> SetVisAttributes(green);
0513
0514
0515
0516
0517
0518 const G4double outRadiusCCMIORT = 35. *mm;
0519 const G4double innRadiusCCMIORT = 10. *mm;
0520 const G4double hightCCMIORT = 4.0125 *mm;
0521 const G4double startAngleCCMIORT = 0.*deg;
0522 const G4double spanningAngleCCMIORT = 360.*deg;
0523 const G4double XPositionCCMIORT = -837.0125 *mm;
0524
0525 solidCCMIORT = new G4Tubs("CCMIORT", innRadiusCCMIORT,
0526 outRadiusCCMIORT,
0527 hightCCMIORT,
0528 startAngleCCMIORT,
0529 spanningAngleCCMIORT);
0530
0531 G4LogicalVolume* logCCMIORT = new G4LogicalVolume(solidCCMIORT,
0532 CCMIORTMaterialIORT, "CCMIORT", 0, 0, 0);
0533
0534 physiCCMIORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCCMIORT),0.,0.)),
0535 "CCMIORT", logCCMIORT, physicalTreatmentRoom, false, 0);
0536
0537 logCCMIORT -> SetVisAttributes(green);
0538
0539
0540
0541
0542
0543
0544 const G4double outRadiusCM2_2_2IORT = 20. *mm;
0545 const G4double innRadiusCM2_2_2IORT = 0. *mm;
0546 const G4double hightCM2_2_2IORT = 0.025 *mm;
0547 const G4double startAngleCM2_2_2IORT = 0.*deg;
0548 const G4double spanningAngleCM2_2_2IORT = 360.*deg;
0549 const G4double XPositionCM2_2_2IORT = -841. *mm;
0550
0551 solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT", innRadiusCM2_2_2IORT,
0552 outRadiusCM2_2_2IORT,
0553 hightCM2_2_2IORT,
0554 startAngleCM2_2_2IORT,
0555 spanningAngleCM2_2_2IORT);
0556
0557 G4LogicalVolume* logCM2_2_2IORT = new G4LogicalVolume(solidCM2_2_2IORT,
0558 CM2_2_2IORTMaterialIORT, "CM2_2_2IORT", 0, 0, 0);
0559
0560 physiCM2_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_2_2IORT),0.,0.)),
0561 "CM2_2_2ORT", logCM2_2_2IORT, physicalTreatmentRoom, false, 0);
0562
0563 logCM2_2_2IORT -> SetVisAttributes(green);
0564
0565
0566
0567
0568
0569
0570 const G4double outRadiusCM2_1_2IORT = 20. *mm;
0571 const G4double innRadiusCM2_1_2IORT = 0. *mm;
0572 const G4double hightCM2_1_2IORT = 0.025 *mm;
0573 const G4double startAngleCM2_1_2IORT = 0.*deg;
0574 const G4double spanningAngleCM2_1_2IORT = 360.*deg;
0575 const G4double XPositionCM2_1_2IORT = -839. *mm;
0576
0577 solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT", innRadiusCM2_1_2IORT,
0578 outRadiusCM2_1_2IORT,
0579 hightCM2_1_2IORT,
0580 startAngleCM2_1_2IORT,
0581 spanningAngleCM2_1_2IORT);
0582
0583 G4LogicalVolume* logCM2_1_2IORT = new G4LogicalVolume(solidCM2_1_2IORT,
0584 CM2_1_2IORTMaterialIORT, "CM2_1_2IORT", 0, 0, 0);
0585
0586 physiCM2_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_1_2IORT),0.,0.)),
0587 "CM2_1_2ORT", logCM2_1_2IORT, physicalTreatmentRoom, false, 0);
0588
0589 logCM2_1_2IORT -> SetVisAttributes(yellow);
0590
0591
0592
0593
0594
0595 const G4double outRadiusCM1_2_2IORT = 20. *mm;
0596 const G4double innRadiusCM1_2_2IORT = 0. *mm;
0597 const G4double hightCM1_2_2IORT = 0.025 *mm;
0598 const G4double startAngleCM1_2_2IORT = 0.*deg;
0599 const G4double spanningAngleCM1_2_2IORT = 360.*deg;
0600 const G4double XPositionCM1_2_2IORT = -837. *mm;
0601
0602 solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT", innRadiusCM1_2_2IORT,
0603 outRadiusCM1_2_2IORT,
0604 hightCM1_2_2IORT,
0605 startAngleCM1_2_2IORT,
0606 spanningAngleCM1_2_2IORT);
0607
0608 G4LogicalVolume* logCM1_2_2IORT = new G4LogicalVolume(solidCM1_2_2IORT,
0609 CM1_2_2IORTMaterialIORT, "CM1_2_2IORT", 0, 0, 0);
0610
0611 physiCM1_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_2_2IORT),0.,0.)),
0612 "CM1_2_2ORT", logCM1_2_2IORT, physicalTreatmentRoom, false, 0);
0613
0614 logCM1_2_2IORT -> SetVisAttributes(yellow);
0615
0616
0617
0618
0619
0620 const G4double outRadiusCM1_1_2IORT = 20. *mm;
0621 const G4double innRadiusCM1_1_2IORT = 0. *mm;
0622 const G4double hightCM1_1_2IORT = 0.025 *mm;
0623 const G4double startAngleCM1_1_2IORT = 0.*deg;
0624 const G4double spanningAngleCM1_1_2IORT = 360.*deg;
0625 const G4double XPositionCM1_1_2IORT = -835. *mm;
0626
0627 solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT", innRadiusCM1_1_2IORT,
0628 outRadiusCM1_1_2IORT,
0629 hightCM1_1_2IORT,
0630 startAngleCM1_1_2IORT,
0631 spanningAngleCM1_1_2IORT);
0632
0633 G4LogicalVolume* logCM1_1_2IORT = new G4LogicalVolume(solidCM1_1_2IORT,
0634 CM1_1_2IORTMaterialIORT, "CM1_1_2IORT", 0, 0, 0);
0635
0636 physiCM1_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_1_2IORT),0.,0.)),
0637 "CM1_1_2ORT", logCM1_1_2IORT, physicalTreatmentRoom, false, 0);
0638
0639 logCM1_1_2IORT -> SetVisAttributes(yellow);
0640 }
0641
0642 void Collimator70BeamLine::IortBeamLineBlocks()
0643 {
0644
0645 G4double phi4 = 90. *deg;
0646
0647
0648 G4RotationMatrix rm4;
0649 rm4.rotateY(phi4);
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661 const G4double outRadiusBlocco20mmIORT = 36.5 *mm;
0662 const G4double innRadiusBlocco20mmIORT = 10. *mm;
0663 const G4double hightBlocco20mmIORT = 3. *mm;
0664 const G4double startAngleBlocco20mmIORT = 0.*deg;
0665 const G4double spanningAngleBlocco20mmIORT = 360.*deg;
0666 const G4double XPositionBlocco20mmIORT = -830. *mm;
0667
0668 solidBlocco20mmIORT = new G4Tubs("Blocco20mmIORT", innRadiusBlocco20mmIORT,
0669 outRadiusBlocco20mmIORT,
0670 hightBlocco20mmIORT,
0671 startAngleBlocco20mmIORT,
0672 spanningAngleBlocco20mmIORT);
0673
0674 G4LogicalVolume* logBlocco20mmIORT = new G4LogicalVolume(solidBlocco20mmIORT,
0675 Blocco20mmIORTMaterialIORT, "Blocco20mmIORT", 0, 0, 0);
0676
0677 physiBlocco20mmIORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco20mmIORT),0.,0.)),
0678 "Blocco20mmORT", logBlocco20mmIORT, physicalTreatmentRoom, false, 0);
0679
0680 logBlocco20mmIORT -> SetVisAttributes(green);
0681
0682
0683
0684
0685
0686
0687 const G4double outRadiusBlocco3IORT = 36.5 *mm;
0688 const G4double innRadiusBlocco3IORT = 15. *mm;
0689 const G4double hightBlocco3IORT = 3.5 *mm;
0690 const G4double startAngleBlocco3IORT = 0.*deg;
0691 const G4double spanningAngleBlocco3IORT = 360.*deg;
0692 const G4double XPositionBlocco3IORT = -823.5 *mm;
0693
0694 solidBlocco3IORT = new G4Tubs("Blocco3IORT", innRadiusBlocco3IORT,
0695 outRadiusBlocco3IORT,
0696 hightBlocco3IORT,
0697 startAngleBlocco3IORT,
0698 spanningAngleBlocco3IORT);
0699
0700 G4LogicalVolume* logBlocco3IORT = new G4LogicalVolume(solidBlocco3IORT,
0701 Blocco3IORTMaterialIORT, "Blocco3IORT", 0, 0, 0);
0702
0703 physiBlocco3IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco3IORT),0.,0.)),
0704 "Blocco3ORT", logBlocco3IORT, physicalTreatmentRoom, false, 0);
0705
0706 logBlocco3IORT -> SetVisAttributes(yellow);
0707
0708
0709
0710
0711
0712 const G4double outRadiusBlocco2IORT = 41.5 *mm;
0713 const G4double innRadiusBlocco2IORT = 15. *mm;
0714 const G4double hightBlocco2IORT = 8. *mm;
0715 const G4double startAngleBlocco2IORT = 0.*deg;
0716 const G4double spanningAngleBlocco2IORT = 360.*deg;
0717 const G4double XPositionBlocco2IORT = -812. *mm;
0718
0719 solidBlocco2IORT = new G4Tubs("Blocco2IORT", innRadiusBlocco2IORT,
0720 outRadiusBlocco2IORT,
0721 hightBlocco2IORT,
0722 startAngleBlocco2IORT,
0723 spanningAngleBlocco2IORT);
0724
0725 G4LogicalVolume* logBlocco2IORT = new G4LogicalVolume(solidBlocco2IORT,
0726 Blocco2IORTMaterialIORT, "Blocco2IORT", 0, 0, 0);
0727
0728 physiBlocco2IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco2IORT),0.,0.)),
0729 "Blocco2IORT", logBlocco2IORT, physicalTreatmentRoom, false, 0);
0730
0731 logBlocco2IORT -> SetVisAttributes(red);
0732
0733
0734
0735
0736
0737 const G4double outRadiusBlocco1IORT = 52.0 *mm;
0738 const G4double innRadiusBlocco1IORT = 15. *mm;
0739 const G4double hightBlocco1IORT = 8.5 *mm;
0740 const G4double startAngleBlocco1IORT = 0.*deg;
0741 const G4double spanningAngleBlocco1IORT = 360.*deg;
0742 const G4double XPositionBlocco1IORT = -795.5*mm;
0743
0744 solidBlocco1IORT = new G4Tubs("Blocco1IORT", innRadiusBlocco1IORT,
0745 outRadiusBlocco1IORT,
0746 hightBlocco1IORT,
0747 startAngleBlocco1IORT,
0748 spanningAngleBlocco1IORT);
0749
0750 G4LogicalVolume* logBlocco1IORT = new G4LogicalVolume(solidBlocco1IORT,
0751 Blocco1IORTMaterialIORT, "Blocco1IORT", 0, 0, 0);
0752
0753 physiBlocco1IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco1IORT),0.,0.)),
0754 "Blocco1IORT", logBlocco1IORT, physicalTreatmentRoom, false, 0);
0755
0756 logBlocco1IORT -> SetVisAttributes(white);
0757 }
0758
0759 void Collimator70BeamLine::IortBeamLineJunctions()
0760 {
0761
0762
0763 G4double phi5 = 90. *deg;
0764
0765
0766 G4RotationMatrix rm5;
0767 rm5.rotateY(phi5);
0768
0769
0770
0771
0772 const G4double outRadiusGiunz5FinalCollIORT = 48.25 *mm;
0773 const G4double innRadiusGiunz5FinalCollIORT = 13.75 *mm;
0774 const G4double hightGiunz5FinalCollIORT = 3.5 *mm;
0775 const G4double startAngleGiunz5FinalCollIORT = 0.*deg;
0776 const G4double spanningAngleGiunz5FinalCollIORT = 360.*deg;
0777 const G4double Giunz5FinalCollXPositionIORT = -783.5 *mm;
0778
0779 solidGiunz5FinalCollIORT = new G4Tubs("Giunz5FinalCollIORT", innRadiusGiunz5FinalCollIORT,
0780 outRadiusGiunz5FinalCollIORT,
0781 hightGiunz5FinalCollIORT,
0782 startAngleGiunz5FinalCollIORT,
0783 spanningAngleGiunz5FinalCollIORT);
0784
0785 G4LogicalVolume* logGiunz5FinalCollIORT = new G4LogicalVolume(solidGiunz5FinalCollIORT,
0786 Giunz5FinalCollMaterialIORT, "Giunz5FinalCollIORT", 0, 0, 0);
0787
0788 physiGiunz5FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz5FinalCollXPositionIORT),0.,0.)),
0789 "Giunz5FinalCollIORT", logGiunz5FinalCollIORT, physicalTreatmentRoom, false, 0);
0790
0791 logGiunz5FinalCollIORT -> SetVisAttributes(yellow);
0792
0793
0794
0795
0796
0797 const G4double outRadiusGiunz4FinalCollIORT = 42. *mm;
0798 const G4double innRadiusGiunz4FinalCollIORT = 13.75 *mm;
0799 const G4double hightGiunz4FinalCollIORT = 8.5 *mm;
0800 const G4double startAngleGiunz4FinalCollIORT = 0.*deg;
0801 const G4double spanningAngleGiunz4FinalCollIORT = 360.*deg;
0802 const G4double Giunz4FinalCollXPositionIORT = -771.5 *mm;
0803
0804 solidGiunz4FinalCollIORT = new G4Tubs("Giunz4FinalCollIORT", innRadiusGiunz4FinalCollIORT,
0805 outRadiusGiunz4FinalCollIORT,
0806 hightGiunz4FinalCollIORT,
0807 startAngleGiunz4FinalCollIORT,
0808 spanningAngleGiunz4FinalCollIORT);
0809
0810 G4LogicalVolume* logGiunz4FinalCollIORT = new G4LogicalVolume(solidGiunz4FinalCollIORT,
0811 Giunz4FinalCollMaterialIORT, "Giunz4FinalCollIORT", 0, 0, 0);
0812
0813 physiGiunz4FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz4FinalCollXPositionIORT),0.,0.)),
0814 "Giunz4FinalCollIORT", logGiunz4FinalCollIORT, physicalTreatmentRoom, false, 0);
0815
0816 logGiunz4FinalCollIORT -> SetVisAttributes(blue);
0817
0818
0819
0820
0821
0822
0823
0824 const G4double outRadiusGiunz3FinalCollIORT = 42. *mm;
0825 const G4double innRadiusGiunz3FinalCollIORT = 0. *mm;
0826 const G4double hightGiunz3FinalCollIORT = 4.25 *mm;
0827 const G4double startAngleGiunz3FinalCollIORT = 0.*deg;
0828 const G4double spanningAngleGiunz3FinalCollIORT = 360.*deg;
0829 const G4double Giunz3FinalCollXPositionIORT = -758.75 *mm;
0830
0831 solidGiunz3FinalCollIORT = new G4Tubs("Giunz3FinalCollIORT", innRadiusGiunz3FinalCollIORT,
0832 outRadiusGiunz3FinalCollIORT,
0833 hightGiunz3FinalCollIORT,
0834 startAngleGiunz3FinalCollIORT,
0835 spanningAngleGiunz3FinalCollIORT);
0836
0837 G4LogicalVolume* logicsolidGiunz3FinalCollIORT = new G4LogicalVolume(solidGiunz3FinalCollIORT,
0838 Giunz3FinalCollMaterialIORT, "Giunz3FinalCollIORT", 0, 0, 0);
0839
0840 physiGiunz3FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz3FinalCollXPositionIORT),0.,0.)),
0841 "Giunz3FinalCollIORT", logicsolidGiunz3FinalCollIORT, physicalTreatmentRoom, false, 0);
0842
0843 logicsolidGiunz3FinalCollIORT -> SetVisAttributes(yellow);
0844
0845
0846
0847
0848
0849
0850
0851
0852
0853
0854 solidGiunz3FinalCollIntIORT = new G4Cons("Giunz3FinalCollIntIORT",0.*mm,13.75*mm,0.*mm,22.25*mm,4.25*mm,0.*deg,360.*deg);
0855
0856 G4LogicalVolume* logicsolidGiunz3FinalCollIntIORT = new G4LogicalVolume(solidGiunz3FinalCollIntIORT,
0857 Giunz3FinalCollMaterialIntIORT, "Giunz3FinalCollIntIORT", 0, 0, 0);
0858
0859 physiGiunz3FinalCollIntIORT = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.),"Giunz3FinalCollIntIORT", logicsolidGiunz3FinalCollIntIORT,physiGiunz3FinalCollIORT, false, 0);
0860
0861 logicsolidGiunz3FinalCollIntIORT -> SetVisAttributes(yellow);
0862
0863
0864
0865
0866
0867
0868 const G4double outRadiusGiunz2FinalCollIORT = 42. *mm;
0869 const G4double innRadiusGiunz2FinalCollIORT = 22.25 *mm;
0870 const G4double hightGiunz2FinalCollIORT = 5.75 *mm;
0871 const G4double startAngleGiunz2FinalCollIORT = 0.*deg;
0872 const G4double spanningAngleGiunz2FinalCollIORT = 360.*deg;
0873 const G4double Giunz2FinalCollXPositionIORT = -748.75 *mm;
0874
0875 solidGiunz2FinalCollIORT = new G4Tubs("Giunz2FinalCollIORT", innRadiusGiunz2FinalCollIORT,
0876 outRadiusGiunz2FinalCollIORT,
0877 hightGiunz2FinalCollIORT,
0878 startAngleGiunz2FinalCollIORT,
0879 spanningAngleGiunz2FinalCollIORT);
0880
0881 G4LogicalVolume* logGiunz2FinalCollIORT = new G4LogicalVolume(solidGiunz2FinalCollIORT,
0882 Giunz2FinalCollMaterialIORT, "Giunz2FinalCollIORT", 0, 0, 0);
0883
0884 physiGiunz2FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz2FinalCollXPositionIORT),0.,0.)),
0885 "Giunz2FinalCollIORT", logGiunz2FinalCollIORT, physicalTreatmentRoom, false, 0);
0886
0887 logGiunz2FinalCollIORT -> SetVisAttributes(red);
0888
0889
0890
0891
0892
0893 const G4double outRadiusGiunz1FinalCollIORT = 50. *mm;
0894 const G4double innRadiusGiunz1FinalCollIORT = 22.25 *mm;
0895 const G4double hightGiunz1FinalCollIORT = 10. *mm;
0896 const G4double startAngleGiunz1FinalCollIORT = 0.*deg;
0897 const G4double spanningAngleGiunz1FinalCollIORT = 360.*deg;
0898 const G4double Giunz1FinalCollXPositionIORT = -733.*mm;
0899
0900 solidGiunz1FinalCollIORT = new G4Tubs("Giunz1FinalCollIORT", innRadiusGiunz1FinalCollIORT,
0901 outRadiusGiunz1FinalCollIORT,
0902 hightGiunz1FinalCollIORT,
0903 startAngleGiunz1FinalCollIORT,
0904 spanningAngleGiunz1FinalCollIORT);
0905
0906 G4LogicalVolume* logGiunz1FinalCollIORT = new G4LogicalVolume(solidGiunz1FinalCollIORT,
0907 Giunz1FinalCollMaterialIORT, "Giunz1FinalCollIORT", 0, 0, 0);
0908
0909 physiGiunz1FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz1FinalCollXPositionIORT),0.,0.)),
0910 "Giunz1FinalCollIORT", logGiunz1FinalCollIORT, physicalTreatmentRoom, false, 0);
0911
0912 logGiunz1FinalCollIORT -> SetVisAttributes(gray);
0913
0914 }
0915
0916 void Collimator70BeamLine::IortBeamLineFinalCollimator()
0917 {
0918
0919
0920
0921
0922
0923
0924 const G4double hightFinalCollimatorIORT = 334. *mm;
0925 const G4double startAngleFinalCollimatorIORT = 0.*deg;
0926 const G4double spanningAngleFinalCollimatorIORT = 360.*deg;
0927 const G4double finalCollimatorXPositionIORT = -389.*mm;
0928
0929
0930
0931
0932 G4double phi6 = 90. *deg;
0933
0934
0935 G4RotationMatrix rm6;
0936 rm6.rotateY(phi6);
0937
0938
0939 solidFinalCollimatorIORT = new G4Tubs("FinalCollimatorIORT", innerRadiusFinalCollimatorIORT,
0940 OuterRadiusFinalCollimatorIORT,
0941 hightFinalCollimatorIORT,
0942 startAngleFinalCollimatorIORT,
0943 spanningAngleFinalCollimatorIORT);
0944
0945 G4LogicalVolume* logFinalCollimatorIORT = new G4LogicalVolume(solidFinalCollimatorIORT,
0946 finalCollimatorMaterialIORT, "FinalCollimatorIORT", 0, 0, 0);
0947
0948 physiFinalCollimatorIORT = new G4PVPlacement(G4Transform3D(rm6, G4ThreeVector((finalCollimatorXPositionIORT),0.,0.)),
0949 "FinalCollimatorIORT", logFinalCollimatorIORT, physicalTreatmentRoom, false, 0);
0950
0951
0952 logFinalCollimatorIORT -> SetVisAttributes(darkOrange3);
0953 }
0954
0955
0956
0957
0958
0959
0960 void Collimator70BeamLine::SetInnerRadiusFinalCollimatorIORT(G4double value)
0961 {
0962 solidFinalCollimatorIORT -> SetInnerRadius(value);
0963 G4RunManager::GetRunManager() -> GeometryHasBeenModified();
0964 G4cout<<"Inner Radius of the final collimator IORT is (mm):"
0965 << solidFinalCollimatorIORT -> GetInnerRadius()/mm
0966 << G4endl;
0967 }
0968
0969
0970
0971 void Collimator70BeamLine::SetOuterRadiusFinalCollimatorIORT(G4double value)
0972 {
0973 solidFinalCollimatorIORT -> SetOuterRadius(value);
0974 G4RunManager::GetRunManager() -> GeometryHasBeenModified();
0975 G4cout<<"Outer Radius of the final collimator IORT is (mm):"
0976 << solidFinalCollimatorIORT -> GetOuterRadius()/mm
0977 << G4endl;
0978 }
0979
0980
0981
0982
0983