95   G4cout << 
"---------------------------- Annihilation----------------" << 
G4endl;
 
  101   if ( ProjectilePDGcode > 0 ) {
 
  119   G4cout << 
"PDG codes " << ProjectilePDGcode << 
" " << TargetPDGcode << G4endl
 
  120          << 
"Pprojec " << Pprojectile << 
" " << Pprojectile.
mag() << G4endl
 
  121          << 
"Ptarget " << Ptarget    << 
" " << Ptarget.
mag() << G4endl
 
  122          << 
"M0 proj target " << std::sqrt( M0projectile2 ) 
 
  123          << 
" " << std::sqrt( M0target2 ) << 
G4endl;
 
  130   Psum = Pprojectile + Ptarget;
 
  134   G4cout << 
"Psum SqrtS S " << Psum << 
" " << std::sqrt( S ) << 
" " << S << 
G4endl;
 
  140   toCms.
rotateZ( -1*Ptmp.phi() );
 
  141   toCms.
rotateY( -1*Ptmp.theta() );
 
  146   G4double X_a( 0.0 ), X_b( 0.0 ), X_c( 0.0 ), X_d( 0.0 );
 
  149                                 ( 2.0*140.0 + 16.0 )*
MeV;  
 
  150   G4double Prel2 = S*S + M0projectile2*M0projectile2 + M0target2*M0target2 -
 
  151                    2.0*S*M0projectile2 - 2.0*S*M0target2 - 2.0*M0projectile2*M0target2;
 
  154   if ( Prel2 <= 0.0 ) {  
 
  162     G4cout << 
"Annih at Rest X a b c d " << X_a << 
" " << X_b << 
" " << X_c << 
" " << X_d 
 
  171     if ( SqrtS < MesonProdThreshold ) {
 
  172       X_b = 3.13 + 140.0*std::pow( ( MesonProdThreshold - SqrtS )/
GeV, 2.5 ); 
 
  174       X_b = 6.8*
GeV / SqrtS;  
 
  187     G4cout << 
"Annih in Flight X a b c d " << X_a << 
" " << X_b << 
" " << X_c << 
" " << X_d
 
  188            << G4endl << 
"SqrtS MesonProdThreshold " << SqrtS << 
" " << MesonProdThreshold
 
  194   if ( ProjectilePDGcode == -2212 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) { 
 
  195     X_b *= 5.0; X_c *= 5.0; X_d *= 6.0;  
 
  196   } 
else if ( ProjectilePDGcode == -2212 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  197     X_b *= 4.0; X_c *= 4.0; X_d *= 4.0;  
 
  198   } 
else if ( ProjectilePDGcode == -2112 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  199     X_b *= 4.0; X_c *= 4.0; X_d *= 4.0;  
 
  200   } 
else if ( ProjectilePDGcode == -2112 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  201     X_b *= 5.0; X_c *= 5.0; X_d *= 6.0;  
 
  202   } 
else if ( ProjectilePDGcode == -3122 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  203     X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;  
 
  204   } 
else if ( ProjectilePDGcode == -3122 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  205     X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;  
 
  206   } 
else if ( ProjectilePDGcode == -3112 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  207     X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;  
 
  208   } 
else if ( ProjectilePDGcode == -3112 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  209     X_b *= 4.0; X_c *= 4.0; X_d *= 2.0;  
 
  210   } 
else if ( ProjectilePDGcode == -3212 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  211     X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;  
 
  212   } 
else if ( ProjectilePDGcode == -3212 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  213     X_b *= 3.0; X_c *= 3.0; X_d *= 2.0;  
 
  214   } 
else if ( ProjectilePDGcode == -3222 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  215     X_b *= 4.0; X_c *= 4.0; X_d *= 2.0;  
 
  216   } 
else if ( ProjectilePDGcode == -3222 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  217     X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;  
 
  218   } 
else if ( ProjectilePDGcode == -3312 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  219     X_b *= 1.0; X_c *= 1.0; X_d *= 0.0;  
 
  220   } 
else if ( ProjectilePDGcode == -3312 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  221     X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;  
 
  222   } 
else if ( ProjectilePDGcode == -3322 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  223     X_b *= 2.0; X_c *= 2.0; X_d *= 0.0;  
 
  224   } 
else if ( ProjectilePDGcode == -3322 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  225     X_b *= 1.0; X_c *= 1.0; X_d *= 0.0;  
 
  226   } 
else if ( ProjectilePDGcode == -3334 && ( TargetPDGcode == 2212 || TargetPDGcode == 2214 ) ) {
 
  227     X_b *= 0.0; X_c *= 0.0; X_d *= 0.0;  
 
  228   } 
else if ( ProjectilePDGcode == -3334 && ( TargetPDGcode == 2112 || TargetPDGcode == 2114 ) ) {
 
  229     X_b *= 0.0; X_c *= 0.0; X_d *= 0.0;  
 
  231     G4cout << 
"Unknown anti-baryon for FTF annihilation: PDGcodes - " 
  232            << ProjectilePDGcode << 
" " << TargetPDGcode << 
G4endl;
 
  236   G4cout << 
"Annih Actual X a b c d " << X_a << 
" " << X_b << 
" " << X_c << 
" " << X_d << 
G4endl;
 
  239   G4double Xannihilation = X_a + X_b + X_c + X_d;
 
  243   UnpackBaryon( ProjectilePDGcode, AQ[0], AQ[1], AQ[2] );
 
  247   UnpackBaryon( TargetPDGcode, Q[0], Q[1], Q[2] ); 
 
  251   if ( Ksi < X_a / Xannihilation ) {
 
  260     G4int SampledCase = G4RandFlat::shootInt( 
G4long( 6 ) );
 
  262     G4int Tmp1( 0 ), Tmp2( 0 );
 
  263     if ( SampledCase == 0 ) {                                    
 
  264     } 
else if ( SampledCase == 1 ) { 
 
  265       Tmp1 = AQ[1]; AQ[1] = AQ[2]; AQ[2] = Tmp1;
 
  266     } 
else if ( SampledCase == 2 ) { 
 
  267       Tmp1 = AQ[0]; AQ[0] = AQ[1]; AQ[1] = Tmp1; 
 
  268     } 
else if ( SampledCase == 3 ) { 
 
  269       Tmp1 = AQ[0]; Tmp2 = AQ[1];  AQ[0] = AQ[2]; AQ[1] = Tmp1;  AQ[2] = Tmp2;
 
  270     } 
else if ( SampledCase == 4 ) { 
 
  271       Tmp1 = AQ[0]; Tmp2 = AQ[1];  AQ[0] = Tmp2;  AQ[1] = AQ[2]; AQ[2] = Tmp1; 
 
  272     } 
else if ( SampledCase == 5 ) { 
 
  273       Tmp1 = AQ[0]; Tmp2 = AQ[1];  AQ[0] = AQ[2]; AQ[1] = Tmp2;  AQ[2] = Tmp1;
 
  304     AveragePt2 = 200.0*200.0; maxPtSquare = S;
 
  308     G4int NumberOfTries( 0 );
 
  313       if ( NumberOfTries == 100*(NumberOfTries/100) ) {
 
  316         AveragePt2 *= ScaleFactor;
 
  319       for ( 
G4int i = 0; i < 6; i++ ) {
 
  320         Quark_Mom [i] = GaussianPt( AveragePt2, maxPtSquare );
 
  321         PtSum += Quark_Mom[i];
 
  325       for( 
G4int i = 0; i < 6; i++ ) {
 
  326         Quark_Mom[i] -= PtSum;
 
  328         ModMom2[i] = Quark_Mom[i].
mag2();
 
  329         SumMt += std::sqrt( ModMom2[i] + MassQ2 );
 
  331     } 
while ( SumMt > SqrtS );
 
  333     G4double WminusTarget( 0.0 ), WplusProjectile( 0.0 );
 
  362       if ( NumberOfTries == 100*(NumberOfTries/100) ) { 
 
  367       if ( Alfa_R == 1.0 ) {
 
  371         Quark_Mom[0].
setZ( Xaq1 ); Quark_Mom[1].
setZ( Xaq2 ); Quark_Mom[2].
setZ( Xaq3 );
 
  376         Quark_Mom[0].
setZ( Xaq1 ); Quark_Mom[1].
setZ( Xaq2 ); Quark_Mom[2].
setZ( Xaq3 );
 
  380       if ( Alfa_R == 1.0 ) {
 
  384         Quark_Mom[3].
setZ( Xq1 ); Quark_Mom[4].
setZ( Xq2 ); Quark_Mom[5].
setZ( Xq3 );
 
  389         Quark_Mom[3].
setZ( Xq1 ); Quark_Mom[4].
setZ( Xq2 ); Quark_Mom[5].
setZ( Xq3 );
 
  393       for ( 
G4int i = 0; i < 3; i++ ) {  
 
  394         if ( Quark_Mom[i].getZ() != 0.0 ) { 
 
  395           Alfa += ( ScaleFactor * ModMom2[i] + MassQ2 ) / Quark_Mom[i].getZ();
 
  400       for ( 
G4int i = 3; i < 6; i++ ) {  
 
  401         if ( Quark_Mom[i].getZ() != 0.0 ) {
 
  402           Beta += ( ScaleFactor * ModMom2[i] + MassQ2 ) / Quark_Mom[i].getZ();
 
  408       if ( ! Succes ) 
continue;
 
  410       if ( std::sqrt( Alfa ) + std::sqrt( Beta ) > SqrtS ) {
 
  415       G4double DecayMomentum2 = S*S + Alfa*Alfa + Beta*Beta
 
  416                               - 2.0*S*Alfa - 2.0*S*Beta - 2.0*Alfa*Beta;
 
  418       WminusTarget = ( S - Alfa + Beta + std::sqrt( DecayMomentum2 ) ) / 2.0 / SqrtS; 
 
  419       WplusProjectile = SqrtS - Beta/WminusTarget;
 
  421     } 
while ( ! Succes );
 
  423     G4double SqrtScaleF = std::sqrt( ScaleFactor );
 
  424     for ( 
G4int i = 0; i < 3; i++ ) {
 
  425       G4double Pz = WplusProjectile * Quark_Mom[i].
getZ() / 2.0 -
 
  426                     ( ScaleFactor * ModMom2[i] + MassQ2 ) / 
 
  427                     ( 2.0 * WplusProjectile * Quark_Mom[i].getZ() ); 
 
  428       Quark_Mom[i].
setZ( Pz );
 
  429       if ( ScaleFactor != 1.0 ) {
 
  430         Quark_Mom[i].
setX( SqrtScaleF * Quark_Mom[i].getX() ); 
 
  431         Quark_Mom[i].
setY( SqrtScaleF * Quark_Mom[i].getY() );
 
  434     for ( 
G4int i = 3; i < 6; i++ ) {
 
  435       G4double Pz = -WminusTarget * Quark_Mom[i].
getZ() / 2.0 +
 
  436                      ( ScaleFactor * ModMom2[i] + MassQ2 ) / 
 
  437                      ( 2.0 * WminusTarget * Quark_Mom[i].getZ() );
 
  438       Quark_Mom[i].
setZ( Pz );
 
  439       if ( ScaleFactor != 1.0 ) {
 
  440         Quark_Mom[i].
setX( SqrtScaleF * Quark_Mom[i].getX() ); 
 
  441         Quark_Mom[i].
setY( SqrtScaleF * Quark_Mom[i].getY() );
 
  448     G4LorentzVector Pstring1( tmp, std::sqrt( Quark_Mom[0].mag2() + MassQ2 ) +
 
  449                                    std::sqrt( Quark_Mom[3].mag2() + MassQ2 ) );
 
  456     tmp = Quark_Mom[1] + Quark_Mom[4];
 
  457     G4LorentzVector Pstring2( tmp, std::sqrt( Quark_Mom[1].mag2() + MassQ2 ) +
 
  458                                    std::sqrt( Quark_Mom[4].mag2() + MassQ2 ) );
 
  465     tmp = Quark_Mom[2] + Quark_Mom[5];
 
  466     G4LorentzVector Pstring3( tmp, std::sqrt( Quark_Mom[2].mag2() + MassQ2 ) +
 
  467                                    std::sqrt( Quark_Mom[5].mag2() + MassQ2 ) );
 
  478     if ( Ystring1 > Ystring2  &&  Ystring2 > Ystring3 ) {
 
  479       Pprojectile = Pstring1;
 
  480       LeftString  = Pstring2;
 
  483     if ( Ystring1 > Ystring3  &&  Ystring3 > Ystring2 ) {
 
  484       Pprojectile = Pstring1;
 
  485       LeftString  = Pstring3;
 
  489     if ( Ystring2 > Ystring1  &&  Ystring1 > Ystring3 ) {
 
  490       Pprojectile = Pstring2;
 
  491       LeftString  = Pstring1;
 
  494     if ( Ystring2 > Ystring3  &&  Ystring3 > Ystring1 ) {
 
  495       Pprojectile = Pstring2;
 
  496       LeftString  = Pstring3;
 
  500     if ( Ystring3 > Ystring1  &&  Ystring1 > Ystring2 ) {
 
  501       Pprojectile = Pstring3;
 
  502       LeftString  = Pstring1;
 
  505     if ( Ystring3 > Ystring2  &&  Ystring2 > Ystring1 ) {
 
  506       Pprojectile = Pstring3;
 
  507       LeftString  = Pstring2;
 
  539   if ( Ksi < (X_a + X_b) / Xannihilation ) {
 
  542     G4cout << 
"Process b, quark - anti-quark annihilation, di-q - anti-di-q string" << 
G4endl;
 
  545     G4int CandidatsN( 0 ), CandAQ[9][2], CandQ[9][2];
 
  546     G4int LeftAQ1( 0 ), LeftAQ2( 0 ), LeftQ1( 0 ), LeftQ2( 0 );
 
  548     for ( 
G4int iAQ = 0; iAQ < 3; iAQ++ ) {
 
  549       for ( 
G4int iQ = 0; iQ < 3; iQ++ ) {
 
  550         if ( -AQ[iAQ] == Q[iQ] ) {
 
  551           if ( iAQ == 0 ) { CandAQ[CandidatsN][0] = 1; CandAQ[CandidatsN][1] = 2; }
 
  552           if ( iAQ == 1 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 2; }
 
  553           if ( iAQ == 2 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 1; }
 
  554           if ( iQ  == 0 ) { CandQ[CandidatsN][0]  = 1; CandQ[CandidatsN][1]  = 2; }
 
  555           if ( iQ  == 1 ) { CandQ[CandidatsN][0]  = 0; CandQ[CandidatsN][1]  = 2; }
 
  556           if ( iQ  == 2 ) { CandQ[CandidatsN][0]  = 0; CandQ[CandidatsN][1]  = 1; }
 
  563     if ( CandidatsN != 0 ) {
 
  564       G4int SampledCase = G4RandFlat::shootInt( 
G4long( CandidatsN ) );
 
  565       LeftAQ1 = AQ[ CandAQ[SampledCase][0] ];
 
  566       LeftAQ2 = AQ[ CandAQ[SampledCase][1] ];
 
  567       LeftQ1  =  Q[ CandQ[SampledCase][0] ];
 
  568       LeftQ2  =  Q[ CandQ[SampledCase][1] ];
 
  571       G4int Anti_DQ( 0 ), DQ( 0 );
 
  572       if ( std::abs( LeftAQ1 ) > std::abs( LeftAQ2 ) ) { 
 
  573         Anti_DQ = 1000*LeftAQ1 + 100*LeftAQ2 - 3;  
 
  575         Anti_DQ = 1000*LeftAQ2 + 100*LeftAQ1 - 3;  
 
  578       if ( std::abs( LeftQ1 ) > std::abs( LeftQ2 ) ) { 
 
  579         DQ = 1000*LeftQ1 + 100*LeftQ2 + 3;  
 
  581         DQ = 1000*LeftQ2 + 100*LeftQ1 + 3;  
 
  594       Pprojectile.setPx( 0.0 );  
 
  595       Pprojectile.setPy( 0.0 );  
 
  596       Pprojectile.setPz( 0.0 );
 
  597       Pprojectile.setE( SqrtS );
 
  598       Pprojectile.transform( toLab );
 
  618   if ( Ksi < ( X_a + X_b + X_c ) / Xannihilation ) {
 
  623     G4cout << 
"Process c, quark - anti-quark and string junctions annihilation, 2 strings left." 
  627     G4int CandidatsN( 0 ), CandAQ[9][2], CandQ[9][2];
 
  628     G4int LeftAQ1( 0 ), LeftAQ2( 0 ), LeftQ1( 0 ), LeftQ2( 0 );
 
  630     for ( 
G4int iAQ = 0; iAQ < 3; iAQ++ ) {
 
  631       for ( 
G4int iQ = 0; iQ < 3; iQ++ ) {
 
  632         if ( -AQ[iAQ] == Q[iQ] ) {
 
  633           if ( iAQ == 0 ) { CandAQ[CandidatsN][0] = 1; CandAQ[CandidatsN][1] = 2; }
 
  634           if ( iAQ == 1 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 2; }
 
  635           if ( iAQ == 2 ) { CandAQ[CandidatsN][0] = 0; CandAQ[CandidatsN][1] = 1; }
 
  636           if ( iQ  == 0 ) { CandQ[CandidatsN][0]  = 1; CandQ[CandidatsN][1]  = 2; }
 
  637           if ( iQ  == 1 ) { CandQ[CandidatsN][0]  = 0; CandQ[CandidatsN][1]  = 2; }
 
  638           if ( iQ  == 2 ) { CandQ[CandidatsN][0]  = 0; CandQ[CandidatsN][1]  = 1; }
 
  645     if ( CandidatsN != 0 ) {
 
  646       G4int SampledCase = G4RandFlat::shootInt( 
G4long( CandidatsN ) );
 
  647       LeftAQ1 = AQ[ CandAQ[SampledCase][0] ];
 
  648       LeftAQ2 = AQ[ CandAQ[SampledCase][1] ];
 
  650         LeftQ1 = Q[ CandQ[SampledCase][0] ];
 
  651         LeftQ2 = Q[ CandQ[SampledCase][1] ];
 
  653         LeftQ2 = Q[ CandQ[SampledCase][0] ];
 
  654         LeftQ1 = Q[ CandQ[SampledCase][1] ];
 
  674       AveragePt2 = 200.0*200.0; maxPtSquare = S;
 
  678       G4int    NumberOfTries( 0 );
 
  683         if ( NumberOfTries == 100*(NumberOfTries/100) ) { 
 
  686           AveragePt2 *= ScaleFactor;
 
  689         for( 
G4int i = 0; i < 4; i++ ) {
 
  690           Quark_Mom[i] = GaussianPt( AveragePt2, maxPtSquare );
 
  691           PtSum += Quark_Mom[i];
 
  695         for ( 
G4int i = 0; i < 4; i++ ) {
 
  696           Quark_Mom[i] -= PtSum;
 
  698           ModMom2[i] = Quark_Mom[i].
mag2();
 
  699           SumMt += std::sqrt( ModMom2[i] + MassQ2 );
 
  701       } 
while ( SumMt > SqrtS );
 
  703       G4double WminusTarget( 0.0 ), WplusProjectile( 0.0 );
 
  715         if ( NumberOfTries == 100*(NumberOfTries/100) ) { 
 
  720         if ( Alfa_R == 1.0 ) {
 
  723           Quark_Mom[0].
setZ( Xaq1 ); Quark_Mom[1].
setZ( Xaq2 ); 
 
  727           Quark_Mom[0].
setZ( Xaq1 ); Quark_Mom[1].
setZ( Xaq2 );
 
  731         if ( Alfa_R == 1.0 ) {
 
  734           Quark_Mom[2].
setZ( Xq1 ); Quark_Mom[3].
setZ( Xq2 );
 
  738           Quark_Mom[2].
setZ( Xq1 ); Quark_Mom[3].
setZ( Xq2 );
 
  742         for ( 
G4int i = 0; i < 2; i++ ) {  
 
  743           if ( Quark_Mom[i].getZ() != 0.0 ) {
 
  744             Alfa += ( ScaleFactor * ModMom2[i] + MassQ2 ) / Quark_Mom[i].getZ();
 
  749         for ( 
G4int i = 2; i < 4; i++ ) {  
 
  750           if ( Quark_Mom[i].getZ() != 0.0 ) { 
 
  751             Beta += ( ScaleFactor * ModMom2[i] + MassQ2 ) / Quark_Mom[i].getZ();
 
  757         if ( ! Succes ) 
continue;
 
  759         if ( std::sqrt( Alfa ) + std::sqrt( Beta ) > SqrtS ) {
 
  764         G4double DecayMomentum2 = S*S + Alfa*Alfa + Beta*Beta
 
  765                                 - 2.0*S*Alfa - 2.0*S*Beta - 2.0*Alfa*Beta;
 
  766         WminusTarget = ( S - Alfa + Beta + std::sqrt( DecayMomentum2 ) ) / 2.0 / SqrtS; 
 
  767         WplusProjectile = SqrtS - Beta/WminusTarget;
 
  769       } 
while ( ! Succes );
 
  771       G4double SqrtScaleF = std::sqrt( ScaleFactor );
 
  773       for ( 
G4int i = 0; i < 2; i++ ) {
 
  774         G4double Pz = WplusProjectile * Quark_Mom[i].
getZ() / 2.0 -
 
  775                       ( ScaleFactor * ModMom2[i] + MassQ2 ) /
 
  776                       ( 2.0 * WplusProjectile * Quark_Mom[i].getZ() ); 
 
  777         Quark_Mom[i].
setZ( Pz );
 
  778         if ( ScaleFactor != 1.0 ) {
 
  779           Quark_Mom[i].
setX( SqrtScaleF * Quark_Mom[i].getX() ); 
 
  780           Quark_Mom[i].
setY( SqrtScaleF * Quark_Mom[i].getY() );
 
  784       for ( 
G4int i = 2; i < 4; i++ ) {
 
  785         G4double Pz = -WminusTarget * Quark_Mom[i].
getZ() / 2.0 +
 
  786                       ( ScaleFactor * ModMom2[i] + MassQ2 ) /
 
  787                       ( 2.0 * WminusTarget * Quark_Mom[i].getZ() );
 
  788         Quark_Mom[i].
setZ( Pz );
 
  789         if ( ScaleFactor != 1.0 ) {
 
  790           Quark_Mom[i].
setX( SqrtScaleF * Quark_Mom[i].getX() ); 
 
  791           Quark_Mom[i].
setY( SqrtScaleF * Quark_Mom[i].getY() );
 
  799       G4LorentzVector Pstring1( tmp, std::sqrt( Quark_Mom[0].mag2() + MassQ2 ) +
 
  800                                      std::sqrt( Quark_Mom[2].mag2() + MassQ2 ) );
 
  807       tmp = Quark_Mom[1] + Quark_Mom[3];
 
  808       G4LorentzVector Pstring2( tmp, std::sqrt( Quark_Mom[1].mag2() + MassQ2 ) +
 
  809                                      std::sqrt( Quark_Mom[3].mag2() + MassQ2 ) );
 
  816       if ( Ystring1 > Ystring2 ) {
 
  817         Pprojectile = Pstring1;
 
  820         Pprojectile = Pstring2;
 
  848   if ( Ksi < ( X_a + X_b + X_c + X_d ) / Xannihilation ) {
 
  851     G4cout << 
"Process d, only 1 quark - anti-quark string" << 
G4endl;
 
  854     G4int CandidatsN( 0 ), CandAQ[9], CandQ[9];
 
  855     G4int LeftAQ( 0 ), LeftQ( 0 );
 
  857     for ( 
G4int iAQ1 = 0; iAQ1 < 3; iAQ1++ ) {
 
  858       for ( 
G4int iAQ2 = 0; iAQ2 < 3; iAQ2++ ) {
 
  859         if ( iAQ1 != iAQ2 ) {
 
  860           for ( 
G4int iQ1 = 0; iQ1 < 3; iQ1++ ) {
 
  861             for ( 
G4int iQ2 = 0; iQ2 < 3; iQ2++ ) {
 
  863                 if ( -AQ[iAQ1] == Q[iQ1]  &&  -AQ[iAQ2] == Q[iQ2] ) {
 
  864                   if ( iAQ1 == 0  &&  iAQ2 == 1 ) { CandAQ[CandidatsN] = 2; }
 
  865                   if ( iAQ1 == 1  &&  iAQ2 == 0 ) { CandAQ[CandidatsN] = 2; }
 
  867                   if ( iAQ1 == 0  &&  iAQ2 == 2 ) { CandAQ[CandidatsN] = 1; }
 
  868                   if ( iAQ1 == 2  &&  iAQ2 == 0 ) { CandAQ[CandidatsN] = 1; }
 
  870                   if ( iAQ1 == 1  &&  iAQ2 == 2 ) { CandAQ[CandidatsN] = 0; }
 
  871                   if ( iAQ1 == 2  &&  iAQ2 == 1 ) { CandAQ[CandidatsN] = 0; }
 
  873                   if ( iQ1 == 0   &&   iQ2 == 1 ) { CandQ[CandidatsN]  = 2; }
 
  874                   if ( iQ1 == 1   &&   iQ2 == 0 ) { CandQ[CandidatsN]  = 2; }
 
  876                   if ( iQ1 == 0   &&   iQ2 == 2 ) { CandQ[CandidatsN]  = 1; }
 
  877                   if ( iQ1 == 2   &&   iQ2 == 0 ) { CandQ[CandidatsN]  = 1; }
 
  879                   if ( iQ1 == 1   &&   iQ2 == 2 ) { CandQ[CandidatsN]  = 0; }
 
  880                   if ( iQ1 == 2   &&   iQ2 == 1 ) { CandQ[CandidatsN]  = 0; }
 
  890     if ( CandidatsN != 0 ) {
 
  891       G4int SampledCase = G4RandFlat::shootInt( 
G4long( CandidatsN ) );
 
  892       LeftAQ = AQ[ CandAQ[SampledCase] ];
 
  893       LeftQ  =  Q[ CandQ[SampledCase] ];
 
  904       Pprojectile.setPx( 0.0 );  
 
  905       Pprojectile.setPy( 0.0 );  
 
  906       Pprojectile.setPz( 0.0 );
 
  907       Pprojectile.setE( SqrtS );
 
  908       Pprojectile.transform( toLab );
 
  948   if ( AveragePt2 <= 0.0 ) {
 
  952                                         ( std::exp( -maxPtSquare/AveragePt2 ) -1.0 ) );
 
  956   return G4ThreeVector ( Pt*std::cos( phi ), Pt*std::sin( phi ), 0.0 );
 
  963   G4int AbsId = std::abs( IdPDG );
 
  965   Q2 = ( AbsId % 1000 ) / 100;
 
  966   Q3 = ( AbsId % 100 )  / 10;     
 
  967   if ( IdPDG < 0 ) { Q1 = -Q1; Q2 = -Q2; Q3 = -Q3; }  
 
  976                              "G4FTFAnnihilation copy contructor not meant to be called" );
 
  984                              "G4FTFAnnihilation = operator not meant to be called" ); 
 
  992                              "G4FTFAnnihilation == operator not meant to be called" );
 
 1000                              "G4DiffractiveExcitation != operator not meant to be called" );
 
Hep3Vector boostVector() const 
CLHEP::Hep3Vector G4ThreeVector
virtual void SetSecondParton(G4int PDGcode)=0
void SetTimeOfCreation(G4double aTime)
G4int GetPDGEncoding() const 
HepLorentzVector & rotateZ(double)
void SetStatus(const G4int aStatus)
G4ParticleDefinition * GetDefinition() const 
G4GLOB_DLL std::ostream G4cout
virtual void SetFirstParton(G4int PDGcode)=0
G4double GetTimeOfCreation()
void IncrementCollisionCount(G4int aCount)
virtual ~G4FTFAnnihilation()
const G4LorentzVector & Get4Momentum() const 
G4double GetPDGMass() const 
void SetPosition(const G4ThreeVector &aPosition)
HepLorentzVector & rotateY(double)
const G4ThreeVector & GetPosition() const 
virtual G4bool Annihilate(G4VSplitableHadron *aPartner, G4VSplitableHadron *bPartner, G4VSplitableHadron *&AdditionalString, G4FTFParameters *theParameters) const 
HepLorentzVector & transform(const HepRotation &)
void Set4Momentum(const G4LorentzVector &a4Momentum)