00001 #ifndef __CWAVEFUNCTION_WF_LAMBDALAMBDA_PHASESHIFT_CC__
00002 #define __CWAVEFUNCTION_WF_LAMBDALAMBDA_PHASESHIFT_CC__
00003 #include "wavefunction.h"
00004
00005 CWaveFunction_lambdalambda_phaseshift::CWaveFunction_lambdalambda_phaseshift(string parsfilename){
00006 int iq,ichannel;
00007 double q;
00008
00009 ParsInit(parsfilename);
00010
00011 m1=1115.7;
00012 m2=m1;
00013 IDENTICAL=1;
00014 q1q2=0;
00015 nchannels=1;
00016
00017 ellmax=0;
00018 InitArrays();
00019
00020 ell[0]=0;
00021
00022 InitWaves();
00023
00024 channelweight[0]=0.5;
00025
00026 GetPhaseshifts();
00027
00028 for(ichannel=0;ichannel<nchannels;ichannel++){
00029 for(iq=0;iq<nqmax;iq++){
00030 q=qarray[iq];
00031
00032
00033
00034 Wepsilon[ichannel][iq]=ddeltadq[ichannel][iq]
00035 -GetIW(ell[ichannel],epsilon,q,q1q2,eta[iq],delta[ichannel][iq])
00036 +GetIW(ell[ichannel],epsilon,q,q1q2,eta[iq],0.0);
00037 Wepsilon[ichannel][iq]=3.0*Wepsilon[ichannel][iq]
00038 /(4.0*PI*pow(epsilon,3));
00039 }
00040 }
00041
00042
00043 }
00044
00045 double CWaveFunction_lambdalambda_phaseshift::CalcPsiSquared(int iq,double r,double ctheta){
00046 double psisquared,x,dpsi2;
00047 complex<double> psisymm,psiantisymm,psia,psib,hstar0;
00048 int ichannel;
00049 const double ROOT2=sqrt(2.0);
00050 double q;
00051
00052 if(iq>=nqmax){
00053 psisquared=1.0;
00054 }
00055 else{
00056 q=qarray[iq];
00057 psia=planewave[iq]->planewave(r,ctheta);
00058 psib=planewave[iq]->planewave(r,-ctheta);
00059 psisymm=(psia+psib)/ROOT2;
00060 psiantisymm=(psia-psib)/ROOT2;
00061 if(STRONG==1){
00062 x=q*r/HBARC;
00063 hstar0=partwave[0][iq]->GetPhiIncoming(r)/x;
00064 if(r<epsilon){
00065 psisquared=0.25*real(psisymm*conj(psisymm))
00066 +0.75*real(psiantisymm*conj(psiantisymm));
00067 for(ichannel=0;ichannel<nchannels;ichannel++){
00068 dpsi2=channelweight[ichannel]*2.0*PI*Wepsilon[ichannel][iq]
00069 *pow(HBARC,3)/(q*q);
00070 psisquared+=dpsi2;
00071 }
00072 }
00073 else{
00074 psisymm+=0.5*hstar0*ROOT2*(Misc::ceiphi(-2.0*delta[0][iq])-1.0);
00075 psisquared=0.25*real(psisymm*conj(psisymm))
00076 +0.75*real(psiantisymm*conj(psiantisymm));
00077 }
00078 }
00079 else psisquared=0.25*real(psisymm*conj(psisymm))
00080 +0.75*real(psiantisymm*conj(psiantisymm));
00081 }
00082 psisquared*=RelativisticCorrection(r,iq);
00083 return psisquared;
00084 }
00085
00086 void CWaveFunction_lambdalambda_phaseshift::GetPhaseshifts(){
00087 double q,q0;
00088 double tandelta,a,dtandeltadq,tandeltaH0;
00089 double MH0,M,EH0,GammaH0,lambda=500.0;
00090 int iq;
00091
00092 printf("Enter the energy of the H0 above the 2Lambda threshold in MeV : ");
00093 scanf("%lf",&EH0);
00094 printf("Enter the width of the H0 in MeV : ");
00095 scanf("%lf",&GammaH0);
00096
00097
00098 printf("Enter scattering length in fm (Do not include effect of H0): ");
00099 scanf("%lf",&a);
00100 lambda=500.0;
00101
00102
00103 MH0=m1+m2+EH0;
00104 q0=sqrt(0.25*MH0*MH0-m1*m1);
00105 printf("Resonance occurs at q=%g, mesh goes to q=%g\n",
00106 q0,qarray[nqmax-1]);
00107
00108 for(iq=0;iq<nqmax;iq++){
00109 q=qarray[iq];
00110 M=2.0*sqrt(q*q+m1*m1);
00111 tandelta=(-a*q/HBARC)/(1.0+q*q/(lambda*lambda));
00112 dtandeltadq=(tandelta/q)*(1.0-q*q/(lambda*lambda))
00113 /(1.0+q*q/(lambda*lambda));
00114 tandeltaH0=0.5*(q/q0)*GammaH0/(MH0-M);
00115 tandelta+=tandeltaH0;
00116 dtandeltadq+=(tandeltaH0/q)*(1+(4.0*q*q/M)/(MH0-M));
00117 delta[0][iq]=atan(tandelta);
00118 ddeltadq[0][iq]=dtandeltadq*pow(cos(delta[0][iq]),2);
00119
00120 }
00121
00122
00123 }
00124
00125 #endif