Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /// \file parallel/ThreadsafeScorers/src/TSPhysicsList.cc 27 /// \brief Implementation of the TSPhysicsList class 28 // 29 // 30 // 31 // 32 /// This is a very, very extensive physics list and step-limiters are applied 33 /// to many particles. The reasoning behind this is because we wan't to put 34 /// as much pressure on the atomics as possible and produce as much 35 /// round-off error as possible. See descriptions in README and 36 /// TSDetectorConstruction for more details. 37 // 38 // 39 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 40 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 41 42 #include "TSPhysicsList.hh" 43 44 #include "G4ParticleDefinition.hh" 45 #include "G4ParticleTypes.hh" 46 #include "G4ProcessManager.hh" 47 #include "G4RunManager.hh" 48 49 // Hadrons 50 #include "G4BaryonConstructor.hh" 51 #include "G4IonConstructor.hh" 52 #include "G4MesonConstructor.hh" 53 54 // Bosons 55 #include "G4BosonConstructor.hh" 56 57 // Leptons 58 #include "G4LeptonConstructor.hh" 59 60 // Other Particles 61 #include "G4ShortLivedConstructor.hh" 62 63 // Process options 64 #include "G4LossTableManager.hh" 65 66 // Physics List Helper 67 #include "G4PhysicsListHelper.hh" 68 #include "G4StepLimiter.hh" 69 70 // Constructors 71 #include "G4DecayPhysics.hh" 72 #include "G4EmStandardPhysics_option3.hh" 73 #include "G4EmStandardPhysics_option4.hh" 74 #include "G4HadronElasticPhysics.hh" 75 #include "G4HadronElasticPhysicsHP.hh" 76 #include "G4HadronPhysicsQGSP_BERT.hh" 77 #include "G4HadronPhysicsQGSP_BERT_HP.hh" 78 #include "G4IonBinaryCascadePhysics.hh" 79 #include "G4IonElasticPhysics.hh" 80 #include "G4RadioactiveDecayPhysics.hh" 81 82 #include <set> 83 84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 85 86 TSPhysicsList::TSPhysicsList() 87 { 88 defaultCutValue = 1. * CLHEP::mm; 89 90 fConstructors.push_back(new G4EmStandardPhysics_option4); 91 fConstructors.push_back(new G4DecayPhysics); 92 fConstructors.push_back(new G4RadioactiveDecayPhysics); 93 fConstructors.push_back(new G4HadronPhysicsQGSP_BERT_HP); 94 fConstructors.push_back(new G4HadronElasticPhysicsHP); 95 fConstructors.push_back(new G4IonElasticPhysics); 96 fConstructors.push_back(new G4IonBinaryCascadePhysics); 97 } 98 99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 100 101 TSPhysicsList::~TSPhysicsList() 102 { 103 for (auto ite : fConstructors) 104 delete ite; 105 } 106 107 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 108 109 void TSPhysicsList::ConstructParticle() 110 { 111 for (auto c : fConstructors) { 112 c->ConstructParticle(); 113 } 114 } 115 116 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 117 118 void TSPhysicsList::ConstructProcess() 119 { 120 // Transportation 121 // 122 AddTransportation(); 123 124 for (auto c : fConstructors) { 125 c->ConstructProcess(); 126 } 127 128 std::set<G4String> step_limit_particles; 129 // standard particles 130 step_limit_particles.insert("e-"); 131 step_limit_particles.insert("e+"); 132 step_limit_particles.insert("alpha"); 133 step_limit_particles.insert("He3"); 134 step_limit_particles.insert("GenericIon"); 135 step_limit_particles.insert("proton"); 136 step_limit_particles.insert("neutron"); 137 // more ~exotic particles 138 step_limit_particles.insert("pi+"); 139 step_limit_particles.insert("pi-"); 140 step_limit_particles.insert("mu+"); 141 step_limit_particles.insert("mu-"); 142 143 auto particleIterator = GetParticleIterator(); 144 particleIterator->reset(); 145 146 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); 147 148 while ((*particleIterator)()) { 149 G4ParticleDefinition* particle = particleIterator->value(); 150 G4String pname = particle->GetParticleName(); 151 152 if (step_limit_particles.find(pname) != step_limit_particles.end() || particle->GetPDGCharge()) 153 { 154 ph->RegisterProcess(new G4StepLimiter, particle); 155 } 156 } 157 } 158 159 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 160