GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
genie::alvarezruso::AREikonalSolution Class Reference

Eikonal wavefunction solution for Alvarez-Ruso Coherent Pion Production xsec. More...

#include <AREikonalSolution.h>

Inheritance diagram for genie::alvarezruso::AREikonalSolution:
Inheritance graph
[legend]
Collaboration diagram for genie::alvarezruso::AREikonalSolution:
Collaboration graph
[legend]

Public Member Functions

 AREikonalSolution (bool debug, AlvarezRusoCOHPiPDXSec *parent)
 
 AREikonalSolution (bool debug, ARSampledNucleus *nucl)
 
virtual ~AREikonalSolution ()
 
virtual std::complex< double > Element (const double radius, const double cosine_rz, const double e_pion)
 
void Solve ()
 
- Public Member Functions inherited from genie::alvarezruso::ARWFSolution
 ARWFSolution (bool debug=false)
 
virtual ~ARWFSolution ()
 

Private Member Functions

AlvarezRusoCOHPiPDXSecParent ()
 
ARSampledNucleusNucleus ()
 
ARConstantsCon ()
 
std::complex< double > PionSelfEnergy (const double rhop_cent, const double rhon_cent, const double omepi, const double ppim)
 
void Deltamed (const double sdel, const double pf, const double rat, double &gamdpb, double &imsig, const double ppim, const double omepi)
 
double Cc (const double a, const double b, const double c, const double ome)
 
double Gamd (const double s)
 
double Qcm (const double s)
 

Private Attributes

AlvarezRusoCOHPiPDXSecparent_
 
ARSampledNucleusfNucleus
 
ARConstantsconstants_
 
bool owns_constants
 

Additional Inherited Members

- Public Attributes inherited from genie::alvarezruso::ARWFSolution
bool debug_
 

Detailed Description

Eikonal wavefunction solution for Alvarez-Ruso Coherent Pion Production xsec.

References:
Author
Steve Dennis University of Warwick, Rutherford Appleton Laboratory
Created:
05/12/2013
License:
Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org

Definition at line 34 of file AREikonalSolution.h.

Constructor & Destructor Documentation

genie::alvarezruso::AREikonalSolution::AREikonalSolution ( bool  debug,
AlvarezRusoCOHPiPDXSec parent 
)

Definition at line 255 of file AREikonalSolution.cxx.

References constants_, genie::alvarezruso::ARWFSolution::debug_, fNucleus, genie::alvarezruso::AlvarezRusoCOHPiPDXSec::GetConstants(), genie::alvarezruso::AlvarezRusoCOHPiPDXSec::GetNucleus(), owns_constants, and Parent().

255  : ARWFSolution(debug), parent_(parent)
256 {
257  if( debug_ ) std::cerr << "AREikonalSolution::AREikonalSolution" << std::endl;
258  this->fNucleus = &(this->Parent()->GetNucleus());
259  this->constants_ = &(this->Parent()->GetConstants());
260  owns_constants = false;
261 }
AlvarezRusoCOHPiPDXSec * Parent()
genie::alvarezruso::AREikonalSolution::AREikonalSolution ( bool  debug,
ARSampledNucleus nucl 
)

Definition at line 263 of file AREikonalSolution.cxx.

References constants_, genie::alvarezruso::ARWFSolution::debug_, and owns_constants.

263  : ARWFSolution(debug), fNucleus(nucl)
264 {
265  if( debug_ ) std::cerr << "AREikonalSolution::AREikonalSolution" << std::endl;
266  this->constants_ = new ARConstants();
267  owns_constants = true;
268 }
genie::alvarezruso::AREikonalSolution::~AREikonalSolution ( )
virtual

Definition at line 270 of file AREikonalSolution.cxx.

References constants_, and owns_constants.

Member Function Documentation

double genie::alvarezruso::AREikonalSolution::Cc ( const double  a,
const double  b,
const double  c,
const double  ome 
)
private

Definition at line 219 of file AREikonalSolution.cxx.

References genie::alvarezruso::AlvarezRusoCOHPiPDXSec::GetPiMass(), and Parent().

Referenced by Deltamed().

220 {
221  double mpi = this->Parent()->GetPiMass();
222  const double x = ome / mpi - 1.0;
223  return (a*x*x + b*x + c);
224 }
static constexpr double b
Definition: Units.h:78
const double a
AlvarezRusoCOHPiPDXSec * Parent()
ARConstants* genie::alvarezruso::AREikonalSolution::Con ( )
inlineprivate

