00001 #ifndef __CWAVEFUNCTION_WF_GENERIC_CC__ 00002 #define __CWAVEFUNCTION_WF_GENERIC_CC__ 00003 #include "wavefunction.h" 00004 00005 CWaveFunction_generic::CWaveFunction_generic( 00006 string parsfilename, 00007 int q1q2set,double m1set, 00008 double m2set, 00009 double symmweightset): CWaveFunction(){ 00010 generic=1; 00011 ParsInit(parsfilename); 00012 m1=m1set; 00013 m2=m2set; 00014 muscale=m1*m2/(m1+m2); 00015 mu=muscale; 00016 symmweight=symmweightset; 00017 q1q2scale=q1q2set; 00018 q1q2=q1q2scale; 00019 nchannels=0; 00020 ellmax=0; 00021 InitArrays(); 00022 InitWaves(); 00023 printf("initialization finished\n"); 00024 } 00025 00026 void CWaveFunction_generic::reset(int q1q2set,double m1set,double m2set, 00027 double symmweightset){ 00028 m1=m1set; 00029 m2=m2set; 00030 mu=m1*m2/(m1+m2); 00031 if(q1q2*q1q2set<0){ 00032 printf("Illegal: Trying to reset q1q2 to opposite charge\n"); 00033 exit(1); 00034 } 00035 q1q2=q1q2set; 00036 symmweight=symmweightset; 00037 } 00038 00039 double CWaveFunction_generic::CalcPsiSquared(int iq,double r,double ctheta){ 00040 double psisquared,asymmweight; 00041 complex<double> psi1,psi2,psisymm,psiasymm; 00042 const double ROOT2=sqrt(2.0); 00043 00044 if(iq>=nqmax){ 00045 printf("iq too large!\n"); 00046 psisquared=1.0; 00047 } 00048 else{ 00049 psi1=planewave[iq]->planewave(r,ctheta); 00050 psi2=conj(psi1); 00051 00052 asymmweight=1.0-symmweight; 00053 psisymm=(psi1+psi2)/ROOT2; 00054 psiasymm=(psi1-psi2)/ROOT2; 00055 00056 psisquared=symmweight*real(psisymm*conj(psisymm)) 00057 +asymmweight*real(psiasymm*conj(psiasymm)); 00058 } 00059 if(q1q2!=0) psisquared*=RelativisticCorrection(r,iq); 00060 return psisquared; 00061 00062 } 00063 00064 #endif