File indexing completed on 2025-02-23 09:21:54
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #include "PhysicsList.hh"
0040
0041 #include "G4DecayPhysics.hh"
0042 #include "G4EmDNABuilder.hh"
0043 #include "G4EmDNAPhysics.hh"
0044 #include "G4EmDNAPhysics_option1.hh"
0045 #include "G4EmDNAPhysics_option2.hh"
0046 #include "G4EmDNAPhysics_option3.hh"
0047 #include "G4EmDNAPhysics_option4.hh"
0048 #include "G4EmDNAPhysics_option5.hh"
0049 #include "G4EmDNAPhysics_option6.hh"
0050 #include "G4EmDNAPhysics_option7.hh"
0051 #include "G4EmDNAPhysics_option8.hh"
0052 #include "G4EmLivermorePhysics.hh"
0053 #include "G4EmParameters.hh"
0054 #include "G4EmPenelopePhysics.hh"
0055 #include "G4EmStandardPhysics.hh"
0056 #include "G4EmStandardPhysics_option3.hh"
0057 #include "G4EmStandardPhysics_option4.hh"
0058 #include "G4GenericIon.hh"
0059 #include "G4RadioactiveDecayPhysics.hh"
0060 #include "G4SystemOfUnits.hh"
0061
0062
0063
0064 PhysicsList::PhysicsList() : G4VModularPhysicsList()
0065 {
0066 SetDefaultCutValue(1.0 * micrometer);
0067 SetVerboseLevel(1);
0068
0069 fEmPhysics = "DNA_Opt2";
0070 fEmPhysicsList = new G4EmDNAPhysics_option2();
0071 fDecayPhysicsList = new G4DecayPhysics();
0072
0073 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV);
0074 G4EmParameters* param = G4EmParameters::Instance();
0075 param->SetMinEnergy(100 * eV);
0076 param->SetMaxEnergy(1 * GeV);
0077 }
0078
0079
0080
0081 PhysicsList::~PhysicsList()
0082 {
0083 delete fEmPhysicsList;
0084 delete fDecayPhysicsList;
0085 delete fRadDecayPhysicsList;
0086 }
0087
0088
0089
0090 void PhysicsList::ConstructParticle()
0091 {
0092 fEmPhysicsList->ConstructParticle();
0093 fDecayPhysicsList->ConstructParticle();
0094 }
0095
0096
0097
0098 void PhysicsList::ConstructProcess()
0099 {
0100 AddTransportation();
0101 fEmPhysicsList->ConstructProcess();
0102 fDecayPhysicsList->ConstructProcess();
0103 if (nullptr != fRadDecayPhysicsList) {
0104 fRadDecayPhysicsList->ConstructProcess();
0105 }
0106 if (fIsTrackingCutSet) {
0107 TrackingCut();
0108 }
0109 }
0110
0111
0112
0113 void PhysicsList::AddPhysics(const G4String& name)
0114 {
0115 if (name == fEmPhysics) {
0116 return;
0117 }
0118
0119 G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name << "> is requested"
0120 << G4endl;
0121
0122 fEmPhysics = name;
0123
0124 if (name == "emstandard_opt0") {
0125 delete fEmPhysicsList;
0126 fEmPhysicsList = new G4EmStandardPhysics();
0127 }
0128 else if (name == "emstandard_opt3") {
0129 delete fEmPhysicsList;
0130 fEmPhysicsList = new G4EmStandardPhysics_option3();
0131 }
0132 else if (name == "emstandard_opt4") {
0133 delete fEmPhysicsList;
0134 fEmPhysicsList = new G4EmStandardPhysics_option4();
0135 }
0136 else if (name == "raddecay") {
0137 if (nullptr == fRadDecayPhysicsList) fRadDecayPhysicsList = new G4RadioactiveDecayPhysics();
0138 }
0139 else if (name == "emlivermore") {
0140 delete fEmPhysicsList;
0141 fEmPhysicsList = new G4EmLivermorePhysics();
0142 }
0143 else if (name == "empenelope") {
0144 delete fEmPhysicsList;
0145 fEmPhysicsList = new G4EmPenelopePhysics();
0146 }
0147 else if (name == "DNA_Opt0") {
0148 delete fEmPhysicsList;
0149 fEmPhysicsList = new G4EmDNAPhysics();
0150 }
0151 else if (name == "DNA_Opt1") {
0152 delete fEmPhysicsList;
0153 fEmPhysicsList = new G4EmDNAPhysics_option1();
0154 }
0155 else if (name == "DNA_Opt2") {
0156 delete fEmPhysicsList;
0157 fEmPhysicsList = new G4EmDNAPhysics_option2();
0158 }
0159 else if (name == "DNA_Opt3") {
0160 delete fEmPhysicsList;
0161 fEmPhysicsList = new G4EmDNAPhysics_option3();
0162 }
0163 else if (name == "DNA_Opt4") {
0164 delete fEmPhysicsList;
0165 fEmPhysicsList = new G4EmDNAPhysics_option4();
0166 }
0167 else if (name == "DNA_Opt5") {
0168 delete fEmPhysicsList;
0169 fEmPhysicsList = new G4EmDNAPhysics_option5();
0170 }
0171 else if (name == "DNA_Opt6") {
0172 delete fEmPhysicsList;
0173 fEmPhysicsList = new G4EmDNAPhysics_option6();
0174 }
0175 else if (name == "DNA_Opt7") {
0176 delete fEmPhysicsList;
0177 fEmPhysicsList = new G4EmDNAPhysics_option7();
0178 }
0179 else if (name == "DNA_Opt8") {
0180 delete fEmPhysicsList;
0181 fEmPhysicsList = new G4EmDNAPhysics_option8();
0182 }
0183 else {
0184 G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name
0185 << "> is does not exist - the command ignored" << G4endl;
0186 }
0187 }
0188
0189
0190
0191 void PhysicsList::TrackingCut()
0192 {
0193 auto particle = G4GenericIon::GenericIon();
0194 auto particleName = particle->GetParticleName();
0195 auto capture = G4EmDNABuilder::FindOrBuildCapture(0.5 * CLHEP::MeV, particle);
0196 capture->AddRegion("World");
0197 capture->SetKinEnergyLimit(0.5 * CLHEP::MeV);
0198 }
0199
0200
0201
0202 void PhysicsList::SetTrackingCut(G4bool isCut)
0203 {
0204 fIsTrackingCutSet = isCut;
0205 }