91 #ifdef debug_LUNDfragmentation
92 G4cout<<
G4endl<<
"LUND StringFragmentation ------------------------------------"<<
G4endl;
96 <<
"------------------------------------"<<
G4endl;
109 #ifdef debug_LUNDfragmentation
110 G4cout<<
"Non fragmentable - the string is converted to one hadron "<<
G4endl;
122 if ( LeftVector->size() > 0)
125 LeftVector->operator[](0)->SetPosition(theString.
GetPosition());
127 if (LeftVector->size() > 1)
131 LeftVector->operator[](1)->SetPosition(theString.
GetPosition());
137 #ifdef debug_LUNDfragmentation
145 G4bool success = Loop_toFragmentString(theString, LeftVector, RightVector);
157 while (!RightVector->empty())
159 LeftVector->push_back(RightVector->back());
160 RightVector->erase(RightVector->end()-1);
185 #ifdef debug_LUNDfragmentation
195 G4bool final_success=
false;
196 G4bool inner_success=
true;
206 toObserverFrameI = toCmsI.
inverse();
216 RightVector->clear();
220 const G4int maxNumberOfLoops = 1000;
221 G4int loopCounter = -1;
223 while ( (! StopFragmenting(currentString)) && ++loopCounter < maxNumberOfLoops )
225 #ifdef debug_LUNDfragmentation
232 toObserverFrame= toCms.
inverse();
234 #ifdef debug_LUNDfragmentation
244 #ifdef debug_LUNDfragmentation
258 Hadron->
SetPosition(PositionOftheStringCreation+aPosition);
263 LeftVector->push_back(Hadron);
266 RightVector->push_back(Hadron);
268 delete currentString;
269 currentString=newString;
271 if ( newString )
delete newString;
277 if ( loopCounter >= maxNumberOfLoops ) {
282 #ifdef debug_LUNDfragmentation
283 if (inner_success)
G4cout<<
"Split remaining string into 2 final hadrons."<<
G4endl;
286 if ( inner_success && SplitLast(currentString, LeftVector, RightVector) )
288 final_success =
true;
291 delete currentString;
296 for (
unsigned int hadronI = 0; hadronI < LeftVector->size(); ++hadronI ) {
299 Tmp *= toObserverFrameI;
300 LeftVector->operator[](hadronI)->Set4Momentum(Tmp);
302 for (
unsigned int hadronI = 0; hadronI < RightVector->size(); ++hadronI ) {
303 G4LorentzVector Tmp = RightVector->operator[](hadronI)->Get4Momentum();
305 Tmp *= toObserverFrameI;
306 RightVector->operator[](hadronI)->Set4Momentum(Tmp);
309 return final_success;
331 #ifdef debug_LUNDfragmentation
333 <<
" "<<
string->Mass()<<
G4endl;
345 #ifdef debug_LUNDfragmentation
347 G4cout<<
"Start SplitUP ========================="<<
G4endl;
348 G4cout<<
"String partons: " <<
string->GetLeftParton()->GetPDGEncoding()<<
" "
349 <<
string->GetRightParton()->GetPDGEncoding()<<
" "
350 <<
"Direction " <<
string->GetDecayDirection()<<
G4endl;
357 string->SetLeftPartonStable();
360 string->SetRightPartonStable();
371 #ifdef debug_LUNDfragmentation
375 G4int NumberOfpossibleBaryons = 2;
382 if(ActualProb <0.0) ActualProb = 0.;
387 if ( NumberOfpossibleBaryons == 3 ){Mth = 2520.0;}
388 else if ( NumberOfpossibleBaryons == 4 ){Mth = 2380.0;}
391 ActualProb = ProbSaS;
393 if ( ActualProb < 0.0 ) ActualProb = 0.0;
396 #ifdef debug_LUNDfragmentation
404 HadronDefinition= DiQuarkSplitup(string->
GetDecayParton(), newStringEnd);
410 if ( HadronDefinition == NULL ) {
G4KineticTrack * Hadron =0;
return Hadron; }
412 #ifdef debug_LUNDfragmentation
413 G4cout<<
"The parton "<<
string->GetDecayParton()->GetPDGEncoding()<<
" "
416 G4cout<<
"The side of the string decay Left/Right (1/-1) "<<SideOfDecay<<
G4endl;
420 if ( newString )
delete newString;
424 #ifdef debug_LUNDfragmentation
425 G4cout<<
"An attempt to determine its energy (SplitEandP)"<<
G4endl;
427 G4LorentzVector* HadronMomentum=SplitEandP(HadronDefinition,
string, newString);
429 delete newString; newString=0;
432 if ( HadronMomentum != 0 ) {
434 #ifdef debug_LUNDfragmentation
440 if ( newString )
delete newString;
444 delete HadronMomentum;
448 #ifdef debug_LUNDfragmentation
453 #ifdef debug_LUNDfragmentation
454 G4cout<<
"End SplitUP (G4VLongitudinalStringDecay) ====================="<<
G4endl;
466 G4double ProbQQbar = (1.0 - 2.0*StrSup)*1.25;
472 G4int stableQuarkEncoding =
decay->GetPDGEncoding()/1000;
473 G4int decayQuarkEncoding = (
decay->GetPDGEncoding()/100)%10;
476 G4int Swap = stableQuarkEncoding;
477 stableQuarkEncoding = decayQuarkEncoding;
478 decayQuarkEncoding = Swap;
481 G4int IsParticle=(decayQuarkEncoding>0) ? -1 : +1;
488 G4int QuarkEncoding=QuarkPair.second->GetPDGEncoding();
489 G4int i10 = std::max(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
490 G4int i20 = std::min(std::abs(QuarkEncoding), std::abs(stableQuarkEncoding));
492 G4int NewDecayEncoding = -1*IsParticle*(i10 * 1000 + i20 * 100 + spin);
503 G4int IsParticle=(
decay->GetPDGEncoding()>0) ? +1 : -1;
508 created = QuarkPair.second;
524 G4double StringMT2=
string->MassT2();
525 G4double StringMT =std::sqrt(StringMT2);
532 #ifdef debug_LUNDfragmentation
534 G4cout<<
"String 4 mom, String M and Mt "<<String4Momentum<<
" "<<String4Momentum.
mag()
535 <<
" "<<std::sqrt(StringMT2)<<
G4endl;
543 #ifdef debug_LUNDfragmentation
544 G4cout<<
"Mass of the string is not sufficient to produce the hadron!"<<
G4endl;
549 String4Momentum.
setPz(0.);
555 G4double HadronMassT2, ResidualMassT2;
581 Pt2 =
sqr(HadronMt)-
sqr(HadronMass); Pt=std::sqrt(Pt2);
583 HadronPt =
G4ThreeVector( Pt*std::cos(phi), Pt*std::sin(phi), 0. );
584 RemSysPt = StringPt - HadronPt;
585 HadronMassT2 =
sqr(HadronMass) + HadronPt.mag2();
588 }
while (std::sqrt(HadronMassT2) + std::sqrt(ResidualMassT2) > StringMT);
593 G4double Pz2 = (
sqr(StringMT2 - HadronMassT2 - ResidualMassT2) -
594 4*HadronMassT2 * ResidualMassT2)/4./StringMT2;
596 if (Pz2 < 0 ) {
return 0;}
601 G4double zMin = (std::sqrt(HadronMassT2+Pz2) - Pz)/std::sqrt(StringMT2);
603 G4double zMax = (std::sqrt(HadronMassT2+Pz2) + Pz)/std::sqrt(StringMT2);
605 if (zMin >= zMax)
return 0;
607 G4double z = GetLightConeZ(zMin, zMax,
609 HadronPt.x(), HadronPt.y());
617 G4double HadronE = 0.5* (z *
string->LightConeDecay() +
618 HadronMassT2/(z *
string->LightConeDecay()));
622 #ifdef debug_LUNDfragmentation
624 G4cout<<
"string->LightConeDecay() "<<
string->LightConeDecay()<<
G4endl;
625 G4cout<<
"HadronPt,HadronE "<<HadronPt<<
" "<<HadronE<<
G4endl;
636 G4int PDGEncodingOfDecayParton,
643 G4double Mt2 = Px*Px + Py*Py + Mass*Mass;
646 G4double zOfMaxyf(0.), maxYf(1.), z(0.), yf(1.);
648 if (!((std::abs(PDGEncodingOfDecayParton) > 1000) && (HadronEncoding > 1000)) )
655 zOfMaxyf=BMt2/(Blund*Mt2 + 1.);}
657 zOfMaxyf = ((1.0+BMt2) - std::sqrt(
sqr(1.0-BMt2) + 4.0*BMt2*Alund))/2.0/(1.-Alund);
660 if (zOfMaxyf < zmin) {zOfMaxyf=zmin;}
661 if (zOfMaxyf > zmax) {zOfMaxyf=zmax;}
662 maxYf=(1-zOfMaxyf)/zOfMaxyf *
G4Exp(-Blund*Mt2/zOfMaxyf);
664 const G4int maxNumberOfLoops = 1000;
665 G4int loopCounter = 0;
672 while ( (
G4UniformRand()*maxYf > yf) && ++loopCounter < maxNumberOfLoops );
673 if ( loopCounter >= maxNumberOfLoops ) {
674 z = 0.5*(zmin + zmax);
679 if (std::abs(PDGEncodingOfDecayParton) > 1000)
684 if( PDGEncodingOfDecayParton > 3000 ) z=zmin+zmax-z;
699 #ifdef debug_LUNDfragmentation
702 G4cout<<
"Left "<<
string->GetLeftParton()->GetPDGEncoding()<<
" "<<
string->GetPleft()<<
G4endl;
703 G4cout<<
"Right "<<
string->GetRightParton()->GetPDGEncoding()<<
" "<<
string->GetPright()<<
G4endl;
704 G4cout<<
"String4mom "<<
string->GetPstring()<<
" "<<
string->GetPstring().mag()<<
G4endl;
722 G4int sampledState = 0;
724 #ifdef debug_LUNDfragmentation
725 G4cout<<
"StrMass "<<StringMass<<
" q's "
726 <<
string->GetLeftParton()->GetParticleName()<<
" "
727 <<
string->GetRightParton()->GetParticleName()<<
G4endl;
730 string->SetLeftPartonStable();
737 if ( (IDleft > 3000) || (IDright > 3000) ) {
738 if ( ! Diquark_AntiDiquark_belowThreshold_lastSplitting(
string, LeftHadron, RightHadron) )
746 if (! Diquark_AntiDiquark_belowThreshold_lastSplitting(
string, LeftHadron, RightHadron) )
752 Diquark_AntiDiquark_aboveThreshold_lastSplitting(
string, LeftHadron, RightHadron);
756 sampledState = SampleState();
771 #ifdef debug_LUNDfragmentation
775 Quark_AntiQuark_lastSplitting(
string, LeftHadron, RightHadron);
778 sampledState = SampleState();
790 #ifdef debug_LUNDfragmentation
794 Quark_Diquark_lastSplitting(
string, LeftHadron, RightHadron);
797 sampledState = SampleState();
812 #ifdef debug_LUNDfragmentation
813 G4cout<<
"Sampled hadrons: "<<LeftHadron->GetParticleName()<<
" "<<RightHadron->GetParticleName()<<
G4endl;
816 G4LorentzVector P_left =
string->GetPleft(), P_right =
string->GetPright();
821 Sample4Momentum(&LeftMom, LeftHadron->GetPDGMass(),
822 &RightMom, RightHadron->GetPDGMass(),
833 if (P_left.
z() <= 0.) {
G4LorentzVector tmp = LeftMom; LeftMom=RightMom; RightMom=tmp;}
837 if (P_right.z() >= 0.) {
G4LorentzVector tmp = LeftMom; LeftMom=RightMom; RightMom=tmp;}
841 LeftMom *=toObserverFrame;
842 RightMom*=toObserverFrame;
847 string->LorentzRotate(toObserverFrame);
853G4bool G4LundStringFragmentation::
858 G4double StringMass =
string->Mass();
860 G4int cClusterInterrupt = 0;
864 G4int LeftQuark1=
string->GetLeftParton()->GetPDGEncoding()/1000;
865 G4int LeftQuark2=(
string->GetLeftParton()->GetPDGEncoding()/100)%10;
867 G4int RightQuark1=
string->GetRightParton()->GetPDGEncoding()/1000;
868 G4int RightQuark2=(
string->GetRightParton()->GetPDGEncoding()/100)%10;
874 RightHadron= (LeftHadron ==
nullptr) ?
nullptr :
881 RightHadron=(LeftHadron ==
nullptr) ?
nullptr :
886 isOK = (LeftHadron !=
nullptr) && (RightHadron !=
nullptr);
900G4bool G4LundStringFragmentation::
907 G4double StringMass =
string->Mass();
914 Anti_Di_Quark =
string->GetLeftParton();
915 Di_Quark=
string->GetRightParton();
918 Anti_Di_Quark =
string->GetRightParton();
919 Di_Quark=
string->GetLeftParton();
923 G4int AbsIDAnti_di_quark =std::abs(IDAnti_di_quark);
925 G4int AbsIDdi_quark =std::abs(IDdi_quark);
927 G4int ADi_q1=AbsIDAnti_di_quark/1000;
928 G4int ADi_q2=(AbsIDAnti_di_quark-ADi_q1*1000)/100;
930 G4int Di_q1=AbsIDdi_quark/1000;
931 G4int Di_q2=(AbsIDdi_quark-Di_q1*1000)/100;
934 for (
G4int ProdQ=1; ProdQ < 6; ProdQ++)
937 const G4int maxNumberOfLoops = 1000;
938 G4int loopCounter = 0;
942 -
Baryon[ADi_q1-1][ADi_q2-1][ProdQ-1][StateADiQ]);
944 if (LeftHadron == NULL)
continue;
948 const G4int maxNumberOfInternalLoops = 1000;
949 G4int internalLoopCounter = 0;
953 +
Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]);
955 if (RightHadron == NULL)
continue;
958 if (StringMass > LeftHadronMass + RightHadronMass)
963 G4Exception(
"G4LundStringFragmentation::Diquark_AntiDiquark_aboveThreshold_lastSplitting ",
968 G4double FS_Psqr=lambda(StringMassSqr,
sqr(LeftHadronMass),
969 sqr(RightHadronMass));
983 }
while( (
Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]!=0) &&
984 ++internalLoopCounter < maxNumberOfInternalLoops );
985 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
990 }
while( (
Baryon[ADi_q1-1][ADi_q2-1][ProdQ-1][StateADiQ]!=0) &&
991 ++loopCounter < maxNumberOfLoops );
992 if ( loopCounter >= maxNumberOfLoops ) {
1006 G4double StringMass =
string->Mass();
1014 Quark =
string->GetLeftParton();
1015 Di_Quark=
string->GetRightParton();
1018 Quark =
string->GetRightParton();
1019 Di_Quark=
string->GetLeftParton();
1023 G4int AbsIDquark =std::abs(IDquark);
1025 G4int AbsIDdi_quark=std::abs(IDdi_quark);
1026 G4int Di_q1=AbsIDdi_quark/1000;
1027 G4int Di_q2=(AbsIDdi_quark-Di_q1*1000)/100;
1029 if (IDdi_quark < 0) SignDiQ=-1;
1032 for (
G4int ProdQ=1; ProdQ < 4; ProdQ++)
1038 if (IDquark == 2) SignQ= 1;
1039 if ((IDquark == 1) && (ProdQ == 3)) SignQ= 1;
1040 if ((IDquark == 3) && (ProdQ == 1)) SignQ=-1;
1041 if (IDquark == 4) SignQ= 1;
1042 if (IDquark == 5) SignQ=-1;
1046 if (IDquark == -2) SignQ=-1;
1047 if ((IDquark ==-1) && (ProdQ == 3)) SignQ=-1;
1048 if ((IDquark ==-3) && (ProdQ == 1)) SignQ= 1;
1049 if (IDquark == -4) SignQ=-1;
1050 if (IDquark == -5) SignQ= 1;
1053 if (AbsIDquark == ProdQ) SignQ= 1;
1056 const G4int maxNumberOfLoops = 1000;
1057 G4int loopCounter = 0;
1061 Meson[AbsIDquark-1][ProdQ-1][StateQ]);
1062 if (LeftHadron == NULL)
continue;
1066 const G4int maxNumberOfInternalLoops = 1000;
1067 G4int internalLoopCounter = 0;
1071 Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]);
1072 if (RightHadron == NULL)
continue;
1075 if (StringMass > LeftHadronMass + RightHadronMass)
1080 G4Exception(
"G4LundStringFragmentation::Quark_Diquark_lastSplitting ",
1085 G4double FS_Psqr=lambda(StringMassSqr,
sqr(LeftHadronMass),
1086 sqr(RightHadronMass));
1100 }
while( (
Baryon[Di_q1-1][Di_q2-1][ProdQ-1][StateDiQ]!=0) &&
1101 ++internalLoopCounter < maxNumberOfInternalLoops );
1102 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
1107 }
while( (
Meson[AbsIDquark-1][ProdQ-1][StateQ]!=0) &&
1108 ++loopCounter < maxNumberOfLoops );
1110 if ( loopCounter >= maxNumberOfLoops ) {
1124 G4double StringMass =
string->Mass();
1132 Quark =
string->GetLeftParton();
1133 Anti_Quark=
string->GetRightParton();
1136 Quark =
string->GetRightParton();
1137 Anti_Quark=
string->GetLeftParton();
1141 G4int AbsIDquark =std::abs(IDquark);
1145 G4int AbsIDanti_quark =std::abs(IDanti_quark);
1148 G4int LeftHadronCharge(0), RightHadronCharge(0);
1153 for (
G4int ProdQ=1; ProdQ < 4; ProdQ++)
1156 LeftHadronCharge = QuarkCharge -
Qcharge[ProdQ-1];
1157 G4int SignQ = LeftHadronCharge/3;
if (SignQ == 0) SignQ = 1;
1159 if ((IDquark == 1) && (ProdQ == 3)) SignQ= 1;
1160 if ((IDquark == 3) && (ProdQ == 1)) SignQ=-1;
1161 if ((IDquark == 4) && (ProdQ == 2)) SignQ= 1;
1162 if ((IDquark == 5) && (ProdQ == 1)) SignQ=-1;
1163 if ((IDquark == 5) && (ProdQ == 3)) SignQ=-1;
1165 RightHadronCharge = AntiQuarkCharge +
Qcharge[ProdQ-1];
1166 G4int SignAQ = RightHadronCharge/3;
if (SignAQ == 0) SignAQ = 1;
1168 if ((IDanti_quark ==-1) && (ProdQ == 3)) SignAQ=-1;
1169 if ((IDanti_quark ==-3) && (ProdQ == 1)) SignAQ= 1;
1170 if ((IDanti_quark ==-4) && (ProdQ == 2)) SignAQ=-1;
1171 if ((IDanti_quark ==-5) && (ProdQ == 1)) SignAQ= 1;
1172 if ((IDanti_quark ==-5) && (ProdQ == 3)) SignAQ= 1;
1177 const G4int maxNumberOfLoops = 1000;
1178 G4int loopCounter = 0;
1184 Meson[AbsIDquark-1][ProdQ-1][StateQ]);
1186 if (LeftHadron == NULL) { StateQ++;
continue; }
1191 const G4int maxNumberOfInternalLoops = 1000;
1192 G4int internalLoopCounter = 0;
1198 Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]);
1200 if(RightHadron == NULL) { StateAQ++;
continue; }
1204 if (StringMass > LeftHadronMass + RightHadronMass)
1209 G4Exception(
"G4LundStringFragmentation::Quark_AntiQuark_lastSplitting ",
1214 G4double FS_Psqr=lambda(StringMassSqr,
sqr(LeftHadronMass),
1215 sqr(RightHadronMass));
1238 }
while ( (
Meson[AbsIDanti_quark-1][ProdQ-1][StateAQ]!=0) &&
1239 ++internalLoopCounter < maxNumberOfInternalLoops );
1240 if ( internalLoopCounter >= maxNumberOfInternalLoops ) {
1248 }
while ( (
Meson[AbsIDquark-1][ProdQ-1][StateQ]!=0) &&
1249 ++loopCounter < maxNumberOfLoops );
1250 if ( loopCounter >= maxNumberOfLoops ) {
1260G4int G4LundStringFragmentation::SampleState(
void)
1274 G4int indexPosition = 0;
1280 if (Sum >= ksi)
break;
1282 return indexPosition;
1294 G4double AvailablePz, AvailablePz2;
1295 #ifdef debug_LUNDfragmentation
1296 G4cout<<
"Sampling of momenta of 2 last produced hadrons ----------------"<<
G4endl;
1297 G4cout<<
"Init Mass "<<InitialMass<<
" FirstM "<<Mass<<
" SecondM "<<AntiMass<<
" ProbIsotropy "<<
G4endl;
1300 G4double r_val =
sqr(InitialMass*InitialMass - Mass*Mass - AntiMass*AntiMass) -
1301 sqr(2.*Mass*AntiMass);
1302 G4double Pabs = (r_val > 0.)? std::sqrt(r_val)/(2.*InitialMass) : 0;
1304 const G4int maxNumberOfLoops = 1000;
1306 if ( Mass > 930. || AntiMass > 930. ) {
1307 SigmaQT *= ( 1.0 - 0.55*
sqr( (Mass+AntiMass)/InitialMass ) );
1309 if ( Mass < 930. && AntiMass < 930. ) {}
1310 if ( ( Mass < 930. && AntiMass > 930. ) ||
1311 ( Mass > 930. && AntiMass < 930. ) ) {
1314 if ( Mass > 930. && AntiMass > 930. ) {
1315 SigmaQT *= ( 1.0 - 0.55*
sqr( (Mass+AntiMass)/InitialMass ) );
1318 G4int loopCounter = 0;
1322 MassMt = std::sqrt( Mass * Mass + Pt2);
1323 AntiMassMt= std::sqrt(AntiMass * AntiMass + Pt2);
1325 while ( (InitialMass < MassMt + AntiMassMt) && ++loopCounter < maxNumberOfLoops );
1329 if ( loopCounter >= maxNumberOfLoops ) {
1333 AvailablePz2=
sqr(InitialMass*InitialMass -
sqr(MassMt) -
sqr(AntiMassMt)) -
1334 4.*
sqr(MassMt*AntiMassMt);
1336 AvailablePz2 /=(4.*InitialMass*InitialMass);
1337 AvailablePz = std::sqrt(AvailablePz2);
1343 Mom->
setE(std::sqrt(
sqr(MassMt)+AvailablePz2));
1345 AntiMom->
setPx(-Px); AntiMom->
setPy(-Py); AntiMom->
setPz(-AvailablePz);
1346 AntiMom->
setE (std::sqrt(
sqr(AntiMassMt)+AvailablePz2));
1348 #ifdef debug_LUNDfragmentation
G4double S(G4double temp)
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.