Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 /// \file electromagnetic/TestEm17/src/Detecto 26 /// \file electromagnetic/TestEm17/src/DetectorConstruction.cc 27 /// \brief Implementation of the DetectorConst 27 /// \brief Implementation of the DetectorConstruction class 28 // 28 // 29 // 29 // 30 // << 30 // $Id: DetectorConstruction.cc 68346 2013-03-22 09:51:24Z maire $ >> 31 // 31 //....oooOO0OOooo........oooOO0OOooo........oo 32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 //....oooOO0OOooo........oooOO0OOooo........oo 33 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 34 34 #include "DetectorConstruction.hh" 35 #include "DetectorConstruction.hh" 35 << 36 #include "DetectorMessenger.hh" 36 #include "DetectorMessenger.hh" 37 37 >> 38 #include "G4Material.hh" 38 #include "G4Box.hh" 39 #include "G4Box.hh" 39 #include "G4GeometryManager.hh" << 40 #include "G4LogicalVolume.hh" 40 #include "G4LogicalVolume.hh" 41 #include "G4LogicalVolumeStore.hh" << 42 #include "G4Material.hh" << 43 #include "G4NistManager.hh" << 44 #include "G4PVPlacement.hh" 41 #include "G4PVPlacement.hh" 45 #include "G4PhysicalConstants.hh" << 42 >> 43 #include "G4GeometryManager.hh" 46 #include "G4PhysicalVolumeStore.hh" 44 #include "G4PhysicalVolumeStore.hh" 47 #include "G4RunManager.hh" << 45 #include "G4LogicalVolumeStore.hh" 48 #include "G4SolidStore.hh" 46 #include "G4SolidStore.hh" 49 #include "G4SystemOfUnits.hh" << 47 50 #include "G4UnitsTable.hh" 48 #include "G4UnitsTable.hh" >> 49 #include "G4PhysicalConstants.hh" >> 50 #include "G4SystemOfUnits.hh" 51 51 52 //....oooOO0OOooo........oooOO0OOooo........oo 52 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 53 53 54 DetectorConstruction::DetectorConstruction() 54 DetectorConstruction::DetectorConstruction() 55 : G4VUserDetectorConstruction(), fPBox(0), f << 55 :G4VUserDetectorConstruction(),fPBox(0), fLBox(0), fMaterial(0), >> 56 fDetectorMessenger(0) 56 { 57 { 57 fBoxSize = 1 * m; << 58 fBoxSize = 1*m; 58 DefineMaterials(); 59 DefineMaterials(); 59 SetMaterial("G4_Fe"); << 60 SetMaterial("Iron"); 60 fDetectorMessenger = new DetectorMessenger(t 61 fDetectorMessenger = new DetectorMessenger(this); 61 } 62 } 62 63 63 //....oooOO0OOooo........oooOO0OOooo........oo 64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 64 65 65 DetectorConstruction::~DetectorConstruction() 66 DetectorConstruction::~DetectorConstruction() 66 { << 67 { delete fDetectorMessenger;} 67 delete fDetectorMessenger; << 68 } << 69 68 70 //....oooOO0OOooo........oooOO0OOooo........oo 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 71 70 72 G4VPhysicalVolume* DetectorConstruction::Const 71 G4VPhysicalVolume* DetectorConstruction::Construct() 73 { 72 { 74 return ConstructVolumes(); 73 return ConstructVolumes(); 75 } 74 } 76 75 77 //....oooOO0OOooo........oooOO0OOooo........oo 76 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 78 77 79 void DetectorConstruction::DefineMaterials() 78 void DetectorConstruction::DefineMaterials() 80 { 79 { 81 // 80 // 82 // define Elements 81 // define Elements 83 // 82 // 84 G4double z, a; << 83 G4double z,a; 85 << 84 86 G4Element* C = new G4Element("Carbon", "C", << 85 G4Element* C = new G4Element("Carbon" ,"C" , z= 6., a= 12.01*g/mole); 87 G4Element* N = new G4Element("Nitrogen", "N" << 86 G4Element* N = new G4Element("Nitrogen" ,"N" , z= 7., a= 14.01*g/mole); 88 G4Element* O = new G4Element("Oxygen", "O", << 87 G4Element* O = new G4Element("Oxygen" ,"O" , z= 8., a= 16.00*g/mole); 89 G4Element* Ca = new G4Element("Calcium", "Ca << 88 G4Element* Ca = new G4Element("Calcium" ,"Ca", z=20., a= 40.08*g/mole); 90 G4Element* H = new G4Element("Hydrogen", "H" << 89 G4Element* H = new G4Element("Hydrogen" ,"H" , z= 1., a= 1.01*g/mole); 91 G4Element* I = new G4Element("Iodine", "I", << 90 G4Element* I = new G4Element("Iodine" ,"I" , z= 53., a= 126.90*g/mole); 92 << 91 93 // 92 // 94 // define materials 93 // define materials 95 // 94 // 96 G4double density; 95 G4double density; 97 G4int ncomponents, natoms; 96 G4int ncomponents, natoms; 98 G4double fractionmass; 97 G4double fractionmass; 99 << 98 100 new G4Material("galactic", z = 1., a = 1.01 << 99 new G4Material("galactic", z=1., a= 1.01*g/mole, universe_mean_density, 101 2.73 * kelvin, 3.e-18 * pasca << 100 kStateGas, 2.73*kelvin, 3.e-18*pascal); 102 << 101 103 G4Material* Air = new G4Material("Air", dens << 102 G4Material* Air = 104 Air->AddElement(N, fractionmass = 70. * perC << 103 new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2); 105 Air->AddElement(O, fractionmass = 30. * perC << 104 Air->AddElement(N, fractionmass=70.*perCent); 106 << 105 Air->AddElement(O, fractionmass=30.*perCent); 107 G4Material* CaCO3 = new G4Material("CaCO3", << 106 108 CaCO3->AddElement(Ca, natoms = 1); << 107 G4Material* CaCO3 = 109 CaCO3->AddElement(C, natoms = 1); << 108 new G4Material("CaCO3", density= 2.80*g/cm3, ncomponents=3); 110 CaCO3->AddElement(O, natoms = 3); << 109 CaCO3->AddElement(Ca, natoms= 1); 111 << 110 CaCO3->AddElement(C , natoms= 1); 112 new G4Material("Carbon", z = 6., a = 12.01 * << 111 CaCO3->AddElement(O , natoms= 3); 113 new G4Material("Iron", z = 26., a = 55.85 * << 112 114 new G4Material("Tin", z = 50., a = 118.7 * g << 113 new G4Material("Carbon", z= 6., a= 12.01*g/mole, density= 2.265*g/cm3); 115 << 114 new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3); 116 G4Material* HI = new G4Material("HI", densit << 115 new G4Material("Tin" , z=50., a= 118.7*g/mole, density= 7.310*g/cm3); 117 HI->AddElement(H, natoms = 1); << 116 118 HI->AddElement(I, natoms = 1); << 117 G4Material* HI = >> 118 new G4Material("HI", density= 2.8*g/cm3, ncomponents=2); //-35oC >> 119 HI->AddElement(H, natoms= 1); >> 120 HI->AddElement(I, natoms= 1); 119 121 120 G4cout << *(G4Material::GetMaterialTable()) 122 G4cout << *(G4Material::GetMaterialTable()) << G4endl; 121 } 123 } 122 124 123 //....oooOO0OOooo........oooOO0OOooo........oo 125 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 124 126 125 G4VPhysicalVolume* DetectorConstruction::Const 127 G4VPhysicalVolume* DetectorConstruction::ConstructVolumes() 126 { 128 { 127 if (fPBox) { << 129 // Cleanup old geometry 128 return fPBox; << 130 G4GeometryManager::GetInstance()->OpenGeometry(); 129 } << 131 G4PhysicalVolumeStore::GetInstance()->Clean(); 130 << 132 G4LogicalVolumeStore::GetInstance()->Clean(); 131 G4Box* sBox = new G4Box("Container", // its << 133 G4SolidStore::GetInstance()->Clean(); 132 fBoxSize / 2, fBoxSi << 134 133 << 135 G4Box* 134 fLBox = new G4LogicalVolume(sBox, // its sh << 136 sBox = new G4Box("Container", //its name 135 fMaterial, // i << 137 fBoxSize/2,fBoxSize/2,fBoxSize/2); //its dimensions 136 fMaterial->GetNa << 138 137 << 139 fLBox = new G4LogicalVolume(sBox, //its shape 138 fPBox = new G4PVPlacement(0, // no rotation << 140 fMaterial, //its material 139 G4ThreeVector(), << 141 fMaterial->GetName()); //its name 140 fLBox, // its log << 142 141 fMaterial->GetName << 143 fPBox = new G4PVPlacement(0, //no rotation 142 0, // its mother << 144 G4ThreeVector(), //at (0,0,0) 143 false, // no bool << 145 fLBox, //its logical volume 144 0); // copy numbe << 146 fMaterial->GetName(), //its name 145 << 147 0, //its mother volume >> 148 false, //no boolean operation >> 149 0); //copy number >> 150 146 PrintParameters(); 151 PrintParameters(); 147 << 152 148 // always return the root volume << 153 //always return the root volume 149 // 154 // 150 return fPBox; 155 return fPBox; 151 } 156 } 152 157 153 //....oooOO0OOooo........oooOO0OOooo........oo 158 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 154 159 155 void DetectorConstruction::PrintParameters() 160 void DetectorConstruction::PrintParameters() 156 { 161 { 157 G4cout << "\n The Box is " << G4BestUnit(fBo << 162 G4cout << "\n The Box is " << G4BestUnit(fBoxSize,"Length") 158 << G4endl; << 163 << " of " << fMaterial->GetName() << G4endl; 159 } 164 } 160 165 161 //....oooOO0OOooo........oooOO0OOooo........oo 166 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 162 167 163 void DetectorConstruction::SetMaterial(const G << 168 void DetectorConstruction::SetMaterial(G4String materialChoice) 164 { 169 { 165 // search the material by its name 170 // search the material by its name 166 G4Material* pttoMaterial = G4NistManager::In << 171 G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); 167 << 172 if (pttoMaterial) fMaterial = pttoMaterial; 168 if (pttoMaterial && fMaterial != pttoMateria << 169 fMaterial = pttoMaterial; << 170 if (fLBox) { << 171 fLBox->SetMaterial(fMaterial); << 172 } << 173 G4RunManager::GetRunManager()->PhysicsHasB << 174 } << 175 } 173 } 176 174 177 //....oooOO0OOooo........oooOO0OOooo........oo 175 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 178 176 179 void DetectorConstruction::SetSize(G4double va 177 void DetectorConstruction::SetSize(G4double value) 180 { 178 { 181 fBoxSize = value; 179 fBoxSize = value; 182 } 180 } 183 181 184 //....oooOO0OOooo........oooOO0OOooo........oo 182 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 183 >> 184 #include "G4RunManager.hh" 185 185 186 void DetectorConstruction::UpdateGeometry() 186 void DetectorConstruction::UpdateGeometry() 187 { 187 { 188 G4RunManager::GetRunManager()->DefineWorldVo 188 G4RunManager::GetRunManager()->DefineWorldVolume(ConstructVolumes()); 189 } 189 } 190 190 191 //....oooOO0OOooo........oooOO0OOooo........oo 191 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 192 192