File indexing completed on 2026-03-29 07:51:41
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
0040
0041
0042 #include "PhysicsList.hh"
0043
0044 #include "G4DecayPhysics.hh"
0045 #include "G4EmDNABuilder.hh"
0046 #include "G4EmDNAPhysics.hh"
0047 #include "G4EmDNAPhysicsActivator.hh"
0048 #include "G4EmDNAPhysics_option1.hh"
0049 #include "G4EmDNAPhysics_option2.hh"
0050 #include "G4EmDNAPhysics_option3.hh"
0051 #include "G4EmDNAPhysics_option4.hh"
0052 #include "G4EmDNAPhysics_option5.hh"
0053 #include "G4EmDNAPhysics_option6.hh"
0054 #include "G4EmDNAPhysics_option7.hh"
0055 #include "G4EmDNAPhysics_option8.hh"
0056 #include "G4EmLivermorePhysics.hh"
0057 #include "G4EmPenelopePhysics.hh"
0058 #include "G4EmStandardPhysics.hh"
0059 #include "G4EmStandardPhysics_option3.hh"
0060 #include "G4EmStandardPhysics_option4.hh"
0061 #include "G4GenericIon.hh"
0062 #include "G4RadioactiveDecayPhysics.hh"
0063
0064
0065
0066 PhysicsList::PhysicsList() : G4VModularPhysicsList()
0067 {
0068 SetDefaultCutValue(1.0 * micrometer);
0069 SetVerboseLevel(1);
0070
0071 fEmPhysics = "emstandard_opt4";
0072 fEmPhysicsList = new G4EmStandardPhysics_option4();
0073 fDecayPhysicsList = new G4DecayPhysics();
0074 fEmDNAActivator = new G4EmDNAPhysicsActivator();
0075
0076 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV);
0077 G4EmParameters* param = G4EmParameters::Instance();
0078 param->SetMinEnergy(100 * eV);
0079 param->SetMaxEnergy(1 * GeV);
0080 }
0081
0082
0083
0084 PhysicsList::~PhysicsList()
0085 {
0086 delete fEmPhysicsList;
0087 delete fEmDNAActivator;
0088 delete fDecayPhysicsList;
0089 delete fRadDecayPhysicsList;
0090 }
0091
0092
0093
0094 void PhysicsList::ConstructParticle()
0095 {
0096 fEmPhysicsList->ConstructParticle();
0097 fDecayPhysicsList->ConstructParticle();
0098 fEmDNAActivator->ConstructParticle();
0099 }
0100
0101
0102
0103 void PhysicsList::ConstructProcess()
0104 {
0105 AddTransportation();
0106 fEmPhysicsList->ConstructProcess();
0107 fDecayPhysicsList->ConstructProcess();
0108
0109 if (nullptr != fRadDecayPhysicsList) {
0110 fRadDecayPhysicsList->ConstructProcess();
0111 }
0112
0113 if (!fDNAPL) {
0114 fEmDNAActivator->ConstructProcess();
0115 }
0116
0117 if (fIsTrackingCutSet) {
0118 TrackingCut();
0119 }
0120 }
0121
0122
0123
0124 void PhysicsList::AddPhysics(const G4String& name)
0125 {
0126 if (name == fEmPhysics) {
0127 return;
0128 }
0129
0130 G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name << "> is requested"
0131 << G4endl;
0132
0133 fEmPhysics = name;
0134
0135 if (name == "emstandard_opt0") {
0136 delete fEmPhysicsList;
0137 fEmPhysicsList = new G4EmStandardPhysics();
0138 fDNAPL = false;
0139 }
0140 else if (name == "emstandard_opt3") {
0141 delete fEmPhysicsList;
0142 fEmPhysicsList = new G4EmStandardPhysics_option3();
0143 fDNAPL = false;
0144 }
0145 else if (name == "emstandard_opt4") {
0146 delete fEmPhysicsList;
0147 fEmPhysicsList = new G4EmStandardPhysics_option4();
0148 fDNAPL = false;
0149 }
0150 else if (name == "raddecay") {
0151 if (nullptr == fRadDecayPhysicsList) fRadDecayPhysicsList = new G4RadioactiveDecayPhysics();
0152 }
0153 else if (name == "emlivermore") {
0154 delete fEmPhysicsList;
0155 fEmPhysicsList = new G4EmLivermorePhysics();
0156 fDNAPL = false;
0157 }
0158 else if (name == "empenelope") {
0159 delete fEmPhysicsList;
0160 fEmPhysicsList = new G4EmPenelopePhysics();
0161 fDNAPL = false;
0162 }
0163 else if (name == "DNA_Opt0") {
0164 delete fEmPhysicsList;
0165 fEmPhysicsList = new G4EmDNAPhysics();
0166 fDNAPL = true;
0167 }
0168 else if (name == "DNA_Opt1") {
0169 delete fEmPhysicsList;
0170 fEmPhysicsList = new G4EmDNAPhysics_option1();
0171 fDNAPL = true;
0172 }
0173 else if (name == "DNA_Opt2") {
0174 delete fEmPhysicsList;
0175 fEmPhysicsList = new G4EmDNAPhysics_option2();
0176 fDNAPL = true;
0177 }
0178 else if (name == "DNA_Opt3") {
0179 delete fEmPhysicsList;
0180 fEmPhysicsList = new G4EmDNAPhysics_option3();
0181 fDNAPL = true;
0182 }
0183 else if (name == "DNA_Opt4") {
0184 delete fEmPhysicsList;
0185 fEmPhysicsList = new G4EmDNAPhysics_option4();
0186 fDNAPL = true;
0187 }
0188 else if (name == "DNA_Opt5") {
0189 delete fEmPhysicsList;
0190 fEmPhysicsList = new G4EmDNAPhysics_option5();
0191 fDNAPL = true;
0192 }
0193 else if (name == "DNA_Opt6") {
0194 delete fEmPhysicsList;
0195 fEmPhysicsList = new G4EmDNAPhysics_option6();
0196 fDNAPL = true;
0197 }
0198 else if (name == "DNA_Opt7") {
0199 delete fEmPhysicsList;
0200 fEmPhysicsList = new G4EmDNAPhysics_option7();
0201 fDNAPL = true;
0202 }
0203 else if (name == "DNA_Opt8") {
0204 delete fEmPhysicsList;
0205 fEmPhysicsList = new G4EmDNAPhysics_option8();
0206 fDNAPL = true;
0207 }
0208 else {
0209 G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name
0210 << "> is does not exist - the command ignored" << G4endl;
0211 }
0212 }
0213
0214
0215
0216 void PhysicsList::TrackingCut()
0217 {
0218 auto particle = G4GenericIon::GenericIon();
0219 auto particleName = particle->GetParticleName();
0220 auto capture = G4EmDNABuilder::FindOrBuildCapture(0.5 * CLHEP::MeV, particle);
0221 capture->AddRegion("World");
0222 capture->AddRegion("regionTarget");
0223 capture->SetKinEnergyLimit(0.5 * CLHEP::MeV);
0224 }
0225
0226
0227
0228 void PhysicsList::SetTrackingCut(G4bool isCut)
0229 {
0230 fIsTrackingCutSet = isCut;
0231 }