92 G4cout <<
"---------------------------- Annihilation----------------" <<
G4endl;
95 CommonVariables common;
100 if ( ProjectilePDGcode > 0 ) {
104 G4double M0projectile2 = common.Pprojectile.mag2();
112 G4cout <<
"PDG codes " << ProjectilePDGcode <<
" " << TargetPDGcode <<
G4endl
113 <<
"Pprojec " << common.Pprojectile <<
" " << common.Pprojectile.mag() <<
G4endl
114 <<
"Ptarget " << common.Ptarget <<
" " << common.Ptarget.mag() <<
G4endl
115 <<
"M0 proj target " << std::sqrt( M0projectile2 )
116 <<
" " << std::sqrt( M0target2 ) <<
G4endl;
121 common.S = Psum.
mag2();
122 common.SqrtS = std::sqrt( common.S );
124 G4cout <<
"Psum SqrtS S " << Psum <<
" " << common.SqrtS <<
" " << common.S <<
G4endl;
132 common.toLab = toCms.
inverse();
135 common.RotateStrings =
true;
143 ( 2.0*140.0 + 16.0 )*MeV;
145 - 2.0*( common.S*(M0projectile2 + M0target2) + M0projectile2*M0target2 );
147 G4double X_a = 0.0, X_b = 0.0, X_c = 0.0, X_d = 0.0;
148 if ( Prel2 <= 0.0 ) {
155 G4cout <<
"Annih at Rest X a b c d " << X_a <<
" " << X_b <<
" " << X_c <<
" " << X_d
159 G4double FlowF = 1.0 / std::sqrt( Prel2 )*GeV;
162 if ( common.SqrtS < MesonProdThreshold ) {
165 X_b = 6.8*GeV / common.SqrtS;
175 X_d = 23.3*GeV*GeV / common.S;
177 G4cout <<
"Annih in Flight X a b c d " << X_a <<
" " << X_b <<
" " << X_c <<
" " << X_d
178 <<
G4endl <<
"SqrtS MesonProdThreshold " << common.SqrtS <<
" " << MesonProdThreshold
184 if ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) {
185 if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2214 ) {
186 X_b *= 5.0; X_c *= 5.0; X_d *= 6.0;
187 }
else if ( ProjectilePDGcode == -2112 || ProjectilePDGcode == -2114 ) {
188 X_b *= 4.0; X_c *= 4.0; X_d *= 4.0;
189 }
else if ( ProjectilePDGcode == -3122 ) {
190 X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;
191 }
else if ( ProjectilePDGcode == -3112 ) {
192 X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;
193 }
else if ( ProjectilePDGcode == -3212 ) {
194 X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;
195 }
else if ( ProjectilePDGcode == -3222 ) {
196 X_b *= 4.0; X_c *= 4.0; X_d *= 2.0;
197 }
else if ( ProjectilePDGcode == -3312 ) {
198 X_b *= 1.0; X_c *= 1.0; X_d *= 0.0;
199 }
else if ( ProjectilePDGcode == -3322 ) {
200 X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;
201 }
else if ( ProjectilePDGcode == -3334 ) {
202 X_b *= 0.0; X_c *= 0.0; X_d *= 0.0;
206 }
else if ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) {
207 if ( ProjectilePDGcode == -2212 || ProjectilePDGcode == -2214 ) {
208 X_b *= 4.0; X_c *= 4.0; X_d *= 4.0;
209 }
else if ( ProjectilePDGcode == -2112 || ProjectilePDGcode == -2114 ) {
210 X_b *= 5.0; X_c *= 5.0; X_d *= 6.0;
211 }
else if ( ProjectilePDGcode == -3122 ) {
212 X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;
213 }
else if ( ProjectilePDGcode == -3112 ) {
214 X_b *= 4.0; X_c *= 4.0; X_d *= 2.0;
215 }
else if ( ProjectilePDGcode == -3212 ) {
216 X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;
217 }
else if ( ProjectilePDGcode == -3222 ) {
218 X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;
219 }
else if ( ProjectilePDGcode == -3312 ) {
220 X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;
221 }
else if ( ProjectilePDGcode == -3322 ) {
222 X_b *= 1.0; X_c *= 1.0; X_d *= 0.0;
223 }
else if ( ProjectilePDGcode == -3334 ) {
224 X_b *= 0.0; X_c *= 0.0; X_d *= 0.0;
232 G4cout <<
"Unknown anti-baryon for FTF annihilation: PDGcodes - "
233 << ProjectilePDGcode <<
" " << TargetPDGcode <<
G4endl;
237 G4cout <<
"Annih Actual X a b c d " << X_a <<
" " << X_b <<
" " << X_c <<
" " << X_d <<
G4endl;
240 G4double Xannihilation = X_a + X_b + X_c + X_d;
243 UnpackBaryon( ProjectilePDGcode, common.AQ[0], common.AQ[1], common.AQ[2] );
246 UnpackBaryon( TargetPDGcode, common.Q[0], common.Q[1], common.Q[2] );
250 if ( Ksi < X_a / Xannihilation ) {
251 return Create3QuarkAntiQuarkStrings( projectile, target, AdditionalString, theParameters, common );
254 G4int resultCode = 99;
255 if ( Ksi < (X_a + X_b) / Xannihilation ) {
256 resultCode = Create1DiquarkAntiDiquarkString( projectile, target, common );
257 if ( resultCode == 0 ) {
259 }
else if ( resultCode == 99 ) {
264 if ( Ksi < ( X_a + X_b + X_c ) / Xannihilation ) {
265 resultCode = Create2QuarkAntiQuarkStrings( projectile, target, theParameters, common );
266 if ( resultCode == 0 ) {
268 }
else if ( resultCode == 99 ) {
273 if ( Ksi < ( X_a + X_b + X_c + X_d ) / Xannihilation ) {
274 return Create1QuarkAntiQuarkString( projectile, target, theParameters, common );
288 G4FTFAnnihilation::CommonVariables& common )
const {
297 const G4int maxNumberOfLoops = 1000;
304 G4double AveragePt2 = 200.0*200.0, maxPtSquare = common.S;
308 G4int NumberOfTries = 0, loopCounter = 0;
312 G4double x1 = 0.0, x2 = 0.0, x3 = 0.0;
314 for (
G4int iCase = 0; iCase < 2; ++iCase ) {
317 if ( Alfa_R == 1.0 ) {
318 x1 = 1.0 - std::sqrt( r1 );
319 x2 = (1.0 - x1) * r2;
322 x2 = (1.0 - x1) *
sqr( std::sin( pi/2.0*r2 ) );
326 G4int index = iCase*3;
327 Quark_Xs[index] = x1; Quark_Xs[index+1] = x2; Quark_Xs[index+2] = x3;
328 Product *= (x1*x2*x3);
331 if ( Product == 0.0 )
continue;
334 if ( NumberOfTries == 100*(NumberOfTries/100) ) {
337 AveragePt2 *= ScaleFactor;
341 for (
G4int i = 0; i < 6; ++i ) {
342 Quark_Mom [i] = GaussianPt( AveragePt2, maxPtSquare );
343 PtSum += Quark_Mom[i];
347 Alfa = 0.0; Beta = 0.0;
349 for (
G4int i = 0; i < 6; ++i ) {
350 Quark_Mom[i] -= PtSum;
352 G4double val = ( Quark_Mom[i].
mag2() + MassQ2 ) / Quark_Xs[i];
360 }
while ( ( std::sqrt( Alfa ) + std::sqrt( Beta ) > common.SqrtS ) &&
361 ++loopCounter < maxNumberOfLoops );
363 if ( loopCounter >= maxNumberOfLoops ) {
368 - 2.0*( common.S*(Alfa + Beta) + Alfa*Beta );
370 G4double WminusTarget = 0.0, WplusProjectile = 0.0;
371 WminusTarget = ( common.S - Alfa + Beta + std::sqrt( DecayMomentum2 ) ) / 2.0 / common.SqrtS;
372 WplusProjectile = common.SqrtS - Beta/WminusTarget;
374 for (
G4int iCase = 0; iCase < 2; ++iCase ) {
375 G4int index = iCase*3;
377 if ( iCase == 1 ) w = - WminusTarget;
378 for (
G4int i = 0; i < 3; ++i ) {
379 G4double Pz = w * Quark_Xs[index+i] / 2.0 -
380 ( Quark_Mom[index+i].
mag2() + MassQ2 ) /
381 ( 2.0 * w * Quark_Xs[index+i] );
382 Quark_Mom[index+i].
setZ( Pz );
387 G4int SampledCase = (
G4int)G4RandFlat::shootInt( 6 );
388 G4int Tmp1 = 0, Tmp2 = 0;
389 switch ( SampledCase ) {
390 case 1 : Tmp1 = common.AQ[1]; common.AQ[1] = common.AQ[2]; common.AQ[2] = Tmp1;
break;
391 case 2 : Tmp1 = common.AQ[0]; common.AQ[0] = common.AQ[1]; common.AQ[1] = Tmp1;
break;
392 case 3 : Tmp1 = common.AQ[0]; Tmp2 = common.AQ[1]; common.AQ[0] = common.AQ[2];
393 common.AQ[1] = Tmp1; common.AQ[2] = Tmp2;
break;
394 case 4 : Tmp1 = common.AQ[0]; Tmp2 = common.AQ[1]; common.AQ[0] = Tmp2;
395 common.AQ[1] = common.AQ[2]; common.AQ[2] = Tmp1;
break;
396 case 5 : Tmp1 = common.AQ[0]; Tmp2 = common.AQ[1]; common.AQ[0] = common.AQ[2];
397 common.AQ[1] = Tmp2; common.AQ[2] = Tmp1;
break;
404 G4int NewCode = 0, antiQuark = 0, quark = 0;
406 for (
G4int iString = 0; iString < 3; ++iString ) {
407 if ( iString == 0 ) {
408 antiQuark = common.AQ[0]; quark = common.Q[0];
412 }
else if ( iString == 1 ) {
413 quark = common.Q[1]; antiQuark = common.AQ[1];
418 antiQuark = common.AQ[2]; quark = common.Q[2];
420 G4int absAntiQuark = std::abs( antiQuark ), absQuark = std::abs( quark );
422 if ( absAntiQuark == absQuark ) {
423 if ( absAntiQuark != 3 ) {
438 if ( absAntiQuark > absQuark ) {
439 NewCode = absAntiQuark*100 + absQuark*10 + 1; NewCode *= absAntiQuark/antiQuark;
441 NewCode = absQuark*100 + absAntiQuark*10 + 1; NewCode *= absQuark/quark;
446 if ( ! TestParticle )
return false;
447 if ( iString == 0 ) {
451 }
else if ( iString == 1 ) {
466 G4int QuarkOrder[3] = { 0 };
467 G4double YstringMax = 0.0, YstringMin = 0.0;
468 for (
G4int i = 0; i < 3; ++i ) {
470 G4LorentzVector Pstring( tmp, std::sqrt( Quark_Mom[i].mag2() + MassQ2 ) +
471 std::sqrt( Quark_Mom[i+3].mag2() + MassQ2 ) );
474 if ( Pstring.e() > 1.0e-30 ) {
475 if ( Pstring.e() + Pstring.pz() < 1.0e-30 ) {
477 if ( Pstring.e() - Pstring.pz() < 1.0e-30 ) {
480 Ystring = Pstring.rapidity();
486 Pstring1 = Pstring; YstringMax = Ystring;
488 }
else if ( i == 1 ) {
489 if ( Ystring > YstringMax ) {
490 Pstring2 = Pstring1; YstringMin = YstringMax;
491 Pstring1 = Pstring; YstringMax = Ystring;
492 QuarkOrder[0] = 1; QuarkOrder[1] = 0;
494 Pstring2 = Pstring; YstringMin = Ystring;
498 if ( Ystring > YstringMax ) {
502 QuarkOrder[1] = QuarkOrder[0];
503 QuarkOrder[2] = QuarkOrder[1];
505 }
else if ( Ystring > YstringMin ) {
516 for (
G4int i = 0; i < 6; ++i ) {
517 Quark_4Mom[i] =
G4LorentzVector( Quark_Mom[i], std::sqrt( Quark_Mom[i].mag2() + MassQ2 ) );
518 if ( common.RotateStrings ) Quark_4Mom[i] *= common.RandomRotation;
534 common.Pprojectile = Pstring1;
535 common.Ptarget = Pstring3;
538 if ( common.RotateStrings ) {
539 common.Pprojectile *= common.RandomRotation;
540 common.Ptarget *= common.RandomRotation;
541 LeftString *= common.RandomRotation;
544 common.Pprojectile.transform( common.toLab );
545 common.Ptarget.transform( common.toLab );
546 LeftString.transform( common.toLab );
569G4int G4FTFAnnihilation::
572 G4FTFAnnihilation::CommonVariables& common )
const {
580 G4cout <<
"Process b, quark - anti-quark annihilation, di-q - anti-di-q string" <<
G4endl;
583 G4int CandidatsN = 0, CandAQ[9][2] = {}, CandQ[9][2] = {};
584 for (
G4int iAQ = 0; iAQ < 3; ++iAQ ) {
585 for (
G4int iQ = 0; iQ < 3; ++iQ ) {
586 if ( -common.AQ[iAQ] == common.Q[iQ] ) {
589 if ( iAQ == 0 ) { CandAQ[CandidatsN][0] = 1; CandAQ[CandidatsN][1] = 2; }
590 if ( iAQ == 1 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 2; }
591 if ( iAQ == 2 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 1; }
592 if ( iQ == 0 ) { CandQ[CandidatsN][0] = 1; CandQ[CandidatsN][1] = 2; }
593 if ( iQ == 1 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 2; }
594 if ( iQ == 2 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 1; }
601 G4int LeftAQ1 = 0, LeftAQ2 = 0, LeftQ1 = 0, LeftQ2 = 0;
602 if ( CandidatsN != 0 ) {
603 G4int SampledCase = (
G4int)G4RandFlat::shootInt( CandidatsN );
604 LeftAQ1 = common.AQ[ CandAQ[SampledCase][0] ];
605 LeftAQ2 = common.AQ[ CandAQ[SampledCase][1] ];
606 LeftQ1 = common.Q[ CandQ[SampledCase][0] ];
607 LeftQ2 = common.Q[ CandQ[SampledCase][1] ];
612 G4int Anti_DQ = 0, DQ = 0;
613 if ( std::abs( LeftAQ1 ) > std::abs( LeftAQ2 ) ) {
614 Anti_DQ = 1000*LeftAQ1 + 100*LeftAQ2 - 3;
616 Anti_DQ = 1000*LeftAQ2 + 100*LeftAQ1 - 3;
618 if ( std::abs( LeftQ1 ) > std::abs( LeftQ2 ) ) {
619 DQ = 1000*LeftQ1 + 100*LeftQ2 + 3;
621 DQ = 1000*LeftQ2 + 100*LeftQ1 + 3;
632 if ( common.RotateStrings ) {
633 Pquark *= common.RandomRotation;
634 Paquark *= common.RandomRotation;
647 common.Pprojectile.setPx( 0.0 );
648 common.Pprojectile.setPy( 0.0 );
649 common.Pprojectile.setPz( 0.0 );
650 common.Pprojectile.setE( common.SqrtS );
651 common.Pprojectile.transform( common.toLab );
674G4int G4FTFAnnihilation::
678 G4FTFAnnihilation::CommonVariables& common )
const {
686 G4cout <<
"Process c, quark - anti-quark and string junctions annihilation, 2 strings left."
693 G4double AveragePt2 = 200.0*200.0, maxPtSquare = common.S, MassQ2 = 0.0, ScaleFactor = 1.0;
694 G4int NumberOfTries = 0, loopCounter = 0;
695 const G4int maxNumberOfLoops = 1000;
697 G4double WminusTarget = 0.0, WplusProjectile = 0.0, Alfa_R = 0.5;
702 for (
G4int iCase = 0; iCase < 2; ++iCase ) {
704 if ( Alfa_R == 1.0 ) {
708 x = 1.0 - std::sqrt( r );
711 x =
sqr( std::sin( pi/2.0*r ) );
713 G4int index = iCase*2;
714 Quark_Xs[index] = x ; Quark_Xs[index+1] = 1.0 - x ;
715 Product *= x*(1.0-x);
718 if ( Product == 0.0 )
continue;
721 if ( NumberOfTries == 100*(NumberOfTries/100) ) {
724 AveragePt2 *= ScaleFactor;
728 for(
G4int i = 0; i < 4; ++i ) {
729 Quark_Mom[i] = GaussianPt( AveragePt2, maxPtSquare );
730 PtSum += Quark_Mom[i];
734 for (
G4int i = 0; i < 4; ++i ) {
735 Quark_Mom[i] -= PtSum;
738 Alfa = 0.0; Beta = 0.0;
739 for (
G4int iCase = 0; iCase < 2; ++iCase ) {
740 G4int index = iCase * 2;
741 for (
G4int i = 0; i < 2; ++i ) {
742 G4double val = ( Quark_Mom[index+i].
mag2() + MassQ2 ) / Quark_Xs[index+i];
751 }
while ( ( std::sqrt( Alfa ) + std::sqrt( Beta ) > common.SqrtS ) &&
752 ++loopCounter < maxNumberOfLoops );
754 if ( loopCounter >= maxNumberOfLoops ) {
759 - 2.0*( common.S*(Alfa + Beta) + Alfa*Beta );
760 WminusTarget = ( common.S - Alfa + Beta + std::sqrt( DecayMomentum2 ) ) / 2.0 / common.SqrtS;
761 WplusProjectile = common.SqrtS - Beta/WminusTarget;
763 for (
G4int iCase = 0; iCase < 2; ++iCase ) {
764 G4int index = iCase*2;
765 for (
G4int i = 0; i < 2; ++i ) {
767 if ( iCase == 1 ) w = - WminusTarget;
768 G4double Pz = w * Quark_Xs[index+i] / 2.0
769 - ( Quark_Mom[index+i].
mag2() + MassQ2 ) /
770 ( 2.0 * w * Quark_Xs[index+i] );
771 Quark_Mom[index+i].
setZ( Pz );
775 G4int CandidatsN = 0, CandAQ[9][2] = {}, CandQ[9][2] = {};
776 G4int LeftAQ1 = 0, LeftAQ2 = 0, LeftQ1 = 0, LeftQ2 = 0;
777 for (
G4int iAQ = 0; iAQ < 3; ++iAQ ) {
778 for (
G4int iQ = 0; iQ < 3; ++iQ ) {
779 if ( -common.AQ[iAQ] == common.Q[iQ] ) {
782 if ( iAQ == 0 ) { CandAQ[CandidatsN][0] = 1; CandAQ[CandidatsN][1] = 2; }
783 if ( iAQ == 1 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 2; }
784 if ( iAQ == 2 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 1; }
785 if ( iQ == 0 ) { CandQ[CandidatsN][0] = 1; CandQ[CandidatsN][1] = 2; }
786 if ( iQ == 1 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 2; }
787 if ( iQ == 2 ) { CandQ[CandidatsN][0] = 0; CandQ[CandidatsN][1] = 1; }
793 if ( CandidatsN != 0 ) {
794 G4int SampledCase = (
G4int)G4RandFlat::shootInt( CandidatsN );
795 LeftAQ1 = common.AQ[ CandAQ[SampledCase][0] ];
796 LeftAQ2 = common.AQ[ CandAQ[SampledCase][1] ];
798 LeftQ1 = common.Q[ CandQ[SampledCase][0] ];
799 LeftQ2 = common.Q[ CandQ[SampledCase][1] ];
801 LeftQ2 = common.Q[ CandQ[SampledCase][0] ];
802 LeftQ1 = common.Q[ CandQ[SampledCase][1] ];
809 G4int NewCode = 0, antiQuark = 0, quark = 0;
811 for (
G4int iString = 0; iString < 2; ++iString ) {
812 if ( iString == 0 ) {
813 antiQuark = LeftAQ1; quark = LeftQ1;
818 quark = LeftQ2; antiQuark = LeftAQ2;
823 G4int absAntiQuark = std::abs( antiQuark ), absQuark = std::abs( quark );
825 if ( absAntiQuark == absQuark ) {
826 if ( absAntiQuark != 3 ) {
841 if ( absAntiQuark > absQuark ) {
842 NewCode = absAntiQuark*100 + absQuark*10 + 1; NewCode *= absAntiQuark/antiQuark;
844 NewCode = absQuark*100 + absAntiQuark*10 + 1; NewCode *= absQuark/quark;
848 if ( ! TestParticle )
return 99;
849 if ( iString == 0 ) {
862 G4double Ystring1 = 0.0, Ystring2 = 0.0;
864 for (
G4int iCase = 0; iCase < 2; ++iCase ) {
866 G4LorentzVector Pstring( tmp, std::sqrt( Quark_Mom[iCase].mag2() + MassQ2 ) +
867 std::sqrt( Quark_Mom[iCase+2].mag2() + MassQ2 ) );
870 if ( Pstring.e() > 1.0e-30 ) {
871 if ( Pstring.e() + Pstring.pz() < 1.0e-30 ) {
873 if ( Pstring.e() - Pstring.pz() < 1.0e-30 ) {
876 Ystring = Pstring.rapidity();
881 Pstring1 = Pstring; Ystring1 = Ystring;
883 Pstring2 = Pstring; Ystring2 = Ystring;
886 if ( Ystring1 > Ystring2 ) {
887 common.Pprojectile = Pstring1; common.Ptarget = Pstring2;
888 QuarkOrder[0] = 0; QuarkOrder[1] = 1;
890 common.Pprojectile = Pstring2; common.Ptarget = Pstring1;
891 QuarkOrder[0] = 1; QuarkOrder[1] = 0;
894 if ( common.RotateStrings ) {
895 common.Pprojectile *= common.RandomRotation;
896 common.Ptarget *= common.RandomRotation;
899 common.Pprojectile.
transform( common.toLab );
900 common.Ptarget.
transform( common.toLab );
903 for (
G4int i = 0; i < 4; ++i ) {
904 Quark_4Mom[i] =
G4LorentzVector( Quark_Mom[i], std::sqrt( Quark_Mom[i].mag2() + MassQ2 ) );
905 if ( common.RotateStrings ) Quark_4Mom[i] *= common.RandomRotation;
940 G4FTFAnnihilation::CommonVariables& common )
const {
944 G4cout <<
"Process d, only 1 quark - anti-quark string" <<
G4endl;
950 G4int CandidatsN = 0, CandAQ[36], CandQ[36];
951 G4int LeftAQ = 0, LeftQ = 0;
952 for (
G4int iAQ1 = 0; iAQ1 < 3; ++iAQ1 ) {
953 for (
G4int iAQ2 = 0; iAQ2 < 3; ++iAQ2 ) {
954 if ( iAQ1 != iAQ2 ) {
955 for (
G4int iQ1 = 0; iQ1 < 3; ++iQ1 ) {
956 for (
G4int iQ2 = 0; iQ2 < 3; ++iQ2 ) {
958 if ( -common.AQ[iAQ1] == common.Q[iQ1] && -common.AQ[iAQ2] == common.Q[iQ2] ) {
959 if ( ( iAQ1 == 0 && iAQ2 == 1 ) || ( iAQ1 == 1 && iAQ2 == 0 ) ) {
960 CandAQ[CandidatsN] = 2;
961 }
else if ( ( iAQ1 == 0 && iAQ2 == 2 ) || ( iAQ1 == 2 && iAQ2 == 0 ) ) {
962 CandAQ[CandidatsN] = 1;
963 }
else if ( ( iAQ1 == 1 && iAQ2 == 2 ) || ( iAQ1 == 2 && iAQ2 == 1 ) ) {
964 CandAQ[CandidatsN] = 0;
966 if ( ( iQ1 == 0 && iQ2 == 1 ) || ( iQ1 == 1 && iQ2 == 0 ) ) {
967 CandQ[CandidatsN] = 2;
968 }
else if ( ( iQ1 == 0 && iQ2 == 2 ) || ( iQ1 == 2 && iQ2 == 0 ) ) {
969 CandQ[CandidatsN] = 1;
970 }
else if ( ( iQ1 == 1 && iQ2 == 2 ) || ( iQ1 == 2 && iQ2 == 1 ) ) {
971 CandQ[CandidatsN] = 0;
982 if ( CandidatsN != 0 ) {
983 G4int SampledCase = (
G4int)G4RandFlat::shootInt( CandidatsN );
984 LeftAQ = common.AQ[ CandAQ[SampledCase] ];
985 LeftQ = common.Q[ CandQ[SampledCase] ];
991 G4int aAQ = std::abs( LeftAQ ), aQ = std::abs( LeftQ );
1001 if ( aKsi < 0.25 ) {
1013 NewCode = aAQ*100 + aQ*10 + 1; NewCode *= aAQ/LeftAQ;
1015 NewCode = aQ*100 + aAQ*10 + 1; NewCode *= aQ/LeftQ;
1020 if ( ! TestParticle )
return false;
1026 common.Pprojectile.setPx( 0.0 );
1027 common.Pprojectile.setPy( 0.0 );
1028 common.Pprojectile.setPz( 0.0 );
1029 common.Pprojectile.setE( common.SqrtS );
1031 common.Pprojectile.transform( common.toLab );
1036 if ( common.RotateStrings ) {
1037 Pquark *= common.RandomRotation; Paquark *= common.RandomRotation;
1076 if ( AveragePt2 <= 0.0 ) {
1080 (
G4Exp( -maxPtSquare/AveragePt2 ) -1.0 ) );
1084 return G4ThreeVector ( Pt*std::cos( phi ), Pt*std::sin( phi ), 0.0 );
1091 G4int AbsId = std::abs( IdPDG );
1093 Q2 = ( AbsId % 1000 ) / 100;
1094 Q3 = ( AbsId % 100 ) / 10;
1095 if ( IdPDG < 0 ) { Q1 = -Q1; Q2 = -Q2; Q3 = -Q3; }
1104 "G4FTFAnnihilation copy constructor not meant to be called" );
1112 "G4FTFAnnihilation = operator not meant to be called" );
1120 "G4FTFAnnihilation == operator not meant to be called" );
1128 "G4DiffractiveExcitation != operator not meant to be called" );
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
HepLorentzVector & transform(const HepRotation &)
virtual ~G4FTFAnnihilation()
virtual G4bool Annihilate(G4VSplitableHadron *aPartner, G4VSplitableHadron *bPartner, G4VSplitableHadron *&AdditionalString, G4FTFParameters *theParameters) const
void SetTarMinNonDiffMass(const G4double aValue)
void SetProjMinDiffMass(const G4double aValue)
void SetTarMinDiffMass(const G4double aValue)
void SetProjMinNonDiffMass(const G4double aValue)
G4double GetPDGMass() const
G4int GetPDGEncoding() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
void Set4Momentum(const G4LorentzVector &aMomentum)
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
void SetTimeOfCreation(G4double aTime)
void SetStatus(const G4int aStatus)
const G4ParticleDefinition * GetDefinition() const
G4double GetTimeOfCreation()
void Set4Momentum(const G4LorentzVector &a4Momentum)
virtual G4Parton * GetNextParton()=0
virtual void SetSecondParton(G4int PDGcode)=0
virtual G4Parton * GetNextAntiParton()=0
void SetDefinition(const G4ParticleDefinition *aDefinition)
const G4LorentzVector & Get4Momentum() const
const G4ThreeVector & GetPosition() const
void IncrementCollisionCount(G4int aCount)
virtual void SetFirstParton(G4int PDGcode)=0
void SetPosition(const G4ThreeVector &aPosition)