46arho(0.5), aphi(0.), an(-0.5), ala(-0.75), aksi(-1.), alft(0.5)
63 if ( LeftVector != 0 )
return LeftVector;
72 G4bool success=
false, inner_sucess=
true;
84 while (! StopFragmenting(currentString) )
88 if ( Hadron != 0 && IsFragmentable(newString))
91 LeftVector->push_back(Hadron);
93 RightVector->push_back(Hadron);
95 currentString=newString;
98 if (newString)
delete newString;
99 if (Hadron)
delete Hadron;
106 SplitLast(currentString,LeftVector, RightVector) )
110 delete currentString;
113 delete theStringInCMS;
125 while(!RightVector->empty())
127 LeftVector->push_back(RightVector->back());
128 RightVector->erase(RightVector->end()-1);
136 for(
size_t C1 = 0;
C1 < LeftVector->size();
C1++)
140 Momentum = toObserverFrame*Momentum;
143 Momentum = toObserverFrame*Coordinate;
160 G4int absCode = std::abs( PartonEncoding );
163 if(absCode == 1 || absCode == 2) theA = arho;
164 else if(absCode == 3) theA = aphi;
165 else throw G4HadronicException(__FILE__, __LINE__,
"Unknown PDGencoding in G4QGSMFragmentation::G4LightConeZ");
172 yf = std::pow(d1, d2);
178 if(absCode == 1103 || absCode == 2101 ||
179 absCode == 2203 || absCode == 2103)
181 d2 = (alft - (2.*an - arho));
183 else if(absCode == 3101 || absCode == 3103 ||
184 absCode == 3201 || absCode == 3203)
186 d2 = (alft - (2.*ala - arho));
190 d2 = (alft - (2.*aksi - arho));
197 yf = std::pow(d1, d2);
225 G4double zMin = HadronMass2T/(
string->Mass2());
226 G4double zMax = 1. - DecayQuarkMass2/(
string->Mass2());
227 if (zMin >= zMax)
return 0;
229 G4double z = GetLightConeZ(zMin, zMax,
231 HadronPt.
x(), HadronPt.
y());
239 G4double HadronE = 0.5* (z *
string->LightConeDecay() +
240 HadronMass2T/(z *
string->LightConeDecay()));
255 G4ThreeVector ClusterVel =
string->Get4Momentum().boostVector();
256 G4double ResidualMass =
string->Mass();
258 G4int cClusterInterrupt = 0;
267 string->SetLeftPartonStable();
276 IsParticle=(
string->GetLeftParton()->GetPDGEncoding()>0) ? -1 : +1;
278 IsParticle=(
string->GetLeftParton()->GetPDGEncoding()>0) ? +1 : -1;
281 quark = QuarkPair.second;
291 while (ResidualMass <= LeftHadron->GetPDGMass() + RightHadron->
GetPDGMass() + ClusterMassCut);
296 Sample4Momentum(&LeftMom, LeftHadron->
GetPDGMass(), &RightMom, RightHadron->
GetPDGMass(), ResidualMass);
297 LeftMom.
boost(ClusterVel);
298 RightMom.
boost(ClusterVel);
320 string->Get4Momentum().mag2();
329 G4double r_val =
sqr(InitialMass*InitialMass - Mass*Mass - AntiMass*AntiMass) -
sqr(2.*Mass*AntiMass);
330 G4double Pabs = (r_val > 0.)? std::sqrt(r_val)/(2.*InitialMass) : 0;
334 G4double st = std::sqrt(1. - pz * pz)*Pabs;
341 Mom->
setE(std::sqrt(Pabs*Pabs + Mass*Mass));
344 AntiMom->
setE (std::sqrt(Pabs*Pabs + AntiMass*AntiMass));
CLHEP::HepLorentzVector G4LorentzVector
HepLorentzRotation inverse() const
HepLorentzVector & boost(double, double, double)
const G4ThreeVector & GetPosition() const
G4LorentzRotation TransformToAlignedCms()
G4LorentzVector Get4Momentum() const
G4double LightConeDecay()
G4ParticleDefinition * GetLeftParton(void) const
G4ParticleDefinition * GetRightParton(void) const
G4ParticleDefinition * GetDecayParton() const
G4int GetDecayDirection() const
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4ParticleDefinition * BuildHighSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4double GetFormationTime() const
void SetPosition(const G4ThreeVector aPosition)
void Set4Momentum(const G4LorentzVector &a4Momentum)
const G4ThreeVector & GetPosition() const
void SetFormationTime(G4double aFormationTime)
const G4LorentzVector & Get4Momentum() const
G4double GetPDGMass() const
G4int GetPDGEncoding() const
const G4String & GetParticleSubType() const
virtual G4KineticTrackVector * FragmentString(const G4ExcitedString &theString)
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)
G4KineticTrack * Splitup(G4FragmentingString *string, G4FragmentingString *&newString)
G4HadronBuilder * hadronizer
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
G4int ClusterLoopInterrupt
G4int StringLoopInterrupt
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
void CalculateHadronTimePosition(G4double theInitialStringMass, G4KineticTrackVector *)
G4ExcitedString * CPExcited(const G4ExcitedString &string)
G4double FragmentationMass(const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
G4KineticTrackVector * LightFragmentationTest(const G4ExcitedString *const theString)