Import Geant4 10.3.1 source tree
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4DecayProducts.hh"
|
||||
#include "G4PhotonEvaporation.hh"
|
||||
#include "G4RadioactiveDecay.hh"
|
||||
#include "G4VAtomDeexcitation.hh"
|
||||
#include "G4AtomicShells.hh"
|
||||
#include "G4Electron.hh"
|
||||
@@ -51,7 +52,7 @@ G4ITDecay::G4ITDecay(const G4ParticleDefinition* theParentNucleus,
|
||||
const G4double& branch, const G4double& Qvalue,
|
||||
const G4double& excitationE)
|
||||
: G4NuclearDecay("IT decay", IT, excitationE, noFloat), transitionQ(Qvalue),
|
||||
applyARM(true)
|
||||
applyARM(true), daughterNucleus(nullptr), photoEvap(0)
|
||||
{
|
||||
SetParent(theParentNucleus); // Store name of parent nucleus, delete G4MT_parent
|
||||
SetBR(branch);
|
||||
@@ -63,11 +64,18 @@ G4ITDecay::G4ITDecay(const G4ParticleDefinition* theParentNucleus,
|
||||
G4IonTable* theIonTable =
|
||||
(G4IonTable*)(G4ParticleTable::GetParticleTable()->GetIonTable());
|
||||
SetDaughter(0, theIonTable->GetIon(parentZ, parentA, excitationE, noFloat) );
|
||||
|
||||
// Let G4PhotonEvaporation do the decay
|
||||
photoEvap = new G4PhotonEvaporation;
|
||||
photoEvap->RDMForced(true);
|
||||
photoEvap->SetICM(true);
|
||||
}
|
||||
|
||||
|
||||
G4ITDecay::~G4ITDecay()
|
||||
{}
|
||||
{
|
||||
delete photoEvap;
|
||||
}
|
||||
|
||||
|
||||
G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
@@ -83,25 +91,59 @@ G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
G4DynamicParticle parentParticle(G4MT_parent, atRest);
|
||||
G4DecayProducts* products = new G4DecayProducts(parentParticle);
|
||||
|
||||
// Let G4PhotonEvaporation do the decay
|
||||
G4PhotonEvaporation* photoEvap = new G4PhotonEvaporation;
|
||||
photoEvap->RDMForced(true);
|
||||
photoEvap->SetICM(true);
|
||||
// Let G4PhotonEvaporation do the decay
|
||||
G4Fragment parentNucleus(parentA, parentZ, atRest);
|
||||
// G4cout << " START of G4ITDecay::DecayIt: " << G4endl;
|
||||
|
||||
G4Fragment* nucleus = new G4Fragment(parentA, parentZ, atRest);
|
||||
G4Fragment* eOrGamma = photoEvap->EmittedFragment(nucleus);
|
||||
// Check if the old nuclear polarization can be used
|
||||
G4NuclearPolarization* nucPol(nullptr);
|
||||
G4int oldZ(0), oldA(0);
|
||||
G4double oldMass(0.0);
|
||||
if(daughterNucleus) {
|
||||
nucPol = daughterNucleus->GetNuclearPolarization();
|
||||
if(nucPol) {
|
||||
oldZ = daughterNucleus->GetZ_asInt();
|
||||
oldA = daughterNucleus->GetA_asInt();
|
||||
oldMass = daughterNucleus->GetGroundStateMass() +
|
||||
daughterNucleus->GetExcitationEnergy();
|
||||
}
|
||||
}
|
||||
static const G4double mlimit = 10*CLHEP::eV;
|
||||
if (nucPol && oldZ == parentZ && oldA == parentA
|
||||
&& std::abs(atRest.e() - oldMass) < mlimit) {
|
||||
// Continue with existing chain
|
||||
parentNucleus = *daughterNucleus;
|
||||
parentNucleus.SetMomentum(atRest);
|
||||
}
|
||||
|
||||
// Daughter nuclide is returned in nucleus pointer
|
||||
G4double finalDaughterExcitation = nucleus->GetExcitationEnergy();
|
||||
if (finalDaughterExcitation < 1*keV) finalDaughterExcitation = 0.0;
|
||||
G4LorentzVector daughterMomentum = nucleus->GetMomentum();
|
||||
// G4cout << " BEFORE TRANSITION fragment = " << G4endl;
|
||||
// G4cout << parentNucleus << G4endl;
|
||||
|
||||
G4Fragment* eOrGamma = photoEvap->EmittedFragment(&parentNucleus);
|
||||
|
||||
// G4cout << " AFTER TRANSITION " << G4endl;
|
||||
// G4cout << parentNucleus << G4endl;
|
||||
|
||||
// Check if IT chain has ended with excited isomere
|
||||
// Take care for deletion of cached G4Fragment
|
||||
if (parentNucleus.GetExcitationEnergy() > mlimit) {
|
||||
// G4cout << " IT chain is continue " << G4endl;
|
||||
delete daughterNucleus;
|
||||
daughterNucleus = new G4Fragment(parentNucleus);
|
||||
} else if(daughterNucleus) {
|
||||
// G4cout << " End of IT chain " << G4endl;
|
||||
delete daughterNucleus;
|
||||
daughterNucleus = nullptr;
|
||||
}
|
||||
|
||||
// Modified nuclide is returned as dynDaughter
|
||||
G4IonTable* theIonTable =
|
||||
(G4IonTable*)(G4ParticleTable::GetParticleTable()->GetIonTable() );
|
||||
G4ParticleDefinition* daughterIon =
|
||||
theIonTable->GetIon(parentZ, parentA, finalDaughterExcitation);
|
||||
theIonTable->GetIon(parentZ, parentA, parentNucleus.GetExcitationEnergy(),
|
||||
G4Ions::FloatLevelBase(parentNucleus.GetFloatingLevelNumber()));
|
||||
G4DynamicParticle* dynDaughter = new G4DynamicParticle(daughterIon,
|
||||
daughterMomentum);
|
||||
delete nucleus;
|
||||
parentNucleus.GetMomentum());
|
||||
|
||||
if (eOrGamma) {
|
||||
G4DynamicParticle* eOrGammaDyn =
|
||||
@@ -111,7 +153,7 @@ G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
products->PushProducts(eOrGammaDyn);
|
||||
delete eOrGamma;
|
||||
|
||||
// Now do atomic relaxation
|
||||
// Now do atomic relaxation if e- is emitted
|
||||
if (applyARM) {
|
||||
G4int shellIndex = photoEvap->GetVacantShellNumber();
|
||||
if (shellIndex > -1) {
|
||||
@@ -126,7 +168,6 @@ G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
|
||||
// VI, SI
|
||||
// Allows fixing of Bugzilla 1727
|
||||
//const G4double deexLimit = 0.1*keV;
|
||||
G4double deexLimit = 0.1*keV;
|
||||
if (G4EmParameters::Instance()->DeexcitationIgnoreCut()) deexLimit =0.;
|
||||
//
|
||||
@@ -181,8 +222,8 @@ G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
G4double eCons = G4MT_parent->GetPDGMass() - dynDaughter->GetMass() - KEsum;
|
||||
G4cout << " IT check: Ediff (keV) = " << eCons/keV << G4endl;
|
||||
*/
|
||||
delete photoEvap;
|
||||
|
||||
// delete photoEvap;
|
||||
// G4cout << " END G4ITDecay::DecayIt " << G4endl;
|
||||
return products;
|
||||
}
|
||||
|
||||
|
||||
@@ -117,12 +117,14 @@
|
||||
#include "G4VDecayChannel.hh"
|
||||
#include "G4NuclearDecay.hh"
|
||||
#include "G4RadioactiveDecayMode.hh"
|
||||
#include "G4Fragment.hh"
|
||||
#include "G4Ions.hh"
|
||||
#include "G4IonTable.hh"
|
||||
#include "G4BetaDecayType.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4LogicalVolumeStore.hh"
|
||||
#include "G4NuclearLevelData.hh"
|
||||
#include "G4DeexPrecoParameters.hh"
|
||||
#include "G4LevelManager.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4Electron.hh"
|
||||
@@ -146,8 +148,10 @@
|
||||
|
||||
using namespace CLHEP;
|
||||
|
||||
const G4double G4RadioactiveDecay::levelTolerance = 0.1*keV;
|
||||
// const G4double G4RadioactiveDecay::levelTolerance = 0.1*keV;
|
||||
const G4double G4RadioactiveDecay::levelTolerance = 10.0*eV;
|
||||
const G4ThreeVector G4RadioactiveDecay::origin(0.,0.,0.);
|
||||
//G4ThreadLocal G4Fragment G4RadioactiveDecay::polarizedNucleus=nullptr;
|
||||
|
||||
#ifdef G4MULTITHREADED
|
||||
#include "G4AutoLock.hh"
|
||||
@@ -413,7 +417,7 @@ G4RadioactiveDecay::ConvolveSourceTimeProfile(const G4double t, const G4double t
|
||||
}
|
||||
long double lt = t ;
|
||||
long double ltau = tau;
|
||||
|
||||
// G4cout << " Convolve: tau = " << tau << G4endl;
|
||||
if (nbin > 0) {
|
||||
for (G4int i = 0; i < nbin; i++) {
|
||||
convolvedTime += (long double)SProfile[i] *
|
||||
@@ -734,6 +738,10 @@ void G4RadioactiveDecay::BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
theManager->SetAtomDeexcitation(p);
|
||||
*/
|
||||
}
|
||||
|
||||
G4DeexPrecoParameters* param = G4NuclearLevelData::GetInstance()->GetParameters();
|
||||
param->SetUseFilesNEW(true);
|
||||
//param->SetCorrelatedGamma(true); //AR-20Feb2017: Temporary, to fix non-reproducibility problems
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1235,6 +1243,9 @@ G4RadioactiveDecay::AddDecayRateTable(const G4ParticleDefinition& theParentNucle
|
||||
<< ") are being calculated, generation = " << nGeneration
|
||||
<< G4endl;
|
||||
}
|
||||
// G4cout << " Taus = " << G4endl;
|
||||
// for (G4int ii = 0; ii < TP.size(); ii++) G4cout << TP[ii] << ", " ;
|
||||
// G4cout << G4endl;
|
||||
|
||||
aParentNucleus = theIonTable->GetIon(ZP,AP,EP);
|
||||
parentDecayTable = GetDecayTable(aParentNucleus);
|
||||
@@ -1785,9 +1796,10 @@ G4RadioactiveDecay::DecayIt(const G4Track& theTrack, const G4Step&)
|
||||
// it will be used to calculate the statistical weight of the
|
||||
// decay products of this isotope
|
||||
|
||||
// G4cout <<"PA= "<< PA << " PZ= " << PZ << " PE= "<< PE <<G4endl;
|
||||
// G4cout <<"PA= "<< PA << " PZ= " << PZ << " PE= "<< PE <<G4endl;
|
||||
decayRate = 0.L;
|
||||
for (j = 0; j < PT.size(); j++) {
|
||||
// G4cout << " RDM::DecayIt: tau input to Convolve: " << PT[j] << G4endl;
|
||||
taotime = ConvolveSourceTimeProfile(theDecayTime,PT[j]);
|
||||
// taotime = GetTaoTime(theDecayTime,PT[j]);
|
||||
decayRate -= PR[j] * (long double)taotime;
|
||||
|
||||
Reference in New Issue
Block a user