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/TestEm11/src/Detecto 26 /// \file electromagnetic/TestEm11/src/DetectorConstruction.cc 27 /// \brief Implementation of the DetectorConst 27 /// \brief Implementation of the DetectorConstruction class 28 // 28 // 29 // 29 // 30 //....oooOO0OOooo........oooOO0OOooo........oo 30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 31 //....oooOO0OOooo........oooOO0OOooo........oo 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 32 33 #include "DetectorConstruction.hh" 33 #include "DetectorConstruction.hh" 34 << 35 #include "DetectorMessenger.hh" 34 #include "DetectorMessenger.hh" 36 35 37 #include "G4AutoDelete.hh" << 36 #include "G4NistManager.hh" >> 37 #include "G4Material.hh" 38 #include "G4Box.hh" 38 #include "G4Box.hh" 39 #include "G4GeometryManager.hh" << 40 #include "G4GlobalMagFieldMessenger.hh" << 41 #include "G4LogicalVolume.hh" 39 #include "G4LogicalVolume.hh" 42 #include "G4LogicalVolumeStore.hh" << 43 #include "G4Material.hh" << 44 #include "G4NistManager.hh" << 45 #include "G4PVPlacement.hh" 40 #include "G4PVPlacement.hh" 46 #include "G4PVReplica.hh" 41 #include "G4PVReplica.hh" 47 #include "G4PhysicalConstants.hh" << 42 #include "G4UniformMagField.hh" >> 43 >> 44 #include "G4GeometryManager.hh" 48 #include "G4PhysicalVolumeStore.hh" 45 #include "G4PhysicalVolumeStore.hh" 49 #include "G4RunManager.hh" << 46 #include "G4LogicalVolumeStore.hh" 50 #include "G4SolidStore.hh" 47 #include "G4SolidStore.hh" 51 #include "G4SystemOfUnits.hh" << 48 52 #include "G4UImanager.hh" 49 #include "G4UImanager.hh" 53 #include "G4UniformMagField.hh" << 54 #include "G4UnitsTable.hh" 50 #include "G4UnitsTable.hh" 55 << 51 #include "G4PhysicalConstants.hh" >> 52 #include "G4SystemOfUnits.hh" >> 53 #include "G4GlobalMagFieldMessenger.hh" >> 54 #include "G4AutoDelete.hh" >> 55 #include "G4RunManager.hh" 56 #include <iomanip> 56 #include <iomanip> 57 57 58 //....oooOO0OOooo........oooOO0OOooo........oo 58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 59 59 60 DetectorConstruction::DetectorConstruction() 60 DetectorConstruction::DetectorConstruction() >> 61 :G4VUserDetectorConstruction(),fDefaultMaterial(0),fPhysiWorld(0), >> 62 fDetectorMessenger(0) 61 { 63 { 62 // default parameter values of the absorbers 64 // default parameter values of the absorbers 63 fNbOfAbsor = 1; 65 fNbOfAbsor = 1; 64 fAbsorThickness[0] = 0. * mm; // dummy, for << 66 fAbsorThickness[0] = 0*mm; //dummy, for initialization 65 fAbsorThickness[1] = 1. * mm; << 67 fAbsorThickness[1] = 1*mm; 66 fAbsorSizeYZ = 1. * mm; << 68 fAbsorSizeYZ = 1.*mm; 67 for (G4int iAbs = 0; iAbs < kMaxAbsor; iAbs+ << 69 for (G4int iAbs=0; iAbs<kMaxAbsor; iAbs++) { 68 fNbOfDivisions[iAbs] = 1; << 70 fNbOfDivisions[iAbs] = 1; 69 } << 71 } 70 ComputeParameters(); 72 ComputeParameters(); 71 73 72 // materials 74 // materials 73 DefineMaterials(); 75 DefineMaterials(); 74 SetAbsorMaterial(1, "G4_Si"); << 76 SetAbsorMaterial(1,"G4_Si"); 75 77 76 // create commands for interactive definitio 78 // create commands for interactive definition of the calorimeter 77 fDetectorMessenger = new DetectorMessenger(t 79 fDetectorMessenger = new DetectorMessenger(this); 78 } 80 } 79 81 80 //....oooOO0OOooo........oooOO0OOooo........oo 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 81 83 82 DetectorConstruction::~DetectorConstruction() 84 DetectorConstruction::~DetectorConstruction() 83 { 85 { 84 delete fDetectorMessenger; 86 delete fDetectorMessenger; 85 } 87 } 86 88 87 //....oooOO0OOooo........oooOO0OOooo........oo 89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 88 90 89 G4VPhysicalVolume* DetectorConstruction::Const 91 G4VPhysicalVolume* DetectorConstruction::Construct() 90 { 92 { 91 return ConstructVolumes(); 93 return ConstructVolumes(); 92 } 94 } 93 95 94 //....oooOO0OOooo........oooOO0OOooo........oo 96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 95 97 96 void DetectorConstruction::DefineMaterials() 98 void DetectorConstruction::DefineMaterials() 97 { 99 { 98 G4NistManager* man = G4NistManager::Instance 100 G4NistManager* man = G4NistManager::Instance(); 99 << 101 100 man->FindOrBuildMaterial("G4_Al"); 102 man->FindOrBuildMaterial("G4_Al"); 101 man->FindOrBuildMaterial("G4_Si"); 103 man->FindOrBuildMaterial("G4_Si"); 102 man->FindOrBuildMaterial("G4_Fe"); 104 man->FindOrBuildMaterial("G4_Fe"); 103 man->FindOrBuildMaterial("G4_Cu"); << 105 man->FindOrBuildMaterial("G4_Cu"); 104 man->FindOrBuildMaterial("G4_Ge"); 106 man->FindOrBuildMaterial("G4_Ge"); 105 man->FindOrBuildMaterial("G4_Mo"); 107 man->FindOrBuildMaterial("G4_Mo"); 106 man->FindOrBuildMaterial("G4_Ta"); 108 man->FindOrBuildMaterial("G4_Ta"); 107 man->FindOrBuildMaterial("G4_W"); 109 man->FindOrBuildMaterial("G4_W"); 108 man->FindOrBuildMaterial("G4_Au"); 110 man->FindOrBuildMaterial("G4_Au"); 109 man->FindOrBuildMaterial("G4_Pb"); << 111 man->FindOrBuildMaterial("G4_Pb"); 110 man->FindOrBuildMaterial("G4_PbWO4"); 112 man->FindOrBuildMaterial("G4_PbWO4"); 111 man->FindOrBuildMaterial("G4_SODIUM_IODIDE") 113 man->FindOrBuildMaterial("G4_SODIUM_IODIDE"); 112 << 114 113 man->FindOrBuildMaterial("G4_AIR"); 115 man->FindOrBuildMaterial("G4_AIR"); 114 man->FindOrBuildMaterial("G4_WATER"); 116 man->FindOrBuildMaterial("G4_WATER"); 115 << 117 116 G4Element* H = man->FindOrBuildElement("H"); << 118 G4Element* H = man->FindOrBuildElement("H"); 117 G4Element* O = man->FindOrBuildElement("O"); 119 G4Element* O = man->FindOrBuildElement("O"); 118 << 120 119 G4Material* H2O = new G4Material("Water", 1. << 121 G4Material* H2O = >> 122 new G4Material("Water", 1.000*g/cm3, 2); 120 H2O->AddElement(H, 2); 123 H2O->AddElement(H, 2); 121 H2O->AddElement(O, 1); 124 H2O->AddElement(O, 1); 122 H2O->GetIonisation()->SetMeanExcitationEnerg << 125 H2O->GetIonisation()->SetMeanExcitationEnergy(78.0*eV); 123 << 124 G4double density = universe_mean_density; / << 125 G4double pressure = 3.e-18 * pascal; << 126 G4double temperature = 2.73 * kelvin; << 127 G4Material* Galactic = << 128 new G4Material("Galactic", 1., 1.008 * g / << 129 126 >> 127 G4double density = universe_mean_density; //from PhysicalConstants.h >> 128 G4double pressure = 3.e-18*pascal; >> 129 G4double temperature = 2.73*kelvin; >> 130 G4Material* Galactic = >> 131 new G4Material("Galactic", 1., 1.008*g/mole, density, >> 132 kStateGas,temperature,pressure); >> 133 130 fDefaultMaterial = Galactic; 134 fDefaultMaterial = Galactic; 131 << 135 132 // G4cout << *(G4Material::GetMaterialTable 136 // G4cout << *(G4Material::GetMaterialTable()) << G4endl; 133 } 137 } 134 138 135 //....oooOO0OOooo........oooOO0OOooo........oo 139 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 136 140 137 void DetectorConstruction::ComputeParameters() 141 void DetectorConstruction::ComputeParameters() 138 { 142 { 139 // Compute total thickness of absorbers 143 // Compute total thickness of absorbers 140 fAbsorSizeX = 0.; 144 fAbsorSizeX = 0.; 141 for (G4int iAbs = 1; iAbs <= fNbOfAbsor; iAb << 145 for (G4int iAbs=1; iAbs<=fNbOfAbsor; iAbs++) { 142 fAbsorSizeX += fAbsorThickness[iAbs]; 146 fAbsorSizeX += fAbsorThickness[iAbs]; 143 } 147 } 144 } 148 } 145 149 146 //....oooOO0OOooo........oooOO0OOooo........oo 150 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 147 151 148 G4VPhysicalVolume* DetectorConstruction::Const 152 G4VPhysicalVolume* DetectorConstruction::ConstructVolumes() 149 { 153 { 150 // complete the Calor parameters definition 154 // complete the Calor parameters definition 151 ComputeParameters(); 155 ComputeParameters(); 152 156 153 // Cleanup old geometry 157 // Cleanup old geometry 154 G4GeometryManager::GetInstance()->OpenGeomet 158 G4GeometryManager::GetInstance()->OpenGeometry(); 155 G4PhysicalVolumeStore::GetInstance()->Clean( 159 G4PhysicalVolumeStore::GetInstance()->Clean(); 156 G4LogicalVolumeStore::GetInstance()->Clean() 160 G4LogicalVolumeStore::GetInstance()->Clean(); 157 G4SolidStore::GetInstance()->Clean(); 161 G4SolidStore::GetInstance()->Clean(); 158 162 159 // 163 // 160 // World 164 // World 161 // 165 // 162 G4Box* solidWorld = new G4Box("World", // n << 166 G4Box* solidWorld = 163 fAbsorSizeX / << 167 new G4Box("World", //name 164 << 168 fAbsorSizeX/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2); //size 165 G4LogicalVolume* logicWorld = new G4LogicalV << 169 166 << 170 G4LogicalVolume* logicWorld = 167 << 171 new G4LogicalVolume(solidWorld, //solid 168 << 172 fDefaultMaterial, //material 169 fPhysiWorld = new G4PVPlacement(0, // no ro << 173 "World"); //name 170 G4ThreeVecto << 174 171 logicWorld, << 175 fPhysiWorld = 172 "World", // << 176 new G4PVPlacement(0, //no rotation 173 0, // mothe << 177 G4ThreeVector(), //at (0,0,0) 174 false, // n << 178 logicWorld, //logical volume 175 0); // copy << 179 "World", //name 176 << 180 0, //mother volume >> 181 false, //no boolean operation >> 182 0); //copy number >> 183 177 // 184 // 178 // Absorbers 185 // Absorbers 179 // 186 // 180 fXfront[0] = -0.5 * fAbsorSizeX; << 187 fXfront[0] = -0.5*fAbsorSizeX; 181 // 188 // 182 for (G4int k = 1; k <= fNbOfAbsor; k++) { << 189 for (G4int k=1; k<=fNbOfAbsor; k++) { 183 G4Material* material = fAbsorMaterial[k]; 190 G4Material* material = fAbsorMaterial[k]; 184 G4String matname = material->GetName(); 191 G4String matname = material->GetName(); 185 << 192 186 G4Box* solidAbsor = 193 G4Box* solidAbsor = 187 new G4Box(matname, fAbsorThickness[k] / << 194 new G4Box(matname,fAbsorThickness[k]/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2); 188 << 189 G4LogicalVolume* logicAbsor = new G4Logica << 190 << 191 << 192 << 193 fXfront[k] = fXfront[k - 1] + fAbsorThickn << 194 G4double xcenter = fXfront[k] + 0.5 * fAbs << 195 G4ThreeVector position = G4ThreeVector(xce << 196 << 197 new G4PVPlacement(0, // no rotation << 198 position, // position << 199 logicAbsor, // logical << 200 matname, // name << 201 logicWorld, // mother << 202 false, // no boulean op << 203 k); // copy number << 204 195 >> 196 G4LogicalVolume* logicAbsor = >> 197 new G4LogicalVolume(solidAbsor, // solid >> 198 material, // material >> 199 matname); // name >> 200 >> 201 fXfront[k] = fXfront[k-1] + fAbsorThickness[k-1]; >> 202 G4double xcenter = fXfront[k]+0.5*fAbsorThickness[k]; >> 203 G4ThreeVector position = G4ThreeVector(xcenter,0.,0.); >> 204 >> 205 new G4PVPlacement(0, //no rotation >> 206 position, //position >> 207 logicAbsor, //logical volume >> 208 matname, //name >> 209 logicWorld, //mother >> 210 false, //no boulean operat >> 211 k); //copy number >> 212 205 // divisions, if any 213 // divisions, if any 206 // 214 // 207 G4double LayerThickness = fAbsorThickness[ << 215 G4double LayerThickness = fAbsorThickness[k]/fNbOfDivisions[k]; 208 G4Box* solidLayer = new G4Box(matname, Lay << 216 G4Box* solidLayer = 209 << 217 new G4Box(matname,LayerThickness/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2); 210 G4LogicalVolume* logicLayer = new G4Logica << 218 211 << 219 G4LogicalVolume* logicLayer = 212 << 220 new G4LogicalVolume(solidLayer, //solid 213 << 221 material, //material 214 new G4PVReplica(matname, // name << 222 matname); //name 215 logicLayer, // logical vo << 223 216 logicAbsor, // mother << 224 new G4PVReplica(matname, //name 217 kXAxis, // axis of replic << 225 logicLayer, //logical volume 218 fNbOfDivisions[k], // num << 226 logicAbsor, //mother 219 LayerThickness); // witdt << 227 kXAxis, //axis of replication >> 228 fNbOfDivisions[k], //number of replica >> 229 LayerThickness); //witdth of replica 220 } 230 } 221 231 222 PrintParameters(); 232 PrintParameters(); 223 233 224 // always return the physical World << 234 //always return the physical World 225 // 235 // 226 return fPhysiWorld; 236 return fPhysiWorld; 227 } 237 } 228 238 229 //....oooOO0OOooo........oooOO0OOooo........oo 239 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 230 240 231 void DetectorConstruction::PrintParameters() 241 void DetectorConstruction::PrintParameters() 232 { 242 { 233 G4cout << "\n------------------------------- 243 G4cout << "\n-------------------------------------------------------------" 234 << "\n ---> The Absorber is " << fNbO 244 << "\n ---> The Absorber is " << fNbOfAbsor << " layers of:"; 235 for (G4int i = 1; i <= fNbOfAbsor; i++) { << 245 for (G4int i=1; i<=fNbOfAbsor; i++) 236 G4cout << "\n \t" << std::setw(16) << fAbs << 246 { 237 << G4BestUnit(fAbsorThickness[i], " << 247 G4cout << "\n \t" << std::setw(12) << fAbsorMaterial[i]->GetName() <<": " 238 << " slices"; << 248 << std::setw(6) << G4BestUnit(fAbsorThickness[i],"Length") 239 } << 249 << " divided in " << fNbOfDivisions[i] << " slices"; 240 G4cout << "\n------------------------------- << 250 } >> 251 G4cout << "\n-------------------------------------------------------------\n" >> 252 << G4endl; 241 } 253 } 242 254 243 //....oooOO0OOooo........oooOO0OOooo........oo 255 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 244 256 245 void DetectorConstruction::SetNbOfAbsor(G4int 257 void DetectorConstruction::SetNbOfAbsor(G4int ival) 246 { 258 { 247 // set the number of Absorbers 259 // set the number of Absorbers 248 // 260 // 249 if (ival < 1 || ival > (kMaxAbsor - 1)) { << 261 if (ival < 1 || ival > (kMaxAbsor-1)) 250 G4cout << "\n ---> warning from SetfNbOfAb << 262 { G4cout << "\n ---> warning from SetfNbOfAbsor: " 251 << kMaxAbsor - 1 << ". Command refu << 263 << ival << " must be at least 1 and and most " << kMaxAbsor-1 252 return; << 264 << ". Command refused" << G4endl; 253 } << 265 return; >> 266 } 254 fNbOfAbsor = ival; 267 fNbOfAbsor = ival; 255 G4RunManager::GetRunManager()->ReinitializeG 268 G4RunManager::GetRunManager()->ReinitializeGeometry(); 256 } 269 } 257 270 258 //....oooOO0OOooo........oooOO0OOooo........oo 271 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 259 272 260 void DetectorConstruction::SetAbsorMaterial(G4 << 273 void DetectorConstruction::SetAbsorMaterial(G4int iabs,const G4String& material) 261 { 274 { 262 // search the material by its name 275 // search the material by its name 263 // 276 // 264 if (iabs > fNbOfAbsor || iabs <= 0) { << 277 if (iabs > fNbOfAbsor || iabs <= 0) 265 G4cout << "\n --->warning from SetfAbsorMa << 278 { G4cout << "\n --->warning from SetfAbsorMaterial: absor number " 266 << " out of range. Command refused" << 279 << iabs << " out of range. Command refused" << G4endl; 267 return; << 280 return; 268 } << 281 } 269 282 270 G4Material* pttoMaterial = G4NistManager::In << 283 G4Material* pttoMaterial = >> 284 G4NistManager::Instance()->FindOrBuildMaterial(material); 271 if (pttoMaterial) { 285 if (pttoMaterial) { 272 fAbsorMaterial[iabs] = pttoMaterial; << 286 fAbsorMaterial[iabs] = pttoMaterial; 273 G4RunManager::GetRunManager()->PhysicsHasB << 287 G4RunManager::GetRunManager()->PhysicsHasBeenModified(); 274 G4cout << "\n " << pttoMaterial << G4endl; << 275 } 288 } 276 } 289 } 277 290 278 //....oooOO0OOooo........oooOO0OOooo........oo 291 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 279 292 280 void DetectorConstruction::SetAbsorThickness(G << 293 void DetectorConstruction::SetAbsorThickness(G4int iabs,G4double val) 281 { 294 { 282 // change Absorber thickness 295 // change Absorber thickness 283 // 296 // 284 if (iabs > fNbOfAbsor || iabs <= 0) { << 297 if (iabs > fNbOfAbsor || iabs <= 0) 285 G4cout << "\n --->warning from SetfAbsorTh << 298 { G4cout << "\n --->warning from SetfAbsorThickness: absor number " 286 << " out of range. Command refused" << 299 << iabs << " out of range. Command refused" << G4endl; 287 return; << 300 return; 288 } << 301 } 289 if (val <= DBL_MIN) { << 302 if (val <= DBL_MIN) 290 G4cout << "\n --->warning from SetfAbsorTh << 303 { G4cout << "\n --->warning from SetfAbsorThickness: thickness " 291 << " out of range. Command refused" << 304 << val << " out of range. Command refused" << G4endl; 292 return; << 305 return; 293 } << 306 } 294 fAbsorThickness[iabs] = val; 307 fAbsorThickness[iabs] = val; 295 G4RunManager::GetRunManager()->ReinitializeG 308 G4RunManager::GetRunManager()->ReinitializeGeometry(); 296 } 309 } 297 310 298 //....oooOO0OOooo........oooOO0OOooo........oo 311 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 299 312 300 void DetectorConstruction::SetAbsorSizeYZ(G4do 313 void DetectorConstruction::SetAbsorSizeYZ(G4double val) 301 { 314 { 302 // change the transverse size 315 // change the transverse size 303 // 316 // 304 if (val <= DBL_MIN) { << 317 if (val <= DBL_MIN) 305 G4cout << "\n --->warning from SetfAbsorSi << 318 { G4cout << "\n --->warning from SetfAbsorSizeYZ: thickness " 306 << " out of range. Command refused" << 319 << val << " out of range. Command refused" << G4endl; 307 return; << 320 return; 308 } << 321 } 309 fAbsorSizeYZ = val; 322 fAbsorSizeYZ = val; 310 G4RunManager::GetRunManager()->ReinitializeG 323 G4RunManager::GetRunManager()->ReinitializeGeometry(); 311 } 324 } 312 325 313 //....oooOO0OOooo........oooOO0OOooo........oo 326 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 314 327 315 void DetectorConstruction::SetNbOfDivisions(G4 328 void DetectorConstruction::SetNbOfDivisions(G4int iabs, G4int ival) 316 { 329 { 317 // set the number of divisions 330 // set the number of divisions 318 // 331 // 319 if (iabs > fNbOfAbsor || iabs < 1) { << 332 if (iabs > fNbOfAbsor || iabs < 1) 320 G4cout << "\n --->warning from SetNbOfDivi << 333 { G4cout << "\n --->warning from SetNbOfDivisions: absor number " 321 << " out of range. Command refused" << 334 << iabs << " out of range. Command refused" << G4endl; 322 return; << 335 return; 323 } << 336 } 324 << 337 325 if (ival < 1) { << 338 if (ival < 1) 326 G4cout << "\n --->warning from SetNbOfDivi << 339 { G4cout << "\n --->warning from SetNbOfDivisions: " 327 << " must be at least 1. Command re << 340 << ival << " must be at least 1. Command refused" << G4endl; 328 return; << 341 return; 329 } << 342 } 330 fNbOfDivisions[iabs] = ival; 343 fNbOfDivisions[iabs] = ival; 331 G4RunManager::GetRunManager()->ReinitializeG 344 G4RunManager::GetRunManager()->ReinitializeGeometry(); 332 } 345 } 333 346 334 //....oooOO0OOooo........oooOO0OOooo........oo 347 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 335 348 336 void DetectorConstruction::ConstructSDandField 349 void DetectorConstruction::ConstructSDandField() 337 { 350 { 338 if (fFieldMessenger.Get() == 0) { << 351 if ( fFieldMessenger.Get() == 0 ) { 339 // Create global magnetic field messenger. << 352 // Create global magnetic field messenger. 340 // Uniform magnetic field is then created << 353 // Uniform magnetic field is then created automatically if 341 // the field value is not zero. << 354 // the field value is not zero. 342 G4ThreeVector fieldValue = G4ThreeVector() << 355 G4ThreeVector fieldValue = G4ThreeVector(); 343 G4GlobalMagFieldMessenger* msg = new G4Glo << 356 G4GlobalMagFieldMessenger* msg = 344 // msg->SetVerboseLevel(1); << 357 new G4GlobalMagFieldMessenger(fieldValue); 345 G4AutoDelete::Register(msg); << 358 //msg->SetVerboseLevel(1); 346 fFieldMessenger.Put(msg); << 359 G4AutoDelete::Register(msg); 347 } << 360 fFieldMessenger.Put( msg ); >> 361 } 348 } 362 } 349 363 350 //....oooOO0OOooo........oooOO0OOooo........oo 364 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 365 351 366