61 if ( d3 == EP || d3 == EM )
63 if ( parnum == DsP || parnum == DsM )
71 else if ( d1 == PIP || d2 == PIP )
77 else if ( d1 == KP || d2 == KP )
97 if ( d3 == MUP || d3 == MUM )
99 if ( parnum == DsP || parnum == DsM )
107 else if ( d1 == PIP || d2 == PIP )
113 else if ( d1 == KP || d2 == KP )
148 flatte_g1 = 0.199 * mf0;
149 flatte_g2 = 3.01 * 0.199 * mf0;
196 if ( pid == 11 || pid == 13 ) charm = -1;
198 double m2, q2, cosV, cosL, chi;
199 KinVGen( pi1,
pi2, e, nu, charm,
m2, q2, cosV, cosL, chi );
200 double prob = calPDF(
m2, q2, cosV, cosL, chi );
207 double& cosV,
double& cosL,
double& chi ) {
214 boost.
set( vp4_KPi.
get( 0 ), -vp4_KPi.
get( 1 ), -vp4_KPi.
get( 2 ), -vp4_KPi.
get( 3 ) );
216 cosV = vp4_Kp.
dot( vp4_KPi ) / ( vp4_Kp.
d3mag() * vp4_KPi.
d3mag() );
218 boost.
set( vp4_W.
get( 0 ), -vp4_W.
get( 1 ), -vp4_W.
get( 2 ), -vp4_W.
get( 3 ) );
220 cosL = vp4_Lepp.
dot( vp4_W ) / ( vp4_Lepp.
d3mag() * vp4_W.
d3mag() );
227 double sinx =
C.cross( V ).dot( D );
228 double cosx =
C.dot( D );
229 chi = sinx > 0 ? acos( cosx ) : -acos( cosx );
230 if ( charm == -1 ) chi = -chi;
233double EvtDsTof0enu::calPDF(
double m2,
double q2,
double cosV,
double cosL,
double chi ) {
234 EvtComplex F10 = Resonancef0Flatte(
m2, q2 );
235 double I1 = 0.25 *
abs2( F10 );
236 double sinL = sqrt( 1. - cosL * cosL );
237 double sinL2 = sinL * sinL;
238 double cos2L = 1.0 - 2.0 * sinL2;
239 double I = I1 - I1 * cos2L;
243EvtComplex EvtDsTof0enu::Resonancef0Flatte(
double m2,
double q2 ) {
244 double pPiPi = getPStar( m2Ds,
m2, q2 );
245 EvtComplex rhopiPpiM = getrho(
m2, mPi );
246 EvtComplex rhopi0pi0 = getrho(
m2, mPi0 );
247 EvtComplex rhoKPKM = getrho(
m2, mKa );
248 EvtComplex rhoK0K0 = getrho(
m2, mK0 );
249 EvtComplex rhopipi = ( 2.0 / 3.0 ) * rhopiPpiM + ( 1.0 / 3.0 ) * rhopi0pi0;
250 EvtComplex rhoKK = 0.5 * rhoKPKM + 0.5 * rhoK0K0;
252 ciR / ( ciR * ( m2f0 -
m2 ) - ciM * ( flatte_g1 * rhopipi + flatte_g2 * rhoKK ) );
253 EvtComplex F10 = amp * pPiPi * mDs / ( 1.0 - q2 / m2ADs );
257double EvtDsTof0enu::getPStar(
double sa,
double sb,
double sc ) {
258 double x = sa + sb - sc;
259 double q = 0.25 *
x *
x / sa - sb;
261 if (
q > 0.0 ) { p = sqrt(
q ); }
270EvtComplex EvtDsTof0enu::getrho(
double m2,
double mX ) {
271 EvtComplex rho( 0.0, 0.0 );
272 if ( ( 1.0 - 4.0 * mX * mX /
m2 ) > 0 ) rho = ciR * sqrt( 1.0 - 4.0 * mX * mX /
m2 );
273 else rho = ciM * sqrt( 4.0 * mX * mX /
m2 - 1.0 );
character *LEPTONflag integer iresonances real pi2
double abs2(const EvtComplex &c)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
****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 getName(std::string &name)
void decay(EvtParticle *p)
static int getStdHep(EvtId id)
static EvtId getId(const 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)
double dot(const EvtVector4R &v2) const
EvtVector4R cross(const EvtVector4R &v2)
void set(int i, double d)