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_option8"); 75 if (CommandLineParser::GetParser()->GetCommandIfActive("-chemOFF") == 0) { 76 RegisterConstructor("G4EmDNAChemistry_option1"); 77 } 78 G4EmParameters::Instance()->SetDNAeSolvationSubType(fRitchie1994eSolvation); 79 G4EmParameters::Instance()->Dump(); 80 } 81 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 83 84 PhysicsList::~PhysicsList() 85 { 86 delete fEmDNAPhysicsList; 87 delete fEmDNAChemistryList; 88 delete fEmDNAChemistryList1; 89 } 90 91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 92 93 void PhysicsList::ConstructParticle() 94 { 95 if (fEmDNAPhysicsList) { 96 fEmDNAPhysicsList->ConstructParticle(); 97 } 98 if (fEmDNAChemistryList) { 99 fEmDNAChemistryList->ConstructParticle(); 100 } 101 if (fEmDNAChemistryList1) { 102 fEmDNAChemistryList1->ConstructParticle(); 103 } 104 } 105 106 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 107 108 void PhysicsList::ConstructProcess() 109 { 110 AddTransportation(); 111 if (fEmDNAPhysicsList) { 112 fEmDNAPhysicsList->ConstructProcess(); 113 } 114 if (fEmDNAChemistryList) { 115 fEmDNAChemistryList->ConstructProcess(); 116 } 117 if (fEmDNAChemistryList1) { 118 fEmDNAChemistryList1->ConstructProcess(); 119 } 120 } 121 122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 123 124 void PhysicsList::RegisterConstructor(const G4String& name) 125 { 126 if (name == fPhysDNAName) { 127 return; 128 } 129 if (verboseLevel > 0) { 130 G4cout << "===== Register constructor ==== " << name << G4endl; 131 } 132 if (name == "G4EmDNAPhysics") { 133 delete fEmDNAPhysicsList; 134 fEmDNAPhysicsList = new G4EmDNAPhysics(verboseLevel); 135 fPhysDNAName = name; 136 } 137 else if (name == "G4EmDNAPhysics_option1") { 138 delete fEmDNAPhysicsList; 139 fEmDNAPhysicsList = new G4EmDNAPhysics_option1(verboseLevel); 140 fPhysDNAName = name; 141 } 142 else if (name == "G4EmDNAPhysics_option2") { 143 delete fEmDNAPhysicsList; 144 fEmDNAPhysicsList = new G4EmDNAPhysics_option2(verboseLevel); 145 fPhysDNAName = name; 146 } 147 else if (name == "G4EmDNAPhysics_option3") { 148 delete fEmDNAPhysicsList; 149 fEmDNAPhysicsList = new G4EmDNAPhysics_option3(verboseLevel); 150 fPhysDNAName = name; 151 } 152 else if (name == "G4EmDNAPhysics_option4") { 153 delete fEmDNAPhysicsList; 154 fEmDNAPhysicsList = new G4EmDNAPhysics_option4(verboseLevel); 155 fPhysDNAName = name; 156 } 157 else if (name == "G4EmDNAPhysics_option5") { 158 delete fEmDNAPhysicsList; 159 fEmDNAPhysicsList = new G4EmDNAPhysics_option5(verboseLevel); 160 fPhysDNAName = name; 161 } 162 else if (name == "G4EmDNAPhysics_option6") { 163 delete fEmDNAPhysicsList; 164 fEmDNAPhysicsList = new G4EmDNAPhysics_option6(verboseLevel); 165 fPhysDNAName = name; 166 } 167 else if (name == "G4EmDNAPhysics_option7") { 168 delete fEmDNAPhysicsList; 169 fEmDNAPhysicsList = new G4EmDNAPhysics_option7(verboseLevel); 170 fPhysDNAName = name; 171 } 172 else if (name == "G4EmDNAPhysics_option8") { 173 delete fEmDNAPhysicsList; 174 fEmDNAPhysicsList = new G4EmDNAPhysics_option8(verboseLevel); 175 fPhysDNAName = name; 176 } 177 else if (name == "G4EmDNAChemistry") { 178 if (fEmDNAChemistryList || fEmDNAChemistryList1) { 179 return; 180 } 181 fEmDNAChemistryList = new G4EmDNAChemistry(); 182 fEmDNAChemistryList->SetVerboseLevel(verboseLevel); 183 } 184 else if (name == "G4EmDNAChemistry_option1") { 185 if (fEmDNAChemistryList || fEmDNAChemistryList1) { 186 return; 187 } 188 fEmDNAChemistryList1 = new G4EmDNAChemistry_option1(); 189 fEmDNAChemistryList1->SetVerboseLevel(verboseLevel); 190 } 191 else { 192 G4cout << "PhysicsList::RegisterConstructor: <" << name << ">" 193 << " fails - name is not defined" << G4endl; 194 } 195 } 196 197 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 198