00001 #ifndef __INCLUDE_KERNEL_H 00002 #define __INCLUDE_KERNEL_H 00003 00004 #include <cstdlib> 00005 #include <cmath> 00006 #include <cstdio> 00007 #include <complex> 00008 #include <string> 00009 #include "sf.h" 00010 #include "utils.h" 00011 #include "constants.h" 00012 #include "wavefunction.h" 00013 #include "parametermap.h" 00014 using namespace std; 00015 00016 string getKernelFilename( string datadir, int ell, double q ); 00017 00022 class CKernel{ 00023 00024 public: 00025 00026 CKernel( string kparsfilename="" ); 00027 virtual ~CKernel(); 00028 virtual double GetValue( int ell, double q, double r ) const; 00029 double GetValue( int ell, int iq, int ir ) const; 00030 bool Read( const parameterMap& parameters ); 00031 bool Write( parameterMap& parameters ); 00032 void ReadData( string datadirname ); 00033 void WriteData( string datadirname ); 00034 void Print(); 00035 int GetLMAX(); 00036 double GetDELR(); 00037 double GetDELQ(); 00038 int GetNQMAX(); 00039 int GetNRMAX(); 00040 double GetQ(int iq); 00041 virtual void Calc( CWaveFunction *wf ); 00042 void Calc_ClassCoul( double ma, double mb, int zazb ); 00043 void Calc_PureHBT(); 00044 bool GetIDENTICAL(); 00045 double GetPsiSquared( int iq, int ir, double ctheta ); 00046 double GetPsiSquared( int iq, double r, double ctheta ); 00047 double GetPsiSquared( double q, double r, double ctheta); 00048 00049 private: 00050 00051 bool IDENTICAL; 00052 int ellmax; 00053 int nrmax,nqmax; 00054 double delr,delq; 00055 double ***kernel; 00056 double *P; 00057 void ParsInit( string kparsfilename ); 00058 double CalcPsiSquared( int iq, int ir, double ctheta ); 00059 double CalcPsiSquared( int iq, double r, double ctheta ); 00060 void CalcP( double ctheta ); 00061 }; 00062 00063 class CKernelExactHBT: public CKernel { 00064 public: 00065 00066 CKernelExactHBT( string kparsfilename="" ): CKernel( kparsfilename ){} 00067 double GetValue( int ell, double q, double r ) const 00068 {return NEGONE_TO_THE(ell)*Bessel::jn(ell,2.0*q*r/HBARC);} 00069 }; 00070 00071 00072 class CKernelWF{ 00073 00074 public: 00075 00076 double GetPsiSquared(int iq,int ir,int ictheta); 00077 double GetPsiSquared(int iq,int ir,double ctheta); 00078 double GetPsiSquared(int iq,double r,double ctheta); 00079 double GetPsiSquared(double q,double r,double ctheta); 00080 void Calc(CWaveFunction *wf); 00081 void ReadData( string datadirname ); 00082 void WriteData( string datadirname ); 00083 double GetDELR(); 00084 double GetDELQ(); 00085 double GetDELCTHETA(); 00086 int GetNQMAX(); 00087 int GetNRMAX(); 00088 int GetNCTHETA(); 00089 bool GetIDENTICAL(); 00090 CKernelWF( string kparsfilename ); 00091 ~CKernelWF(); 00092 00093 private: 00094 00095 bool IDENTICAL; 00096 int nctheta,nrmax,nqmax; 00097 double delr,delq,delctheta; 00098 double ***wfarray; 00099 void ParsInit( string kparsfilename ); 00100 00101 }; 00102 00103 #endif