00001 #include <iostream> 00002 #include "TFormFactor.h" 00003 #ifndef ALONE 00004 # include "TRadGlobal.h" 00005 #endif 00006 #include "TConstants.h" 00007 00008 TFormFactor::TFormFactor(){ 00009 fsvsr = NULL; 00010 fsvsi = NULL; 00011 fNp = 4000; 00012 fUnitFF = false; 00013 } 00014 00015 TFormFactor::~TFormFactor(){ 00016 if(fsvsr) delete fsvsr; 00017 if(fsvsr) delete fsvsi; 00018 // std::cout<<"Deleting FormFactor"<<std::endl; 00019 } 00020 00021 void TFormFactor::Init(){ 00022 #ifndef ALONE 00023 double smax = gGlobal->Get_s(); 00024 #else 00025 double smax = 4*800*800; 00026 #endif 00027 Init(smax); 00028 } 00029 00030 void TFormFactor::Init(const double &smax){ 00031 double *s = new double[fNp]; 00032 double *re_vs = new double[fNp]; 00033 double *im_vs = new double[fNp]; 00034 /* 00035 for(int i = 1;i<=1;i++){ 00036 double en = 500 + i; 00037 std::complex<double> form = ff(pow(2*en,2)); 00038 std::cout<< en << " " << form<<" "<<std::abs(form*std::conj(form))<<std::endl; 00039 } 00040 exit(0); 00041 */ 00042 double smin = gGlobal->Get_MF2()*gGlobal->Get_s(); 00043 double ds = (smax-smin)/(fNp-1); 00044 for(unsigned int i=0; i<fNp; i++){ 00045 s[i] = smin + i*ds; 00046 std::complex<double> vs = ff( (i>0) ? s[i] : smin + 0.01*ds); 00047 // std::cout<<i<<" "<<s[i]<<" "<<vs<<std::endl; 00048 re_vs[i] = std::real(vs); 00049 im_vs[i] = std::imag(vs); 00050 } 00051 00052 if(fsvsr) delete fsvsr; 00053 fsvsr = new TRadSpline3("vsr", s, re_vs, fNp); 00054 00055 if(fsvsi) delete fsvsi; 00056 fsvsi = new TRadSpline3("vsi", s, im_vs, fNp); 00057 00058 delete [] re_vs; 00059 delete [] im_vs; 00060 delete [] s; 00061 } 00062 00063 void TFormFactor::Print(){ 00064 #ifndef ALONE 00065 std::complex<double> form = Eval(gGlobal->Get_s()); 00066 #else 00067 std::complex<double> form = Eval(4*200*200); 00068 #endif 00069 std::cout<<"Formfactor is "<<form<<std::endl; 00070 std::cout<<"Squared formfactor is "<<std::abs(form*std::conj(form))<<std::endl; 00071 std::cout<<std::flush; 00072 }