90 int GG[4][4] = { { 1, 0, 0, 0 }, { 0, -1, 0, 0 }, { 0, 0, -1, 0 }, { 0, 0, 0, -1 } };
91 int EE[4][4][4][4] = {
92 { { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } },
93 { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 1 }, { 0, 0, -1, 0 } },
94 { { 0, 0, 0, 0 }, { 0, 0, 0, -1 }, { 0, 0, 0, 0 }, { 0, 1, 0, 0 } },
95 { { 0, 0, 0, 0 }, { 0, 0, 1, 0 }, { 0, -1, 0, 0 }, { 0, 0, 0, 0 } } },
96 { { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, -1 }, { 0, 0, 1, 0 } },
97 { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } },
98 { { 0, 0, 0, 1 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { -1, 0, 0, 0 } },
99 { { 0, 0, -1, 0 }, { 0, 0, 0, 0 }, { 1, 0, 0, 0 }, { 0, 0, 0, 0 } } },
100 { { { 0, 0, 0, 0 }, { 0, 0, 0, 1 }, { 0, 0, 0, 0 }, { 0, -1, 0, 0 } },
101 { { 0, 0, 0, -1 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 1, 0, 0, 0 } },
102 { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } },
103 { { 0, 1, 0, 0 }, { -1, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } } },
104 { { { 0, 0, 0, 0 }, { 0, 0, -1, 0 }, { 0, 1, 0, 0 }, { 0, 0, 0, 0 } },
105 { { 0, 0, 1, 0 }, { 0, 0, 0, 0 }, { -1, 0, 0, 0 }, { 0, 0, 0, 0 } },
106 { { 0, -1, 0, 0 }, { 1, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } },
107 { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } } } };
108 for (
int i = 0; i < 4; i++ )
110 for (
int j = 0; j < 4; j++ )
113 for (
int k = 0; k < 4; k++ )
115 for (
int l = 0; l < 4; l++ ) { E[i][j][k][l] = EE[i][j][k][l]; }
153 double Ks0[4], Pic[4],
Pi0[4];
154 Ks0[0] = ks0.
get( 0 );
155 Pic[0] = pic.
get( 0 );
157 Ks0[1] = ks0.
get( 1 );
158 Pic[1] = pic.
get( 1 );
160 Ks0[2] = ks0.
get( 2 );
161 Pic[2] = pic.
get( 2 );
163 Ks0[3] = ks0.
get( 3 );
164 Pic[3] = pic.
get( 3 );
168 calPDF( Ks0, Pic,
Pi0, value );
173void EvtDToKSpieta::calPDF(
double Ks0[],
double Pic[],
double Pi0[],
double& Result ) {
174 double cof[2], amp_tmp1[2], amp_tmp2[2], amp_tmp[2], amp_PDF[2], PDF[2];
175 double flag[3], mass_R[2], width_R[2];
177 double sa[3], sb[3], sc[3], B[3];
178 double t1D[4], t1V[4], t1A[4];
179 double pS[4], pV[4], pD[4], pA[4];
180 double pro1[2], pro2[2], proKPi_S[2];
185 double mass1[2] = { ma0, mKn_1430 };
186 double width1[2] = { Ga0, GKn_1430 };
187 double g0[2] = { 3, 1 };
191 double P12[4], P23[4], P13[4];
192 double scpi, snpi, sks0;
193 double s12, s13, s23;
194 for (
int i = 0; i < 4; i++ )
196 P12[i] = Pic[i] + Ks0[i];
197 P13[i] = Pi0[i] + Ks0[i];
198 P23[i] = Pic[i] + Pi0[i];
200 scpi = SCADot( Pic, Pic );
201 snpi = SCADot( Pi0, Pi0 );
202 sks0 = SCADot( Ks0, Ks0 );
203 s12 = SCADot( P12, P12 );
204 s13 = SCADot( P13, P13 );
205 s23 = SCADot( P23, P23 );
215 for (
int i = 0; i < 2; i++ )
219 mass1sq = mass1[i] * mass1[i];
220 cof[0] = rho[i] *
cos( phi[i] );
221 cof[1] = rho[i] *
sin( phi[i] );
223 if ( modetype[i] == 23 )
225 temp_PDF = DDalitz( Pic, Pi0, Ks0, spin[i], mass1[i] );
227 propagatorRBW( mass1sq, mass1[i], width1[i], s23, scpi, snpi, rRes, spin[i], pro );
228 if ( g0[i] == 2 ) KPiSLASS( s23, scpi, snpi, pro );
229 if ( g0[i] == 3 ) propagatorFlatte( mass1[i], width1[i], s23, scpi, snpi, 0, pro );
235 amp_tmp[0] = temp_PDF * pro[0];
236 amp_tmp[1] = temp_PDF * pro[1];
238 if ( modetype[i] == 12 )
240 temp_PDF = DDalitz( Ks0, Pic, Pi0, spin[i], mass1[i] );
242 propagatorRBW( mass1sq, mass1[i], width1[i], s12, sks0, scpi, rRes, spin[i], pro );
245 propagatorFlatte( mass1[i], width1[i], s12, sks0, scpi, 1, pro );
246 pro[0] = pro[0] * ( 0.01 + 0.990 * 0.990 ) / ( 0.01 + s12 );
247 pro[1] = pro[1] * ( 0.01 + 0.990 * 0.990 ) / ( 0.01 + s12 );
250 propagatorFlatte( mass1[i], width1[i], s12, sks0, scpi, 1, pro );
257 amp_tmp[0] = temp_PDF * pro[0];
258 amp_tmp[1] = temp_PDF * pro[1];
260 if ( modetype[i] == 13 )
262 temp_PDF = DDalitz( Ks0, Pi0, Pic, spin[i], mass1[i] );
264 propagatorRBW( mass1sq, mass1[i], width1[i], s13, sks0, snpi, rRes, spin[i], pro );
267 double skm2[2] = { sks0, mass_Ks * mass_Ks };
268 double spi2[2] = { snpi, mass_Eta * mass_Eta };
269 propagatorKstr1430( mass1[i], s13, skm2, spi2, pro );
272 propagatorFlatte( mass1[i], width1[i], s13, sks0, snpi, 1, pro );
278 amp_tmp[0] = temp_PDF * pro[0];
279 amp_tmp[1] = temp_PDF * pro[1];
281 if ( modetype[i] == 132 )
283 KPiSLASS( s12, sks0, scpi, Amp_KPiS );
284 amp_tmp[0] = Amp_KPiS[0];
285 amp_tmp[1] = Amp_KPiS[1];
288 Com_Multi( amp_tmp, cof, amp_PDF );
289 PDF[0] += amp_PDF[0];
290 PDF[1] += amp_PDF[1];
295 double value = PDF[0] * PDF[0] + PDF[1] * PDF[1];
301void EvtDToKSpieta::Com_Multi(
double a1[2],
double a2[2],
double res[2] ) {
302 res[0] = a1[0] * a2[0] - a1[1] * a2[1];
303 res[1] = a1[1] * a2[0] + a1[0] * a2[1];
305void EvtDToKSpieta::Com_Divide(
double a1[2],
double a2[2],
double res[2] ) {
306 double tmp = a2[0] * a2[0] + a2[1] * a2[1];
307 res[0] = ( a1[0] * a2[0] + a1[1] * a2[1] ) / tmp;
308 res[1] = ( a1[1] * a2[0] - a1[0] * a2[1] ) / tmp;
311double EvtDToKSpieta::SCADot(
double a1[4],
double a2[4] ) {
312 double _cal = a1[0] * a2[0] - a1[1] * a2[1] - a1[2] * a2[2] - a1[3] * a2[3];
316double EvtDToKSpieta::barrier(
int l,
double sa,
double sb,
double sc,
double r,
318 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
319 if (
q < 0 )
q = 1e-16;
324 double q0 = ( sa0 + sb - sc ) * ( sa0 + sb - sc ) / ( 4 * sa0 ) - sb;
325 if ( q0 < 0 ) q0 = 1e-16;
326 double z0 = q0 * r * r;
329 if ( l == 1 ) F = sqrt( ( 1 + z0 ) / ( 1 + z ) );
330 if ( l == 2 ) F = sqrt( ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ) );
334double EvtDToKSpieta::Barrier(
int l,
double sa,
double sb,
double sc,
double r2 ) {
336 double tmp = sa + sb - sc;
337 double q = 0.25 * tmp * tmp / sa - sb;
338 if (
q < 0 )
q = 1e-16;
340 if ( l == 1 ) { F = sqrt( 2.0 * z / ( 1.0 + z ) ); }
344 F = sqrt( 13.0 * z2 / ( 9.0 + 3.0 * z + z2 ) );
351void EvtDToKSpieta::calt1(
double daug1[4],
double daug2[4],
double t1[4] ) {
354 for (
int i = 0; i < 4; i++ )
356 pa[i] = daug1[i] + daug2[i];
357 qa[i] = daug1[i] - daug2[i];
359 p = SCADot( pa, pa );
360 pq = SCADot( pa, qa );
362 for (
int i = 0; i < 4; i++ ) { t1[i] = qa[i] - tmp * pa[i]; }
364void EvtDToKSpieta::calt2(
double daug1[4],
double daug2[4],
double t2[4][4] ) {
367 calt1( daug1, daug2, t1 );
368 r = SCADot( t1, t1 ) / 3.0;
369 for (
int i = 0; i < 4; i++ ) { pa[i] = daug1[i] + daug2[i]; }
370 p = SCADot( pa, pa );
371 for (
int i = 0; i < 4; i++ )
373 for (
int j = 0; j < 4; j++ )
374 { t2[i][j] = t1[i] * t1[j] - r * ( G[i][j] - pa[i] * pa[j] / p ); }
378void EvtDToKSpieta::propagator(
double mass2,
double mass,
double width,
double sx,
384 b[1] = -
mass * width;
385 Com_Divide( a, b, prop );
387double EvtDToKSpieta::wid(
double mass2,
double mass,
double sa,
double sb,
double sc,
390 double m = sqrt( sa );
391 double tmp = sb - sc;
392 double tmp1 = sa + tmp;
393 double q = 0.25 * tmp1 * tmp1 / sa - sb;
394 if (
q < 0 )
q = 1e-16;
395 double tmp2 = mass2 + tmp;
396 double q0 = 0.25 * tmp2 * tmp2 / mass2 - sb;
397 if ( q0 < 0 ) q0 = 1e-16;
401 if ( l == 0 ) { widm = sqrt(
t ) *
mass / m; }
402 else if ( l == 1 ) { widm =
t * sqrt(
t ) *
mass / m * ( 1 + z0 ) / ( 1 + z ); }
404 { widm =
t *
t * sqrt(
t ) *
mass / m * ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ); }
407double EvtDToKSpieta::widl1(
double mass2,
double mass,
double sa,
double sb,
double sc,
410 double m = sqrt( sa );
411 double tmp = sb - sc;
412 double tmp1 = sa + tmp;
413 double q = 0.25 * tmp1 * tmp1 / sa - sb;
414 if (
q < 0 )
q = 1e-16;
415 double tmp2 = mass2 + tmp;
416 double q0 = 0.25 * tmp2 * tmp2 / mass2 - sb;
417 if ( q0 < 0 ) q0 = 1e-16;
420 double F = ( 1 + z0 ) / ( 1 + z );
422 widm =
t * sqrt(
t ) *
mass / m * F;
425void EvtDToKSpieta::propagatorRBW(
double mass2,
double mass,
double width,
double sa,
426 double sb,
double sc,
double r2,
int l,
double prop[2] ) {
430 double q = 0.25 * ( sa + sb - sc ) * ( sa + sb - sc ) / sa - sb;
433 b[1] = -
mass * width * wid( mass2,
mass, sa, sb, sc, r2, l );
434 Com_Divide( a, b, prop );
437void EvtDToKSpieta::propagatorFlatte(
double mass,
double width,
double sa,
double sb,
438 double sc,
int r,
double prop[2] ) {
439 double q, qKsK, qetapi;
441 double rhoab[2], rhoKsK[2];
442 q = 0.25 * ( sa + sb - sc ) * ( sa + sb - sc ) / sa - sb;
443 qetapi = 0.25 * ( sa + 0.547862 * 0.547862 - 0.13957039 * 0.13957039 ) *
444 ( sa + 0.547862 * 0.547862 - 0.13957039 * 0.13957039 ) / sa -
446 if ( r == 0 ) qKsK = 0.25 * sa - 0.49368 * 0.49368;
447 if ( r == 1 ) qKsK = 0.25 * ( sa + sb - sc ) * ( sa + sb - sc ) / sa - sb;
450 rhoab[0] = 2 * sqrt( qetapi / sa );
456 rhoab[1] = 2 * sqrt( -qetapi / sa );
460 rhoKsK[0] = 2 * sqrt( qKsK / sa );
466 rhoKsK[1] = 2 * sqrt( -qKsK / sa );
471 b[0] =
mass *
mass - sa + 0.341 * rhoab[1] + 0.892 * 0.341 * rhoKsK[1];
472 b[1] = -( 0.341 * rhoab[0] + 0.892 * 0.341 * rhoKsK[0] );
473 Com_Divide( a, b, prop );
476void EvtDToKSpieta::PiPiSWASS(
double sa,
double sb,
double sc,
double prop[2] ) {
477 double tmp = sb - sc;
478 double tmp2 = sa + tmp;
479 double qs = 0.25 * tmp2 * tmp2 / sa - sb;
480 double q = sqrt( qs );
481 double a0 = -0.11 / mass_Pion;
482 prop[0] = 1 / ( 1 +
a0 *
a0 *
q *
q );
483 prop[1] =
a0 *
q / ( 1 +
a0 *
a0 *
q *
q );
485void EvtDToKSpieta::KPiSLASS(
double sa,
double sb,
double sc,
double prop[2] ) {
486 const double m1430 = 1.441;
487 const double sa0 = 1.441 * 1.441;
488 const double w1430 = 0.193;
489 const double Lass1 = 0.25 / sa0;
490 double tmp = sb - sc;
491 double tmp1 = sa0 + tmp;
492 double q0 = Lass1 * tmp1 * tmp1 - sb;
493 if ( q0 < 0 ) q0 = 1e-16;
494 double tmp2 = sa + tmp;
495 double qs = 0.25 * tmp2 * tmp2 / sa - sb;
496 double q = sqrt( qs );
497 double width = w1430 *
q * m1430 / sqrt( sa * q0 );
498 double temp_R = atan( m1430 * width / ( sa0 - sa ) );
499 if ( temp_R < 0 ) temp_R += math_pi;
500 double deltaR = -1.915 + temp_R;
502 atan( 0.226 *
q / ( 2.0 - 3.819 * qs ) );
503 if ( temp_F < 0 ) temp_F += math_pi;
504 double deltaF = 0.002 + temp_F;
505 double deltaS = deltaR + 2.0 * deltaF;
506 double t1 = 0.96 *
sin( deltaF );
507 double t2 =
sin( deltaR );
509 CF[0] =
cos( deltaF );
510 CF[1] =
sin( deltaF );
511 CS[0] =
cos( deltaS );
512 CS[1] =
sin( deltaS );
513 prop[0] = t1 * CF[0] + t2 *
CS[0];
514 prop[1] = t1 * CF[1] + t2 *
CS[1];
517void EvtDToKSpieta::Flatte_rhoab(
double sa,
double sb,
double sc,
double rho[2] ) {
518 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
521 rho[0] = 2 * sqrt(
q / sa );
527 rho[1] = 2 * sqrt( -
q / sa );
531void EvtDToKSpieta::propagatorKstr1430(
double mass,
double sx,
double* sb,
double* sc,
534 double unit[2] = { 1.0 };
535 double ci[2] = { 0, 1 };
537 Flatte_rhoab( sx, sb[0], sc[0], rho1 );
539 Flatte_rhoab( sx, sb[1], sc[1], rho2 );
540 double gKPi_Kstr1430 = 0.2990, gEtaPK_Kstr1430 = 0.0529;
541 double tmp1[2] = { gKPi_Kstr1430, 0 };
543 double tmp2[2] = { gEtaPK_Kstr1430, 0 };
545 Com_Multi( tmp1, rho1, tmp11 );
546 Com_Multi( tmp2, rho2, tmp22 );
547 double tmp3[2] = { tmp11[0] + tmp22[0], tmp11[1] + tmp22[1] };
549 Com_Multi( tmp3, ci, tmp31 );
550 double tmp4[2] = {
mass *
mass - sx - tmp31[0], -1.0 * tmp31[1] };
551 Com_Divide(
unit, tmp4, prop );
553double EvtDToKSpieta::DDalitz(
double P1[4],
double P2[4],
double P3[4],
int Ang,
556 double temp_PDF, v_re;
559 double B[2], s1, s2, s3, sR, sD;
560 for (
int i = 0; i < 4; i++ )
562 pR[i] = P1[i] + P2[i];
563 pD[i] = pR[i] + P3[i];
565 s1 = SCADot( P1, P1 );
566 s2 = SCADot( P2, P2 );
567 s3 = SCADot( P3, P3 );
568 sR = SCADot( pR, pR );
569 sD = SCADot( pD, pD );
571 for (
int i = 0; i != 4; i++ )
573 for (
int j = 0; j != 4; j++ )
577 if ( i == 0 ) G[i][j] = 1;
591 B[0] = barrier( 1, sR, s1, s2, 3.0,
mass );
592 B[1] = barrier( 1, sD, sR, s3, 5.0, 1.869 );
599 for (
int i = 0; i < 4; i++ ) { temp_PDF += t1[i] * T1[i] * G[i][i]; }
603 B[0] = barrier( 2, sR, s1, s2, 3.0,
mass );
604 B[1] = barrier( 2, sD, sR, s3, 5.0, 1.869 );
607 double t2[4][4], T2[4][4];
611 for (
int i = 0; i < 4; i++ )
613 for (
int j = 0; j < 4; j++ ) { temp_PDF += t2[i][j] * T2[j][i] * G[i][i] * G[j][j]; }
616 v_re = temp_PDF *
B[0] *
B[1];
character *LEPTONflag integer iresonances real zeta5 real a0
*******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 getName(std::string &name)
void decay(EvtParticle *p)
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)