67 const double mk0 = 0.497614;
68 const double mass_Kaon = 0.49368;
70 const double mass_Pi0 = 0.1349766;
71 const double meta = 0.547862;
77 sck = mass_Kaon * mass_Kaon;
79 snpi = mass_Pi0 * mass_Pi0;
87 int GG[4][4] = { { 1, 0, 0, 0 }, { 0, -1, 0, 0 }, { 0, 0, -1, 0 }, { 0, 0, 0, -1 } };
88 for (
int i = 0; i < 4; i++ )
90 for (
int j = 0; j < 4; j++ ) { G[i][j] = GG[i][j]; }
129 double P1[4], P2[4], P3[4];
144 value = calDalEva( P1, P2, P3 );
150double EvtD0TopipiEta::calDalEva(
double P1[],
double P2[],
double P3[] ) {
160 PDF[0] = Spin_factor( P1, P2, P3, 1, 2, mrho, Grho );
161 PDF[1] = Spin_factor( P1, P2, P3, 1, 4, mrho, Grho );
162 PDF[2] = Spin_factor( P1, P3, P2, 0, 3, ma0, Ga0 );
163 PDF[3] = Spin_factor( P2, P3, P1, 0, 3, ma0, Ga0 );
164 PDF[4] = Spin_factor( P2, P3, P1, 2, 0, 1.698, 0.265 );
167 for (
int i = 0; i < 5; i++ )
170 pdf = pdf + cof * PDF[i];
172 module = conj( pdf ) * pdf;
173 value =
real( module );
174 return ( value <= 0 ) ? 1e-20 : value;
177EvtComplex EvtD0TopipiEta::Spin_factor(
double P1[],
double P2[],
double P3[],
int spin,
178 int flag,
double mass_R,
double width_R ) {
181 double R[4],
s[3], sp2,
B[2];
183 for (
int i = 0; i < 4; i++ ) {
R[i] = P1[i] + P2[i]; }
185 s[1] = dot( P1, P1 );
186 s[2] = dot( P2, P2 );
189 EvtComplex amp, prop, prop1, prop2;
192 EvtComplex rhokk, rhopieta;
195 if (
flag == 0 ) prop = one;
196 if (
flag == 1 ) prop = propagatorRBW( mass_R, width_R,
s[0],
s[1],
s[2], 3.0, 0 );
199 rhokk = Flatte_rhoab(
s[0], snk, sck );
200 rhopieta = Flatte_rhoab(
s[0], scpi, seta );
202 1.0 / ( mass_R * mass_R -
s[0] - ci * ( 0.341 * rhopieta + 0.341 * 0.892 * rhokk ) );
206 else if ( spin == 1 )
208 if (
flag == 0 ) { prop = EvtComplex( 1.0, 0.0 ); }
209 if (
flag == 1 ) { prop = propagatorRBW( mass_R, width_R,
s[0],
s[1],
s[2], 3.0, 1 ); }
210 if (
flag == 2 ) { prop = propagatorGS( mass_R, width_R,
s[0],
s[1],
s[2], 3.0, 1 ); }
213 prop1 = propagatorGS( mass_R, width_R,
s[0],
s[1],
s[2], 3.0, 1 );
214 prop2 = propagatorRBW( 0.78266, 0.01358,
s[0],
s[1],
s[2], 3.0, 1 );
215 prop = prop1 * prop2;
220 B[0] = barrier( 1,
s[0],
s[1],
s[2], 3.0, mass_R );
221 B[1] = barrier( 1, sD,
s[0], sp2, 5.0, mD );
223 for (
int i = 0; i < 4; i++ ) { tmp += T1[i] * t1[i] * G[i][i]; }
224 amp = tmp * prop *
B[0] *
B[1];
226 else if ( spin == 2 )
228 double T2[4][4], t2[4][4];
231 B[0] = barrier( 2,
s[0],
s[1],
s[2], 3.0, mass_R );
232 B[1] = barrier( 2, sD,
s[0], sp2, 5.0, mD );
234 for (
int i = 0; i < 4; i++ )
236 for (
int j = 0; j < 4; j++ ) { tmp += T2[i][j] * t2[j][i] * G[j][j] * G[i][i]; }
238 if (
flag == 0 ) prop = one;
239 if (
flag == 1 ) prop = propagatorRBW( mass_R, width_R,
s[0],
s[1],
s[2], 3.0, 2 );
240 amp = tmp * prop *
B[0] *
B[1];
242 else { cout <<
"Only S, P, D wave allowed" << endl; }
246double EvtD0TopipiEta::dot(
double* a1,
double* a2 ) {
248 for (
int i = 0; i != 4; i++ ) {
Dot += a1[i] * a2[i] * G[i][i]; }
252double EvtD0TopipiEta::Qabcs(
double sa,
double sb,
double sc ) {
253 double Qabcs = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
254 if ( Qabcs < 0 ) Qabcs = 1e-16;
258double EvtD0TopipiEta::barrier(
double l,
double sa,
double sb,
double sc,
double r,
261 double q0 = Qabcs( sa0, sb, sc );
262 double z0 = q0 * r * r;
263 double q = Qabcs( sa, sb, sc );
270 if ( l == 1 ) F = sqrt( ( 1 + z0 ) / ( 1 + z ) );
271 if ( l == 2 ) F = sqrt( ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ) );
275void EvtD0TopipiEta::calt1(
double daug1[],
double daug2[],
double t1[] ) {
278 for (
int i = 0; i != 4; i++ )
280 pa[i] = daug1[i] + daug2[i];
281 qa[i] = daug1[i] - daug2[i];
285 for (
int i = 0; i != 4; i++ ) { t1[i] = qa[i] - pq / p * pa[i]; }
288void EvtD0TopipiEta::calt2(
double daug1[],
double daug2[],
double t2[][4] ) {
291 calt1( daug1, daug2, t1 );
293 for (
int i = 0; i != 4; i++ ) { pa[i] = daug1[i] + daug2[i]; }
295 for (
int i = 0; i != 4; i++ )
297 for (
int j = 0; j != 4; j++ )
298 { t2[i][j] = t1[i] * t1[j] - 1.0 / 3 * r * ( G[i][j] - pa[i] * pa[j] / p ); }
302double EvtD0TopipiEta::wid(
double mass,
double sa,
double sb,
double sc,
double r,
int l ) {
303 double widm( 0. ),
q( 0. ), q0( 0. );
305 double m = sqrt( sa );
306 q = Qabcs( sa, sb, sc );
307 q0 = Qabcs( sa0, sb, sc );
314 if ( l == 1 ) F = sqrt( ( 1 + z0 ) / ( 1 + z ) );
315 if ( l == 2 ) F = sqrt( ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ) );
316 widm = pow(
t, l + 0.5 ) *
mass / m * F * F;
320EvtComplex EvtD0TopipiEta::propagatorRBW(
double mass,
double width,
double sa,
double sb,
321 double sc,
double r,
int l ) {
323 1.0 / (
mass *
mass - sa - ci *
mass * width * wid(
mass, sa, sb, sc, r, l ) );
327double EvtD0TopipiEta::h(
double m,
double q ) {
329 h = 2 / pi *
q / m * log( ( m + 2 *
q ) / ( 2 * mpi ) );
333double EvtD0TopipiEta::dh(
double mass,
double q0 ) {
334 double dh = h(
mass, q0 ) * ( 1.0 / ( 8 * q0 * q0 ) - 1.0 / ( 2 *
mass *
mass ) ) +
339double EvtD0TopipiEta::f(
double mass,
double sx,
double q0,
double q ) {
340 double m = sqrt( sx );
341 double f =
mass *
mass / ( pow( q0, 3 ) ) *
342 (
q *
q * ( h( m,
q ) - h(
mass, q0 ) ) +
347double EvtD0TopipiEta::d(
double mass,
double q0 ) {
348 double d = 3.0 / pi * spi / ( q0 * q0 ) * log( (
mass + 2 * q0 ) / ( 2 * mpi ) ) +
349 mass / ( 2 * pi * q0 ) - ( spi *
mass ) / ( pi * pow( q0, 3 ) );
353EvtComplex EvtD0TopipiEta::propagatorGS(
double mass,
double width,
double sa,
double sb,
354 double sc,
double r,
int l ) {
355 double q = Qabcs( sa, sb, sc );
357 double q0 = Qabcs( sa0, sb, sc );
360 EvtComplex prop = ( 1 + d(
mass, q0 ) * width /
mass ) /
362 ci *
mass * width * wid(
mass, sa, sb, sc, r, l ) );
366EvtComplex EvtD0TopipiEta::Flatte_rhoab(
double sa,
double sb,
double sc ) {
367 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
369 if (
q > 0 ) { rho = 2.0 * sqrt(
q / sa ) * one; }
370 if (
q < 0 ) { rho = 2.0 * sqrt( -
q / sa ) * ci; }
374EvtComplex EvtD0TopipiEta::propagatorFlatte(
double mass,
double width,
double sx,
double* sb,
376 const double g1sq = 0.5468 * 0.5468;
377 const double g2sq = 0.23 * 0.23;
378 EvtComplex rho1 = Flatte_rhoab( sx, sb[0], sc[0] );
379 EvtComplex rho2 = Flatte_rhoab( sx, sb[1], sc[1] );
380 EvtComplex prop = 1.0 / (
mass *
mass - sx - ci * ( g1sq * rho1 + g2sq * rho2 ) );
float Dot(vector3 v1, vector3 v2)
double sin(const BesAngle a)
double cos(const BesAngle a)
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
void getName(std::string &name)
void decay(EvtParticle *p)
virtual ~EvtD0TopipiEta()
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void setProb(double prob)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
complex_t R(double Q2, double M2, double G, double Mp2, double Mm2)