42#define MAX_SECONDARIES 100
46G4KaonMinusAbsorption::G4KaonMinusAbsorption(
const G4String& processName,
49 massKaonMinus(
G4KaonMinus::KaonMinus()->GetPDGMass()/GeV),
50 massGamma(
G4Gamma::Gamma()->GetPDGMass()/GeV),
51 massPionZero(
G4PionZero::PionZero()->GetPDGMass()/GeV),
52 massProton(
G4Proton::Proton()->GetPDGMass()/GeV),
53 massLambda(
G4Lambda::Lambda()->GetPDGMass()/GeV),
102 return ( &particle == pdefKaonMinus );
135 G4cout <<
"G4KaonMinusAbsorptionProcess::AtRestGetPhysicalInteractionLength ";
172 for (
G4int i1=0; i1 < numberOfElements; i1++ )
174 normalization += theAtomicNumberDensity[i1] ;
179 for (
G4int i2=0; i2 < numberOfElements; i2++ )
181 runningSum += theAtomicNumberDensity[i2];
183 if (random<=runningSum)
185 targetCharge =
G4double( ((*theElementVector)[i2])->GetZ());
186 targetAtomicMass = (*theElementVector)[i2]->GetN();
189 if (random>runningSum)
191 targetCharge =
G4double((*theElementVector)[numberOfElements-1]->GetZ());
192 targetAtomicMass = (*theElementVector)[numberOfElements-1]->GetN();
197 G4cout <<
"G4KaonMinusAbsorption::AtRestDoIt is invoked " <<
G4endl;
205 GenerateSecondaries();
209 for (
G4int isec = 0; isec < ngkine; isec++ ) {
212 aNewParticle->
SetMomentum( gkin[isec].GetMomentum() * GeV );
214 localtime = globalTime + gkin[isec].
GetTOF();
235void G4KaonMinusAbsorption::GenerateSecondaries()
250 result.
SetMass( massKaonMinus );
255 KaonMinusAbsorption(&nopt);
274 for (l = 1; l <= ntot; ++l) {
280 gkin[ngkine] = eve[index];
281 gkin[ngkine].
SetTOF( eve[index].GetTOF() * 5e-11 );
300void G4KaonMinusAbsorption::Poisso(
G4float xav,
G4int *iran)
305 static G4float rr, ran, rrr, ran1;
315 ran1 = xav + ran1 * std::sqrt(xav);
329 for (i = 1; i <= fivex; ++i) {
332 rrr = std::pow(xav,
G4float(i)) / NFac(i);
336 rrr = std::exp(i * std::log(xav) -
349 p1 = xav * std::exp(-
G4double(xav));
390 for (i = 2; i <= j; ++i) {
399void G4KaonMinusAbsorption::Normal(
G4float *ran)
407 for (i = 1; i <= 12; ++i) {
414void G4KaonMinusAbsorption::KaonMinusAbsorption(
G4int *nopt)
417 static G4int nt, nbl;
421 static G4float ran2, tof1, ekin, ekin1, ekin2, black;
434 pv[1].
SetMass( massKaonMinus );
438 if (targetAtomicMass <=
G4float(1.5)) {
440 tof1 = std::log(ran) *
G4float(-12.5);
453 pcm = massKaonMinus + massProton - massLambda;
462 pcm = pcm * pcm - massPionZero * massPionZero;
467 pv[2].
SetEnergy( std::sqrt(pcm + massPionZero * massPionZero) );
485 black = std::log(targetAtomicMass) *
G4float(.5);
495 for (i = 1; i <= nbl; ++i) {
500 ekin1 = -
G4double(ekin) * std::log(ran2);
503 pnrat =
G4float(1.) - targetCharge / targetAtomicMass;
518 black = std::log(targetAtomicMass) *
G4float(.5);
528 for (i = 1; i <= nbl; ++i) {
533 ekin1 = -
G4double(ekin) * std::log(ran2);
558 tof1 = std::log(ran) *
G4float(-12.5);
560 for (i = 2; i <= nt; ++i) {
564 for (i = 3; i <= nt; ++i) {
std::vector< G4Element * > G4ElementVector
G4double condition(const G4ErrorSymMatrix &m)
#define G4HadronicDeprecate(name)
G4DLLIMPORT std::ostream G4cout
void DumpInfo(G4int mode=0) const
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetMomentum(const G4ThreeVector &momentum)
void SetEnergy(G4double e)
G4ParticleDefinition * GetParticleDef()
void SetMassAndUpdate(G4double mas)
void SetParticleDef(G4ParticleDefinition *c)
void SetMass(G4double mas)
void SetKineticEnergyAndUpdate(G4double ekin)
void DeRegisterExtraProcess(G4VProcess *)
void RegisterExtraProcess(G4VProcess *)
void RegisterParticleForExtraProcess(G4VProcess *, const G4ParticleDefinition *)
static G4HadronicProcessStore * Instance()
void PrintInfo(const G4ParticleDefinition *)
G4GHEKinematicsVector * GetSecondaryKinematics()
void BuildPhysicsTable(const G4ParticleDefinition &)
G4int GetNumberOfSecondaries()
G4double GetMeanLifeTime(const G4Track &, G4ForceCondition *)
G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
void PreparePhysicsTable(const G4ParticleDefinition &)
G4double AtRestGetPhysicalInteractionLength(const G4Track &, G4ForceCondition *)
G4bool IsApplicable(const G4ParticleDefinition &)
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
const G4double * GetAtomicNumDensityVector() const
const G4String & GetName() const
void AddSecondary(G4Track *aSecondary)
virtual void Initialize(const G4Track &)
G4double GetPDGMass() const
const G4ThreeVector & GetPosition() const
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4double GetGlobalTime() const
G4Material * GetMaterial() const
const G4DynamicParticle * GetDynamicParticle() const
const G4TouchableHandle & GetTouchableHandle() const
void ProposeTrackStatus(G4TrackStatus status)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetNumberOfSecondaries(G4int totSecondaries)
G4double currentInteractionLength
virtual void ResetNumberOfInteractionLengthLeft()
G4ParticleChange aParticleChange
G4double theNumberOfInteractionLengthLeft
void SetProcessSubType(G4int)
const G4String & GetProcessName() const