83 Pi = atan2( 0.0, -1.0 );
85 root2d3 = sqrt( 2. / 3 );
86 root1d2 = sqrt( 0.5 );
87 root3d2 = sqrt( 1.5 );
182 if ( pid == -321 ) charm = 1;
184 double m2, q2, cosV, cosL, chi;
185 KinVGen( K,
pi, e, nu, charm,
m2, q2, cosV, cosL, chi );
186 double prob = calPDF(
m2, q2, cosV, cosL, chi );
193 double& cosV,
double& cosL,
double& chi ) {
201 boost.
set( vp4_KPi.
get( 0 ), -vp4_KPi.
get( 1 ), -vp4_KPi.
get( 2 ), -vp4_KPi.
get( 3 ) );
203 cosV = vp4_Kp.
dot( vp4_KPi ) / ( vp4_Kp.
d3mag() * vp4_KPi.
d3mag() );
205 boost.
set( vp4_W.
get( 0 ), -vp4_W.
get( 1 ), -vp4_W.
get( 2 ), -vp4_W.
get( 3 ) );
207 cosL = vp4_Lepp.
dot( vp4_W ) / ( vp4_Lepp.
d3mag() * vp4_W.
d3mag() );
214 double sinx =
C.cross( V ).dot( D );
215 double cosx =
C.dot( D );
216 chi = sinx > 0 ? acos( cosx ) : -acos( cosx );
217 if ( charm == -1 ) chi = -chi;
220double EvtDsToKKmunu::calPDF(
double m2,
double q2,
double cosV,
double cosL,
double chi ) {
221 double delta[5] = { 0 };
222 double amplitude[5] = { 0 };
223 double m = sqrt(
m2 );
224 double q = sqrt( q2 );
227 EvtComplex F10( 0.0, 0.0 );
228 EvtComplex F20( 0.0, 0.0 );
229 EvtComplex F30( 0.0, 0.0 );
230 EvtComplex F40( 0.0, 0.0 );
231 EvtComplex F11( 0.0, 0.0 );
232 EvtComplex F21( 0.0, 0.0 );
233 EvtComplex F31( 0.0, 0.0 );
234 EvtComplex F41( 0.0, 0.0 );
235 EvtComplex F12( 0.0, 0.0 );
236 EvtComplex F22( 0.0, 0.0 );
237 EvtComplex F32( 0.0, 0.0 );
238 EvtComplex F42( 0.0, 0.0 );
240 EvtComplex f10( 0.0, 0.0 );
241 EvtComplex f20( 0.0, 0.0 );
242 EvtComplex f30( 0.0, 0.0 );
243 EvtComplex f40( 0.0, 0.0 );
244 EvtComplex f11( 0.0, 0.0 );
245 EvtComplex f21( 0.0, 0.0 );
246 EvtComplex f31( 0.0, 0.0 );
247 EvtComplex f41( 0.0, 0.0 );
248 EvtComplex f12( 0.0, 0.0 );
249 EvtComplex f22( 0.0, 0.0 );
250 EvtComplex f32( 0.0, 0.0 );
251 EvtComplex f42( 0.0, 0.0 );
252 EvtComplex coef( 0.0, 0.0 );
253 double amplitude_temp, delta_temp;
255 for (
int index = 1; index < nAmps; index++ )
257 switch ( type[index] )
261 NRS( m,
q, rS, rS1, a_delta, b_delta, mA, m0_1430_S, width0_1430_S, amplitude_temp,
262 delta_temp, f10, f40 );
263 amplitude[index] = amplitude_temp;
264 delta[index] = delta_temp;
271 ResonanceP( m,
q, mV, mA, V_0, A1_0, A2_0, m0, width0, rBW, amplitude_temp, delta_temp,
272 f11, f21, f31, f41 );
273 amplitude[index] = amplitude_temp;
274 delta[index] = delta_temp;
275 coef = getCoef( rho, phi );
276 F11 = F11 + coef * f11;
277 F21 = F21 + coef * f21;
278 F31 = F31 + coef * f31;
279 F41 = F41 + coef * f41;
285 ResonanceP( m,
q, mV, mA, V_0, A1_0, A2_0, m0_1410, width0_1410, rBW, amplitude_temp,
286 delta_temp, f11, f21, f31, f41 );
287 amplitude[index] = amplitude_temp;
288 delta[index] = delta_temp;
289 coef = getCoef( rho_1410, phi_1410 );
290 F11 = F11 + coef * f11;
291 F21 = F21 + coef * f21;
292 F31 = F31 + coef * f31;
293 F41 = F41 + coef * f41;
298 ResonanceD( m,
q, mV, mA, TV_0, T1_0, T2_0, m0_1430, width0_1430, rBW, amplitude_temp,
299 delta_temp, f12, f22, f32 );
300 amplitude[index] = amplitude_temp;
301 delta[index] = delta_temp;
302 coef = getCoef( rho_1430, phi_1430 );
303 F12 = F12 + coef * f12;
304 F22 = F22 + coef * f22;
305 F32 = F32 + coef * f32;
309 std::cout <<
"No such form factor type!!!" << std::endl;
316 double I, I1, I2, I3, I4, I5, I6, I7, I8, I9;
318 double cosV2 = cosV * cosV;
319 double sinV = sqrt( 1.0 - cosV2 );
320 double sinV2 = sinV * sinV;
321 double mu = 0.105658;
322 double betaL = ( 1 - mu * mu / q2 );
324 EvtComplex F1 = F10 + F11 * cosV + F12 * ( 1.5 * cosV2 - 0.5 );
325 EvtComplex F2 = F21 * root1d2 + F22 * cosV * root3d2;
326 EvtComplex F3 = F31 * root1d2 + F32 * cosV * root3d2;
327 EvtComplex F4 = F40 + F41 * ( cosV );
339 I1 = 0.25 * ( 2 - betaL ) * betaL *
real( ( F1 * (
conj( F1 ) ) ) ) +
340 ( ( betaL / 2.0 ) - ( betaL * betaL / 8.0 ) ) * ( sinV2 ) *
342 0.5 * ( 1 - betaL ) * betaL *
real( ( F4 * (
conj( F4 ) ) ) );
343 I2 = -1 / 4.0 * ( betaL * betaL ) *
345 0.5 * sinV2 * (
real( ( F2 *
conj( F2 ) ) ) +
real( ( F3 *
conj( F3 ) ) ) ) );
346 I3 = -0.25 * ( betaL * betaL ) *
348 I4 =
real( (
conj( F2 ) * F1 ) ) * sinV * 0.5 * ( betaL * betaL );
349 I5 =
real( (
conj( F3 ) * F1 - ( ( 1 - betaL ) ) *
conj( F4 ) * F2 ) ) * sinV * ( betaL );
350 I6 = (betaL)*
real( (
conj( F3 ) * F2 * sinV2 + ( 1 - betaL ) *
conj( F4 ) * F1 ) );
351 I7 =
imag( (
conj( F2 ) * F1 * sinV * ( betaL ) +
352 sinV * ( betaL ) * ( 1 - betaL ) *
conj( F4 ) * F3 ) );
353 I8 =
imag( (
conj( F3 ) * F1 ) ) * sinV * ( 0.5 ) * ( betaL * betaL );
354 I9 =
imag( (
conj( F3 ) * F2 ) ) * sinV2 * ( -0.5 ) * ( betaL * betaL );
369 double coschi =
cos( chi );
370 double sinchi =
sin( chi );
371 double sin2chi = 2.0 * sinchi * coschi;
372 double cos2chi = 1.0 - 2.0 * sinchi * sinchi;
374 double sinL = sqrt( 1. - cosL * cosL );
375 double sinL2 = sinL * sinL;
376 double sin2L = 2.0 * sinL * cosL;
377 double cos2L = 1.0 - 2.0 * sinL2;
379 I = I1 + I2 * cos2L + I3 * sinL2 * cos2chi + I4 * sin2L * coschi + I5 * sinL * coschi +
380 I6 * cosL + I7 * sinL * sinchi + I8 * sin2L * sinchi + I9 * sinL2 * sin2chi;
384void EvtDsToKKmunu::ResonanceP(
double m,
double q,
double mV,
double mA,
double V_0,
385 double A1_0,
double A2_0,
double m0,
double width0,
double rBW,
386 double& amplitude,
double& delta,
EvtComplex& F11,
388 double pKPi = getPStar( mD, m,
q );
389 double mD2 = mD * mD;
391 double m02 = m0 * m0;
393 double mV2 = mV * mV;
394 double mA2 = mA * mA;
395 double summDm = mD + m;
396 double V = V_0 / ( 1.0 - q2 / ( mV2 ) );
397 double A1 = A1_0 / ( 1.0 - q2 / ( mA2 ) );
398 double A2 = A2_0 / ( 1.0 - q2 / ( mA2 ) );
399 double A = summDm * A1;
400 double B = 2.0 * mD * pKPi / summDm * V;
401 double A0 = ( ( mD + m ) * A1 - ( mD - m ) * A2 ) / ( 2 * m );
404 double H0 = 0.5 / ( m *
q ) *
405 ( ( mD2 -
m2 - q2 ) * summDm * A1 - 4.0 * ( mD2 * pKPi * pKPi ) / summDm * A2 );
411 double B_Kstar = 0.4920;
412 double pStar0 = getPStar( m0, mPi, mK );
413 double alpha = sqrt( 3. * Pi * B_Kstar / ( pStar0 * width0 ) );
416 double F = getF1( m, m0, mPi, mK, rBW );
417 double width = getWidth1( m, m0, mPi, mK, width0, rBW );
419 EvtComplex
C( m0 * width0 * F, 0.0 );
420 double AA = m02 -
m2;
421 double BB = -m0 * width;
422 EvtComplex amp =
C / EvtComplex( AA, BB );
423 amplitude =
abs( amp );
424 delta = atan2(
imag( amp ),
real( amp ) );
426 double alpham2 =
alpha * 2.0;
427 double alpham3 =
alpha * 4.0;
428 F11 = amp * alpham2 *
q * H0 * root2;
429 F21 = amp * alpham2 *
q * ( Hp + Hm );
430 F31 = amp * alpham2 *
q * ( Hp - Hm );
431 F41 = amp * alpham3 *
q * ( mD * pKPi * A0 /
q ) * root2;
434void EvtDsToKKmunu::NRS(
double m,
double q,
double rS,
double rS1,
double a_delta,
435 double b_delta,
double mA,
double m0,
double width0,
437 static const double tmp = ( mK + mPi ) * ( mK + mPi );
441 double mA2 = mA * mA;
442 double pKPi = getPStar( mD, m,
q );
443 double m_K0_1430 = m0;
444 double width_K0_1430 = width0;
445 double m2_K0_1430 = m_K0_1430 * m_K0_1430;
446 double width = getWidth0( m, m_K0_1430, mPi, mK, width_K0_1430 );
452 x = sqrt(
m2 / tmp - 1.0 );
457 x = sqrt( m2_K0_1430 / tmp - 1.0 );
459 Pm *= m_K0_1430 * width_K0_1430 /
460 sqrt( ( m2_K0_1430 -
m2 ) * ( m2_K0_1430 -
m2 ) + m2_K0_1430 * width * width );
464 double pStar = getPStar( m, mPi, mK );
465 double delta_bg = atan( 2. * a_delta * pStar / ( 2. + a_delta * b_delta * pStar * pStar ) );
466 delta_bg = ( delta_bg > 0 ) ? delta_bg : ( delta_bg + Pi );
468 double delta_K0_1430 = atan( m_K0_1430 * width / ( m2_K0_1430 -
m2 ) );
469 delta_K0_1430 = ( delta_K0_1430 > 0 ) ? delta_K0_1430 : ( delta_K0_1430 + Pi );
470 delta = delta_bg + delta_K0_1430;
472 EvtComplex ci(
cos( delta ),
sin( delta ) );
473 EvtComplex amp = ci * rS * Pm;
476 F10 = amp * pKPi * mD / ( 1. - q2 / mA2 );
477 F40 = amp * q2 / ( 1 - q2 / mA2 );
480void EvtDsToKKmunu::ResonanceD(
double m,
double q,
double mV,
double mA,
double TV_0,
481 double T1_0,
double T2_0,
double m0,
double width0,
double rBW,
482 double& amplitude,
double& delta,
EvtComplex& F12,
484 double pKPi = getPStar( mD, m,
q );
485 double mD2 = mD * mD;
487 double m02 = m0 * m0;
489 double mV2 = mV * mV;
490 double mA2 = mA * mA;
491 double summDm = mD + m;
492 double TV = TV_0 / ( 1.0 - q2 / ( mV2 ) );
493 double T1 = T1_0 / ( 1.0 - q2 / ( mA2 ) );
494 double T2 = T2_0 / ( 1.0 - q2 / ( mA2 ) );
497 double F = getF2( m, m0, mPi, mK, rBW );
498 double width = getWidth2( m, m0, mPi, mK, width0, rBW );
499 EvtComplex
C( m0 * width0 * F, 0.0 );
500 double AA = m02 -
m2;
501 double BB = -m0 * width;
503 EvtComplex amp =
C / EvtComplex( AA, BB );
504 amplitude =
abs( amp );
505 delta = atan2(
imag( amp ),
real( amp ) );
507 F12 = amp * mD * pKPi / 3. *
508 ( ( mD2 -
m2 - q2 ) * summDm * T1 - mD2 * pKPi * pKPi / summDm * T2 );
509 F22 = amp * root2d3 * mD * m *
q * pKPi * summDm * T1;
510 F32 = amp * root2d3 * 2. * mD2 * m *
q * pKPi * pKPi / summDm * TV;
513double EvtDsToKKmunu::getPStar(
double m,
double m1,
double m2 ) {
517 double x =
s + s1 - s2;
518 double t = 0.25 *
x *
x /
s - s1;
520 if (
t > 0.0 ) { p = sqrt(
t ); }
523 std::cout <<
" Hello, pstar is less than 0.0" << std::endl;
529double EvtDsToKKmunu::getF1(
double m,
double m0,
double m_c1,
double m_c2,
double rBW ) {
530 double pStar = getPStar( m, m_c1, m_c2 );
531 double pStar0 = getPStar( m0, m_c1, m_c2 );
532 double rBW2 = rBW * rBW;
533 double pStar2 = pStar * pStar;
534 double pStar02 = pStar0 * pStar0;
535 double B = 1. / sqrt( 1. + rBW2 * pStar2 );
536 double B0 = 1. / sqrt( 1. + rBW2 * pStar02 );
537 double F = pStar / pStar0 *
B / B0;
541double EvtDsToKKmunu::getF2(
double m,
double m0,
double m_c1,
double m_c2,
double rBW ) {
542 double pStar = getPStar( m, m_c1, m_c2 );
543 double pStar0 = getPStar( m0, m_c1, m_c2 );
544 double rBW2 = rBW * rBW;
545 double pStar2 = pStar * pStar;
546 double pStar02 = pStar0 * pStar0;
547 double B = 1. / sqrt( ( rBW2 * pStar2 - 3. ) * ( rBW2 * pStar2 - 3. ) + 9. * rBW2 * pStar2 );
549 1. / sqrt( ( rBW2 * pStar02 - 3. ) * ( rBW2 * pStar02 - 3. ) + 9. * rBW2 * pStar02 );
550 double F = pStar2 / pStar02 *
B / B0;
554double EvtDsToKKmunu::getWidth0(
double m,
double m0,
double m_c1,
double m_c2,
556 double pStar = getPStar( m, m_c1, m_c2 );
557 double pStar0 = getPStar( m0, m_c1, m_c2 );
558 double width = width0 * pStar / pStar0 * m0 / m;
562double EvtDsToKKmunu::getWidth1(
double m,
double m0,
double m_c1,
double m_c2,
double width0,
564 double pStar = getPStar( m, m_c1, m_c2 );
565 double pStar0 = getPStar( m0, m_c1, m_c2 );
566 double F = getF1( m, m0, m_c1, m_c2, rBW );
567 double width = width0 * pStar / pStar0 * m0 / m * F * F;
571double EvtDsToKKmunu::getWidth2(
double m,
double m0,
double m_c1,
double m_c2,
double width0,
573 double pStar = getPStar( m, m_c1, m_c2 );
574 double pStar0 = getPStar( m0, m_c1, m_c2 );
575 double F = getF2( m, m0, m_c1, m_c2, rBW );
576 double width = width0 * pStar / pStar0 * m0 / m * F * F;
580EvtComplex EvtDsToKKmunu::getCoef(
double rho,
double phi ) {
581 EvtComplex coef( rho *
cos( phi ), rho *
sin( phi ) );
Evt3Rank3C conj(const Evt3Rank3C &t2)
double imag(const EvtComplex &c)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
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
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
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)
static int getStdHep(EvtId id)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double dot(const EvtVector4R &v2) const
EvtVector4R cross(const EvtVector4R &v2)
void set(int i, double d)