136 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::operator== forbidden");
144 throw G4HadronicException(__FILE__, __LINE__,
"G4VLongitudinalStringDecay::operator!= forbidden");
161 pDefPair hadrons(
nullptr,
nullptr );
164 #ifdef debug_VStringDecay
165 G4cout<<
"G4VLongitudinalStringDecay::ProduceOneHadron: PossibleHmass StrMass "
172 if ( hadrons.first !=
nullptr ) {
173 if ( hadrons.second ==
nullptr ) {
176 #ifdef debug_VStringDecay
177 G4cout <<
"VlongSD Warning replacing string by single hadron (G4VLongitudinalStringDecay)" <<
G4endl;
178 G4cout << hadrons.first->GetParticleName()<<G4endl
179 <<
"string .. " <<
string->Get4Momentum() <<
" "
180 <<
string->Get4Momentum().m() <<
G4endl;
189 #ifdef debug_VStringDecay
190 G4cout <<
"VlongSD Warning replacing qq-qqbar string by TWO hadrons (G4VLongitudinalStringDecay)"
191 << hadrons.first->GetParticleName() <<
" / "
192 << hadrons.second->GetParticleName()
193 <<
"string .. " <<
string->Get4Momentum() <<
" "
194 <<
string->Get4Momentum().m() <<
G4endl;
199 &Mom2, hadrons.second->GetPDGMass(),
200 string->Get4Momentum().
mag() );
205 G4ThreeVector Velocity =
string->Get4Momentum().boostVector();
206 result->
Boost(Velocity);
228 #ifdef debug_VStringDecay
229 G4cout<<
"VlongSF Quarks at the string ends "<<
string->GetLeftParton()->GetParticleName()
230 <<
" "<<
string->GetRightParton()->GetParticleName()<<
G4endl;
231 if ( Hadron1 != NULL) {
236 if ( Hadron1 != NULL) { mass = (Hadron1)->GetPDGMass();}
243 #ifdef debug_VStringDecay
244 G4cout<<
"VlongSF string is qq--qqbar: Build two stable hadrons"<<
G4endl;
254 if ( (Hadron1 != NULL) && (Hadron2 != NULL) ) { mass = (Hadron1)->GetPDGMass() + (Hadron2)->GetPDGMass();}
258 #ifdef debug_VStringDecay
259 G4cout<<
"VlongSF *Hadrons 1 and 2, proposed mass "<<Hadron1<<
" "<<Hadron2<<
" "<<mass<<
G4endl;
264 pdefs->first = Hadron1;
265 pdefs->second = Hadron2;
331 #ifdef debug_VStringDecay
338 created = QuarkPair.second;
343 #ifdef debug_VStringDecay
345 G4cout<<
"hadronizer->Build(QuarkPair.first, decay)"<<
G4endl;
359 #ifdef debug_VStringDecay
360 G4cout<<
"VlongSF Create a Diquark - AntiDiquark pair"<<
G4endl;
362 G4int q1(0), q2(0), spin(0), PDGcode(0);
369 PDGcode = (
std::max(q1,q2) * 1000 +
std::min(q1,q2) * 100 + spin) * NeedParticle;
375 #ifdef debug_VStringDecay
376 G4cout<<
"VlongSF Create a Quark - AntiQuark pair"<<
G4endl;
395 #ifdef debug_VStringDecay
396 G4cout<<
"VlongSF SampleQuarkFlavor "<<quark<<
" (ProbCB ProbCCbar ProbBBbar "<<
ProbCB
416 return G4ThreeVector(Pt * std::cos(phi),Pt * std::sin(phi),0);
427 for (
size_t c1 = 0;
c1 < Hadrons->size();
c1++)
433 SumPz += Hadrons->operator[](
c2)->Get4Momentum().pz();
434 SumE += Hadrons->operator[](
c2)->Get4Momentum().e();
436 G4double HadronE = Hadrons->operator[](
c1)->Get4Momentum().e();
437 G4double HadronPz = Hadrons->operator[](
c1)->Get4Momentum().pz();
438 Hadrons->operator[](
c1)->SetFormationTime(
439 (theInitialStringMass - 2.*SumPz + HadronE - HadronPz ) / (2.*kappa) /
c_light );
441 (theInitialStringMass - 2.*SumE - HadronE + HadronPz) / (2.*kappa) );
442 Hadrons->operator[](
c1)->SetPosition(aPosition);
452 "G4VLongitudinalStringDecay::SetSigmaTransverseMomentum after FragmentString() not allowed");
478 "G4VLongitudinalStringDecay::SetDiquarkBreakProbability after FragmentString() not allowed");
490 "G4VLongitudinalStringDecay::SetVectorMesonProbability after FragmentString() not allowed");
504 "G4VLongitudinalStringDecay::SetSpinThreeHalfBarionProbability after FragmentString() not allowed");
518 "G4VLongitudinalStringDecay::SetScalarMesonMixings after FragmentString() not allowed");
520 if ( aVector.size() < 6 )
522 "G4VLongitudinalStringDecay::SetScalarMesonMixings( argument Vector too small");
540 "G4VLongitudinalStringDecay::SetVectorMesonMixings after FragmentString() not allowed");
542 if ( aVector.size() < 6 )
544 "G4VLongitudinalStringDecay::SetVectorMesonMixings( argument Vector too small");
607 for (
G4int i=1; i < 6; i++) {
608 Code1 = 100*i + 10*1 + 1;
611 if (hadron1 != NULL) {
612 for (
G4int j=1; j < 6; j++) {
613 Code2 = 100*j + 10*1 + 1;
615 if (hadron2 != NULL) {
629 for (
G4int i=1; i < 6; i++) {
630 Code1 = 100*i + 10*1 + 1;
632 for (
G4int j=1; j < 6; j++) {
638 Code2 = 1000*kfla + 100*kflb + 10*1 + 2;
639 if ( (j == 1) && (
k==1)) Code2 = 1000*2 + 100*1 + 10*1 + 2;
646 if ((hadron2 != NULL) && (hadron3 != NULL)) {
650 if ((hadron2 != NULL) && (hadron3 == NULL)) {};
652 if ((hadron2 == NULL) && (hadron3 != NULL)) {hadron2 = hadron3;};
666 for (
G4int i=0; i<5; i++)
667 {
for (
G4int j=0; j<5; j++)
675 for (
G4int i=0; i<5; i++)
676 {
for (
G4int j=0; j<5; j++)
742 for (
G4int i=0; i<5; i++)
743 {
for (
G4int j=0; j<5; j++)
745 {
for (
G4int l=0; l<4; l++)
752 G4int kflc(0), kfld(0), kfle(0), kflf(0);
753 for (
G4int i=0; i<5; i++)
754 {
for (
G4int j=0; j<5; j++)
757 kfla = i+1; kflb = j+1; kflc =
k+1;
764 kfle = kfla + kflb + kflc - kfld - kflf;
766 Baryon[i][j][
k][0] = 1000 * kfld + 100 * kfle + 10 * kflf + 2;
768 Baryon[i][j][
k][1] = 1000 * kfld + 100 * kfle + 10 * kflf + 4;
899 for (
G4int i=0; i<5; i++)
900 {
for (
G4int j=0; j<5; j++)
902 {
for (
G4int l=0; l<4; l++)
913 if ((TestHadron == NULL)&&(
Baryon[i][j][
k][l] != 0))
Baryon[i][j][
k][l] = 0;
927 for (
G4int i=0 ; i<350 ; i++ ) {
946 if ((Qleft < 6) && (Qright < 6)) {
953 if ((Qleft < 6) && (Qright > 1000)) {
954 G4int q1=Qright/1000;
955 G4int q2=(Qright/100)%10;
962 if ((Qleft > 1000) && (Qright < 6)) {
964 G4int q2=(Qleft/100)%10;
973 G4double StringM=
string->Get4Momentum().mag();
975 #ifdef debug_LUNDfragmentation
979 G4int q1= Qleft/1000 ;
980 G4int q2=(Qleft/100)%10 ;
982 G4int q3= Qright/1000 ;
983 G4int q4=(Qright/100)%10;
991 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 > 0.)) {
992 EstimatedMass = EstimatedMass1 + EstimatedMass2;
993 if ( StringM > EstimatedMass ) {
1000 if ( (EstimatedMass1 < 0.) && (EstimatedMass2 > 0.)) {
1007 if ( (EstimatedMass1 > 0.) && (EstimatedMass2 < 0.)) {
1008 EstimatedMass = EstimatedMass1;