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