00001 #ifndef __CWAVEFUNCTION_WF_PIPLUSPIMINUS_PHASESHIFT_CC__
00002 #define __CWAVEFUNCTION_WF_PIPLUSPIMINUS_PHASESHIFT_CC__
00003 #include "wavefunction.h"
00004
00005 CWaveFunction_pipluspiminus_phaseshift::CWaveFunction_pipluspiminus_phaseshift(string parsfilename){
00006 int iq,ichannel,*I;
00007 double q;
00008
00009 ParsInit(parsfilename);
00010
00011 m1=MPI;
00012 m2=MPI;
00013 IDENTICAL=0;
00014 q1q2=-1;
00015 if(COULOMB==0) q1q2=0;
00016 nchannels=5;
00017
00018 ellmax=2;
00019 InitArrays();
00020 ell[0]=0;
00021 ell[1]=2;
00022 ell[2]=1;
00023 ell[3]=0;
00024 ell[4]=2;
00025
00026 InitWaves();
00027 channelweight[0]=(2.0/3.0);
00028 channelweight[1]=(2.0/3.0)*5.0;
00029 channelweight[2]=3.0;
00030 channelweight[3]=(1.0/3.0);
00031 channelweight[4]=(1.0/3.0)*5.0;
00032 I=new int[nchannels];
00033 I[0]=I[1]=0;
00034 I[2]=1;
00035 I[3]=I[4]=2;
00036
00037 for(ichannel=0;ichannel<nchannels;ichannel++){
00038 for(iq=0;iq<nqmax;iq++){
00039 q=qarray[iq];
00040 WaveFunctionRoutines::getphaseshift_pipi(I[ichannel],ell[ichannel],q,&delta[ichannel][iq],
00041 &ddeltadq[ichannel][iq]);
00042
00043
00044
00045 if(q1q2!=0)
00046 CoulWave::phaseshift_CoulombCorrect(ell[ichannel],q,eta[iq],
00047 delta[ichannel][iq],
00048 ddeltadq[ichannel][iq]);
00049 Wepsilon[ichannel][iq]=ddeltadq[ichannel][iq]
00050 -GetIW(ell[ichannel],epsilon,q,q1q2,eta[iq],delta[ichannel][iq])
00051 +GetIW(ell[ichannel],epsilon,q,q1q2,eta[iq],0.0);
00052 Wepsilon[ichannel][iq]=3.0*Wepsilon[ichannel][iq]
00053 /(4.0*PI*pow(epsilon,3));
00054 }
00055
00056 }
00057
00058
00059
00060
00061
00062
00063 printf("pipluspiminus_phaseshift wf initialized\n");
00064 }
00065
00066 double CWaveFunction_pipluspiminus_phaseshift::CalcPsiSquared(int iq,double r,
00067 double ctheta){
00068 double psisquared,x,dpsi2,q,ROOT2=sqrt(2.0);
00069 double delta_s,delta_p,delta_d;
00070 complex<double> psi,hstar0,hstar1,hstar2,psi0,psisymm,psia,psib;
00071 int ipartial,ichannel;
00072
00073 if(iq>=nqmax){
00074 psisquared=1.0;
00075 }
00076 else{
00077 q=qarray[iq];
00078 x=q*r/HBARC;
00079
00080 if(r<epsilon){
00081 psi0=planewave[iq]->planewave(r,ctheta);
00082 psisquared=real(psi0*conj(psi0));
00083 if(STRONG==1){
00084 for(ichannel=0;ichannel<nchannels;ichannel++){
00085 dpsi2=channelweight[ichannel]*2.0*PI*Wepsilon[ichannel][iq]
00086 *pow(HBARC,3)/(q*q);
00087 psisquared+=dpsi2;
00088 }
00089 }
00090 }
00091 else{
00092 psia=planewave[iq]->planewave(r,ctheta);
00093 psib=planewave[iq]->planewave(r,-ctheta);
00094
00095 hstar0=partwave[0][iq]->GetPhiIncoming(r)/x;
00096 hstar1=partwave[1][iq]->GetPhiIncoming(r)/x;
00097 hstar2=partwave[2][iq]->GetPhiIncoming(r)/x;
00098
00099
00100 psi=(psia+psib)/ROOT2;
00101 if(STRONG==1){
00102 delta_s=delta[0][iq];
00103
00104 delta_d=0.0;
00105 ichannel=0;
00106 psi+=ROOT2*0.5*hstar0*(Misc::ceiphi(-2.0*delta_s)-1.0);
00107 ichannel=1;
00108 psi+=ROOT2*0.5*ci*ci*5.0*SpherHarmonics::legendre(2,ctheta)*hstar2
00109 *(Misc::ceiphi(-2.0*delta_d)-1.0);
00110 }
00111 psisquared=(1.0/3.0)*real(psi*conj(psi));
00112
00113
00114 psi=(psia-psib)/ROOT2;
00115 if(STRONG==1){
00116
00117 delta_p=0.0;
00118 ichannel=2;
00119 psi+=ROOT2*0.5*ci*3.0*SpherHarmonics::legendre(1,ctheta)*hstar1
00120 *(Misc::ceiphi(-2.0*delta_p)-1.0);
00121 }
00122 psisquared+=0.5*real(psi*conj(psi));
00123
00124
00125
00126 psi=(psia+psib)/ROOT2;
00127 if(STRONG==1){
00128 delta_s=delta[3][iq];
00129
00130 delta_d=0.0;
00131 ichannel=3;
00132 psi+=ROOT2*0.5*hstar0*(Misc::ceiphi(-2.0*delta_s)-1.0);
00133 ichannel=4;
00134 psi+=ROOT2*0.5*ci*ci*5.0*SpherHarmonics::legendre(2,ctheta)
00135 *hstar2*(Misc::ceiphi(-2.0*delta_d)-1.0);
00136 }
00137 psisquared+=(1.0/6.0)*real(psi*conj(psi));
00138 }
00139 }
00140 psisquared*=RelativisticCorrection(r,iq);
00141 return psisquared;
00142
00143 }
00144
00145 #endif