149 using namespace CLHEP;
 
  152 const G4double G4RadioactiveDecay::levelTolerance = 10.0*
eV;
 
  156 #ifdef G4MULTITHREADED 
  164    forceDecayDirection(0.,0.,0.), forceDecayHalfAngle(0.*
deg), verboseLevel(0)
 
  168     G4cout << 
"G4RadioactiveDecay constructor: processName = " << processName
 
  179   theUserRadioactiveDataFiles.clear();
 
  182 #ifdef G4MULTITHREADED 
  183   G4AutoLock lk(&G4RadioactiveDecay::radioactiveDecayMutex);
 
  201   theRadioactivityTables.push_back(rTable);
 
  211   isAllVolumesMode = 
true;
 
  218   delete theRadioactiveDecaymessenger;
 
  219   for (DecayTableMap::iterator i = dkmap->begin(); i != dkmap->end(); i++) {
 
  230   if (((
const G4Ions*)(&aParticle))->GetExcitationEnergy() > 0.) {
return true;}
 
  239   G4int A = ((
const G4Ions*) (&aParticle))->GetAtomicMass();
 
  240   G4int Z = ((
const G4Ions*) (&aParticle))->GetAtomicNumber();
 
  242   if (A > theNucleusLimits.
GetAMax() || A < theNucleusLimits.
GetAMin())
 
  244   else if (Z > theNucleusLimits.
GetZMax() || Z < theNucleusLimits.
GetZMin())
 
  252   DecayTableMap::iterator table_ptr = dkmap->find(key);
 
  255   if (table_ptr == dkmap->end() ) {                   
 
  257     if(theDecayTable) (*dkmap)[key] = theDecayTable;  
 
  259     theDecayTable = table_ptr->second;
 
  262   return theDecayTable;
 
  271   for (
size_t i = 0; i < theLogicalVolumes->size(); i++) {
 
  272     volume=(*theLogicalVolumes)[i];
 
  273     if (volume->
GetName() == aVolume) {
 
  274       ValidVolumes.push_back(aVolume);
 
  275       std::sort(ValidVolumes.begin(), ValidVolumes.end());
 
  281     } 
else if(i == theLogicalVolumes->size()) {
 
  282       G4cerr << 
"SelectAVolume: "<< aVolume
 
  283              << 
" is not a valid logical volume name" << 
G4endl; 
 
  294   for (
size_t i = 0; i < theLogicalVolumes->size(); i++){
 
  295     volume=(*theLogicalVolumes)[i];
 
  296     if (volume->
GetName() == aVolume) {
 
  297       std::vector<G4String>::iterator location;
 
  298       location = std::find(ValidVolumes.begin(),ValidVolumes.end(),aVolume);
 
  299       if (location != ValidVolumes.end()) {
 
  300         ValidVolumes.erase(location);
 
  301         std::sort(ValidVolumes.begin(), ValidVolumes.end());
 
  302         isAllVolumesMode =
false;
 
  304         G4cerr << 
" DeselectVolume:" << aVolume << 
" is not in the list " 
  309         G4cout << 
" DeselectVolume: " << aVolume << 
" is removed from list " 
  312     } 
else if (i ==  theLogicalVolumes->size()) {
 
  313       G4cerr << 
" DeselectVolume:" << aVolume
 
  314              << 
"is not a valid logical volume name" << 
G4endl; 
 
  325   ValidVolumes.clear();
 
  330   for (
size_t i = 0; i < theLogicalVolumes->size(); i++){
 
  331     volume = (*theLogicalVolumes)[i];
 
  332     ValidVolumes.push_back(volume->
GetName());    
 
  338   std::sort(ValidVolumes.begin(), ValidVolumes.end());
 
  340   isAllVolumesMode=
true;
 
  346   ValidVolumes.clear();
 
  347   isAllVolumesMode=
false;
 
  360   for (
size_t i = 0; i < theDecayRateTableVector.size(); i++) {
 
  361     if (theDecayRateTableVector[i].GetIonName() == aParticleName) 
return true;
 
  374   for (
size_t i = 0; i < theDecayRateTableVector.size(); i++) {
 
  375     if (theDecayRateTableVector[i].GetIonName() == aParticleName) {
 
  376       theDecayRateVector = theDecayRateTableVector[i].GetItsRates();
 
  381     G4cout << 
"The DecayRate Table for " << aParticleName << 
" is selected." 
  396   long double convolvedTime = 0.L;
 
  398   if ( t > SBin[NSourceBin]) {
 
  405     ed << 
" While count exceeded " << 
G4endl;
 
  406     while (t > SBin[nbin]) {  
 
  409         G4Exception(
"G4RadioactiveDecay::ConvolveSourceTimeProfile()",
 
  419   long double ltau = tau;
 
  422     for (
G4int i = 0; i < nbin; i++) {
 
  423       convolvedTime += (
long double)SProfile[i] *
 
  424        (std::exp(-(lt-(
long double)SBin[i+1])/ltau)-std::exp(-(lt-(
long double)SBin[i])/ltau));
 
  427   convolvedTime +=  (
long double)SProfile[nbin] * (1.
L-std::exp(-(lt-(
long double)SBin[nbin])/ltau));
 
  431   if (convolvedTime < 0.)  {
 
  432     G4cout << 
" Convolved time =: " << convolvedTime << 
" reset to zero! " << 
G4endl;
 
  439     G4cout << 
" Convolved time: " << convolvedTime << 
G4endl;
 
  570   ed << 
" While count exceeded " << 
G4endl;
 
  571   while ( DProfile[i] < rand) {  
 
  581   decaytime = DBin[i] + rand*(DBin[i+1]-DBin[i]);
 
  584     G4cout <<
" Decay time: " <<decaytime/
s <<
"[s]" <<G4endl;
 
  596   ed << 
" While count exceeded " << 
G4endl;
 
  597   while ( aDecayTime > DBin[i] ) {   
 
  629        G4cout << 
"G4RadioactiveDecay::GetMeanLifeTime() " << 
G4endl;
 
  631               << 
" GeV, Mass: " << theParticle->
GetMass()/
GeV 
  632               << 
" GeV, Life time: " << theLife/
ns << 
" ns " << 
G4endl;
 
  636     else if (theLife < 0.0) {meanlife = 
DBL_MAX;}
 
  637     else {meanlife = theLife;}
 
  640     if (((
const G4Ions*)(theParticleDef))->GetExcitationEnergy() > 0. &&
 
  641                                           meanlife == 
DBL_MAX) {meanlife = 0.;}
 
  645     G4cout << 
" mean life time: " << meanlife/
s << 
" s " << 
G4endl;
 
  667     G4cout << 
"G4RadioactiveDecay::GetMeanFreePath() " << 
G4endl;
 
  669            << 
" GeV, Mass: " << aMass/
GeV << 
" GeV, tau: " << tau << 
" ns " 
  680     } 
else if (tau < 0.0) {
 
  683       ed << 
"Ion has negative lifetime " << tau
 
  684          << 
" but is not stable.  Setting mean free path to DBL_MAX" << 
G4endl; 
 
  685       G4Exception(
"G4RadioactiveDecay::GetMeanFreePath()", 
"HAD_RDM_011",
 
  692       pathlength = 
c_light*tau*betaGamma;
 
  698           G4cout << 
"G4Decay::GetMeanFreePath: " 
  700                  << 
" stops, kinetic energy = " 
  710     G4cout << 
"mean free path: "<< pathlength/
m << 
" m" << 
G4endl;
 
  724   if (!isInitialised) {
 
  725     isInitialised = 
true;
 
  730       ed << 
" Atomic deexcitation is not defined."; 
 
  731       G4Exception(
"G4RadioactiveDecay::BuildPhysicsTable", 
"HAD_RDM_001",
 
  760   G4int A = ((
const G4Ions*)(&theParentNucleus))->GetAtomicMass();
 
  761   G4int Z = ((
const G4Ions*)(&theParentNucleus))->GetAtomicNumber();
 
  763   G4double levelEnergy = ((
const G4Ions*)(&theParentNucleus))->GetExcitationEnergy();
 
  765     ((
const G4Ions*)(&theParentNucleus))->GetFloatLevelBase();
 
  767 #ifdef G4MULTITHREADED 
  768   G4AutoLock lk(&G4RadioactiveDecay::radioactiveDecayMutex);
 
  771   DecayTableMap::iterator master_table_ptr = master_dkmap->find(key);
 
  773   if (master_table_ptr != master_dkmap->end() ) {   
 
  774     return master_table_ptr->second;
 
  779   G4String file = theUserRadioactiveDataFiles[1000*A+
Z];
 
  782     if (!getenv(
"G4RADIOACTIVEDATA") ) {
 
  783       G4cout << 
"Please setenv G4RADIOACTIVEDATA to point to the radioactive decay data files." 
  785       throw G4HadronicException(__FILE__, __LINE__, 
" Please setenv G4RADIOACTIVEDATA to point to the radioactive decay data files.");
 
  787     G4String dirName = getenv(
"G4RADIOACTIVEDATA");
 
  789     std::ostringstream os;
 
  790     os << dirName << 
"/z" << Z << 
".a" << A << 
'\0';
 
  797   std::ifstream DecaySchemeFile;
 
  798   DecaySchemeFile.open(file);
 
  800   if (DecaySchemeFile.good()) {
 
  803     const G4int nMode = 9;
 
  804     G4double modeTotalBR[nMode] = {0.0};
 
  806     for (
G4int i = 0; i < nMode; i++) {
 
  810     char inputChars[120]={
' '};
 
  832     ed << 
" While count exceeded " << 
G4endl;
 
  834     while (!complete && !DecaySchemeFile.getline(inputChars, 120).eof()) {  
 
  841       inputLine = inputChars;
 
  842       inputLine = inputLine.
strip(1);
 
  843       if (inputChars[0] != 
'#' && inputLine.length() != 0) {
 
  844         std::istringstream tmpStream(inputLine);
 
  846         if (inputChars[0] == 
'P') {
 
  849           tmpStream >> recordType >> parentExcitation >> floatingFlag >> dummy;
 
  857             found = (std::abs(parentExcitation*
keV - levelEnergy) < levelTolerance);
 
  858             if (floatingLevel != 
noFloat) {
 
  861               if (!floatMatch) found = 
false;
 
  870           if (inputLine.length() < 72) {
 
  871             tmpStream >> theDecayMode >> dummy >> decayModeTotal;
 
  872             switch (theDecayMode) {
 
  878                 anITChannel->
SetARM(applyARM);
 
  879                 theDecayTable->
Insert(anITChannel);
 
  884                 modeTotalBR[1] = decayModeTotal; 
break;
 
  886                 modeTotalBR[2] = decayModeTotal; 
break;
 
  888                 modeTotalBR[3] = decayModeTotal; 
break;
 
  890                 modeTotalBR[4] = decayModeTotal; 
break;
 
  892                 modeTotalBR[5] = decayModeTotal; 
break;
 
  894                 modeTotalBR[6] = decayModeTotal; 
break;
 
  896                 modeTotalBR[7] = decayModeTotal; 
break;
 
  898                 modeTotalBR[8] = decayModeTotal; 
break;
 
  916                 G4Exception(
"G4RadioactiveDecay::LoadDecayTable()", 
"HAD_RDM_000",
 
  921             if (inputLine.length() < 84) {
 
  922               tmpStream >> theDecayMode >> a >> daughterFloatFlag >> b >> 
c;
 
  925               tmpStream >> theDecayMode >> a >> daughterFloatFlag >> b >> c >> betaType;
 
  934             switch (theDecayMode) {
 
  939                                        daughterFloatLevel, betaType);
 
  942                 theDecayTable->
Insert(aBetaMinusChannel);
 
  951                                       daughterFloatLevel, betaType);
 
  954                 theDecayTable->
Insert(aBetaPlusChannel);
 
  966                 aKECChannel->
SetARM(applyARM);
 
  967                 theDecayTable->
Insert(aKECChannel);
 
  979                 aLECChannel->
SetARM(applyARM);
 
  980                 theDecayTable->
Insert(aLECChannel);
 
  992                 aMECChannel->
SetARM(applyARM);
 
  993                 theDecayTable->
Insert(aMECChannel);
 
 1002                                    daughterFloatLevel);
 
 1005                 theDecayTable->
Insert(anAlphaChannel);
 
 1014                                     daughterFloatLevel);
 
 1017                 theDecayTable->
Insert(aProtonChannel);
 
 1026                                      daughterFloatLevel);
 
 1029                 theDecayTable->
Insert(aNeutronChannel);
 
 1065                 G4Exception(
"G4RadioactiveDecay::LoadDecayTable()", 
"HAD_RDM_000",
 
 1083       theNuclearDecayChannel = 
static_cast<G4NuclearDecay*
>(theChannel);
 
 1086       if (theDecayMode != 
IT) {
 
 1087     theBR = theChannel->
GetBR();
 
 1088     theChannel->
SetBR(theBR*modeTotalBR[theDecayMode]/modeSumBR[theDecayMode]);
 
 1093   DecaySchemeFile.close();
 
 1095   if (!found && levelEnergy > 0) {
 
 1100     anITChannel->
SetARM(applyARM);
 
 1101     theDecayTable->
Insert(anITChannel);
 
 1108 #ifdef G4MULTITHREADED 
 1111   return theDecayTable;
 
 1117   if (Z < 1 || A < 2) 
G4cout << 
"Z and A not valid!" << 
G4endl;
 
 1119   std::ifstream DecaySchemeFile(filename);
 
 1120   if (DecaySchemeFile) {
 
 1121     G4int ID_ion = A*1000 + 
Z;
 
 1122     theUserRadioactiveDataFiles[ID_ion] = filename;
 
 1124     G4cout << 
"The file " << filename << 
" does not exist!" << 
G4endl;
 
 1131                                  G4int theG, std::vector<G4double> theCoefficients, 
 
 1132                                  std::vector<G4double> theTaos)
 
 1136   theDecayRate.
SetZ(theZ);
 
 1137   theDecayRate.
SetA(theA);
 
 1138   theDecayRate.
SetE(theE);
 
 1141   theDecayRate.
SetTaos(theTaos);
 
 1155   theDecayRateVector.clear();
 
 1157   G4int nGeneration = 0;
 
 1159   std::vector<G4double> taos;
 
 1162   std::vector<G4double> Acoeffs;
 
 1165   Acoeffs.push_back(-1.);
 
 1167   G4int A = ((
const G4Ions*)(&theParentNucleus))->GetAtomicMass();
 
 1168   G4int Z = ((
const G4Ions*)(&theParentNucleus))->GetAtomicNumber();
 
 1169   G4double E = ((
const G4Ions*)(&theParentNucleus))->GetExcitationEnergy();
 
 1171   if (tao < 0.) tao = 1e-100;
 
 1172   taos.push_back(tao);
 
 1180   theDecayRateVector.push_back(theDecayRate);
 
 1203   std::vector<G4double> TP;
 
 1204   std::vector<G4double> RP;   
 
 1208   G4int nearestLevelIndex = 0;
 
 1216   const G4int nMode = 9;
 
 1224   ed << 
" While count exceeded " << 
G4endl;
 
 1233     for (j = nS; j < nT; j++) {
 
 1235       ZP = theDecayRateVector[j].GetZ();
 
 1236       AP = theDecayRateVector[j].GetA();
 
 1237       EP = theDecayRateVector[j].GetE();
 
 1238       RP = theDecayRateVector[j].GetDecayRateC();
 
 1239       TP = theDecayRateVector[j].GetTaos();
 
 1241         G4cout << 
"G4RadioactiveDecay::AddDecayRateTable : daughters of (" 
 1242                << ZP << 
", " << AP << 
", " << EP
 
 1243                << 
") are being calculated,  generation = " << nGeneration
 
 1250       aParentNucleus = theIonTable->
GetIon(ZP,AP,EP);
 
 1263       for (
G4int k = 0; k < nMode; k++) brs[k] = 0.0;
 
 1266       for (i = 0; i < parentDecayTable->
entries(); i++) {
 
 1268         theNuclearDecayChannel = 
static_cast<G4NuclearDecay*
>(theChannel);
 
 1273         AD = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicMass();
 
 1274         ZD = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicNumber();  
 
 1280           if (std::abs(daughterExcitation - nearestEnergy) < levelTolerance) {
 
 1284             if (levelManager->
LifeTime(nearestLevelIndex)*
ns >= halflifethreshold){
 
 1286               summedDecayTable->
Insert(theChannel);
 
 1288               brs[theDecayMode] += theChannel->
GetBR();
 
 1291             brs[theDecayMode] += theChannel->
GetBR();
 
 1294           brs[theDecayMode] += theChannel->
GetBR();
 
 1298       brs[2] = brs[2]+brs[3]+brs[4]+brs[5];  
 
 1299       brs[3] = brs[4] =brs[5] =  0.0;
 
 1300       for (i= 0; i<nMode; i++){            
 
 1305             theITChannel = 
new G4ITDecay(aParentNucleus, brs[0], 0.0, 0.0);
 
 1307             summedDecayTable->
Insert(theITChannel);
 
 1315             summedDecayTable->
Insert(theBetaMinusChannel);
 
 1323             summedDecayTable->
Insert(theBetaPlusChannel);
 
 1330             summedDecayTable->
Insert(theAlphaChannel);
 
 1337             summedDecayTable->
Insert(theProtonChannel);
 
 1343             summedDecayTable->
Insert(theNeutronChannel);
 
 1353       for (i = 0; i < summedDecayTable->
entries(); i++){
 
 1355         theNuclearDecayChannel = 
static_cast<G4NuclearDecay*
>(theChannel);
 
 1356         theBR = theChannel->
GetBR();
 
 1361         if (theNuclearDecayChannel->
GetDecayMode() == 
IT && nGeneration == 1) {
 
 1363           A = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicMass();
 
 1364           Z = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicNumber();
 
 1365           theDaughterNucleus=theIonTable->
GetIon(Z,A,0.);
 
 1368             aParentNucleus != theDaughterNucleus) { 
 
 1372           if (parentDecayTable->
entries() ) {
 
 1373             A = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicMass();
 
 1374             Z = ((
const G4Ions*)(theDaughterNucleus))->GetAtomicNumber();
 
 1375             E = ((
const G4Ions*)(theDaughterNucleus))->GetExcitationEnergy();
 
 1378             if (TaoPlus <= 0.)  TaoPlus = 1e-100;
 
 1388             taos.push_back(TaoPlus);  
 
 1394             long double ta1,ta2;
 
 1395             ta2 = (
long double)TaoPlus;
 
 1396             for (k = 0; k < RP.size(); k++){
 
 1397               ta1 = (
long double)TP[k];    
 
 1401                 theRate = ta1/(ta1-ta2);
 
 1403               theRate = theRate * theBR * RP[k];
 
 1404               Acoeffs.push_back(theRate);
 
 1411             long double aRate, aRate1;
 
 1413             for (k = 0; k < RP.size(); k++){
 
 1414               ta1 = (
long double)TP[k];
 
 1418                 aRate = ta2/(ta1-ta2);
 
 1420               aRate = aRate * (
long double)(theBR * RP[k]);
 
 1424             Acoeffs.push_back(theRate);           
 
 1426             theDecayRateVector.push_back(theDecayRate);
 
 1436     if (nS == nT) stable = 
true;
 
 1448   theDecayRateTable.
SetItsRates(theDecayRateVector);
 
 1451   theDecayRateTableVector.push_back(theDecayRateTable);
 
 1463   std::ifstream infile ( filename, std::ios::in );
 
 1466     ed << 
" Could not open file " << filename << 
G4endl; 
 
 1467     G4Exception(
"G4RadioactiveDecay::SetSourceTimeProfile()", 
"HAD_RDM_001",
 
 1476   ed << 
" While count exceeded " << 
G4endl;
 
 1478   while (infile >> bin >> flux ) {  
 
 1486     if (NSourceBin > 99) {
 
 1487       G4Exception(
"G4RadioactiveDecay::SetSourceTimeProfile()", 
"HAD_RDM_002",
 
 1491       SBin[NSourceBin] = bin * 
s;
 
 1492       SProfile[NSourceBin] = flux;
 
 1500     G4cout <<
" Source Timeprofile Nbin = " << NSourceBin <<
G4endl;
 
 1514   std::ifstream infile(filename, std::ios::in);
 
 1515   if (!infile) 
G4Exception(
"G4RadioactiveDecay::SetDecayBias()", 
"HAD_RDM_003",
 
 1522   theRadioactivityTables.clear();
 
 1528   ed << 
" While count exceeded " << 
G4endl;
 
 1530   while (infile >> bin >> flux ) {  
 
 1538     if (NDecayBin > 99) {
 
 1539       G4Exception(
"G4RadioactiveDecay::SetDecayBias()", 
"HAD_RDM_004",
 
 1542       DBin[NDecayBin] = bin * 
s;
 
 1543       DProfile[NDecayBin] = flux;
 
 1545         decayWindows[NDecayBin] = dWindows;
 
 1548         theRadioactivityTables.push_back(rTable);
 
 1552   for ( i = 1; i<= NDecayBin; i++) DProfile[i] += DProfile[i-1];
 
 1553   for ( i = 0; i<= NDecayBin; i++) DProfile[i] /= DProfile[NDecayBin];
 
 1561     G4cout <<
" Decay Bias Profile  Nbin = " << NDecayBin <<
G4endl;
 
 1576   fParticleChangeForRadDecay.
Initialize(theTrack);
 
 1582   if (!isAllVolumesMode) {
 
 1583     if (!std::binary_search(ValidVolumes.begin(), ValidVolumes.end(),
 
 1587         G4cout <<
"G4RadioactiveDecay::DecayIt : " 
 1589                << 
" is not selected for the RDM"<< 
G4endl;
 
 1590         G4cout << 
" There are " << ValidVolumes.size() << 
" volumes" << 
G4endl;
 
 1592         for (
size_t i = 0; i< ValidVolumes.size(); i++)
 
 1593                                   G4cout << ValidVolumes[i] << G4endl;
 
 1602       return &fParticleChangeForRadDecay;
 
 1612       G4cerr << 
"G4RadioactiveDecay::DecayIt : " 
 1614              << 
" is not a valid nucleus for the RDM"<< 
G4endl;
 
 1623     return &fParticleChangeForRadDecay;
 
 1627   if (theDecayTable == 0 || theDecayTable->
entries() == 0) {
 
 1632       G4cerr <<
"G4RadioactiveDecay::DecayIt : decay table not defined  for ";
 
 1642     return &fParticleChangeForRadDecay;
 
 1664       if ( products->
entries() == 1) {
 
 1669         return &fParticleChangeForRadDecay;
 
 1693         if (temptime < 0.) temptime = 0.; 
 
 1694         finalGlobalTime += temptime;
 
 1695         finalLocalTime += temptime;
 
 1698       products->
Boost(ParentEnergy, ParentDirection);
 
 1705         G4cout <<
"G4RadioactiveDecay::DecayIt : Decay vertex :";
 
 1706         G4cout <<
" Time: " <<finalGlobalTime/
ns <<
"[ns]";
 
 1711         G4cout <<
"G4Decay::DecayIt  : decay products in Lab. Frame" <<
G4endl;
 
 1716       for (index=0; index < numberOfSecondaries; index++) {
 
 1718                                          finalGlobalTime, currentPosition);
 
 1730         G4cout << 
"DecayIt: Variance Reduction version " << 
G4endl;
 
 1747       std::vector<G4double> PT;
 
 1748       std::vector<G4double> PR;
 
 1750       long double decayRate;
 
 1754       G4int numberOfSecondaries;
 
 1755       G4int totalNumberOfSecondaries = 0;
 
 1759       std::vector<G4DynamicParticle*> secondaryparticles;
 
 1760       std::vector<G4double> pw;
 
 1761       std::vector<G4double> ptime;
 
 1766       for (
G4int n = 0; 
n < NSplit; 
n++) {
 
 1775           weight1 = 1./DProfile[nbin-1] 
 
 1776                     *(DBin[nbin]-DBin[nbin-1])/NSplit;
 
 1777         } 
else if (nbin > 1) {
 
 1778           weight1 = 1./(DProfile[nbin]-DProfile[nbin-2])
 
 1779                     *(DBin[nbin]-DBin[nbin-1])/NSplit;
 
 1787         for (i = 0; i < theDecayRateVector.size(); i++) {
 
 1788           PZ = theDecayRateVector[i].GetZ();
 
 1789           PA = theDecayRateVector[i].GetA();
 
 1790           PE = theDecayRateVector[i].GetE();
 
 1791           PT = theDecayRateVector[i].GetTaos();
 
 1792           PR = theDecayRateVector[i].GetDecayRateC();
 
 1802           for (j = 0; j < PT.size(); j++) {
 
 1806             decayRate -= PR[j] * (
long double)taotime;
 
 1819           theRadioactivityTables[decayWindows[nbin-1]]->AddIsotope(PZ,PA,PE,weight1*decayRate,theTrack.
GetWeight());
 
 1828           parentNucleus = theIonTable->
GetIon(PZ,PA,PE);
 
 1840             if (theDecayChannel == 0) {
 
 1844                 G4cerr << 
" G4RadioactiveDecay::DoIt : cannot determine decay channel ";
 
 1845                 G4cerr << 
" for this nucleus; decay as if no biasing active ";
 
 1850               tempprods = 
DoDecay(*parentNucleus);  
 
 1855               tempprods = theDecayChannel->DecayIt(tempmass);
 
 1856               weight *= (theDecayChannel->GetBR())*(decayTable->
entries());
 
 1859             tempprods = 
DoDecay(*parentNucleus);
 
 1864           numberOfSecondaries = tempprods->
entries();
 
 1865           currentTime = finalGlobalTime + theDecayTime;
 
 1866           for (index = 0; index < numberOfSecondaries; index++) {
 
 1869               pw.push_back(weight);
 
 1870               ptime.push_back(currentTime);
 
 1871               secondaryparticles.push_back(asecondaryparticle);
 
 1874             else if (((
const G4Ions*)(asecondaryparticle->
GetDefinition()))->GetExcitationEnergy()>0. && weight>0.){
 
 1886       totalNumberOfSecondaries = pw.size();
 
 1888       for (index=0; index < totalNumberOfSecondaries; index++) { 
 
 1890                                          ptime[index], currentPosition);
 
 1910     return &fParticleChangeForRadDecay ;
 
 1932   if (theDecayChannel == 0) {
 
 1936     G4Exception(
"G4RadioactiveDecay::DoDecay", 
"HAD_RDM_013",
 
 1942       G4cerr << 
"G4RadioactiveDecay::DoIt : selected decay channel  addr:";
 
 1959   if (origin == forceDecayDirection) 
return;    
 
 1960   if (180.*
deg == forceDecayHalfAngle) 
return;
 
 1961   if (0 == products || 0 == products->
entries()) 
return;
 
 1980     if (daughterType == electron || daughterType == positron ||
 
 1981     daughterType == neutron || daughterType == gamma ||
 
 1989     G4cout << 
"CollimateDecayProduct for daughter " 
 2002   if (origin == forceDecayDirection) 
return origin; 
 
 2003   if (forceDecayHalfAngle == 180.*
deg) 
return origin;
 
 2008   if (forceDecayHalfAngle > 0.) {
 
 2011     G4double cosMin = std::cos(forceDecayHalfAngle);
 
 2020     G4cout << 
" ChooseCollimationDirection returns " << dir << 
G4endl;
 
 2029                                             std::vector<double>& weights_v,
 
 2030                                             std::vector<double>& times_v,
 
 2031                                             std::vector<G4DynamicParticle*>& secondaries_v)
 
 2033   G4double elevel=((
const G4Ions*)(apartDef))->GetExcitationEnergy();
 
 2035   while (life_time <halflifethreshold && elevel>0.) {
 
 2039     for (
G4int ind = 0; ind < nb_pevapSecondaries; ind++) {
 
 2043           weights_v.push_back(weight);
 
 2044           times_v.push_back(currentTime);
 
 2045           secondaries_v.push_back(a_pevap_secondary);
 
 2050           elevel=((
const G4Ions*)(apartDef))->GetExcitationEnergy();
 
G4DecayProducts * DoDecay(const G4ParticleDefinition &theParticleDef)
 
void SetBR(G4double value)
 
static G4LossTableManager * Instance()
 
G4double GetLocalTime() const 
 
void SelectAVolume(const G4String aVolume)
 
std::map< G4String, G4DecayTable * > DecayTableMap
 
std::ostringstream G4ExceptionDescription
 
G4double GetKineticEnergy() const 
 
G4bool IsRateTableReady(const G4ParticleDefinition &)
 
const G4DynamicParticle * GetDynamicParticle() const 
 
void SetHLThreshold(G4double HLT)
 
void SetARM(G4bool onoff)
 
G4double ConvolveSourceTimeProfile(const G4double, const G4double)
 
std::vector< ExP01TrackerHit * > a
 
void SetTaos(std::vector< G4double > value)
 
G4String strip(G4int strip_Type=trailing, char c=' ')
 
void SetDecayRateC(std::vector< G4double > value)
 
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
 
G4float LifeTime(size_t i) const 
 
G4bool GetPDGStable() const 
 
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
 
static G4Alpha * Definition()
 
const G4ThreeVector & GetPosition() const 
 
void AddSecondary(G4Track *aSecondary)
 
G4TrackStatus GetTrackStatus() const 
 
G4RadioactiveDecayMode GetDecayMode()
 
static G4Electron * Definition()
 
void SetTouchableHandle(const G4TouchableHandle &apValue)
 
G4VDecayChannel * GetDecayChannel(G4int index) const 
 
G4double GetMeanLifeTime(const G4Track &theTrack, G4ForceCondition *condition)
 
G4int GetVerboseLevel() const 
 
void SetMomentumDirection(const G4ThreeVector &aDirection)
 
virtual G4DecayProducts * DecayIt(G4double)
 
G4ParticleDefinition * GetDefinition() const 
 
void SetSourceTimeProfile(G4String filename)
 
G4bool IsApplicable(const G4ParticleDefinition &)
 
void Boost(G4double totalEnergy, const G4ThreeVector &momentumDirection)
 
void SetGeneration(G4int value)
 
static G4Positron * Definition()
 
void ClearNumberOfInteractionLengthLeft()
 
static constexpr double nanosecond
 
#define G4MUTEX_INITIALIZER
 
const G4String & GetParticleName() const 
 
void SetWeight(G4double aValue)
 
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
 
void SetItsRates(G4RadioactiveDecayRates arate)
 
G4double GetTotalMomentum() const 
 
static G4Proton * Definition()
 
void ProposeWeight(G4double finalWeight)
 
virtual void Initialize(const G4Track &)
 
G4IonTable * GetIonTable() const 
 
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
 
G4GLOB_DLL std::ostream G4cout
 
double A(double temperature)
 
void ProposeLocalTime(G4double t)
 
static constexpr double m
 
void SetDecayRate(G4int, G4int, G4double, G4int, std::vector< G4double >, std::vector< G4double >)
 
const G4ThreeVector & GetMomentumDirection() const 
 
void CollimateDecayProduct(G4DynamicParticle *product)
 
G4VDecayChannel * SelectADecayChannel(G4double parentMass=-1.)
 
static constexpr double cm
 
G4DeexPrecoParameters * GetParameters()
 
static G4LogicalVolumeStore * GetInstance()
 
G4ThreeVector ChooseCollimationDirection() const 
 
size_t NumberOfTransitions() const 
 
G4int GetDecayTimeBin(const G4double aDecayTime)
 
void SetProcessSubType(G4int)
 
void SetUseFilesNEW(G4bool)
 
void DeselectAllVolumes()
 
const G4String & GetParticleType() const 
 
const G4ParticleDefinition * GetParticleDefinition() const 
 
G4double GetGlobalTime() const 
 
G4float NearestLevelEnergy(G4double energy, size_t index=0) const 
 
const G4TouchableHandle & GetTouchableHandle() const 
 
G4ParticleDefinition * GetDaughterNucleus()
 
size_t NearestLevelIndex(G4double energy, size_t index=0) const 
 
G4DecayTable * GetDecayTable(const G4ParticleDefinition *)
 
static constexpr double eV
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
void Insert(G4VDecayChannel *aChannel)
 
G4double GetDaughterExcitation()
 
void SetARM(G4bool onoff)
 
G4double GetMeanFreePath(const G4Track &theTrack, G4double previousStepSize, G4ForceCondition *condition)
 
static constexpr double deg
 
G4LogicalVolume * GetLogicalVolume() const 
 
G4double GetPDGMass() const 
 
static G4ParticleTable * GetParticleTable()
 
void GetDecayRateTable(const G4ParticleDefinition &)
 
void SetNumberOfSecondaries(G4int totSecondaries)
 
G4DynamicParticle * PopProducts()
 
G4VParticleChange * pParticleChange
 
void AddDecayRateTable(const G4ParticleDefinition &)
 
G4DecayTable * LoadDecayTable(const G4ParticleDefinition &theParentNucleus)
 
static G4Neutron * Definition()
 
static constexpr double GeV
 
G4VPhysicalVolume * GetVolume() const 
 
G4double GetWeight() const 
 
void SetIonName(G4String name)
 
G4double GetPDGLifeTime() const 
 
G4RadioactiveDecay(const G4String &processName="RadioactiveDecay")
 
static constexpr double MeV
 
static constexpr double pi
 
G4VAtomDeexcitation * AtomDeexcitation()
 
virtual G4DecayProducts * DecayIt(G4double parentMass=-1.0)=0
 
const G4String & GetName() const 
 
void ProposeTrackStatus(G4TrackStatus status)
 
void BuildPhysicsTable(const G4ParticleDefinition &)
 
static constexpr double deg
 
static constexpr double L
 
void SetAnalogueMonteCarlo(G4bool r)
 
static const G4double alpha
 
void DeselectAVolume(const G4String aVolume)
 
static constexpr double keV
 
void AddDeexcitationSpectrumForBiasMode(G4ParticleDefinition *apartDef, G4double weight, G4double currenTime, std::vector< double > &weights_v, std::vector< double > ×_v, std::vector< G4DynamicParticle * > &secondaries_v)
 
void SetE(G4double value)
 
static G4NuclearLevelData * GetInstance()
 
void AddUserDecayDataFile(G4int Z, G4int A, G4String filename)
 
void CollimateDecay(G4DecayProducts *products)
 
void SetDecayBias(G4String filename)
 
static G4Gamma * Definition()
 
void SetGoodForTrackingFlag(G4bool value=true)
 
G4VParticleChange * DecayIt(const G4Track &theTrack, const G4Step &theStep)
 
G4GLOB_DLL std::ostream G4cerr
 
G4int GetBaryonNumber() const