46 arho(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;
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)
183 else if(absCode == 3101 || absCode == 3103 ||
184 absCode == 3201 || absCode == 3203)
197 yf = std::pow(d1, d2);
219 G4double HadronMass2T =
sqr(HadronMass) + HadronPt.mag2();
225 G4double zMin = HadronMass2T/(
string->Mass2());
226 G4double zMax = 1. - DecayQuarkMass2/(
string->Mass2());
227 if (zMin >= zMax)
return 0;
231 HadronPt.x(), HadronPt.y());
237 (z *
string->LightConeDecay() -
238 HadronMass2T/(z *
string->LightConeDecay())));
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);
297 LeftMom.boost(ClusterVel);
298 RightMom.boost(ClusterVel);
299 LeftVector->push_back(
new G4KineticTrack(LeftHadron, 0, Pos, LeftMom));
300 RightVector->push_back(
new G4KineticTrack(RightHadron, 0, Pos, RightMom));
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;
340 Mom->setPx(px); Mom->setPy(py); Mom->setPz(pz);
341 Mom->setE(std::sqrt(Pabs*Pabs + Mass*Mass));
343 AntiMom->setPx(-px); AntiMom->setPy(-py); AntiMom->setPz(-pz);
344 AntiMom->setE (std::sqrt(Pabs*Pabs + AntiMass*AntiMass));
G4ParticleDefinition * BuildHighSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4ParticleDefinition * GetRightParton(void) const
G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
virtual G4bool StopFragmenting(const G4FragmentingString *const string)
CLHEP::Hep3Vector G4ThreeVector
virtual G4bool SplitLast(G4FragmentingString *string, G4KineticTrackVector *LeftVector, G4KineticTrackVector *RightVector)
CLHEP::HepLorentzRotation G4LorentzRotation
const G4ThreeVector & GetPosition() const
G4ExcitedString * CPExcited(const G4ExcitedString &string)
void SetFormationTime(G4double aFormationTime)
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4int StringLoopInterrupt
virtual G4bool IsFragmentable(const G4FragmentingString *const string)
G4int ClusterLoopInterrupt
G4int GetPDGEncoding() const
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)
virtual G4KineticTrackVector * FragmentString(const G4ExcitedString &theString)
const G4String & GetParticleSubType() const
G4double FragmentationMass(const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
G4ParticleDefinition * GetDecayParton() const
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
const G4ThreeVector & GetPosition() const
G4ParticleDefinition * GetLeftParton(void) const
virtual G4LorentzVector * SplitEandP(G4ParticleDefinition *pHadron, G4FragmentingString *string, G4FragmentingString *newString)
G4KineticTrackVector * LightFragmentationTest(const G4ExcitedString *const theString)
G4LorentzVector Get4Momentum() const
G4double GetFormationTime() const
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
G4LorentzRotation TransformToAlignedCms()
void SetPosition(const G4ThreeVector aPosition)
G4int GetDecayDirection() const
void Set4Momentum(const G4LorentzVector &a4Momentum)
G4HadronBuilder * hadronizer
G4double GetPDGMass() const
virtual void Sample4Momentum(G4LorentzVector *Mom, G4double Mass, G4LorentzVector *AntiMom, G4double AntiMass, G4double InitialMass)
virtual G4double GetLightConeZ(G4double zmin, G4double zmax, G4int PartonEncoding, G4ParticleDefinition *pHadron, G4double Px, G4double Py)
const G4LorentzVector & Get4Momentum() const
void CalculateHadronTimePosition(G4double theInitialStringMass, G4KineticTrackVector *)
G4KineticTrack * Splitup(G4FragmentingString *string, G4FragmentingString *&newString)
CLHEP::HepLorentzVector G4LorentzVector