42 #define MAX_SECONDARIES 100 
   46 G4PionMinusAbsorptionAtRest::G4PionMinusAbsorptionAtRest(
const G4String& processName,
 
   98    return ( &particle == pdefPionMinus );
 
  131     G4cout << 
"G4PionMinusAbsorptionAtRestProcess::AtRestGetPhysicalInteractionLength ";
 
  168   for ( 
G4int i1=0; i1 < numberOfElements; i1++ )
 
  170     normalization += theAtomicNumberDensity[i1] ; 
 
  175   for ( 
G4int i2=0; i2 < numberOfElements; i2++ )
 
  177     runningSum += theAtomicNumberDensity[i2]; 
 
  179     if (random<=runningSum)
 
  181       targetCharge = 
G4double((*theElementVector)[i2]->GetZ());
 
  182       targetAtomicMass = (*theElementVector)[i2]->GetN();
 
  185   if (random>runningSum)
 
  187     targetCharge = 
G4double((*theElementVector)[numberOfElements-1]->GetZ());
 
  188     targetAtomicMass = (*theElementVector)[numberOfElements-1]->GetN();
 
  193     G4cout << 
"G4PionMinusAbsorptionAtRest::AtRestDoIt is invoked " <<
G4endl;
 
  201   GenerateSecondaries(); 
 
  205   for ( 
G4int isec = 0; isec < ngkine; isec++ ) {
 
  210     localtime = globalTime + gkin[isec].
GetTOF();
 
  212     G4Track* aNewTrack = 
new G4Track( aNewParticle, localtime*
s, position );
 
  231 void G4PionMinusAbsorptionAtRest::GenerateSecondaries()
 
  246   result.
SetMass( massPionMinus );
 
  251   PionMinusAbsorption(&nopt);
 
  270     for (l = 1; l <= ntot; ++l) {
 
  276     gkin[ngkine] = eve[
index];
 
  277     gkin[ngkine].
SetTOF( eve[index].GetTOF() * 5
e-11 );
 
  296 void G4PionMinusAbsorptionAtRest::PionMinusAbsorption(
G4int *nopt)
 
  302   static G4float ran2, tof1, ekin;
 
  303   static G4float ekin1, ekin2, black;
 
  318   pv[1].
SetMass( massPionMinus );
 
  322   if (targetAtomicMass <= 
G4float(1.5)) {
 
  330     tof1 = std::log(ran) * 
G4float(-25.);
 
  354     black = std::log(targetAtomicMass) * 
G4float(.5);
 
  364     for (i = 1; i <= nbl; ++i) {
 
  369       ekin1 = -
G4double(ekin) * std::log(ran2);
 
  372       pnrat = 
G4float(1.) - targetCharge / targetAtomicMass;
 
  387     black = std::log(targetAtomicMass) * 
G4float(.5);
 
  397     for (i = 1; i <= nbl; ++i) {
 
  402       ekin1 = -
G4double(ekin) * std::log(ran2);
 
  426     tof1 = std::log(ran) * 
G4float(-25.);
 
  428     for (i = 2; i <= 
nt; ++i) {
 
  432     for (i = 3; i <= 
nt; ++i) {
 
  443 void G4PionMinusAbsorptionAtRest::Poisso(
G4float xav, 
G4int *iran)
 
  448   static G4float rr, ran, rrr, ran1;
 
  458     ran1 = xav + ran1 * std::sqrt(xav);
 
  472     for (i = 1; i <= fivex; ++i) {
 
  475         rrr = std::pow(xav, 
G4float(i)) / NFac(i);
 
  479         rrr = std::exp(i * std::log(xav) -
 
  492       p1 = xav * std::exp(-
G4double(xav));
 
  532     for (i = 2; i <= j; ++i) {
 
  541 void G4PionMinusAbsorptionAtRest::Normal(
G4float *ran)
 
  549   for (i = 1; i <= 12; ++i) {