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 #include "PhysicsList.hh" 28 29 #include "G4EmDNAChemistry_option2.hh" 30 #include "G4EmDNAPhysics.hh" 31 #include "G4EmDNAPhysics_option1.hh" 32 #include "G4EmDNAPhysics_option2.hh" 33 #include "G4EmDNAPhysics_option3.hh" 34 #include "G4EmDNAPhysics_option4.hh" 35 #include "G4EmDNAPhysics_option5.hh" 36 #include "G4EmDNAPhysics_option6.hh" 37 #include "G4EmDNAPhysics_option7.hh" 38 #include "G4EmDNAPhysics_option8.hh" 39 #include "G4PhysicsConstructorRegistry.hh" 40 #include "G4SystemOfUnits.hh" 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 42 43 PhysicsList::PhysicsList() 44 : G4VModularPhysicsList(), fDNAPhysicsList(nullptr), fChemistryList_option2(nullptr) 45 { 46 SetDefaultCutValue(1.0 * nanometer); 47 SetVerboseLevel(1); 48 RegisterConstructor("G4EmDNAPhysics"); 49 RegisterConstructor("G4EmDNAChemistry_option2"); 50 // This example works only with G4EmDNAChemistry_option2 51 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); 52 } 53 54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 55 56 PhysicsList::~PhysicsList() {} 57 58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 59 void PhysicsList::ConstructParticle() 60 { 61 if (fDNAPhysicsList != nullptr) { 62 fDNAPhysicsList->ConstructParticle(); 63 } 64 65 if (fChemistryList_option2 != nullptr) { 66 fChemistryList_option2->ConstructParticle(); 67 } 68 } 69 70 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 71 72 void PhysicsList::ConstructProcess() 73 { 74 AddTransportation(); 75 76 if (fDNAPhysicsList != nullptr) { 77 fDNAPhysicsList->ConstructProcess(); 78 } 79 if (fChemistryList_option2 != nullptr) { 80 fChemistryList_option2->ConstructProcess(); 81 } 82 } 83 84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 85 86 void PhysicsList::RegisterConstructor(const G4String& name) 87 { 88 if (name == fPhysDNAName) { 89 return; 90 } 91 92 if (verboseLevel > 0) { 93 G4cout << "===== Register constructor ==== " << name << G4endl; 94 } 95 96 if (name == "G4EmDNAPhysics") { 97 fDNAPhysicsList.reset(new G4EmDNAPhysics(verboseLevel)); 98 fPhysDNAName = name; 99 } 100 else if (name == "G4EmDNAPhysics_option1") { 101 fDNAPhysicsList.reset(new G4EmDNAPhysics_option1(verboseLevel)); 102 fPhysDNAName = name; 103 } 104 else if (name == "G4EmDNAPhysics_option2") { 105 fDNAPhysicsList.reset(new G4EmDNAPhysics_option2(verboseLevel)); 106 fPhysDNAName = name; 107 } 108 else if (name == "G4EmDNAPhysics_option3") { 109 fDNAPhysicsList.reset(new G4EmDNAPhysics_option3(verboseLevel)); 110 fPhysDNAName = name; 111 } 112 else if (name == "G4EmDNAPhysics_option4") { 113 fDNAPhysicsList.reset(new G4EmDNAPhysics_option4(verboseLevel)); 114 fPhysDNAName = name; 115 } 116 else if (name == "G4EmDNAPhysics_option5") { 117 fDNAPhysicsList.reset(new G4EmDNAPhysics_option5(verboseLevel)); 118 fPhysDNAName = name; 119 } 120 else if (name == "G4EmDNAPhysics_option6") { 121 fDNAPhysicsList.reset(new G4EmDNAPhysics_option6(verboseLevel)); 122 fPhysDNAName = name; 123 } 124 else if (name == "G4EmDNAPhysics_option7") { 125 fDNAPhysicsList.reset(new G4EmDNAPhysics_option7(verboseLevel)); 126 fPhysDNAName = name; 127 } 128 else if (name == "G4EmDNAPhysics_option8") { 129 fDNAPhysicsList.reset(new G4EmDNAPhysics_option8(verboseLevel)); 130 fPhysDNAName = name; 131 } 132 else if (name == "G4EmDNAChemistry_option2") { 133 fChemistryList_option2.reset(new G4EmDNAChemistry_option2()); 134 fChemistryList_option2->SetVerboseLevel(verboseLevel); 135 } 136 else { 137 G4cout << "PhysicsList::RegisterConstructor: <" << name << ">" 138 << " fails - name is not defined" << G4endl; 139 } 140 } 141 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 142