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 // 26 // 27 /// \file field/field05/src/F05DetectorConstru << 28 /// \brief Implementation of the F05DetectorCo << 29 // 27 // >> 28 // 30 29 31 //....oooOO0OOooo........oooOO0OOooo........oo 30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 32 //....oooOO0OOooo........oooOO0OOooo........oo 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 32 34 #include "F05DetectorConstruction.hh" 33 #include "F05DetectorConstruction.hh" 35 34 36 #include "F05Field.hh" << 35 #include "G4Material.hh" >> 36 #include "G4NistManager.hh" 37 37 38 #include "G4Box.hh" 38 #include "G4Box.hh" 39 #include "G4Colour.hh" << 40 #include "G4FieldManager.hh" << 41 #include "G4GeometryManager.hh" << 42 #include "G4LogicalVolume.hh" 39 #include "G4LogicalVolume.hh" 43 #include "G4LogicalVolumeStore.hh" << 44 #include "G4Material.hh" << 45 #include "G4NistManager.hh" << 46 #include "G4PVPlacement.hh" 40 #include "G4PVPlacement.hh" >> 41 >> 42 #include "G4GeometryManager.hh" 47 #include "G4PhysicalVolumeStore.hh" 43 #include "G4PhysicalVolumeStore.hh" >> 44 #include "G4LogicalVolumeStore.hh" 48 #include "G4SolidStore.hh" 45 #include "G4SolidStore.hh" 49 #include "G4SystemOfUnits.hh" << 46 50 #include "G4TransportationManager.hh" << 51 #include "G4UserLimits.hh" << 52 #include "G4VisAttributes.hh" 47 #include "G4VisAttributes.hh" >> 48 #include "G4Colour.hh" 53 49 54 // #include "G4RepleteEofM.hh" << 50 #include "G4UserLimits.hh" 55 #include "G4ChordFinder.hh" << 51 56 #include "G4ClassicalRK4.hh" << 52 #include "F05Field.hh" 57 #include "G4EqEMFieldWithSpin.hh" << 53 58 #include "G4MagIntegratorStepper.hh" << 54 #include "G4RunManager.hh" 59 #include "G4PropagatorInField.hh" << 60 55 61 //....oooOO0OOooo........oooOO0OOooo........oo 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 62 57 63 F05DetectorConstruction::F05DetectorConstructi << 58 F05DetectorConstruction::F05DetectorConstruction() >> 59 : Vacuum(0), field(0) 64 { 60 { 65 // materials 61 // materials 66 DefineMaterials(); 62 DefineMaterials(); >> 63 >> 64 // ensure the global field is initialized >> 65 field = new F05Field(); 67 } 66 } 68 67 69 //....oooOO0OOooo........oooOO0OOooo........oo 68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 70 69 71 F05DetectorConstruction::~F05DetectorConstruct 70 F05DetectorConstruction::~F05DetectorConstruction() 72 { 71 { 73 delete fField; << 72 delete field; 74 } 73 } 75 74 76 //....oooOO0OOooo........oooOO0OOooo........oo 75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 77 76 78 void F05DetectorConstruction::DefineMaterials( 77 void F05DetectorConstruction::DefineMaterials() 79 { 78 { 80 G4NistManager* nistMan = G4NistManager::Inst 79 G4NistManager* nistMan = G4NistManager::Instance(); 81 80 82 fVacuum = nistMan->FindOrBuildMaterial("G4_G << 81 Vacuum = nistMan->FindOrBuildMaterial("G4_Galactic"); 83 82 84 G4cout << *(G4Material::GetMaterialTable()) 83 G4cout << *(G4Material::GetMaterialTable()) << G4endl; 85 } 84 } 86 85 87 //....oooOO0OOooo........oooOO0OOooo........oo 86 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 88 87 89 G4VPhysicalVolume* F05DetectorConstruction::Co 88 G4VPhysicalVolume* F05DetectorConstruction::Construct() 90 { 89 { 91 // << 90 // 92 // World 91 // World 93 // 92 // 94 93 95 G4double worldSizeXY = 20.0 * m; << 94 WorldSizeXY = 20.0*m; 96 G4double worldSizeZ = 1.0 * mm; << 95 WorldSizeZ = 1.0*mm; 97 << 98 auto solidWorld = new G4Box("World", // its << 99 worldSizeXY / 2, << 100 << 101 auto logicWorld = new G4LogicalVolume(solidW << 102 fVacuu << 103 "World << 104 << 105 auto physiWorld = new G4PVPlacement(nullptr, << 106 G4ThreeV << 107 logicWor << 108 "World", << 109 nullptr, << 110 false, << 111 0); // << 112 96 >> 97 solidWorld = new G4Box("World", //its name >> 98 WorldSizeXY/2,WorldSizeXY/2,WorldSizeZ/2); //its size >> 99 >> 100 logicWorld = new G4LogicalVolume(solidWorld, //its solid >> 101 Vacuum, //its material >> 102 "World"); //its name >> 103 >> 104 physiWorld = new G4PVPlacement(0, //no rotation >> 105 G4ThreeVector(), //at (0,0,0) >> 106 logicWorld, //its logical volume >> 107 "World", //its name >> 108 0, //its mother volume >> 109 false, //no boolean operation >> 110 0); //copy number >> 111 113 G4UserLimits* stepLimit; 112 G4UserLimits* stepLimit; 114 stepLimit = new G4UserLimits(5 * mm); << 113 stepLimit = new G4UserLimits(5*mm); 115 114 116 logicWorld->SetUserLimits(stepLimit); 115 logicWorld->SetUserLimits(stepLimit); 117 << 116 118 // << 117 // 119 // Visualization attributes 118 // Visualization attributes 120 // 119 // 121 // fLogicWorld->SetVisAttributes (G4VisAttri << 120 // logicWorld->SetVisAttributes (G4VisAttributes::Invisible); 122 121 123 // 122 // 124 // always return the physical World << 123 //always return the physical World 125 // 124 // 126 return physiWorld; 125 return physiWorld; 127 } << 128 << 129 //....oooOO0OOooo........oooOO0OOooo........oo << 130 << 131 G4ThreadLocal F05Field* F05DetectorConstructio << 132 << 133 void F05DetectorConstruction::ConstructSDandFi << 134 << 135 { << 136 if (!fField) { << 137 fField = new F05Field(); << 138 << 139 // G4RepleteEofM* equation = new G4Rep << 140 auto equation = new G4EqEMFieldWithSpin(fF << 141 // equation->SetBField(); << 142 // equation->SetEField(); << 143 // equation->SetSpin(); << 144 << 145 G4FieldManager* fieldManager = << 146 G4TransportationManager::GetTransportati << 147 fieldManager->SetDetectorField(fField); << 148 << 149 G4MagIntegratorStepper* stepper = new G4Cl << 150 << 151 G4double minStep = 0.01 * mm; << 152 << 153 auto chordFinder = new G4ChordFinder((G4Ma << 154 << 155 // Set accuracy parameters << 156 G4double deltaChord = 3.0 * mm; << 157 chordFinder->SetDeltaChord(deltaChord); << 158 << 159 // Maximum allowed integration error in on << 160 G4double deltaOneStep = 0.01 * mm; << 161 fieldManager->SetAccuraciesWithDeltaOneSte << 162 << 163 G4double deltaIntersection = 0.1 * mm; << 164 fieldManager->SetDeltaIntersection(deltaIn << 165 << 166 G4TransportationManager* transportManager << 167 << 168 G4PropagatorInField* fieldPropagator = tra << 169 << 170 // Limits for relative accuracy of integra << 171 G4double epsMin = 2.5e-7; << 172 G4double epsMax = 0.001; << 173 << 174 fieldPropagator->SetMinimumEpsilonStep(eps << 175 fieldPropagator->SetMaximumEpsilonStep(eps << 176 << 177 fieldManager->SetChordFinder(chordFinder); << 178 } << 179 } 126 } 180 127 181 //....oooOO0OOooo........oooOO0OOooo........oo 128 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 182 129