107 mass_Pion2 = 0.0194797849;
108 mass_2Pion = 0.27914;
109 math_2pi = 6.2831852;
119 int GG[4][4] = { { 1, 0, 0, 0 }, { 0, -1, 0, 0 }, { 0, 0, -1, 0 }, { 0, 0, 0, -1 } };
120 for (
int i = 0; i < 4; i++ )
122 for (
int j = 0; j < 4; j++ ) { G[i][j] = GG[i][j]; }
171 double P1[4], P2[4], P3[4];
194 int g0[5] = { 3, 1, 1, 2, 0 };
195 double r0[5] = { 3.0, 3.0, 3.0, 3.0, 3.0 };
196 double r1[5] = { 5.0, 5.0, 5.0, 5.0, 5.0 };
198 calEva( P1, P2, P3, mass, width, rho, phi, g0, spin, modetype, nstates, value, r0, r1 );
205void EvtD0ToKSpi0eta::Com_Multi(
double a1[2],
double a2[2],
double res[2] ) {
206 res[0] = a1[0] * a2[0] - a1[1] * a2[1];
207 res[1] = a1[1] * a2[0] + a1[0] * a2[1];
209void EvtD0ToKSpi0eta::Com_Divide(
double a1[2],
double a2[2],
double res[2] ) {
210 double tmp = a2[0] * a2[0] + a2[1] * a2[1];
211 res[0] = ( a1[0] * a2[0] + a1[1] * a2[1] ) / tmp;
212 res[1] = ( a1[1] * a2[0] - a1[0] * a2[1] ) / tmp;
215double EvtD0ToKSpi0eta::SCADot(
double a1[4],
double a2[4] ) {
216 double _cal = a1[0] * a2[0] - a1[1] * a2[1] - a1[2] * a2[2] - a1[3] * a2[3];
219double EvtD0ToKSpi0eta::barrier(
int l,
double sa,
double sb,
double sc,
double r,
221 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
222 if (
q < 0 )
q = 1e-16;
227 double q0 = ( sa0 + sb - sc ) * ( sa0 + sb - sc ) / ( 4 * sa0 ) - sb;
228 if ( q0 < 0 ) q0 = 1e-16;
229 double z0 = q0 * r * r;
232 if ( l == 1 ) F = sqrt( ( 1 + z0 ) / ( 1 + z ) );
233 if ( l == 2 ) F = sqrt( ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ) );
237void EvtD0ToKSpi0eta::calt1(
double daug1[4],
double daug2[4],
double t1[4] ) {
240 for (
int i = 0; i < 4; i++ )
242 pa[i] = daug1[i] + daug2[i];
243 qa[i] = daug1[i] - daug2[i];
245 p = SCADot( pa, pa );
246 pq = SCADot( pa, qa );
248 for (
int i = 0; i < 4; i++ ) { t1[i] = qa[i] - tmp * pa[i]; }
250void EvtD0ToKSpi0eta::calt2(
double daug1[4],
double daug2[4],
double t2[4][4] ) {
253 calt1( daug1, daug2, t1 );
254 r = SCADot( t1, t1 ) / 3.0;
255 for (
int i = 0; i < 4; i++ ) { pa[i] = daug1[i] + daug2[i]; }
256 p = SCADot( pa, pa );
257 for (
int i = 0; i < 4; i++ )
259 for (
int j = 0; j < 4; j++ )
260 { t2[i][j] = t1[i] * t1[j] - r * ( G[i][j] - pa[i] * pa[j] / p ); }
264void EvtD0ToKSpi0eta::propagator(
double mass2,
double mass,
double width,
double sx,
270 b[1] = -mass * width;
271 Com_Divide( a, b, prop );
273double EvtD0ToKSpi0eta::wid(
double mass2,
double mass,
double sa,
double sb,
double sc,
276 double m = sqrt( sa );
277 double tmp = sb - sc;
278 double tmp1 = sa + tmp;
279 double q = 0.25 * tmp1 * tmp1 / sa - sb;
280 if (
q < 0 )
q = 1e-16;
281 double tmp2 = mass2 + tmp;
282 double q0 = 0.25 * tmp2 * tmp2 / mass2 - sb;
283 if ( q0 < 0 ) q0 = 1e-16;
287 if ( l == 0 ) { widm = sqrt(
t ) * mass / m; }
288 else if ( l == 1 ) { widm =
t * sqrt(
t ) * mass / m * ( 1 + z0 ) / ( 1 + z ); }
290 { widm =
t *
t * sqrt(
t ) * mass / m * ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ); }
293double EvtD0ToKSpi0eta::widl1(
double mass2,
double mass,
double sa,
double sb,
double sc,
296 double m = sqrt( sa );
297 double tmp = sb - sc;
298 double tmp1 = sa + tmp;
299 double q = 0.25 * tmp1 * tmp1 / sa - sb;
300 if (
q < 0 )
q = 1e-16;
301 double tmp2 = mass2 + tmp;
302 double q0 = 0.25 * tmp2 * tmp2 / mass2 - sb;
303 if ( q0 < 0 ) q0 = 1e-16;
306 double F = ( 1 + z0 ) / ( 1 + z );
308 widm =
t * sqrt(
t ) * mass / m * F;
311void EvtD0ToKSpi0eta::propagatorRBW(
double mass,
double width,
double sa,
double sb,
312 double sc,
double r2,
int l,
double prop[2] ) {
315 double mass2 = mass * mass;
319 b[1] = -mass * width * wid( mass2, mass, sa, sb, sc, r2, l );
320 Com_Divide( a, b, prop );
323void EvtD0ToKSpi0eta::KPiSLASS(
double sa,
double sb,
double sc,
double prop[2] ) {
324 const double m1430 = 1.441;
325 const double sa0 = 1.441 * 1.441;
326 const double w1430 = 0.193;
327 const double Lass1 = 0.25 / sa0;
328 double tmp = sb - sc;
329 double tmp1 = sa0 + tmp;
330 double q0 = Lass1 * tmp1 * tmp1 - sb;
331 if ( q0 < 0 ) q0 = 1e-16;
332 double tmp2 = sa + tmp;
333 double qs = 0.25 * tmp2 * tmp2 / sa - sb;
334 double q = sqrt( qs );
335 double width = w1430 *
q * m1430 / sqrt( sa * q0 );
336 double temp_R = atan( m1430 * width / ( sa0 - sa ) );
337 if ( temp_R < 0 ) temp_R += math_pi;
338 double deltaR = -1.915 + temp_R;
340 atan( 0.226 *
q / ( 2.0 - 3.819 * qs ) );
341 if ( temp_F < 0 ) temp_F += math_pi;
342 double deltaF = 0.002 + temp_F;
343 double deltaS = deltaR + 2.0 * deltaF;
344 double t1 = 0.96 *
sin( deltaF );
345 double t2 =
sin( deltaR );
347 CF[0] =
cos( deltaF );
348 CF[1] =
sin( deltaF );
349 CS[0] =
cos( deltaS );
350 CS[1] =
sin( deltaS );
351 prop[0] = t1 * CF[0] + t2 *
CS[0];
352 prop[1] = t1 * CF[1] + t2 *
CS[1];
355void EvtD0ToKSpi0eta::propagatorGS(
double mass2,
double mass,
double width,
double sa,
356 double sb,
double sc,
double r2,
double prop[2] ) {
358 double tmp = sb - sc;
359 double tmp1 = sa + tmp;
360 double q2 = 0.25 * tmp1 * tmp1 / sa - sb;
361 if ( q2 < 0 ) q2 = 1e-16;
363 double tmp2 = mass2 + tmp;
364 double q02 = 0.25 * tmp2 * tmp2 / mass2 - sb;
365 if ( q02 < 0 ) q02 = 1e-16;
367 double q = sqrt( q2 );
368 double q0 = sqrt( q02 );
369 double m = sqrt( sa );
370 double q03 = q0 * q02;
372 double tmp3 = log( mass + 2 * q0 ) + 1.2926305904;
374 double h = GS1 *
q / m * ( log( m + 2 *
q ) + 1.2926305904 );
375 double h0 = GS1 * q0 / mass * tmp3;
376 double dh = h0 * ( 0.125 / q02 - 0.5 / mass2 ) + GS3 / mass2;
377 double d = GS2 / q02 * tmp3 + GS3 * mass / q0 - GS4 * mass / q03;
378 double f = mass2 / q03 * ( q2 * ( h - h0 ) + ( mass2 - sa ) * q02 * dh );
380 a[0] = 1.0 + d * width / mass;
382 b[0] = mass2 - sa + width *
f;
383 b[1] = -mass * width * widl1( mass2, mass, sa, sb, sc, r2 );
384 Com_Divide( a, b, prop );
386void EvtD0ToKSpi0eta::propagatorFlatte(
double mass,
double width,
double sa,
double sb,
387 double sc,
int r,
double prop[2] ) {
388 double qKK, qetapi, qKSKS;
389 double rhoab[2], rhoKsK[2];
391 qetapi = 0.25 * ( sa + 0.547862 * 0.547862 - 0.1349768 * 0.1349768 ) *
392 ( sa + 0.547862 * 0.547862 - 0.1349768 * 0.1349768 ) / sa -
394 qKK = 1 - ( 2 * 0.49368 / sa ) * ( 2 * 0.49368 / sa );
395 qKSKS = 1 - ( 2 * 0.497614 / sa ) * ( 2 * 0.497614 / sa );
399 rhoab[0] = 2 * sqrt( qetapi / sa );
405 rhoab[1] = 2 * sqrt( -qetapi / sa );
408 if ( qKK > 0 && qKSKS > 0 )
410 rhoKsK[0] = 0.5 * ( sqrt( qKK ) + sqrt( qKSKS ) );
413 if ( qKK < 0 && qKSKS < 0 )
416 rhoKsK[1] = 0.5 * ( sqrt( -qKK ) + sqrt( -qKSKS ) );
418 if ( qKK < 0 && qKSKS > 0 )
420 rhoKsK[0] = 0.5 * sqrt( qKSKS );
421 rhoKsK[1] = 0.5 * sqrt( -qKK );
423 if ( qKK > 0 && qKSKS < 0 )
425 rhoKsK[0] = 0.5 * sqrt( qKK );
426 rhoKsK[1] = 0.5 * sqrt( -qKSKS );
431 b[0] = mass * mass - sa + 0.341 * rhoab[1] +
432 0.892 * 0.341 * rhoKsK[1];
433 b[1] = -( 0.341 * rhoab[0] + 0.892 * 0.341 * rhoKsK[0] );
434 Com_Divide( a, b, prop );
437double EvtD0ToKSpi0eta::DDalitz(
double P1[4],
double P2[4],
double P3[4],
int Ang,
440 double temp_PDF, v_re;
443 double B[2], s1, s2, s3, sR, sD;
444 for (
int i = 0; i < 4; i++ )
446 pR[i] = P1[i] + P2[i];
447 pD[i] = pR[i] + P3[i];
449 s1 = SCADot( P1, P1 );
450 s2 = SCADot( P2, P2 );
451 s3 = SCADot( P3, P3 );
452 sR = SCADot( pR, pR );
453 sD = SCADot( pD, pD );
455 for (
int i = 0; i != 4; i++ )
457 for (
int j = 0; j != 4; j++ )
461 if ( i == 0 ) G[i][j] = 1;
475 B[0] = barrier( 1, sR, s1, s2, 3.0, mass );
476 B[1] = barrier( 1, sD, sR, s3, 5.0, 1.864 );
481 for (
int i = 0; i < 4; i++ ) { temp_PDF += t1[i] * T1[i] * G[i][i]; }
485 B[0] = barrier( 2, sR, s1, s2, 3.0, mass );
486 B[1] = barrier( 2, sD, sR, s3, 5.0, 1.864 );
487 double t2[4][4], T2[4][4];
491 for (
int i = 0; i < 4; i++ )
493 for (
int j = 0; j < 4; j++ ) { temp_PDF += t2[i][j] * T2[j][i] * G[i][i] * G[j][j]; }
496 v_re = temp_PDF *
B[0] *
B[1];
500void EvtD0ToKSpi0eta::calEva(
double* KS0,
double*
Pi0,
double* Eta,
double* mass1,
501 double* width1,
double* amp,
double* phase,
int* g0,
int* spin,
502 int* modetype,
int nstates,
double& Result,
double* r0,
505 double P12[4], P23[4], P13[4];
506 double cof[2], amp_PDF[2], PDF[2];
507 double seta, spi0, sks0;
508 double s12, s13, s23;
509 for (
int i = 0; i < 4; i++ )
511 P12[i] = KS0[i] + Pi0[i];
512 P13[i] = KS0[i] + Eta[i];
513 P23[i] = Pi0[i] + Eta[i];
515 sks0 = SCADot( KS0, KS0 );
516 spi0 = SCADot( Pi0, Pi0 );
517 seta = SCADot( Eta, Eta );
518 s12 = SCADot( P12, P12 );
519 s13 = SCADot( P13, P13 );
520 s23 = SCADot( P23, P23 );
521 double pro[2], temp_PDF, amp_tmp[2];
530 for (
int i = 0; i < nstates; i++ )
534 mass1sq = mass1[i] * mass1[i];
535 cof[0] = amp[i] *
cos( phase[i] );
536 cof[1] = amp[i] *
sin( phase[i] );
538 if ( modetype[i] == 23 )
540 temp_PDF = DDalitz( Pi0, Eta, KS0, spin[i], mass1[i] );
543 propagatorRBW( mass1[i], width1[i], s23, spi0, seta, rRes, spin[i],
546 KPiSLASS( s23, spi0, seta, pro );
548 propagatorFlatte( mass1[i], width1[i], s23, spi0, seta, 0, pro );
554 amp_tmp[0] = temp_PDF * pro[0];
555 amp_tmp[1] = temp_PDF * pro[1];
558 if ( modetype[i] == 12 )
560 temp_PDF = DDalitz( KS0, Pi0, Eta, spin[i], mass1[i] );
562 propagatorRBW( mass1[i], width1[i], s12, sks0, spi0, rRes, spin[i], pro );
563 if ( g0[i] == 2 ) KPiSLASS( s12, sks0, spi0, pro );
570 amp_tmp[0] = temp_PDF * pro[0];
571 amp_tmp[1] = temp_PDF * pro[1];
574 if ( modetype[i] == 13 )
577 temp_PDF = DDalitz( KS0, Eta, Pi0, spin[i], mass1[i] );
579 propagatorRBW( mass1[i], width1[i], s13, sks0, seta, rRes, spin[i], pro );
589 amp_tmp[0] = temp_PDF * pro[0];
590 amp_tmp[1] = temp_PDF * pro[1];
592 Com_Multi( amp_tmp, cof, amp_PDF );
593 PDF[0] += amp_PDF[0];
594 PDF[1] += amp_PDF[1];
596 double value = PDF[0] * PDF[0] + PDF[1] * PDF[1];
597 if ( value <= 0 ) value = 1e-20;
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
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
virtual ~EvtD0ToKSpi0eta()
void getName(std::string &name)
void decay(EvtParticle *p)
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)