Import Geant4 10.4.0.beta source tree
This commit is contained in:
@@ -50,9 +50,9 @@
|
||||
|
||||
G4ITDecay::G4ITDecay(const G4ParticleDefinition* theParentNucleus,
|
||||
const G4double& branch, const G4double& Qvalue,
|
||||
const G4double& excitationE)
|
||||
const G4double& excitationE, G4PhotonEvaporation* aPhotoEvap)
|
||||
: G4NuclearDecay("IT decay", IT, excitationE, noFloat), transitionQ(Qvalue),
|
||||
applyARM(true), daughterNucleus(nullptr), photoEvap(0)
|
||||
applyARM(true), photonEvaporation(aPhotoEvap)
|
||||
{
|
||||
SetParent(theParentNucleus); // Store name of parent nucleus, delete G4MT_parent
|
||||
SetBR(branch);
|
||||
@@ -64,18 +64,11 @@ 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)
|
||||
@@ -92,49 +85,11 @@ G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
G4DecayProducts* products = new G4DecayProducts(parentParticle);
|
||||
|
||||
// Let G4PhotonEvaporation do the decay
|
||||
// but first pass nuclear polarization from end of previous IT decay to
|
||||
// start of next one
|
||||
G4Fragment parentNucleus(parentA, parentZ, atRest);
|
||||
// G4cout << " START of G4ITDecay::DecayIt: " << G4endl;
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
G4Fragment* eOrGamma = photonEvaporation->EmittedFragment(&parentNucleus);
|
||||
|
||||
// Modified nuclide is returned as dynDaughter
|
||||
G4IonTable* theIonTable =
|
||||
@@ -155,7 +110,7 @@ G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
|
||||
// Now do atomic relaxation if e- is emitted
|
||||
if (applyARM) {
|
||||
G4int shellIndex = photoEvap->GetVacantShellNumber();
|
||||
G4int shellIndex = photonEvaporation->GetVacantShellNumber();
|
||||
if (shellIndex > -1) {
|
||||
G4VAtomDeexcitation* atomDeex =
|
||||
G4LossTableManager::Instance()->AtomDeexcitation();
|
||||
@@ -222,8 +177,6 @@ G4DecayProducts* G4ITDecay::DecayIt(G4double)
|
||||
G4double eCons = G4MT_parent->GetPDGMass() - dynDaughter->GetMass() - KEsum;
|
||||
G4cout << " IT check: Ediff (keV) = " << eCons/keV << G4endl;
|
||||
*/
|
||||
// delete photoEvap;
|
||||
// G4cout << " END G4ITDecay::DecayIt " << G4endl;
|
||||
return products;
|
||||
}
|
||||
|
||||
|
||||
@@ -139,19 +139,17 @@
|
||||
#include "G4LossTableManager.hh"
|
||||
#include "G4VAtomDeexcitation.hh"
|
||||
#include "G4UAtomicDeexcitation.hh"
|
||||
#include "G4PhotonEvaporation.hh"
|
||||
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
// #include "G4PhotonEvaporation.hh"
|
||||
|
||||
using namespace CLHEP;
|
||||
|
||||
// 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"
|
||||
@@ -175,6 +173,12 @@ G4RadioactiveDecay::G4RadioactiveDecay(const G4String& processName)
|
||||
theRadioactiveDecaymessenger = new G4RadioactiveDecaymessenger(this);
|
||||
pParticleChange = &fParticleChangeForRadDecay;
|
||||
|
||||
// Set up photon evaporation for use in G4ITDecay
|
||||
photonEvaporation = new G4PhotonEvaporation();
|
||||
// photonEvaporation->SetVerboseLevel(2);
|
||||
photonEvaporation->RDMForced(true);
|
||||
photonEvaporation->SetICM(true);
|
||||
|
||||
// Reset the list of user defined data files
|
||||
theUserRadioactiveDataFiles.clear();
|
||||
|
||||
@@ -216,6 +220,7 @@ G4RadioactiveDecay::G4RadioactiveDecay(const G4String& processName)
|
||||
G4RadioactiveDecay::~G4RadioactiveDecay()
|
||||
{
|
||||
delete theRadioactiveDecaymessenger;
|
||||
delete photonEvaporation;
|
||||
for (DecayTableMap::iterator i = dkmap->begin(); i != dkmap->end(); i++) {
|
||||
delete i->second;
|
||||
}
|
||||
@@ -741,7 +746,7 @@ void G4RadioactiveDecay::BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
|
||||
G4DeexPrecoParameters* param = G4NuclearLevelData::GetInstance()->GetParameters();
|
||||
param->SetUseFilesNEW(true);
|
||||
//param->SetCorrelatedGamma(true); //AR-20Feb2017: Temporary, to fix non-reproducibility problems
|
||||
param->SetCorrelatedGamma(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -873,7 +878,7 @@ G4RadioactiveDecay::LoadDecayTable(const G4ParticleDefinition& theParentNucleus)
|
||||
case IT:
|
||||
{
|
||||
G4ITDecay* anITChannel = new G4ITDecay(&theParentNucleus, decayModeTotal,
|
||||
0.0, 0.0);
|
||||
0.0, 0.0, photonEvaporation);
|
||||
anITChannel->SetHLThreshold(halflifethreshold);
|
||||
anITChannel->SetARM(applyARM);
|
||||
theDecayTable->Insert(anITChannel);
|
||||
@@ -1095,7 +1100,8 @@ G4RadioactiveDecay::LoadDecayTable(const G4ParticleDefinition& theParentNucleus)
|
||||
if (!found && levelEnergy > 0) {
|
||||
// Case where IT cascade for excited isotopes has no entries in RDM database
|
||||
// Decay mode is isomeric transition.
|
||||
G4ITDecay* anITChannel = new G4ITDecay(&theParentNucleus, 1.0, 0.0, 0.0);
|
||||
G4ITDecay* anITChannel = new G4ITDecay(&theParentNucleus, 1.0, 0.0, 0.0,
|
||||
photonEvaporation);
|
||||
anITChannel->SetHLThreshold(halflifethreshold);
|
||||
anITChannel->SetARM(applyARM);
|
||||
theDecayTable->Insert(anITChannel);
|
||||
@@ -1302,7 +1308,8 @@ G4RadioactiveDecay::AddDecayRateTable(const G4ParticleDefinition& theParentNucle
|
||||
switch ( i ) {
|
||||
case 0:
|
||||
// Decay mode is isomeric transition
|
||||
theITChannel = new G4ITDecay(aParentNucleus, brs[0], 0.0, 0.0);
|
||||
theITChannel = new G4ITDecay(aParentNucleus, brs[0], 0.0, 0.0,
|
||||
photonEvaporation);
|
||||
|
||||
summedDecayTable->Insert(theITChannel);
|
||||
break;
|
||||
@@ -1574,6 +1581,7 @@ G4RadioactiveDecay::DecayIt(const G4Track& theTrack, const G4Step&)
|
||||
// Initialize G4ParticleChange object, get particle details and decay table
|
||||
|
||||
fParticleChangeForRadDecay.Initialize(theTrack);
|
||||
fParticleChangeForRadDecay.ProposeWeight(theTrack.GetWeight());
|
||||
const G4DynamicParticle* theParticle = theTrack.GetDynamicParticle();
|
||||
const G4ParticleDefinition* theParticleDef = theParticle->GetDefinition();
|
||||
|
||||
@@ -2032,7 +2040,8 @@ void G4RadioactiveDecay::AddDeexcitationSpectrumForBiasMode(G4ParticleDefinition
|
||||
G4double elevel=((const G4Ions*)(apartDef))->GetExcitationEnergy();
|
||||
G4double life_time=apartDef->GetPDGLifeTime();
|
||||
while (life_time <halflifethreshold && elevel>0.) {
|
||||
G4ITDecay* anITChannel = new G4ITDecay(apartDef, 100., elevel,elevel);
|
||||
G4ITDecay* anITChannel = new G4ITDecay(apartDef, 100., elevel,elevel,
|
||||
photonEvaporation);
|
||||
G4DecayProducts* pevap_products = anITChannel->DecayIt(0.);
|
||||
G4int nb_pevapSecondaries = pevap_products->entries();
|
||||
for (G4int ind = 0; ind < nb_pevapSecondaries; ind++) {
|
||||
|
||||
Reference in New Issue
Block a user