49 physicalTreatmentRoom(0), hadrontherapyDetectorConstruction(0),
50 physiBeamLineSupport(0), physiBeamLineCover(0), physiBeamLineCover2(0),
52 physiFirstMonitorLayer1(0), physiFirstMonitorLayer2(0),
53 physiFirstMonitorLayer3(0), physiFirstMonitorLayer4(0),
54 physiNozzleSupport(0), physiHoleNozzleSupport(0),
55 physiSecondHoleNozzleSupport(0),
56 solidFinalCollimator(0),
57 physiFinalCollimator(0)
62 static G4String ROGeometryName =
"DetectorROGeometry";
67 G4cout <<
"Going to register Parallel world...";
119 white -> SetVisibility(
true);
120 white -> SetForceSolid(
true);
123 blue -> SetVisibility(
true);
124 blue -> SetForceSolid(
true);
127 gray-> SetVisibility(
true);
128 gray-> SetForceSolid(
true);
131 red-> SetVisibility(
true);
132 red-> SetForceSolid(
true);
135 yellow-> SetVisibility(
true);
136 yellow-> SetForceSolid(
true);
139 green -> SetVisibility(
true);
140 green -> SetForceSolid(
true);
151 skyBlue -> SetVisibility(
true);
152 skyBlue -> SetForceSolid(
true);
157 G4double defaultVacuumZoneXSize = 80.5325 *
mm;
167 G4double defaultVacuumZoneXPosition = -1855.5075 *
mm;
181 G4double defaultKaptonWindowXPosition = 80.5075*
mm;
186 G4double defaultFirstScatteringFoilXSize = 0.025 *
mm;
189 G4double defaultFirstScatteringFoilYSize = 105.0 *
mm;
192 G4double defaultFirstScatteringFoilZSize = 105 *
mm;
195 G4double defaultFirstScatteringFoilXPosition = 0.0 *
mm;
217 G4double defaultStopperXPosition = -1675.0 *
mm;
232 G4double defaultSecondScatteringFoilXSize = 0.025 *
mm;
235 G4double defaultSecondScatteringFoilYSize = 105.0 *
mm;
238 G4double defaultSecondScatteringFoilZSize = 105.0 *
mm;
241 G4double defaultSecondScatteringFoilXPosition = defaultStopperXPosition + defaultHeightStopper + defaultSecondScatteringFoilXSize/2;
244 G4double defaultSecondScatteringFoilYPosition = 0 *
mm;
247 G4double defaultSecondScatteringFoilZPosition = 0 *
mm;
253 G4double defaultinnerRadiusFinalCollimator = 12.5 *
mm;
339 G4Box* treatmentRoom =
new G4Box(
"TreatmentRoom",worldX,worldY,worldZ);
342 "logicTreatmentRoom",
346 "physicalTreatmentRoom",
369 const G4double beamLineSupportXSize = 1.5*
m;
371 const G4double beamLineSupportZSize = 600.*
mm;
373 const G4double beamLineSupportXPosition = -1745.09 *
mm;
374 const G4double beamLineSupportYPosition = -230. *
mm;
375 const G4double beamLineSupportZPosition = 0.*
mm;
377 G4Box* beamLineSupport =
new G4Box(
"BeamLineSupport",
378 beamLineSupportXSize,
379 beamLineSupportYSize,
380 beamLineSupportZSize);
386 beamLineSupportYPosition,
387 beamLineSupportZPosition),
389 logicBeamLineSupport,
394 logicBeamLineSupport -> SetVisAttributes(
gray);
399 const G4double beamLineCoverXSize = 1.5*
m;
403 const G4double beamLineCoverXPosition = -1745.09 *
mm;
404 const G4double beamLineCoverYPosition = -1000.*
mm;
405 const G4double beamLineCoverZPosition = 610.*
mm;
407 G4Box* beamLineCover =
new G4Box(
"BeamLineCover",
417 beamLineCoverYPosition,
418 beamLineCoverZPosition),
430 beamLineCoverYPosition,
431 - beamLineCoverZPosition),
439 logicBeamLineCover -> SetVisAttributes(
blue);
485 "FirstScatteringFoil");
489 "FirstScatteringFoil",
490 logicFirstScatteringFoil,
494 logicFirstScatteringFoil -> SetVisAttributes(
skyBlue);
503 G4Box* solidKaptonWindow =
new G4Box(
"KaptonWindow",
513 "KaptonWindow", logicKaptonWindow,
514 physiVacuumZone,
false, 0);
516 logicKaptonWindow -> SetVisAttributes(
darkOrange3);
571 "SecondScatteringFoil");
576 "SeconScatteringFoil",
577 logicSecondScatteringFoil,
582 logicSecondScatteringFoil -> SetVisAttributes(
skyBlue);
605 const G4double monitor1XPosition = -1450.474956 *
mm;
606 const G4double monitor2XPosition = -4.500011*
mm;
607 const G4double monitor4XPosition = 4.500011*
mm;
609 G4Box* solidFirstMonitorLayer1 =
new G4Box(
"FirstMonitorLayer1",
616 "FirstMonitorLayer1");
620 "FirstMonitorLayer1",
621 logicFirstMonitorLayer1,
626 G4Box* solidFirstMonitorLayer2 =
new G4Box(
"FirstMonitorLayer2",
633 "FirstMonitorLayer2");
636 "FirstMonitorLayer2",
637 logicFirstMonitorLayer2,
642 G4Box* solidFirstMonitorLayer3 =
new G4Box(
"FirstMonitorLayer3",
649 "FirstMonitorLayer3");
654 logicFirstMonitorLayer3,
659 G4Box* solidFirstMonitorLayer4 =
new G4Box(
"FirstMonitorLayer4",
666 "FirstMonitorLayer4");
669 "FirstMonitorLayer4",
670 logicFirstMonitorLayer4,
673 logicFirstMonitorLayer3 -> SetVisAttributes(
white);
697 const G4double nozzleSupportXPosition = -558. *
mm;
704 G4Box* solidNozzleSupport =
new G4Box(
"NozzleSupport",
720 logicNozzleSupport -> SetVisAttributes(
yellow);
724 const G4double innerRadiusHoleNozzleSupport = 18.*
mm;
725 const G4double outerRadiusHoleNozzleSupport = 21.5 *
mm;
727 const G4double hightHoleNozzleSupportFirst = nozzleSupportXSize;
728 const G4double hightHoleNozzleSupport = 113.0*
mm;
729 const G4double startAngleHoleNozzleSupport = 0.*
deg;
730 const G4double spanningAngleHoleNozzleSupport = 360.*
deg;
731 const G4double holeNozzleSupportXPosition = -415.5 *
mm;
732 G4Tubs* solidNozzleSupportHole =
new G4Tubs(
"NozzleSupportHole1", innerRadiusHoleNozzleSupport,
733 outerRadiusHoleNozzleSupport,
734 hightHoleNozzleSupportFirst,
735 startAngleHoleNozzleSupport,
736 spanningAngleHoleNozzleSupport);
740 "NozzleSupportHole1");
743 "HoleNozzleSupportHole1",
744 logicNozzleSupportHole,
747 G4Tubs* solidHoleNozzleSupport =
new G4Tubs(
"HoleNozzleSupport",
748 innerRadiusHoleNozzleSupport,
749 outerRadiusHoleNozzleSupport,
750 hightHoleNozzleSupport,
751 startAngleHoleNozzleSupport,
752 spanningAngleHoleNozzleSupport);
761 logicHoleNozzleSupport,
763 logicNozzleSupportHole -> SetVisAttributes(
darkOrange3);
764 logicHoleNozzleSupport -> SetVisAttributes(
darkOrange3);
769 const G4double innerRadiusSecondHoleNozzleSupport = 0.*
mm;
770 const G4double outerRadiusSecondHoleNozzleSupport = 18.*
mm;
771 const G4double hightSecondHoleNozzleSupport = 29.5 *
mm;
772 const G4double startAngleSecondHoleNozzleSupport = 0.*
deg;
773 const G4double spanningAngleSecondHoleNozzleSupport = 360.*
deg;
775 G4Tubs* solidSecondHoleNozzleSupport =
new G4Tubs(
"SecondHoleNozzleSupport",
776 innerRadiusSecondHoleNozzleSupport,
777 outerRadiusSecondHoleNozzleSupport,
778 hightSecondHoleNozzleSupport,
779 startAngleSecondHoleNozzleSupport,
780 spanningAngleSecondHoleNozzleSupport);
784 "SecondHoleNozzleSupport",
790 "SecondHoleNozzleSupport",
791 logicSecondHoleNozzleSupport,
796 logicHoleNozzleSupport -> SetVisAttributes(
darkOrange3);
805 const G4double outerRadiusFinalCollimator = 21.5*
mm;
808 const G4double spanningAngleFinalCollimator = 360.*
deg;
810 const G4double finalCollimatorXPosition = -299.0 *
mm;
820 outerRadiusFinalCollimator,
821 hightFinalCollimator,
822 startAngleFinalCollimator,
823 spanningAngleFinalCollimator);
835 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