00001 #ifndef __CWAVEFINCTION_WF_PIPLUSPIPLUS_PHASESHIFT_CC__
00002 #define __CWAVEFINCTION_WF_PIPLUSPIPLUS_PHASESHIFT_CC__
00003 #include "wavefunction.h"
00004
00005 CWaveFunction_pipluspiplus_phaseshift::CWaveFunction_pipluspiplus_phaseshift(string parsfilename){
00006 int iq,ichannel;
00007 double q;
00008 int *I;
00009
00010 ParsInit(parsfilename);
00011
00012 m1=MPI;
00013 m2=MPI;
00014 IDENTICAL=1;
00015 q1q2=1;
00016 if(COULOMB==0) q1q2=0;
00017 nchannels=2;
00018 ellmax=2;
00019 InitArrays();
00020 ell[0]=0;
00021 ell[1]=2;
00022 InitWaves();
00023 channelweight[0]=channelweight[1]=2.0;
00024
00025 I=new int[nchannels];
00026 I[0]=I[1]=2;
00027 for(ichannel=0;ichannel<nchannels;ichannel++){
00028
00029 for(iq=0;iq<nqmax;iq++){
00030 q=qarray[iq];
00031 WaveFunctionRoutines::getphaseshift_pipi(I[ichannel],ell[ichannel],q,&delta[ichannel][iq],
00032 &ddeltadq[ichannel][iq]);
00033
00034
00035
00036 if(q1q2!=0)
00037 CoulWave::phaseshift_CoulombCorrect(ell[ichannel],q,eta[iq],
00038 delta[ichannel][iq],ddeltadq[ichannel][iq]);
00039 Wepsilon[ichannel][iq]=ddeltadq[ichannel][iq]
00040 -GetIW(ell[ichannel],epsilon,q,q1q2,eta[iq],delta[ichannel][iq])
00041 +GetIW(ell[ichannel],epsilon,q,q1q2,eta[iq],0.0);
00042 Wepsilon[ichannel][iq]=3.0*Wepsilon[ichannel][iq]
00043 /(4.0*PI*pow(epsilon,3));
00044 }
00045 }
00046 printf("pipluspiplus wf initialized\n");
00047 }
00048
00049 double CWaveFunction_pipluspiplus_phaseshift::CalcPsiSquared(int iq,double r,double ctheta){
00050 double psisquared,x,dpsi2;
00051 const double ROOT2=sqrt(2.0);
00052 double delta_s,delta_d;
00053 complex<double> psi,hstar,psi0,psisymm,psia,psib;
00054 double q;
00055 int ichannel;
00056
00057 if(iq>=nqmax){
00058 psisquared=1.0;
00059 }
00060 else{
00061 q=qarray[iq];
00062 psia=planewave[iq]->planewave(r,ctheta);
00063 psib=planewave[iq]->planewave(r,-ctheta);
00064 psi=(psia+psib)/ROOT2;
00065 if(r<epsilon){
00066 psisquared=real(psi*conj(psi));
00067 if(STRONG==1){
00068 for(ichannel=0;ichannel<nchannels;ichannel++){
00069 dpsi2=(2.0*ell[ichannel]+1.0)*2.0*PI*Wepsilon[ichannel][iq]
00070 *pow(HBARC,3)/(q*q);
00071 psisquared+=2.0*dpsi2;
00072 }
00073 }
00074 }
00075 else{
00076 if(STRONG==1){
00077 x=q*r/HBARC;
00078 delta_s=delta[0][iq];
00079 delta_d=delta[1][iq];
00080
00081
00082 ichannel=0;
00083 hstar=partwave[ell[ichannel]][iq]->GetPhiIncoming(r)/x;
00084 psi+=ROOT2*0.5*hstar*(Misc::ceiphi(-2.0*delta_s)-1.0);
00085
00086 ichannel=1;
00087 hstar=partwave[ell[ichannel]][iq]->GetPhiIncoming(r)/x;
00088 psi+=ROOT2*0.5*ci*ci*5.0*SpherHarmonics::legendre(2,ctheta)
00089 *hstar*(Misc::ceiphi(-2.0*delta_d)-1.0);
00090 }
00091 psisquared=real(psi*conj(psi));
00092 }
00093 }
00094
00095
00096 psisquared*=RelativisticCorrection(r,iq);
00097 return psisquared;
00098
00099 }
00100
00101 #endif
00102