67 physicalTreatmentRoom(0), hadrontherapyDetectorConstruction(0),
68 physiBeamLineSupport(0), physiBeamLineCover(0), physiBeamLineCover2(0),
70 physiFirstMonitorLayer1(0), physiFirstMonitorLayer2(0),
71 physiFirstMonitorLayer3(0), physiFirstMonitorLayer4(0),
72 physiNozzleSupport(0), physiHoleNozzleSupport(0),
73 physiSecondHoleNozzleSupport(0),
74 solidFinalCollimator(0),
75 physiFinalCollimator(0)
82 static G4String ROGeometryName =
"DetectorROGeometry";
87 G4cout <<
"Going to register Parallel world...";
145 white -> SetVisibility(
true);
146 white -> SetForceSolid(
true);
149 blue -> SetVisibility(
true);
150 blue -> SetForceSolid(
true);
153 gray-> SetVisibility(
true);
154 gray-> SetForceSolid(
true);
157 red-> SetVisibility(
true);
158 red-> SetForceSolid(
true);
161 yellow-> SetVisibility(
true);
162 yellow-> SetForceSolid(
true);
165 green -> SetVisibility(
true);
166 green -> SetForceSolid(
true);
177 skyBlue -> SetVisibility(
true);
178 skyBlue -> SetForceSolid(
true);
183 G4double defaultVacuumZoneXSize = 80.5325 *
mm;
193 G4double defaultVacuumZoneXPosition = -1855.5075 *
mm;
207 G4double defaultKaptonWindowXPosition = 80.5075*
mm;
212 G4double defaultFirstScatteringFoilXSize = 0.025 *
mm;
215 G4double defaultFirstScatteringFoilYSize = 105.0 *
mm;
218 G4double defaultFirstScatteringFoilZSize = 105 *
mm;
221 G4double defaultFirstScatteringFoilXPosition = 0.0 *
mm;
243 G4double defaultStopperXPosition = -1675.0 *
mm;
258 G4double defaultSecondScatteringFoilXSize = 0.025 *
mm;
261 G4double defaultSecondScatteringFoilYSize = 105.0 *
mm;
264 G4double defaultSecondScatteringFoilZSize = 105.0 *
mm;
267 G4double defaultSecondScatteringFoilXPosition = defaultStopperXPosition + defaultHeightStopper + defaultSecondScatteringFoilXSize/2;
270 G4double defaultSecondScatteringFoilYPosition = 0 *
mm;
273 G4double defaultSecondScatteringFoilZPosition = 0 *
mm;
279 G4double defaultinnerRadiusFinalCollimator = 12.5 *
mm;
365 G4Box* treatmentRoom =
new G4Box(
"TreatmentRoom",worldX,worldY,worldZ);
368 "logicTreatmentRoom",
372 "physicalTreatmentRoom",
395 const G4double beamLineSupportXSize = 1.5*
m;
397 const G4double beamLineSupportZSize = 600.*
mm;
399 const G4double beamLineSupportXPosition = -1745.09 *
mm;
400 const G4double beamLineSupportYPosition = -230. *
mm;
401 const G4double beamLineSupportZPosition = 0.*
mm;
403 G4Box* beamLineSupport =
new G4Box(
"BeamLineSupport",
404 beamLineSupportXSize,
405 beamLineSupportYSize,
406 beamLineSupportZSize);
412 beamLineSupportYPosition,
413 beamLineSupportZPosition),
415 logicBeamLineSupport,
420 logicBeamLineSupport -> SetVisAttributes(
gray);
425 const G4double beamLineCoverXSize = 1.5*
m;
429 const G4double beamLineCoverXPosition = -1745.09 *
mm;
430 const G4double beamLineCoverYPosition = -980.*
mm;
431 const G4double beamLineCoverZPosition = 600.*
mm;
433 G4Box* beamLineCover =
new G4Box(
"BeamLineCover",
443 beamLineCoverYPosition,
444 beamLineCoverZPosition),
456 beamLineCoverYPosition,
457 - beamLineCoverZPosition),
465 logicBeamLineCover -> SetVisAttributes(
blue);
511 "FirstScatteringFoil");
515 "FirstScatteringFoil",
516 logicFirstScatteringFoil,
520 logicFirstScatteringFoil -> SetVisAttributes(
skyBlue);
529 G4Box* solidKaptonWindow =
new G4Box(
"KaptonWindow",
539 "KaptonWindow", logicKaptonWindow,
540 physiVacuumZone,
false, 0);
542 logicKaptonWindow -> SetVisAttributes(
darkOrange3);
597 "SecondScatteringFoil");
602 "SeconScatteringFoil",
603 logicSecondScatteringFoil,
608 logicSecondScatteringFoil -> SetVisAttributes(
skyBlue);
631 const G4double monitor1XPosition = -1450.474956 *
mm;
632 const G4double monitor2XPosition = -4.500011*
mm;
633 const G4double monitor4XPosition = 4.500011*
mm;
635 G4Box* solidFirstMonitorLayer1 =
new G4Box(
"FirstMonitorLayer1",
642 "FirstMonitorLayer1");
646 "FirstMonitorLayer1",
647 logicFirstMonitorLayer1,
652 G4Box* solidFirstMonitorLayer2 =
new G4Box(
"FirstMonitorLayer2",
659 "FirstMonitorLayer2");
662 "FirstMonitorLayer2",
663 logicFirstMonitorLayer2,
668 G4Box* solidFirstMonitorLayer3 =
new G4Box(
"FirstMonitorLayer3",
675 "FirstMonitorLayer3");
680 logicFirstMonitorLayer3,
685 G4Box* solidFirstMonitorLayer4 =
new G4Box(
"FirstMonitorLayer4",
692 "FirstMonitorLayer4");
695 "FirstMonitorLayer4",
696 logicFirstMonitorLayer4,
699 logicFirstMonitorLayer3 -> SetVisAttributes(
white);
723 const G4double nozzleSupportXPosition = -558. *
mm;
730 G4Box* solidNozzleSupport =
new G4Box(
"NozzleSupport",
746 logicNozzleSupport -> SetVisAttributes(
yellow);
751 const G4double innerRadiusHoleNozzleSupport = 18.*
mm;
752 const G4double outerRadiusHoleNozzleSupport = 21.5 *
mm;
754 const G4double hightHoleNozzleSupport = 142.5*
mm;
755 const G4double startAngleHoleNozzleSupport = 0.*
deg;
756 const G4double spanningAngleHoleNozzleSupport = 360.*
deg;
758 const G4double holeNozzleSupportXPosition = -462.50 *
mm;
760 G4Tubs* solidHoleNozzleSupport =
new G4Tubs(
"HoleNozzleSupport",
761 innerRadiusHoleNozzleSupport,
762 outerRadiusHoleNozzleSupport,
763 hightHoleNozzleSupport,
764 startAngleHoleNozzleSupport,
765 spanningAngleHoleNozzleSupport);
774 logicHoleNozzleSupport,
777 logicHoleNozzleSupport -> SetVisAttributes(
darkOrange3);
782 const G4double innerRadiusSecondHoleNozzleSupport = 0.*
mm;
783 const G4double outerRadiusSecondHoleNozzleSupport = 18.*
mm;
784 const G4double hightSecondHoleNozzleSupport = 29.5 *
mm;
785 const G4double startAngleSecondHoleNozzleSupport = 0.*
deg;
786 const G4double spanningAngleSecondHoleNozzleSupport = 360.*
deg;
788 G4Tubs* solidSecondHoleNozzleSupport =
new G4Tubs(
"SecondHoleNozzleSupport",
789 innerRadiusSecondHoleNozzleSupport,
790 outerRadiusSecondHoleNozzleSupport,
791 hightSecondHoleNozzleSupport,
792 startAngleSecondHoleNozzleSupport,
793 spanningAngleSecondHoleNozzleSupport);
797 "SecondHoleNozzleSupport",
803 "SecondHoleNozzleSupport",
804 logicSecondHoleNozzleSupport,
809 logicHoleNozzleSupport -> SetVisAttributes(
darkOrange3);
818 const G4double outerRadiusFinalCollimator = 21.5*
mm;
821 const G4double spanningAngleFinalCollimator = 360.*
deg;
823 const G4double finalCollimatorXPosition = -323.50 *
mm;
833 outerRadiusFinalCollimator,
834 hightFinalCollimator,
835 startAngleFinalCollimator,
836 spanningAngleFinalCollimator);
848 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
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