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.3 2007-05-12 16:33:53 vnivanch Exp $ >> 28 // GEANT4 tag $Name: not supported by cvs2svn $ >> 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 G4Element* H = new G4Element("Hydrogen" ,"H" , z= 1., a= 1.01*g/mole); 91 G4Element* I = new G4Element("Iodine", "I", << 85 G4Element* I = new G4Element("Iodine" ,"I" , z= 53., a= 126.90*g/mole); 92 << 86 93 // 87 // 94 // define materials 88 // define materials 95 // 89 // 96 G4double density; 90 G4double density; 97 G4int ncomponents, natoms; 91 G4int ncomponents, natoms; 98 G4double fractionmass; 92 G4double fractionmass; 99 << 93 100 new G4Material("galactic", z = 1., a = 1.01 << 94 new G4Material("galactic", z=1., a= 1.01*g/mole, universe_mean_density, 101 2.73 * kelvin, 3.e-18 * pasca << 95 kStateGas, 2.73*kelvin, 3.e-18*pascal); 102 << 96 103 G4Material* Air = new G4Material("Air", dens << 97 G4Material* Air = 104 Air->AddElement(N, fractionmass = 70. * perC << 98 new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2); 105 Air->AddElement(O, fractionmass = 30. * perC << 99 Air->AddElement(N, fractionmass=70.*perCent); 106 << 100 Air->AddElement(O, fractionmass=30.*perCent); 107 G4Material* CaCO3 = new G4Material("CaCO3", << 101 108 CaCO3->AddElement(Ca, natoms = 1); << 102 G4Material* CaCO3 = 109 CaCO3->AddElement(C, natoms = 1); << 103 new G4Material("CaCO3", density= 2.80*g/cm3, ncomponents=3); 110 CaCO3->AddElement(O, natoms = 3); << 104 CaCO3->AddElement(Ca, natoms= 1); 111 << 105 CaCO3->AddElement(C , natoms= 1); 112 new G4Material("Carbon", z = 6., a = 12.01 * << 106 CaCO3->AddElement(O , natoms= 3); 113 new G4Material("Iron", z = 26., a = 55.85 * << 107 114 new G4Material("Tin", z = 50., a = 118.7 * g << 108 new G4Material("Carbon", z= 6., a= 12.01*g/mole, density= 2.265*g/cm3); 115 << 109 new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3); 116 G4Material* HI = new G4Material("HI", densit << 110 new G4Material("Tin" , z=50., a= 118.7*g/mole, density= 7.310*g/cm3); 117 HI->AddElement(H, natoms = 1); << 111 118 HI->AddElement(I, natoms = 1); << 112 G4Material* HI = >> 113 new G4Material("HI", density= 2.8*g/cm3, ncomponents=2); //-35oC >> 114 HI->AddElement(H, natoms= 1); >> 115 HI->AddElement(I, natoms= 1); 119 116 120 G4cout << *(G4Material::GetMaterialTable()) 117 G4cout << *(G4Material::GetMaterialTable()) << G4endl; 121 } 118 } 122 119 123 //....oooOO0OOooo........oooOO0OOooo........oo 120 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 124 121 125 G4VPhysicalVolume* DetectorConstruction::Const 122 G4VPhysicalVolume* DetectorConstruction::ConstructVolumes() 126 { 123 { 127 if (fPBox) { << 124 // Cleanup old geometry 128 return fPBox; << 125 G4GeometryManager::GetInstance()->OpenGeometry(); 129 } << 126 G4PhysicalVolumeStore::GetInstance()->Clean(); 130 << 127 G4LogicalVolumeStore::GetInstance()->Clean(); 131 G4Box* sBox = new G4Box("Container", // its << 128 G4SolidStore::GetInstance()->Clean(); 132 fBoxSize / 2, fBoxSi << 129 133 << 130 G4Box* 134 fLBox = new G4LogicalVolume(sBox, // its sh << 131 sBox = new G4Box("Container", //its name 135 fMaterial, // i << 132 BoxSize/2,BoxSize/2,BoxSize/2); //its dimensions 136 fMaterial->GetNa << 133 137 << 134 lBox = new G4LogicalVolume(sBox, //its shape 138 fPBox = new G4PVPlacement(0, // no rotation << 135 aMaterial, //its material 139 G4ThreeVector(), << 136 aMaterial->GetName()); //its name 140 fLBox, // its log << 137 141 fMaterial->GetName << 138 pBox = new G4PVPlacement(0, //no rotation 142 0, // its mother << 139 G4ThreeVector(), //at (0,0,0) 143 false, // no bool << 140 lBox, //its logical volume 144 0); // copy numbe << 141 aMaterial->GetName(), //its name 145 << 142 0, //its mother volume >> 143 false, //no boolean operation >> 144 0); //copy number >> 145 146 PrintParameters(); 146 PrintParameters(); 147 << 147 148 // always return the root volume << 148 //always return the root volume 149 // 149 // 150 return fPBox; << 150 return pBox; 151 } 151 } 152 152 153 //....oooOO0OOooo........oooOO0OOooo........oo 153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 154 154 155 void DetectorConstruction::PrintParameters() 155 void DetectorConstruction::PrintParameters() 156 { 156 { 157 G4cout << "\n The Box is " << G4BestUnit(fBo << 157 G4cout << "\n The Box is " << G4BestUnit(BoxSize,"Length") 158 << G4endl; << 158 << " of " << aMaterial->GetName() << G4endl; 159 } 159 } 160 160 161 //....oooOO0OOooo........oooOO0OOooo........oo 161 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 162 162 163 void DetectorConstruction::SetMaterial(const G << 163 void DetectorConstruction::SetMaterial(G4String materialChoice) 164 { 164 { 165 // search the material by its name 165 // search the material by its name 166 G4Material* pttoMaterial = G4NistManager::In << 166 G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); 167 << 167 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 } 168 } 176 169 177 //....oooOO0OOooo........oooOO0OOooo........oo 170 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 178 171 179 void DetectorConstruction::SetSize(G4double va 172 void DetectorConstruction::SetSize(G4double value) 180 { 173 { 181 fBoxSize = value; << 174 BoxSize = value; 182 } 175 } 183 176 184 //....oooOO0OOooo........oooOO0OOooo........oo 177 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 178 >> 179 #include "G4RunManager.hh" 185 180 186 void DetectorConstruction::UpdateGeometry() 181 void DetectorConstruction::UpdateGeometry() 187 { 182 { 188 G4RunManager::GetRunManager()->DefineWorldVo 183 G4RunManager::GetRunManager()->DefineWorldVolume(ConstructVolumes()); 189 } 184 } 190 185 191 //....oooOO0OOooo........oooOO0OOooo........oo 186 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 192 187