68 width0_omega = 0.00849;
84 Pi = atan2( 0.0, -1.0 );
86 root2d3 = sqrt( 2. / 3 );
87 root1d2 = sqrt( 0.5 );
88 root3d2 = sqrt( 1.5 );
130 if ( pid == -211 ) charm = 1;
132 double m2, q2, cosV, cosL, chi;
133 KinVGen( pi1,
pi2, e, nu, charm,
m2, q2, cosV, cosL, chi );
134 double prob = calPDF(
m2, q2, cosV, cosL, chi );
141 double& cosV,
double& cosL,
double& chi ) {
148 boost.
set( vp4_KPi.
get( 0 ), -vp4_KPi.
get( 1 ), -vp4_KPi.
get( 2 ), -vp4_KPi.
get( 3 ) );
150 cosV = vp4_Kp.
dot( vp4_KPi ) / ( vp4_Kp.
d3mag() * vp4_KPi.
d3mag() );
152 boost.
set( vp4_W.
get( 0 ), -vp4_W.
get( 1 ), -vp4_W.
get( 2 ), -vp4_W.
get( 3 ) );
154 cosL = vp4_Lepp.
dot( vp4_W ) / ( vp4_Lepp.
d3mag() * vp4_W.
d3mag() );
161 double sinx =
C.cross( V ).dot( D );
162 double cosx =
C.dot( D );
163 chi = sinx > 0 ? acos( cosx ) : -acos( cosx );
164 if ( charm == -1 ) chi = -chi;
167double EvtDTopipienu::calPDF(
double m2,
double q2,
double cosV,
double cosL,
double chi ) {
168 double m = sqrt(
m2 );
169 double q = sqrt( q2 );
172 EvtComplex F10( 0.0, 0.0 );
173 EvtComplex F11( 0.0, 0.0 );
174 EvtComplex F21( 0.0, 0.0 );
175 EvtComplex F31( 0.0, 0.0 );
176 EvtComplex F12( 0.0, 0.0 );
177 EvtComplex F22( 0.0, 0.0 );
178 EvtComplex F32( 0.0, 0.0 );
180 EvtComplex f10( 0.0, 0.0 );
181 EvtComplex f11( 0.0, 0.0 );
182 EvtComplex f21( 0.0, 0.0 );
183 EvtComplex f31( 0.0, 0.0 );
185 EvtComplex coef( 0.0, 0.0 );
187 for (
int index = first; index < last; index++ )
189 switch ( type[index] )
193 ResonanceGS( m,
q, D0_mD, D0_mPi1, D0_mPi2, f11, f21, f31 );
194 coef = getCoef( rho, phi );
195 F11 = F11 + coef * f11;
196 F21 = F21 + coef * f21;
197 F31 = F31 + coef * f31;
202 ResonanceGS( m,
q, Dp_mD, Dp_mPi1, Dp_mPi2, f11, f21, f31 );
203 coef = getCoef( rho, phi );
204 F11 = F11 + coef * f11;
205 F21 = F21 + coef * f21;
206 F31 = F31 + coef * f31;
211 ResonancePGScbw( m,
q, f11, f21, f31 );
212 coef = getCoef( rho_omega, phi_omega );
213 F11 = F11 + coef * f11;
214 F21 = F21 + coef * f21;
215 F31 = F31 + coef * f31;
220 ResonanceSBugg( m,
q, f10 );
221 coef = getCoef( rho_S, phi_S );
222 F10 = F10 + coef * f10;
226 std::cout <<
"No such form factor type!!!" << std::endl;
233 double I, I1, I2, I3, I4, I5, I6, I7, I8, I9;
235 double cosV2 = cosV * cosV;
236 double sinV = sqrt( 1.0 - cosV2 );
237 double sinV2 = sinV * sinV;
239 EvtComplex F1 = F10 + F11 * cosV + F12 * ( 1.5 * cosV2 - 0.5 );
240 EvtComplex F2 = F21 * root1d2 + F22 * cosV * root3d2;
241 EvtComplex F3 = F31 * root1d2 + F32 * cosV * root3d2;
243 I1 = 0.25 * (
abs2( F1 ) + 1.5 * sinV2 * (
abs2( F2 ) +
abs2( F3 ) ) );
244 I2 = -0.25 * (
abs2( F1 ) - 0.5 * sinV2 * (
abs2( F2 ) +
abs2( F3 ) ) );
245 I3 = -0.25 * (
abs2( F2 ) -
abs2( F3 ) ) * sinV2;
246 I4 =
real(
conj( F1 ) * F2 ) * sinV * 0.5;
247 I5 =
real(
conj( F1 ) * F3 ) * sinV;
248 I6 =
real(
conj( F2 ) * F3 ) * sinV2;
249 I7 =
imag(
conj( F2 ) * F1 ) * sinV;
250 I8 =
imag(
conj( F3 ) * F1 ) * sinV * 0.5;
251 I9 =
imag(
conj( F3 ) * F2 ) * sinV2 * ( -0.5 );
253 double coschi =
cos( chi );
254 double sinchi =
sin( chi );
255 double sin2chi = 2.0 * sinchi * coschi;
256 double cos2chi = 1.0 - 2.0 * sinchi * sinchi;
258 double sinL = sqrt( 1. - cosL * cosL );
259 double sinL2 = sinL * sinL;
260 double sin2L = 2.0 * sinL * cosL;
261 double cos2L = 1.0 - 2.0 * sinL2;
263 I = I1 + I2 * cos2L + I3 * sinL2 * cos2chi + I4 * sin2L * coschi + I5 * sinL * coschi +
264 I6 * cosL + I7 * sinL * sinchi + I8 * sin2L * sinchi + I9 * sinL2 * sin2chi;
268void EvtDTopipienu::ResonanceGS(
double m,
double q,
double massD,
double massPi1,
271 double pKPi = getPStar( massD, m,
q );
272 double mD2 = massD * massD;
274 double m02 = m0 * m0;
276 double mV2 = mV * mV;
277 double mA2 = mA * mA;
278 double summDm = massD + m;
279 double V = V_0 / ( 1.0 - q2 / ( mV2 ) );
280 double A1 = A1_0 / ( 1.0 - q2 / ( mA2 ) );
281 double A2 = A2_0 / ( 1.0 - q2 / ( mA2 ) );
282 double A = summDm * A1;
283 double B = 2.0 * massD * pKPi / summDm * V;
286 double H0 = 0.5 / ( m *
q ) *
287 ( ( mD2 -
m2 - q2 ) * summDm * A1 - 4.0 * ( mD2 * pKPi * pKPi ) / summDm * A2 );
293 double pStar = getPStar( m, massPi1, massPi2 );
294 double pStar0 = getPStar( m0, massPi1, massPi2 );
295 double alpha = sqrt( 3.0 * Pi * BF / ( pStar0 * width0 ) );
298 double F = getF1( m, m0, massPi1, massPi2, rBW );
299 EvtComplex
C( m02 * ( 1.0 + width0 * getGx( m0, pStar0, massPi1, massPi2 ) / m0 ) * F, 0.0 );
300 double AA = m02 -
m2 + width0 * getFx( m02,
m2, pStar, pStar0, massPi1, massPi2 );
301 double BB = -m0 * getWidthrho( m, m0, width0, pStar, pStar0 );
302 EvtComplex tmp( AA, BB );
303 EvtComplex amp =
C / tmp;
305 double alpham2 =
alpha * 2.0;
306 F11 = amp * alpham2 *
q * H0 * root2;
307 F21 = amp * alpham2 *
q * ( Hp + Hm );
308 F31 = amp * alpham2 *
q * ( Hp - Hm );
313 double pKPi = getPStar( Dp_mD, m,
q );
314 double mD2 = Dp_mD * Dp_mD;
316 double m02 = m0_omega * m0_omega;
317 double mR2 = m0 * m0;
319 double mV2 = mV * mV;
320 double mA2 = mA * mA;
321 double summDm = Dp_mD + m;
322 double V = V_0 / ( 1.0 - q2 / ( mV2 ) );
323 double A1 = A1_0 / ( 1.0 - q2 / ( mA2 ) );
324 double A2 = A2_0 / ( 1.0 - q2 / ( mA2 ) );
325 double A = summDm * A1;
326 double B = 2.0 * Dp_mD * pKPi / summDm * V;
328 double H0 = 0.5 / ( m *
q ) *
329 ( ( mD2 -
m2 - q2 ) * summDm * A1 - 4.0 * ( mD2 * pKPi * pKPi ) / summDm * A2 );
335 double pStar = getPStar( m, Dp_mPi1, Dp_mPi2 );
336 double pStar0 = getPStar( m0_omega, Dp_mPi1, Dp_mPi2 );
337 double alpha = sqrt( 3.0 * Pi * BF_omega / ( pStar0 * width0_omega ) );
340 double F = getF1( m, m0_omega, Dp_mPi1, Dp_mPi2, rBW );
341 EvtComplex amp1( 0.0, 0.0 );
342 EvtComplex amp2( 0.0, 0.0 );
344 EvtComplex C1( m0_omega * width0_omega * F, 0.0 );
345 double AA1 = m02 -
m2;
346 double BB1 = -m0_omega * width0_omega;
347 EvtComplex tmp1( AA1, BB1 );
350 pStar0 = getPStar( m0, Dp_mPi1, Dp_mPi2 );
351 EvtComplex C2( mR2 * ( 1.0 + width0 * getGx( m0, pStar0, Dp_mPi1, Dp_mPi2 ) / m0 ), 0.0 );
352 double AA2 = mR2 -
m2 + width0 * getFx( mR2,
m2, pStar, pStar0, Dp_mPi1, Dp_mPi2 );
353 double BB2 = -m0 * getWidthrho( m, m0, width0, pStar, pStar0 );
354 EvtComplex tmp2( AA2, BB2 );
356 EvtComplex amp = amp1 * amp2;
358 double alpham2 =
alpha * 2.0;
359 F11 = amp * alpham2 *
q * H0 * root2;
360 F21 = amp * alpham2 *
q * ( Hp + Hm );
361 F31 = amp * alpham2 *
q * ( Hp - Hm );
364void EvtDTopipienu::ResonanceSBugg(
double m,
double q,
EvtComplex& F10 ) {
365 double pKPi = getPStar( Dp_mD, m,
q );
368 double mA2 = mA * mA;
370 double sA = 0.41 * mPi * mPi;
372 double mr2 = m0_S * m0_S;
376 EvtComplex ciR( 1.0, 0.0 );
377 EvtComplex ciM( 0.0, 1.0 );
378 EvtComplex Gamma1( 0.0, 0.0 );
379 EvtComplex Gamma2( 0.0, 0.0 );
380 EvtComplex Gamma3( 0.0, 0.0 );
381 EvtComplex Gamma4( 0.0, 0.0 );
383 Gamma1 = getrho(
m2, mPi ) * getG1(
m2, mr ) * (
m2 - sA ) / ( mr2 - sA );
384 Gamma2 = getrho(
m2, mKa ) * 0.6 * getG1(
m2, mr ) * (
m2 / mr2 ) *
386 Gamma3 = getrho(
m2, mEt ) * 0.2 * getG1(
m2, mr ) * (
m2 / mr2 ) *
389 Gamma4 = ciR * mr * g4pi * ( 1.0 +
exp( 7.082 - 2.845 * mr2 ) ) /
390 ( 1.0 +
exp( 7.082 - 2.845 *
m2 ) );
392 double AA = mr2 -
m2 - getG1(
m2, mr ) * (
m2 - sA ) * getZ(
m2, mr2 ) / ( mr2 - sA );
393 EvtComplex amp = ciR / ( ciR * AA - ciM * ( Gamma1 + Gamma2 + Gamma3 + Gamma4 ) );
394 F10 = amp * pKPi * Dp_mD / ( 1.0 - q2 / mA2 );
397double EvtDTopipienu::getPStar(
double m,
double m1,
double m2 ) {
401 double x =
s + s1 - s2;
402 double t = 0.25 *
x *
x /
s - s1;
404 if (
t > 0.0 ) { p = sqrt(
t ); }
413double EvtDTopipienu::getF1(
double m,
double m0,
double m_c1,
double m_c2,
double rBW ) {
414 double pStar = getPStar( m, m_c1, m_c2 );
415 double pStar0 = getPStar( m0, m_c1, m_c2 );
416 double rBW2 = rBW * rBW;
417 double pStar2 = pStar * pStar;
418 double pStar02 = pStar0 * pStar0;
419 double B = 1. / sqrt( 1. + rBW2 * pStar2 );
420 double B0 = 1. / sqrt( 1. + rBW2 * pStar02 );
421 double F = pStar / pStar0 *
B / B0;
425double EvtDTopipienu::getF2(
double m,
double m0,
double m_c1,
double m_c2,
double rBW ) {
426 double pStar = getPStar( m, m_c1, m_c2 );
427 double pStar0 = getPStar( m0, m_c1, m_c2 );
428 double rBW2 = rBW * rBW;
429 double pStar2 = pStar * pStar;
430 double pStar02 = pStar0 * pStar0;
431 double B = 1. / sqrt( ( rBW2 * pStar2 - 3. ) * ( rBW2 * pStar2 - 3. ) + 9. * rBW2 * pStar2 );
433 1. / sqrt( ( rBW2 * pStar02 - 3. ) * ( rBW2 * pStar02 - 3. ) + 9. * rBW2 * pStar02 );
434 double F = pStar2 / pStar02 *
B / B0;
438double EvtDTopipienu::getWidth0(
double m,
double m0,
double m_c1,
double m_c2,
440 double pStar = getPStar( m, m_c1, m_c2 );
441 double pStar0 = getPStar( m0, m_c1, m_c2 );
442 double width = width0 * pStar / pStar0 * m0 / m;
446double EvtDTopipienu::getWidth1(
double m,
double m0,
double m_c1,
double m_c2,
double width0,
448 double pStar = getPStar( m, m_c1, m_c2 );
449 double pStar0 = getPStar( m0, m_c1, m_c2 );
450 double F = getF1( m, m0, m_c1, m_c2, rBW );
451 double width = width0 * pStar / pStar0 * m0 / m * F * F;
455double EvtDTopipienu::getWidth2(
double m,
double m0,
double m_c1,
double m_c2,
double width0,
457 double pStar = getPStar( m, m_c1, m_c2 );
458 double pStar0 = getPStar( m0, m_c1, m_c2 );
459 double F = getF2( m, m0, m_c1, m_c2, rBW );
460 double width = width0 * pStar / pStar0 * m0 / m * F * F;
464EvtComplex EvtDTopipienu::getCoef(
double rho,
double phi ) {
465 EvtComplex coef( rho *
cos( phi ), rho *
sin( phi ) );
469inline double EvtDTopipienu::getGx(
double m0,
double p0,
double m_c1,
double m_c2 ) {
471 double MPI = 0.5 * ( m_c1 + m_c2 );
472 Gg = 3 * MPI * MPI * log( ( m0 + 2 * p0 ) / ( 2 * MPI ) ) / ( Pi * p0 * p0 ) +
473 m0 / ( 2 * Pi * p0 ) - MPI * MPI * m0 / ( Pi * p0 * p0 * p0 );
477inline double EvtDTopipienu::getFx(
double mr2,
double sx,
double p,
double p0,
double m_c1,
480 Fx = mr2 / ( pow( p0, 3 ) ) *
481 ( p * p * ( getHx( sx, p, m_c1, m_c2 ) - getHx( mr2, p0, m_c1, m_c2 ) ) +
482 ( mr2 - sx ) * p0 * p0 * getdh( mr2, p0, m_c1, m_c2 ) );
486inline double EvtDTopipienu::getHx(
double sx,
double p,
double m_c1,
double m_c2 ) {
487 double m = sqrt( sx );
489 Hx = 2 * p * log( ( m + 2 * p ) / ( m_c1 + m_c2 ) ) / ( Pi * m );
493inline double EvtDTopipienu::getdh(
double mr2,
double p0,
double m_c1,
double m_c2 ) {
494 double mass = sqrt( mr2 );
496 getHx(
mass, p0, m_c1, m_c2 ) * ( 1.0 / ( 8 * p0 * p0 ) - 1.0 / ( 2 *
mass *
mass ) ) +
501inline double EvtDTopipienu::getG1(
double m2,
double Mr ) {
505 double Mr2 = Mr * Mr;
506 double gg1 = Mr * ( b1 + b2 *
m2 ) *
exp( -(
m2 - Mr2 ) / A );
510inline double EvtDTopipienu::getZ(
double m2,
double Mr2 ) {
512 ( getRho(
m2, mPi ) * log( ( 1.0 - getRho(
m2, mPi ) ) / ( 1.0 + getRho(
m2, mPi ) ) ) -
514 log( ( 1.0 - getRho( Mr2, mPi ) ) / ( 1.0 + getRho( Mr2, mPi ) ) ) ) /
520inline double EvtDTopipienu::getRho(
double m2,
double mX ) {
522 if ( ( 1.0 - 4.0 * mX * mX /
m2 ) > 0 ) rho = sqrt( 1.0 - 4.0 * mX * mX /
m2 );
527inline EvtComplex EvtDTopipienu::getrho(
double m2,
double mX ) {
528 EvtComplex rho( 0.0, 0.0 );
529 EvtComplex ciR( 1.0, 0.0 );
530 EvtComplex ciM( 0.0, 1.0 );
531 if ( ( 1.0 - 4.0 * mX * mX /
m2 ) > 0 ) rho = ciR * sqrt( 1.0 - 4.0 * mX * mX /
m2 );
532 else rho = ciM * sqrt( 4.0 * mX * mX /
m2 - 1.0 );
535inline double EvtDTopipienu::getWidthrho(
double m,
double m0,
double width0,
double p,
537 double widthRho = 0.0;
538 widthRho = width0 * pow( p / p0, 3 ) * ( m0 / m );
character *LEPTONflag integer iresonances real pi2
Evt3Rank3C conj(const Evt3Rank3C &t2)
double imag(const EvtComplex &c)
double abs2(const EvtComplex &c)
EvtComplex exp(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 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)
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)