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 // This example is provided by the Geant4-DNA collaboration 27 // Any report or published results obtained using the Geant4-DNA software 28 // shall cite the following Geant4-DNA collaboration publications: 29 // Med. Phys. 45 (2018) e722-e739 30 // Phys. Med. 31 (2015) 861-874 31 // Med. Phys. 37 (2010) 4692-4708 32 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 33 // 34 // The Geant4-DNA web site is available at http://geant4-dna.org 35 // 36 /// \file PhysicsList.cc 37 /// \brief Implementation of the PhysicsList class 38 39 #include "PhysicsList.hh" 40 41 #include "G4DecayPhysics.hh" 42 #include "G4EmDNABuilder.hh" 43 #include "G4EmDNAPhysics.hh" 44 #include "G4EmDNAPhysics_option1.hh" 45 #include "G4EmDNAPhysics_option2.hh" 46 #include "G4EmDNAPhysics_option3.hh" 47 #include "G4EmDNAPhysics_option4.hh" 48 #include "G4EmDNAPhysics_option5.hh" 49 #include "G4EmDNAPhysics_option6.hh" 50 #include "G4EmDNAPhysics_option7.hh" 51 #include "G4EmDNAPhysics_option8.hh" 52 #include "G4EmLivermorePhysics.hh" 53 #include "G4EmParameters.hh" 54 #include "G4EmPenelopePhysics.hh" 55 #include "G4EmStandardPhysics.hh" 56 #include "G4EmStandardPhysics_option3.hh" 57 #include "G4EmStandardPhysics_option4.hh" 58 #include "G4GenericIon.hh" 59 #include "G4RadioactiveDecayPhysics.hh" 60 #include "G4SystemOfUnits.hh" 61 62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 63 64 PhysicsList::PhysicsList() : G4VModularPhysicsList() 65 { 66 SetDefaultCutValue(1.0 * micrometer); 67 SetVerboseLevel(1); 68 69 fEmPhysics = "DNA_Opt2"; 70 fEmPhysicsList = new G4EmDNAPhysics_option2(); 71 fDecayPhysicsList = new G4DecayPhysics(); 72 73 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); 74 G4EmParameters* param = G4EmParameters::Instance(); 75 param->SetMinEnergy(100 * eV); 76 param->SetMaxEnergy(1 * GeV); 77 } 78 79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 80 81 PhysicsList::~PhysicsList() 82 { 83 delete fEmPhysicsList; 84 delete fDecayPhysicsList; 85 delete fRadDecayPhysicsList; 86 } 87 88 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 89 90 void PhysicsList::ConstructParticle() 91 { 92 fEmPhysicsList->ConstructParticle(); 93 fDecayPhysicsList->ConstructParticle(); 94 } 95 96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 97 98 void PhysicsList::ConstructProcess() 99 { 100 AddTransportation(); 101 fEmPhysicsList->ConstructProcess(); 102 fDecayPhysicsList->ConstructProcess(); 103 if (nullptr != fRadDecayPhysicsList) { 104 fRadDecayPhysicsList->ConstructProcess(); 105 } 106 if (fIsTrackingCutSet) { 107 TrackingCut(); 108 } 109 } 110 111 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 112 113 void PhysicsList::AddPhysics(const G4String& name) 114 { 115 if (name == fEmPhysics) { 116 return; 117 } 118 119 G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name << "> is requested" 120 << G4endl; 121 122 fEmPhysics = name; 123 124 if (name == "emstandard_opt0") { 125 delete fEmPhysicsList; 126 fEmPhysicsList = new G4EmStandardPhysics(); 127 } 128 else if (name == "emstandard_opt3") { 129 delete fEmPhysicsList; 130 fEmPhysicsList = new G4EmStandardPhysics_option3(); 131 } 132 else if (name == "emstandard_opt4") { 133 delete fEmPhysicsList; 134 fEmPhysicsList = new G4EmStandardPhysics_option4(); 135 } 136 else if (name == "raddecay") { 137 if (nullptr == fRadDecayPhysicsList) fRadDecayPhysicsList = new G4RadioactiveDecayPhysics(); 138 } 139 else if (name == "emlivermore") { 140 delete fEmPhysicsList; 141 fEmPhysicsList = new G4EmLivermorePhysics(); 142 } 143 else if (name == "empenelope") { 144 delete fEmPhysicsList; 145 fEmPhysicsList = new G4EmPenelopePhysics(); 146 } 147 else if (name == "DNA_Opt0") { 148 delete fEmPhysicsList; 149 fEmPhysicsList = new G4EmDNAPhysics(); 150 } 151 else if (name == "DNA_Opt1") { 152 delete fEmPhysicsList; 153 fEmPhysicsList = new G4EmDNAPhysics_option1(); 154 } 155 else if (name == "DNA_Opt2") { 156 delete fEmPhysicsList; 157 fEmPhysicsList = new G4EmDNAPhysics_option2(); 158 } 159 else if (name == "DNA_Opt3") { 160 delete fEmPhysicsList; 161 fEmPhysicsList = new G4EmDNAPhysics_option3(); 162 } 163 else if (name == "DNA_Opt4") { 164 delete fEmPhysicsList; 165 fEmPhysicsList = new G4EmDNAPhysics_option4(); 166 } 167 else if (name == "DNA_Opt5") { 168 delete fEmPhysicsList; 169 fEmPhysicsList = new G4EmDNAPhysics_option5(); 170 } 171 else if (name == "DNA_Opt6") { 172 delete fEmPhysicsList; 173 fEmPhysicsList = new G4EmDNAPhysics_option6(); 174 } 175 else if (name == "DNA_Opt7") { 176 delete fEmPhysicsList; 177 fEmPhysicsList = new G4EmDNAPhysics_option7(); 178 } 179 else if (name == "DNA_Opt8") { 180 delete fEmPhysicsList; 181 fEmPhysicsList = new G4EmDNAPhysics_option8(); 182 } 183 else { 184 G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name 185 << "> is does not exist - the command ignored" << G4endl; 186 } 187 } 188 189 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 190 191 void PhysicsList::TrackingCut() 192 { 193 auto particle = G4GenericIon::GenericIon(); // DNA heavy ions 194 auto particleName = particle->GetParticleName(); 195 auto capture = G4EmDNABuilder::FindOrBuildCapture(0.5 * CLHEP::MeV, particle); 196 capture->AddRegion("World"); 197 capture->SetKinEnergyLimit(0.5 * CLHEP::MeV); // 0.5 MeV/u 198 } 199 200 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 201 202 void PhysicsList::SetTrackingCut(G4bool isCut) 203 { 204 fIsTrackingCutSet = isCut; 205 } 206