Warning, file /geant4/examples/advanced/dsbandrepair/src/ChemPhysicsList.cc was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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 #include "ChemPhysicsList.hh"
0031 #include "G4EmDNAChemistry_option3_Extended.hh"
0032
0033 #include "G4SystemOfUnits.hh"
0034 #include "G4EmDNAPhysics.hh"
0035 #include "G4EmDNAPhysics_option1.hh"
0036 #include "G4EmDNAPhysics_option2.hh"
0037 #include "G4EmDNAPhysics_option3.hh"
0038 #include "G4EmDNAPhysics_option4.hh"
0039 #include "G4EmDNAPhysics_option5.hh"
0040 #include "G4EmDNAPhysics_option6.hh"
0041 #include "G4EmDNAPhysics_option7.hh"
0042 #include "G4EmDNAPhysics_option8.hh"
0043 #include "G4EmDNAChemistry.hh"
0044 #include "G4EmDNAChemistry_option1.hh"
0045 #include "G4EmDNAChemistry_option2.hh"
0046 #include "G4EmDNAChemistry_option3.hh"
0047 #include "G4DNAMolecularReactionTable.hh"
0048 #include "G4PhysicsConstructorRegistry.hh"
0049 #include "G4LeptonConstructor.hh"
0050 #include "G4BosonConstructor.hh"
0051 #include "G4MesonConstructor.hh"
0052 #include "G4BaryonConstructor.hh"
0053 #include "G4ShortLivedConstructor.hh"
0054 #include "G4EmParameters.hh"
0055 #include "G4ChemicalMoleculeFinder.hh"
0056 #include "G4Filesystem.hh"
0057 #include "G4EmParameters.hh"
0058
0059
0060
0061 ChemPhysicsList::ChemPhysicsList(G4String chemListName)
0062 : G4VModularPhysicsList()
0063 {
0064 fmsg = new ChemPhysicsMessenger(this);
0065 SetDefaultCutValue(1.0*nanometer);
0066 SetVerboseLevel(1);
0067 RegisterPhysListConstructor(ExtractPhysDNAName());
0068 RegisterChemListConstructor(chemListName);
0069 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100*eV, 1*GeV);
0070 }
0071
0072
0073
0074 void ChemPhysicsList::ConstructParticle()
0075 {
0076 if(fDNAPhysicsList != nullptr)
0077 {
0078 fDNAPhysicsList->ConstructParticle();
0079 }
0080
0081 if(fChemistryList_option2 != nullptr)
0082 {
0083 fChemistryList_option2->ConstructParticle();
0084 }
0085 if(fChemistryList_option3_mod != nullptr)
0086 {
0087 fChemistryList_option3_mod->ConstructParticle();
0088 }
0089
0090
0091 G4LeptonConstructor lConstructor;
0092 lConstructor.ConstructParticle();
0093 G4BosonConstructor pBosonConstructor;
0094 pBosonConstructor.ConstructParticle();
0095 G4MesonConstructor pMesonConstructor;
0096 pMesonConstructor.ConstructParticle();
0097 G4BaryonConstructor pBaryonConstructor;
0098 pBaryonConstructor.ConstructParticle();
0099 G4ShortLivedConstructor pShortLivedConstructor;
0100 pShortLivedConstructor.ConstructParticle();
0101 }
0102
0103
0104
0105 void ChemPhysicsList::ConstructProcess()
0106 {
0107 AddTransportation();
0108
0109 if(fDNAPhysicsList != nullptr)
0110 {
0111 fDNAPhysicsList->ConstructProcess();
0112 }
0113
0114 if(fChemistryList_option2 != nullptr)
0115 {
0116 fChemistryList_option2->ConstructProcess();
0117 }
0118
0119 if(fChemistryList_option3_mod != nullptr)
0120 {
0121 fChemistryList_option3_mod->ConstructProcess();
0122 }
0123
0124 }
0125
0126
0127
0128 void ChemPhysicsList::RegisterPhysListConstructor(const G4String& name)
0129 {
0130 if(name == fPhysDNAName )
0131 {
0132 return;
0133 }
0134
0135 if(verboseLevel > 0)
0136 {
0137 if (fPhysDNAName == "") G4cout << "===== Register constructor ==== " << name << G4endl;
0138 else G4cout << "===== Change Physics constructor from "<<fPhysDNAName<<" to "<<name<<" ==== " << G4endl;
0139 }
0140
0141 if(name == "G4EmDNAPhysics")
0142 {
0143 fDNAPhysicsList.reset(new G4EmDNAPhysics(verboseLevel));
0144 fPhysDNAName = name;
0145 }
0146 else if(name == "G4EmDNAPhysics_option1")
0147 {
0148 fDNAPhysicsList.reset(new G4EmDNAPhysics_option1(verboseLevel));
0149 fPhysDNAName = name;
0150 }
0151 else if(name == "G4EmDNAPhysics_option2")
0152 {
0153 fDNAPhysicsList.reset(new G4EmDNAPhysics_option2(verboseLevel));
0154 fPhysDNAName = name;
0155 }
0156 else if(name == "G4EmDNAPhysics_option3")
0157 {
0158 fDNAPhysicsList.reset(new G4EmDNAPhysics_option3(verboseLevel));
0159 fPhysDNAName = name;
0160 }
0161 else if(name == "G4EmDNAPhysics_option4")
0162 {
0163 fDNAPhysicsList.reset(new G4EmDNAPhysics_option4(verboseLevel));
0164 fPhysDNAName = name;
0165 }
0166 else if(name == "G4EmDNAPhysics_option5")
0167 {
0168 fDNAPhysicsList.reset(new G4EmDNAPhysics_option5(verboseLevel));
0169 fPhysDNAName = name;
0170 }
0171 else if(name == "G4EmDNAPhysics_option6")
0172 {
0173 fDNAPhysicsList.reset(new G4EmDNAPhysics_option6(verboseLevel));
0174 fPhysDNAName = name;
0175 }
0176 else if(name == "G4EmDNAPhysics_option7")
0177 {
0178 fDNAPhysicsList.reset(new G4EmDNAPhysics_option7(verboseLevel));
0179 fPhysDNAName = name;
0180 }
0181 else if(name == "G4EmDNAPhysics_option8")
0182 {
0183 fDNAPhysicsList.reset(new G4EmDNAPhysics_option8(verboseLevel));
0184 fPhysDNAName = name;
0185 }
0186 else
0187 {
0188 G4cout << "PhysicsList::RegisterPhysListConstructor: <" << name << ">"
0189 << " fails - name is not defined"
0190 << G4endl;
0191 }
0192 }
0193
0194
0195
0196 void ChemPhysicsList::RegisterChemListConstructor(const G4String& name)
0197 {
0198 if(name == fChemListName )
0199 {
0200 return;
0201 }
0202
0203 if(verboseLevel > 0)
0204 {
0205 G4cout << "===== Register constructor for Chemitry ==== " << name << G4endl;
0206 }
0207
0208 if(name == "G4EmDNAChemistry_option2")
0209 {
0210 if ( fChemistryList_option2 != nullptr) return;
0211 fChemistryList_option2.reset(new G4EmDNAChemistry_option2());
0212 fChemistryList_option2->SetVerboseLevel(verboseLevel);
0213 fTimeStepModel = G4ChemTimeStepModel::SBS;
0214 fChemListName = name;
0215 }
0216 else if(name == "G4EmDNAChemistry_option3")
0217 {
0218 if ( fChemistryList_option3_mod != nullptr) return;
0219 fChemistryList_option3_mod.reset(new G4EmDNAChemistry_option3_Extended());
0220 fChemistryList_option3_mod->SetVerboseLevel(verboseLevel);
0221 fTimeStepModel = G4ChemTimeStepModel::IRT_syn;
0222 G4EmParameters::Instance()->SetTimeStepModel(fTimeStepModel);
0223 std::cout<<"G4EmParameters::Instance()->SetTimeStepModel(fTimeStepModel);"<<G4endl;
0224 fChemListName = name;
0225 }
0226 else
0227 {
0228 G4ExceptionDescription msg;
0229 msg <<"ChemPhysicsList::RegisterChemListConstructor: <" << name << ">"
0230 <<" fails - name is not defined";
0231 G4Exception("ChemPhysicsList::RegisterChemListConstructor", "Phys_WrongName",
0232 JustWarning, msg);
0233 }
0234 }
0235
0236
0237
0238 G4String ChemPhysicsList::ExtractPhysDNAName()
0239 {
0240 G4String out ="G4EmDNAPhysics_option2";
0241 G4fs::path thisP = G4fs::current_path();
0242 for (const auto &entry : G4fs::directory_iterator(thisP)){
0243 if (entry.path().filename() == "imp.info") {
0244 std::ifstream file(entry.path().c_str());
0245 if(!file.good() ){
0246 G4ExceptionDescription msg;
0247 msg<<"**** Fatal Error *****\n";
0248 msg<<"ChemPhysicsList::ExtractPhysDNAName(): File corupted: "
0249 <<entry.path()<<"\n";
0250 msg<<"*************** *****";
0251 G4Exception("ChemPhysicsList::ExtractPhysDNAName", "Phys_WrongParse",
0252 FatalException, msg);
0253 }
0254
0255 G4String line;
0256 while(std::getline(file, line) ){
0257 std::istringstream iss(line);
0258 G4String flag;
0259 iss >> flag;
0260 if ( flag == "_physList") {
0261 iss >> out;
0262 }
0263 }
0264 file.close();
0265 }
0266 }
0267 return out;
0268 }
0269
0270