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 "Collimator80BeamLine.hh"
0057 #include "Collimator80BeamLineMessenger.hh"
0058
0059 Collimator80BeamLine::Collimator80BeamLine():
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 Collimator80BeamLineMessenger(this);
0128
0129 }
0130
0131 Collimator80BeamLine::~Collimator80BeamLine()
0132 {
0133 delete collimatorMessenger;
0134 delete iortDetectorConstruction;
0135 }
0136
0137
0138
0139
0140 G4VPhysicalVolume* Collimator80BeamLine::Construct()
0141 {
0142
0143 SetDefaultDimensions();
0144
0145
0146 ConstructCollimator80BeamLine();
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 Collimator80BeamLine::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
0209 G4double defaultOuterRadiusFinalCollimatorIORT = 45. *mm;
0210 OuterRadiusFinalCollimatorIORT = defaultOuterRadiusFinalCollimatorIORT;
0211
0212 G4double defaultinnerRadiusFinalCollimatorIORT = 40. *mm;
0213 innerRadiusFinalCollimatorIORT = defaultinnerRadiusFinalCollimatorIORT;
0214
0215
0216
0217
0218
0219 G4bool isotopes = false;
0220 G4Material* aluminumNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Al", isotopes);
0221
0222
0223 G4Element* zincNist = G4NistManager::Instance()->FindOrBuildElement("Zn");
0224 G4Element* copperNist = G4NistManager::Instance()->FindOrBuildElement("Cu");
0225
0226
0227 G4Material* airNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR", isotopes);
0228
0229 G4Material* galacticNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Galactic", isotopes);
0230 G4Material* PMMANist = G4NistManager::Instance()->FindOrBuildMaterial("G4_PLEXIGLASS", isotopes);
0231
0232 G4Material* titanioNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Ti", isotopes);
0233
0234
0235 G4double d;
0236 G4int nComponents;
0237 G4double fractionmass;
0238
0239 d = 8.40*g/cm3;
0240 nComponents = 2;
0241 G4Material* brass = new G4Material("Brass", d, nComponents);
0242 brass -> AddElement(zincNist, fractionmass = 30 *perCent);
0243 brass -> AddElement(copperNist, fractionmass = 70 *perCent);
0244
0245
0246
0247
0248
0249
0250 finalCollimatorMaterialIORT = PMMANist;
0251
0252
0253 Giunz1FinalCollMaterialIORT = PMMANist;
0254
0255
0256 Giunz2FinalCollMaterialIORT = PMMANist;
0257
0258
0259 Giunz3FinalCollMaterialIORT = PMMANist;
0260
0261
0262 Giunz3FinalCollMaterialIntIORT = airNist;
0263
0264
0265 Giunz4FinalCollMaterialIORT = PMMANist;
0266
0267
0268 Giunz5FinalCollMaterialIORT = PMMANist;
0269
0270
0271 Blocco1IORTMaterialIORT = PMMANist;
0272
0273
0274 Blocco2IORTMaterialIORT = PMMANist;
0275
0276
0277 Blocco3IORTMaterialIORT = PMMANist;
0278
0279
0280 Blocco20mmIORTMaterialIORT = PMMANist;
0281
0282
0283 CM1_1_2IORTMaterialIORT = aluminumNist;
0284
0285
0286 CM1_2_2IORTMaterialIORT = aluminumNist;
0287
0288
0289 CM2_1_2IORTMaterialIORT = aluminumNist;
0290
0291
0292 CM2_2_2IORTMaterialIORT = aluminumNist;
0293
0294
0295 CCMIORTMaterialIORT = PMMANist;
0296
0297
0298 PFS1IORTMaterialIORT = PMMANist;
0299
0300
0301 PFS2IORTMaterialIORT = PMMANist;
0302
0303
0304 PFS3IORTMaterialIORT = PMMANist;
0305
0306
0307 FTIORTMaterialIORT = titanioNist;
0308
0309
0310 VSIORTMaterialIORT = galacticNist;
0311
0312 }
0313
0314
0315 void Collimator80BeamLine::ConstructCollimator80BeamLine()
0316 {
0317
0318
0319
0320
0321 const G4double worldX = 400.0 *cm;
0322 const G4double worldY = 400.0 *cm;
0323 const G4double worldZ = 400.0 *cm;
0324 G4bool isotopes = false;
0325
0326 G4Material* airNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR", isotopes);
0327 G4Box* treatmentRoom = new G4Box("TreatmentRoom",worldX,worldY,worldZ);
0328 G4LogicalVolume* logicTreatmentRoom = new G4LogicalVolume(treatmentRoom,
0329 airNist,
0330 "logicTreatmentRoom",
0331 0,0,0);
0332 physicalTreatmentRoom = new G4PVPlacement(0,
0333 G4ThreeVector(),
0334 "physicalTreatmentRoom",
0335 logicTreatmentRoom,
0336 0,false,0);
0337
0338
0339
0340 logicTreatmentRoom -> SetVisAttributes (G4VisAttributes::GetInvisible());
0341
0342
0343
0344 IortBeamLineVacuumSource();
0345 IortBeamLineTitaniumWindows();
0346 IortBeamLineMonitorChambers();
0347 IortBeamLineBlocks() ;
0348 IortBeamLineJunctions();
0349 IortBeamLineFinalCollimator();
0350
0351 }
0352
0353
0354 void Collimator80BeamLine::IortBeamLineVacuumSource()
0355 {
0356
0357
0358
0359
0360
0361 G4double phi1 = 90. *deg;
0362
0363
0364 G4RotationMatrix rm1;
0365 rm1.rotateY(phi1);
0366
0367 const G4double outRadiusVSIORT = 44.75 *mm;
0368 const G4double innRadiusVSIORT = 0.*mm;
0369 const G4double hightVSIORT = 1. *mm;
0370 const G4double startAngleVSIORT = 0.*deg;
0371 const G4double spanningAngleVSIORT = 360.*deg;
0372 const G4double XPositionVSIORT = -862.797 *mm;
0373
0374 solidVSIORT = new G4Tubs("VSIORT", innRadiusVSIORT,
0375 outRadiusVSIORT,
0376 hightVSIORT,
0377 startAngleVSIORT,
0378 spanningAngleVSIORT);
0379
0380 G4LogicalVolume* logVSIORT = new G4LogicalVolume(solidVSIORT,
0381 VSIORTMaterialIORT, "VSIORT", 0, 0, 0);
0382
0383 physiVSIORT = new G4PVPlacement(G4Transform3D(rm1, G4ThreeVector((XPositionVSIORT),0.,0.)),
0384 "VSIORT", logVSIORT, physicalTreatmentRoom, false, 0);
0385
0386 logVSIORT -> SetVisAttributes(green);
0387 }
0388
0389 void Collimator80BeamLine::IortBeamLineTitaniumWindows()
0390 {
0391
0392
0393
0394
0395 G4double phi2 = 90. *deg;
0396
0397
0398 G4RotationMatrix rm2;
0399 rm2.rotateY(phi2);
0400
0401
0402 const G4double outRadiusFTIORT = 44.75 *mm;
0403 const G4double innRadiusFTIORT = 8.5 *mm;
0404 const G4double hightFTIORT = 0.006 *mm;
0405 const G4double startAngleFTIORT = 0.*deg;
0406 const G4double spanningAngleFTIORT = 360.*deg;
0407 const G4double XPositionFTIORT = -861.791 *mm;
0408
0409 solidFTIORT = new G4Tubs("FTIORT", innRadiusFTIORT,
0410 outRadiusFTIORT,
0411 hightFTIORT,
0412 startAngleFTIORT,
0413 spanningAngleFTIORT);
0414
0415 G4LogicalVolume* logFTIORT = new G4LogicalVolume(solidFTIORT,
0416 FTIORTMaterialIORT, "FTIORT", 0, 0, 0);
0417
0418 physiFTIORT = new G4PVPlacement(G4Transform3D(rm2, G4ThreeVector((XPositionFTIORT),0.,0.)),
0419 "FTIORT", logFTIORT, physicalTreatmentRoom, false, 0);
0420
0421 logFTIORT -> SetVisAttributes(yellow);
0422 }
0423
0424 void Collimator80BeamLine::IortBeamLineMonitorChambers()
0425 {
0426
0427 G4double phi3 = 90. *deg;
0428
0429
0430 G4RotationMatrix rm3;
0431 rm3.rotateY(phi3);
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443 const G4double outRadiusPFS3IORT = 44.75 *mm;
0444 const G4double innRadiusPFS3IORT = 17.5 *mm;
0445 const G4double hightPFS3IORT = 3.03 *mm;
0446 const G4double startAnglePFS3IORT = 0.*deg;
0447 const G4double spanningAnglePFS3IORT = 360.*deg;
0448 const G4double XPositionPFS3IORT = -848.755 *mm;
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 = -844.255 *mm;
0475
0476 solidPFS2IORT = new G4Tubs("PFS2IORT", innRadiusPFS2IORT,
0477 outRadiusPFS2IORT,
0478 hightPFS2IORT,
0479 startAnglePFS2IORT,
0480 spanningAnglePFS2IORT);
0481
0482 G4LogicalVolume* logPFS2IORT = new G4LogicalVolume(solidPFS2IORT,
0483 PFS2IORTMaterialIORT, "PFS2IORT", 0, 0, 0);
0484
0485 physiPFS2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS2IORT),0.,0.)),
0486 "PFS2IORT", logPFS2IORT, physicalTreatmentRoom, false, 0);
0487
0488 logPFS2IORT -> SetVisAttributes(green);
0489
0490
0491
0492
0493
0494 const G4double outRadiusPFS1IORT = 35. *mm;
0495 const G4double innRadiusPFS1IORT = 10. *mm;
0496 const G4double hightPFS1IORT = 0.88 *mm;
0497 const G4double startAnglePFS1IORT = 0.*deg;
0498 const G4double spanningAnglePFS1IORT = 360.*deg;
0499 const G4double XPositionPFS1IORT = -841.905 *mm;
0500
0501 solidPFS1IORT = new G4Tubs("PFS1IORT", innRadiusPFS1IORT,
0502 outRadiusPFS1IORT,
0503 hightPFS1IORT,
0504 startAnglePFS1IORT,
0505 spanningAnglePFS1IORT);
0506
0507 G4LogicalVolume* logPFS1IORT = new G4LogicalVolume(solidPFS1IORT,
0508 PFS1IORTMaterialIORT, "PFS1IORT", 0, 0, 0);
0509
0510 physiPFS1IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS1IORT),0.,0.)),
0511 "PFS1IORT", logPFS1IORT, physicalTreatmentRoom, false, 0);
0512
0513 logPFS1IORT -> SetVisAttributes(green);
0514
0515
0516
0517
0518
0519 const G4double outRadiusCCMIORT = 35. *mm;
0520 const G4double innRadiusCCMIORT = 10. *mm;
0521 const G4double hightCCMIORT = 4.0125 *mm;
0522 const G4double startAngleCCMIORT = 0.*deg;
0523 const G4double spanningAngleCCMIORT = 360.*deg;
0524 const G4double XPositionCCMIORT = -837.0125 *mm;
0525
0526 solidCCMIORT = new G4Tubs("CCMIORT", innRadiusCCMIORT,
0527 outRadiusCCMIORT,
0528 hightCCMIORT,
0529 startAngleCCMIORT,
0530 spanningAngleCCMIORT);
0531
0532 G4LogicalVolume* logCCMIORT = new G4LogicalVolume(solidCCMIORT,
0533 CCMIORTMaterialIORT, "CCMIORT", 0, 0, 0);
0534
0535 physiCCMIORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCCMIORT),0.,0.)),
0536 "CCMIORT", logCCMIORT, physicalTreatmentRoom, false, 0);
0537
0538 logCCMIORT -> SetVisAttributes(green);
0539
0540
0541
0542
0543
0544
0545 const G4double outRadiusCM2_2_2IORT = 20. *mm;
0546 const G4double innRadiusCM2_2_2IORT = 0. *mm;
0547 const G4double hightCM2_2_2IORT = 0.025 *mm;
0548 const G4double startAngleCM2_2_2IORT = 0.*deg;
0549 const G4double spanningAngleCM2_2_2IORT = 360.*deg;
0550 const G4double XPositionCM2_2_2IORT = -841. *mm;
0551
0552 solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT", innRadiusCM2_2_2IORT,
0553 outRadiusCM2_2_2IORT,
0554 hightCM2_2_2IORT,
0555 startAngleCM2_2_2IORT,
0556 spanningAngleCM2_2_2IORT);
0557
0558 G4LogicalVolume* logCM2_2_2IORT = new G4LogicalVolume(solidCM2_2_2IORT,
0559 CM2_2_2IORTMaterialIORT, "CM2_2_2IORT", 0, 0, 0);
0560
0561 physiCM2_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_2_2IORT),0.,0.)),
0562 "CM2_2_2ORT", logCM2_2_2IORT, physicalTreatmentRoom, false, 0);
0563
0564 logCM2_2_2IORT -> SetVisAttributes(green);
0565
0566
0567
0568
0569
0570
0571 const G4double outRadiusCM2_1_2IORT = 20. *mm;
0572 const G4double innRadiusCM2_1_2IORT = 0. *mm;
0573 const G4double hightCM2_1_2IORT = 0.025 *mm;
0574 const G4double startAngleCM2_1_2IORT = 0.*deg;
0575 const G4double spanningAngleCM2_1_2IORT = 360.*deg;
0576 const G4double XPositionCM2_1_2IORT = -839. *mm;
0577
0578 solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT", innRadiusCM2_1_2IORT,
0579 outRadiusCM2_1_2IORT,
0580 hightCM2_1_2IORT,
0581 startAngleCM2_1_2IORT,
0582 spanningAngleCM2_1_2IORT);
0583
0584 G4LogicalVolume* logCM2_1_2IORT = new G4LogicalVolume(solidCM2_1_2IORT,
0585 CM2_1_2IORTMaterialIORT, "CM2_1_2IORT", 0, 0, 0);
0586
0587 physiCM2_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_1_2IORT),0.,0.)),
0588 "CM2_1_2ORT", logCM2_1_2IORT, physicalTreatmentRoom, false, 0);
0589
0590 logCM2_1_2IORT -> SetVisAttributes(yellow);
0591
0592
0593
0594
0595
0596 const G4double outRadiusCM1_2_2IORT = 20. *mm;
0597 const G4double innRadiusCM1_2_2IORT = 0. *mm;
0598 const G4double hightCM1_2_2IORT = 0.025 *mm;
0599 const G4double startAngleCM1_2_2IORT = 0.*deg;
0600 const G4double spanningAngleCM1_2_2IORT = 360.*deg;
0601 const G4double XPositionCM1_2_2IORT = -837. *mm;
0602
0603 solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT", innRadiusCM1_2_2IORT,
0604 outRadiusCM1_2_2IORT,
0605 hightCM1_2_2IORT,
0606 startAngleCM1_2_2IORT,
0607 spanningAngleCM1_2_2IORT);
0608
0609 G4LogicalVolume* logCM1_2_2IORT = new G4LogicalVolume(solidCM1_2_2IORT,
0610 CM1_2_2IORTMaterialIORT, "CM1_2_2IORT", 0, 0, 0);
0611
0612 physiCM1_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_2_2IORT),0.,0.)),
0613 "CM1_2_2ORT", logCM1_2_2IORT, physicalTreatmentRoom, false, 0);
0614
0615 logCM1_2_2IORT -> SetVisAttributes(yellow);
0616
0617
0618
0619
0620
0621 const G4double outRadiusCM1_1_2IORT = 20. *mm;
0622 const G4double innRadiusCM1_1_2IORT = 0. *mm;
0623 const G4double hightCM1_1_2IORT = 0.025 *mm;
0624 const G4double startAngleCM1_1_2IORT = 0.*deg;
0625 const G4double spanningAngleCM1_1_2IORT = 360.*deg;
0626 const G4double XPositionCM1_1_2IORT = -835. *mm;
0627
0628 solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT", innRadiusCM1_1_2IORT,
0629 outRadiusCM1_1_2IORT,
0630 hightCM1_1_2IORT,
0631 startAngleCM1_1_2IORT,
0632 spanningAngleCM1_1_2IORT);
0633
0634 G4LogicalVolume* logCM1_1_2IORT = new G4LogicalVolume(solidCM1_1_2IORT,
0635 CM1_1_2IORTMaterialIORT, "CM1_1_2IORT", 0, 0, 0);
0636
0637 physiCM1_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_1_2IORT),0.,0.)),
0638 "CM1_1_2ORT", logCM1_1_2IORT, physicalTreatmentRoom, false, 0);
0639
0640 logCM1_1_2IORT -> SetVisAttributes(yellow);
0641 }
0642
0643 void Collimator80BeamLine::IortBeamLineBlocks()
0644 {
0645
0646 G4double phi4 = 90. *deg;
0647
0648
0649 G4RotationMatrix rm4;
0650 rm4.rotateY(phi4);
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661
0662 const G4double outRadiusBlocco20mmIORT = 36.5 *mm;
0663 const G4double innRadiusBlocco20mmIORT = 10. *mm;
0664 const G4double hightBlocco20mmIORT = 3. *mm;
0665 const G4double startAngleBlocco20mmIORT = 0.*deg;
0666 const G4double spanningAngleBlocco20mmIORT = 360.*deg;
0667 const G4double XPositionBlocco20mmIORT = -830. *mm;
0668
0669 solidBlocco20mmIORT = new G4Tubs("Blocco20mmIORT", innRadiusBlocco20mmIORT,
0670 outRadiusBlocco20mmIORT,
0671 hightBlocco20mmIORT,
0672 startAngleBlocco20mmIORT,
0673 spanningAngleBlocco20mmIORT);
0674
0675 G4LogicalVolume* logBlocco20mmIORT = new G4LogicalVolume(solidBlocco20mmIORT,
0676 Blocco20mmIORTMaterialIORT, "Blocco20mmIORT", 0, 0, 0);
0677
0678 physiBlocco20mmIORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco20mmIORT),0.,0.)),
0679 "Blocco20mmORT", logBlocco20mmIORT, physicalTreatmentRoom, false, 0);
0680
0681 logBlocco20mmIORT -> SetVisAttributes(green);
0682
0683
0684
0685
0686
0687
0688 const G4double outRadiusBlocco3IORT = 36.5 *mm;
0689 const G4double innRadiusBlocco3IORT = 15. *mm;
0690 const G4double hightBlocco3IORT = 3.5 *mm;
0691 const G4double startAngleBlocco3IORT = 0.*deg;
0692 const G4double spanningAngleBlocco3IORT = 360.*deg;
0693 const G4double XPositionBlocco3IORT = -823.5 *mm;
0694
0695 solidBlocco3IORT = new G4Tubs("Blocco3IORT", innRadiusBlocco3IORT,
0696 outRadiusBlocco3IORT,
0697 hightBlocco3IORT,
0698 startAngleBlocco3IORT,
0699 spanningAngleBlocco3IORT);
0700
0701 G4LogicalVolume* logBlocco3IORT = new G4LogicalVolume(solidBlocco3IORT,
0702 Blocco3IORTMaterialIORT, "Blocco3IORT", 0, 0, 0);
0703
0704 physiBlocco3IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco3IORT),0.,0.)),
0705 "Blocco3ORT", logBlocco3IORT, physicalTreatmentRoom, false, 0);
0706
0707 logBlocco3IORT -> SetVisAttributes(yellow);
0708
0709
0710
0711
0712
0713 const G4double outRadiusBlocco2IORT = 41.5 *mm;
0714 const G4double innRadiusBlocco2IORT = 15. *mm;
0715 const G4double hightBlocco2IORT = 8. *mm;
0716 const G4double startAngleBlocco2IORT = 0.*deg;
0717 const G4double spanningAngleBlocco2IORT = 360.*deg;
0718 const G4double XPositionBlocco2IORT = -812. *mm;
0719
0720 solidBlocco2IORT = new G4Tubs("Blocco2IORT", innRadiusBlocco2IORT,
0721 outRadiusBlocco2IORT,
0722 hightBlocco2IORT,
0723 startAngleBlocco2IORT,
0724 spanningAngleBlocco2IORT);
0725
0726 G4LogicalVolume* logBlocco2IORT = new G4LogicalVolume(solidBlocco2IORT,
0727 Blocco2IORTMaterialIORT, "Blocco2IORT", 0, 0, 0);
0728
0729 physiBlocco2IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco2IORT),0.,0.)),
0730 "Blocco2IORT", logBlocco2IORT, physicalTreatmentRoom, false, 0);
0731
0732 logBlocco2IORT -> SetVisAttributes(red);
0733
0734
0735
0736
0737
0738 const G4double outRadiusBlocco1IORT = 52.0 *mm;
0739 const G4double innRadiusBlocco1IORT = 15. *mm;
0740 const G4double hightBlocco1IORT = 8.5 *mm;
0741 const G4double startAngleBlocco1IORT = 0.*deg;
0742 const G4double spanningAngleBlocco1IORT = 360.*deg;
0743 const G4double XPositionBlocco1IORT = -795.5*mm;
0744
0745 solidBlocco1IORT = new G4Tubs("Blocco1IORT", innRadiusBlocco1IORT,
0746 outRadiusBlocco1IORT,
0747 hightBlocco1IORT,
0748 startAngleBlocco1IORT,
0749 spanningAngleBlocco1IORT);
0750
0751 G4LogicalVolume* logBlocco1IORT = new G4LogicalVolume(solidBlocco1IORT,
0752 Blocco1IORTMaterialIORT, "Blocco1IORT", 0, 0, 0);
0753
0754 physiBlocco1IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco1IORT),0.,0.)),
0755 "Blocco1IORT", logBlocco1IORT, physicalTreatmentRoom, false, 0);
0756
0757 logBlocco1IORT -> SetVisAttributes(white);
0758 }
0759
0760 void Collimator80BeamLine::IortBeamLineJunctions()
0761 {
0762
0763
0764 G4double phi5 = 90. *deg;
0765
0766
0767 G4RotationMatrix rm5;
0768 rm5.rotateY(phi5);
0769
0770
0771
0772
0773 const G4double outRadiusGiunz5FinalCollIORT = 48.25 *mm;
0774 const G4double innRadiusGiunz5FinalCollIORT = 13.75 *mm;
0775 const G4double hightGiunz5FinalCollIORT = 3.5 *mm;
0776 const G4double startAngleGiunz5FinalCollIORT = 0.*deg;
0777 const G4double spanningAngleGiunz5FinalCollIORT = 360.*deg;
0778 const G4double Giunz5FinalCollXPositionIORT = -783.5 *mm;
0779
0780 solidGiunz5FinalCollIORT = new G4Tubs("Giunz5FinalCollIORT", innRadiusGiunz5FinalCollIORT,
0781 outRadiusGiunz5FinalCollIORT,
0782 hightGiunz5FinalCollIORT,
0783 startAngleGiunz5FinalCollIORT,
0784 spanningAngleGiunz5FinalCollIORT);
0785
0786 G4LogicalVolume* logGiunz5FinalCollIORT = new G4LogicalVolume(solidGiunz5FinalCollIORT,
0787 Giunz5FinalCollMaterialIORT, "Giunz5FinalCollIORT", 0, 0, 0);
0788
0789 physiGiunz5FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz5FinalCollXPositionIORT),0.,0.)),
0790 "Giunz5FinalCollIORT", logGiunz5FinalCollIORT, physicalTreatmentRoom, false, 0);
0791
0792 logGiunz5FinalCollIORT -> SetVisAttributes(yellow);
0793
0794
0795
0796
0797
0798 const G4double outRadiusGiunz4FinalCollIORT = 42. *mm;
0799 const G4double innRadiusGiunz4FinalCollIORT = 13.75 *mm;
0800 const G4double hightGiunz4FinalCollIORT = 8.5 *mm;
0801 const G4double startAngleGiunz4FinalCollIORT = 0.*deg;
0802 const G4double spanningAngleGiunz4FinalCollIORT = 360.*deg;
0803 const G4double Giunz4FinalCollXPositionIORT = -771.5 *mm;
0804
0805 solidGiunz4FinalCollIORT = new G4Tubs("Giunz4FinalCollIORT", innRadiusGiunz4FinalCollIORT,
0806 outRadiusGiunz4FinalCollIORT,
0807 hightGiunz4FinalCollIORT,
0808 startAngleGiunz4FinalCollIORT,
0809 spanningAngleGiunz4FinalCollIORT);
0810
0811 G4LogicalVolume* logGiunz4FinalCollIORT = new G4LogicalVolume(solidGiunz4FinalCollIORT,
0812 Giunz4FinalCollMaterialIORT, "Giunz4FinalCollIORT", 0, 0, 0);
0813
0814 physiGiunz4FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz4FinalCollXPositionIORT),0.,0.)),
0815 "Giunz4FinalCollIORT", logGiunz4FinalCollIORT, physicalTreatmentRoom, false, 0);
0816
0817 logGiunz4FinalCollIORT -> SetVisAttributes(blue);
0818
0819
0820
0821
0822
0823
0824
0825 const G4double outRadiusGiunz3FinalCollIORT = 42. *mm;
0826 const G4double innRadiusGiunz3FinalCollIORT = 0. *mm;
0827 const G4double hightGiunz3FinalCollIORT = 4.25 *mm;
0828 const G4double startAngleGiunz3FinalCollIORT = 0.*deg;
0829 const G4double spanningAngleGiunz3FinalCollIORT = 360.*deg;
0830 const G4double Giunz3FinalCollXPositionIORT = -758.75 *mm;
0831
0832 solidGiunz3FinalCollIORT = new G4Tubs("Giunz3FinalCollIORT", innRadiusGiunz3FinalCollIORT,
0833 outRadiusGiunz3FinalCollIORT,
0834 hightGiunz3FinalCollIORT,
0835 startAngleGiunz3FinalCollIORT,
0836 spanningAngleGiunz3FinalCollIORT);
0837
0838 G4LogicalVolume* logicsolidGiunz3FinalCollIORT = new G4LogicalVolume(solidGiunz3FinalCollIORT,
0839 Giunz3FinalCollMaterialIORT, "Giunz3FinalCollIORT", 0, 0, 0);
0840
0841 physiGiunz3FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz3FinalCollXPositionIORT),0.,0.)),
0842 "Giunz3FinalCollIORT", logicsolidGiunz3FinalCollIORT, physicalTreatmentRoom, false, 0);
0843
0844 logicsolidGiunz3FinalCollIORT -> SetVisAttributes(yellow);
0845
0846
0847
0848
0849
0850
0851
0852
0853
0854
0855 solidGiunz3FinalCollIntIORT = new G4Cons("Giunz3FinalCollIntIORT",0.*mm,13.75*mm,0.*mm,22.25*mm,4.25*mm,0.*deg,360.*deg);
0856
0857 G4LogicalVolume* logicsolidGiunz3FinalCollIntIORT = new G4LogicalVolume(solidGiunz3FinalCollIntIORT,
0858 Giunz3FinalCollMaterialIntIORT, "Giunz3FinalCollIntIORT", 0, 0, 0);
0859
0860 physiGiunz3FinalCollIntIORT = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.),"Giunz3FinalCollIntIORT", logicsolidGiunz3FinalCollIntIORT,physiGiunz3FinalCollIORT, false, 0);
0861
0862 logicsolidGiunz3FinalCollIntIORT -> SetVisAttributes(yellow);
0863
0864
0865
0866
0867
0868
0869 const G4double outRadiusGiunz2FinalCollIORT = 42. *mm;
0870 const G4double innRadiusGiunz2FinalCollIORT = 22.25 *mm;
0871 const G4double hightGiunz2FinalCollIORT = 5.75 *mm;
0872 const G4double startAngleGiunz2FinalCollIORT = 0.*deg;
0873 const G4double spanningAngleGiunz2FinalCollIORT = 360.*deg;
0874 const G4double Giunz2FinalCollXPositionIORT = -748.75 *mm;
0875
0876 solidGiunz2FinalCollIORT = new G4Tubs("Giunz2FinalCollIORT", innRadiusGiunz2FinalCollIORT,
0877 outRadiusGiunz2FinalCollIORT,
0878 hightGiunz2FinalCollIORT,
0879 startAngleGiunz2FinalCollIORT,
0880 spanningAngleGiunz2FinalCollIORT);
0881
0882 G4LogicalVolume* logGiunz2FinalCollIORT = new G4LogicalVolume(solidGiunz2FinalCollIORT,
0883 Giunz2FinalCollMaterialIORT, "Giunz2FinalCollIORT", 0, 0, 0);
0884
0885 physiGiunz2FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz2FinalCollXPositionIORT),0.,0.)),
0886 "Giunz2FinalCollIORT", logGiunz2FinalCollIORT, physicalTreatmentRoom, false, 0);
0887
0888 logGiunz2FinalCollIORT -> SetVisAttributes(red);
0889
0890
0891
0892
0893
0894 const G4double outRadiusGiunz1FinalCollIORT = 55. *mm;
0895 const G4double innRadiusGiunz1FinalCollIORT = 22.25 *mm;
0896 const G4double hightGiunz1FinalCollIORT = 10. *mm;
0897 const G4double startAngleGiunz1FinalCollIORT = 0.*deg;
0898 const G4double spanningAngleGiunz1FinalCollIORT = 360.*deg;
0899 const G4double Giunz1FinalCollXPositionIORT = -733.*mm;
0900
0901 solidGiunz1FinalCollIORT = new G4Tubs("Giunz1FinalCollIORT", innRadiusGiunz1FinalCollIORT,
0902 outRadiusGiunz1FinalCollIORT,
0903 hightGiunz1FinalCollIORT,
0904 startAngleGiunz1FinalCollIORT,
0905 spanningAngleGiunz1FinalCollIORT);
0906
0907 G4LogicalVolume* logGiunz1FinalCollIORT = new G4LogicalVolume(solidGiunz1FinalCollIORT,
0908 Giunz1FinalCollMaterialIORT, "Giunz1FinalCollIORT", 0, 0, 0);
0909
0910 physiGiunz1FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz1FinalCollXPositionIORT),0.,0.)),
0911 "Giunz1FinalCollIORT", logGiunz1FinalCollIORT, physicalTreatmentRoom, false, 0);
0912
0913 logGiunz1FinalCollIORT -> SetVisAttributes(gray);
0914 }
0915
0916 void Collimator80BeamLine::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(red);
0953 }
0954
0955
0956
0957
0958
0959
0960 void Collimator80BeamLine::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 Collimator80BeamLine::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