121 Kappa = 1.0 * GeV/fermi;
149 pDefPair hadrons(
nullptr,
nullptr );
152 #ifdef debug_VStringDecay
153 G4cout<<
"G4VLongitudinalStringDecay::ProduceOneHadron: PossibleHmass StrMass "
160 if ( hadrons.first !=
nullptr ) {
161 if ( hadrons.second ==
nullptr ) {
164 #ifdef debug_VStringDecay
165 G4cout <<
"VlongSD Warning replacing string by single hadron (G4VLongitudinalStringDecay)" <<
G4endl;
167 <<
"string .. " <<
string->Get4Momentum() <<
" "
168 <<
string->Get4Momentum().m() <<
G4endl;
177 #ifdef debug_VStringDecay
178 G4cout <<
"VlongSD Warning replacing qq-qqbar string by TWO hadrons (G4VLongitudinalStringDecay)"
179 << hadrons.first->GetParticleName() <<
" / "
180 << hadrons.second->GetParticleName()
181 <<
"string .. " <<
string->Get4Momentum() <<
" "
182 <<
string->Get4Momentum().m() <<
G4endl;
187 &Mom2, hadrons.second->GetPDGMass(),
193 G4ThreeVector Velocity =
string->Get4Momentum().boostVector();
194 result->
Boost(Velocity);
217 #ifdef debug_VStringDecay
219 G4cout<<
"VlongSD Quarks at the string ends "<<
string->GetLeftParton()->GetParticleName()
220 <<
" "<<
string->GetRightParton()->GetParticleName()<<
G4endl;
221 if ( Hadron1 !=
nullptr) {
226 if ( Hadron1 !=
nullptr) { mass = (Hadron1)->GetPDGMass();}
232 #ifdef debug_VStringDecay
234 G4cout<<
"VlongSD string is qq--qqbar: Build two stable hadrons"<<
G4endl;
237 G4double StringMass =
string->Mass();
238 G4int cClusterInterrupt = 0;
243 G4int LeftQuark1=
string->GetLeftParton()->GetPDGEncoding()/1000;
244 G4int LeftQuark2=(
string->GetLeftParton()->GetPDGEncoding()/100)%10;
246 G4int RightQuark1=
string->GetRightParton()->GetPDGEncoding()/1000;
247 G4int RightQuark2=(
string->GetRightParton()->GetPDGEncoding()/100)%10;
259 while ( Hadron1 ==
nullptr || Hadron2 ==
nullptr ||
260 ( StringMass <= Hadron1->GetPDGMass() + Hadron2->
GetPDGMass() ) );
262 mass = (Hadron1)->GetPDGMass() + (Hadron2)->GetPDGMass();
265 #ifdef debug_VStringDecay
266 G4cout<<
"VlongSD *Hadrons 1 and 2, proposed mass "<<Hadron1<<
" "<<Hadron2<<
" "<<mass<<
G4endl;
271 pdefs->first = Hadron1;
272 pdefs->second = Hadron2;
338 #ifdef debug_VStringDecay
339 G4cout<<
"VlongSD QuarkSplitup: quark ID "<<decay->GetPDGEncoding()<<
G4endl;
342 G4int IsParticle=(decay->GetPDGEncoding()>0) ? -1 : +1;
345 created = QuarkPair.second;
350 #ifdef debug_VStringDecay
351 G4cout<<
"VlongSD QuarkSplitup: "<<decay->GetPDGEncoding()<<
" -> "<<QuarkPair.second->GetPDGEncoding()<<
G4endl;
352 G4cout<<
"hadronizer->Build(QuarkPair.first, decay)"<<
G4endl;
367 #ifdef debug_VStringDecay
368 G4cout<<
"VlongSD Create a Diquark - AntiDiquark pair"<<
G4endl;
370 G4int q1(0), q2(0), spin(0), PDGcode(0);
377 PDGcode = (std::max(q1,q2) * 1000 + std::min(q1,q2) * 100 + spin) * NeedParticle;
383 #ifdef debug_VStringDecay
384 G4cout<<
"VlongSD Create a Quark - AntiQuark pair"<<
G4endl;
400 #ifdef debug_heavyHadrons
401 G4cout <<
"G4VLongitudinalStringDecay::SampleQuarkFlavor : sampled from the vacuum HEAVY quark = "
407 #ifdef debug_VStringDecay
408 G4cout<<
"VlongSD SampleQuarkFlavor "<<quark<<
" (ProbCB ProbCCbar ProbBBbar "<<
ProbCB
426 Pt = -
G4Log(G4RandFlat::shoot(ymin, 1.));
430 return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
441 for (
size_t c1 = 0; c1 < Hadrons->size(); c1++)
445 for (
size_t c2 = 0; c2 < c1; c2++)
447 SumPz += Hadrons->operator[](c2)->Get4Momentum().pz();
448 SumE += Hadrons->operator[](c2)->Get4Momentum().e();
450 G4double HadronE = Hadrons->operator[](c1)->Get4Momentum().e();
451 G4double HadronPz = Hadrons->operator[](c1)->Get4Momentum().pz();
452 Hadrons->operator[](c1)->SetFormationTime(
453 (theInitialStringMass - 2.*SumPz + HadronE - HadronPz ) / (2.*kappa) / c_light );
455 (theInitialStringMass - 2.*SumE - HadronE + HadronPz) / (2.*kappa) );
456 Hadrons->operator[](c1)->SetPosition(aPosition);
466 "G4VLongitudinalStringDecay::SetSigmaTransverseMomentum after FragmentString() not allowed");
492 "G4VLongitudinalStringDecay::SetDiquarkBreakProbability after FragmentString() not allowed");
504 "G4VLongitudinalStringDecay::SetVectorMesonProbability after FragmentString() not allowed");
518 "G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability after FragmentString() not allowed");
532 "G4VLongitudinalStringDecay::SetScalarMesonMixings after FragmentString() not allowed");
534 if ( aVector.size() < 6 )
536 "G4VLongitudinalStringDecay::SetScalarMesonMixings( argument Vector too small");
554 "G4VLongitudinalStringDecay::SetVectorMesonMixings after FragmentString() not allowed");
556 if ( aVector.size() < 6 )
558 "G4VLongitudinalStringDecay::SetVectorMesonMixings( argument Vector too small");
604 Kappa = aValue * GeV/fermi;
621 for (
G4int i=1; i < 6; i++) {
622 Code1 = 100*i + 10*1 + 1;
625 if (hadron1 !=
nullptr) {
626 for (
G4int j=1; j < 6; j++) {
627 Code2 = 100*j + 10*1 + 1;
629 if (hadron2 !=
nullptr) {
643 for (
G4int i=1; i < 6; i++) {
644 Code1 = 100*i + 10*1 + 1;
646 for (
G4int j=1; j < 6; j++) {
647 for (
G4int k=1; k < 6; k++) {
648 kfla = std::max(j,k);
649 kflb = std::min(j,k);
652 Code2 = 1000*kfla + 100*kflb + 10*1 + 2;
653 if ( (j == 1) && (k==1)) Code2 = 1000*2 + 100*1 + 10*1 + 2;
658 if ((hadron2 ==
nullptr) && (hadron3 ==
nullptr)) {
minMassQDiQStr[i-1][j-1][k-1] =
MaxMass;
continue;};
660 if ((hadron2 !=
nullptr) && (hadron3 !=
nullptr)) {
664 if ((hadron2 !=
nullptr) && (hadron3 ==
nullptr)) {};
666 if ((hadron2 ==
nullptr) && (hadron3 !=
nullptr)) {hadron2 = hadron3;};
680 for (
G4int i=0; i<5; i++)
681 {
for (
G4int j=0; j<5; j++)
682 {
for (
G4int k=0; k<7; k++)
689 for (
G4int i=0; i<5; i++)
690 {
for (
G4int j=0; j<5; j++)
692 Meson[i][j][0] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 1;
694 Meson[i][j][1] = 100 * (std::max(i,j)+1) + 10 * (std::min(i,j)+1) + 3;
756 for (
G4int i=0; i<5; i++)
757 {
for (
G4int j=0; j<5; j++)
758 {
for (
G4int k=0; k<5; k++)
759 {
for (
G4int l=0; l<4; l++)
766 G4int kflc(0), kfld(0), kfle(0), kflf(0);
767 for (
G4int i=0; i<5; i++)
768 {
for (
G4int j=0; j<5; j++)
769 {
for (
G4int k=0; k<5; k++)
771 kfla = i+1; kflb = j+1; kflc = k+1;
772 kfld = std::max(kfla,kflb);
773 kfld = std::max(kfld,kflc);
775 kflf = std::min(kfla,kflb);
776 kflf = std::min(kflf,kflc);
778 kfle = kfla + kflb + kflc - kfld - kflf;
780 Baryon[i][j][k][0] = 1000 * kfld + 100 * kfle + 10 * kflf + 2;
782 Baryon[i][j][k][1] = 1000 * kfld + 100 * kfle + 10 * kflf + 4;
913 for (
G4int i=0; i<5; i++)
914 {
for (
G4int j=0; j<5; j++)
915 {
for (
G4int k=0; k<5; k++)
916 {
for (
G4int l=0; l<4; l++)
927 if ((TestHadron ==
nullptr)&&(
Baryon[i][j][k][l] != 0))
Baryon[i][j][k][l] = 0;
941 for (
G4int i=0 ; i<350 ; i++ ) {
963 "G4VLongitudinalStringDecay::SetMinimalStringMass: Illegal quark content as input");
970 "G4VLongitudinalStringDecay::SetMinimalStringMass: Illegal quark content as input");
977 if ((Qleft < 6) && (Qright < 6)) {
984 if ((Qleft < 6) && (Qright > 1000)) {
985 G4int q1=Qright/1000;
986 G4int q2=(Qright/100)%10;
993 if ((Qleft > 1000) && (Qright < 6)) {
995 G4int q2=(Qleft/100)%10;
1004 G4double StringM=
string->Get4Momentum().mag();
1006 #ifdef debug_LUNDfragmentation
1010 G4int q1= Qleft/1000 ;
1011 G4int q2=(Qleft/100)%10 ;
1013 G4int q3= Qright/1000 ;
1014 G4int q4=(Qright/100)%10;
1022 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 > 0.)) {
1023 EstimatedMass = EstimatedMass1 + EstimatedMass2;
1024 if ( StringM > EstimatedMass ) {
1031 if ( (EstimatedMass1 < 0.) && (EstimatedMass2 > 0.)) {
1038 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 < 0.)) {
1039 EstimatedMass = EstimatedMass1;
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
const G4ThreeVector & GetPosition() const
G4int GetDirection(void) const
G4Parton * GetRightParton(void) const
G4Parton * GetLeftParton(void) const
G4LorentzVector Get4Momentum() const
G4bool IsAFourQuarkString(void) const
G4ParticleDefinition * GetLeftParton(void) const
G4ParticleDefinition * GetRightParton(void) const
G4ParticleDefinition * Build(G4ParticleDefinition *black, G4ParticleDefinition *white)
G4ParticleDefinition * BuildLowSpin(G4ParticleDefinition *black, G4ParticleDefinition *white)
void Boost(G4ThreeVector &Velocity)
G4double GetPDGMass() const
G4int GetPDGEncoding() const
const G4String & GetParticleName() const
const G4String & GetParticleSubType() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
std::vector< G4double > scalarMesonMix
G4ThreeVector SampleQuarkPt(G4double ptMax=-1.)
G4HadronBuilder * hadronizer
void SetSpinThreeHalfBarionProbability(G4double aValue)
G4int SampleQuarkFlavor(void)
G4double MinimalStringMass
std::pair< G4ParticleDefinition *, G4ParticleDefinition * > pDefPair
void SetProbBBbar(G4double aValue)
G4ParticleDefinition * FindParticle(G4int Encoding)
void SetMinimalStringMass2(const G4double aValue)
void SetProbEta_b(G4double aValue)
G4double minMassQQbarStr[5][5]
void SetProbEta_c(G4double aValue)
void SetVectorMesonProbability(G4double aValue)
G4double minMassQDiQStr[5][5][5]
G4KineticTrackVector * ProduceOneHadron(const G4ExcitedString *const theString)
std::vector< G4double > vectorMesonMix
G4double GetStringTensionParameter()
G4double MinimalStringMass2
G4double PossibleHadronMass(const G4FragmentingString *const string, Pcreate build=0, pDefPair *pdefs=0)
virtual G4ParticleDefinition * QuarkSplitup(G4ParticleDefinition *decay, G4ParticleDefinition *&created)
G4ParticleDefinition * FS_RightHadron[350]
G4HadFinalState * ApplyYourself(const G4HadProjectile &, G4Nucleus &) final
void SetScalarMesonMixings(std::vector< G4double > aVector)
G4int ClusterLoopInterrupt
virtual void SetMassCut(G4double aValue)
void SetDiquarkSuppression(G4double aValue)
G4double Mass_of_light_quark
void SetStrangenessSuppression(G4double aValue)
virtual void Sample4Momentum(G4LorentzVector *Mom, G4double Mass, G4LorentzVector *AntiMom, G4double AntiMass, G4double InitialMass)=0
G4double Mass_of_string_junction
G4int StringLoopInterrupt
void SetProbCCbar(G4double aValue)
void SetVectorMesonMixings(std::vector< G4double > aVector)
G4ParticleDefinition * FS_LeftHadron[350]
void SetDiquarkBreakProbability(G4double aValue)
pDefPair CreatePartonPair(G4int NeedParticle, G4bool AllowDiquarks=true)
void SetSigmaTransverseMomentum(G4double aQT)
G4double MesonWeight[5][5][7]
virtual ~G4VLongitudinalStringDecay()
void SetStringTensionParameter(G4double aValue)
std::vector< G4ParticleDefinition * > NewParticles
void CalculateHadronTimePosition(G4double theInitialStringMass, G4KineticTrackVector *)
void SetMinimalStringMass(const G4FragmentingString *const string)
G4double DiquarkBreakProb
G4VLongitudinalStringDecay(const G4String &name="StringDecay")
G4double BaryonWeight[5][5][5][4]
G4ExcitedString * CopyExcited(const G4ExcitedString &string)