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 publication: 29 // Med. Phys. 37 (2010) 4692-4708 30 // J. Comput. Phys. 274 (2014) 841-882 31 // Phys. Med. Biol. 63(10) (2018) 105014-12pp 32 // The Geant4-DNA web site is available at http://geant4-dna.org 33 // 34 // 35 /// \file PhysicsList.cc 36 /// \brief Implementation of the PhysicsList class 37 38 #include "PhysicsList.hh" 39 40 #include "CommandLineParser.hh" 41 42 #include "G4EmDNAChemistry.hh" 43 #include "G4EmDNAChemistry_option1.hh" 44 #include "G4EmDNAPhysics.hh" 45 #include "G4EmDNAPhysics_option1.hh" 46 #include "G4EmDNAPhysics_option2.hh" 47 #include "G4EmDNAPhysics_option3.hh" 48 #include "G4EmDNAPhysics_option4.hh" 49 #include "G4EmDNAPhysics_option5.hh" 50 #include "G4EmDNAPhysics_option6.hh" 51 #include "G4EmDNAPhysics_option7.hh" 52 #include "G4EmDNAPhysics_option8.hh" 53 #include "G4EmParameters.hh" 54 #include "G4PhysicsConstructorRegistry.hh" 55 #include "G4SystemOfUnits.hh" 56 57 using namespace G4DNAPARSER; 58 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 60 61 PhysicsList::PhysicsList() 62 : G4VModularPhysicsList(), 63 fEmDNAPhysicsList(nullptr), 64 fEmDNAChemistryList(nullptr), 65 fEmDNAChemistryList1(nullptr), 66 fPhysDNAName("") 67 { 68 G4double currentDefaultCut = 1. * nanometer; 69 // fixe lower limit for cut 70 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); 71 SetDefaultCutValue(currentDefaultCut); 72 SetVerboseLevel(1); 73 74 RegisterConstructor("G4EmDNAPhysics"); 75 if (CommandLineParser::GetParser()->GetCommandIfActive("-chemOFF") == 0) { 76 RegisterConstructor("G4EmDNAChemistry"); 77 } 78 } 79 80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 81 82 PhysicsList::~PhysicsList() 83 { 84 delete fEmDNAPhysicsList; 85 delete fEmDNAChemistryList; 86 delete fEmDNAChemistryList1; 87 } 88 89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 90 91 void PhysicsList::ConstructParticle() 92 { 93 if (fEmDNAPhysicsList) { 94 fEmDNAPhysicsList->ConstructParticle(); 95 } 96 if (fEmDNAChemistryList) { 97 fEmDNAChemistryList->ConstructParticle(); 98 } 99 if (fEmDNAChemistryList1) { 100 fEmDNAChemistryList1->ConstructParticle(); 101 } 102 } 103 104 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 105 106 void PhysicsList::ConstructProcess() 107 { 108 AddTransportation(); 109 if (fEmDNAPhysicsList) { 110 fEmDNAPhysicsList->ConstructProcess(); 111 } 112 if (fEmDNAChemistryList) { 113 fEmDNAChemistryList->ConstructProcess(); 114 } 115 if (fEmDNAChemistryList1) { 116 fEmDNAChemistryList1->ConstructProcess(); 117 } 118 } 119 120 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 121 122 void PhysicsList::RegisterConstructor(const G4String& name) 123 { 124 if (name == fPhysDNAName) { 125 return; 126 } 127 if (verboseLevel > 0) { 128 G4cout << "===== Register constructor ==== " << name << G4endl; 129 } 130 if (name == "G4EmDNAPhysics") { 131 delete fEmDNAPhysicsList; 132 fEmDNAPhysicsList = new G4EmDNAPhysics(verboseLevel); 133 fPhysDNAName = name; 134 } 135 else if (name == "G4EmDNAPhysics_option1") { 136 delete fEmDNAPhysicsList; 137 fEmDNAPhysicsList = new G4EmDNAPhysics_option1(verboseLevel); 138 fPhysDNAName = name; 139 } 140 else if (name == "G4EmDNAPhysics_option2") { 141 delete fEmDNAPhysicsList; 142 fEmDNAPhysicsList = new G4EmDNAPhysics_option2(verboseLevel); 143 fPhysDNAName = name; 144 } 145 else if (name == "G4EmDNAPhysics_option3") { 146 delete fEmDNAPhysicsList; 147 fEmDNAPhysicsList = new G4EmDNAPhysics_option3(verboseLevel); 148 fPhysDNAName = name; 149 } 150 else if (name == "G4EmDNAPhysics_option4") { 151 delete fEmDNAPhysicsList; 152 fEmDNAPhysicsList = new G4EmDNAPhysics_option4(verboseLevel); 153 fPhysDNAName = name; 154 } 155 else if (name == "G4EmDNAPhysics_option5") { 156 delete fEmDNAPhysicsList; 157 fEmDNAPhysicsList = new G4EmDNAPhysics_option5(verboseLevel); 158 fPhysDNAName = name; 159 } 160 else if (name == "G4EmDNAPhysics_option6") { 161 delete fEmDNAPhysicsList; 162 fEmDNAPhysicsList = new G4EmDNAPhysics_option6(verboseLevel); 163 fPhysDNAName = name; 164 } 165 else if (name == "G4EmDNAPhysics_option7") { 166 delete fEmDNAPhysicsList; 167 fEmDNAPhysicsList = new G4EmDNAPhysics_option7(verboseLevel); 168 fPhysDNAName = name; 169 } 170 else if (name == "G4EmDNAPhysics_option8") { 171 delete fEmDNAPhysicsList; 172 fEmDNAPhysicsList = new G4EmDNAPhysics_option8(verboseLevel); 173 fPhysDNAName = name; 174 } 175 else if (name == "G4EmDNAChemistry") { 176 if (fEmDNAChemistryList || fEmDNAChemistryList1) { 177 return; 178 } 179 fEmDNAChemistryList = new G4EmDNAChemistry(); 180 fEmDNAChemistryList->SetVerboseLevel(verboseLevel); 181 } 182 else if (name == "G4EmDNAChemistry_option1") { 183 if (fEmDNAChemistryList || fEmDNAChemistryList1) { 184 return; 185 } 186 fEmDNAChemistryList1 = new G4EmDNAChemistry_option1(); 187 fEmDNAChemistryList1->SetVerboseLevel(verboseLevel); 188 } 189 else { 190 G4cout << "PhysicsList::RegisterConstructor: <" << name << ">" 191 << " fails - name is not defined" << G4endl; 192 } 193 } 194 195 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 196