89 #ifdef debug_LUNDfragmentation
90 G4cout<<
G4endl<<
"LUND StringFragmentation ------------------------------------"<<
G4endl;
94 <<
"------------------------------------"<<
G4endl;
107 #ifdef debug_LUNDfragmentation
108 G4cout<<
"Non fragmentable - the string is converted to one hadron "<<
G4endl;
120 if ( LeftVector->size() > 0)
123 LeftVector->operator[](0)->SetPosition(theString.
GetPosition());
125 if (LeftVector->size() > 1)
129 LeftVector->operator[](1)->SetPosition(theString.
GetPosition());
135 #ifdef debug_LUNDfragmentation
143 G4bool success = Loop_toFragmentString(theString, LeftVector, RightVector);
155 while (!RightVector->empty())
157 LeftVector->push_back(RightVector->back());
158 RightVector->erase(RightVector->end()-1);
183 #ifdef debug_LUNDfragmentation
193 G4bool final_success=
false;
194 G4bool inner_success=
true;
204 toObserverFrameI = toCmsI.
inverse();
214 RightVector->clear();
218 const G4int maxNumberOfLoops = 1000;
219 G4int loopCounter = -1;
221 while ( (! StopFragmenting(currentString)) && ++loopCounter < maxNumberOfLoops )
223 #ifdef debug_LUNDfragmentation
230 toObserverFrame= toCms.
inverse();
232 #ifdef debug_LUNDfragmentation
242 #ifdef debug_LUNDfragmentation
256 Hadron->
SetPosition(PositionOftheStringCreation+aPosition);
261 LeftVector->push_back(Hadron);
264 RightVector->push_back(Hadron);
266 delete currentString;
267 currentString=newString;
269 if ( newString )
delete newString;
275 if ( loopCounter >= maxNumberOfLoops ) {
280 #ifdef debug_LUNDfragmentation
281 if (inner_success)
G4cout<<
"Split remaining string into 2 final hadrons."<<
G4endl;
284 if ( inner_success && SplitLast(currentString, LeftVector, RightVector) )
286 final_success =
true;
289 delete currentString;
294 for (
unsigned int hadronI = 0; hadronI < LeftVector->size(); ++hadronI ) {
297 Tmp *= toObserverFrameI;
298 LeftVector->operator[](hadronI)->Set4Momentum(Tmp);
300 for (
unsigned int hadronI = 0; hadronI < RightVector->size(); ++hadronI ) {
301 G4LorentzVector Tmp = RightVector->operator[](hadronI)->Get4Momentum();
303 Tmp *= toObserverFrameI;
304 RightVector->operator[](hadronI)->Set4Momentum(Tmp);
307 return final_success;
329 #ifdef debug_LUNDfragmentation
331 <<
" "<<
string->Mass()<<
G4endl;
343 #ifdef debug_LUNDfragmentation
345 G4cout<<
"Start SplitUP ========================="<<
G4endl;
346 G4cout<<
"String partons: " <<
string->GetLeftParton()->GetPDGEncoding()<<
" "
347 <<
string->GetRightParton()->GetPDGEncoding()<<
" "
348 <<
"Direction " <<
string->GetDecayDirection()<<
G4endl;
355 string->SetLeftPartonStable();
358 string->SetRightPartonStable();
369 #ifdef debug_LUNDfragmentation
373 G4int NumberOfpossibleBaryons = 2;
379 ActualProb *= (1.0-
sqr(NumberOfpossibleBaryons*1400.0/StringMass));
384 if ( NumberOfpossibleBaryons == 3 ){Mth = 2520.0;}
385 else if ( NumberOfpossibleBaryons == 4 ){Mth = 2380.0;}
389 if ( ActualProb < 0.0 ) ActualProb = 0.0;
392 #ifdef debug_LUNDfragmentation
400 HadronDefinition= DiQuarkSplitup(string->
GetDecayParton(), newStringEnd);
406 if ( HadronDefinition == NULL ) {
G4KineticTrack * Hadron =0;
return Hadron; }
408 #ifdef debug_LUNDfragmentation
409 G4cout<<
"The parton "<<
string->GetDecayParton()->GetPDGEncoding()<<
" "
412 G4cout<<
"The side of the string decay Left/Right (1/-1) "<<SideOfDecay<<
G4endl;
416 if ( newString )
delete newString;
420 #ifdef debug_LUNDfragmentation
421 G4cout<<
"An attempt to determine its energy (SplitEandP)"<<
G4endl;
423 G4LorentzVector* HadronMomentum=SplitEandP(HadronDefinition,
string, newString);
425 delete newString; newString=0;
428 if ( HadronMomentum != 0 ) {
430 #ifdef debug_LUNDfragmentation
436 if ( newString )
delete newString;
440 delete HadronMomentum;
444 #ifdef debug_LUNDfragmentation
449 #ifdef debug_LUNDfragmentation
450 G4cout<<
"End SplitUP (G4VLongitudinalStringDecay) ====================="<<
G4endl;
462 G4double ProbQQbar = (1.0 - 2.0*StrSup);
468 G4int stableQuarkEncoding =
decay->GetPDGEncoding()/1000;
469 G4int decayQuarkEncoding = (
decay->GetPDGEncoding()/100)%10;
472 G4int Swap = stableQuarkEncoding;
473 stableQuarkEncoding = decayQuarkEncoding;
474 decayQuarkEncoding = Swap;
477 G4int IsParticle=(decayQuarkEncoding>0) ? -1 : +1;
482 G4int QuarkEncoding=QuarkPair.second->GetPDGEncoding();
483 G4int i10 = std::max(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
484 G4int i20 = std::min(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
486 G4int NewDecayEncoding = -1*IsParticle*(i10 * 1000 + i20 * 100 + spin);
497 G4int IsParticle=(
decay->GetPDGEncoding()>0) ? +1 : -1;
502 created = QuarkPair.second;
518 G4double StringMT2=
string->MassT2();
519 G4double StringMT =std::sqrt(StringMT2);
526 #ifdef debug_LUNDfragmentation
528 G4cout<<
"String 4 mom, String M and Mt "<<String4Momentum<<
" "<<String4Momentum.
mag()
529 <<
" "<<std::sqrt(StringMT2)<<
G4endl;
537 #ifdef debug_LUNDfragmentation
538 G4cout<<
"Mass of the string is not sufficient to produce the hadron!"<<
G4endl;
543 String4Momentum.
setPz(0.);
549 G4double HadronMassT2, ResidualMassT2;
574 Pt2 =
sqr(HadronMt)-
sqr(HadronMass); Pt=std::sqrt(Pt2);
576 HadronPt =
G4ThreeVector( Pt*std::cos(phi), Pt*std::sin(phi), 0. );
577 RemSysPt = StringPt - HadronPt;
578 HadronMassT2 =
sqr(HadronMass) + HadronPt.mag2();
581 }
while (std::sqrt(HadronMassT2) + std::sqrt(ResidualMassT2) > StringMT);
586 G4double Pz2 = (
sqr(StringMT2 - HadronMassT2 - ResidualMassT2) -
587 4*HadronMassT2 * ResidualMassT2)/4./StringMT2;
589 if (Pz2 < 0 ) {
return 0;}
594 G4double zMin = (std::sqrt(HadronMassT2+Pz2) - Pz)/std::sqrt(StringMT2);
596 G4double zMax = (std::sqrt(HadronMassT2+Pz2) + Pz)/std::sqrt(StringMT2);
598 if (zMin >= zMax)
return 0;
600 G4double z = GetLightConeZ(zMin, zMax,
602 HadronPt.x(), HadronPt.y());
610 G4double HadronE = 0.5* (z *
string->LightConeDecay() +
611 HadronMassT2/(z *
string->LightConeDecay()));
615 #ifdef debug_LUNDfragmentation
617 G4cout<<
"string->LightConeDecay() "<<
string->LightConeDecay()<<
G4endl;
618 G4cout<<
"HadronPt,HadronE "<<HadronPt<<
" "<<HadronE<<
G4endl;
629 G4int PDGEncodingOfDecayParton,
636 G4double Mt2 = Px*Px + Py*Py + Mass*Mass;
639 G4double zOfMaxyf(0.), maxYf(1.), z(0.), yf(1.);
641 if (!((std::abs(PDGEncodingOfDecayParton) > 1000) && (HadronEncoding > 1000)) )
648 zOfMaxyf=BMt2/(Blund*Mt2 + 1.);}
650 zOfMaxyf = ((1.0+BMt2) - std::sqrt(
sqr(1.0-BMt2) + 4.0*BMt2*Alund))/2.0/(1.-Alund);
653 if (zOfMaxyf < zmin) {zOfMaxyf=zmin;}
654 if (zOfMaxyf > zmax) {zOfMaxyf=zmax;}
655 maxYf=(1-zOfMaxyf)/zOfMaxyf *
G4Exp(-Blund*Mt2/zOfMaxyf);
657 const G4int maxNumberOfLoops = 1000;
658 G4int loopCounter = 0;
665 while ( (
G4UniformRand()*maxYf > yf) && ++loopCounter < maxNumberOfLoops );
666 if ( loopCounter >= maxNumberOfLoops ) {
667 z = 0.5*(zmin + zmax);
672 if (std::abs(PDGEncodingOfDecayParton) > 1000)
691 #ifdef debug_LUNDfragmentation
694 G4cout<<
"Left "<<
string->GetLeftParton()->GetPDGEncoding()<<
" "<<
string->GetPleft()<<
G4endl;
695 G4cout<<
"Right "<<
string->GetRightParton()->GetPDGEncoding()<<
" "<<
string->GetPright()<<
G4endl;
696 G4cout<<
"String4mom "<<
string->GetPstring()<<
" "<<
string->GetPstring().mag()<<
G4endl;
714 G4int sampledState = 0;
716 #ifdef debug_LUNDfragmentation
717 G4cout<<
"StrMass "<<StringMass<<
" q's "
718 <<
string->GetLeftParton()->GetParticleName()<<
" "
719 <<
string->GetRightParton()->GetParticleName()<<
G4endl;
722 string->SetLeftPartonStable();
729 if (! Diquark_AntiDiquark_belowThreshold_lastSplitting(
string, LeftHadron, RightHadron) )
735 Diquark_AntiDiquark_aboveThreshold_lastSplitting(
string, LeftHadron, RightHadron);
739 sampledState = SampleState();
754 #ifdef debug_LUNDfragmentation
758 Quark_AntiQuark_lastSplitting(
string, LeftHadron, RightHadron);
761 sampledState = SampleState();
773 #ifdef debug_LUNDfragmentation
777 Quark_Diquark_lastSplitting(
string, LeftHadron, RightHadron);
780 sampledState = SampleState();
795 #ifdef debug_LUNDfragmentation
796 G4cout<<
"Sampled hadrons: "<<LeftHadron->GetParticleName()<<
" "<<RightHadron->GetParticleName()<<
G4endl;
799 G4LorentzVector P_left =
string->GetPleft(), P_right =
string->GetPright();
804 Sample4Momentum(&LeftMom, LeftHadron->GetPDGMass(),
805 &RightMom, RightHadron->GetPDGMass(),
816 if (P_left.
z() <= 0.) {
G4LorentzVector tmp = LeftMom; LeftMom=RightMom; RightMom=tmp;}
820 if (P_right.z() >= 0.) {
G4LorentzVector tmp = LeftMom; LeftMom=RightMom; RightMom=tmp;}
824 LeftMom *=toObserverFrame;
825 RightMom*=toObserverFrame;
830 string->LorentzRotate(toObserverFrame);
836G4bool G4LundStringFragmentation::
841 G4double StringMass =
string->Mass();
843 G4int cClusterInterrupt = 0;
847 G4int LeftQuark1=
string->GetLeftParton()->GetPDGEncoding()/1000;
848 G4int LeftQuark2=(
string->GetLeftParton()->GetPDGEncoding()/100)%10;
850 G4int RightQuark1=
string->GetRightParton()->GetPDGEncoding()/1000;
851 G4int RightQuark2=(
string->GetRightParton()->GetPDGEncoding()/100)%10;
857 RightHadron= (LeftHadron ==
nullptr) ?
nullptr :
864 RightHadron=(LeftHadron ==
nullptr) ?
nullptr :
869 isOK = (LeftHadron !=
nullptr) && (RightHadron !=
nullptr);
882G4bool G4LundStringFragmentation::
889 G4double StringMass =
string->Mass();
896 Anti_Di_Quark =
string->GetLeftParton();
897 Di_Quark=
string->GetRightParton();
900 Anti_Di_Quark =
string->GetRightParton();
901 Di_Quark=
string->GetLeftParton();
905 G4int AbsIDAnti_di_quark =std::abs(IDAnti_di_quark);
907 G4int AbsIDdi_quark =std::abs(IDdi_quark);
909 G4int ADi_q1=AbsIDAnti_di_quark/1000;
910 G4int ADi_q2=(AbsIDAnti_di_quark-ADi_q1*1000)/100;
912 G4int Di_q1=AbsIDdi_quark/1000;
913 G4int Di_q2=(AbsIDdi_quark-Di_q1*1000)/100;
916 for (
G4int ProdQ=1; ProdQ < 6; ProdQ++)
919 const G4int maxNumberOfLoops = 1000;
920 G4int loopCounter = 0;
924 -
Baryon[ADi_q1-1][ADi_q2-1][ProdQ-1][StateADiQ]);
926 if (LeftHadron == NULL)
continue;
930 const G4int maxNumberOfInternalLoops = 1000;
931 G4int internalLoopCounter = 0;
935 +
Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]);
937 if (RightHadron == NULL)
continue;
940 if (StringMass > LeftHadronMass + RightHadronMass)
945 G4Exception(
"G4LundStringFragmentation::Diquark_AntiDiquark_aboveThreshold_lastSplitting ",
950 G4double FS_Psqr=lambda(StringMassSqr,
sqr(LeftHadronMass),
951 sqr(RightHadronMass));
965 }
while( (
Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]!=0) &&
966 ++internalLoopCounter < maxNumberOfInternalLoops );
967 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
972 }
while( (
Baryon[ADi_q1-1][ADi_q2-1][ProdQ-1][StateADiQ]!=0) &&
973 ++loopCounter < maxNumberOfLoops );
974 if ( loopCounter >= maxNumberOfLoops ) {
988 G4double StringMass =
string->Mass();
996 Quark =
string->GetLeftParton();
997 Di_Quark=
string->GetRightParton();
1000 Quark =
string->GetRightParton();
1001 Di_Quark=
string->GetLeftParton();
1005 G4int AbsIDquark =std::abs(IDquark);
1007 G4int AbsIDdi_quark=std::abs(IDdi_quark);
1008 G4int Di_q1=AbsIDdi_quark/1000;
1009 G4int Di_q2=(AbsIDdi_quark-Di_q1*1000)/100;
1011 if (IDdi_quark < 0) SignDiQ=-1;
1014 for (
G4int ProdQ=1; ProdQ < 4; ProdQ++)
1020 if (IDquark == 2) SignQ= 1;
1021 if ((IDquark == 1) && (ProdQ == 3)) SignQ= 1;
1022 if ((IDquark == 3) && (ProdQ == 1)) SignQ=-1;
1023 if (IDquark == 4) SignQ= 1;
1024 if (IDquark == 5) SignQ=-1;
1028 if (IDquark == -2) SignQ=-1;
1029 if ((IDquark ==-1) && (ProdQ == 3)) SignQ=-1;
1030 if ((IDquark ==-3) && (ProdQ == 1)) SignQ= 1;
1031 if (IDquark == -4) SignQ=-1;
1032 if (IDquark == -5) SignQ= 1;
1035 if (AbsIDquark == ProdQ) SignQ= 1;
1038 const G4int maxNumberOfLoops = 1000;
1039 G4int loopCounter = 0;
1043 Meson[AbsIDquark-1][ProdQ-1][StateQ]);
1044 if (LeftHadron == NULL)
continue;
1048 const G4int maxNumberOfInternalLoops = 1000;
1049 G4int internalLoopCounter = 0;
1053 Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]);
1054 if (RightHadron == NULL)
continue;
1057 if (StringMass > LeftHadronMass + RightHadronMass)
1062 G4Exception(
"G4LundStringFragmentation::Quark_Diquark_lastSplitting ",
1067 G4double FS_Psqr=lambda(StringMassSqr,
sqr(LeftHadronMass),
1068 sqr(RightHadronMass));
1082 }
while( (
Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]!=0) &&
1083 ++internalLoopCounter < maxNumberOfInternalLoops );
1084 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
1089 }
while( (
Meson[AbsIDquark-1][ProdQ-1][StateQ]!=0) &&
1090 ++loopCounter < maxNumberOfLoops );
1092 if ( loopCounter >= maxNumberOfLoops ) {
1106 G4double StringMass =
string->Mass();
1114 Quark =
string->GetLeftParton();
1115 Anti_Quark=
string->GetRightParton();
1118 Quark =
string->GetRightParton();
1119 Anti_Quark=
string->GetLeftParton();
1123 G4int AbsIDquark =std::abs(IDquark);
1127 G4int AbsIDanti_quark =std::abs(IDanti_quark);
1130 G4int LeftHadronCharge(0), RightHadronCharge(0);
1135 for (
G4int ProdQ=1; ProdQ < 4; ProdQ++)
1137 LeftHadronCharge = QuarkCharge -
Qcharge[ProdQ-1];
1138 G4int SignQ = LeftHadronCharge/3;
if (SignQ == 0) SignQ = 1;
1140 if ((IDquark == 1) && (ProdQ == 3)) SignQ= 1;
1141 if ((IDquark == 3) && (ProdQ == 1)) SignQ=-1;
1142 if ((IDquark == 4) && (ProdQ == 2)) SignQ= 1;
1143 if ((IDquark == 5) && (ProdQ == 1)) SignQ=-1;
1144 if ((IDquark == 5) && (ProdQ == 3)) SignQ=-1;
1146 RightHadronCharge = AntiQuarkCharge +
Qcharge[ProdQ-1];
1147 G4int SignAQ = RightHadronCharge/3;
if (SignAQ == 0) SignAQ = 1;
1149 if ((IDanti_quark ==-1) && (ProdQ == 3)) SignAQ=-1;
1150 if ((IDanti_quark ==-3) && (ProdQ == 1)) SignAQ= 1;
1151 if ((IDanti_quark ==-4) && (ProdQ == 2)) SignAQ=-1;
1152 if ((IDanti_quark ==-5) && (ProdQ == 1)) SignAQ= 1;
1153 if ((IDanti_quark ==-5) && (ProdQ == 3)) SignAQ= 1;
1158 const G4int maxNumberOfLoops = 1000;
1159 G4int loopCounter = 0;
1165 Meson[AbsIDquark-1][ProdQ-1][StateQ]);
1167 if (LeftHadron == NULL) { StateQ++;
continue; }
1172 const G4int maxNumberOfInternalLoops = 1000;
1173 G4int internalLoopCounter = 0;
1179 Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]);
1181 if(RightHadron == NULL) { StateAQ++;
continue; }
1185 if (StringMass > LeftHadronMass + RightHadronMass)
1190 G4Exception(
"G4LundStringFragmentation::Quark_AntiQuark_lastSplitting ",
1195 G4double FS_Psqr=lambda(StringMassSqr,
sqr(LeftHadronMass),
1196 sqr(RightHadronMass));
1220 }
while ( (
Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]!=0) &&
1221 ++internalLoopCounter < maxNumberOfInternalLoops );
1222 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
1230 }
while ( (
Meson[AbsIDquark-1][ProdQ-1][StateQ]!=0) &&
1231 ++loopCounter < maxNumberOfLoops );
1232 if ( loopCounter >= maxNumberOfLoops ) {
1242G4int G4LundStringFragmentation::SampleState(
void)
1257 G4int indexPosition = 0;
1263 if (Sum >= ksi)
break;
1265 return indexPosition;
1277 G4double AvailablePz, AvailablePz2;
1278 #ifdef debug_LUNDfragmentation
1279 G4cout<<
"Sampling of momenta of 2 last produced hadrons ----------------"<<
G4endl;
1280 G4cout<<
"Init Mass "<<InitialMass<<
" FirstM "<<Mass<<
" SecondM "<<AntiMass<<
" ProbIsotropy "<<
G4endl;
1283 G4double r_val =
sqr(InitialMass*InitialMass - Mass*Mass - AntiMass*AntiMass) -
1284 sqr(2.*Mass*AntiMass);
1285 G4double Pabs = (r_val > 0.)? std::sqrt(r_val)/(2.*InitialMass) : 0;
1287 const G4int maxNumberOfLoops = 1000;
1289 if ( Mass > 930. || AntiMass > 930. ) {
1290 SigmaQT *= ( 1.0 - 0.55*
sqr( (Mass+AntiMass)/InitialMass ) );
1292 if ( Mass < 930. && AntiMass < 930. ) {}
1293 if ( ( Mass < 930. && AntiMass > 930. ) ||
1294 ( Mass > 930. && AntiMass < 930. ) ) {
1297 if ( Mass > 930. && AntiMass > 930. ) {
1298 SigmaQT *= ( 1.0 - 0.55*
sqr( (Mass+AntiMass)/InitialMass ) );
1301 G4int loopCounter = 0;
1305 MassMt = std::sqrt( Mass * Mass + Pt2);
1306 AntiMassMt= std::sqrt(AntiMass * AntiMass + Pt2);
1308 while ( (InitialMass < MassMt + AntiMassMt) && ++loopCounter < maxNumberOfLoops );
1312 if ( loopCounter >= maxNumberOfLoops ) {
1316 AvailablePz2=
sqr(InitialMass*InitialMass -
sqr(MassMt) -
sqr(AntiMassMt)) -
1317 4.*
sqr(MassMt*AntiMassMt);
1319 AvailablePz2 /=(4.*InitialMass*InitialMass);
1320 AvailablePz = std::sqrt(AvailablePz2);
1326 Mom->
setE(std::sqrt(
sqr(MassMt)+AvailablePz2));
1328 AntiMom->
setPx(-Px); AntiMom->
setPy(-Py); AntiMom->
setPz(-AvailablePz);
1329 AntiMom->
setE (std::sqrt(
sqr(AntiMassMt)+AvailablePz2));
1331 #ifdef debug_LUNDfragmentation
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
CLHEP::HepLorentzVector G4LorentzVector
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
HepLorentzRotation & rotateY(double delta)
HepLorentzRotation & rotateZ(double delta)
HepLorentzRotation inverse() const
Hep3Vector boostVector() const
G4double GetTimeOfCreation() const
const G4ThreeVector & GetPosition() const
G4int GetDirection(void) const
G4Parton * GetRightParton(void) const
G4Parton * GetLeftParton(void) const
G4LorentzVector Get4Momentum() const
G4bool IsAFourQuarkString(void) const
G4double LightConeDecay()
G4ParticleDefinition * GetLeftParton(void) const
G4ParticleDefinition * GetRightParton(void) const
void LorentzRotate(const G4LorentzRotation &rotation)
G4LorentzRotation TransformToAlignedCms()
G4ParticleDefinition * GetDecayParton() const
G4int GetDecayDirection() const
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
static G4HadronicParameters * Instance()
G4double GetFormationTime() const
void SetPosition(const G4ThreeVector aPosition)
void Set4Momentum(const G4LorentzVector &a4Momentum)
const G4ThreeVector & GetPosition() const
const G4ParticleDefinition * GetDefinition() const
void SetFormationTime(G4double aFormationTime)
const G4LorentzVector & Get4Momentum() const
virtual G4KineticTrackVector * FragmentString(const G4ExcitedString &theString)
G4LundStringFragmentation()
virtual ~G4LundStringFragmentation()
G4double GetPDGMass() const
G4int GetPDGEncoding() const
G4int GetBaryonNumber() const
const G4String & GetParticleName() const
const G4String & GetParticleSubType() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
const G4LorentzVector & Get4Momentum() const
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)
G4HadronBuilder * hadronizer
G4double MinimalStringMass
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
void SetProbBBbar(G4double aValue)
G4ParticleDefinition * FindParticle(G4int Encoding)
G4double GetStrangeSuppress()
G4KineticTrackVector * ProduceOneHadron(const G4ExcitedString *const theString)
virtual G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
G4ParticleDefinition * FS_RightHadron[350]
G4int ClusterLoopInterrupt
virtual void SetMassCut(G4double aValue)
void SetDiquarkSuppression(G4double aValue)
void SetStrangenessSuppression(G4double aValue)
G4int StringLoopInterrupt
void SetProbCCbar(G4double aValue)
G4ParticleDefinition * FS_LeftHadron[350]
void SetDiquarkBreakProbability(G4double aValue)
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
G4double MesonWeight[5][5][7]
void SetStringTensionParameter(G4double aValue)
void SetMinimalStringMass(const G4FragmentingString *const string)
G4double DiquarkBreakProb
G4double GetDiquarkSuppress()
G4double BaryonWeight[5][5][5][4]
ParticleList decay(Cluster *const c)
Carries out a cluster decay.