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;
153 }
else if(theParticle ==
theKPlus) {
155 else theSecondary =
theK0L;
159 else theSecondary =
theK0L;
161 }
else if(theParticle ==
theK0S || theParticle ==
theK0L) {
175 }
else if(theParticle ==
theL) {
179 theSecondary =
theS0;
180 }
else if (x < 0.4) {
183 }
else if (x < 0.6) {
188 }
else if (x < 0.8) {
201 theSecondary =
theS0;
202 }
else if (x < 0.4) {
205 }
else if (x < 0.6) {
210 }
else if (x < 0.8) {
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);
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;
G4ParticleDefinition * theSMinus
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ParticleDefinition * theL
G4ParticleDefinition * theOmega
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
G4ParticleDefinition * theASPlus
static G4AntiOmegaMinus * AntiOmegaMinus()
G4ParticleDefinition * theXiMinus
CLHEP::Hep3Vector G4ThreeVector
G4double lowEnergyRecoilLimit
G4ParticleDefinition * theNeutron
G4ParticleDefinition * theAOmega
G4ParticleDefinition * theS0
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4OmegaMinus * OmegaMinus()
G4ParticleDefinition * theAProton
static G4KaonZeroLong * KaonZeroLong()
G4ParticleDefinition * theAS0
G4ParticleDefinition * theT
G4ParticleDefinition * theA
G4int GetPDGEncoding() const
G4ParticleDefinition * theKMinus
static G4AntiSigmaPlus * AntiSigmaPlus()
G4ParticleDefinition * theK0S
const G4String & GetParticleName() const
static G4SigmaZero * SigmaZero()
G4ParticleDefinition * theAXi0
static G4KaonMinus * KaonMinus()
void SetStatusChange(G4HadFinalStateStatus aS)
static G4AntiSigmaMinus * AntiSigmaMinus()
static G4XiZero * XiZero()
void SetMinEnergy(G4double anEnergy)
G4IonTable * GetIonTable() const
G4GLOB_DLL std::ostream G4cout
G4ParticleDefinition * theK0L
const G4ParticleDefinition * GetDefinition() const
static G4KaonZeroShort * KaonZeroShort()
static G4AntiProton * AntiProton()
G4double GetKineticEnergy() const
static G4XiMinus * XiMinus()
static G4AntiXiMinus * AntiXiMinus()
static G4Triton * Triton()
static G4Proton * Proton()
static G4PionPlus * PionPlus()
G4ParticleDefinition * theXi0
static G4Neutron * Neutron()
G4ParticleDefinition * theKPlus
G4ParticleDefinition * theASMinus
static const G4double A[nN]
const G4LorentzVector & Get4Momentum() const
static G4PionZero * PionZero()
static G4Deuteron * Deuteron()
void SetKineticEnergy(G4double aEnergy)
G4ParticleDefinition * theANeutron
static G4SigmaMinus * SigmaMinus()
void SetEnergyChange(G4double anEnergy)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
G4double SampleT(G4double p, G4double A)
static G4AntiLambda * AntiLambda()
G4ParticleDefinition * theD
static G4PionMinus * PionMinus()
virtual ~G4ChargeExchange()
static G4AntiSigmaZero * AntiSigmaZero()
G4ParticleDefinition * thePiPlus
void SetMaxEnergy(const G4double anEnergy)
G4HadFinalState theParticleChange
void SetLocalEnergyDeposit(G4double aE)
static G4AntiXiZero * AntiXiZero()
G4ParticleDefinition * thePiZero
static G4SigmaPlus * SigmaPlus()
G4ParticleDefinition * theAXiMinus
static G4Lambda * Lambda()
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
static G4KaonPlus * KaonPlus()
G4ParticleDefinition * theSPlus
void SetMomentumChange(const G4ThreeVector &aV)
G4double lowestEnergyLimit
void AddSecondary(G4DynamicParticle *aP)
static G4AntiNeutron * AntiNeutron()
G4double GetTotalMomentum() const
G4ParticleDefinition * theAntiL
CLHEP::HepLorentzVector G4LorentzVector
G4ParticleDefinition * theProton
G4ParticleDefinition * thePiMinus
G4ParticleDefinition * theHe3