37#define square( x ) ( ( x ) * ( x ) )
64 double StrongPhase = 0;
65 EvtComplex StrongExp( cos( StrongPhase ), sin( StrongPhase ) );
80 EvtComplex Mat_Ppm( cos( -0.5 ), sin( -0.5 ) );
85 EvtComplex Mat_P1 = 0.5 * ( Mat_Ppm - Mat_Pmp );
86 EvtComplex Mat_P0 = 0.5 * ( Mat_Ppm + Mat_Pmp );
102 Mat_Tpm = StrongExp * Mat_Tpm;
103 Nat_Tpm = StrongExp * Nat_Tpm;
107 m_Mat_S3 = Mat_Tpm + Mat_P1 + Mat_P0;
108 m_Mat_S4 = Mat_Tmp - Mat_P1 + Mat_P0;
109 m_Mat_S5 = -Mat_Tpm - Mat_Tmp + Mat_Tp0 + Mat_T0p - 2. * Mat_P0;
113 m_Nat_S3 = Nat_Tpm + Nat_P1 + Nat_P0;
114 m_Nat_S4 = Nat_Tmp - Nat_P1 + Nat_P0;
115 m_Nat_S5 = -Nat_Tpm - Nat_Tmp + Nat_Tp0 + Nat_T0p - 2. * Nat_P0;
137 double& Imag_B0,
double& Real_B0bar,
double& Imag_B0bar )
140 double AB0, AB0bar, Ainter, R1, R2;
153 firstStep( p_pi_plus, p_p2, p_pi_minus, 1 );
154 ierr =
compute3pi( p_pi_plus, p_p2, p_pi_minus, Real_B0, Imag_B0,
155 Real_B0bar, Imag_B0bar, iset );
156 }
while ( ierr != 0 );
157 }
else if ( iset < 0 ) {
158 p_p2 = p_gamma_1 + p_gamma_2;
159 ierr =
compute3pi( p_pi_plus, p_p2, p_pi_minus, Real_B0, Imag_B0,
160 Real_B0bar, Imag_B0bar, iset );
162 std::cout <<
"Provided kinematics is not physical\n";
163 std::cout <<
"Program will stop\n";
171 for (
int i = 0; i < endLoop; ++i ) {
176 firstStep( p_pi_plus, p_p2, p_pi_minus, 1 );
177 ierr =
compute3pi( p_pi_plus, p_p2, p_pi_minus, Real_B0, Imag_B0,
178 Real_B0bar, Imag_B0bar, iset );
184 Ainter = Real_B0 * Imag_B0bar - Imag_B0 * Real_B0bar;
185 R1 = ( AB0 - AB0bar ) / ( AB0 + AB0bar );
186 R2 = ( 2.0 * Ainter ) / ( AB0 + AB0bar );
187 factor = ( 1.0 + sqrt(
square( R1 ) +
square( R2 ) ) ) *
188 ( AB0 + AB0bar ) / 2.0;
213 double& Real_B0,
double& Imag_B0,
214 double& Real_B0bar,
double& Imag_B0bar )
230 Real_B0bar, Imag_B0bar, iset );
231 }
while ( ierr != 0 );
232 }
else if ( iset < 0 ) {
233 ierr =
compute3piMPP( p_p1, p_p2, p_p3, Real_B0, Imag_B0, Real_B0bar,
236 std::cout <<
"Provided kinematics is not physical\n";
237 std::cout <<
"Program will stop\n";
245 for (
int i = 0; i < endLoop; ++i ) {
252 Real_B0bar, Imag_B0bar, iset );
283 double& Real_B0,
double& Imag_B0,
284 double& Real_B0bar,
double& Imag_B0bar )
301 Real_B0bar, Imag_B0bar, iset );
302 }
while ( ierr != 0 );
303 }
else if ( iset < 0 ) {
304 p_p2 = p_p1_gamma1 + p_p1_gamma2;
305 p_p3 = p_p2_gamma1 + p_p2_gamma2;
306 ierr =
compute3piP00( p_p1, p_p2, p_p3, Real_B0, Imag_B0, Real_B0bar,
309 std::cout <<
"Provided kinematics is not physical\n";
310 std::cout <<
"Program will stop\n";
318 for (
int i = 0; i < endLoop; ++i ) {
325 Real_B0bar, Imag_B0bar, iset );
359 double& Real_B0,
double& Imag_B0,
double& Real_B0bar,
374 firstStep( p_K_plus, p_pi_minus, p_p3, 0 );
375 ierr =
computeKpipi( p_K_plus, p_pi_minus, p_p3, Real_B0, Imag_B0,
376 Real_B0bar, Imag_B0bar, iset );
377 }
while ( ierr != 0 );
378 }
else if ( iset < 0 ) {
379 p_p3 = p_gamma_1 + p_gamma_2;
380 ierr =
computeKpipi( p_K_plus, p_pi_minus, p_p3, Real_B0, Imag_B0,
381 Real_B0bar, Imag_B0bar, iset );
383 std::cout <<
"Provided kinematics is not physical\n";
384 std::cout <<
"Program will stop\n";
392 for (
int i = 0; i < endLoop; ++i ) {
396 firstStep( p_K_plus, p_pi_minus, p_p3, 0 );
397 ierr =
computeKpipi( p_K_plus, p_pi_minus, p_p3, Real_B0, Imag_B0,
398 Real_B0bar, Imag_B0bar, iset );
434 const double m1sq = p1.
mass2();
435 const double m2sq = p2.
mass2();
436 const double m3sq = p3.
mass2();
437 double min_m12, min_m13, min_m23;
444 min_m12 = m1sq + m2sq + 2 * sqrt( m1sq * m2sq );
445 min_m13 = m1sq + m3sq + 2 * sqrt( m1sq * m3sq );
446 min_m23 = m2sq + m3sq + 2 * sqrt( m2sq * m3sq );
448 min_m12 = m1sq + m2sq;
449 min_m13 = m1sq + m3sq;
450 min_m23 = m2sq + m3sq;
454 double m13, m12, m23;
484 if ( ( m23 < min_m23 ) || ( m23 > max_m23 ) )
486 if ( ( m13 < min_m13 ) || ( m13 > max_m13 ) )
488 if ( ( m12 < min_m12 ) || ( m12 > max_m12 ) )
495 p1mom =
square( E1 ) - m1sq;
496 p2mom =
square( E2 ) - m2sq;
497 p3mom =
square( E3 ) - m3sq;
498 if ( p1mom < 0 || p2mom < 0 || p3mom < 0 ) {
502 p1mom = sqrt( p1mom );
503 p2mom = sqrt( p2mom );
504 p3mom = sqrt( p3mom );
506 cost13 = ( 2. * E1 * E3 + m1sq + m3sq - m13 ) / ( 2. * p1mom * p3mom );
507 cost12 = ( 2. * E1 * E2 + m1sq + m2sq - m12 ) / ( 2. * p1mom * p2mom );
508 cost23 = ( 2. * E2 * E3 + m2sq + m3sq - m23 ) / ( 2. * p2mom * p3mom );
509 if ( cost13 < -1. || cost13 > 1. || cost12 < -1. || cost12 > 1. ||
510 cost23 < -1. || cost23 > 1. ) {
514 }
while ( eventOK ==
false );
517 p3.
set( E3, 0, 0, p3mom );
518 p1.
set( E1, p1mom * sqrt( 1 -
square( cost13 ) ), 0, p1mom * cost13 );
520 for (
int i = 1; i < 4; ++i ) {
524 std::cout <<
"Unphysical p1 generated: " << p1 << std::endl;
527 std::cout <<
"Unphysical p2 generated: " << p2 << std::endl;
530 std::cout <<
"Unphysical p3 generated: " << p3 << std::endl;
532 double testMB2 =
m_MB2;
546 if ( fabs( m12 + m13 + m23 - testMB2 ) > 1e-4 ) {
547 std::cout <<
"Unphysical event generated: " << m12 <<
" " << m13 <<
" "
553 double MB2,
double m1sq,
double m2sq,
569 static const bool phaseSpace =
false;
572 double min_m12 = m1sq + m2sq + 2 * sqrt( m1sq * m2sq );
575 double min_m13 = m1sq + m3sq + 2 * sqrt( m1sq * m3sq );
578 double min_m23 = m2sq + m3sq + 2 * sqrt( m2sq * m3sq );
587 double x = std::tan( y );
592 m23 = MB2 - m12 - m13;
599 double x = std::tan( y );
604 m23 = MB2 - m12 - m13;
611 double x = std::tan( y );
616 m12 = MB2 - m23 - m13;
621 double MB2,
double m1sq,
double m2sq,
637 static const bool phaseSpace =
false;
640 double min_m12 = m1sq + m2sq;
643 double min_m13 = m1sq + m3sq;
646 double min_m23 = m2sq + m3sq;
651 double x = std::tan( y );
663 m23 = MB2 - m12 - m13;
664 }
else if ( z < 2. ) {
671 m23 = MB2 - m12 - m13;
679 m13 = MB2 - m12 - m23;
684 double MB2,
double m1sq,
double m2sq,
700 static const bool phaseSpace =
false;
703 double min_m12 = m1sq + m2sq;
706 double min_m13 = m1sq + m3sq;
712 double x = std::tan( y );
724 m23 = MB2 - m12 - m13;
732 m23 = MB2 - m12 - m13;
737 double MB2,
double m1sq,
double m2sq,
753 static const bool phaseSpace =
false;
756 double min_m12 = m1sq + m2sq;
759 double min_m13 = m1sq + m3sq;
765 double x = std::tan( y );
777 m23 = MB2 - m12 - m13;
785 m23 = MB2 - m12 - m13;
789 double& real_B0,
double& imag_B0,
790 double& real_B0bar,
double& imag_B0bar,
int iset )
794 double m12 = ( p1 + p2 ).mass();
795 double m13 = ( p1 + p3 ).mass();
796 double m23 = ( p2 + p3 ).mass();
807 Wtot = 1. / sqrt( W12 + W13 + W23 );
818 EvtComplex MatBp = ( Mat_1 + Mat_2 + Mat_3 ) * Wtot;
824 EvtComplex MatBm = ( Mat_1 + Mat_2 + Mat_3 ) * Wtot;
826 real_B0 =
real( MatBp );
827 imag_B0 =
imag( MatBp );
829 real_B0bar =
real( MatBm );
830 imag_B0bar =
imag( MatBm );
837 double& real_B0bar,
double& imag_B0bar,
int iset )
840 const double ASHQ = sqrt( 2. );
841 double m12 = ( p1 + p2 ).mass();
842 double m13 = ( p1 + p3 ).mass();
851 Wtot = 1. / sqrt( W12 + W13 );
860 real_B0 =
real( MatBp );
861 imag_B0 =
imag( MatBp );
863 real_B0bar =
real( MatBm );
864 imag_B0bar =
imag( MatBm );
871 double& real_B0bar,
double& imag_B0bar,
int iset )
874 const double ASHQ = sqrt( 2. );
875 double m12 = ( p1 + p2 ).mass();
876 double m13 = ( p1 + p3 ).mass();
885 Wtot = 1. / sqrt( W12 + W13 );
894 real_B0 =
real( MatBp );
895 imag_B0 =
imag( MatBp );
897 real_B0bar =
real( MatBm );
898 imag_B0bar =
imag( MatBm );
904 double& real_B0,
double& imag_B0,
905 double& real_B0bar,
double& imag_B0bar,
int iset )
909 double m12 = ( p1 + p2 ).mass();
910 double m13 = ( p1 + p3 ).mass();
911 double m23 = ( p2 + p3 ).mass();
924 Wtot = 1. / sqrt( W12 + W13 + W23 );
946 real_B0 =
real( MatB0 ) * Wtot;
947 imag_B0 =
imag( MatB0 ) * Wtot;
948 real_B0bar =
real( MatB0bar ) * Wtot;
949 imag_B0bar =
imag( MatB0bar ) * Wtot;
961 double c2 = cos( phi2 );
962 double c3 = cos( phi3 );
964 double s1 = sqrt( 1. -
square( c1 ) );
965 double s2 = sin( phi2 );
966 double s3 = sin( phi3 );
980 for (
int i = 1; i < 4; ++i ) {
981 mom[i - 1] = p.
get( i );
984 for (
int i = 0; i < 3; ++i ) {
985 for (
int j = 0; j < 3; ++j ) {
994 double EGammaCmsPi0 = sqrt( p.
mass2() ) / 2.;
997 double sinThetaRot = sqrt( 1. -
square( cosThetaRot ) );
1000 pgamma1.
set( 1, EGammaCmsPi0 * sinThetaRot * cos( PhiRot ) );
1001 pgamma1.
set( 2, EGammaCmsPi0 * sinThetaRot * sin( PhiRot ) );
1002 pgamma1.
set( 3, EGammaCmsPi0 * cosThetaRot );
1003 pgamma1.
set( 0, EGammaCmsPi0 );
1005 for (
int i = 1; i < 4; ++i ) {
1006 pgamma2.
set( i, -pgamma1.
get( i ) );
1008 pgamma2.
set( 0, pgamma1.
get( 0 ) );
1018 bool pipiMode =
true;
1020 if ( Mass > 1e-5 ) {
1024 bool relatBW =
true;
1029 double m12 = ( p1 + p2 ).mass();
1030 double e12 = ( p1 + p2 ).get( 0 );
1034 beta = sqrt( argu );
1036 std::cout <<
"Abnormal beta ! Argu = " << argu << std::endl;
1039 double gamma = e12 / m12;
1041 double m13sq = ( p1 + p3 ).mass2();
1042 double costet = ( 2. * p1.
get( 0 ) * p3.
get( 0 ) - m13sq + p1.
mass2() +
1046 double p1z = p1.
d3mag() * costet;
1047 double p1zcms12 = gamma * ( p1z + beta * p1.
get( 0 ) );
1048 double e1cms12 = gamma * ( p1.
get( 0 ) + beta * p1z );
1049 double p1cms12 = sqrt(
square( e1cms12 ) - p1.
mass2() );
1050 double coscms = p1zcms12 / p1cms12;
1054 double m12_2 =
square( m12 );
1060 double numReal = (
m_Mass_rho - m12 ) * factor;
1061 double numImg = 0.5 *
m_Gam_rho * factor;
1070 double factor = 2 * (
square( Mass - m12 ) +
square( 0.5 * Width ) );
1071 factor = coscms * Width / factor;
1072 double numReal = ( Mass - m12 ) * factor;
1073 double numImg = 0.5 * Width * factor;
1083 const bool kuhn_santa =
true;
1086 double AmRho, GamRho, AmRhoP, GamRhoP, beta, AmRhoPP, GamRhoPP, gamma;
1121 ( 1. + beta + gamma );
1126 ( 1. + beta + gamma );
1139 double tmp = ( ( s - Am2Min ) / ( Am2 - Am2Min ) );
1140 double G = Gam * ( Am2 / s ) * sqrt(
square( tmp ) * tmp );
1142 double X = Am2 * ( Am2 - s );
1143 double Y = Am2 * sqrt( s ) * G;
1152 const double AmPi2 =
square( 0.13956995 );
1153 return EvtRBW( s, Am2, Gam, 4. * AmPi2 );
1159 const double AmPi2 =
square( 0.13956995 );
1161 if ( s < 4. * AmPi2 ) {
1165 double tmp = ( ( s - 4. * AmPi2 ) / ( Am2 - 4. * AmPi2 ) );
1167 double G = Gam * ( Am2 / s ) * sqrt(
square( tmp ) * tmp );
1168 double z1 = Am2 - s +
Evtfs( s, Am2, Gam );
1169 double z2 = sqrt( s ) * G;
1170 double z3 = Am2 +
d( Am2 ) * Gam * sqrt( Am2 );
1183 const double AmPi = 0.13956995;
1184 const double AmPi2 =
square( AmPi );
1185 double AmRho = sqrt( AmRho2 );
1186 double k_AmRho2 =
k( AmRho2 );
1187 double result = 3. /
m_pi * AmPi2 /
square( k_AmRho2 ) *
1188 log( ( AmRho + 2. * k_AmRho2 ) / ( 2. * AmPi ) ) +
1189 AmRho / ( 2. *
m_pi * k_AmRho2 ) -
1190 AmPi2 * AmRho / (
m_pi * (
square( k_AmRho2 ) * k_AmRho2 ) );
1196 const double AmPi2 =
square( 0.13956995 );
1197 return 0.5 * sqrt( s - 4. * AmPi2 );
1202 double k_s =
k( s );
1203 double k_Am2 =
k( AmRho2 );
1205 return GamRho * AmRho2 / (
square( k_Am2 ) * k_Am2 ) *
1206 (
square( k_s ) * (
h( s ) -
h( AmRho2 ) ) +
1207 ( AmRho2 - s ) *
square( k_Am2 ) *
dh_ds( AmRho2 ) );
1212 const double AmPi = 0.13956995;
1213 double sqrts = sqrt( s );
1214 double k_s =
k( s );
1215 return 2. /
m_pi * ( k_s / sqrts ) *
1216 log( ( sqrts + 2. * k_s ) / ( 2. * AmPi ) );
1221 return h( s ) * ( 1. / ( 8. *
square(
k( s ) ) ) - 1. / ( 2 * s ) ) +
1222 1. / ( 2. *
m_pi * s );
double imag(const EvtComplex &c)
double real(const EvtComplex &c)
int compute3pi(EvtVector4R &p1, EvtVector4R &p2, EvtVector4R &p3, double &real_B0, double &imag_B0, double &real_B0bar, double &imag_B0bar, int set)
EvtComplex EvtcBW_GS(double s, double Am2, double Gam)
EvtComplex EvtCRhoF_W(double s)
int compute3piP00(EvtVector4R &p1, EvtVector4R &p2, EvtVector4R &p3, double &real_B0, double &imag_B0, double &real_B0bar, double &imag_B0bar, int set)
void Evt3piP00(double alpha, int iset, EvtVector4R &p_p1, EvtVector4R &p_p1_gamma1, EvtVector4R &p_p1_gamma2, EvtVector4R &p_p2_gamma1, EvtVector4R &p_p2_gamma2, double &Real_B0, double &Imag_B0, double &Real_B0bar, double &Imag_B0bar)
void gammaGamma(EvtVector4R &p, EvtVector4R &pgamma1, EvtVector4R &pgamma2)
void generateSqMasses_Kpipi(double &m12, double &m13, double &m23, double MB2, double m1sq, double m2sq, double m3sq)
void generateSqMasses_3piMPP(double &m12, double &m13, double &m23, double MB2, double m1sq, double m2sq, double m3sq)
double Evtfs(double s, double AmRho2, double GamRho)
EvtComplex BreitWigner(EvtVector4R &p1, EvtVector4R &p2, EvtVector4R &p3, int &ierr, double Mass=0, double Width=0)
void firstStep(EvtVector4R &p1, EvtVector4R &p2, EvtVector4R &p3, int mode)
void EvtKpipi(double alpha, double beta, int iset, EvtVector4R &p_K_plus, EvtVector4R &p_pi_minus, EvtVector4R &p_gamma_1, EvtVector4R &p_gamma_2, double &Real_B0, double &Imag_B0, double &Real_B0bar, double &Imag_B0bar)
void rotation(EvtVector4R &p, int newRot)
int computeKpipi(EvtVector4R &p1, EvtVector4R &p2, EvtVector4R &p3, double &real_B0, double &imag_B0, double &real_B0bar, double &imag_B0bar, int set)
void generateSqMasses_3pi(double &m12, double &m13, double &m23, double MB2, double m1sq, double m2sq, double m3sq)
EvtComplex EvtRBW(double s, double Am2, double Gam, double Am2Min)
void generateSqMasses_3piP00(double &m12, double &m13, double &m23, double MB2, double m1sq, double m2sq, double m3sq)
void setConstants(double balpha, double bbeta)
EvtComplex EvtcBW_KS(double s, double Am2, double Gam)
int compute3piMPP(EvtVector4R &p1, EvtVector4R &p2, EvtVector4R &p3, double &real_B0, double &imag_B0, double &real_B0bar, double &imag_B0bar, int set)
void Evt3piMPP(double alpha, int iset, EvtVector4R &p_p1, EvtVector4R &p_p2, EvtVector4R &p_p3, double &Real_B0, double &Imag_B0, double &Real_B0bar, double &Imag_B0bar)
void Evt3pi(double alpha, int iset, EvtVector4R &p_K_plus, EvtVector4R &p_pi_minus, EvtVector4R &p_gamma_1, EvtVector4R &p_gamma_2, double &Real_B0, double &Imag_B0, double &Real_B0bar, double &Imag_B0bar)
void set(int i, double d)
void applyBoostTo(const EvtVector4R &p4, bool inverse=false)