Definition at line 50 of file AREikonalSolution.h.

References constants_.

Referenced by Deltamed(), Element(), Gamd(), PionSelfEnergy(), and Qcm().

50 { return this->constants_; }
void genie::alvarezruso::AREikonalSolution::Deltamed ( const double  sdel,
const double  pf,
const double  rat,
double &  gamdpb,
double &  imsig,
const double  ppim,
const double  omepi 
)
private

Definition at line 137 of file AREikonalSolution.cxx.

References Cc(), Con(), Gamd(), genie::alvarezruso::AlvarezRusoCOHPiPDXSec::GetPiMass(), genie::alvarezruso::ARConstants::HBar(), genie::alvarezruso::ARConstants::NucleonMass(), Parent(), and Qcm().

Referenced by PionSelfEnergy().

138 {
139  unsigned int iapr = 1; // approximation chosen to calculate gamdpb
140 
141  // Calculation of the pauli-blocked width
142  double gamdfree = this->Gamd(sdel);
143 
144  if( gamdfree == 0.0)
145  {
146  gamdpb = 0.0;
147  }
148  else
149  {
150  double f;
151  if( iapr == 1 )
152  {
153  // Approximation from Nieves et al. NPA 554(93)554
154  const double r = this->Qcm(sdel) / pf;
155  if( r > 1.0 )
156  {
157  // f=1.+(-2./5./r**2+9./35./r**4-2./21./r**6)
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) );
159  }
160  else
161  {
162  //f=34./35.*r-22./105*r**3
163  f = 34.0 / 35.0 * r - 22.0 / 105 * (r*r*r);
164  }
165  }
166  else
167  {
168  //Approximation from Garcia-Recio, NPA 526(91)685
169 
170  const double mn = this->Con()->NucleonMass();
171  const double wd = TMath::Sqrt(sdel); // Delta inv. mass
172  const double ef = TMath::Sqrt(mn*mn + pf*pf); // Fermi energy
173  const double kd = ppim; // modulus of the Delta 3-momentum in Lab.
174  const double pn = this->Qcm(sdel); // nucleon(and pion) momentum in C.M.
175  const double en = TMath::Sqrt(mn*mn + pn*pn);
176 
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;
180  }
181  gamdpb = gamdfree * f;
182  }
183 
184  //Calculation of the delta selfenergy
185 
186  // Imaginary part: using Oset, Salcedo, NPA 468(87)631
187  // Using eq. (3.5) to relate the energy of the delta with the pion energy used
188  // in the parametrization
189 
190  // Prescriptions for the effective pion energy
191  // nucleon at rest
192  // ! ome=p(0)-mn
193  // ! ome=(sdel-mn**2-mpi**2)/2./mn
194  // nucleon with an average momentum
195  // ! ekp=3./5.*pf**2/2./mn
196  // ! ome=p(0)-mn-ekp
197  // ! ome=(sdel-mn**2-mpi**2-ekp**2)/2./(mn+ekp)
198  double ome = omepi;
199  double mpi = this->Parent()->GetPiMass();
200 
201  // The parameterization is valid for 85 MeV < tpi < 315. outside we take a contant values
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;
205 
206  // The parameterization of Oset, Salcedo, with ca3 extrapolated to zero at low kin. energies
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);
214 
215  imsig = - ( cq*TMath::Power(rat,alpha) + ca2*TMath::Power(rat, beta) + ca3*TMath::Power(rat,gamma) );
216 }
double Cc(const double a, const double b, const double c, const double ome)
AlvarezRusoCOHPiPDXSec * Parent()
cdouble genie::alvarezruso::AREikonalSolution::Element ( const double  radius,
const double  cosine_rz,
const double  e_pion 
)
virtual

Implements genie::alvarezruso::ARWFSolution.

Definition at line 25 of file AREikonalSolution.cxx.

References genie::alvarezruso::ARSampledNucleus::A(), genie::units::A, genie::alvarezruso::ARSampledNucleus::CalcNumberDensity(), Con(), fNucleus, genie::alvarezruso::AlvarezRusoCOHPiPDXSec::GetPiMass(), genie::alvarezruso::ARConstants::HBar(), Nucleus(), Parent(), PionSelfEnergy(), genie::alvarezruso::ARConstants::PiPMass(), genie::alvarezruso::ARSampledNucleus::RadiusMax(), genie::alvarezruso::integrationtools::RGN1D(), genie::alvarezruso::integrationtools::SGNR(), and genie::alvarezruso::ARSampledNucleus::Z().

