Import Geant4 11.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2024-06-28 13:08:51 +02:00
parent f7b23877ed
commit e58e650b32
5232 changed files with 239416 additions and 244360 deletions
@@ -6,17 +6,47 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2024-02-07 Vladimir Ivanchenko (phys-ctor-em-V11-01-14)
## 2024-05-23 Hoang Tran (phys-ctor-em-V11-02-07)
- Use EmParameters to control chemistry models in G4EmDNAChemistry_option3.
## 2024-05-19 Vladimir Ivanchenko (phys-ctor-em-V11-02-06)
- G4EmStandardPhysics_option3, G4EmStandardPhysics_option4, G4EmLivermorePhysics,
G4EmLivermorePhysics, G4EmDNAPhysics - use fAllisonPositronium type of model
for sampling of positron annihilation at rest (as it is in 11.2).
- G4EmStandardPhysics_option4 - use model alternative model for positron
annihilation on fly with 3-gamma annihilation channel enabled.
## 2024-05-04 Vladimir Ivanchenko (phys-ctor-em-V11-02-05)
- G4GammaGeneralProcess - updated according to change in EM data tables
## 2024-04-05 Vladimir Ivanchenko (phys-ctor-em-V11-02-04)
- G4EmDNABuilder - added nuclear stopping process for G4GenericIon below 1 MeV/u.
- G4EmDNAPhysics, G4EmDNAPhysicsActivator, G4EmDNAPhysics_option2,
G4EmDNAPhysics_option4, G4EmDNAPhysics_option6, G4EmDNAPhysics_option8
change upper limit for DNA physics of Helium ions from 300 MeV to 400 MeV.
## 2024-04-04 Vladimir Ivanchenko (phys-ctor-em-V11-02-03)
- G4EmDNAPhysics - define default maximum kinetic energy 600 MeV
instead of 300 MeV in order to have standard ionisation and
multiple scattering always defined for DNA physics configurations.
This allows avoid situations when low-energy ions path DNA region
without interaction
## 2024-02-07 Vladimir Ivanchenko (phys-ctor-em-V11-02-02)
- G4EmStandardPhysics_option3 - return back step limit type to
fUseDistanceToBoundary and the default RangeFactor 0.04 from 0.03,
which will allow to restore more accurate distributions for several
tests for medical benchmark
## 2024-02-04 Vladimir Ivanchenko
## 2024-02-04 Vladimir Ivanchenko (phys-ctor-em-V11-02-01)
- G4GammaGeneralProcess - fixed sampling of muon pair production - problem 2543
## 2024-01-27 Vladimir Ivanchenko (phys-ctor-em-V11-02-00)
- G4EmStandardPhysicsWVI - return back ATIMA model for ionisation and
fluctuations of ions in order to make comparisons with other models.
## 2023-11-09 Hoang Tran (phys-ctor-em-V11-01-13)
- Correct subtype process of G4LowECapture in G4EmDNABuilder .
- Correct subtype process of G4LowECapture in G4EmDNABuilder.
## 2023-11-04 Hoang Tran (phys-ctor-em-V11-01-12)
- Correct G4EmDNABuilder for proton constructors.
@@ -120,6 +120,9 @@ public:
static G4LowECapture*
FindOrBuildCapture(const G4double elim, G4ParticleDefinition* part);
static void FindOrBuildNuclearStopping(G4ParticleDefinition* part,
const G4double elim);
private:
static void StandardHadronPhysics(G4ParticleDefinition*,
@@ -37,8 +37,9 @@
#include "G4VPhysicsConstructor.hh"
#include "G4VUserChemistryList.hh"
#include "globals.hh"
#include "G4ChemTimeStepModel.hh"
class G4DNAMolecularReactionTable;
class G4DNAMolecularReactionData;
class G4EmDNAChemistry_option3 : public G4VUserChemistryList,
public G4VPhysicsConstructor
@@ -59,12 +60,8 @@ public:
void ConstructDissociationChannels() override;
void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) override;
void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) override;
inline void SetTimeStepModel(const TimeStepModel& model)
{
fTimeStepModel = model;
}
private:
TimeStepModel fTimeStepModel = fIRT;
static void SetReactionType(G4DNAMolecularReactionData* pData, G4ChemTimeStepModel model);
};
#endif
@@ -140,9 +140,9 @@ protected:
G4double GetMeanFreePath(const G4Track& track, G4double previousStepSize,
G4ForceCondition* condition) override;
inline G4double ComputeGeneralLambda(size_t idxe, size_t idxt);
inline G4double ComputeGeneralLambda(std::size_t idxe, std::size_t idxt);
inline G4double GetProbability(size_t idxt);
inline G4double GetProbability(std::size_t idxt);
inline void SelectedProcess(const G4Step& step, G4VProcess* ptr);
@@ -169,7 +169,7 @@ protected:
private:
static G4EmDataHandler* theHandler;
static const size_t nTables = 15;
static const std::size_t nTables = 15;
static G4bool theT[nTables];
static G4String nameT[nTables];
@@ -184,15 +184,15 @@ private:
G4double minMMEnergy;
G4double peLambda = 0.0;
size_t nLowE = 40;
size_t nHighE = 50;
size_t idxEnergy = 0;
std::size_t nLowE = 40;
std::size_t nHighE = 50;
std::size_t idxEnergy = 0;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double
G4GammaGeneralProcess::ComputeGeneralLambda(size_t idxe, size_t idxt)
G4GammaGeneralProcess::ComputeGeneralLambda(std::size_t idxe, std::size_t idxt)
{
idxEnergy = idxe;
return factor*theHandler->GetVector(idxt, basedCoupleIndex)
@@ -201,7 +201,7 @@ G4GammaGeneralProcess::ComputeGeneralLambda(size_t idxe, size_t idxt)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4double G4GammaGeneralProcess::GetProbability(size_t idxt)
inline G4double G4GammaGeneralProcess::GetProbability(std::size_t idxt)
{
return theHandler->GetVector(idxt, basedCoupleIndex)
->LogVectorValue(preStepKinEnergy, preStepLogE);
@@ -218,7 +218,8 @@ G4GammaGeneralProcess::SelectedProcess(const G4Step& step, G4VProcess* ptr)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline void G4GammaGeneralProcess::SelectEmProcess(const G4Step& step, G4VEmProcess* proc)
inline void
G4GammaGeneralProcess::SelectEmProcess(const G4Step& step, G4VEmProcess* proc)
{
proc->CurrentSetup(currentCouple, preStepKinEnergy);
SelectedProcess(step, proc);
@@ -64,6 +64,7 @@
#include "G4ionIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
#include "G4NuclearStopping.hh"
// standard models
#include "G4LivermorePhotoElectricModel.hh"
@@ -536,7 +537,11 @@ G4EmDNABuilder::ConstructDNAIonPhysics(const G4double emaxIonDNA,
mod->SetHighEnergyLimit(emaxIonDNA);
theDNAIoni->AddEmModel(-1, mod, reg);
FindOrBuildCapture(0.1*CLHEP::keV, part);
// *** NIEL ***
FindOrBuildNuclearStopping(part, CLHEP::MeV);
// *** Tracking cut ***
FindOrBuildCapture(1*CLHEP::keV, part);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -605,6 +610,8 @@ G4EmDNABuilder::ConstructDNALightIonPhysics(G4ParticleDefinition* part,
modDCD->SetHighEnergyLimit(emax);
theDNAChargeDecrease->AddEmModel(-1, modDCD, reg);
}
// *** Tracking cut ***
FindOrBuildCapture(1*CLHEP::keV, part);
}
@@ -750,7 +757,7 @@ G4EmDNABuilder::FindOrBuildCapture(const G4double elim, G4ParticleDefinition* pa
{
auto p = G4PhysListUtil::FindProcess(part, -1);
G4LowECapture* ptr = dynamic_cast<G4LowECapture*>(p);
if(nullptr == ptr) {
if (nullptr == ptr) {
ptr = new G4LowECapture(elim);
auto mng = part->GetProcessManager();
mng->AddDiscreteProcess(ptr);
@@ -759,3 +766,18 @@ G4EmDNABuilder::FindOrBuildCapture(const G4double elim, G4ParticleDefinition* pa
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNABuilder::FindOrBuildNuclearStopping(G4ParticleDefinition* part,
const G4double elim)
{
auto p = G4PhysListUtil::FindProcess(part, fNuclearStopping);
auto ptr = dynamic_cast<G4NuclearStopping*>(p);
if (nullptr == ptr) {
ptr = new G4NuclearStopping();
}
ptr->SetMaxKinEnergy(elim);
auto ph = G4PhysicsListHelper::GetPhysicsListHelper();
ph->RegisterProcess(ptr, part);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -36,7 +36,6 @@
#include "G4SystemOfUnits.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAChemistryManager.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4ProcessManager.hh"
// *** Processes and models for Geant4-DNA
@@ -44,7 +43,6 @@
#include "G4DNAVibExcitation.hh"
#include "G4DNASancheExcitationModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAMolecularDissociation.hh"
#include "G4DNABrownianTransportation.hh"
#include "G4DNAMolecularReactionTable.hh"
@@ -58,7 +56,6 @@
#include "G4Electron.hh"
#include "G4MoleculeTable.hh"
#include "G4H2O.hh"
#include "G4FakeMolecule.hh"
#include "G4PhysicsListHelper.hh"
/****/
@@ -69,11 +66,11 @@
// factory
#include "G4PhysicsConstructorFactory.hh"
#include "G4ChemDissociationChannels_option1.hh"
//Parameter
#include "G4EmParameters.hh"
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option3);
#include "G4Threading.hh"
G4EmDNAChemistry_option3::G4EmDNAChemistry_option3() :
G4VUserChemistryList(true)
{
@@ -99,6 +96,7 @@ void G4EmDNAChemistry_option3::ConstructDissociationChannels()
void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTable*
theReactionTable)
{
auto model = G4EmParameters::Instance()->GetTimeStepModel();
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
@@ -216,121 +214,84 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
// *OH + *H -> H2O
reactionData = new G4DNAMolecularReactionData(
1.55e10 * (1e-3 * m3 / (mole * s)), OH, H);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H + H2O2 -> OH
reactionData = new G4DNAMolecularReactionData(
3.50e7 * (1e-3 * m3 / (mole * s)), H, H2O2);
reactionData->AddProduct(OH);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H + OH- -> eaq-
reactionData = new G4DNAMolecularReactionData(
2.51e7 * (1e-3 * m3 / (mole * s)), H, OHm);
reactionData->AddProduct(e_aq);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H + O2 -> HO2
reactionData = new G4DNAMolecularReactionData(
2.10e10 * (1e-3 * m3 / (mole * s)), H, O2);
reactionData->AddProduct(HO2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H + HO2 -> H2O2
reactionData = new G4DNAMolecularReactionData(
1.00e10 * (1e-3 * m3 / (mole * s)), H, HO2);
reactionData->AddProduct(H2O2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H + O2- -> HO2-
reactionData = new G4DNAMolecularReactionData(
1.00e10 * (1e-3 * m3 / (mole * s)), H, O2m);
reactionData->AddProduct(HO2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// *OH + *OH -> H2O2
reactionData = new G4DNAMolecularReactionData(
0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH);
reactionData->AddProduct(H2O2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + H2O2 -> HO2
reactionData = new G4DNAMolecularReactionData(
2.88e7 * (1e-3 * m3 / (mole * s)), OH, H2O2);
reactionData->AddProduct(HO2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + H2 -> H
reactionData = new G4DNAMolecularReactionData(
3.28e7 * (1e-3 * m3 / (mole * s)), OH, H2);
reactionData->AddProduct(H);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// e_aq + *OH -> OH-
reactionData = new G4DNAMolecularReactionData(
2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + OH- -> O-
reactionData = new G4DNAMolecularReactionData(
6.30e9 * (1e-3 * m3 / (mole * s)), OH, OHm);
reactionData->AddProduct(Om);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + HO2 -> O2
reactionData = new G4DNAMolecularReactionData(
7.90e9 * (1e-3 * m3 / (mole * s)), OH, HO2);
reactionData->AddProduct(O2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + O2- -> O2 + OH-
@@ -338,10 +299,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
1.07e10 * (1e-3 * m3 / (mole * s)), OH, O2m);
reactionData->AddProduct(O2);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + HO2- -> HO2 + OH-
@@ -349,20 +307,14 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
8.32e9 * (1e-3 * m3 / (mole * s)), OH, HO2m);
reactionData->AddProduct(HO2);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + O- -> HO2-
reactionData = new G4DNAMolecularReactionData(
1.00e9 * (1e-3 * m3 / (mole * s)), OH, Om);
reactionData->AddProduct(HO2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH + O3- -> O2- + HO2
@@ -370,10 +322,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
8.50e9 * (1e-3 * m3 / (mole * s)), OH, O3m);
reactionData->AddProduct(O2m);
reactionData->AddProduct(HO2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// e_aq + H2O2 -> OH- + *OH
@@ -381,20 +330,14 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);
reactionData->AddProduct(OHm);
reactionData->AddProduct(OH);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H2O2 + OH- -> HO2-
reactionData = new G4DNAMolecularReactionData(
4.71e8 * (1e-3 * m3 / (mole * s)), H2O2, OHm);
reactionData->AddProduct(HO2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H2O2 + O(3p) -> HO2 + OH
@@ -402,10 +345,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
1.60e9 * (1e-3 * m3 / (mole * s)), H2O2, O);
reactionData->AddProduct(HO2);
reactionData->AddProduct(OH);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H2O2 + O- -> HO2 + OH-
@@ -413,10 +353,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
5.55e8 * (1e-3 * m3 / (mole * s)), H2O2, Om);
reactionData->AddProduct(HO2);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H2 + O(3p) -> H + OH
@@ -424,10 +361,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
4.77e3 * (1e-3 * m3 / (mole * s)), H2, O);
reactionData->AddProduct(H);
reactionData->AddProduct(OH);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H2 + O- -> H + OH-
@@ -435,70 +369,49 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
1.21e8 * (1e-3 * m3 / (mole * s)), H2, Om);
reactionData->AddProduct(H);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// eaq- + O2 -> O2-
reactionData = new G4DNAMolecularReactionData(
1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2);
reactionData->AddProduct(O2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// eaq + HO2 -> HO2-
reactionData = new G4DNAMolecularReactionData(
1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, HO2);
reactionData->AddProduct(HO2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH- + HO2 -> O2-
reactionData = new G4DNAMolecularReactionData(
6.30e9 * (1e-3 * m3 / (mole * s)), OHm, HO2);
reactionData->AddProduct(O2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// OH- + O(3p) -> HO2-
reactionData = new G4DNAMolecularReactionData(
4.20e8 * (1e-3 * m3 / (mole * s)), OHm, O);
reactionData->AddProduct(HO2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// O2 + O(3p) -> O3
reactionData = new G4DNAMolecularReactionData(
4.00e9 * (1e-3 * m3 / (mole * s)), O2, O);
reactionData->AddProduct(O3);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// O2 + O- -> O3-
reactionData = new G4DNAMolecularReactionData(
3.70e9 * (1e-3 * m3 / (mole * s)), O2, Om);
reactionData->AddProduct(O3m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// HO2 + HO2 -> H2O2 + O2
@@ -506,10 +419,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
9.80e5 * (1e-3 * m3 / (mole * s)), HO2, HO2);
reactionData->AddProduct(H2O2);
reactionData->AddProduct(O2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// HO2 + O2- -> HO2- + O2
@@ -517,10 +427,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
9.70e7 * (1e-3 * m3 / (mole * s)), HO2, O2m);
reactionData->AddProduct(HO2m);
reactionData->AddProduct(O2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// HO2- + O(3p) -> O2- + OH
@@ -528,10 +435,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
5.30e9 * (1e-3 * m3 / (mole * s)), HO2m, O);
reactionData->AddProduct(O2m);
reactionData->AddProduct(OH);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
// Type IV //
@@ -540,10 +444,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
reactionData = new G4DNAMolecularReactionData(
2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op);
reactionData->AddProduct(H);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// e_aq + O2- -> H2O2 + OH- + OH-
@@ -552,10 +453,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
reactionData->AddProduct(H2O2);
reactionData->AddProduct(OHm);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// e_aq + HO2- -> O- + OH-
@@ -563,10 +461,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
3.51e9 * (1e-3 * m3 / (mole * s)), e_aq, HO2m);
reactionData->AddProduct(Om);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// e_aq + O- -> OH- + OH-
@@ -574,40 +469,28 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
2.31e10 * (1e-3 * m3 / (mole * s)), e_aq, Om);
reactionData->AddProduct(OHm);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H3O+ + O2- -> HO2
reactionData = new G4DNAMolecularReactionData(
4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, O2m);
reactionData->AddProduct(HO2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H3O+ + HO2- -> H2O2
reactionData = new G4DNAMolecularReactionData(
5.00e10 * (1e-3 * m3 / (mole * s)), H3Op, HO2m);
reactionData->AddProduct(H2O2);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// H3O+ + O- -> OH
reactionData = new G4DNAMolecularReactionData(
4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, Om);
reactionData->AddProduct(OH);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// O2- + O- -> O2 + OH- + OH-
@@ -616,10 +499,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
reactionData->AddProduct(O2);
reactionData->AddProduct(OHm);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// HO2- + O- -> O2- + OH-
@@ -627,10 +507,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
3.50e8 * (1e-3 * m3 / (mole * s)), HO2m, Om);
reactionData->AddProduct(O2m);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// O- + O- -> H2O2 + OH- + OH-
@@ -639,10 +516,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
reactionData->AddProduct(H2O2);
reactionData->AddProduct(OHm);
reactionData->AddProduct(OHm);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
//------------------------------------------------------------------
// O- + O3- -> O2- + O2-
@@ -650,10 +524,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
7.00e8 * (1e-3 * m3 / (mole * s)), Om, O3m);
reactionData->AddProduct(O2m);
reactionData->AddProduct(O2m);
if(fTimeStepModel != fSBS)
{
reactionData->SetReactionType(1);
}
SetReactionType(reactionData,model);//partially diffusion-controlled
theReactionTable->SetReaction(reactionData);
// Type VI
@@ -798,6 +669,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
void G4EmDNAChemistry_option3::ConstructProcess()
{
auto ChemModel = G4EmParameters::Instance()->GetTimeStepModel();
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
//===============================================================
@@ -849,7 +721,7 @@ void G4EmDNAChemistry_option3::ConstructProcess()
if (moleculeDef != G4H2O::Definition())
{
if(fTimeStepModel != fIRT)
if(ChemModel != G4ChemTimeStepModel::IRT)
{
auto* brown = new G4DNABrownianTransportation();
ph->RegisterProcess(brown, moleculeDef);
@@ -882,15 +754,21 @@ void G4EmDNAChemistry_option3::ConstructProcess()
void G4EmDNAChemistry_option3::ConstructTimeStepModel(G4DNAMolecularReactionTable*
/*reactionTable*/)
{
if(fTimeStepModel == fIRT)
auto model = G4EmParameters::Instance()->GetTimeStepModel();
if(model == G4ChemTimeStepModel::IRT)
{
RegisterTimeStepModel(new G4DNAMolecularIRTModel(), 0);
}else if(fTimeStepModel == fSBS)
}else if(model == G4ChemTimeStepModel::SBS)
{
RegisterTimeStepModel(new G4DNAMolecularStepByStepModel(), 0);
}else if(fTimeStepModel == fIRT_syn)
}else if(model == G4ChemTimeStepModel::IRT_syn)
{
RegisterTimeStepModel(new G4DNAIndependentReactionTimeModel(), 0);
}
}
void G4EmDNAChemistry_option3::SetReactionType(G4DNAMolecularReactionData* pData,
G4ChemTimeStepModel model)
{
if(model != G4ChemTimeStepModel::SBS) { pData->SetReactionType(1); }
}
@@ -59,7 +59,7 @@ G4EmDNAPhysics::G4EmDNAPhysics(G4int ver, const G4String& name)
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetMinEnergy(10*CLHEP::eV);
param->SetMaxEnergy(300*CLHEP::MeV);
param->SetMaxEnergy(600*CLHEP::MeV);
param->SetLowestElectronEnergy(0*CLHEP::eV);
param->SetNumberOfBinsPerDecade(20);
param->ActivateAngularGeneratorForIonisation(true);
@@ -75,6 +75,7 @@ G4EmDNAPhysics::G4EmDNAPhysics(G4int ver, const G4String& name)
param->SetFluo(true);
param->SetAuger(true);
param->SetDeexcitationIgnoreCut(true);
param->SetPositronAtRestModelType(fAllisonPositronium);
param->ActivateDNA();
param->SetDNAFast(false);
param->SetDNAStationary(false);
@@ -97,6 +98,7 @@ void G4EmDNAPhysics::ConstructProcess()
G4EmParameters* param = G4EmParameters::Instance();
const G4double emaxDNA = 1.*CLHEP::MeV;
const G4double emaxIonDNA = 300.*CLHEP::MeV;
const G4double emaxLightIonDNA = 400.*CLHEP::MeV;
const G4double eminBorn = 500.*CLHEP::keV;
const G4bool fast = param->DNAFast();
const G4bool st = param->DNAStationary();
@@ -123,13 +125,13 @@ void G4EmDNAPhysics::ConstructProcess()
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 0, emaxIonDNA, fast, st);
part = G4Alpha::Alpha();
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 0, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 0, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("alpha+");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 0, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 0, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("helium");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 0, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 0, emaxLightIonDNA, fast, st);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -117,6 +117,7 @@ void G4EmDNAPhysicsActivator::ConstructProcess()
const G4double emaxDNA = 1.*CLHEP::MeV;
const G4double emaxIonDNA = 300.*CLHEP::MeV;
const G4double emaxLightIonDNA = 400.*CLHEP::MeV;
const G4double eminBorn = 500.*CLHEP::keV;
const G4double emax = theParameters->MaxKinEnergy();
@@ -166,15 +167,15 @@ void G4EmDNAPhysicsActivator::ConstructProcess()
}
DeactivateElectronProcesses(emaxDNA, emax, reg);
G4EmDNABuilder::ConstructDNAElectronPhysics(emaxDNA, opt, fast, st, reg);
DeactivateHadronProcesses(prot, emaxDNA, emax, reg);
DeactivateHadronProcesses(prot, emaxIonDNA, emax, reg);
G4EmDNABuilder::ConstructDNAProtonPhysics(eminBorn, emaxIonDNA, opt, fast, st, reg);
DeactivateIonProcesses(gion, emaxIonDNA, emax, reg);
G4EmDNABuilder::ConstructDNAIonPhysics(emax, st, reg);
DeactivateIonProcesses(alpha2, emaxIonDNA, emax, reg);
G4EmDNABuilder::ConstructDNALightIonPhysics(alpha2, 2, opt, emaxIonDNA, fast, st, reg);
DeactivateHadronProcesses(alpha1, emaxIonDNA, emax, reg);
G4EmDNABuilder::ConstructDNALightIonPhysics(alpha1, 1, opt, emaxIonDNA, fast, st, reg);
G4EmDNABuilder::ConstructDNALightIonPhysics(alpha0, 0, opt, emaxIonDNA, fast, st, reg);
G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, st, reg);
DeactivateIonProcesses(alpha2, emaxLightIonDNA, emax, reg);
G4EmDNABuilder::ConstructDNALightIonPhysics(alpha2, 2, opt, emaxLightIonDNA, fast, st, reg);
DeactivateHadronProcesses(alpha1, emaxLightIonDNA, emax, reg);
G4EmDNABuilder::ConstructDNALightIonPhysics(alpha1, 1, opt, emaxLightIonDNA, fast, st, reg);
G4EmDNABuilder::ConstructDNALightIonPhysics(alpha0, 0, opt, emaxLightIonDNA, fast, st, reg);
G4EmDNABuilder::ConstructDNALightIonPhysics(h0, 0, opt, emaxIonDNA, fast, st, reg);
}
}
@@ -62,6 +62,7 @@ void G4EmDNAPhysics_option2::ConstructProcess()
G4EmParameters* param = G4EmParameters::Instance();
const G4double emaxDNA = 1.*CLHEP::MeV;
const G4double emaxIonDNA = 300.*CLHEP::MeV;
const G4double emaxLightIonDNA = 400.*CLHEP::MeV;
const G4double eminBorn = 500.*CLHEP::keV;
const G4bool fast = param->DNAFast();
const G4bool st = param->DNAStationary();
@@ -88,13 +89,13 @@ void G4EmDNAPhysics_option2::ConstructProcess()
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 2, emaxIonDNA, fast, st);
part = G4Alpha::Alpha();
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 2, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 2, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("alpha+");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 2, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 2, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("helium");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 2, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 2, emaxLightIonDNA, fast, st);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -59,6 +59,7 @@ void G4EmDNAPhysics_option4::ConstructProcess()
G4EmParameters* param = G4EmParameters::Instance();
const G4double emaxDNA = 1.*CLHEP::MeV;
const G4double emaxIonDNA = 300.*CLHEP::MeV;
const G4double emaxLightIonDNA = 400.*CLHEP::MeV;
const G4double eminBorn = 500.*CLHEP::keV;
const G4bool fast = param->DNAFast();
const G4bool st = param->DNAStationary();
@@ -85,13 +86,13 @@ void G4EmDNAPhysics_option4::ConstructProcess()
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 4, emaxIonDNA, fast, st);
part = G4Alpha::Alpha();
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 4, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 4, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("alpha+");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 4, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 4, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("helium");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 4, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 4, emaxLightIonDNA, fast, st);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -72,6 +72,7 @@ void G4EmDNAPhysics_option6::ConstructProcess()
G4EmParameters* param = G4EmParameters::Instance();
const G4double emaxDNA = 1.*CLHEP::MeV;
const G4double emaxIonDNA = 300.*CLHEP::MeV;
const G4double emaxLightIonDNA = 400.*CLHEP::MeV;
const G4double eminBorn = 500.*CLHEP::keV;
const G4bool fast = param->DNAFast();
const G4bool st = param->DNAStationary();
@@ -98,13 +99,13 @@ void G4EmDNAPhysics_option6::ConstructProcess()
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 6, emaxIonDNA, fast, st);
part = G4Alpha::Alpha();
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 6, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 6, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("alpha+");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 6, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 6, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("helium");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 6, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 6, emaxLightIonDNA, fast, st);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -62,6 +62,7 @@ void G4EmDNAPhysics_option8::ConstructProcess()
G4EmParameters* param = G4EmParameters::Instance();
const G4double emaxDNA = 1.*CLHEP::MeV;
const G4double emaxIonDNA = 300.*CLHEP::MeV;
const G4double emaxLightIonDNA = 400.*CLHEP::MeV;
const G4double eminBorn = 500.*CLHEP::keV;
const G4bool fast = param->DNAFast();
const G4bool st = param->DNAStationary();
@@ -88,13 +89,13 @@ void G4EmDNAPhysics_option8::ConstructProcess()
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 8, emaxIonDNA, fast, st);
part = G4Alpha::Alpha();
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 8, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 2, 8, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("alpha+");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 8, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 1, 8, emaxLightIonDNA, fast, st);
part = genericIonsManager->GetIon("helium");
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 8, emaxIonDNA, fast, st);
G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 8, emaxLightIonDNA, fast, st);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -132,6 +132,7 @@ G4EmLivermorePhysics::G4EmLivermorePhysics(G4int ver, const G4String& pname)
param->SetUseICRU90Data(true);
param->SetFluctuationType(fUrbanFluctuation);
param->SetMaxNIELEnergy(1*CLHEP::MeV);
param->SetPositronAtRestModelType(fAllisonPositronium);
SetPhysicsType(bElectromagnetic);
}
@@ -125,6 +125,7 @@ G4EmPenelopePhysics::G4EmPenelopePhysics(G4int ver, const G4String&)
param->SetFluctuationType(fUrbanFluctuation);
param->SetMaxNIELEnergy(1*CLHEP::MeV);
param->SetPIXEElectronCrossSectionModel("Penelope");
param->SetPositronAtRestModelType(fAllisonPositronium);
SetPhysicsType(bElectromagnetic);
}
@@ -118,8 +118,7 @@ G4EmStandardPhysicsWVI::G4EmStandardPhysicsWVI(G4int ver)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysicsWVI::~G4EmStandardPhysicsWVI()
{}
G4EmStandardPhysicsWVI::~G4EmStandardPhysicsWVI() = default;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -226,9 +225,9 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
// generic ion
particle = G4GenericIon::GenericIon();
G4ionIonisation* ionIoni = new G4ionIonisation();
auto fluc = new G4IonFluctuations();
auto fluc = new G4AtimaFluctuations();
ionIoni->SetFluctModel(fluc);
ionIoni->SetEmModel(new G4LindhardSorensenIonModel());
ionIoni->SetEmModel(new G4AtimaEnergyLossModel());
ph->RegisterProcess(hmsc, particle);
ph->RegisterProcess(ionIoni, particle);
if(nullptr != pnuc) { ph->RegisterProcess(pnuc, particle); }
@@ -122,6 +122,7 @@ G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver,
param->SetFluctuationType(fUrbanFluctuation);
param->SetFluo(true);
param->SetMaxNIELEnergy(1*CLHEP::MeV);
param->SetPositronAtRestModelType(fAllisonPositronium);
SetPhysicsType(bElectromagnetic);
}
@@ -86,6 +86,7 @@
#include "G4IonParametrisedLossModel.hh"
#include "G4LindhardSorensenIonModel.hh"
#include "G4NuclearStopping.hh"
#include "G4eplusTo2GammaOKVIModel.hh"
#include "G4Gamma.hh"
#include "G4Electron.hh"
@@ -130,6 +131,7 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver,
param->SetUseICRU90Data(true);
param->SetFluctuationType(fUrbanFluctuation);
param->SetMaxNIELEnergy(1*CLHEP::MeV);
param->SetPositronAtRestModelType(fAllisonPositronium);
SetPhysicsType(bElectromagnetic);
}
@@ -300,11 +302,15 @@ void G4EmStandardPhysics_option4::ConstructProcess()
brem->SetEmModel(br2);
br1->SetHighEnergyLimit(CLHEP::GeV);
// annihilation
auto anni = new G4eplusAnnihilation();
anni->SetEmModel(new G4eplusTo2GammaOKVIModel());
// register processes
ph->RegisterProcess(eioni, particle);
ph->RegisterProcess(brem, particle);
ph->RegisterProcess(ee, particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
ph->RegisterProcess(anni, particle);
ph->RegisterProcess(ss, particle);
// generic ion
@@ -92,6 +92,9 @@ G4GammaGeneralProcess::G4GammaGeneralProcess(const G4String& pname):
SetVerboseLevel(1);
SetParticle(G4Gamma::Gamma());
SetProcessSubType(fGammaGeneralProcess);
if (nullptr == theHandler) {
theHandler = new G4EmDataHandler(nTables);
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -146,14 +149,11 @@ void G4GammaGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& part
idxEnergy = 0;
currentCouple = nullptr;
G4EmParameters* param = G4EmParameters::Instance();
G4LossTableManager* man = G4LossTableManager::Instance();
isTheMaster = man->IsMaster();
if(isTheMaster) { SetVerboseLevel(param->Verbose()); }
else { SetVerboseLevel(param->WorkerVerbose()); }
// initialise base material for the current run
G4LossTableBuilder* bld = man->GetTableBuilder();
bld->InitialiseBaseMaterials();
baseMat = bld->GetBaseMaterialFlag();
if(1 < verboseLevel) {
@@ -173,14 +173,15 @@ void G4GammaGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& part
<< "\n Conversion: " << theConversionEE;
G4Exception("G4GeneralGammaProcess","em0004",
FatalException, ed,"");
return;
}
if(thePhotoElectric) { thePhotoElectric->PreparePhysicsTable(part); }
if(theCompton) { theCompton->PreparePhysicsTable(part); }
if(theConversionEE) { theConversionEE->PreparePhysicsTable(part); }
if(theRayleigh) { theRayleigh->PreparePhysicsTable(part); }
if(theGammaNuclear) { theGammaNuclear->PreparePhysicsTable(part); }
if(theConversionMM) { theConversionMM->PreparePhysicsTable(part); }
thePhotoElectric->PreparePhysicsTable(part);
theCompton->PreparePhysicsTable(part);
theConversionEE->PreparePhysicsTable(part);
if (nullptr != theRayleigh) { theRayleigh->PreparePhysicsTable(part); }
if (nullptr != theGammaNuclear) { theGammaNuclear->PreparePhysicsTable(part); }
if (nullptr != theConversionMM) { theConversionMM->PreparePhysicsTable(part); }
InitialiseProcess(&part);
}
@@ -195,15 +196,13 @@ void G4GammaGeneralProcess::InitialiseProcess(const G4ParticleDefinition*)
G4LossTableManager* man = G4LossTableManager::Instance();
// tables are created and its size is defined only once
if(nullptr == theHandler) {
theHandler = new G4EmDataHandler(nTables);
if(theRayleigh) { theT[1] = true; }
if (nullptr != theRayleigh) { theT[1] = true; }
theHandler->SetMasterProcess(thePhotoElectric);
theHandler->SetMasterProcess(theCompton);
theHandler->SetMasterProcess(theConversionEE);
theHandler->SetMasterProcess(theRayleigh);
}
theHandler->SetMasterProcess(thePhotoElectric);
theHandler->SetMasterProcess(theCompton);
theHandler->SetMasterProcess(theConversionEE);
theHandler->SetMasterProcess(theRayleigh);
auto bld = man->GetTableBuilder();
const G4ProductionCutsTable* theCoupleTable=
@@ -230,7 +229,6 @@ void G4GammaGeneralProcess::InitialiseProcess(const G4ParticleDefinition*)
for(std::size_t j=0; j<numOfCouples; ++j) {
vec = (*table)[j];
if (bld->GetFlag(j) && nullptr == vec) {
//G4cout <<"InitialiseProcess iTable="<<i<<" jCouple="<< j <<" make new vector"<< G4endl;
if(i<=1) {
vec = new G4PhysicsVector(aVector);
} else if(i<=5) {
@@ -694,6 +692,7 @@ G4GammaGeneralProcess::RetrievePhysicsTable(const G4ParticleDefinition* part,
const G4String& directory,
G4bool ascii)
{
if (!isTheMaster) { return true; }
if(1 < verboseLevel) {
G4cout << "G4GammaGeneralProcess::RetrievePhysicsTable() for "
<< part->GetParticleName() << " and process "
@@ -720,8 +719,6 @@ G4GammaGeneralProcess::RetrievePhysicsTable(const G4ParticleDefinition* part,
{ yes = false; }
}
}
if(yes) {
}
return yes;
}
@@ -1,15 +1,19 @@
# Category phys-ctor-fact History
See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
which **must** added in reverse chronological order (newest at the top).
It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2024-05-15 Gabriele Cosmo (phys-ctor-fact-V11-02-00)
- Minor code cleanup in G4PhysicsConstructorRegistry source.
## 2023-05-15 Alberto Ribon (phys-ctor-fact-V11-01-00)
- Added G4StoppingPhysicsWithINCLXX in G4RegisterPhysicsConstructors .
- Added G4StoppingPhysicsWithINCLXX in G4RegisterPhysicsConstructors.
## 2021-12-10 Ben Morgan (phys-ctor-fact-V11-00-00)
- Change to new Markdown History format
- Change to new Markdown History format.
---
@@ -24,18 +24,12 @@
// ********************************************************************
//
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class file
//
//
// File name: G4PhysicsConstructorRegistry
// File name: G4PhysicsConstructorRegistry.cc
//
// Author W. Pokorski 21.09.2012
//
// Modifications:
//
// -------------------------------------------------------------------
#include "G4ios.hh"
#include <iomanip>
@@ -43,19 +37,17 @@
// force REFERENCE macros _not_ to be expanded here
// but wherever the class is used (w/ that .hh use)
#define G4PhysicsConstructorRegistry_cc 1
#include "G4PhysicsConstructorRegistry.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4PhysicsConstructorFactory.hh"
G4ThreadLocal G4PhysicsConstructorRegistry* G4PhysicsConstructorRegistry::theInstance = 0;
G4ThreadLocal G4PhysicsConstructorRegistry* G4PhysicsConstructorRegistry::theInstance = nullptr;
G4PhysicsConstructorRegistry* G4PhysicsConstructorRegistry::Instance()
{
if(0 == theInstance) {
static G4ThreadLocal G4PhysicsConstructorRegistry *manager_G4MT_TLS_ = 0 ; if (!manager_G4MT_TLS_) manager_G4MT_TLS_ = new G4PhysicsConstructorRegistry ; G4PhysicsConstructorRegistry &manager = *manager_G4MT_TLS_;
theInstance = &manager;
}
if(nullptr == theInstance) theInstance = new G4PhysicsConstructorRegistry;
return theInstance;
}
@@ -69,12 +61,12 @@ G4PhysicsConstructorRegistry::~G4PhysicsConstructorRegistry()
void G4PhysicsConstructorRegistry::Clean()
{
size_t n = physConstr.size();
std::size_t n = physConstr.size();
if(n > 0) {
for (size_t i=0; i<n; ++i) {
for (std::size_t i=0; i<n; ++i) {
if(physConstr[i]) {
G4VPhysicsConstructor* p = physConstr[i];
physConstr[i] = 0;
physConstr[i] = nullptr;
delete p;
}
}
@@ -84,10 +76,10 @@ void G4PhysicsConstructorRegistry::Clean()
void G4PhysicsConstructorRegistry::Register(G4VPhysicsConstructor* p)
{
if(!p) return;
size_t n = physConstr.size();
if(nullptr == p) return;
std::size_t n = physConstr.size();
if(n > 0) {
for (size_t i=0; i<n; ++i) {
for (std::size_t i=0; i<n; ++i) {
if(physConstr[i] == p) { return; }
}
}
@@ -96,12 +88,12 @@ void G4PhysicsConstructorRegistry::Register(G4VPhysicsConstructor* p)
void G4PhysicsConstructorRegistry::DeRegister(G4VPhysicsConstructor* p)
{
if ( !p ) return;
size_t n = physConstr.size();
if (nullptr == p) return;
std::size_t n = physConstr.size();
if ( n > 0 ) {
for (size_t i=0; i<n; ++i) {
for (std::size_t i=0; i<n; ++i) {
if ( physConstr[i] == p ) {
physConstr[i] = 0;
physConstr[i] = nullptr;
return;
}
}
@@ -130,7 +122,7 @@ G4VPhysicsConstructor* G4PhysicsConstructorRegistry::GetPhysicsConstructor(const
G4ExceptionDescription ED;
ED << "The factory for the physics constructor ["<< name << "] does not exist!" << G4endl;
G4Exception("G4PhysicsConstructorRegistry::GetPhysicsConstructor", "PhysicsList001", FatalException, ED);
return 0;
return nullptr;
}
}
@@ -158,28 +150,24 @@ void G4PhysicsConstructorRegistry::PrintAvailablePhysicsConstructors() const
<< G4endl;
if ( avail.empty() ) G4cout << "... no registered processes" << G4endl;
else {
size_t n = avail.size();
for (size_t i=0; i<n; ++i ) {
std::size_t n = avail.size();
for (std::size_t i=0; i<n; ++i ) {
G4cout << " [" << std::setw(3) << i << "] "
<< " \"" << avail[i] << "\"" << G4endl;
}
}
}
//
// External reference to phy ctor factories for running with 'static'
// libraries to pull the references of the declared factories into the
// same compilation unit as the registry itself.
// No harm having them in the non-static case.
//
// Ideally we'd do the G4_REFERENCE_PHYSCONSTR_FACTORY() macros
// here, but this introduces a circular dependence between the
// ctor_phys_factory library and the other ctor_phys_* libraries
// when creating granular libraries.
// Instead we'll make the references in the location(s) where the
// G4PhysicsConstructorRegistry is _used_ :
// G4
/*
#include "G4RegisterPhysicsConstructors.icc"
*/
//
//#include "G4RegisterPhysicsConstructors.icc"
@@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2024-02-13 Vladimir Ivanchenko (phys-ctor-glnuclear-V11-01-05)
## 2024-02-13 Vladimir Ivanchenko (phys-ctor-glnuclear-V11-02-00)
- G4NeutrinoPhysics - fixed neutrino physics instantiation (problem #2594)
## 2023-11-10 Vladimir Ivanchenko (phys-ctor-glnuclear-V11-01-04)
@@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
## 2024-06-06 Vladimir Ivanchenko (phys-ctor-hinelastic-V11-02-00)
- G4HadrocPhysicsQGSP_BERT_HP - used alternative NUDEX model of gamma de-excitation
## 2023-10-20 Jean-Christophe David (phys-ctor-hinelastic-V11-01-02)
- Call G4HadronicBuilder::BuildAntiLightIonsINCLXX() to treat antiproton with INCLXX
@@ -63,6 +63,7 @@ geant4_module_link_libraries(G4phys_ctor_hinelastic
G4hadronic_bert_cascade
G4hadronic_binary
G4hadronic_deex_photon_evaporation
G4hadronic_nudex
G4hadronic_proc
G4hadronic_util
G4ions
@@ -73,6 +73,7 @@
#include "G4NeutronFissionVI.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessManager.hh"
#include "G4NuDEXNeutronCaptureModel.hh"
#include "G4HadronicParameters.hh"
@@ -131,7 +132,11 @@ void G4HadronPhysicsQGSP_BERT_HP::Neutron()
auto capture = new G4NeutronCaptureProcess( "nCaptureHP" );
neutron->GetProcessManager()->AddDiscreteProcess(capture);
capture->AddDataSet( new G4NeutronHPCaptureXS() );
capture->RegisterMe( new G4NeutronRadCaptureHP() );
if (param->EnableNUDEX()) {
capture->RegisterMe( new G4NuDEXNeutronCaptureModel() );
} else {
capture->RegisterMe( new G4NeutronRadCaptureHP() );
}
auto fission = new G4NeutronFissionProcess( "nFissionHP" );
neutron->GetProcessManager()->AddDiscreteProcess(fission);