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 // 27 /// \file radiobiology/src/DetectorConstructio 28 /// \brief Implementation of the RadioBio::Det 29 30 #include "DetectorConstruction.hh" 31 32 #include "G4Box.hh" 33 #include "G4GeometryManager.hh" 34 #include "G4LogicalVolume.hh" 35 #include "G4LogicalVolumeStore.hh" 36 #include "G4Material.hh" 37 #include "G4NistManager.hh" 38 #include "G4PVPlacement.hh" 39 #include "G4PhysicalVolumeStore.hh" 40 #include "G4RunManager.hh" 41 #include "G4SolidStore.hh" 42 #include "G4SystemOfUnits.hh" 43 #include "G4UnitsTable.hh" 44 45 #include "DetectorMessenger.hh" 46 #include "VoxelizedSensitiveDetector.hh" 47 48 #include <sstream> 49 50 namespace RadioBio 51 { 52 53 //....oooOO0OOooo........oooOO0OOooo........oo 54 55 DetectorConstruction::DetectorConstruction() 56 { 57 // Set the default box material 58 SetMaterial("G4_WATER"); 59 60 // Create the messenger 61 fDetectorMessenger = new DetectorMessenger(t 62 63 // Voxelize the detecctor with default size 64 VoxelizedSensitiveDetector::CreateInstance(t 65 } 66 67 //....oooOO0OOooo........oooOO0OOooo........oo 68 69 DetectorConstruction::~DetectorConstruction() 70 { 71 delete fDetectorMessenger; 72 } 73 74 //....oooOO0OOooo........oooOO0OOooo........oo 75 76 G4VPhysicalVolume* DetectorConstruction::Const 77 { 78 return ConstructVolumes(); 79 } 80 81 //....oooOO0OOooo........oooOO0OOooo........oo 82 83 void DetectorConstruction::ConstructSDandField 84 { 85 VoxelizedSensitiveDetector::GetInstance()->C 86 } 87 88 //....oooOO0OOooo........oooOO0OOooo........oo 89 90 G4VPhysicalVolume* DetectorConstruction::Const 91 { 92 // Cleanup old geometry 93 G4GeometryManager::GetInstance()->OpenGeomet 94 G4PhysicalVolumeStore::GetInstance()->Clean( 95 G4LogicalVolumeStore::GetInstance()->Clean() 96 G4SolidStore::GetInstance()->Clean(); 97 98 G4Box* sBox = new G4Box("Container", // its 99 fBoxSizeX / 2, fBoxS 100 101 fLBox = new G4LogicalVolume(sBox, // its sh 102 fMaterial, // i 103 fMaterial->GetNa 104 105 fPBox = new G4PVPlacement(0, // no rotation 106 G4ThreeVector(), 107 fLBox, // its log 108 fMaterial->GetName 109 0, // its mother 110 false, // no bool 111 0); // copy numbe 112 113 // Parameters for the world volume can be pr 114 // PrintParameters(); 115 116 // Initialize pointer to world for voxelizat 117 VoxelizedSensitiveDetector::GetInstance()->I 118 119 // Create Voxelized Geometry 120 VoxelizedSensitiveDetector::GetInstance()->C 121 122 // Always return the root volume 123 return fPBox; 124 } 125 126 //....oooOO0OOooo........oooOO0OOooo........oo 127 128 void DetectorConstruction::PrintParameters() 129 { 130 G4cout << "\n The Box dimensions are: " << G 131 << G4endl << "y: " << G4BestUnit(fBox 132 << "z: " << G4BestUnit(fBoxSizeZ, "Le 133 134 G4cout << "And its volume therefore is: " 135 << fPBox->GetLogicalVolume()->GetSoli 136 } 137 138 //....oooOO0OOooo........oooOO0OOooo........oo 139 140 void DetectorConstruction::SetMaterial(G4Strin 141 { 142 // Search the material by its name 143 G4Material* pttoMaterial = G4NistManager::In 144 145 if (pttoMaterial) { 146 if (fMaterial != pttoMaterial) { 147 fMaterial = pttoMaterial; 148 if (fLBox) { 149 fLBox->SetMaterial(pttoMaterial); 150 } 151 G4RunManager::GetRunManager()->PhysicsHa 152 } 153 } 154 else { 155 // Warning the user this material does not 156 std::stringstream sstr; 157 sstr << "material " << +materialChoice << 158 << fMaterial->GetName(); 159 160 G4Exception("DetectorConstruction::SetMate 161 } 162 } 163 164 //....oooOO0OOooo........oooOO0OOooo........oo 165 166 void DetectorConstruction::SetSize(G4double va 167 { 168 SetSizeX(value); 169 SetSizeY(value); 170 SetSizeZ(value); 171 } 172 173 //....oooOO0OOooo........oooOO0OOooo........oo 174 175 void DetectorConstruction::SetSize(G4ThreeVect 176 { 177 SetSizeX(size.getX()); 178 SetSizeY(size.getY()); 179 SetSizeZ(size.getZ()); 180 } 181 182 //....oooOO0OOooo........oooOO0OOooo........oo 183 184 void DetectorConstruction::SetSizeX(G4double s 185 { 186 fBoxSizeX = sizeX; 187 } 188 189 //....oooOO0OOooo........oooOO0OOooo........oo 190 191 void DetectorConstruction::SetSizeY(G4double s 192 { 193 fBoxSizeY = sizeY; 194 } 195 196 //....oooOO0OOooo........oooOO0OOooo........oo 197 198 void DetectorConstruction::SetSizeZ(G4double s 199 { 200 fBoxSizeZ = sizeZ; 201 } 202 203 //....oooOO0OOooo........oooOO0OOooo........oo 204 205 } // namespace RadioBio 206