00001 #ifndef __CWAVEFUNCTION_WF_H__
00002 #define __CWAVEFUNCTION_WF_H__
00003
00004 #include <cstdlib>
00005 #include <cmath>
00006 #include <cstdio>
00007 #include <complex>
00008 #include <cstring>
00009
00010 using namespace std;
00011
00012 #include "gslmatrix.h"
00013 #include "misc.h"
00014 #include "sf.h"
00015 #include "parametermap.h"
00016 #include "constants.h"
00017
00018
00019 namespace WaveFunctionRoutines{
00020 void getphaseshift_pipi(int I,int ell,double q,double *delta,double *ddeltadq);
00021 void getphaseshift_kpi(int twoI,int ell,double q,double *delta,double *ddeltadq);
00022
00023 void creid93(const double *r, const char *pname, const char *type, double *v11, double *v12, double *v22);
00024 double r93_w(const double *n, const double *m, const double *x);
00025 double r93_y(const double *n, const double *m, const double *x);
00026 double r93_p(const double *n, const double *m, const double *x);
00027 double r93_z(const double *n, const double *m, const double *x);
00028 };
00029
00030
00031 class CPlaneWave;
00032 class CPartWave;
00033
00034 class CWaveFunction{
00035 public:
00036 int GetNQMAX();
00037 int GetNCHANNELS();
00038 double GetDELTA(int ichannel,int iq);
00039 double GetQ(int iq);
00040 double GetDELQ();
00041 bool GetIDENTICAL();
00042 void PrintCdelta(double Rx,double Ry,double Rz);
00043 double GetPsiSquared(double *pa,double *xa,double *pb,double *xb);
00044 double GetPsiSquared(double q,double r,double ctheta);
00045 virtual double CalcPsiSquared(int iq,double r,double ctheta);
00046 CWaveFunction();
00047 virtual ~CWaveFunction();
00048 void PrintPhaseShifts();
00049 double **Wepsilon,**delta,**ddeltadq,*eta,*channelweight;
00050 double GetIW(int ell,double epsilon,double q,int q1q2,
00051 double eta,double delta);
00052 CPlaneWave **planewave;
00053 CPartWave ***partwave;
00054 protected:
00055 void ParsInit(string parsfilename);
00056 complex<double> ci;
00057 double MPI,MKAON,MPROTON,MLAMBDA,MNEUTRON;
00058 int *ell;
00059
00060 int nchannels,q1q2;
00061 double m1,m2;
00062 bool generic;
00063 double mu,muscale,symmweight,epsilon;
00064 int q1q2scale;
00065 bool STRONG,COULOMB,IDENTICAL;
00066
00067
00068
00069 void InitArrays();
00070 void InitWaves();
00071 void getqrctheta(double *pa,double *xa,double *pb,double *xb,
00072 double *q,double *r,double *ctheta);
00073 void EffectiveRange(int ichannel,double scattlength,double Reff);
00074
00075
00076 void phaseshift_CoulombCorrect(int ell,double q,double eta,
00077 double &delta,double &ddeltadq);
00078 int ellmax,nqmax;
00079 double delq;
00080 double *qarray;
00081
00082 int *nwells;
00083 complex<double> ***A;
00084 complex<double> **cg;
00085 complex<double> ***DelPhiArray;
00086 int DelPhiArray_NRMAX;
00087 double DelPhiArray_DELR;
00088 void SquareWell_CalcDelPhi(int iq,double r,complex<double> *DelPhi);
00089 double **a;
00090 double **V0;
00091 void SquareWell_Init();
00092 void SquareWell_GetDelPhi(int iq,double r,complex<double> *DelPhi);
00093 void SquareWell_MakeArrays();
00094 void SquareWell_DeleteArrays();
00095
00096
00097 double RelativisticCorrection(double r,int iq);
00098
00099 };
00100
00101 class CPlaneWave{
00102 public:
00103 CPlaneWave(double etaset,int Q1Q2,double qset);
00104 complex<double> planewave(double r,double ctheta);
00105 complex<double> hyper(complex<double> a,complex<double> b,complex<double> cz);
00106 private:
00107 complex<double>ci;
00108 double delx;
00109 int q1q2,nxmax;
00110 complex<double> couly;
00111 complex<double> cfact1;
00112 complex<double> cfact2;
00113 complex<double> chype[61];
00114 complex<double> chype1[11];
00115 complex<double> chype2[11];
00116 double q,eta;
00117 complex<double> *hyperarray;
00118 };
00119
00120 class CPartWave{
00121 public:
00122 CPartWave(double etaset,int q1q2,double qset,int ell,double epsilonset);
00123 CPartWave(double etaset,int q1q2set,double qset,int ellset,
00124 double epsilonset,int nrmaxset,double delrset);
00125 ~CPartWave();
00126 complex<double> GetPhiIncoming(double r);
00127 complex<double> GetPhiOutgoing(double r);
00128 double sigma;
00129 private:
00130 complex<double> ci;
00131 double epsilon;
00132 int ell,q1q2;
00133 double q,eta;
00134 complex<double> *phi;
00135
00136 int nrmax;
00137 double delr;
00138 void phi_init();
00139 };
00140
00141
00142
00143 class CWaveFunction_pkplus_phaseshift : public CWaveFunction {
00144 public:
00145 double CalcPsiSquared(int iq,double r,double ctheta);
00146 void read_phaseshifts();
00147 CWaveFunction_pkplus_phaseshift(string parsfilename);
00148 };
00149
00150
00151 class CWaveFunction_ppiplus_phaseshift : public CWaveFunction {
00152 public:
00153 double CalcPsiSquared(int iq,double r,double ctheta);
00154 void read_phaseshifts();
00155 CWaveFunction_ppiplus_phaseshift(string parsfilename);
00156 };
00157
00158 class CWaveFunction_generic : public CWaveFunction {
00159 public:
00160 double CalcPsiSquared(int iq,double r,double ctheta);
00161 void reset(int q1q2,double m1,double m2,double symmweight);
00162 CWaveFunction_generic(string parsfilename,int q1q2,double m1,double m2,double symmweight);
00163
00164 };
00165
00166 class CWaveFunction_Xipi_phaseshift : public CWaveFunction {
00167 public:
00168 double CalcPsiSquared(int iq,double r,double ctheta);
00169 void get_phaseshifts_Xistar(double q,double &delta,double &ddeltadq);
00170 CWaveFunction_Xipi_phaseshift(string parsfilename);
00171 };
00172
00173 class CWaveFunction_pn_phaseshift : public CWaveFunction {
00174 public:
00175 double CalcPsiSquared(int iq,double r,double ctheta);
00176
00177 void read_phaseshifts();
00178 CWaveFunction_pn_phaseshift(string parsfilename);
00179 };
00180
00181 class CWaveFunction_plambda_phaseshift : public CWaveFunction {
00182 public:
00183 double CalcPsiSquared(int iq,double r,double ctheta);
00184
00185 void get_phaseshifts();
00186 CWaveFunction_plambda_phaseshift(string parsfilename);
00187 };
00188
00189 class CWaveFunction_kpluspiminus_phaseshift : public CWaveFunction {
00190 public:
00191 double CalcPsiSquared(int iq,double r,double ctheta);
00192 void get_phaseshifts_kpluspiminus();
00193 CWaveFunction_kpluspiminus_phaseshift(string parsfilename);
00194 };
00195
00196 class CWaveFunction_pp_phaseshift : public CWaveFunction {
00197 public:
00198 double CalcPsiSquared(int iq,double r,double ctheta);
00199
00200 void read_phaseshifts();
00201 CWaveFunction_pp_phaseshift(string parsfilename);
00202 };
00203
00204 class CWaveFunction_nn_phaseshift : public CWaveFunction {
00205 public:
00206 double CalcPsiSquared(int iq,double r,double ctheta);
00207
00208 void read_phaseshifts();
00209 CWaveFunction_nn_phaseshift(string parsfilename);
00210 };
00211
00212 class CWaveFunction_pipluspiminus_phaseshift : public CWaveFunction {
00213 public:
00214 double CalcPsiSquared(int iq,double r,double ctheta);
00215 CWaveFunction_pipluspiminus_phaseshift(string parsfilename);
00216 };
00217
00218 class CWaveFunction_pipluspiplus_phaseshift : public CWaveFunction {
00219 public:
00220 double CalcPsiSquared(int iq,double r,double ctheta);
00221 CWaveFunction_pipluspiplus_phaseshift(string parsfilename);
00222 };
00223
00224 class CWaveFunction_lambdalambda_phaseshift : public CWaveFunction {
00225 public:
00226 double CalcPsiSquared(int iq,double r,double ctheta);
00227 CWaveFunction_lambdalambda_phaseshift(string parsfilename);
00228 void GetPhaseshifts();
00229 };
00230
00231 class CWaveFunction_lambdalambdaantiparspin_phaseshift : public CWaveFunction {
00232 public:
00233 double CalcPsiSquared(int iq,double r,double ctheta);
00234 CWaveFunction_lambdalambdaantiparspin_phaseshift(string parsfilename);
00235 void GetPhaseshifts();
00236 };
00237
00238 class CWaveFunction_lambdalambdaparspin_phaseshift : public CWaveFunction {
00239 public:
00240 double CalcPsiSquared(int iq,double r,double ctheta);
00241 CWaveFunction_lambdalambdaparspin_phaseshift(string parsfilename);
00242 void GetPhaseshifts();
00243 };
00244
00245 class CWaveFunction_pipluspiminus_sqwell : public CWaveFunction{
00246 public:
00247 double CalcPsiSquared(int iq,double r,double ctheta);
00248 CWaveFunction_pipluspiminus_sqwell(string parsfilename);
00249
00250 ~CWaveFunction_pipluspiminus_sqwell();
00251
00252 };
00253
00254 class CWaveFunction_kpluspiminus_sqwell : public CWaveFunction{
00255 public:
00256 double CalcPsiSquared(int iq,double r,double ctheta);
00257 CWaveFunction_kpluspiminus_sqwell(string parsfilename);
00258
00259 ~CWaveFunction_kpluspiminus_sqwell();
00260
00261 };
00262
00263 class CWaveFunction_pipluspiplus_sqwell : public CWaveFunction{
00264 public:
00265 double CalcPsiSquared(int iq,double r,double ctheta);
00266 CWaveFunction_pipluspiplus_sqwell(string parsfilename);
00267
00268 ~CWaveFunction_pipluspiplus_sqwell();
00269
00270 };
00271
00272 class CWaveFunction_kpluspiplus_sqwell : public CWaveFunction{
00273 public:
00274 double CalcPsiSquared(int iq,double r,double ctheta);
00275 CWaveFunction_kpluspiplus_sqwell(string parsfilename);
00276 ~CWaveFunction_kpluspiplus_sqwell();
00277 };
00278
00279 class CWaveFunction_pkplus_sqwell : public CWaveFunction{
00280 public:
00281 double CalcPsiSquared(int iq,double r,double ctheta);
00282 CWaveFunction_pkplus_sqwell(string parsfilename);
00283 ~CWaveFunction_pkplus_sqwell();
00284 };
00285
00286 class CWaveFunction_ppiplus_sqwell : public CWaveFunction{
00287 public:
00288 double CalcPsiSquared(int iq,double r,double ctheta);
00289 CWaveFunction_ppiplus_sqwell(string parsfilename);
00290 ~CWaveFunction_ppiplus_sqwell();
00291
00292 };
00293
00294 class CWaveFunction_ppiminus_sqwell : public CWaveFunction{
00295 public:
00296 double CalcPsiSquared(int iq,double r,double ctheta);
00297 CWaveFunction_ppiminus_sqwell(string parsfilename);
00298 ~CWaveFunction_ppiminus_sqwell();
00299 };
00300
00301 class CWaveFunction_pp_schrod : public CWaveFunction{
00302 public:
00303 double CalcPsiSquared(int iq,double r,double ctheta);
00304 CWaveFunction_pp_schrod(string parsfilename);
00305
00306 ~CWaveFunction_pp_schrod();
00307
00308 int nrmax_schrod;
00309 double rmax_schrod;
00310 complex<double> ***delpsi;
00311
00312 protected:
00313
00314 void schrodinger(int iq,int ichannel);
00315 double Vreid(double r,int ichannel);
00316 };
00317
00318
00319 #endif
00320