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 << 27 /// \brief Implementation of the DetectorConst << 28 // << 29 // << 30 // 26 // >> 27 // $Id: DetectorConstruction.cc,v 1.2 2006/06/29 16:48:49 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-08-01-patch-01 $ >> 29 // 31 //....oooOO0OOooo........oooOO0OOooo........oo 30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 //....oooOO0OOooo........oooOO0OOooo........oo 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 32 34 #include "DetectorConstruction.hh" 33 #include "DetectorConstruction.hh" 35 << 36 #include "DetectorMessenger.hh" 34 #include "DetectorMessenger.hh" 37 35 >> 36 #include "G4Material.hh" 38 #include "G4Box.hh" 37 #include "G4Box.hh" 39 #include "G4GeometryManager.hh" << 40 #include "G4LogicalVolume.hh" 38 #include "G4LogicalVolume.hh" 41 #include "G4LogicalVolumeStore.hh" << 42 #include "G4Material.hh" << 43 #include "G4NistManager.hh" << 44 #include "G4PVPlacement.hh" 39 #include "G4PVPlacement.hh" 45 #include "G4PhysicalConstants.hh" << 40 >> 41 #include "G4GeometryManager.hh" 46 #include "G4PhysicalVolumeStore.hh" 42 #include "G4PhysicalVolumeStore.hh" 47 #include "G4RunManager.hh" << 43 #include "G4LogicalVolumeStore.hh" 48 #include "G4SolidStore.hh" 44 #include "G4SolidStore.hh" 49 #include "G4SystemOfUnits.hh" << 45 50 #include "G4UnitsTable.hh" 46 #include "G4UnitsTable.hh" 51 47 52 //....oooOO0OOooo........oooOO0OOooo........oo 48 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 53 49 54 DetectorConstruction::DetectorConstruction() 50 DetectorConstruction::DetectorConstruction() 55 : G4VUserDetectorConstruction(), fPBox(0), f << 51 :pBox(0), lBox(0), aMaterial(0) 56 { 52 { 57 fBoxSize = 1 * m; << 53 BoxSize = 1*m; 58 DefineMaterials(); 54 DefineMaterials(); 59 SetMaterial("G4_Fe"); << 55 SetMaterial("Iron"); 60 fDetectorMessenger = new DetectorMessenger(t << 56 detectorMessenger = new DetectorMessenger(this); 61 } 57 } 62 58 63 //....oooOO0OOooo........oooOO0OOooo........oo 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 64 60 65 DetectorConstruction::~DetectorConstruction() 61 DetectorConstruction::~DetectorConstruction() 66 { << 62 { delete detectorMessenger;} 67 delete fDetectorMessenger; << 68 } << 69 63 70 //....oooOO0OOooo........oooOO0OOooo........oo 64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 71 65 72 G4VPhysicalVolume* DetectorConstruction::Const 66 G4VPhysicalVolume* DetectorConstruction::Construct() 73 { 67 { 74 return ConstructVolumes(); 68 return ConstructVolumes(); 75 } 69 } 76 70 77 //....oooOO0OOooo........oooOO0OOooo........oo 71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 78 72 79 void DetectorConstruction::DefineMaterials() 73 void DetectorConstruction::DefineMaterials() 80 { 74 { 81 // 75 // 82 // define Elements 76 // define Elements 83 // 77 // 84 G4double z, a; << 78 G4double z,a; 85 << 79 86 G4Element* C = new G4Element("Carbon", "C", << 80 G4Element* C = new G4Element("Carbon" ,"C" , z= 6., a= 12.01*g/mole); 87 G4Element* N = new G4Element("Nitrogen", "N" << 81 G4Element* N = new G4Element("Nitrogen" ,"N" , z= 7., a= 14.01*g/mole); 88 G4Element* O = new G4Element("Oxygen", "O", << 82 G4Element* O = new G4Element("Oxygen" ,"O" , z= 8., a= 16.00*g/mole); 89 G4Element* Ca = new G4Element("Calcium", "Ca << 83 G4Element* Ca = new G4Element("Calcium" ,"Ca", z=20., a= 40.08*g/mole); 90 G4Element* H = new G4Element("Hydrogen", "H" << 84 91 G4Element* I = new G4Element("Iodine", "I", << 92 << 93 // 85 // 94 // define materials 86 // define materials 95 // 87 // 96 G4double density; 88 G4double density; 97 G4int ncomponents, natoms; 89 G4int ncomponents, natoms; 98 G4double fractionmass; 90 G4double fractionmass; 99 << 91 100 new G4Material("galactic", z = 1., a = 1.01 << 92 new G4Material("galactic", z=1., a= 1.01*g/mole, universe_mean_density, 101 2.73 * kelvin, 3.e-18 * pasca << 93 kStateGas, 2.73*kelvin, 3.e-18*pascal); 102 << 94 103 G4Material* Air = new G4Material("Air", dens << 95 G4Material* Air = 104 Air->AddElement(N, fractionmass = 70. * perC << 96 new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2); 105 Air->AddElement(O, fractionmass = 30. * perC << 97 Air->AddElement(N, fractionmass=70.*perCent); 106 << 98 Air->AddElement(O, fractionmass=30.*perCent); 107 G4Material* CaCO3 = new G4Material("CaCO3", << 99 108 CaCO3->AddElement(Ca, natoms = 1); << 100 G4Material* CaCO3 = 109 CaCO3->AddElement(C, natoms = 1); << 101 new G4Material("CaCO3", density= 2.80*g/cm3, ncomponents=3); 110 CaCO3->AddElement(O, natoms = 3); << 102 CaCO3->AddElement(Ca, natoms= 1); 111 << 103 CaCO3->AddElement(C , natoms= 1); 112 new G4Material("Carbon", z = 6., a = 12.01 * << 104 CaCO3->AddElement(O , natoms= 3); 113 new G4Material("Iron", z = 26., a = 55.85 * << 105 114 new G4Material("Tin", z = 50., a = 118.7 * g << 106 new G4Material("Carbon", z= 6., a= 12.01*g/mole, density= 2.265*g/cm3); 115 << 107 new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3); 116 G4Material* HI = new G4Material("HI", densit << 108 new G4Material("Tin" , z=50., a= 118.7*g/mole, density= 7.310*g/cm3); 117 HI->AddElement(H, natoms = 1); << 118 HI->AddElement(I, natoms = 1); << 119 109 120 G4cout << *(G4Material::GetMaterialTable()) 110 G4cout << *(G4Material::GetMaterialTable()) << G4endl; 121 } 111 } 122 112 123 //....oooOO0OOooo........oooOO0OOooo........oo 113 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 124 114 125 G4VPhysicalVolume* DetectorConstruction::Const 115 G4VPhysicalVolume* DetectorConstruction::ConstructVolumes() 126 { 116 { 127 if (fPBox) { << 117 // Cleanup old geometry 128 return fPBox; << 118 G4GeometryManager::GetInstance()->OpenGeometry(); 129 } << 119 G4PhysicalVolumeStore::GetInstance()->Clean(); 130 << 120 G4LogicalVolumeStore::GetInstance()->Clean(); 131 G4Box* sBox = new G4Box("Container", // its << 121 G4SolidStore::GetInstance()->Clean(); 132 fBoxSize / 2, fBoxSi << 122 133 << 123 G4Box* 134 fLBox = new G4LogicalVolume(sBox, // its sh << 124 sBox = new G4Box("Container", //its name 135 fMaterial, // i << 125 BoxSize/2,BoxSize/2,BoxSize/2); //its dimensions 136 fMaterial->GetNa << 126 137 << 127 lBox = new G4LogicalVolume(sBox, //its shape 138 fPBox = new G4PVPlacement(0, // no rotation << 128 aMaterial, //its material 139 G4ThreeVector(), << 129 aMaterial->GetName()); //its name 140 fLBox, // its log << 130 141 fMaterial->GetName << 131 pBox = new G4PVPlacement(0, //no rotation 142 0, // its mother << 132 G4ThreeVector(), //at (0,0,0) 143 false, // no bool << 133 lBox, //its logical volume 144 0); // copy numbe << 134 aMaterial->GetName(), //its name 145 << 135 0, //its mother volume >> 136 false, //no boolean operation >> 137 0); //copy number >> 138 146 PrintParameters(); 139 PrintParameters(); 147 << 140 148 // always return the root volume << 141 //always return the root volume 149 // 142 // 150 return fPBox; << 143 return pBox; 151 } 144 } 152 145 153 //....oooOO0OOooo........oooOO0OOooo........oo 146 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 154 147 155 void DetectorConstruction::PrintParameters() 148 void DetectorConstruction::PrintParameters() 156 { 149 { 157 G4cout << "\n The Box is " << G4BestUnit(fBo << 150 G4cout << "\n The Box is " << G4BestUnit(BoxSize,"Length") 158 << G4endl; << 151 << " of " << aMaterial->GetName() << G4endl; 159 } 152 } 160 153 161 //....oooOO0OOooo........oooOO0OOooo........oo 154 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 162 155 163 void DetectorConstruction::SetMaterial(const G << 156 void DetectorConstruction::SetMaterial(G4String materialChoice) 164 { 157 { 165 // search the material by its name 158 // search the material by its name 166 G4Material* pttoMaterial = G4NistManager::In << 159 G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); 167 << 160 if (pttoMaterial) aMaterial = pttoMaterial; 168 if (pttoMaterial && fMaterial != pttoMateria << 169 fMaterial = pttoMaterial; << 170 if (fLBox) { << 171 fLBox->SetMaterial(fMaterial); << 172 } << 173 G4RunManager::GetRunManager()->PhysicsHasB << 174 } << 175 } 161 } 176 162 177 //....oooOO0OOooo........oooOO0OOooo........oo 163 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 178 164 179 void DetectorConstruction::SetSize(G4double va 165 void DetectorConstruction::SetSize(G4double value) 180 { 166 { 181 fBoxSize = value; << 167 BoxSize = value; 182 } 168 } 183 169 184 //....oooOO0OOooo........oooOO0OOooo........oo 170 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 171 >> 172 #include "G4RunManager.hh" 185 173 186 void DetectorConstruction::UpdateGeometry() 174 void DetectorConstruction::UpdateGeometry() 187 { 175 { 188 G4RunManager::GetRunManager()->DefineWorldVo 176 G4RunManager::GetRunManager()->DefineWorldVolume(ConstructVolumes()); 189 } 177 } 190 178 191 //....oooOO0OOooo........oooOO0OOooo........oo 179 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 192 180