00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "EvtGenBase/EvtPatches.hh"
00022 #include <math.h>
00023 #include "EvtGenBase/EvtVector4R.hh"
00024 #include "EvtGenBase/EvtKine.hh"
00025 #include "EvtGenBase/EvtComplex.hh"
00026 #include "EvtGenBase/EvtFlatte.hh"
00027 #include "EvtGenBase/EvtReport.hh"
00028 #include "EvtGenBase/EvtConst.hh"
00029
00030 EvtFlatte::~EvtFlatte(){}
00031
00032
00033
00034 EvtFlatte& EvtFlatte::operator = ( const EvtFlatte &n)
00035 {
00036 if ( &n == this ) return *this;
00037 _p4_p = n._p4_p;
00038 _p4_d1 = n._p4_d1;
00039 _p4_d2 = n._p4_d2;
00040 _ampl = n._ampl;
00041 _theta = n._theta;
00042 _mass = n._mass;
00043 _params = n._params;
00044
00045
00046
00047
00048
00049
00050 return *this;
00051 }
00052
00053
00054
00055 EvtFlatte::EvtFlatte(const EvtVector4R& p4_p, const EvtVector4R& p4_d1,
00056 const EvtVector4R& p4_d2, double ampl,
00057 double theta, double mass,
00058 vector<EvtFlatteParam>& params
00059
00060
00061 ):
00062 _p4_p(p4_p),_p4_d1(p4_d1), _p4_d2(p4_d2), _ampl(ampl), _theta(theta),
00063 _mass(mass),
00064 _params(params)
00065
00066
00067 {}
00068
00069
00070
00071 EvtComplex EvtFlatte::resAmpl() {
00072
00073 double pi180inv = 1.0/EvtConst::radToDegrees;
00074
00075
00076
00077
00078
00079 double mR = (_p4_d1+_p4_d2).mass();
00080
00081 EvtComplex w;
00082
00083 for (vector<EvtFlatteParam>::const_iterator param = _params.begin();
00084 param != _params.end();
00085 ++param) {
00086
00087 double m1 = (*param).m1(); double m2 = (*param).m2();
00088 double g = (*param).g();
00089 w += (g*g
00090 *sqrtCplx((1-((m1-m2)*(m1-m2))/(mR*mR))*
00091 (1-((m1+m2)*(m1+m2))/(mR*mR))));
00092
00093 }
00094
00095 EvtComplex denom = _mass*_mass - mR*mR - EvtComplex(0,1)*w;
00096 EvtComplex ampl = _ampl*EvtComplex(cos(_theta*pi180inv), sin(_theta*pi180inv))/denom;
00097
00098 return ampl;
00099 }
00100
00101