00001 #include "EvtGenBase/EvtPatches.hh"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <iostream>
00012 #include <assert.h>
00013 #include <math.h>
00014 #include "EvtGenBase/EvtBlattWeisskopf.hh"
00015 #include "EvtGenBase/EvtReport.hh"
00016 using std::endl;
00017
00018 EvtBlattWeisskopf::EvtBlattWeisskopf(int LL, double R, double p0)
00019 : _LL(LL), _radial(R), _p0(p0)
00020 {
00021 if(R < 0) {
00022
00023 report(INFO,"EvtGen") << "Radius " << R << " negative" << endl;
00024 assert(0);
00025 }
00026
00027 _radial = R;
00028
00029
00030
00031 _F0 = compute(_p0);
00032 if(_F0 <= 0) {
00033
00034 report(INFO,"EvtGen") << "Invalid nominal form factor computed " << _F0 << endl;
00035 assert(0);
00036 }
00037 }
00038
00039 EvtBlattWeisskopf::EvtBlattWeisskopf(const EvtBlattWeisskopf& other)
00040 : _LL(other._LL), _radial(other._radial), _p0(other._p0), _F0(other._F0)
00041 {}
00042
00043 EvtBlattWeisskopf::~EvtBlattWeisskopf()
00044 {}
00045
00046 double EvtBlattWeisskopf::operator()(double p) const
00047 {
00048 double ret = compute(p)/_F0;
00049
00050 return ret;
00051 }
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 double EvtBlattWeisskopf::compute(double p) const
00066 {
00067 if(p < 0) {
00068
00069 report(INFO,"EvtGen") << "Momentum " << p << " negative in form factor calculation" << endl;
00070 assert(0);
00071 }
00072 else {
00073 double rp = p*_radial;
00074 double rp2 = rp*rp;
00075 double rp4 = rp2*rp2;
00076 double rp6 = rp2 * rp4;
00077 double rp8 = rp4 * rp4;
00078
00079 double x = p*p*_radial*_radial;
00080
00081 if(0 == _LL) return 1.;
00082 else
00083 if(1 == _LL) return sqrt(1.0/(1.0+x));
00084 else
00085 if(2 == _LL) return sqrt(1.0/(1.0+x/3.0+x*x/9.0));
00086 else
00087 if(3 == _LL) return 1.0/sqrt(225 + 45*rp2 + 6*rp4 + rp6 );
00088 else
00089 if(4 == _LL) return 1.0/sqrt(11025 + 1575*rp2 + 135*rp4 + 10*rp6 + rp8 );
00090 else {
00091 report(INFO,"EvtGen") << "Angular momentum " << _LL << " not implemented" << endl;
00092 assert(0);
00093 }
00094 }
00095 }
00096