27 {
28 
29  const double mpik = this->Parent()->GetPiMass();
30  const double mpi = this->Con()->PiPMass();
31  const double hb = this->Con()->HBar() * 1000.0;
32 
33  const double r = (radius);
34 
35  const double ekin = (e_pion - mpik) * hb;
36 
37  const double cosa = cosine_rz;
38 
39  const double rmax = this->Nucleus()->RadiusMax();
40 
41  const unsigned int nz = 1;
42 
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();
48 
49  double absiz[sampling];
50  double decoy[sampling];
51 
52  unsigned int junk;
53 
54  integrationtools::SGNR(za, rmax, nz, sampling, absiz, junk, decoy);
55 
56  //do i=1,nzs
57 // cdouble ordez[sampling];
58  cdouble * ordez = new cdouble[sampling]; // CA
59  double zp, rp;
60  cdouble piself;
61 
62  unsigned int A = fNucleus->A();
63  unsigned int Z = fNucleus->Z();
64 
65  for(unsigned int i = 0; i != sampling; ++i)
66  {
67  // Sample point in nucleus
68  zp = absiz[i];
69 
70  // Radius in nucleus
71  rp = TMath::Sqrt( be*be + zp*zp );
72 
73  // Get nuclear densities
74  double dens_cent = fNucleus->CalcNumberDensity(rp);
75  double dens_p_cent = dens_cent * Z / A ;
76  double dens_n_cent = dens_cent * (A-Z)/A;
77 
78  // Calculate pion self energy
79  piself = this->PionSelfEnergy(dens_p_cent, dens_n_cent, omepi, ppim);
80 
81  // Optical potential at each point in the nucleus
82  ordez[i] = piself / 2.0 / ppim;
83 
84  }
85 
86  //Integrate the optical potential through the nucleus
87  cdouble resu = integrationtools::RGN1D(za, rmax, nz, sampling, ordez);
88 
89  // Eikonal approximation to the wave function
90  cdouble uwaveik = exp( - cdouble(0,1) * ( ppim*za + resu ) );
91 
92  delete [] ordez; // CA
93 
94  return uwaveik;
95 }
std::complex< double > cdouble
std::complex< double > PionSelfEnergy(const double rhop_cent, const double rhon_cent, const double omepi, const double ppim)
static constexpr double A
Definition: Units.h:74
std::complex< double > cdouble
AlvarezRusoCOHPiPDXSec * Parent()
double CalcNumberDensity(double r) const
std::complex< double > RGN1D(const double A, const double B, const unsigned int N, const unsigned int nsamp, const std::complex< double > CF[])
void SGNR(const double a, const double b, const unsigned int n, const unsigned int nsamp, double *x, unsigned int &np, double *w)
double genie::alvarezruso::AREikonalSolution::Gamd ( const double  s)
private

Definition at line 227 of file AREikonalSolution.cxx.

References Con(), genie::alvarezruso::ARConstants::DeltaNCoupling(), genie::constants::kPi, genie::alvarezruso::ARConstants::NucleonMass(), genie::alvarezruso::ARConstants::PiPMass(), and Qcm().

Referenced by Deltamed().

228 {
229  // Delta -> N pi
230  const double mpi = this->Con()->PiPMass();
231  const double mn = this->Con()->NucleonMass();
232  if( s <= (mn+mpi)*(mn+mpi) )
233  {
234  return 0.0;
235  }
236  else
237  {
238  double fs_mpi2 = this->Con()->DeltaNCoupling()/mpi;
239  fs_mpi2 *= fs_mpi2;
240  const double qcm = this->Qcm(s);
241  return 1.0 / (6.0*constants::kPi)*fs_mpi2*mn*(qcm*qcm*qcm)/TMath::Sqrt(s);
242  }
243 }
static constexpr double s
Definition: Units.h:95
ARSampledNucleus* genie::alvarezruso::AREikonalSolution::Nucleus ( )
inlineprivate

Definition at line 49 of file AREikonalSolution.h.

References fNucleus.

Referenced by Element().

49 { return fNucleus; }
AlvarezRusoCOHPiPDXSec* genie::alvarezruso::AREikonalSolution::Parent ( )
inlineprivate

