118 if (
Color.size()!=0)
return;
144 G4double maxAvailMomentum2 =
sqr(std::sqrt(transverseMass2) - std::sqrt(pt2));
151 RightMom.
setPx(HadronMom.
px() - pt.
x());
152 RightMom.
setPy(HadronMom.
py() - pt.
y());
159 G4double RightMinus = 0.5*(Local1 + Local2);
166 LeftMom.
setPz(0.5*(LeftPlus - LeftMinus));
167 LeftMom.
setE (0.5*(LeftPlus + LeftMinus));
168 RightMom.
setPz(0.5*(RightPlus - RightMinus));
169 RightMom.
setE (0.5*(RightPlus + RightMinus));
173 Color.push_back(Left);
192 while(Xmin>=1-(2*nSeaPair+1)*
Xmin) Xmin*=0.95;
195 for (aSeaPair = 0; aSeaPair < nSeaPair; aSeaPair++)
222 Color.push_back(aParton);
227 aParton->
SetSpinZ(-firstPartonSpinZ);
255 if (ColorEncoding < 0)
269 Color.push_back(pColorParton);
283 const G4int maxNumberOfAttempts = 1000;
288 G4int NumberOfUnsampledSeaQuarks = 2*nSeaPair;
289 ColorX =
SampleX(Xmin, NumberOfUnsampledSeaQuarks, 2*nSeaPair, aBeta);
290 Color.back()->SetX(SumX = ColorX);
291 for(
G4int aPair = 0; aPair < nSeaPair; aPair++)
293 NumberOfUnsampledSeaQuarks--;
294 ColorX =
SampleX(Xmin, NumberOfUnsampledSeaQuarks, 2*nSeaPair, aBeta);
295 Color[aPair]->SetX(ColorX);
297 NumberOfUnsampledSeaQuarks--;
298 AntiColorX =
SampleX(Xmin, NumberOfUnsampledSeaQuarks, 2*nSeaPair, aBeta);
301 if (1. - SumX <= Xmin)
break;
304 while ( (1. - SumX <= Xmin) && nAttempt < maxNumberOfAttempts );
305 if ( nAttempt >= maxNumberOfAttempts )
return;
310 for(aSeaPair = 0; aSeaPair < nSeaPair+1; aSeaPair++)
387 const G4int maxNumberOfLoops = 1000;
388 G4int loopCounter = -1;
390 ++loopCounter < maxNumberOfLoops ) {;}
391 if ( loopCounter >= maxNumberOfLoops ) R = 0.0;
400 if (isAntiQuark) aPDGCode*=-1;
415 for(
G4int ii=1; ii<100; ii++)
423 G4double xMax=1-(totalSea+1)*anXmin;
426 G4cout <<
"anXmin = "<<anXmin<<
" nSea = "<<nSea<<
" totalSea = "<< totalSea<<
G4endl;
427 throw G4HadronicException(__FILE__, __LINE__,
"G4QGSMSplitableHadron - Fatal: Cannot sample parton densities under these constraints.");
429 const G4int maxNumberOfLoops = 10000;
430 G4int loopCounter = -1;
439 while ( (x2>y) && ++loopCounter < maxNumberOfLoops );
440 if ( loopCounter >= maxNumberOfLoops ) {
442 ed <<
" Failed sampling after maxNumberOfLoops attempts : forced exit! " <<
G4endl;
static G4Pow * GetInstance()
ThreeVector shoot(const G4int Ap, const G4int Af)
static G4KaonPlus * KaonPlusDefinition()
const G4ThreeVector & GetPosition() const
const G4LorentzVector & Get4Momentum() const
G4int GetBaryonNumber() const
std::ostringstream G4ExceptionDescription
CLHEP::Hep3Vector G4ThreeVector
G4double powN(G4double x, G4int n) const
G4Parton * BuildSeaQuark(G4bool isAntiQuark, G4int aPDGCode, G4int nSeaPair)
virtual ~G4QGSMSplitableHadron()
G4int GetSoftCollisionCount()
static G4KaonMinus * KaonMinusDefinition()
G4ThreeVector GaussianPt(G4double widthSquare, G4double maxPtSquare)
void Set4Momentum(const G4LorentzVector &aMomentum)
std::deque< G4Parton * > AntiColor
void GetValenceQuarkFlavors(const G4ParticleDefinition *aPart, G4Parton *&Parton1, G4Parton *&Parton2)
static G4PionZero * PionZeroDefinition()
G4MesonSplitter theMesonSplitter
void DefineMomentumInZ(G4double aLightConeMomentum, G4bool aDirection)
G4GLOB_DLL std::ostream G4cout
const G4LorentzVector & Get4Momentum() const
G4int GetPDGEncoding() const
static G4PionMinus * PionMinusDefinition()
static const double twopi
static G4PionPlus * PionPlusDefinition()
G4double GetPDGSpin() const
void SetColour(G4int aColour)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double G4Log(G4double x)
void SetSpinZ(G4double aSpinZ)
G4double SampleX(G4double anXmin, G4int nSea, G4int theTotalSea, G4double aBeta)
G4double GetPDGMass() const
static G4PionMinus * PionMinus()
G4bool SplitMeson(G4int PDGcode, G4int *aEnd, G4int *bEnd)
const G4ParticleDefinition * GetDefinition() const
G4double minTransverseMass
G4double powA(G4double A, G4double y) const
void DiffractiveSplitUp()
G4BaryonSplitter theBaryonSplitter
void SetPosition(const G4ThreeVector &aPosition)
static G4Gamma * GammaDefinition()
G4bool SplitBarion(G4int PDGCode, G4int *q_or_qqbar, G4int *qbar_or_qq)