#include <EvtPto3PAmp.hh>
Inheritance diagram for EvtPto3PAmp:
Public Types | |
NBW = 0 | |
RBW_ZEMACH = 1 | |
RBW_KUEHN = 2 | |
RBW_CLEO = 3 | |
enum | NumType { NBW = 0, RBW_ZEMACH = 1, RBW_KUEHN = 2, RBW_CLEO = 3 } |
Public Member Functions | |
EvtPto3PAmp (EvtDalitzPlot dp, EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes, EvtSpinType::spintype spin, const EvtPropagator &prop, NumType typeN) | |
EvtPto3PAmp (const EvtPto3PAmp &other) | |
~EvtPto3PAmp () | |
virtual EvtAmplitude< EvtDalitzPoint > * | clone () const |
virtual EvtComplex | amplitude (const EvtDalitzPoint &p) const |
EvtComplex | numerator (const EvtDalitzPoint &p) const |
double | angDep (const EvtDalitzPoint &p) const |
void | set_fd (double R) |
void | set_fb (double R) |
EvtComplex | evaluate (const EvtDalitzPoint &p) const |
Private Attributes | |
EvtCyclic3::Pair | _pairAng |
EvtCyclic3::Pair | _pairRes |
EvtSpinType::spintype | _spin |
NumType | _typeN |
EvtPropagator * | _prop |
double | _g0 |
EvtTwoBodyVertex | _vb |
EvtTwoBodyVertex | _vd |
Definition at line 25 of file EvtPto3PAmp.hh.
enum EvtPto3PAmp::NumType |
EvtPto3PAmp::EvtPto3PAmp | ( | EvtDalitzPlot | dp, | |
EvtCyclic3::Pair | pairAng, | |||
EvtCyclic3::Pair | pairRes, | |||
EvtSpinType::spintype | spin, | |||
const EvtPropagator & | prop, | |||
NumType | typeN | |||
) |
Referenced by clone().
EvtPto3PAmp::EvtPto3PAmp | ( | const EvtPto3PAmp & | other | ) |
Definition at line 39 of file EvtPto3PAmp.cc.
00040 : EvtAmplitude<EvtDalitzPoint>(other), 00041 _pairAng(other._pairAng), 00042 _pairRes(other._pairRes), 00043 _spin(other._spin), 00044 _typeN(other._typeN), 00045 _prop( (other._prop) ? (EvtPropagator*) other._prop->clone() : 0), 00046 _g0(other._g0), 00047 _vb(other._vb), _vd(other._vd) 00048 {}
EvtPto3PAmp::~EvtPto3PAmp | ( | ) |
EvtComplex EvtPto3PAmp::amplitude | ( | const EvtDalitzPoint & | p | ) | const [virtual] |
Implements EvtAmplitude< EvtDalitzPoint >.
Definition at line 68 of file EvtPto3PAmp.cc.
References _g0, _pairRes, _prop, _typeN, _vb, _vd, EvtAmplitude< T >::evaluate(), EvtCyclic3::first(), EvtTwoBodyVertex::formFactor(), NBW, numerator(), EvtCyclic3::other(), EvtCyclic3::second(), EvtPropagator::set_g0(), EvtTwoBodyVertex::widthFactor(), and x.
00069 { 00070 EvtComplex amp(1.0,0.0); 00071 00072 double m = sqrt(x.q(_pairRes)); 00073 EvtTwoBodyKine vd(x.m(EvtCyclic3::first(_pairRes)), 00074 x.m(EvtCyclic3::second(_pairRes)),m); 00075 EvtTwoBodyKine vb(m,x.m(EvtCyclic3::other(_pairRes)),x.bigM()); 00076 00077 00078 // Compute mass-dependent width for relativistic propagators 00079 00080 if(_typeN != NBW) { 00081 00082 _prop->set_g0(_g0*_vd.widthFactor(vd)); 00083 } 00084 00085 // Compute propagator 00086 00087 amp *= _prop->evaluate(m); 00088 00089 // Compute form-factors 00090 00091 amp *= _vd.formFactor(vd); 00092 amp *= _vb.formFactor(vb); 00093 00094 amp *= numerator(x); 00095 00096 return amp; 00097 }
double EvtPto3PAmp::angDep | ( | const EvtDalitzPoint & | p | ) | const |
Definition at line 189 of file EvtPto3PAmp.cc.
References _pairAng, _pairRes, _spin, EvtdFunction::d(), EvtSpinType::getSpin2(), Bes_Common::INFO, report(), and x.
Referenced by numerator().
00190 { 00191 // Angular dependece for factorizable amplitudes 00192 // unphysical cosines indicate we are in big trouble 00193 00194 double cosTh = x.cosTh(_pairAng,_pairRes); 00195 if(fabs(cosTh) > 1.) { 00196 00197 report(INFO,"EvtGen") << "cosTh " << cosTh << endl; 00198 assert(0); 00199 } 00200 00201 // in units of half-spin 00202 00203 return EvtdFunction::d(EvtSpinType::getSpin2(_spin),2*0,2*0,acos(cosTh)); 00204 }
virtual EvtAmplitude<EvtDalitzPoint>* EvtPto3PAmp::clone | ( | ) | const [inline, virtual] |
Implements EvtAmplitude< EvtDalitzPoint >.
Definition at line 43 of file EvtPto3PAmp.hh.
References EvtPto3PAmp().
00044 { return new EvtPto3PAmp(*this); }
EvtComplex EvtAmplitude< EvtDalitzPoint >::evaluate | ( | const EvtDalitzPoint & | p | ) | const [inline, inherited] |
Definition at line 26 of file EvtAmplitude.hh.
00027 { 00028 EvtComplex ret(0.,0.); 00029 if(p.isValid()) ret = amplitude(p); 00030 return ret; 00031 }
EvtComplex EvtPto3PAmp::numerator | ( | const EvtDalitzPoint & | p | ) | const |
Definition at line 100 of file EvtPto3PAmp.cc.
References _pairAng, _pairRes, _prop, _spin, _typeN, _vd, EvtTwoBodyKine::AB, angDep(), EvtCyclic3::combine(), EvtCyclic3::common(), EvtCyclic3::first(), EvtPropagator::m0(), NBW, EvtCyclic3::other(), EvtTwoBodyVertex::phaseSpaceFactor(), RBW_CLEO, RBW_KUEHN, RBW_ZEMACH, EvtSpinType::SCALAR, EvtCyclic3::second(), EvtSpinType::TENSOR, EvtSpinType::VECTOR, and x.
Referenced by amplitude().
00101 { 00102 EvtComplex ret(0.,0.); 00103 double m = sqrt(x.q(_pairRes)); 00104 EvtTwoBodyKine vd(x.m(EvtCyclic3::first(_pairRes)), 00105 x.m(EvtCyclic3::second(_pairRes)),m); 00106 EvtTwoBodyKine vb(m,x.m(EvtCyclic3::other(_pairRes)),x.bigM()); 00107 00108 // Non-relativistic Breit-Wigner 00109 00110 if(NBW == _typeN) { 00111 00112 ret = angDep(x); 00113 } 00114 00115 // Standard relativistic Zemach propagator 00116 00117 else if(RBW_ZEMACH == _typeN) { 00118 00119 ret = _vd.phaseSpaceFactor(vd,EvtTwoBodyKine::AB)*angDep(x); 00120 } 00121 00122 // Kuehn-Santamaria normalization: 00123 00124 else if(RBW_KUEHN == _typeN) { 00125 00126 ret = _prop->m0()*_prop->m0() * angDep(x); 00127 } 00128 00129 00130 // CLEO amplitude is not factorizable 00131 // 00132 // The CLEO amplitude numerator is proportional to: 00133 // 00134 // m2_AC - m2_BC + (m2_D - m2_C)(m2_B - m2_A)/m2_0 00135 // 00136 // m2_AC = (eA + eC)^2 + (P - P_C cosTh(BC))^2 00137 // m2_BC = (eB + eC)^2 + (P + P_C cosTh(BC))^2 00138 // 00139 // The first term m2_AB-m2_BC is therefore a p-wave term 00140 // - 4PP_C cosTh(BC) 00141 // The second term is an s-wave, the amplitude 00142 // does not factorize! 00143 // 00144 // The first term is just Zemach. However, the sign is flipped! 00145 // Let's consistently use the convention in which the amplitude 00146 // is proportional to +cosTh(BC). In the CLEO expressions, I will 00147 // therefore exchange AB to get rid of the sign flip. 00148 00149 00150 if(RBW_CLEO == _typeN) { 00151 00152 Index iA = other(_pairAng); // A = other(BC) 00153 Index iB = common(_pairRes,_pairAng); // B = common(AB,BC) 00154 Index iC = other(_pairRes); // C = other(AB) 00155 00156 double M = x.bigM(); 00157 double mA = x.m(iA); 00158 double mB = x.m(iB); 00159 double mC = x.m(iC); 00160 double qAB = x.q(combine(iA,iB)); 00161 double qBC = x.q(combine(iB,iC)); 00162 double qCA = x.q(combine(iC,iA)); 00163 00164 double m0 = _prop->m0(); 00165 00166 if(_spin == EvtSpinType::SCALAR) ret = EvtComplex(1.,0.); 00167 else 00168 if(_spin == EvtSpinType::VECTOR) { 00169 00170 ret = qBC - qCA + (M*M - mC*mC)*(mA*mA - mB*mB)/m0/m0;; 00171 } 00172 else 00173 if(_spin == EvtSpinType::TENSOR) { 00174 00175 double x1 = qBC - qCA + (M*M - mC*mC)*(mA*mA - mB*mB)/m0/m0; 00176 double x2 = M*M - mC*mC; 00177 double x3 = qAB - 2*M*M - 2*mC*mC + x2*x2/m0/m0; 00178 double x4 = mB*mB - mA*mA; 00179 double x5 = qAB - 2*mB*mB - 2*mA*mA + x4*x4/m0/m0; 00180 ret = (x1*x1 - 1./3.*x3*x5); 00181 } 00182 else assert(0); 00183 } 00184 00185 return ret; 00186 }
void EvtPto3PAmp::set_fb | ( | double | R | ) |
Definition at line 62 of file EvtPto3PAmp.cc.
References _vb, and EvtTwoBodyVertex::set_f().
Referenced by EvtPto3PAmpFactory::processAmp().
void EvtPto3PAmp::set_fd | ( | double | R | ) |
Definition at line 57 of file EvtPto3PAmp.cc.
References _vd, and EvtTwoBodyVertex::set_f().
Referenced by EvtPto3PAmpFactory::processAmp().
double EvtPto3PAmp::_g0 [private] |
EvtCyclic3::Pair EvtPto3PAmp::_pairAng [private] |
EvtCyclic3::Pair EvtPto3PAmp::_pairRes [private] |
EvtPropagator* EvtPto3PAmp::_prop [private] |
Definition at line 72 of file EvtPto3PAmp.hh.
Referenced by amplitude(), numerator(), and ~EvtPto3PAmp().
EvtSpinType::spintype EvtPto3PAmp::_spin [private] |
NumType EvtPto3PAmp::_typeN [private] |
EvtTwoBodyVertex EvtPto3PAmp::_vb [private] |
EvtTwoBodyVertex EvtPto3PAmp::_vd [private] |