59 lowEnergyRecoilLimit = 100.*
keV;
60 lowestEnergyLimit = 1.*
MeV;
106 if(ekin <= lowestEnergyLimit || A < 3) {
115 G4cout <<
"G4ChargeExchange::DoIt: Incident particle plab="
116 << plab/
GeV <<
" GeV/c "
117 <<
" ekin(MeV) = " << ekin/
MeV <<
" "
127 <<
" PDGcode= " << projPDG <<
" on nucleus Z= " << Z
128 <<
" A= " << A <<
" N= " << N
143 G4bool theHyperon =
false;
147 if(theParticle == theProton) {
148 theSecondary = theNeutron;
150 }
else if(theParticle == theNeutron) {
151 theSecondary = theProton;
153 }
else if(theParticle == thePiPlus) {
154 theSecondary = thePiZero;
156 }
else if(theParticle == thePiMinus) {
157 theSecondary = thePiZero;
159 }
else if(theParticle == theKPlus) {
161 else theSecondary = theK0L;
163 }
else if(theParticle == theKMinus) {
165 else theSecondary = theK0L;
167 }
else if(theParticle == theK0S || theParticle == theK0L) {
169 theSecondary = theKPlus;
172 theSecondary = theKMinus;
175 }
else if(theParticle == theANeutron) {
176 theSecondary = theAProton;
178 }
else if(theParticle == theAProton) {
179 theSecondary = theANeutron;
181 }
else if(theParticle == theL) {
185 theSecondary = theS0;
186 }
else if (x < 0.4) {
187 theSecondary = theSPlus;
189 }
else if (x < 0.6) {
190 theSecondary = theProton;
194 }
else if (x < 0.8) {
195 theSecondary = theProton;
200 theSecondary = theNeutron;
201 theRecoil = theSPlus;
207 theSecondary = theS0;
208 }
else if (x < 0.4) {
209 theSecondary = theSMinus;
211 }
else if (x < 0.6) {
212 theSecondary = theNeutron;
216 }
else if (x < 0.8) {
217 theSecondary = theNeutron;
222 theSecondary = theProton;
223 theRecoil = theSMinus;
230 if (Z == 1 && A == 2) theDef = theD;
231 else if (Z == 1 && A == 3) theDef = theT;
232 else if (Z == 2 && A == 3) theDef = theHe3;
233 else if (Z == 2 && A == 4) theDef = theA;
242 if(theRecoil) { m21 += theRecoil->
GetPDGMass(); }
243 else { theRecoil = theDef; }
248 if(etot < m11 + m21) {
255 G4double e1 = 0.5*etot*(1.0 - (m21*m21 - m11*m11)/(etot*etot));
257 G4double ptot = std::sqrt(e1*e1 - m11*m11);
265 G4cout <<
"## G4ChargeExchange t= " << t <<
" tmax= " << tmax
266 <<
" ptot= " << ptot <<
G4endl;
271 if(std::abs(cost) > 1.0) cost = 1.0;
272 G4double sint = std::sqrt((1.0-cost)*(1.0+cost));
277 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
299 }
else if(erec > lowEnergyRecoilLimit) {
303 if(erec < 0.0) erec = 0.0;
330 const G4int maxNumberOfLoops = 10000;
331 G4int loopCounter = 0;
334 }
while ( (t > tmax) &&
335 ++loopCounter < maxNumberOfLoops );
336 if ( loopCounter >= maxNumberOfLoops ) {
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
Hep3Vector boostVector() const
static G4double GetNuclearMass(const G4double A, const G4double Z)
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
static G4AntiOmegaMinus * AntiOmegaMinus()
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4OmegaMinus * OmegaMinus()
static G4KaonZeroLong * KaonZeroLong()
G4int GetPDGEncoding() const
static G4AntiSigmaPlus * AntiSigmaPlus()
const G4String & GetParticleName() const
static G4SigmaZero * SigmaZero()
static G4KaonMinus * KaonMinus()
static constexpr double twopi
void SetStatusChange(G4HadFinalStateStatus aS)
static constexpr double TeV
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4XiZero * XiZero()
void SetMinEnergy(G4double anEnergy)
G4IonTable * GetIonTable() const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
const G4ParticleDefinition * GetDefinition() const
static G4KaonZeroShort * KaonZeroShort()
static G4AntiProton * AntiProton()
HepLorentzVector & boost(double, double, double)
G4double GetKineticEnergy() const
static G4XiMinus * XiMinus()
static G4AntiXiMinus * AntiXiMinus()
static G4Triton * Triton()
static G4Proton * Proton()
static G4PionPlus * PionPlus()
static G4Neutron * Neutron()
const G4LorentzVector & Get4Momentum() const
static G4PionZero * PionZero()
static G4Deuteron * Deuteron()
void SetKineticEnergy(G4double aEnergy)
static G4SigmaMinus * SigmaMinus()
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
void SetEnergyChange(G4double anEnergy)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
G4double SampleT(G4double p, G4double A)
static G4AntiLambda * AntiLambda()
static G4PionMinus * PionMinus()
virtual ~G4ChargeExchange()
static G4AntiSigmaZero * AntiSigmaZero()
static constexpr double GeV
void SetMaxEnergy(const G4double anEnergy)
G4HadFinalState theParticleChange
void SetLocalEnergyDeposit(G4double aE)
static G4AntiXiZero * AntiXiZero()
static constexpr double MeV
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
static G4SigmaPlus * SigmaPlus()
static G4Lambda * Lambda()
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
static G4KaonPlus * KaonPlus()
static constexpr double keV
void SetMomentumChange(const G4ThreeVector &aV)
static G4AntiNeutron * AntiNeutron()
G4double GetTotalMomentum() const