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 // chem6 example is derived from chem4 and chem5 examples 28 // 29 // Any report or published results obtained using the Geant4-DNA software 30 // shall cite the following Geant4-DNA collaboration publication: 31 // J. Appl. Phys. 125 (2019) 104301 32 // Med. Phys. 45 (2018) e722-e739 33 // J. Comput. Phys. 274 (2014) 841-882 34 // Med. Phys. 37 (2010) 4692-4708 35 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 36 // The Geant4-DNA web site is available at http://geant4-dna.org 37 // 38 // Authors: W. G. Shin and S. Incerti (CENBG, France) 39 // 40 /// \file PhysicsList.cc 41 /// \brief Implementation of the PhysicsList class 42 43 #include "PhysicsList.hh" 44 45 #include "G4EmDNAChemistry.hh" 46 #include "G4EmDNAChemistry_option1.hh" 47 #include "G4EmDNAChemistry_option2.hh" 48 #include "G4EmDNAChemistry_option3.hh" 49 #include "G4EmDNAPhysics.hh" 50 #include "G4EmDNAPhysics_option1.hh" 51 #include "G4EmDNAPhysics_option2.hh" 52 #include "G4EmDNAPhysics_option3.hh" 53 #include "G4EmDNAPhysics_option4.hh" 54 #include "G4EmDNAPhysics_option5.hh" 55 #include "G4EmDNAPhysics_option6.hh" 56 #include "G4EmDNAPhysics_option7.hh" 57 #include "G4EmDNAPhysics_option8.hh" 58 #include "G4EmParameters.hh" 59 #include "G4SystemOfUnits.hh" 60 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 61 62 PhysicsList::PhysicsList() : G4VModularPhysicsList() 63 { 64 G4double currentDefaultCut = 0.001 * mm; 65 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); 66 SetDefaultCutValue(currentDefaultCut); 67 SetVerboseLevel(1); 68 69 RegisterConstructor("G4EmDNAPhysics_option2"); 70 RegisterConstructor("G4EmDNAChemistry_option3"); 71 } 72 73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 74 75 PhysicsList::~PhysicsList() = default; 76 77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 78 79 void PhysicsList::ConstructParticle() 80 { 81 if (fEmDNAPhysicsList != nullptr) { 82 fEmDNAPhysicsList->ConstructParticle(); 83 } 84 if (fEmDNAChemistryList != nullptr) { 85 fEmDNAChemistryList->ConstructParticle(); 86 } 87 } 88 89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 90 91 void PhysicsList::ConstructProcess() 92 { 93 AddTransportation(); 94 if (fEmDNAPhysicsList != nullptr) { 95 fEmDNAPhysicsList->ConstructProcess(); 96 } 97 if (fEmDNAChemistryList != nullptr) { 98 fEmDNAChemistryList->ConstructProcess(); 99 } 100 } 101 102 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 103 104 void PhysicsList::RegisterConstructor(const G4String& name) 105 { 106 if (name == fPhysDNAName) { 107 return; 108 } 109 if (verboseLevel > 0) { 110 G4cout << "===== Register constructor ==== " << name << G4endl; 111 } 112 if (name == "G4EmDNAPhysics") { 113 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics>(verboseLevel); 114 fPhysDNAName = name; 115 } 116 else if (name == "G4EmDNAPhysics_option1") { 117 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option1>(verboseLevel); 118 fPhysDNAName = name; 119 } 120 else if (name == "G4EmDNAPhysics_option2") { 121 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option2>(verboseLevel); 122 fPhysDNAName = name; 123 } 124 else if (name == "G4EmDNAPhysics_option3") { 125 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option3>(verboseLevel); 126 fPhysDNAName = name; 127 } 128 else if (name == "G4EmDNAPhysics_option4") { 129 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option4>(verboseLevel); 130 fPhysDNAName = name; 131 } 132 else if (name == "G4EmDNAPhysics_option5") { 133 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option5>(verboseLevel); 134 fPhysDNAName = name; 135 } 136 else if (name == "G4EmDNAPhysics_option6") { 137 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option6>(verboseLevel); 138 fPhysDNAName = name; 139 } 140 else if (name == "G4EmDNAPhysics_option7") { 141 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option7>(verboseLevel); 142 fPhysDNAName = name; 143 } 144 else if (name == "G4EmDNAPhysics_option8") { 145 fEmDNAPhysicsList = std::make_unique<G4EmDNAPhysics_option8>(verboseLevel); 146 fPhysDNAName = name; 147 } 148 else if (name == "G4EmDNAChemistry") { 149 fEmDNAChemistryList = std::make_unique<G4EmDNAChemistry>(); 150 fEmDNAChemistryList->SetVerboseLevel(verboseLevel); 151 } 152 else if (name == "G4EmDNAChemistry_option1") { 153 fEmDNAChemistryList = std::make_unique<G4EmDNAChemistry_option1>(); 154 fEmDNAChemistryList->SetVerboseLevel(verboseLevel); 155 } 156 else if (name == "G4EmDNAChemistry_option2") { 157 fEmDNAChemistryList = std::make_unique<G4EmDNAChemistry_option2>(); 158 fEmDNAChemistryList->SetVerboseLevel(verboseLevel); 159 } 160 else if (name == "G4EmDNAChemistry_option3") { 161 fEmDNAChemistryList = std::make_unique<G4EmDNAChemistry_option3>(); 162 fEmDNAChemistryList->SetVerboseLevel(verboseLevel); 163 } 164 else { 165 G4cout << "PhysicsList::RegisterConstructor: <" << name << ">" 166 << " fails - name is not defined" << G4endl; 167 } 168 } 169 170 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 171