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