48G4KaonMinusAbsorptionAtRest::G4KaonMinusAbsorptionAtRest(
const G4String& processName,
61 pionAbsorptionRate = 0.07;
69 rateLambdaZeroPiZero = 0.052;
70 rateSigmaMinusPiPlus = 0.199;
71 rateSigmaPlusPiMinus = 0.446;
72 rateSigmaZeroPiZero = 0.303;
73 rateLambdaZeroPiMinus = 0.568;
74 rateSigmaZeroPiMinus = 0.216;
75 rateSigmaMinusPiZero = 0.216;
82 sigmaPlusLambdaConversionRate = 0.55;
83 sigmaMinusLambdaConversionRate = 0.55;
84 sigmaZeroLambdaConversionRate = 0.55;
114 G4cerr <<
"G4KaonMinusAbsorptionAtRest:ERROR, particle must be a Kaon!" <<
G4endl;
130 }
while(nucleus == 0);
139 if ( ! absorptionProducts ) {
140 G4Exception(
"G4KaonMinusAbsorptionAtRest::AtRestDoIt()",
"HAD_STOP_0001",
149 for(i = 0; i < absorptionProducts->size(); i++)
151 thePion = (*absorptionProducts)[i];
156 if (AbsorbPionByNucleus(thePion))
158 absorptionProducts->erase(absorptionProducts->begin()+i);
162 G4cout <<
"G4KaonMinusAbsorption::AtRestDoIt: Pion absorbed in Nucleus"
170 for (i = 0; i < absorptionProducts->size(); i++)
172 theSigma = (*absorptionProducts)[i];
177 theLambda = SigmaLambdaConversion(theSigma);
179 absorptionProducts->erase(absorptionProducts->begin()+i);
182 absorptionProducts->push_back(theLambda);
185 G4cout <<
"G4KaonMinusAbsorption::AtRestDoIt: SigmaLambdaConversion Done"
196 unsigned int nAbsorptionProducts = 0;
197 if (absorptionProducts != 0) nAbsorptionProducts = absorptionProducts->size();
199 for ( i = 0; i<nAbsorptionProducts; i++)
201 pProducts += (*absorptionProducts)[i]->GetMomentum();
202 productEnergy += (*absorptionProducts)[i]->GetKineticEnergy();
220 G4cout <<
" -- KaonAtRest -- excitation = "
235 if (energyDeposit < 0.)
236 G4Exception(
"G4KaonMinusAbsorptionAtRest::AtRestDoIt()",
"HAD_STOP_0002",
242 unsigned int nFragmentationProducts = 0;
243 if (fragmentationProducts != 0) nFragmentationProducts = fragmentationProducts->size();
250 for (i = 0; i < nAbsorptionProducts; i++)
252 if (absorptionProducts != 0)
delete absorptionProducts;
256 for(i=0; i<nFragmentationProducts; i++)
260 (*fragmentationProducts)[i]->GetTotalEnergy(),
261 (*fragmentationProducts)[i]->GetMomentum());
264 delete (*fragmentationProducts)[i];
266 if (fragmentationProducts != 0)
delete fragmentationProducts;
305 G4double neutronProtonRatio = NeutronHaloFactor(myZ,myN)*carbonRatioNP*(myN-myZ)/myZ;
306 G4double protonProbability = 1./(1.+neutronProtonRatio);
308 if ( ranflat < protonProbability )
318 return absorbingParticleDef;
330 if (Z == 1.)
return 1.389;
331 else if (Z == 2.)
return 1.78;
332 else if (Z == 10.)
return 0.66;
334 return 0.6742+(N-Z)*0.06524;
358 if ( (prob += rateLambdaZeroPiZero) > ranflat)
363 else if ((prob += rateSigmaPlusPiMinus) > ranflat)
368 else if ((prob += rateSigmaMinusPiPlus) > ranflat)
382 if ((prob += rateLambdaZeroPiMinus) > ranflat)
387 else if ((prob += rateSigmaZeroPiMinus) > ranflat)
403 <<
"G4KaonMinusAbsorption::KaonNucleonReaction: "
405 <<
" is not a good nucleon - check G4Nucleus::ReturnTargetParticle()!"
410 if ( products )
delete products;
428 modifiedHadron.
SetMass(stoppedHadron->
GetMass() + nucleonBindingEnergy);
438 producedBaryon, producedMeson);
440 products->push_back(producedBaryon);
441 products->push_back(producedMeson);
446 <<
"G4KaonMinusAbsorption::KaonNucleonReaction: Number of primaries = "
462 if (ranflat < pionAbsorptionRate){
468 return (ranflat < pionAbsorptionRate);
489 sigmaLambdaConversionRate = sigmaPlusLambdaConversionRate;
497 sigmaLambdaConversionRate = sigmaMinusLambdaConversionRate;
505 sigmaLambdaConversionRate = sigmaZeroLambdaConversionRate;
514 sigmaLambdaConversionRate = 0.;
520 if (ranflat >= sigmaLambdaConversionRate)
return 0;
537 &outNucleon, outLambda);
std::vector< G4DynamicParticle * > G4DynamicParticleVector
#define G4HadronicDeprecate(name)
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetMass(G4double mass)
G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
void SetMomentum(const G4ThreeVector &momentum)
G4ThreeVector GetMomentum() const
void DeRegisterExtraProcess(G4VProcess *)
void RegisterExtraProcess(G4VProcess *)
void RegisterParticleForExtraProcess(G4VProcess *, const G4ParticleDefinition *)
static G4HadronicProcessStore * Instance()
void PrintInfo(const G4ParticleDefinition *)
void BuildPhysicsTable(const G4ParticleDefinition &)
G4bool IsApplicable(const G4ParticleDefinition &particle)
G4VParticleChange * AtRestDoIt(const G4Track &aTrack, const G4Step &aStep)
void PreparePhysicsTable(const G4ParticleDefinition &)
~G4KaonMinusAbsorptionAtRest()
static G4Lambda * Lambda()
static G4Neutron * Neutron()
static G4double GetBindingEnergy(const G4int A, const G4int Z)
void AddExcitationEnergy(G4double anEnergy)
G4double GetEnergyDeposit()
void SetParameters(const G4double A, const G4double Z)
void AddMomentum(const G4ThreeVector aMomentum)
G4ThreeVector GetFermiMomentum()
void AddSecondary(G4Track *aSecondary)
virtual void Initialize(const G4Track &)
G4double GetGlobalTime(G4double timeDelay=0.0) const
G4double GetPDGCharge() const
const G4String & GetParticleName() const
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4PionZero * PionZero()
static G4Proton * Proton()
void TwoBodyScattering(const G4DynamicParticle *pIn1, const G4DynamicParticle *pIn2, G4DynamicParticle *pOut1, G4DynamicParticle *pOut2)
static G4SigmaMinus * SigmaMinus()
static G4SigmaPlus * SigmaPlus()
static G4SigmaZero * SigmaZero()
G4ReactionProductVector * DoBreakUp(G4double A, G4double Z, G4double excitation, const G4ThreeVector &p) const
G4Material * GetMaterial() const
const G4DynamicParticle * GetDynamicParticle() const
void ProposeTrackStatus(G4TrackStatus status)
void SetNumberOfSecondaries(G4int totSecondaries)
G4ParticleChange aParticleChange
void SetProcessSubType(G4int)
const G4String & GetProcessName() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)