147 using namespace CLHEP;
152 #ifdef G4MULTITHREADED
160 forceDecayDirection(0.,0.,0.), forceDecayHalfAngle(0.*
deg), dirPath(
""),
165 G4cout <<
"G4RadioactiveDecay constructor: processName = " << processName
182 char* path_var = getenv(
"G4RADIOACTIVEDATA");
185 "Environment variable G4RADIOACTIVEDATA is not set");
188 std::ostringstream os;
190 std::ifstream testFile;
191 testFile.open(os.str() );
192 if (!testFile.is_open() )
194 "Environment variable G4RADIOACTIVEDATA is set, but does not point to correct directory");
201 #ifdef G4MULTITHREADED
202 G4AutoLock lk(&G4RadioactiveDecay::radioactiveDecayMutex);
237 outFile <<
"The radioactive decay process (G4RadioactiveDecay) handles the\n"
238 <<
"alpha, beta+, beta-, electron capture and isomeric transition\n"
239 <<
"decays of nuclei (G4GenericIon) with masses A > 4.\n"
240 <<
"The required half-lives and decay schemes are retrieved from\n"
241 <<
"the RadioactiveDecay database which was derived from ENSDF.\n";
249 for (DecayTableMap::iterator i =
dkmap->begin(); i !=
dkmap->end(); i++) {
260 if (((
const G4Ions*)(&aParticle))->GetExcitationEnergy() > 0.) {
273 G4int A = ((
const G4Ions*) (&aParticle))->GetAtomicMass();
274 G4int Z = ((
const G4Ions*) (&aParticle))->GetAtomicNumber();
286 DecayTableMap::iterator table_ptr =
dkmap->find(key);
289 if (table_ptr ==
dkmap->end() ) {
291 if(theDecayTable) (*dkmap)[key] = theDecayTable;
293 theDecayTable = table_ptr->second;
296 return theDecayTable;
305 for (
size_t i = 0; i < theLogicalVolumes->size(); i++) {
306 volume=(*theLogicalVolumes)[i];
307 if (volume->
GetName() == aVolume) {
315 }
else if(i == theLogicalVolumes->size()) {
316 G4cerr <<
"SelectAVolume: "<< aVolume
317 <<
" is not a valid logical volume name" <<
G4endl;
328 for (
size_t i = 0; i < theLogicalVolumes->size(); i++){
329 volume=(*theLogicalVolumes)[i];
330 if (volume->
GetName() == aVolume) {
331 std::vector<G4String>::iterator location;
338 G4cerr <<
" DeselectVolume:" << aVolume <<
" is not in the list "
343 G4cout <<
" DeselectVolume: " << aVolume <<
" is removed from list "
346 }
else if (i == theLogicalVolumes->size()) {
347 G4cerr <<
" DeselectVolume:" << aVolume
348 <<
"is not a valid logical volume name" <<
G4endl;
364 for (
size_t i = 0; i < theLogicalVolumes->size(); i++){
365 volume = (*theLogicalVolumes)[i];
413 G4cout <<
"The DecayRate Table for " << aParticleName <<
" is selected."
497 ed <<
" While count exceeded " <<
G4endl;
498 while (t >
SBin[nbin]) {
501 G4Exception(
"G4RadioactiveDecay::ConvolveSourceTimeProfile()",
514 for (
G4int i = 0; i < nbin; i++) {
517 convolvedTime +=
SProfile[i] * std::exp((
SBin[i] - t)/tau) *
521 (std::exp(-(t-
SBin[i+1])/tau)-std::exp(-(t-
SBin[i])/tau));
525 convolvedTime -=
SProfile[nbin] * std::expm1((
SBin[nbin] - t)/tau);
528 if (convolvedTime < 0.) {
529 G4cout <<
" Convolved time =: " << convolvedTime <<
" reset to zero! " <<
G4endl;
536 G4cout <<
" Convolved time: " << convolvedTime <<
G4endl;
538 return convolvedTime;
558 ed <<
" While count exceeded " <<
G4endl;
572 G4cout <<
" Decay time: " <<decaytime/
s <<
"[s]" <<G4endl;
584 ed <<
" While count exceeded " <<
G4endl;
585 while ( aDecayTime >
DBin[i] ) {
617 G4cout <<
"G4RadioactiveDecay::GetMeanLifeTime() " <<
G4endl;
619 <<
" GeV, Mass: " << theParticle->
GetMass()/
GeV
620 <<
" GeV, Life time: " << theLife/
ns <<
" ns " <<
G4endl;
624 else if (theLife < 0.0) {meanlife =
DBL_MAX;}
625 else {meanlife = theLife;}
628 if (((
const G4Ions*)(theParticleDef))->GetExcitationEnergy() > 0. &&
629 meanlife ==
DBL_MAX) {meanlife = 0.;}
633 G4cout <<
" mean life time: " << meanlife/
s <<
" s " <<
G4endl;
655 G4cout <<
"G4RadioactiveDecay::GetMeanFreePath() " <<
G4endl;
657 <<
" GeV, Mass: " << aMass/
GeV <<
" GeV, tau: " << tau <<
" ns "
668 }
else if (tau < 0.0) {
671 ed <<
"Ion has negative lifetime " << tau
672 <<
" but is not stable. Setting mean free path to DBL_MAX" <<
G4endl;
673 G4Exception(
"G4RadioactiveDecay::GetMeanFreePath()",
"HAD_RDM_011",
680 pathlength =
c_light*tau*betaGamma;
686 G4cout <<
"G4Decay::GetMeanFreePath: "
688 <<
" stops, kinetic energy = "
698 G4cout <<
"mean free path: "<< pathlength/
m <<
" m" <<
G4endl;
731 os <<
"======================================================================="
733 os <<
"====== Radioactive Decay Physics Parameters ========"
735 os <<
"======================================================================="
737 os <<
"Max life time "
739 os <<
"Internal e- conversion flag "
741 os <<
"Stored internal conversion coefficients "
743 os <<
"Enable correlated gamma emission "
745 os <<
"Max 2J for sampling of angular correlations "
747 os <<
"Atomic de-excitation enabled "
748 << emparam->
Fluo() << endline;
749 os <<
"Auger electron emission enabled "
750 << emparam->
Auger() << endline;
751 os <<
"Auger cascade enabled "
753 os <<
"Check EM cuts disabled for atomic de-excitation "
755 os <<
"Use Bearden atomic level energies "
757 os <<
"======================================================================="
774 G4int A = ((
const G4Ions*)(&theParentNucleus))->GetAtomicMass();
775 G4int Z = ((
const G4Ions*)(&theParentNucleus))->GetAtomicNumber();
777 G4double levelEnergy = ((
const G4Ions*)(&theParentNucleus))->GetExcitationEnergy();
779 ((
const G4Ions*)(&theParentNucleus))->GetFloatLevelBase();
781 #ifdef G4MULTITHREADED
782 G4AutoLock lk(&G4RadioactiveDecay::radioactiveDecayMutex);
785 DecayTableMap::iterator master_table_ptr = master_dkmap->find(key);
787 if (master_table_ptr != master_dkmap->end() ) {
788 return master_table_ptr->second;
796 std::ostringstream os;
797 os <<
dirPath <<
"/z" << Z <<
".a" << A <<
'\0';
804 std::ifstream DecaySchemeFile;
805 DecaySchemeFile.open(file);
807 if (DecaySchemeFile.good()) {
810 const G4int nMode = 10;
811 G4double modeTotalBR[nMode] = {0.0};
813 for (
G4int i = 0; i < nMode; i++) {
817 char inputChars[120]={
' '};
839 ed <<
" While count exceeded " <<
G4endl;
841 while (!complete && !DecaySchemeFile.getline(inputChars, 120).eof()) {
848 inputLine = inputChars;
849 inputLine = inputLine.
strip(1);
850 if (inputChars[0] !=
'#' && inputLine.length() != 0) {
851 std::istringstream tmpStream(inputLine);
853 if (inputChars[0] ==
'P') {
856 tmpStream >> recordType >> parentExcitation >> floatingFlag >> dummy;
865 if (floatingLevel !=
noFloat) {
868 if (!floatMatch) found =
false;
877 if (inputLine.length() < 72) {
878 tmpStream >> theDecayMode >> dummy >> decayModeTotal;
879 switch (theDecayMode) {
886 theDecayTable->
Insert(anITChannel);
891 modeTotalBR[1] = decayModeTotal;
break;
893 modeTotalBR[2] = decayModeTotal;
break;
895 modeTotalBR[3] = decayModeTotal;
break;
897 modeTotalBR[4] = decayModeTotal;
break;
899 modeTotalBR[5] = decayModeTotal;
break;
901 modeTotalBR[6] = decayModeTotal;
break;
903 modeTotalBR[7] = decayModeTotal;
break;
905 modeTotalBR[8] = decayModeTotal;
break;
907 modeTotalBR[9] = decayModeTotal;
break;
925 G4Exception(
"G4RadioactiveDecay::LoadDecayTable()",
"HAD_RDM_000",
930 if (inputLine.length() < 84) {
931 tmpStream >> theDecayMode >> a >> daughterFloatFlag >> b >> c;
934 tmpStream >> theDecayMode >> a >> daughterFloatFlag >> b >> c >> betaType;
944 switch (theDecayMode) {
949 daughterFloatLevel, betaType);
952 theDecayTable->
Insert(aBetaMinusChannel);
961 daughterFloatLevel, betaType);
964 theDecayTable->
Insert(aBetaPlusChannel);
977 theDecayTable->
Insert(aKECChannel);
990 theDecayTable->
Insert(aLECChannel);
1003 theDecayTable->
Insert(aMECChannel);
1016 theDecayTable->
Insert(aMECChannel);
1025 daughterFloatLevel);
1028 theDecayTable->
Insert(anAlphaChannel);
1037 daughterFloatLevel);
1040 theDecayTable->
Insert(aProtonChannel);
1049 daughterFloatLevel);
1052 theDecayTable->
Insert(aNeutronChannel);
1088 G4Exception(
"G4RadioactiveDecay::LoadDecayTable()",
"HAD_RDM_000",
1106 theNuclearDecayChannel =
static_cast<G4NuclearDecay*
>(theChannel);
1109 if (theDecayMode !=
IT) {
1110 theBR = theChannel->
GetBR();
1111 theChannel->
SetBR(theBR*modeTotalBR[theDecayMode]/modeSumBR[theDecayMode]);
1116 DecaySchemeFile.close();
1118 if (!found && levelEnergy > 0) {
1125 theDecayTable->
Insert(anITChannel);
1132 #ifdef G4MULTITHREADED
1135 return theDecayTable;
1141 if (Z < 1 || A < 2)
G4cout <<
"Z and A not valid!" <<
G4endl;
1143 std::ifstream DecaySchemeFile(filename);
1144 if (DecaySchemeFile) {
1145 G4int ID_ion = A*1000 +
Z;
1148 G4cout <<
"The file " << filename <<
" does not exist!" <<
G4endl;
1155 G4int theG, std::vector<G4double> theCoefficients,
1156 std::vector<G4double> theTaos)
1181 G4int nGeneration = 0;
1183 std::vector<G4double> taos;
1186 std::vector<G4double> Acoeffs;
1189 Acoeffs.push_back(-1.);
1191 G4int A = ((
const G4Ions*)(&theParentNucleus))->GetAtomicMass();
1192 G4int Z = ((
const G4Ions*)(&theParentNucleus))->GetAtomicNumber();
1193 G4double E = ((
const G4Ions*)(&theParentNucleus))->GetExcitationEnergy();
1195 if (tao < 0.) tao = 1
e-100;
1196 taos.push_back(tao);
1227 std::vector<G4double> TP;
1228 std::vector<G4double> RP;
1232 G4int nearestLevelIndex = 0;
1240 const G4int nMode = 9;
1248 ed <<
" While count exceeded " <<
G4endl;
1257 for (j = nS; j < nT; j++) {
1265 G4cout <<
"G4RadioactiveDecay::CalculateChainsFromParent: daughters of ("
1266 << ZP <<
", " << AP <<
", " << EP
1267 <<
") are being calculated, generation = " << nGeneration
1274 aParentNucleus = theIonTable->
GetIon(ZP,AP,EP);
1287 for (
G4int k = 0; k < nMode; k++) brs[k] = 0.0;
1290 for (i = 0; i < parentDecayTable->
entries(); i++) {
1292 theNuclearDecayChannel =
static_cast<G4NuclearDecay*
>(theChannel);
1297 AD = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicMass();
1298 ZD = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicNumber();
1304 if (std::abs(daughterExcitation - nearestEnergy) <
levelTolerance) {
1310 summedDecayTable->
Insert(theChannel);
1312 brs[theDecayMode] += theChannel->
GetBR();
1315 brs[theDecayMode] += theChannel->
GetBR();
1318 brs[theDecayMode] += theChannel->
GetBR();
1322 brs[2] = brs[2]+brs[3]+brs[4]+brs[5];
1323 brs[3] = brs[4] =brs[5] = 0.0;
1324 for (i= 0; i<nMode; i++){
1329 theITChannel =
new G4ITDecay(aParentNucleus, brs[0], 0.0, 0.0,
1332 summedDecayTable->
Insert(theITChannel);
1340 summedDecayTable->
Insert(theBetaMinusChannel);
1348 summedDecayTable->
Insert(theBetaPlusChannel);
1355 summedDecayTable->
Insert(theAlphaChannel);
1362 summedDecayTable->
Insert(theProtonChannel);
1368 summedDecayTable->
Insert(theNeutronChannel);
1378 for (i = 0; i < summedDecayTable->
entries(); i++){
1380 theNuclearDecayChannel =
static_cast<G4NuclearDecay*
>(theChannel);
1381 theBR = theChannel->
GetBR();
1386 if (theNuclearDecayChannel->
GetDecayMode() ==
IT && nGeneration == 1) {
1388 A = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicMass();
1389 Z = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicNumber();
1390 theDaughterNucleus=theIonTable->
GetIon(Z,A,0.);
1393 aParentNucleus != theDaughterNucleus) {
1397 if (parentDecayTable->
entries() ) {
1398 A = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicMass();
1399 Z = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicNumber();
1400 E = ((
const G4Ions*)(theDaughterNucleus))->GetExcitationEnergy();
1403 if (TaoPlus <= 0.) TaoPlus = 1
e-100;
1413 taos.push_back(TaoPlus);
1419 long double ta1,ta2;
1420 ta2 = (
long double)TaoPlus;
1421 for (k = 0; k < RP.size(); k++){
1422 ta1 = (
long double)TP[k];
1426 theRate = ta1/(ta1-ta2);
1428 theRate = theRate * theBR * RP[k];
1429 Acoeffs.push_back(theRate);
1436 long double aRate, aRate1;
1438 for (k = 0; k < RP.size(); k++){
1439 ta1 = (
long double)TP[k];
1443 aRate = ta2/(ta1-ta2);
1445 aRate = aRate * (
long double)(theBR * RP[k]);
1449 Acoeffs.push_back(theRate);
1461 if (nS == nT) stable =
true;
1491 ed <<
" Could not open file " << filename <<
G4endl;
1492 G4Exception(
"G4RadioactiveDecay::SetSourceTimeProfile()",
"HAD_RDM_001",
1501 ed <<
" While count exceeded " <<
G4endl;
1503 while (infile >> bin >> flux ) {
1512 G4Exception(
"G4RadioactiveDecay::SetSourceTimeProfile()",
"HAD_RDM_002",
1540 if (!infile)
G4Exception(
"G4RadioactiveDecay::SetDecayBias()",
"HAD_RDM_003",
1553 ed <<
" While count exceeded " <<
G4endl;
1555 while (infile >> bin >> flux ) {
1564 G4Exception(
"G4RadioactiveDecay::SetDecayBias()",
"HAD_RDM_004",
1612 G4cout <<
"G4RadioactiveDecay::DecayIt : "
1614 <<
" is not selected for the RDM"<<
G4endl;
1637 G4cerr <<
"G4RadioactiveDecay::DecayIt : "
1639 <<
" is not a valid nucleus for the RDM"<<
G4endl;
1652 if (theDecayTable == 0 || theDecayTable->
entries() == 0) {
1657 G4cerr <<
"G4RadioactiveDecay::DecayIt : decay table not defined for ";
1689 if ( products->
entries() == 1) {
1718 if (temptime < 0.) temptime = 0.;
1719 finalGlobalTime += temptime;
1720 finalLocalTime += temptime;
1723 products->
Boost(ParentEnergy, ParentDirection);
1730 G4cout <<
"G4RadioactiveDecay::DecayIt : Decay vertex :";
1731 G4cout <<
" Time: " <<finalGlobalTime/
ns <<
"[ns]";
1736 G4cout <<
"G4Decay::DecayIt : decay products in Lab. Frame" <<
G4endl;
1741 for (index=0; index < numberOfSecondaries; index++) {
1743 finalGlobalTime, currentPosition);
1755 G4cout <<
"DecayIt: Variance Reduction version " <<
G4endl;
1768 std::vector<G4double> PT;
1769 std::vector<G4double> PR;
1771 long double decayRate;
1775 G4int numberOfSecondaries;
1776 G4int totalNumberOfSecondaries = 0;
1780 std::vector<G4DynamicParticle*> secondaryparticles;
1781 std::vector<G4double> pw;
1782 std::vector<G4double> ptime;
1798 }
else if (nbin > 1) {
1861 for (
G4int j = 0; j <
G4int(PT.size()); j++) {
1864 decayRate -= PR[j] * (
long double)tauprob;
1876 if (decayRate < 0.0) decayRate = 0.0;
1901 ->AddIsotope(PZ,PA,PE,weight1*decayRate,theTrack.
GetWeight());
1910 parentNucleus = theIonTable->
GetIon(PZ,PA,PE);
1922 if (theDecayChannel == 0) {
1926 G4cerr <<
" G4RadioactiveDecay::DoIt : cannot determine decay channel ";
1927 G4cerr <<
" for this nucleus; decay as if no biasing active ";
1932 tempprods =
DoDecay(*parentNucleus);
1937 tempprods = theDecayChannel->DecayIt(tempmass);
1938 weight *= (theDecayChannel->GetBR())*(decayTable->
entries());
1941 tempprods =
DoDecay(*parentNucleus);
1945 numberOfSecondaries = tempprods->
entries();
1946 currentTime = finalGlobalTime + theDecayTime;
1947 for (index = 0; index < numberOfSecondaries; index++) {
1950 pw.push_back(weight);
1951 ptime.push_back(currentTime);
1952 secondaryparticles.push_back(asecondaryparticle);
1953 }
else if (((
const G4Ions*)(asecondaryparticle->
GetDefinition()))->GetExcitationEnergy() > 0.
1968 totalNumberOfSecondaries = pw.size();
1970 for (index=0; index < totalNumberOfSecondaries; index++) {
1972 ptime[index], currentPosition);
2014 if (theDecayChannel == 0) {
2018 G4Exception(
"G4RadioactiveDecay::DoDecay",
"HAD_RDM_013",
2024 G4cerr <<
"G4RadioactiveDecay::DoIt : selected decay channel addr:";
2043 if (0 == products || 0 == products->
entries())
return;
2062 if (daughterType == electron || daughterType == positron ||
2063 daughterType == neutron || daughterType == gamma ||
2071 G4cout <<
"CollimateDecayProduct for daughter "
2102 G4cout <<
" ChooseCollimationDirection returns " << dir <<
G4endl;
2112 std::vector<double>& weights_v,
2113 std::vector<double>& times_v,
2114 std::vector<G4DynamicParticle*>& secondaries_v)
2116 G4double elevel = ((
const G4Ions*)(apartDef))->GetExcitationEnergy();
2120 while (life_time < halflifethreshold && elevel > 0.) {
2127 for (
G4int ind = 0; ind < nb_pevapSecondaries; ind++) {
2128 a_pevap_secondary = pevap_products->
PopProducts();
2132 elevel = ((
const G4Ions*)(secDef))->GetExcitationEnergy();
2136 weights_v.push_back(weight);
2137 times_v.push_back(currentTime);
2138 secondaries_v.push_back(a_pevap_secondary);
2141 weights_v.push_back(weight);
2142 times_v.push_back(currentTime);
2143 secondaries_v.push_back(a_pevap_secondary);
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
G4double GetLocalTime() const
G4ParticleChangeForRadDecay fParticleChangeForRadDecay
static G4Gamma * Definition()
static G4Proton * Definition()
void SetDecayRate(G4int, G4int, G4double, G4int, std::vector< G4double >, std::vector< G4double >)
G4double GetMeanLifeTime(const G4Track &theTrack, G4ForceCondition *condition)
virtual void SetICM(G4bool)
std::ostringstream G4ExceptionDescription
std::vector< ExP01TrackerHit * > a
G4LogicalVolume * GetLogicalVolume() const
G4RadioactiveDecaymessenger * theRadioactiveDecaymessenger
G4double forceDecayHalfAngle
static G4Alpha * Definition()
static G4ParticleTable * GetParticleTable()
static constexpr double MeV
G4double GetPDGLifeTime() const
static const G4ThreeVector origin
G4int GetVerboseLevel() const
void SetWeight(G4double aValue)
static G4Neutron * Definition()
virtual G4DecayProducts * DecayIt(G4double)
G4DeexPrecoParameters * GetParameters()
static constexpr double keV
void ProposeWeight(G4double finalWeight)
G4bool IsRateTableReady(const G4ParticleDefinition &)
G4bool GetInternalConversionFlag() const
G4NucleusLimits theNucleusLimits
void AddSecondary(G4Track *aSecondary)
G4PhotonEvaporation * photonEvaporation
G4double ConvolveSourceTimeProfile(const G4double, const G4double)
const G4ThreeVector & GetMomentumDirection() const
static G4NuclearLevelData * GetInstance()
G4bool BeardenFluoDir() const
const G4String & GetParticleName() const
std::map< G4int, G4String > theUserRadioactiveDataFiles
const G4String & GetParticleType() const
const G4TouchableHandle & GetTouchableHandle() const
G4IonTable * GetIonTable() const
G4double GetMeanFreePath(const G4Track &theTrack, G4double previousStepSize, G4ForceCondition *condition)
std::vector< G4RadioactivityTable * > theRadioactivityTables
std::vector< G4String > ValidVolumes
void Insert(G4VDecayChannel *aChannel)
void SetItsRates(G4RadioactiveDecayRates arate)
void SelectAVolume(const G4String aVolume)
G4DynamicParticle * PopProducts()
G4double GetPDGMass() const
void Boost(G4double totalEnergy, const G4ThreeVector &momentumDirection)
G4bool IsApplicable(const G4ParticleDefinition &)
void AddDeexcitationSpectrumForBiasMode(G4ParticleDefinition *apartDef, G4double weight, G4double currenTime, std::vector< double > &weights_v, std::vector< double > ×_v, std::vector< G4DynamicParticle * > &secondaries_v)
void StreamInfo(std::ostream &os, const G4String &endline)
G4int GetDecayTimeBin(const G4double aDecayTime)
void SetMomentumDirection(const G4ThreeVector &aDirection)
G4double GetWeight() const
static constexpr double m
void SetBR(G4double value)
G4double GetMaxLifeTime() const
#define G4MUTEX_INITIALIZER
void SetDecayRateC(std::vector< G4double > value)
G4double halflifethreshold
void GetChainsFromParent(const G4ParticleDefinition &)
G4ParticleDefinition * GetDefinition() const
G4double NearestLevelEnergy(G4double energy, size_t index=0) const
G4VParticleChange * pParticleChange
void BuildPhysicsTable(const G4ParticleDefinition &)
G4RadioactiveDecayRates theDecayRateVector
static constexpr double deg
G4int GetBaryonNumber() const
void SetTaos(std::vector< G4double > value)
void SetARM(G4bool onoff)
G4VDecayChannel * GetDecayChannel(G4int index) const
void SetDecayBias(G4String filename)
static const G4double alpha
void SetE(G4double value)
G4double GetGlobalTime() const
G4RadioactiveDecay(const G4String &processName="RadioactiveDecay")
G4String strip(G4int strip_Type=trailing, char c=' ')
double A(double temperature)
static constexpr double ps
void SetTouchableHandle(const G4TouchableHandle &apValue)
const G4ThreeVector & GetPosition() const
static constexpr double eV
G4double LifeTime(size_t i) const
G4RadioactiveDecayParentChainTable theParentChainTable
void ProposeLocalTime(G4double t)
void DeselectAVolume(const G4String aVolume)
static constexpr double nanosecond
G4GLOB_DLL std::ostream G4cerr
G4bool GetPDGStable() const
static G4Electron * Definition()
void SetGoodForTrackingFlag(G4bool value=true)
void CalculateChainsFromParent(const G4ParticleDefinition &)
G4bool AugerCascade() const
void SetARM(G4bool onoff)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
virtual void ProcessDescription(std::ostream &outFile) const
G4RadioactiveDecayChainsFromParent chainsFromParent
G4RadioactiveDecayRatesToDaughter ratesToDaughter
static constexpr double c_light
void CollimateDecayProduct(G4DynamicParticle *product)
G4DecayTable * GetDecayTable(const G4ParticleDefinition *)
G4bool DeexcitationIgnoreCut() const
G4ThreeVector ChooseCollimationDirection() const
void AddUserDecayDataFile(G4int Z, G4int A, G4String filename)
size_t NumberOfTransitions() const
void SetProcessSubType(G4int)
G4double GetDaughterExcitation()
G4bool StoreICLevelData() const
G4double GetKineticEnergy() const
static constexpr double cm
G4GLOB_DLL std::ostream G4cout
static constexpr double deg
void ClearNumberOfInteractionLengthLeft()
virtual G4DecayProducts * DecayIt(G4double parentMass=-1.0)=0
virtual void RDMForced(G4bool)
std::map< G4String, G4DecayTable * > DecayTableMap
void SetAnalogueMonteCarlo(G4bool r)
void CollimateDecay(G4DecayProducts *products)
G4VDecayChannel * SelectADecayChannel(G4double parentMass=-1.)
G4double GetTotalMomentum() const
static constexpr double pi
static const G4double levelTolerance
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
void DeselectAllVolumes()
const G4ParticleDefinition * GetParticleDefinition() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4TrackStatus GetTrackStatus() const
void SetSourceTimeProfile(G4String filename)
void SetHLThreshold(G4double HLT)
void SetGeneration(G4int value)
static G4Positron * Definition()
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
G4RadioactiveDecayMode GetDecayMode()
virtual void Initialize(const G4Track &)
void ProposeTrackStatus(G4TrackStatus status)
G4bool CorrelatedGamma() const
static constexpr double GeV
const G4DynamicParticle * GetDynamicParticle() const
static G4LogicalVolumeStore * GetInstance()
static G4EmParameters * Instance()
G4DecayTable * LoadDecayTable(const G4ParticleDefinition &theParentNucleus)
G4ParticleDefinition * GetDaughterNucleus()
size_t NearestLevelIndex(G4double energy, size_t index=0) const
void SetIonName(G4String name)
const G4String & GetName() const
G4VPhysicalVolume * GetVolume() const
G4ThreeVector forceDecayDirection
G4VParticleChange * DecayIt(const G4Track &theTrack, const G4Step &theStep)
G4DecayProducts * DoDecay(const G4ParticleDefinition &theParticleDef)
void SetNumberOfSecondaries(G4int totSecondaries)