52 physicalTreatmentRoom(0), hadrontherapyDetectorConstruction(0),
53 physiBeamLineSupport(0), physiBeamLineCover(0), physiBeamLineCover2(0),
55 physiFirstMonitorLayer1(0), physiFirstMonitorLayer2(0),
56 physiFirstMonitorLayer3(0), physiFirstMonitorLayer4(0),
57 physiNozzleSupport(0), physiHoleNozzleSupport(0),
58 physiSecondHoleNozzleSupport(0),
59 solidFinalCollimator(0),
60 physiFinalCollimator(0)
65 static G4String ROGeometryName =
"DetectorROGeometry";
70 G4cout <<
"Going to register Parallel world...";
122 white -> SetVisibility(
true);
123 white -> SetForceSolid(
true);
126 blue -> SetVisibility(
true);
127 blue -> SetForceSolid(
true);
130 gray-> SetVisibility(
true);
131 gray-> SetForceSolid(
true);
134 red-> SetVisibility(
true);
135 red-> SetForceSolid(
true);
138 yellow-> SetVisibility(
true);
139 yellow-> SetForceSolid(
true);
142 green -> SetVisibility(
true);
143 green -> SetForceSolid(
true);
154 skyBlue -> SetVisibility(
true);
155 skyBlue -> SetForceSolid(
true);
160 G4double defaultVacuumZoneXSize = 80.5325 *
mm;
170 G4double defaultVacuumZoneXPosition = -1855.5075 *
mm;
184 G4double defaultKaptonWindowXPosition = 80.5075*
mm;
189 G4double defaultFirstScatteringFoilXSize = 0.025 *
mm;
192 G4double defaultFirstScatteringFoilYSize = 105.0 *
mm;
195 G4double defaultFirstScatteringFoilZSize = 105 *
mm;
198 G4double defaultFirstScatteringFoilXPosition = 0.0 *
mm;
220 G4double defaultStopperXPosition = -1675.0 *
mm;
235 G4double defaultSecondScatteringFoilXSize = 0.025 *
mm;
238 G4double defaultSecondScatteringFoilYSize = 105.0 *
mm;
241 G4double defaultSecondScatteringFoilZSize = 105.0 *
mm;
244 G4double defaultSecondScatteringFoilXPosition = defaultStopperXPosition + defaultHeightStopper + defaultSecondScatteringFoilXSize/2;
247 G4double defaultSecondScatteringFoilYPosition = 0 *
mm;
250 G4double defaultSecondScatteringFoilZPosition = 0 *
mm;
256 G4double defaultinnerRadiusFinalCollimator = 12.5 *
mm;
342 G4Box* treatmentRoom =
new G4Box(
"TreatmentRoom",worldX,worldY,worldZ);
345 "logicTreatmentRoom",
349 "physicalTreatmentRoom",
372 const G4double beamLineSupportXSize = 1.5*
m;
374 const G4double beamLineSupportZSize = 600.*
mm;
376 const G4double beamLineSupportXPosition = -1745.09 *
mm;
377 const G4double beamLineSupportYPosition = -230. *
mm;
378 const G4double beamLineSupportZPosition = 0.*
mm;
380 G4Box* beamLineSupport =
new G4Box(
"BeamLineSupport",
381 beamLineSupportXSize,
382 beamLineSupportYSize,
383 beamLineSupportZSize);
389 beamLineSupportYPosition,
390 beamLineSupportZPosition),
392 logicBeamLineSupport,
397 logicBeamLineSupport -> SetVisAttributes(
gray);
402 const G4double beamLineCoverXSize = 1.5*
m;
406 const G4double beamLineCoverXPosition = -1745.09 *
mm;
407 const G4double beamLineCoverYPosition = -1000.*
mm;
408 const G4double beamLineCoverZPosition = 610.*
mm;
410 G4Box* beamLineCover =
new G4Box(
"BeamLineCover",
420 beamLineCoverYPosition,
421 beamLineCoverZPosition),
433 beamLineCoverYPosition,
434 - beamLineCoverZPosition),
442 logicBeamLineCover -> SetVisAttributes(
blue);
488 "FirstScatteringFoil");
492 "FirstScatteringFoil",
493 logicFirstScatteringFoil,
497 logicFirstScatteringFoil -> SetVisAttributes(
skyBlue);
506 G4Box* solidKaptonWindow =
new G4Box(
"KaptonWindow",
516 "KaptonWindow", logicKaptonWindow,
517 physiVacuumZone,
false, 0);
519 logicKaptonWindow -> SetVisAttributes(
darkOrange3);
574 "SecondScatteringFoil");
579 "SeconScatteringFoil",
580 logicSecondScatteringFoil,
585 logicSecondScatteringFoil -> SetVisAttributes(
skyBlue);
608 const G4double monitor1XPosition = -1450.474956 *
mm;
609 const G4double monitor2XPosition = -4.500011*
mm;
610 const G4double monitor4XPosition = 4.500011*
mm;
612 G4Box* solidFirstMonitorLayer1 =
new G4Box(
"FirstMonitorLayer1",
619 "FirstMonitorLayer1");
623 "FirstMonitorLayer1",
624 logicFirstMonitorLayer1,
629 G4Box* solidFirstMonitorLayer2 =
new G4Box(
"FirstMonitorLayer2",
636 "FirstMonitorLayer2");
639 "FirstMonitorLayer2",
640 logicFirstMonitorLayer2,
645 G4Box* solidFirstMonitorLayer3 =
new G4Box(
"FirstMonitorLayer3",
652 "FirstMonitorLayer3");
657 logicFirstMonitorLayer3,
662 G4Box* solidFirstMonitorLayer4 =
new G4Box(
"FirstMonitorLayer4",
669 "FirstMonitorLayer4");
672 "FirstMonitorLayer4",
673 logicFirstMonitorLayer4,
676 logicFirstMonitorLayer3 -> SetVisAttributes(
white);
700 const G4double nozzleSupportXPosition = -558. *
mm;
707 G4Box* solidNozzleSupport =
new G4Box(
"NozzleSupport",
723 logicNozzleSupport -> SetVisAttributes(
yellow);
727 const G4double innerRadiusHoleNozzleSupport = 18.*
mm;
728 const G4double outerRadiusHoleNozzleSupport = 21.5 *
mm;
730 const G4double hightHoleNozzleSupportFirst = nozzleSupportXSize;
731 const G4double hightHoleNozzleSupport = 113.0*
mm;
732 const G4double startAngleHoleNozzleSupport = 0.*
deg;
733 const G4double spanningAngleHoleNozzleSupport = 360.*
deg;
734 const G4double holeNozzleSupportXPosition = -415.5 *
mm;
735 G4Tubs* solidNozzleSupportHole =
new G4Tubs(
"NozzleSupportHole1", innerRadiusHoleNozzleSupport,
736 outerRadiusHoleNozzleSupport,
737 hightHoleNozzleSupportFirst,
738 startAngleHoleNozzleSupport,
739 spanningAngleHoleNozzleSupport);
743 "NozzleSupportHole1");
746 "HoleNozzleSupportHole1",
747 logicNozzleSupportHole,
750 G4Tubs* solidHoleNozzleSupport =
new G4Tubs(
"HoleNozzleSupport",
751 innerRadiusHoleNozzleSupport,
752 outerRadiusHoleNozzleSupport,
753 hightHoleNozzleSupport,
754 startAngleHoleNozzleSupport,
755 spanningAngleHoleNozzleSupport);
764 logicHoleNozzleSupport,
766 logicNozzleSupportHole -> SetVisAttributes(
darkOrange3);
767 logicHoleNozzleSupport -> SetVisAttributes(
darkOrange3);
772 const G4double innerRadiusSecondHoleNozzleSupport = 0.*
mm;
773 const G4double outerRadiusSecondHoleNozzleSupport = 18.*
mm;
774 const G4double hightSecondHoleNozzleSupport = 29.5 *
mm;
775 const G4double startAngleSecondHoleNozzleSupport = 0.*
deg;
776 const G4double spanningAngleSecondHoleNozzleSupport = 360.*
deg;
778 G4Tubs* solidSecondHoleNozzleSupport =
new G4Tubs(
"SecondHoleNozzleSupport",
779 innerRadiusSecondHoleNozzleSupport,
780 outerRadiusSecondHoleNozzleSupport,
781 hightSecondHoleNozzleSupport,
782 startAngleSecondHoleNozzleSupport,
783 spanningAngleSecondHoleNozzleSupport);
787 "SecondHoleNozzleSupport",
793 "SecondHoleNozzleSupport",
794 logicSecondHoleNozzleSupport,
799 logicHoleNozzleSupport -> SetVisAttributes(
darkOrange3);
808 const G4double outerRadiusFinalCollimator = 21.5*
mm;
811 const G4double spanningAngleFinalCollimator = 360.*
deg;
813 const G4double finalCollimatorXPosition = -299.0 *
mm;
823 outerRadiusFinalCollimator,
824 hightFinalCollimator,
825 startAngleFinalCollimator,
826 spanningAngleFinalCollimator);
838 logicFinalCollimator -> SetVisAttributes(
yellow);
G4Material * finalCollimatorMaterial
G4double innerRadiusFinalCollimator
G4double kaptonWindowZSize
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
G4Material * holeNozzleSupportMaterial
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
G4double secondScatteringFoilYPosition
G4Tubs * solidFinalCollimator
HadrontherapyDetectorConstruction * hadrontherapyDetectorConstruction
G4Material * layer2MonitorChamberMaterial
G4double firstScatteringFoilZSize
G4VPhysicalVolume * physiKaptonWindow
G4Material * layer3MonitorChamberMaterial
G4Material * seconHoleNozzleSupportMaterial
G4double firstScatteringFoilYSize
G4VPhysicalVolume * physiFirstMonitorLayer4
G4VPhysicalVolume * physiStopper
G4Material * beamLineSupportMaterial
G4VPhysicalVolume * Construct()
G4VPhysicalVolume * physiBeamLineSupport
G4VPhysicalVolume * physiHoleNozzleSupport
G4VPhysicalVolume * physiNozzleSupportHole
G4Material * firstScatteringFoilMaterial
G4double startAngleStopper
G4Material * secondScatteringFoilMaterial
void HadrontherapyBeamLineSupport()
static G4NistManager * Instance()
G4double secondScatteringFoilXSize
void HadrontherapyBeamNozzle()
void RegisterParallelWorld(G4VUserParallelWorld *)
G4double vacuumZoneXPosition
HadrontherapyDetectorROGeometry * RO
void SetDefaultDimensions()
G4double stopperZPosition
G4double firstScatteringFoilXSize
G4double secondScatteringFoilZPosition
G4double innerRadiusStopper
G4VPhysicalVolume * physicalTreatmentRoom
G4GLOB_DLL std::ostream G4cout
G4VisAttributes * darkGreen
G4Material * layer1MonitorChamberMaterial
G4double spanningAngleStopper
G4VPhysicalVolume * physiFinalCollimator
G4VPhysicalVolume * physiSecondScatteringFoil
G4VPhysicalVolume * physiBeamLineCover
static const double perCent
G4Box * firstScatteringFoil
G4VPhysicalVolume * physiFirstMonitorLayer3
void HadrontherapyBeamFinalCollimator()
G4VisAttributes * skyBlue
G4VisAttributes * darkOrange3
G4VPhysicalVolume * physiNozzleSupport
G4Material * layer4MonitorChamberMaterial
void HadrontherapyBeamMonitoring()
G4Material * kaptonWindowMaterial
G4Material * nozzleSupportMaterial
G4double kaptonWindowXSize
G4double outerRadiusStopper
static const G4VisAttributes Invisible
G4double kaptonWindowXPosition
void VacuumToAirInterface()
G4double secondScatteringFoilXPosition
G4double secondScatteringFoilYSize
G4Box * secondScatteringFoil
G4VPhysicalVolume * physiBeamLineCover2
G4VPhysicalVolume * physiFirstScatteringFoil
G4double kaptonWindowYSize
G4VPhysicalVolume * physiFirstMonitorLayer1
G4Material * stopperMaterial
void InitializeDetectorROGeometry(HadrontherapyDetectorROGeometry *, G4ThreeVector detectorToWorldPosition)
G4VPhysicalVolume * physiFirstMonitorLayer2
G4LogicalVolume * logicStopper
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
G4ThreeVector GetDetectorToWorldPosition()
G4double stopperYPosition
G4double stopperXPosition
G4VPhysicalVolume * physiSecondHoleNozzleSupport
G4double firstScatteringFoilXPosition
void ConstructPassiveCarbonBeamLine()
G4double secondScatteringFoilZSize
G4Material * vacuumZoneMaterial