// M Hentz, 2016 #ifndef DetectorConstruction_h #define DetectorConstruction_h 1 #include "G4VUserDetectorConstruction.hh" #include "globals.hh" #include "G4ThreeVector.hh" #include "G4RunManager.hh" #include "G4VSolid.hh" class G4Box; class G4Tubs; class G4LogicalVolume; class G4VPhysicalVolume; class G4SubtractionSolid; class G4UnionSolid; class G4Material; class DetectorMessenger; const G4int MaxLayer = 60; class DetectorConstruction : public G4VUserDetectorConstruction { public: DetectorConstruction(); ~DetectorConstruction(); public: void SetMaterial( G4String ); void SetSizeZ( G4double ); void SetSizeXY( G4double ); void SetLayerNumber( G4int ); void SetLayerSizeXY( G4double ); void SetDetPosition( G4ThreeVector detPosition ) { fDetPosition = detPosition; G4RunManager::GetRunManager()->GeometryHasBeenModified(); } virtual G4VPhysicalVolume* Construct(); void UpdateGeometry(); public: G4double GetWorldSizeX() { return fWorldSizeX; } G4double GetWorldSizeY() { return fWorldSizeY; } G4double GetWorldSizeZ() { return fWorldSizeZ; } G4Material* GetWorldMaterial() { return fWorldMaterial; } G4double GetAbsorSizeZ() { return fAbsorSizeZ; } G4double GetAbsorSizeXY() { return fAbsorSizeXY; } G4Material* GetAbsorMaterial() { return fAbsorMaterial; } G4double GetRoomSizeZ() { return fRoomSizeZ; } G4int GetLayerNumber() { return fLayerNumber; } G4double GetLayerMass() { return fLayerMass; } G4double GetLayerSizeXY() { return fLayerSizeXY; } G4ThreeVector GetDetPosition() { return fDetPosition; } void PrintParameters(); private: G4double fWorldSizeX; G4double fWorldSizeY; G4double fWorldSizeZ; G4double fAbsorSizeZ; G4double fAbsorSizeXY; G4double detSizeXY; G4double detSizeZ; G4double fRoomSizeX; G4double fRoomSizeY; G4double fRoomSizeZ; // Materials G4Material* fWorldMaterial; G4Material* fAbsorMaterial; G4Material* fAir; G4Material* fWater; G4Material* fScintillatorPVT; G4Material* fMarbleConcrete; G4Material* fAluminium; G4Material* fVacuum; G4Material* fBrass; G4Material* fTungsten; G4Material* fKapton; G4Material* fIron; G4Material* fPMMA; G4Material* fMylar; G4Material* fBoratedPlastic; // Absorber layer parameters G4double fLayerSizeXY; G4double fLayerSizeZ; G4int fLayerNumber; G4double fLayerMass; // Outer room G4Box* sRoomOut; G4LogicalVolume* lRoomOut; G4VPhysicalVolume* pRoomOut; // Inner room G4Box* sRoomIn; G4LogicalVolume* lRoomIn; G4VPhysicalVolume* pRoomIn; // Source - GeneralParticleSource is confined to this volume G4Tubs* sSource; G4LogicalVolume* lSource; G4VPhysicalVolume* pSource; // 1st Aluminium tube G4Tubs* sAlTube1Out; G4LogicalVolume* lAlTube1Out; G4VPhysicalVolume* pAlTube1Out; G4Tubs* sAlTube1In; G4LogicalVolume* lAlTube1In; G4VPhysicalVolume* pAlTube1In; // Collimator G4Tubs* sCollimator1; G4LogicalVolume* lCollimator1; G4VPhysicalVolume* pCollimator1; // Scatter foils G4Tubs* sScatterFoil1; G4LogicalVolume* lScatterFoil1; G4VPhysicalVolume* pScatterFoil1; G4VPhysicalVolume* pScatterFoil2; // Beam stopper G4Tubs* sStopper; G4LogicalVolume* lStopper; G4VPhysicalVolume* pStopper; // Kapton window G4Tubs* sKaptonWindow; G4LogicalVolume* lKaptonWindow; G4VPhysicalVolume* pKaptonWindow; // 1st aluminium box G4Box* sAlBox1Out; G4Box* sAlBox1In; G4SubtractionSolid* sAlBox1; G4LogicalVolume* lAlBox1; G4VPhysicalVolume* pAlBox1; // 1st aluminium box - holes G4Tubs* sAlBox1Hole1; G4LogicalVolume* lAlBox1Hole1; G4VPhysicalVolume* pAlBox1Hole1; G4Tubs* sAlBox1Hole2; G4LogicalVolume* lAlBox1Hole2; G4VPhysicalVolume* pAlBox1Hole2; // Iron block G4Box* sIronBlockOut; G4Tubs* sIronBlockIn; G4SubtractionSolid* sIronBlock; G4LogicalVolume* lIronBlock; G4VPhysicalVolume* pIronBlock; // 2nd aluminium tube G4Tubs* sAlTube2Out; G4Tubs* sAlTube2In; G4Tubs* sAlTube2; G4LogicalVolume* lAlTube2; G4VPhysicalVolume* pAlTube2; // 2nd aluminium box G4VSolid* sAlBox2Out; G4VSolid* sAlBox2In; G4VSolid* sAlBox2Walls; G4LogicalVolume* lAlBox2Walls; G4LogicalVolume* lAlBox2; // 2nd aluminium box - holes G4VSolid* sAlBox2Hole1; G4VSolid* sAlBox2Hole2; G4VSolid* sAlBox2WallsWith1Hole; G4VSolid* sAlBox2WallsWith2Holes; G4LogicalVolume* lAlBox2WallsWith2Holes; // 2nd collimator G4Box* sCollimator2Out; G4Tubs* sCollimator2In; G4SubtractionSolid* sCollimator2; G4LogicalVolume* lCollimator2; G4VPhysicalVolume* pCollimator2; // 1st dose monitor G4VSolid* sDoseMonitor1; G4LogicalVolume* lDoseMonitor1; G4VPhysicalVolume* pDoseMonitor1; G4VSolid* sPerspexBlock; G4VSolid* sPerspexBlockHole; G4Box* sMonitorPerspexBlock1; G4Tubs* sMonitorPerspexHole1 ; G4SubtractionSolid* sMonitorPerspexLayer1; G4LogicalVolume* lMonitorPerspexLayer1; G4VPhysicalVolume* pMonitorPerspexLayer1; G4Box* sMonitorMylar1; G4LogicalVolume* lMonitorMylar1; G4VPhysicalVolume* pMonitorMylar1; G4Box* sMonitorAl1; G4LogicalVolume* lMonitorAl1; G4VPhysicalVolume* pMonitorAl1; G4Box* sMonitorPerspexBlock2; G4Tubs* sMonitorPerspexHole2 ; G4SubtractionSolid* sMonitorPerspexLayer2; G4LogicalVolume* lMonitorPerspexLayer2; G4VPhysicalVolume* pMonitorPerspexLayer2; G4Tubs* sGuardRing; G4LogicalVolume* lGuardRing; G4VPhysicalVolume* pGuardRing; G4VPhysicalVolume* pMonitorPerspexLayer3; G4VPhysicalVolume* pMonitorAl2; G4VPhysicalVolume* pMonitorMylar2; G4VPhysicalVolume* pMonitorPerspexLayer4; // 2nd dose monitor G4VPhysicalVolume* pDoseMonitor2; // Cross wires G4Box* sWiresFixtureOut; G4Box* sWiresFixtureIn; G4SubtractionSolid* sWiresFixture; G4LogicalVolume* lWiresFixture; G4VPhysicalVolume* pWiresFixture; G4Tubs* sCrossWire1; G4LogicalVolume* lCrossWire1; G4VPhysicalVolume* pCrossWire1; G4VPhysicalVolume* pCrossWire2; // Nozzle G4Tubs* sNozzle; G4LogicalVolume* lNozzle; G4VPhysicalVolume* pNozzle; // Collimator 3 G4Tubs* sCollimator3Disk; G4Tubs* sCollimator3Cut; G4SubtractionSolid* sCollimator3; G4LogicalVolume* lCollimator3; G4VPhysicalVolume* pCollimator3; // Cap G4Tubs* sCapCylinder; G4Tubs* sCapFront; G4UnionSolid* sCap; G4LogicalVolume* lCap; G4VPhysicalVolume* pCap; // Shielding G4Box* sShielding1; G4LogicalVolume* lShielding1; G4VPhysicalVolume* pShielding1; G4VPhysicalVolume* pShielding2; // Detector G4ThreeVector fDetPosition; G4Box* sDetector; G4LogicalVolume* lDetector; G4VPhysicalVolume* pDetector; // Absorber G4Box* sAbsor; G4LogicalVolume* lAbsor; G4VPhysicalVolume* pAbsor; G4LogicalVolume* lLayer; G4VPhysicalVolume* pLayer; DetectorMessenger* fDetectorMessenger; private: void DefineMaterials(); G4VPhysicalVolume* ConstructVolumes(); }; #endif