97   if (vecLen == 0) 
return false;
 
  106   G4bool veryForward = 
false;
 
  113   G4double centerofmassEnergy = std::sqrt( mOriginal*mOriginal +
 
  114                                       targetMass*targetMass +
 
  115                                       2.0*targetMass*etOriginal );  
 
  122   for (i=0; i<vecLen; ++i) {
 
  125     *vec[itemp] = *vec[i];
 
  129   if (currentMass == 0.0 && targetMass == 0.0) {
 
  135     currentParticle = *vec[0];
 
  137     targetParticle = *vec[1];
 
  139     for( i=0; i<(vecLen-2); ++i )*vec[i] = *vec[i+2];
 
  142     temp = vec[vecLen-2];
 
  147     incidentHasChanged = 
true;
 
  148     targetHasChanged = 
true;
 
  160     currentParticle = targetParticle;
 
  161     targetParticle = temp;
 
  162     incidentHasChanged = 
true;
 
  163     targetHasChanged = 
true;
 
  168         0.312+0.200*
G4Log(
G4Log(centerofmassEnergy*centerofmassEnergy))+
 
  169         std::pow(centerofmassEnergy*centerofmassEnergy,1.5)/6000.0 );
 
  171   G4double freeEnergy = centerofmassEnergy-currentMass-targetMass;
 
  172   G4double forwardEnergy = freeEnergy/2.;
 
  173   G4int forwardCount = 1;         
 
  175   G4double backwardEnergy = freeEnergy/2.;
 
  176   G4int backwardCount = 1;        
 
  179     if(currentParticle.
GetSide()==-1)
 
  181       forwardEnergy += currentMass;
 
  183       backwardEnergy -= currentMass;
 
  186     if(targetParticle.
GetSide()!=-1)
 
  188       backwardEnergy += targetMass;
 
  190       forwardEnergy -= targetMass;
 
  195   for (i=0; i<vecLen; ++i) {
 
  196     if( vec[i]->GetSide() == -1 )
 
  199       backwardEnergy -= vec[i]->GetMass()/
GeV;
 
  202       forwardEnergy -= vec[i]->GetMass()/
GeV;
 
  210   if (backwardEnergy < 0.0) {
 
  211     for (i = 0; i < vecLen; ++i) {
 
  212       if (vec[i]->GetSide() == -1) { 
 
  213         backwardEnergy += vec[i]->GetMass()/
GeV;
 
  216         forwardEnergy -= vec[i]->GetMass()/
GeV;
 
  218         if (backwardEnergy > 0.0) 
break;
 
  223   if (forwardEnergy < 0.0) {
 
  224     for (i = 0; i < vecLen; ++i) {
 
  225       if (vec[i]->GetSide() == 1) { 
 
  226         forwardEnergy += vec[i]->GetMass()/
GeV;
 
  229         backwardEnergy -= vec[i]->GetMass()/
GeV;
 
  231         if (forwardEnergy > 0.0) 
break;
 
  239   if (forwardEnergy > 0.0 && backwardEnergy < 0.0) {
 
  240     forwardEnergy += backwardEnergy;
 
  245   if (forwardEnergy + backwardEnergy < 0.0) 
return false;
 
  263     xtarg = afc * (a13-1.0) * (2.0*backwardCount+vecLen+2)/2.0;
 
  265     xtarg = afc * (a13-1.0) * (2.0*backwardCount);
 
  267   if( xtarg <= 0.0 )xtarg = 0.01;
 
  271   if(atomicWeight<1.0001) nuclearExcitationCount = 0;
 
  272   G4int extraNucleonCount = 0;
 
  275   if (nuclearExcitationCount > 0) {
 
  276     const G4double nucsup[] = { 1.00, 0.7, 0.5, 0.4, 0.35, 0.3 };
 
  277     const G4double psup[] = { 3., 6., 20., 50., 100., 1000. };
 
  278     G4int momentumBin = 0;
 
  282     ed << 
" While count exceeded " << 
G4endl;
 
  283     while( (momentumBin < 6) &&
 
  293     momentumBin = 
std::min( 5, momentumBin );
 
  299     for (i = 0; i < nuclearExcitationCount; ++i) {
 
  323         else if( ran < 0.6819 )
 
  346   for (i = 0; i < 8; ++i) pseudoParticle[i].SetZero();
 
  349   pseudoParticle[0].
SetMomentum( 0.0, 0.0, pOriginal*GeV );
 
  351    std::sqrt( pOriginal*pOriginal + mOriginal*mOriginal )*GeV );
 
  353   pseudoParticle[1].
SetMass(protonMass);     
 
  356   pseudoParticle[3].
SetMass(protonMass*(1+extraNucleonCount) );
 
  357   pseudoParticle[3].
SetTotalEnergy(protonMass*(1+extraNucleonCount) );
 
  359   pseudoParticle[2] = pseudoParticle[0] + pseudoParticle[1];
 
  360   pseudoParticle[3] = pseudoParticle[3] + pseudoParticle[0];
 
  362   pseudoParticle[0].
Lorentz( pseudoParticle[0], pseudoParticle[2] );
 
  363   pseudoParticle[1].Lorentz( pseudoParticle[1], pseudoParticle[2] );
 
  369   G4int    innerCounter, outerCounter;
 
  370   G4bool   eliminateThisParticle, resetEnergies, constantCrossSection;
 
  380   G4int backwardNucleonCount = 0;  
 
  381   G4double totalEnergy, kineticEnergy, vecMass;
 
  384   for (i = vecLen-1; i >= 0; --i) {
 
  386     if (vec[i]->GetNewlyAdded()) {         
 
  387       if (vec[i]->GetSide() == -2) {       
 
  388         if (backwardNucleonCount < 18) {
 
  389           if (vec[i]->GetDefinition()->GetParticleSubType() == 
"pi") {
 
  390             for (
G4int j = 0; j < vecLen; j++) 
delete vec[j];
 
  393             "G4RPGFragmentation::ReactionStage : a pion has been counted as a backward nucleon");
 
  396           ++backwardNucleonCount;
 
  407     vecMass = vec[i]->GetMass()/
GeV;
 
  410     if (vec[i]->GetSide() == -2) {  
 
  412       pt = std::sqrt( std::pow( ran, 1.2 ) );
 
  415       if (vec[i]->GetDefinition()->GetParticleSubType() == 
"pi") {
 
  417         pt = std::sqrt( std::pow( ran, 1.7 ) );
 
  418       } 
else if (vec[i]->GetDefinition()->GetParticleSubType() == 
"kaon") {
 
  420         pt = std::sqrt( std::pow( ran, 1.7 ) );
 
  423         pt = std::sqrt( std::pow( ran, 1.5 ) );
 
  429     vec[i]->SetMomentum( pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV );
 
  430     if (vec[i]->GetSide() > 0)
 
  431       et = pseudoParticle[0].GetTotalEnergy()/
GeV;
 
  433       et = pseudoParticle[1].GetTotalEnergy()/
GeV;
 
  439     eliminateThisParticle = 
true;
 
  440     resetEnergies = 
true;
 
  443     while (++outerCounter < 3) {  
 
  447       vec[i]->SetMomentum( pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV );
 
  451       while (++innerCounter < 7) {  
 
  458         ed << 
" While count exceeded " << 
G4endl; 
 
  459         while( ( ran > dndl[l] ) && ( l < 19 ) ) { 
 
  469         if (vec[i]->GetSide() < 0) x *= -1.;
 
  470         vec[i]->SetMomentum( x*et*GeV );              
 
  471         totalEnergy = std::sqrt( x*et*x*et + pt*pt + vecMass*vecMass );
 
  472         vec[i]->SetTotalEnergy( totalEnergy*GeV );
 
  473         kineticEnergy = vec[i]->GetKineticEnergy()/
GeV;
 
  475         if (vec[i]->GetSide() > 0) {                  
 
  476           if( (forwardKinetic+kineticEnergy) < 0.95*forwardEnergy ) {
 
  479             pseudoParticle[4] = pseudoParticle[4] + (*vec[i]);
 
  480             forwardKinetic += kineticEnergy;
 
  482             eliminateThisParticle = 
false;     
 
  483             resetEnergies = 
false;
 
  486           if( innerCounter > 5 )
break;         
 
  487           if( backwardEnergy >= vecMass )      
 
  490             forwardEnergy += vecMass;
 
  491             backwardEnergy -= vecMass;
 
  499           if (extraNucleonCount < 20) xxx = 0.95+0.05*extraNucleonCount/20.0;
 
  501           if ((backwardKinetic+kineticEnergy) < xxx*backwardEnergy) {
 
  502             pseudoParticle[5] = pseudoParticle[5] + (*vec[i]);
 
  503             backwardKinetic += kineticEnergy;
 
  505             eliminateThisParticle = 
false;     
 
  506             resetEnergies = 
false;
 
  509           if (innerCounter > 5) 
break;         
 
  510           if (forwardEnergy >= vecMass) {      
 
  512             forwardEnergy -= vecMass;
 
  513             backwardEnergy += vecMass;
 
  518         vec[i]->SetMomentum( momentum.
x() * 0.9, momentum.
y() * 0.9 );
 
  529         ReduceEnergiesOfSecondaries(i+1, forwardKinetic, backwardKinetic,
 
  531                                     pseudoParticle[4], pseudoParticle[5],
 
  536     if (eliminateThisParticle && vec[i]->GetMayBeKilled()) {
 
  539       if (vec[i]->GetSide() > 0) {
 
  541         forwardEnergy += vecMass;
 
  544         if (vec[i]->GetSide() == -2) {
 
  546           extraNucleonMass -= vecMass;
 
  548           backwardEnergy += vecMass;
 
  552       for( 
G4int j=i; j<(vecLen-1); ++j )*vec[j] = *vec[j+1];    
 
  558         G4cout << 
" FALSE RETURN DUE TO ENERGY BALANCE " << 
G4endl;
 
  566   G4double forwardKEDiff = forwardEnergy - forwardKinetic;
 
  567   G4double backwardKEDiff = backwardEnergy - backwardKinetic;
 
  569   if (forwardKEDiff < 0.0 || backwardKEDiff < 0.0) {
 
  570     ReduceEnergiesOfSecondaries(0, forwardKinetic, backwardKinetic,
 
  572                                 pseudoParticle[4], pseudoParticle[5],
 
  575     forwardKEDiff = forwardEnergy - forwardKinetic;
 
  576     backwardKEDiff = backwardEnergy - backwardKinetic;
 
  577     if (backwardKEDiff < 0.0) {
 
  578       if (forwardKEDiff + backwardKEDiff > 0.0) {
 
  579         backwardEnergy = backwardKinetic;
 
  580         forwardEnergy += backwardKEDiff;
 
  581         forwardKEDiff = forwardEnergy - forwardKinetic;
 
  582         backwardKEDiff = 0.0;
 
  584         G4cout << 
" False return due to insufficient backward energy " << 
G4endl; 
 
  589     if (forwardKEDiff < 0.0) {
 
  590       if (forwardKEDiff + backwardKEDiff > 0.0) {
 
  591         forwardEnergy = forwardKinetic;
 
  592         backwardEnergy += forwardKEDiff;
 
  593         backwardKEDiff = backwardEnergy - backwardKinetic;
 
  596         G4cout << 
" False return due to insufficient forward energy " << 
G4endl; 
 
  610     pt = std::sqrt( std::pow( ran/6.0, 1.7 ) );
 
  613     pt = std::sqrt( std::pow( ran/5.0, 1.4 ) );
 
  616     pt = std::sqrt( std::pow( ran/4.0, 1.2 ) );
 
  620   currentParticle.
SetMomentum(pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV);
 
  621   et = pseudoParticle[0].GetTotalEnergy()/
GeV;
 
  632   ed << 
" While count exceeded " << 
G4endl;
 
  633   while( ( ran > dndl[l] ) && ( l < 19 ) ) { 
 
  645   if (forwardEnergy < forwardKinetic) {
 
  646     totalEnergy = vecMass + 0.04*std::fabs(
normal());
 
  647     G4cout << 
" Not enough forward energy: forwardEnergy = "  
  648            << forwardEnergy << 
" forwardKinetic = "   
  649            << forwardKinetic << 
" total energy left = "  
  650            << backwardKEDiff + forwardKEDiff << 
G4endl;
 
  652     totalEnergy = vecMass + forwardEnergy - forwardKinetic;
 
  653     forwardKinetic = forwardEnergy;
 
  656   pp = std::sqrt(std::abs( totalEnergy*totalEnergy - vecMass*vecMass) )*
GeV;
 
  659   if (pp1 < 1.0e-6*GeV) {
 
  665   pseudoParticle[4] = pseudoParticle[4] + currentParticle;
 
  671   if (backwardNucleonCount < 18) {
 
  673     ++backwardNucleonCount;
 
  682     pt = 
std::max( 0.001, std::sqrt( std::pow( ran/4.0, 1.2 ) ) );
 
  684     targetParticle.
SetMomentum(pt*std::cos(phi)*GeV, pt*std::sin(phi)*GeV);
 
  685     et = pseudoParticle[1].GetTotalEnergy()/
GeV;
 
  688     G4bool marginalEnergy = 
true;
 
  691     if( extraNucleonCount < 20 ) xxx = 0.95+0.05*extraNucleonCount/20.0;
 
  694     while (++outerCounter < 4) {  
 
  697       for (innerCounter = 0; innerCounter < 6; innerCounter++) {
 
  703         eda << 
" While count exceeded " << 
G4endl; 
 
  704         while( ( ran > dndl[l] ) && ( l < 19 ) ) { 
 
  715         totalEnergy = std::sqrt(x*et*x*et + pt*pt + vecMass*vecMass);
 
  718         if ((backwardKinetic+totalEnergy-vecMass) < xxx*backwardEnergy) {
 
  719           pseudoParticle[5] = pseudoParticle[5] + targetParticle;
 
  720           backwardKinetic += totalEnergy - vecMass;
 
  722           marginalEnergy = 
false;
 
  726         targetParticle.
SetMomentum(momentum.
x() * 0.9, momentum.
y() * 0.9);
 
  732     if (marginalEnergy) {
 
  733       G4cout << 
" Extra backward kinetic energy = " 
  734              << 0.999*backwardEnergy - backwardKinetic << 
G4endl;
 
  735       totalEnergy = vecMass + 0.999*backwardEnergy - backwardKinetic;
 
  737       pp = std::sqrt(std::abs(totalEnergy*totalEnergy - vecMass*vecMass) )*
GeV;
 
  738       targetParticle.
SetMomentum(momentum.
x()/0.9, momentum.
y()/0.9);
 
  741       pseudoParticle[5] = pseudoParticle[5] + targetParticle;
 
  742       backwardKinetic = 0.999*backwardEnergy;
 
  747   if (backwardEnergy < backwardKinetic) 
 
  748     G4cout << 
" Backward Edif = " << backwardEnergy - backwardKinetic << 
G4endl;
 
  749   if (forwardEnergy != forwardKinetic) 
 
  750     G4cout << 
" Forward Edif = " << forwardEnergy - forwardKinetic << 
G4endl;
 
  760   pseudoParticle[6].Lorentz( pseudoParticle[3], pseudoParticle[2] );
 
  761   pseudoParticle[6] = pseudoParticle[6] - pseudoParticle[4];
 
  762   pseudoParticle[6] = pseudoParticle[6] - pseudoParticle[5];
 
  764   if (backwardNucleonCount == 1) {   
 
  769       std::min(backwardEnergy-backwardKinetic, centerofmassEnergy/2.0-protonMass/GeV);
 
  771     if( ekin < 0.04 )ekin = 0.04 * std::fabs( 
normal() );
 
  773     totalEnergy = ekin + vecMass;
 
  775     pp = std::sqrt(std::abs(totalEnergy*totalEnergy - vecMass*vecMass) )*
GeV;
 
  776     pp1 = pseudoParticle[6].GetMomentum().mag();
 
  777     if (pp1 < 1.0e-6*GeV) { 
 
  781       targetParticle.
SetMomentum( pseudoParticle[6].GetMomentum() * (pp/pp1));
 
  783     pseudoParticle[5] = pseudoParticle[5] + targetParticle;
 
  785   } 
else if (backwardNucleonCount > 1) {
 
  789     if (backwardNucleonCount < 5) tempCount = backwardNucleonCount;
 
  793     if (targetParticle.
GetSide() == -3) 
 
  795     for (i = 0; i < vecLen; ++i)
 
  796       if (vec[i]->GetSide() == -3) clusterMass += vec[i]->GetMass()/
GeV;
 
  797     clusterMass += backwardEnergy - backwardKinetic;
 
  799     totalEnergy = pseudoParticle[6].GetTotalEnergy()/
GeV;
 
  800     pseudoParticle[6].SetMass(clusterMass*GeV);
 
  802     pp = std::sqrt(std::abs(totalEnergy*totalEnergy - 
 
  803                             clusterMass*clusterMass) )*
GeV;
 
  804     pp1 = pseudoParticle[6].GetMomentum().mag();
 
  805     if (pp1 < 1.0e-6*GeV) {
 
  807       pseudoParticle[6].SetMomentum(iso.
x(), iso.
y(), iso.
z());
 
  809       pseudoParticle[6].SetMomentum(pseudoParticle[6].GetMomentum() * (-pp/pp1));
 
  812     std::vector<G4ReactionProduct*> tempList;  
 
  813     if (targetParticle.
GetSide() == -3) tempList.push_back(&targetParticle);
 
  814     for (i = 0; i < vecLen; ++i)
 
  815       if (vec[i]->GetSide() == -3) tempList.push_back(vec[i]);
 
  817     constantCrossSection = 
true;
 
  819     if (tempList.size() > 1) {
 
  822                                 constantCrossSection, tempList);
 
  824       if (targetParticle.
GetSide() == -3) {
 
  825         targetParticle = *tempList[0];
 
  826         targetParticle.
Lorentz(targetParticle, pseudoParticle[6]);
 
  830       for (i = 0; i < vecLen; ++i) {
 
  831         if (vec[i]->GetSide() == -3) {
 
  832           *vec[i] = *tempList[n_entry];
 
  833           vec[i]->Lorentz(*vec[i], pseudoParticle[6]);
 
  840   if (vecLen == 0) 
return false;  
 
  844   currentParticle.Lorentz( currentParticle, pseudoParticle[1] );
 
  845   targetParticle.
Lorentz( targetParticle, pseudoParticle[1] );    
 
  846   for (i = 0; i < vecLen; ++i) vec[i]->Lorentz(*vec[i], pseudoParticle[1]);
 
  856   G4bool leadingStrangeParticleHasChanged = 
true;
 
  859     if (currentParticle.GetDefinition() == leadingStrangeParticle.
GetDefinition())
 
  860       leadingStrangeParticleHasChanged = 
false;
 
  861     if (leadingStrangeParticleHasChanged &&
 
  863       leadingStrangeParticleHasChanged = 
false;
 
  864     if( leadingStrangeParticleHasChanged )
 
  866       for( i=0; i<vecLen; i++ )
 
  868         if( vec[i]->GetDefinition() == leadingStrangeParticle.
GetDefinition() )
 
  870           leadingStrangeParticleHasChanged = 
false;
 
  875     if( leadingStrangeParticleHasChanged )
 
  886       if( (leadTest&&targetTest) || !(leadTest||targetTest) ) 
 
  889         targetHasChanged = 
true;
 
  893         currentParticle.SetDefinitionAndUpdateE( leadingStrangeParticle.
GetDefinition() );
 
  894         incidentHasChanged = 
false;
 
  902   std::pair<G4int, G4int> finalStateNucleons = 
 
  905   G4int protonsInFinalState = finalStateNucleons.first;
 
  906   G4int neutronsInFinalState = finalStateNucleons.second;
 
  908   G4int numberofFinalStateNucleons = 
 
  909     protonsInFinalState + neutronsInFinalState;
 
  911   if (currentParticle.GetDefinition()->GetBaryonNumber() == 1 &&
 
  915     numberofFinalStateNucleons++;
 
  917   numberofFinalStateNucleons = 
std::max(1, numberofFinalStateNucleons);
 
  924   pseudoParticle[3].SetMomentum( 0.0, 0.0, pOriginal*GeV );
 
  925   pseudoParticle[3].SetMass( mOriginal*GeV );
 
  926   pseudoParticle[3].SetTotalEnergy(
 
  927    std::sqrt( pOriginal*pOriginal + mOriginal*mOriginal )*GeV );
 
  932   if(numberofFinalStateNucleons == 1) diff = 0;
 
  933   pseudoParticle[4].SetMomentum( 0.0, 0.0, 0.0 );
 
  934   pseudoParticle[4].SetMass( protonMass*(numberofFinalStateNucleons-diff) );
 
  935   pseudoParticle[4].SetTotalEnergy( protonMass*(numberofFinalStateNucleons-diff) );
 
  938     pseudoParticle[3].GetTotalEnergy() + pseudoParticle[4].GetTotalEnergy() -
 
  939     currentParticle.GetMass() - targetParticle.
GetMass();
 
  940   for (i = 0; i < vecLen; ++i) theoreticalKinetic -= vec[i]->GetMass();
 
  944   for (i = 0; i < vecLen; ++i) 
 
  945     simulatedKinetic += vec[i]->GetKineticEnergy();
 
  947   pseudoParticle[5] = pseudoParticle[3] + pseudoParticle[4];
 
  948   pseudoParticle[3].Lorentz( pseudoParticle[3], pseudoParticle[5] );
 
  949   pseudoParticle[4].Lorentz( pseudoParticle[4], pseudoParticle[5] );
 
  951   pseudoParticle[7].SetZero();
 
  952   pseudoParticle[7] = pseudoParticle[7] + currentParticle;
 
  953   pseudoParticle[7] = pseudoParticle[7] + targetParticle;
 
  954   for (i = 0; i < vecLen; ++i)
 
  955     pseudoParticle[7] = pseudoParticle[7] + *vec[i];
 
 1000   if (simulatedKinetic != 0.0) {
 
 1001     wgt = theoreticalKinetic/simulatedKinetic;
 
 1002     theoreticalKinetic = currentParticle.GetKineticEnergy() * wgt;
 
 1003     simulatedKinetic = theoreticalKinetic;
 
 1004     currentParticle.SetKineticEnergy(theoreticalKinetic);
 
 1005     pp = currentParticle.GetTotalMomentum();
 
 1006     pp1 = currentParticle.GetMomentum().mag();
 
 1007     if (pp1 < 1.0e-6*GeV) {
 
 1009       currentParticle.SetMomentum( iso.
x(), iso.
y(), iso.
z() );
 
 1011       currentParticle.SetMomentum(currentParticle.GetMomentum() * (pp/pp1));
 
 1014     theoreticalKinetic = targetParticle.GetKineticEnergy() * wgt;
 
 1015     targetParticle.SetKineticEnergy(theoreticalKinetic);
 
 1016     simulatedKinetic += theoreticalKinetic;
 
 1017     pp = targetParticle.GetTotalMomentum();
 
 1018     pp1 = targetParticle.GetMomentum().mag();
 
 1020     if (pp1 < 1.0e-6*GeV) {
 
 1022       targetParticle.SetMomentum(iso.
x(), iso.
y(), iso.
z() );
 
 1024       targetParticle.SetMomentum(targetParticle.GetMomentum() * (pp/pp1) );
 
 1027     for (i = 0; i < vecLen; ++i ) {
 
 1028       theoreticalKinetic = vec[i]->GetKineticEnergy() * wgt;
 
 1029       simulatedKinetic += theoreticalKinetic;
 
 1030       vec[i]->SetKineticEnergy(theoreticalKinetic);
 
 1031       pp = vec[i]->GetTotalMomentum();
 
 1032       pp1 = vec[i]->GetMomentum().mag();
 
 1033       if( pp1 < 1.0e-6*GeV ) {
 
 1035         vec[i]->SetMomentum(iso.
x(), iso.
y(), iso.
z() );
 
 1037         vec[i]->SetMomentum(vec[i]->GetMomentum() * (pp/pp1) );
 
 1050   if( atomicWeight >= 1.5 )
 
 1090     if (epnb > pnCutOff)
 
 1092       npnb = 
G4Poisson((1.5+1.25*numberofFinalStateNucleons)*epnb/(epnb+edta));
 
 1093       if (numberofFinalStateNucleons + npnb > atomicWeight)
 
 1094         npnb = 
G4int(atomicWeight+0.00001 - numberofFinalStateNucleons);
 
 1095       npnb = 
std::min( npnb, 127-vecLen );
 
 1097     if( edta >= dtaCutOff )
 
 1099       ndta = 
G4Poisson((1.5+1.25*numberofFinalStateNucleons)*edta/(epnb+edta));
 
 1100       ndta = 
std::min( ndta, 127-vecLen );
 
 1102     if (npnb == 0 && ndta == 0) npnb = 1;
 
 1105                            PinNucleus, NinNucleus, targetNucleus,
 
 1116   if( (atomicWeight >= 1.5) && (atomicWeight <= 230.0) && (ekOriginal <= 0.2) )
 
 1117     currentParticle.SetTOF( 
 
 1120     currentParticle.SetTOF( 1.0 );
 
void FragmentationIntegral(G4double, G4double, G4double, G4double)
 
static G4Pow * GetInstance()
 
void SetElement(G4int anIndex, Type *anElement)
 
G4long G4Poisson(G4double mean)
 
G4double GetTotalMomentum() const 
 
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
 
std::ostringstream G4ExceptionDescription
 
G4double GetAnnihilationPNBlackTrackEnergy() const 
 
void SetKineticEnergy(const G4double en)
 
void SetMomentum(const G4double x, const G4double y, const G4double z)
 
void SetSide(const G4int sid)
 
G4double GetDTABlackTrackEnergy() const 
 
const G4String & GetParticleSubType() const 
 
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
 
static constexpr double twopi
 
void SetNewlyAdded(const G4bool f)
 
std::pair< G4int, G4int > GetFinalStateNucleons(const G4DynamicParticle *originalTarget, const G4FastVector< G4ReactionProduct, 256 > &vec, const G4int &vecLen)
 
const G4ParticleDefinition * GetDefinition() const 
 
void SetMass(const G4double mas)
 
G4GLOB_DLL std::ostream G4cout
 
const G4ParticleDefinition * GetDefinition() const 
 
G4double GetAnnihilationDTABlackTrackEnergy() const 
 
void SetTotalEnergy(const G4double en)
 
static G4Proton * Proton()
 
static G4PionPlus * PionPlus()
 
void SetDefinitionAndUpdateE(const G4ParticleDefinition *aParticleDefinition)
 
static G4Neutron * Neutron()
 
static G4PionZero * PionZero()
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
G4double GetKineticEnergy() const 
 
G4double G4Log(G4double x)
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
G4double GetTotalEnergy() const 
 
G4double GenerateNBodyEventT(const G4double totalEnergy, const G4bool constantCrossSection, std::vector< G4ReactionProduct * > &list)
 
G4double GetPDGMass() const 
 
G4double A13(G4double A) const 
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
static G4PionMinus * PionMinus()
 
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
 
static constexpr double GeV
 
G4ThreeVector GetMomentum() const 
 
void AddBlackTrackParticles(const G4double, const G4int, const G4double, const G4int, const G4ReactionProduct &, G4int, G4int, const G4Nucleus &, G4FastVector< G4ReactionProduct, 256 > &, G4int &)
 
static G4Lambda * Lambda()
 
G4ThreeVector Isotropic(const G4double &)
 
G4double GetPNBlackTrackEnergy() const 
 
G4int GetBaryonNumber() const