42 nCutMax(7),ThresholdParameter(0.000*
GeV),
43 QGSMThreshold(3*
GeV),theNucleonRadius(1.5*
fermi)
50 ThresholdParameter(right.ThresholdParameter), QGSMThreshold(right.QGSMThreshold),
51 theNucleonRadius(right.theNucleonRadius)
116 #ifdef debug_G4QGSParticipants
121 const G4int maxNumberOfLoops = 1000;
122 G4int loopCounter = -1;
123 while ( (
theInteractions.size() == 0) && ++loopCounter < maxNumberOfLoops )
126 std::pair<G4double, G4double> theImpactParameter;
128 G4double impactX = theImpactParameter.first;
129 G4double impactY = theImpactParameter.second;
133 G4int nucleonCount = 0;
135 #ifdef debug_G4QGSParticipants
136 intNuclMom=aPrimaryMomentum;
148 G4double s_nucleon = (aPrimaryMomentum + nucleonMomentum).mag2();
151 G4double Probability = theProbability.GetInelasticProbability(s_nucleon, Distance2);
155 if (Probability > rndNumber)
157 #ifdef debug_G4QGSParticipants
158 G4cout <<
"DEBUG p="<< Probability<<
" r="<<rndNumber<<
" d="<<std::sqrt(Distance2)<<
G4endl;
159 G4cout <<
" qgspart+ " << aPrimaryMomentum <<
" # " << aPrimaryMomentum.mag()
161 intNuclMom += nucleonMomentum;
167 pNucleon->
Hit(aTarget);
168 if ((theProbability.GetDiffractiveProbability(s_nucleon, Distance2)/Probability >
G4UniformRand()
193 for(nCut = 0; nCut <
nCutMax; nCut++)
195 running[nCut] = theProbability.GetCutPomeronProbability(s_nucleon, Distance2, nCut + 1);
196 if(nCut!=0) running[nCut] += running[nCut-1];
199 for(nCut = 0; nCut <
nCutMax; nCut++)
201 if(running[nCut] > random)
break;
212 #ifdef debug_G4QGSParticipants
213 impactUsed=Distance2;
218 #ifdef debug_G4QGSParticipants
223 if ( loopCounter >= maxNumberOfLoops ) {
225 ed <<
" loopCounter exceeds maxNumberOfLoops : forced exit! " <<
G4endl;
228 #ifdef debug_G4QGSParticipants
230 G4cout <<
"Impact Parameter used = "<<impactUsed<<
G4endl;
251 #ifdef debug_G4QGSPart_PDiffColl
269 #ifdef debug_G4QGSPart_PDiffColl
284 std::vector<G4InteractionContent*>::iterator i;
299 #ifdef debug_G4QGSPart_PSoftColl
307 #ifdef debug_G4QGSParticipants
314 #ifdef debug_G4QGSPart_PSoftColl
322 #ifdef debug_G4QGSParticipants
334 #ifdef debug_G4QGSPart_PSoftColl
G4bool ExciteParticipants(G4VSplitableHadron *aPartner, G4VSplitableHadron *bPartner) const
G4Parton * GetParton2(void)
std::ostringstream G4ExceptionDescription
void SetMomentum(G4LorentzVector &aMomentum)
virtual G4bool StartLoop()=0
const G4LorentzVector & Get4Momentum() const
const G4double QGSMThreshold
virtual const G4LorentzVector & Get4Momentum() const
virtual G4Parton * GetNextAntiParton()=0
virtual const G4ThreeVector & GetPosition() const
G4bool IsSingleDiffractive()
virtual const G4ParticleDefinition * GetDefinition() const
G4Parton * GetParton1(void)
virtual G4double GetOuterRadius()=0
virtual ~G4QGSParticipants()
const G4ParticleDefinition * GetDefinition() const
G4GLOB_DLL std::ostream G4cout
virtual G4VSplitableHadron * SelectInteractions(const G4ReactionProduct &thePrimary)
virtual G4Parton * GetNextParton()=0
void PerformDiffractiveCollisions()
void IncrementCollisionCount(G4int aCount)
G4QGSDiffractiveExcitation theDiffExcitaton
virtual G4bool ExciteParticipants(G4VSplitableHadron *aPartner, G4VSplitableHadron *bPartner) const
G4V3DNucleus * theNucleus
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double GetKineticEnergy() const
std::pair< G4double, G4double > ChooseImpactXandY(G4double maxImpact)
G4double GetTotalEnergy() const
void SetNumberOfDiffractiveCollisions(int)
std::vector< G4PartonPair * > thePartonPairs
G4double GetPDGMass() const
void SetNumberOfSoftCollisions(int)
std::vector< G4VSplitableHadron * > theTargets
G4VSplitableHadron * GetTarget() const
G4VSplitableHadron * GetProjectile() const
void BuildInteractions(const G4ReactionProduct &thePrimary)
G4ThreeVector GetMomentum() const
virtual G4Nucleon * GetNextNucleon()=0
void PerformSoftCollisions()
void Hit(G4VSplitableHadron *aHit)
G4SingleDiffractiveExcitation theSingleDiffExcitation
G4double GetBindingEnergy() const
std::vector< G4InteractionContent * > theInteractions
const G4double theNucleonRadius
const G4double ThresholdParameter
static const double fermi
G4ThreadLocal G4int G4QGSParticipants_NPart
G4int GetNumberOfSoftCollisions()
void SetTarget(G4VSplitableHadron *aTarget)
CLHEP::HepLorentzVector G4LorentzVector