61 mass[1] = 1.019461e+00;
67 width[0] = 4.7400e-02;
68 width[1] = 4.2660e-03;
70 width[3] = 2.7000e-01;
71 width[4] = 1.3500e-01;
72 width[5] = 2.6500e-01;
102 int GG[4][4] = { { 1, 0, 0, 0 }, { 0, -1, 0, 0 }, { 0, 0, -1, 0 }, { 0, 0, 0, -1 } };
103 for (
int i = 0; i < 4; i++ )
105 for (
int j = 0; j < 4; j++ ) { G[i][j] = GG[i][j]; }
139 double P1[4], P2[4], P3[4];
151 int g0[6] = { 1, 1, 1, 1, 1, 1 };
153 calEvaMy( P1, P2, P3, mass, width, rho, phi, g0, modetype, nstates, value );
158void EvtDsToKKpi::MIP_LineShape(
double sa,
double pro[2] ) {
159 double m0 =
mass[2], cKK = width[2];
160 pro[0] = sqrt( 1 / ( ( ( m0 * m0 ) - sa ) * ( ( m0 * m0 ) - sa ) +
161 ( cKK * m0 * sqrt( 1 - 4 * mass_Kaon * mass_Kaon / sa ) ) *
162 ( cKK * m0 * sqrt( 1 - 4 * mass_Kaon * mass_Kaon / sa ) ) ) );
165void EvtDsToKKpi::calEvaMy(
double* pKm,
double* pKp,
double* pPi,
double* mass1,
166 double* width1,
double* amp,
double* phase,
int* g0,
int* modetype,
167 int nstates,
double& Result ) {
168 double pF0_980[4], pPhi1020[4], pKstr[4], pD[4], p23[4];
169 pKp[0] = sqrt( mass_Kaon * mass_Kaon + pKp[1] * pKp[1] + pKp[2] * pKp[2] + pKp[3] * pKp[3] );
170 pKm[0] = sqrt( mass_Kaon * mass_Kaon + pKm[1] * pKm[1] + pKm[2] * pKm[2] + pKm[3] * pKm[3] );
171 pPi[0] = sqrt( mass_Pion * mass_Pion + pPi[1] * pPi[1] + pPi[2] * pPi[2] + pPi[3] * pPi[3] );
172 for (
int u = 0; u < 4; u++ )
174 pF0_980[u] = pKp[u] + pKm[u];
175 pPhi1020[u] = pKp[u] + pKm[u];
176 pKstr[u] = pKm[u] + pPi[u];
177 p23[u] = pKp[u] + pPi[u];
178 pD[u] = pKp[u] + pKm[u] + pPi[u];
180 double cof[2], amp_tmp1[2], amp_tmp2[2], amp_tmp[2], amp_PDF[2], PDF[2];
188 double temp_PDF, tmp1, tmp2, temp[2];
189 double pro[2], pro0[2], pro1[2];
190 double t1D[4], t2D[4][4],
B[3], t1Tm[4];
191 double t1kstr1[4], t1phi1020[4], t1D1[4], t1D2[4];
193 double sD, sF0_980, sF0_1710, sF0_1370, sKp, sKm, sPi, sKstr, sPhi1020, sKstr1430;
194 sF0_980 = SCADot( pF0_980, pF0_980 );
197 sKstr = SCADot( pKstr, pKstr );
198 sD = SCADot( pD, pD );
200 sPhi1020 = SCADot( pPhi1020, pPhi1020 );
201 sKp = SCADot( pKp, pKp );
202 sKm = SCADot( pKm, pKm );
203 sPi = SCADot( pPi, pPi );
205 calt1( pKm, pPi, t1kstr1 );
206 calt1( pKm, pKp, t1phi1020 );
207 calt1( pKstr, pKp, t1D1 );
208 calt1( pPhi1020, pPi, t1D2 );
210 double mDs = sqrt( sD );
211 for (
int i = 0; i < nstates; i++ )
223 cof[0] = amp[i] *
cos( phase[i] );
224 cof[1] = amp[i] *
sin( phase[i] );
225 if ( modetype[i] == 13 )
228 double amp_a0[2] = { 0 };
229 double sa0_980 = sF0_980;
230 double sKp2[2] = { sKp, mass_Pion * mass_Pion };
231 double sKma2[2] = { sKm, mass_Eta * mass_Eta };
233 MIP_LineShape( sa0_980, pro );
234 B[0] = barrier( 0, sa0_980, sKp, sKm, rRes );
236 tmp1 = temp_PDF *
B[0];
237 amp_a0[0] = tmp1 * pro[0];
238 amp_a0[1] = tmp1 * pro[1];
239 amp_tmp1[0] = amp_a0[0];
240 amp_tmp1[1] = amp_a0[1];
242 else if ( modetype[i] == 0 )
253 double sBC = SCADot( p23, p23 );
256 propagatorRBWNeoKstr892( mass1[i], width1[i], sKstr, sPi, sKm, rRes, 1, pro );
257 B[0] = barrierNeo( 1, sKstr, sPi, sKm, rRes, mass1[i] );
258 B[1] = barrierNeoDs( 1, sD, sKstr, sKp, rD, mDs, mass1[i] );
259 temp_PDF = ( sBC - sPhi1020 + ( ( sD - sKp ) * ( sKm - sPi ) / ( sKstr ) ) );
263 if ( g0[i] == 1 ) propagatorRBW( mass1[i], width1[i], sKstr, sKm, sPi, rRes, 1, pro );
265 B[0] = barrier( 1, sKstr, sKm, sPi, rRes );
266 B[1] = barrier( 1, sD, sKstr, sKp, rD );
267 for (
int m = 0; m < 4; m++ )
269 for (
int j = 0; j < 4; j++ ) { temp_PDF += t1D1[m] * t1kstr1[j] * G[m][j]; }
272 tmp1 = temp_PDF *
B[0] *
B[1];
273 amp_tmp1[0] = tmp1 * pro[0];
274 amp_tmp1[1] = tmp1 * pro[1];
276 else if ( modetype[i] == 1 )
297 propagatorRBWNeo( mass1[i], width1[i], sPhi1020, sKm, sKp, rRes, 1, pro );
298 B[0] = barrierNeo( 1, sPhi1020, sKp, sKm, rRes, mass1[i] );
299 B[1] = barrierNeoDs( 1, sD, sPhi1020, sPi, rD, mDs, mass1[i] );
300 double sBC = SCADot( p23, p23 );
301 temp_PDF = ( sKstr - sBC + ( ( sD - sPi ) * ( sKp - sKm ) / ( sKstr ) ) );
306 propagatorRBW( mass1[i], width1[i], sPhi1020, sKm, sKp, rRes, 1, pro );
307 B[0] = barrier( 1, sPhi1020, sKp, sKm, rRes );
308 B[1] = barrier( 1, sD, sPhi1020, sPi, rD );
309 for (
int m = 0; m < 4; m++ )
311 for (
int j = 0; j < 4; j++ ) { temp_PDF += t1D2[m] * t1phi1020[j] * G[m][j]; }
316 tmp1 = temp_PDF *
B[0] *
B[1];
317 amp_tmp1[0] = tmp1 * pro[0];
318 amp_tmp1[1] = tmp1 * pro[1];
320 else if ( modetype[i] == 3 )
328 double sKm2[2] = { sKm, mass_EtaP * mass_EtaP };
329 double sPi2[2] = { sPi, mass_Kaon * mass_Kaon };
330 propagatorKstr1430( mass1[i], sKstr1430, sKm2, sPi2, pro );
332 B[0] = barrier( 0, sPhi1020, sKp, sKm, rRes );
334 amp_tmp1[0] = tmp1 * pro[0];
335 amp_tmp1[1] = tmp1 * pro[1];
343 else if ( modetype[i] == 4 )
347 propagatorRBWNeo( mass1[i], width1[i], sF0_1710, sKp, sKm, rRes, 0, pro );
355 B[0] = barrier( 0, sF0_1710, sKp, sKm, rRes );
357 tmp1 = temp_PDF *
B[0];
358 amp_tmp1[0] = tmp1 * pro[0];
359 amp_tmp1[1] = tmp1 * pro[1];
362 const bool debug89 =
false;
364 else if ( modetype[i] == 5 )
368 propagatorRBWNeo( mass1[i], width1[i], sF0_1370, sKp, sKm, rRes, 0, pro );
376 B[0] = barrier( 0, sF0_1370, sKp, sKm, rRes );
378 amp_tmp1[0] = tmp1 * pro[0];
379 amp_tmp1[1] = tmp1 * pro[1];
381 amp_tmp[0] = amp_tmp1[0];
382 amp_tmp[1] = amp_tmp1[1];
383 Com_Multi( amp_tmp, cof, amp_PDF );
386 PDF[0] += amp_PDF[0];
387 PDF[1] += amp_PDF[1];
388 double valTmp = amp_PDF[0] * amp_PDF[0] + amp_PDF[1] * amp_PDF[1];
391 double value = PDF[0] * PDF[0] + PDF[1] * PDF[1];
392 if ( value <= 0 ) { value = 1e-20; }
397void EvtDsToKKpi::Com_Multi(
double a1[2],
double a2[2],
double res[2] ) {
398 res[0] = a1[0] * a2[0] - a1[1] * a2[1];
399 res[1] = a1[1] * a2[0] + a1[0] * a2[1];
401void EvtDsToKKpi::Com_Divide(
double a1[2],
double a2[2],
double res[2] ) {
402 res[0] = ( a1[0] * a2[0] + a1[1] * a2[1] ) / ( a2[0] * a2[0] + a2[1] * a2[1] );
403 res[1] = ( a1[1] * a2[0] - a1[0] * a2[1] ) / ( a2[0] * a2[0] + a2[1] * a2[1] );
406double EvtDsToKKpi::SCADot(
double a1[4],
double a2[4] ) {
408 _cal = a1[0] * a2[0] - a1[1] * a2[1] - a1[2] * a2[2] - a1[3] * a2[3];
411double EvtDsToKKpi::barrier(
int l,
double sa,
double sb,
double sc,
double r ) {
412 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
413 if (
q < 0 )
q = 1e-16;
418 if ( l == 1 ) F = sqrt( 2 * z / ( 1 + z ) );
419 if ( l == 2 ) F = sqrt( 13 * z * z / ( 9 + 3 * z + z * z ) );
422double EvtDsToKKpi::barrierNeo(
int l,
double sa,
double sb,
double sc,
double r,
double mR ) {
423 double pAB = ( ( sa - sb - sc ) * ( sa - sb - sc ) / 4.0 - ( sb * sc ) ) / sa;
425 ( ( mR * mR - sb - sc ) * ( mR * mR - sb - sc ) / 4.0 - ( sb * sc ) ) / ( mR * mR );
426 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
427 double zAB = pAB * r * r;
428 double zR = pR * r * r;
431 if ( l == 1 ) F = sqrt( ( 1 + zR ) / ( 1 + zAB ) );
432 if ( l == 2 ) F = sqrt( ( 9 + 3 * zAB + zAB * zAB ) / ( 9 + 3 * zAB + zAB * zAB ) );
435double EvtDsToKKpi::barrierNeoDs(
int l,
double sa,
double sb,
double sc,
double r,
double mR,
437 double pAB = ( ( sa - sb - sc ) * ( sa - sb - sc ) / 4.0 - ( sb * sc ) ) / sa;
439 ( ( sa - mb * mb - sc ) * ( sa - mb * mb - sc ) / 4.0 - ( mb * mb * sc ) ) / ( mR * mR );
440 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
441 double zAB = pAB * r * r;
442 double zR = pR * r * r;
445 if ( l == 1 ) F = sqrt( ( 1 + zR ) / ( 1 + zAB ) );
446 if ( l == 2 ) F = sqrt( ( 9 + 3 * zAB + zAB * zAB ) / ( 9 + 3 * zAB + zAB * zAB ) );
450void EvtDsToKKpi::calt1(
double daug1[4],
double daug2[4],
double t1[4] ) {
453 for (
int i = 0; i < 4; i++ )
455 pa[i] = daug1[i] + daug2[i];
456 qa[i] = daug1[i] - daug2[i];
458 p = SCADot( pa, pa );
459 pq = SCADot( pa, qa );
460 for (
int i = 0; i < 4; i++ ) { t1[i] = qa[i] - pq / p * pa[i]; }
462void EvtDsToKKpi::calt2(
double daug1[4],
double daug2[4],
double t2[4][4] ) {
465 calt1( daug1, daug2, t1 );
466 r = SCADot( t1, t1 );
467 for (
int i = 0; i < 4; i++ ) { pa[i] = daug1[i] + daug2[i]; }
468 p = SCADot( pa, pa );
469 for (
int i = 0; i < 4; i++ )
471 for (
int j = 0; j < 4; j++ )
472 { t2[i][j] = t1[i] * t1[j] - 1.0 / 3 * r * ( G[i][j] - pa[i] * pa[j] / p ); }
476void EvtDsToKKpi::propagator(
double mass,
double width,
double sx,
double prop[2] ) {
480 b[0] = mass * mass - sx;
481 b[1] = -mass * width;
482 Com_Divide( a, b, prop );
484double EvtDsToKKpi::wid(
double mass,
double sa,
double sb,
double sc,
double r,
int l ) {
488 double sa0 = mass * mass;
489 double m = sqrt( sa );
490 q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
491 if (
q < 0 )
q = 1e-16;
492 q0 = ( sa0 + sb - sc ) * ( sa0 + sb - sc ) / ( 4 * sa0 ) - sb;
493 if ( q0 < 0 ) q0 = 1e-16;
495 double z =
q * r * r;
496 double z0 = q0 * r * r;
499 if ( l == 1 ) F = sqrt( ( 1 + z0 ) / ( 1 + z ) );
500 if ( l == 2 ) F = sqrt( ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ) );
502 widm = pow(
t, l + 0.5 ) * mass / m * F * F;
506void EvtDsToKKpi::Flatte_rhoab(
double sa,
double sb,
double sc,
double rho[2] ) {
507 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
511 rho[0] = 2 * sqrt(
q / sa );
517 rho[1] = 2 * sqrt( -
q / sa );
521void EvtDsToKKpi::propagatorFlatte(
double mass,
double width,
double sx,
double* sb,
522 double* sc,
double prop[2] ) {
523 double unit[2] = { 1.0 };
524 double ci[2] = { 0, 1 };
526 Flatte_rhoab( sx, sb[0], sc[0], rho1 );
528 Flatte_rhoab( sx, sb[1], sc[1], rho2 );
529 double g1_f980 = 0.165, g2_f980 = 0.69465;
530 double tmp1[2] = { g1_f980, 0 };
532 double tmp2[2] = { g2_f980, 0 };
534 Com_Multi( tmp1, rho1, tmp11 );
535 Com_Multi( tmp2, rho2, tmp22 );
536 double tmp3[2] = { tmp11[0] + tmp22[0], tmp11[1] + tmp22[1] };
538 Com_Multi( tmp3, ci, tmp31 );
539 double tmp4[2] = { mass * mass - sx - tmp31[0], -1.0 * tmp3[1] };
540 Com_Divide(
unit, tmp4, prop );
542void EvtDsToKKpi::propagator980(
double mass,
double sx,
double* sb,
double* sc,
544 double unit[2] = { 1.0 };
545 double ci[2] = { 0, 1 };
547 Flatte_rhoab( sx, sb[0], sc[0], rho1 );
549 Flatte_rhoab( sx, sb[1], sc[1], rho2 );
550 double gK_f980 = 0.69466, gPi_f980 = 0.165;
551 double tmp1[2] = { gK_f980, 0 };
553 double tmp2[2] = { gPi_f980, 0 };
555 Com_Multi( tmp1, rho1, tmp11 );
556 Com_Multi( tmp2, rho2, tmp22 );
557 double tmp3[2] = { tmp11[0] + tmp22[0], tmp11[1] + tmp22[1] };
559 Com_Multi( tmp3, ci, tmp31 );
560 double tmp4[2] = { mass * mass - sx - tmp31[0], -1.0 * tmp31[1] };
561 Com_Divide(
unit, tmp4, prop );
564void EvtDsToKKpi::propagatora0980(
double mass,
double sx,
double* sb,
double* sc,
566 double unit[2] = { 1.0 };
567 double ci[2] = { 0, 1 };
569 Flatte_rhoab( sx, sb[0], sc[0], rho1 );
571 Flatte_rhoab( sx, sb[1], sc[1], rho2 );
572 double gKK_a980 = 0.892 * 0.341, gPiEta_a980 = 0.341;
573 double tmp1[2] = { gKK_a980, 0 };
575 double tmp2[2] = { gPiEta_a980, 0 };
577 Com_Multi( tmp1, rho1, tmp11 );
578 Com_Multi( tmp2, rho2, tmp22 );
579 double tmp3[2] = { tmp11[0] + tmp22[0], tmp11[1] + tmp22[1] };
581 Com_Multi( tmp3, ci, tmp31 );
582 double tmp4[2] = { mass * mass - sx - tmp31[0], -1.0 * tmp31[1] };
583 Com_Divide(
unit, tmp4, prop );
586void EvtDsToKKpi::propagatorKstr1430(
double mass,
double sx,
double* sb,
double* sc,
588 double unit[2] = { 1.0 };
589 double ci[2] = { 0, 1 };
591 Flatte_rhoab( sx, sb[0], sc[0], rho1 );
593 Flatte_rhoab( sx, sb[1], sc[1], rho2 );
594 double gKPi_Kstr1430 = 0.2990, gEtaPK_Kstr1430 = 0.0529;
595 double tmp1[2] = { gKPi_Kstr1430, 0 };
597 double tmp2[2] = { gEtaPK_Kstr1430, 0 };
599 Com_Multi( tmp1, rho1, tmp11 );
600 Com_Multi( tmp2, rho2, tmp22 );
601 double tmp3[2] = { tmp11[0] + tmp22[0], tmp11[1] + tmp22[1] };
603 Com_Multi( tmp3, ci, tmp31 );
604 double tmp4[2] = { mass * mass - sx - tmp31[0], -1.0 * tmp31[1] };
605 Com_Divide(
unit, tmp4, prop );
608void EvtDsToKKpi::propagatorRBW(
double mass,
double width,
double sa,
double sb,
double sc,
609 double r,
int l,
double prop[2] ) {
613 b[0] = mass * mass - sa;
614 b[1] = -mass * width * wid( mass, sa, sb, sc, r, l );
615 Com_Divide( a, b, prop );
618void EvtDsToKKpi::propagatorRBWNeo(
double mass,
double width,
double sa,
double sb,
double sc,
619 double r,
int l,
double prop[2] ) {
623 b[0] = mass * mass - sa;
624 double tmp1 = ( sa - sb - sc );
625 double tmp2 = sb * sc;
626 double pAB = sqrt( ( tmp1 * tmp1 / 4.0 - tmp2 ) / sa );
628 sqrt( ( ( mass * mass - sb - sc ) * ( mass * mass - sb - sc ) / 4.0 - ( sb * sc ) ) /
630 double fR = sqrt( 1.0 + 1.5 * 1.5 * pR * pR ) / sqrt( 1.0 + 1.5 * 1.5 * pAB * pAB );
637 else if ( l == 1 ) { power = 3; }
638 double gammaAB = width * pow( pAB / pR, power ) * ( mass / sqrt( sa ) ) * fR * fR;
639 b[1] = -mass * gammaAB;
640 Com_Divide( a, b, prop );
643void EvtDsToKKpi::propagatorRBWNeoKstr892(
double mass,
double width,
double sa,
double sb,
644 double sc,
double r,
int l,
double prop[2] ) {
648 b[0] = mass * mass - sa;
649 double tmp1 = ( sa - sb - sc );
650 double tmp2 = sb * sc;
651 double pAB = sqrt( ( tmp1 * tmp1 / 4.0 - tmp2 ) / sa );
653 sqrt( ( ( mass * mass - sb - sc ) * ( mass * mass - sb - sc ) / 4.0 - ( sb * sc ) ) /
655 double fR = sqrt( 1.0 + 1.5 * 1.5 * pR * pR ) / sqrt( 1.0 + 1.5 * 1.5 * pAB * pAB );
657 if ( !l ) { power = 1; }
658 else if ( l == 1 ) { power = 3; }
659 double gammaAB = width * pow( pAB / pR, power ) * ( mass / sqrt( sa ) ) * fR * fR;
660 b[1] = -mass * gammaAB;
661 Com_Divide( a, b, prop );
665double EvtDsToKKpi::h(
double m,
double q ) {
666 double h = 2 / math_pi *
q / m * log( ( m + 2 *
q ) / ( 2 * mass_Pion ) );
669double EvtDsToKKpi::dh(
double mass,
double q0 ) {
670 double dh = h( mass, q0 ) * ( 1.0 / ( 8 * q0 * q0 ) - 1.0 / ( 2 * mass * mass ) ) +
671 1.0 / ( 2 * math_pi * mass * mass );
674double EvtDsToKKpi::f(
double mass,
double sx,
double q0,
double q ) {
675 double m = sqrt( sx );
676 double f = mass * mass / ( pow( q0, 3 ) ) *
677 (
q *
q * ( h( m,
q ) - h( mass, q0 ) ) +
678 ( mass * mass - sx ) * q0 * q0 * dh( mass, q0 ) );
681double EvtDsToKKpi::d(
double mass,
double q0 ) {
682 double d = 3.0 / math_pi * mass_Pion * mass_Pion / ( q0 * q0 ) *
683 log( ( mass + 2 * q0 ) / ( 2 * mass_Pion ) ) +
684 mass / ( 2 * math_pi * q0 ) -
685 ( mass_Pion * mass_Pion * mass ) / ( math_pi * pow( q0, 3 ) );
690void EvtDsToKKpi::propagatorGS(
double mass,
double width,
double sa,
double sb,
double sc,
691 double r,
int l,
double prop[2] ) {
693 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
694 double sa0 = mass * mass;
695 double q0 = ( sa0 + sb - sc ) * ( sa0 + sb - sc ) / ( 4 * sa0 ) - sb;
696 if (
q < 0 )
q = 1e-16;
697 if ( q0 < 0 ) q0 = 1e-16;
700 a[0] = 1 + d( mass, q0 ) * width / mass;
702 b[0] = mass * mass - sa + width * f( mass, sa, q0,
q );
703 b[1] = -mass * width * wid( mass, sa, sb, sc, r, l );
704 Com_Divide( a, b, prop );
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per saves r n generator level $ !Flag for chat level in !Latex Output unit
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 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)
void decay(EvtParticle *p)
void getName(std::string &name)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)