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 // 27 /// \file radiobiology/src/PhysicsList.cc 28 /// \brief Implementation of the RadioBio::PhysicsList class 29 // 30 // 31 // 'HADRONTHERAPY_1' and 'HADRONTHERAPY_2' are both suggested; 32 // It can be activated inside any macro file using the command: 33 // /Physics/addPhysics HADRONTHERAPY_1 (HADRONTHERAPY_2) 34 35 #include "PhysicsList.hh" 36 37 #include "G4DecayPhysics.hh" 38 #include "G4EmExtraPhysics.hh" 39 #include "G4EmStandardPhysics.hh" 40 #include "G4EmStandardPhysics_option4.hh" 41 #include "G4HadronElasticPhysics.hh" 42 #include "G4HadronElasticPhysicsHP.hh" 43 #include "G4HadronPhysicsQGSP_BIC.hh" 44 #include "G4HadronPhysicsQGSP_BIC_AllHP.hh" 45 #include "G4HadronPhysicsQGSP_BIC_HP.hh" 46 #include "G4IonBinaryCascadePhysics.hh" 47 #include "G4LossTableManager.hh" 48 #include "G4NeutronTrackingCut.hh" 49 #include "G4RadioactiveDecayPhysics.hh" 50 #include "G4RunManager.hh" 51 #include "G4StoppingPhysics.hh" 52 #include "G4SystemOfUnits.hh" 53 #include "G4VPhysicsConstructor.hh" 54 55 #include "PhysicsListMessenger.hh" 56 57 namespace RadioBio 58 { 59 60 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 61 62 PhysicsList::PhysicsList() : G4VModularPhysicsList() 63 { 64 // Set default cut values 65 G4LossTableManager::Instance(); 66 defaultCutValue = 1. * mm; 67 fCutForGamma = defaultCutValue; 68 fCutForElectron = defaultCutValue; 69 fCutForPositron = defaultCutValue; 70 71 fPhysMessenger = new PhysicsListMessenger(this); 72 SetVerboseLevel(1); 73 74 // Create default decay physics 75 fDecayPhysicsList = new G4DecayPhysics(); 76 77 // Create default electromagnetic physics 78 fEmPhysicsList = new G4EmStandardPhysics_option4(); 79 } 80 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 82 83 PhysicsList::~PhysicsList() 84 { 85 delete fPhysMessenger; 86 delete fEmPhysicsList; 87 delete fDecayPhysicsList; 88 89 // Destroy hadronic physics 90 for (size_t i = 0; i < fHadronPhys.size(); i++) { 91 delete fHadronPhys[i]; 92 } 93 94 // Clear pointers 95 fHadronPhys.clear(); 96 } 97 98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 99 100 void PhysicsList::ConstructParticle() 101 { 102 fDecayPhysicsList->ConstructParticle(); 103 } 104 105 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 106 107 void PhysicsList::ConstructProcess() 108 { 109 // Transportation 110 AddTransportation(); 111 112 // Construct default decay and EM processes 113 fDecayPhysicsList->ConstructProcess(); 114 fEmPhysicsList->ConstructProcess(); 115 116 // Construct hadronic processes 117 for (size_t i = 0; i < fHadronPhys.size(); i++) { 118 fHadronPhys[i]->ConstructProcess(); 119 } 120 } 121 122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 123 124 void PhysicsList::AddPhysicsList(const G4String& name) 125 { 126 if (verboseLevel > 1) { 127 G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl; 128 } 129 if (name == fEmName) return; 130 131 /////////////////////////////////// 132 // ELECTROMAGNETIC MODELS 133 /////////////////////////////////// 134 if (name == "standard_opt4") { 135 fEmName = name; 136 delete fEmPhysicsList; 137 fHadronPhys.clear(); 138 fEmPhysicsList = new G4EmStandardPhysics_option4(); 139 G4RunManager::GetRunManager()->PhysicsHasBeenModified(); 140 if (verboseLevel > 1) { 141 G4cout << "THE FOLLOWING ELECTROMAGNETIC PHYSICS LIST HAS BEEN ACTIVATED: " 142 << "G4EmStandardPhysics_option4" << G4endl; 143 } 144 145 //////////////////////////////////////// 146 // ELECTROMAGNETIC + HADRONIC MODELS 147 //////////////////////////////////////// 148 } 149 else if (name == "HADRONTHERAPY_1") { 150 AddPhysicsList("standard_opt4"); 151 fHadronPhys.push_back(new G4RadioactiveDecayPhysics()); 152 fHadronPhys.push_back(new G4IonBinaryCascadePhysics()); 153 fHadronPhys.push_back(new G4EmExtraPhysics()); 154 fHadronPhys.push_back(new G4HadronElasticPhysicsHP()); 155 fHadronPhys.push_back(new G4StoppingPhysics()); 156 fHadronPhys.push_back(new G4HadronPhysicsQGSP_BIC_HP()); 157 fHadronPhys.push_back(new G4NeutronTrackingCut()); 158 159 G4cout << "HADRONTHERAPY_1 PHYSICS LIST has been activated" << G4endl; 160 } 161 162 else if (name == "HADRONTHERAPY_2") { 163 // HP models are switched off 164 AddPhysicsList("standard_opt4"); 165 fHadronPhys.push_back(new G4RadioactiveDecayPhysics()); 166 fHadronPhys.push_back(new G4IonBinaryCascadePhysics()); 167 fHadronPhys.push_back(new G4EmExtraPhysics()); 168 fHadronPhys.push_back(new G4HadronElasticPhysics()); 169 fHadronPhys.push_back(new G4StoppingPhysics()); 170 fHadronPhys.push_back(new G4HadronPhysicsQGSP_BIC()); 171 fHadronPhys.push_back(new G4NeutronTrackingCut()); 172 173 G4cout << "HADRONTHERAPY_2 PHYSICS LIST has been activated" << G4endl; 174 } 175 else { 176 G4Exception("PhysicsList::AddPhysicsList", "NoPhysicsList", JustWarning, 177 (name + " is not a defined physics list").c_str()); 178 } 179 } 180 181 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 182 183 } // namespace RadioBio