53 lowEnergyRecoilLimit = 100.*keV;
54 lowestEnergyLimit = 1.*MeV;
100 if(ekin <= lowestEnergyLimit || A < 3) {
109 G4cout <<
"G4ChargeExchange::DoIt: Incident particle plab="
110 << plab/GeV <<
" GeV/c "
111 <<
" ekin(MeV) = " << ekin/MeV <<
" "
121 <<
" PDGcode= " << projPDG <<
" on nucleus Z= " << Z
122 <<
" A= " << A <<
" N= " << N
137 G4bool theHyperon =
false;
141 if(theParticle == theProton) {
142 theSecondary = theNeutron;
144 }
else if(theParticle == theNeutron) {
145 theSecondary = theProton;
147 }
else if(theParticle == thePiPlus) {
148 theSecondary = thePiZero;
150 }
else if(theParticle == thePiMinus) {
151 theSecondary = thePiZero;
153 }
else if(theParticle == theKPlus) {
155 else theSecondary = theK0L;
157 }
else if(theParticle == theKMinus) {
159 else theSecondary = theK0L;
161 }
else if(theParticle == theK0S || theParticle == theK0L) {
163 theSecondary = theKPlus;
166 theSecondary = theKMinus;
169 }
else if(theParticle == theANeutron) {
170 theSecondary = theAProton;
172 }
else if(theParticle == theAProton) {
173 theSecondary = theANeutron;
175 }
else if(theParticle == theL) {
179 theSecondary = theS0;
180 }
else if (x < 0.4) {
181 theSecondary = theSPlus;
183 }
else if (x < 0.6) {
184 theSecondary = theProton;
188 }
else if (x < 0.8) {
189 theSecondary = theProton;
194 theSecondary = theNeutron;
195 theRecoil = theSPlus;
201 theSecondary = theS0;
202 }
else if (x < 0.4) {
203 theSecondary = theSMinus;
205 }
else if (x < 0.6) {
206 theSecondary = theNeutron;
210 }
else if (x < 0.8) {
211 theSecondary = theNeutron;
216 theSecondary = theProton;
217 theRecoil = theSMinus;
224 if (Z == 1 && A == 2) theDef = theD;
225 else if (Z == 1 && A == 3) theDef = theT;
226 else if (Z == 2 && A == 3) theDef = theHe3;
227 else if (Z == 2 && A == 4) theDef = theA;
236 if(theRecoil) { m21 += theRecoil->
GetPDGMass(); }
237 else { theRecoil = theDef; }
242 if(etot < m11 + m21) {
249 G4double e1 = 0.5*etot*(1.0 - (m21*m21 - m11*m11)/(etot*etot));
251 G4double ptot = std::sqrt(e1*e1 - m11*m11);
259 G4cout <<
"## G4ChargeExchange t= " << t <<
" tmax= " << tmax
260 <<
" ptot= " << ptot <<
G4endl;
265 if(std::abs(cost) > 1.0) cost = 1.0;
266 G4double sint = std::sqrt((1.0-cost)*(1.0+cost));
271 G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
293 }
else if(erec > lowEnergyRecoilLimit) {
297 if(erec < 0.0) erec = 0.0;
307 aa = std::pow(A, 1.63);
308 bb = 14.5*std::pow(A, 0.66);
309 cc = 1.4*std::pow(A, 0.33);
312 aa = std::pow(A, 1.33);
313 bb = 60.*std::pow(A, 0.33);
314 cc = 0.4*std::pow(A, 0.40);
317 G4double x1 = (1.0 - std::exp(-tmax*bb))*aa/bb;
318 G4double x2 = (1.0 - std::exp(-tmax*dd))*cc/dd;
G4DLLIMPORT std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
static G4AntiLambda * AntiLambda()
static G4AntiNeutron * AntiNeutron()
static G4AntiOmegaMinus * AntiOmegaMinus()
static G4AntiProton * AntiProton()
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4AntiSigmaPlus * AntiSigmaPlus()
static G4AntiSigmaZero * AntiSigmaZero()
static G4AntiXiMinus * AntiXiMinus()
static G4AntiXiZero * AntiXiZero()
virtual ~G4ChargeExchange()
G4double SampleT(G4double p, G4double A)
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
static G4Deuteron * Deuteron()
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetKineticEnergy(G4double aEnergy)
void SetStatusChange(G4HadFinalStateStatus aS)
void AddSecondary(G4DynamicParticle *aP)
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
void SetLocalEnergyDeposit(G4double aE)
G4double GetTotalMomentum() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4HadFinalState theParticleChange
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int J=0)
static G4KaonMinus * KaonMinus()
static G4KaonPlus * KaonPlus()
static G4KaonZeroLong * KaonZeroLong()
static G4KaonZeroShort * KaonZeroShort()
static G4Lambda * Lambda()
static G4Neutron * Neutron()
static G4double GetNuclearMass(const G4double A, const G4double Z)
static G4OmegaMinus * OmegaMinus()
G4double GetPDGMass() const
G4int GetPDGEncoding() const
const G4String & GetParticleName() const
static G4ParticleTable * GetParticleTable()
G4IonTable * GetIonTable()
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4PionZero * PionZero()
static G4Proton * Proton()
static G4SigmaMinus * SigmaMinus()
static G4SigmaPlus * SigmaPlus()
static G4SigmaZero * SigmaZero()
static G4Triton * Triton()
static G4XiMinus * XiMinus()
static G4XiZero * XiZero()