48 G4KaonMinusAbsorptionAtRest::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;
112 if (!IsApplicable(*(stoppedHadron->GetDefinition())))
114 G4cerr <<
"G4KaonMinusAbsorptionAtRest:ERROR, particle must be a Kaon!" <<
G4endl;
125 if (nucleus->GetA_asInt() < 1.5)
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);
161 if (verboseLevel > 1)
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);
184 if (verboseLevel > 1)
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();
205 G4double newZ = nucleus->GetZ_asInt();
206 G4double newA = nucleus->GetA_asInt();
214 nucleus->AddExcitationEnergy(bDiff);
217 G4double energyDeposit = nucleus->GetEnergyDeposit();
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();
246 aParticleChange.Initialize(track);
247 aParticleChange.SetNumberOfSecondaries(
G4int(nAbsorptionProducts+nFragmentationProducts) );
250 for (i = 0; i < nAbsorptionProducts; i++)
251 {aParticleChange.AddSecondary((*absorptionProducts)[i]); }
252 if (absorptionProducts != 0)
delete absorptionProducts;
256 for(i=0; i<nFragmentationProducts; i++)
260 (*fragmentationProducts)[i]->GetTotalEnergy(),
261 (*fragmentationProducts)[i]->GetMomentum());
262 G4double newTime = aParticleChange.GetGlobalTime((*fragmentationProducts)[i]->GetFormationTime());
263 aParticleChange.AddSecondary(aNew, newTime);
264 delete (*fragmentationProducts)[i];
266 if (fragmentationProducts != 0)
delete fragmentationProducts;
270 return &aParticleChange;
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);