23 namespace alvarezruso {
31 const double hb = this->
Con()->
HBar() * 1000.0;
33 const double r = (radius);
35 const double ekin = (e_pion - mpik) * hb;
37 const double cosa = cosine_rz;
41 const unsigned int nz = 1;
43 const double za = r * cosa;
44 const double be = r * TMath::Sqrt(1.0 - cosa*cosa);
45 const double omepi = ekin / hb + mpi;
46 const double ppim = TMath::Sqrt(omepi*omepi - mpi*mpi);
47 unsigned int sampling = (this->
Nucleus())->GetSampling();
49 double absiz[sampling];
50 double decoy[sampling];
65 for(
unsigned int i = 0; i != sampling; ++i)
71 rp = TMath::Sqrt( be*be + zp*zp );
75 double dens_p_cent = dens_cent * Z /
A ;
76 double dens_n_cent = dens_cent * (A-Z)/A;
79 piself = this->
PionSelfEnergy(dens_p_cent, dens_n_cent, omepi, ppim);
82 ordez[i] = piself / 2.0 / ppim;
100 const double rho0 = this->
Con()->
Rho0();
102 const double hb = this->
Con()->
HBar() * 1000.0;
107 const double fs_mpi2 = fs*fs/(mpi*mpi);
112 const double resig = -53.0/hb;
113 const double rho = rhop_cent + rhon_cent;
114 const double rat = rho / rho0;
115 const double pf = TMath::Power( (3.*pi*pi/2.*rho), (1.0/3.0) );
117 const double sdel = mn*mn + mpi*mpi + 2.*omepi*(mn+3./5.*pf*pf/2./mn);
118 const double sqsdel = TMath::Sqrt(sdel);
120 double gamdpb, imsig;
121 this->
Deltamed(sdel, pf, rat, gamdpb, imsig, ppim, omepi);
123 const cdouble pe = -1./6./pi*fs_mpi2*
124 ( rhop_cent/(sqsdel-mdel-resig*(2.*rhon_cent/rho0)+ui*(gamdpb/2.-imsig)) +
125 1./3.*rhon_cent/(sqsdel-mdel-resig*2./3.*(2.*rhon_cent+rhop_cent)/rho0+ui*(gamdpb/2.-imsig)) +
126 rhon_cent/(-sqsdel-mdel+2.*mn-resig*(2.*rhop_cent/rho0))+
127 1./3.*rhop_cent/(-sqsdel-mdel+2.*mn-resig*2./3.*(2.*rhop_cent+rhon_cent)/rho0) );
129 const cdouble efe = 4.*pi*mn*mn/sdel*pe/(1.+4.*pi*0.63*pe);
131 const cdouble piself = -1.0*efe*(1.-1./2.*omepi/mn)*ppim*ppim/(1.+efe*(1.-1./2.*omepi/mn));
137 void AREikonalSolution::Deltamed(
const double sdel,
const double pf,
const double rat,
double& gamdpb,
double& imsig,
const double ppim,
const double omepi)
139 unsigned int iapr = 1;
142 double gamdfree = this->
Gamd(sdel);
154 const double r = this->
Qcm(sdel) / pf;
158 f = 1.0 + ( -2.0 / 5.0 / (r*r) + 9.0 / 35.0 / (r*r*r*r) - 2.0 / 21.0 / (r*r*r*r*r*r) );
163 f = 34.0 / 35.0 * r - 22.0 / 105 * (r*r*r);
171 const double wd = TMath::Sqrt(sdel);
172 const double ef = TMath::Sqrt(mn*mn + pf*pf);
173 const double kd = ppim;
174 const double pn = this->
Qcm(sdel);
175 const double en = TMath::Sqrt(mn*mn + pn*pn);
177 f = ( kd * pn + TMath::Sqrt(sdel+kd*kd) * en - ef * wd ) / (2.0 * kd * pn);
178 if (f < 0.0) f = 0.0;
179 if (f > 1.0) f = 1.0;
181 gamdpb = gamdfree * f;
202 const double hb = this->
Con()->
HBar() * 1000.0;
203 if( ome <= (mpi + 85.0 / hb) ) ome = mpi + 85.0 / hb;
204 if( ome >= (mpi + 315.0 / hb) ) ome = mpi + 315.0 / hb;
207 const double cq = this->
Cc(-5.19,15.35,2.06,ome)/hb;
208 const double ca2 = this->
Cc(1.06,-6.64,22.66,ome)/hb;
209 double ca3 = this->
Cc(-13.46,46.17,-20.34,ome)/hb;
210 const double alpha= this->
Cc(0.382,-1.322,1.466,ome);
211 const double beta = this->
Cc(-0.038,0.204,0.613,ome);
212 const double gamma=2.*beta;
213 if( ome <= (mpi + 85.0/hb) ) ca3 = this->
Cc(-13.46,46.17,-20.34,(mpi+85./hb))/85.*(ome-mpi);
215 imsig = - ( cq*TMath::Power(rat,alpha) + ca2*TMath::Power(rat, beta) + ca3*TMath::Power(rat,gamma) );
222 const double x = ome / mpi - 1.0;
223 return (a*x*x + b*x + c);
232 if( s <= (mn+mpi)*(mn+mpi) )
240 const double qcm = this->
Qcm(s);
241 return 1.0 / (6.0*
constants::kPi)*fs_mpi2*mn*(qcm*qcm*qcm)/TMath::Sqrt(s);
252 return TMath::Sqrt((s-mpi*mpi-mn*mn)*(s-mpi*mpi-mn*mn) - 4.*mpi*mpi*mn*mn)/2.0/TMath::Sqrt(s);
257 if(
debug_ ) std::cerr <<
"AREikonalSolution::AREikonalSolution" << std::endl;
265 if(
debug_ ) std::cerr <<
"AREikonalSolution::AREikonalSolution" << std::endl;
276 if(
false) std::cout <<
"Hi!" << std::endl;
AREikonalSolution(bool debug, AlvarezRusoCOHPiPDXSec *parent)
std::complex< double > cdouble
virtual ~AREikonalSolution()
std::complex< double > PionSelfEnergy(const double rhop_cent, const double rhon_cent, const double omepi, const double ppim)
static constexpr double s
static constexpr double fs
double Qcm(const double s)
ARSampledNucleus * Nucleus()
static constexpr double b
Abstract base class for Alvarez-Ruso wavefunction solution.
ARSampledNucleus * fNucleus
static constexpr double A
double Cc(const double a, const double b, const double c, const double ome)
double Gamd(const double s)
Nucleus class for Alvarez-Ruso Coherent Pion Production xsec.
AlvarezRusoCOHPiPDXSec * Parent()
ARConstants & GetConstants(void)
virtual std::complex< double > Element(const double radius, const double cosine_rz, const double e_pion)
double CalcNumberDensity(double r) const
ARSampledNucleus & GetNucleus(void)
void Deltamed(const double sdel, const double pf, const double rat, double &gamdpb, double &imsig, const double ppim, const double omepi)