Definition at line 48 of file AREikonalSolution.h.

References parent_.

Referenced by AREikonalSolution(), Cc(), Deltamed(), and Element().

48 { return this->parent_; }
cdouble genie::alvarezruso::AREikonalSolution::PionSelfEnergy ( const double  rhop_cent,
const double  rhon_cent,
const double  omepi,
const double  ppim 
)
private

Definition at line 98 of file AREikonalSolution.cxx.

References Con(), Deltamed(), genie::alvarezruso::ARConstants::DeltaNCoupling(), genie::alvarezruso::ARConstants::DeltaPMass(), genie::units::fs, genie::alvarezruso::ARConstants::HBar(), genie::constants::kPi, genie::alvarezruso::ARConstants::NucleonMass(), genie::alvarezruso::ARConstants::PiPMass(), and genie::alvarezruso::ARConstants::Rho0().

Referenced by Element().

99 {
100  const double rho0 = this->Con()->Rho0();
101  const double mn = this->Con()->NucleonMass();
102  const double hb = this->Con()->HBar() * 1000.0;
103  const double pi = constants::kPi;
104  const double fs = this->Con()->DeltaNCoupling();
105  const double mdel = this->Con()->DeltaPMass();
106  const double mpi = this->Con()->PiPMass();
107  const double fs_mpi2 = fs*fs/(mpi*mpi);
108 
109 
110  const cdouble ui(0,1);
111 
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) );
116 
117  const double sdel = mn*mn + mpi*mpi + 2.*omepi*(mn+3./5.*pf*pf/2./mn);
118  const double sqsdel = TMath::Sqrt(sdel);
119 
120  double gamdpb, imsig;
121  this->Deltamed(sdel, pf, rat, gamdpb, imsig, ppim, omepi);
122 
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) );
128 
129  const cdouble efe = 4.*pi*mn*mn/sdel*pe/(1.+4.*pi*0.63*pe);
130 
131  const cdouble piself = -1.0*efe*(1.-1./2.*omepi/mn)*ppim*ppim/(1.+efe*(1.-1./2.*omepi/mn));
132 
133  return piself;
134 }
static constexpr double fs
Definition: Units.h:100
std::complex< double > cdouble
void Deltamed(const double sdel, const double pf, const double rat, double &gamdpb, double &imsig, const double ppim, const double omepi)
double genie::alvarezruso::AREikonalSolution::Qcm ( const double  s)
private

Definition at line 246 of file AREikonalSolution.cxx.

References Con(), genie::alvarezruso::ARConstants::NucleonMass(), and genie::alvarezruso::ARConstants::PiPMass().

Referenced by Deltamed(), and Gamd().

247 {
248  // Returns the 3-momentum of the pion formed after the decay of a
249  // resonance (R->N pi) of inv. mass s in the rest frame of the resonance
250  const double mpi = this->Con()->PiPMass();;
251  const double mn = this->Con()->NucleonMass();
252  return TMath::Sqrt((s-mpi*mpi-mn*mn)*(s-mpi*mpi-mn*mn) - 4.*mpi*mpi*mn*mn)/2.0/TMath::Sqrt(s);
253 }
static constexpr double s
Definition: Units.h:95
void genie::alvarezruso::AREikonalSolution::Solve ( )
virtual

Implements genie::alvarezruso::ARWFSolution.

Definition at line 274 of file AREikonalSolution.cxx.

275 {
276  if(false) std::cout << "Hi!" << std::endl;
277 }

Member Data Documentation

ARConstants* genie::alvarezruso::AREikonalSolution::constants_
private

Definition at line 62 of file AREikonalSolution.h.

Referenced by AREikonalSolution(), Con(), and ~AREikonalSolution().

ARSampledNucleus* genie::alvarezruso::AREikonalSolution::fNucleus
private

Definition at line 61 of file AREikonalSolution.h.

Referenced by AREikonalSolution(), Element(), and Nucleus().

bool genie::alvarezruso::AREikonalSolution::owns_constants
private

Definition at line 64 of file AREikonalSolution.h.

Referenced by AREikonalSolution(), and ~AREikonalSolution().

AlvarezRusoCOHPiPDXSec* genie::alvarezruso::AREikonalSolution::parent_
private

Definition at line 60 of file AREikonalSolution.h.

Referenced by Parent().


The documentation for this class was generated from the following files: