1 #include "EvtGenBase/EvtPatches.hh"
2 /*******************************************************************************
3 * Project: BaBar detector at the SLAC PEP-II B-factory
5 * File: $Id: EvtPropGounarisSakurai.cc,v 1.2 2008/06/27 23:34:54 tlatham Exp $
7 * modified from EvtPropBreitWignerRel...this should be used for rho's
8 *******************************************************************************/
11 #include "EvtGenBase/EvtPropGounarisSakurai.hh"
14 EvtPropGounarisSakurai::EvtPropGounarisSakurai(EvtDalitzPlot *dp,
15 EvtCyclic3::Pair pair, double m0, double g0)
16 : EvtPropagator(m0,g0),_pair(pair),_gbase(g0)
19 _m1= dp->m(EvtCyclic3::first(_pair));
20 _m2= dp->m(EvtCyclic3::second(_pair));
24 EvtPropGounarisSakurai::EvtPropGounarisSakurai(const EvtPropGounarisSakurai& other)
25 : EvtPropagator(other), _pair(other._pair), _gbase(other._gbase),
26 _m1(other._m1), _m2(other._m2)
28 _dalitzSpace = other._dalitzSpace;
32 EvtPropGounarisSakurai::~EvtPropGounarisSakurai()
36 EvtAmplitude<EvtPoint1D>* EvtPropGounarisSakurai::clone() const
38 return new EvtPropGounarisSakurai(*this);
42 EvtComplex EvtPropGounarisSakurai::amplitude(const EvtPoint1D& x) const
50 double A = ( 1 + dFun( m2 )*_width/_mass );
51 double B = s - m2 - fsFun( s );
52 // double C = sqrt(s)*_g0;//wrong!
53 double C = sqrt(m2)*_g0;//correct!
56 EvtComplex rpt( A*B/D, - A*C/D );
62 // adapted from RhoPiTools
63 double EvtPropGounarisSakurai::fsFun( double s ) const
67 EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
68 EvtTwoBodyKine vR(_m1,_m2,_m0);
70 double k_Am2 = vR.p();
72 double f = _gbase * m2 / pow( k_Am2, 3 )
74 pow( k_s, 2 ) * (hFun( s ) - hFun( m2 ))
75 + (m2 - s) * pow( k_Am2, 2 ) * dh_dsFun( m2 )
82 double EvtPropGounarisSakurai::hFun( double s ) const
84 double sm = _m1 + _m2;
85 double SQRTs = sqrt(s);
86 EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
89 return 2/EvtConst::pi * (k_s/SQRTs) * log( (SQRTs + 2*k_s)/(sm) );
92 double EvtPropGounarisSakurai::dh_dsFun( double s ) const
94 EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
97 return hFun(s) * ( 1/(8*pow( k_s, 2)) - 1/(2*s) ) + 1/(2*EvtConst::pi*s);
100 double EvtPropGounarisSakurai::dFun( double s ) const
102 double sm = _m1 + _m2;
103 double sm24 = sm*sm/4;
105 EvtTwoBodyKine vd(_m1,_m2,sqrt(s));
106 double k_m2 = vd.p();
107 double _pi=EvtConst::pi;
109 return 3.0/_pi * sm24/pow( k_m2, 2 ) * log( (m + 2*k_m2)/sm )
110 + m/(2*_pi*k_m2) - sm24*m/(_pi * pow( k_m2, 3 ));