00001 #ifndef __CWAVEFUNCTION_WF_KPI_PHASESHIFT_CC__
00002 #define __CWAVEFUNCTION_WF_KPI_PHASESHIFT_CC__
00003 #include "wavefunction.h"
00004
00005 void WaveFunctionRoutines::getphaseshift_kpi(int twoI,int ell,double q,double *delta,double *ddeltadq){
00006 double a,reff;
00007 const double R=(1000.0/4.3),GammaR=52.9,MR=895.7,M1=139.57,M2=493.677;
00008 double dEdq,E,E1,E2,Gamma,qR,dGammadq,tandelta,dtandeltadq,denom;
00009
00010
00011 if(ell==0){
00012 if(twoI==1){
00013 a=0.00239;
00014 reff=-0.00176;
00015 }
00016 else{
00017 a=-0.001;
00018 reff=-0.00176;
00019 }
00020
00021 denom=((1.0/a)+0.5*reff*q*q);
00022 tandelta=q/denom;
00023 dtandeltadq=(tandelta/q)-tandelta*reff*q/denom;
00024 *delta=atan(tandelta);
00025 *ddeltadq=dtandeltadq/(1.0+tandelta*tandelta);
00026 }
00027 else if(ell==1){
00028 if(twoI==1){
00029 E1=sqrt(M1*M1+q*q);
00030 E2=sqrt(M2*M2+q*q);
00031 E=E1+E2;
00032 dEdq=(q/E1)+(q/E2);
00033 qR=sqrt(Misc::triangle(MR,M1,M2));
00034 Gamma=GammaR*pow(q/qR,3)*((1.0+pow(qR/R,2))/(1.0+pow(q/R,2)));
00035 dGammadq=(3.0*Gamma/q)-Gamma*2.0*(q/(R*R))/(1.0+pow(q/R,2));
00036 tandelta=MR*Gamma/(MR*MR-E*E);
00037 dtandeltadq=(tandelta*dGammadq/Gamma)+2.0*E*tandelta*dEdq/(MR*MR-E*E);
00038 *delta=atan(tandelta);
00039 *ddeltadq=dtandeltadq/(1.0+tandelta*tandelta);
00040 }
00041 else{
00042 *delta=0.0;
00043 *ddeltadq=0.0;
00044 }
00045 }
00046 else{
00047 *delta=0.0;
00048 *ddeltadq=0.0;
00049 }
00050
00051 }
00052
00053 #endif