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