Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // Hadrontherapy advanced example for Geant4 27 // See more at: https://twiki.cern.ch/twiki/bi 28 29 #ifndef HadrontherapyDetectorConstruction_H 30 #define HadrontherapyDetectorConstruction_H 1 31 32 #include "G4Box.hh" 33 #include "globals.hh" 34 #include "G4VisAttributes.hh" 35 #include "G4LogicalVolume.hh" 36 #include "G4UnitsTable.hh" 37 #include "HadrontherapyDetectorROGeometry.hh" 38 39 class G4VPhysicalVolume; 40 class G4LogicalVolume; 41 class G4PVPlacement; 42 class HadrontherapyDetectorROGeometry; 43 class HadrontherapyDetectorMessenger; 44 class HadrontherapyDetectorSD; 45 class HadrontherapyMatrix; 46 class HadrontherapyLet; 47 48 class HadrontherapyDetectorConstruction 49 { 50 public: 51 52 HadrontherapyDetectorConstruction(G4VPhysi 53 54 ~HadrontherapyDetectorConstruction(); 55 56 public: 57 static HadrontherapyDetectorConstruction* 58 void InitializeDetectorROGeometry(Hadronth 59 G4ThreeV 60 G4VPhysicalVolume* motherPhys; 61 HadrontherapyDetectorSD* detectorS 62 63 ////////////////////////// 64 void VirtualLayer(G4bool Varbool); 65 G4bool NewSource; 66 void SetVirtualLayerPosition(G4ThreeVector 67 G4ThreeVector VirtualLayerPosition; 68 69 ////////////////////////// 70 private: 71 72 void ConstructPhantom(); 73 void ConstructDetector(); 74 void ParametersCheck(); 75 void CheckOverlaps(); 76 77 public: 78 // Get detector position relative to WORLD 79 inline G4ThreeVector GetDetectorToWorldPos 80 { 81 return phantomPosition + detectorPosit 82 } 83 ////////////////////////////////////////// 84 // Get displacement between phantom and de 85 inline G4ThreeVector GetDetectorToPhantomP 86 { 87 return G4ThreeVector(phantomSizeX/2 - 88 phantomSizeY/2 - 89 phantomSizeZ/2 - 90 ); 91 } 92 93 ////////////////////////////////////////// 94 // Calculate (and set) detector position b 95 inline void SetDetectorPosition() 96 { 97 // Adjust detector position 98 detectorPosition.setX(detectorToPhanto 99 detectorPosition.setY(detectorToPhanto 100 detectorPosition.setZ(detectorToPhanto 101 102 103 } 104 ////////////////////////////////////////// 105 // Check whether detector is inside phanto 106 inline bool IsInside(G4double detectorX, 107 G4double detectorY, 108 G4double detectorZ, 109 G4double phantomX, 110 G4double phantomY, 111 G4double phantomZ, 112 G4ThreeVector pos) 113 { 114 // Dimensions check... X Y and Z 115 // Firstly check what dimension we are 116 { 117 if (detectorX > phantomX) 118 { 119 G4cout << "Error: Detector X d 120 return false; 121 } 122 if ( (phantomX - detectorX) < pos. 123 { 124 G4cout << "Error: X dimension 125 return false; 126 } 127 } 128 129 { 130 if (detectorY > phantomY) 131 { 132 G4cout << "Error: Detector Y d 133 return false; 134 } 135 if ( (phantomY - detectorY) < pos. 136 { 137 G4cout << "Error: Y dimension 138 return false; 139 } 140 } 141 142 { 143 if (detectorZ > phantomZ) 144 { 145 G4cout << "Error: Detector Z d 146 return false; 147 } 148 if ( (phantomZ - detectorZ) < pos. 149 { 150 G4cout << "Error: Z dimension 151 return false; 152 } 153 } 154 155 return true; 156 } 157 ////////////////////////////////////////// 158 159 G4bool SetPhantomMaterial(G4String materi 160 void SetVoxelSize(G4double sizeX, G4double 161 void SetDetectorSize(G4double sizeX, G4dou 162 void SetPhantomSize(G4double sizeX, G4doub 163 void SetPhantomPosition(G4ThreeVector); 164 void SetDetectorToPhantomPosition(G4ThreeV 165 void UpdateGeometry(); 166 void PrintParameters(); 167 G4LogicalVolume* GetDetectorLogicalVolume( 168 169 private: 170 static HadrontherapyDetectorConstruction* 171 HadrontherapyDetectorMessenger* detectorMe 172 173 G4VisAttributes* skyBlue; 174 G4VisAttributes* red; 175 176 HadrontherapyDetectorROGeometry* detectorR 177 HadrontherapyMatrix* matrix; 178 HadrontherapyLet* let; 179 180 G4Box *phantom , *detector; 181 G4LogicalVolume *phantomLogicalVolume, *de 182 G4VPhysicalVolume *phantomPhysicalVolume, 183 184 G4Box* solidVirtualLayer; 185 G4LogicalVolume* logicVirtualLayer; 186 G4VPhysicalVolume* physVirtualLayer; 187 188 G4double phantomSizeX; 189 G4double phantomSizeY; 190 G4double phantomSizeZ; 191 192 G4double detectorSizeX; 193 G4double detectorSizeY; 194 G4double detectorSizeZ; 195 196 G4ThreeVector phantomPosition, detectorPos 197 198 G4double sizeOfVoxelAlongX; 199 G4double sizeOfVoxelAlongY; 200 G4double sizeOfVoxelAlongZ; 201 202 G4int numberOfVoxelsAlongX; 203 G4int numberOfVoxelsAlongY; 204 G4int numberOfVoxelsAlongZ; 205 206 G4double volumeOfVoxel, massOfVoxel; 207 208 G4Material *phantomMaterial, *detectorMate 209 G4Region* aRegion; 210 }; 211 #endif 212