54void G4QGSMSplitableHadron::InitParameters()
66 StrangeSuppress = 0.48;
69 widthOfPtSquare = 0.5*
sqr(GeV);
71 minTransverseMass = 1*keV;
85 Direction = aDirection;
105 Direction = aDirection;
117 if (Color.size()!=0)
return;
120 DiffractiveSplitUp();
128void G4QGSMSplitableHadron::DiffractiveSplitUp()
142 if (maxAvailMomentum2/widthOfPtSquare>0.01) pt = GaussianPt(widthOfPtSquare, maxAvailMomentum2);
146 RightMom.
setPx(HadronMom.
px() - pt.x());
147 RightMom.
setPy(HadronMom.
py() - pt.y());
152 if (Direction) Local2 = -Local2;
153 G4double RightMinus = 0.5*(Local1 + Local2);
156 if (LeftMinus <= 0.) {
157 RightMinus = 0.5*(Local1 - Local2);
158 LeftMinus = HadronMom.
minus() - RightMinus;
161 G4double LeftPlus = LeftMom.perp2()/LeftMinus;
164 LeftMom.setPz(0.5*(LeftPlus - LeftMinus));
165 LeftMom.setE (0.5*(LeftPlus + LeftMinus));
166 RightMom.
setPz(0.5*(RightPlus - RightMinus));
167 RightMom.
setE (0.5*(RightPlus + RightMinus));
172 Color.push_back(Left);
173 AntiColor.push_back(Right);
178void G4QGSMSplitableHadron::SoftSplitUp()
185 for (aSeaPair = 0; aSeaPair < nSeaPair; aSeaPair++)
192 G4Parton * aParton = BuildSeaQuark(
false, aPDGCode, nSeaPair);
198 Color.push_back(aParton);
201 aParton = BuildSeaQuark(
true, aPDGCode, nSeaPair);
202 aParton->
SetSpinZ(-firstPartonSpinZ);
204 AntiColor.push_back(aParton);
210 GetValenceQuarkFlavors(
GetDefinition(), pColorParton, pAntiColorParton);
215 Color.push_back(pColorParton);
216 AntiColor.push_back(pAntiColorParton);
233 theMesonSplitter.
SplitMeson(HadronEncoding, aEnd, bEnd);
237 theBaryonSplitter.
SplitBarion(HadronEncoding, aEnd, bEnd);
266 const G4int maxNumberOfLoops = 1000;
267 G4int loopCounter = -1;
269 ++loopCounter < maxNumberOfLoops ) {;}
270 if ( loopCounter >= maxNumberOfLoops ) {
271 R = 0.99*maxPtSquare;
282 if (isAntiQuark) aPDGCode*=-1;
298 for(
G4int ii=1; ii<100; ii++)
305 if (y>ymax) ymax = y;
308 G4double xMax=1-(totalSea+1)*anXmin;
312 "G4QGSMSplitableHadron - Fatal: Cannot sample parton densities under these constraints.");
314 const G4int maxNumberOfLoops = 1000;
315 G4int loopCounter = 0;
318 x1 = G4RandFlat::shoot(anXmin, xMax);
325 }
while( (x2>y) && ++loopCounter < maxNumberOfLoops );
326 if ( loopCounter >= maxNumberOfLoops ) {
327 x1 = 0.5*( anXmin + xMax );
G4double G4Log(G4double x)
CLHEP::Hep3Vector G4ThreeVector
G4bool SplitBarion(G4int PDGCode, G4int &q_or_qqbar, G4int &qbar_or_qq)
G4bool SplitMeson(G4int PDGcode, G4int &aEnd, G4int &bEnd)
G4double GetPDGMass() const
G4int GetPDGEncoding() const
G4int GetBaryonNumber() const
G4double GetPDGSpin() const
void SetSpinZ(G4double aSpinZ)
void Set4Momentum(const G4LorentzVector &aMomentum)
void SetPosition(const G4ThreeVector &aPosition)
void SetColour(G4int aColour)
static G4PionMinus * PionMinus()
static G4Pow * GetInstance()
G4double powN(G4double x, G4int n) const
G4double powA(G4double A, G4double y) const
virtual ~G4QGSMSplitableHadron()
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
const G4ThreeVector & GetPosition() const
G4int GetSoftCollisionCount()