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) {