Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // Code developed by 27 // Silvia Pozzi (1), silvia.pozzi@iss.it 28 // Barbara Caccia (1), barbara.caccia@iss.it 29 // Carlo Mancini Terracciano (2), carlo.mancini.terracciano@roma1.infn.it 30 // (1) Istituto Superiore di Sanita' and INFN Roma, Italy 31 // (2) Univ. La Sapienza and INFN Roma, Italy 32 33 #ifndef DETECTOR_CONSTRUCTION_HH 34 #define DETECTOR_CONSTRUCTION_HH 35 36 #include <G4VUserDetectorConstruction.hh> 37 #include <G4RotationMatrix.hh> 38 #include <G4Material.hh> 39 #include <G4UnionSolid.hh> 40 #include <G4PSDoseDeposit3D.hh> 41 #include <G4MultiFunctionalDetector.hh> 42 43 #include "DetectorMessenger.hh" 44 45 class G4LogicalVolume; 46 class DetectorMessenger; 47 class DetectorConstruction : public G4VUserDetectorConstruction 48 { 49 public: 50 51 G4VPhysicalVolume* Construct() override; 52 53 void SetJaws(G4double value); 54 void SetTargetPosition(G4double value); 55 void SetPhantomSide(G4double value); 56 void SetVoxelSide(G4double value); 57 void SetVoxelDepth(G4double value); 58 59 void UpdateGeometry(G4String, G4double); 60 61 G4int GetNumberSideCells() const; 62 G4int GetNumberDepthCells() const; 63 G4int GetPhantomDepth() const; 64 65 G4double GetFFilterRadius(); 66 G4double GetFFilterZ(); 67 68 G4double GetJaw1X(); 69 G4double GetTargetPosition(); 70 G4double GetAccOriginPosition(); 71 G4double GetVoxelDepthDim(); 72 73 private: 74 75 void ConstructMaterials(); 76 G4Material* GetMaterial(G4String materialName); 77 78 void ConstructPhantom(); 79 void ConstructPhantom_spess(); 80 void ConstructAccelerator(); 81 void ConstructTarget(); 82 void ConstructVacuumWindow(); 83 void ConstructIonizationChamber(); 84 void ConstructFlatteningFilter(); 85 void ConstructPrimaryCollimator(); 86 void ConstructJawsX(); 87 void ConstructJawsY(); 88 void PhantomSegmentation(G4LogicalVolume* phantom); 89 G4int CheckPhantomSegmentation(G4int nCells); 90 91 DetectorMessenger* detectorMessenger; 92 G4VPhysicalVolume* world_phys; 93 G4VPhysicalVolume* accWorld_phys; 94 G4VPhysicalVolume* boxJaw1X_phys; 95 G4VPhysicalVolume* boxJaw2X_phys; 96 G4VPhysicalVolume* boxJaw1Y_phys; 97 G4VPhysicalVolume* boxJaw2Y_phys; 98 G4VPhysicalVolume* phantom_phys; 99 G4LogicalVolume* LVPhantomSens; 100 101 G4Material* mat_Kapton; 102 G4Material* mat_XC10; 103 G4Material* mat_WNICU; 104 G4Material* mat_Ssteel; 105 G4ThreeVector accHalfSize; 106 G4ThreeVector jaw1XInitialPos; 107 G4ThreeVector jaw2XInitialPos; 108 G4ThreeVector jaw1YInitialPos; 109 G4ThreeVector jaw2YInitialPos; 110 G4double jawAperture; 111 G4double fieldSide; 112 G4double sourceToSkinDistance; 113 G4double phantomSideDim, voxelSideDim, voxelDepthDim; 114 G4int nSideCells, nDepthCells; 115 G4double tubeFFRadius, tubeFFFirstFaceZ; 116 G4MultiFunctionalDetector* phantomDetector3D; 117 G4VPrimitiveScorer* phantomScorer3D; 118 }; 119 120 #endif 121