21 using namespace genie;
 
   22 using namespace genie::constants;
 
   51   const InitialState & init_state = interaction -> InitState();
 
   52   const Kinematics &   kinematics = interaction -> Kine();
 
   54   int probepdg = init_state.
ProbePdg();
 
   61   double mlout2 = mlout*mlout;
 
   63   int A        = init_state.
Tgt().
A(); 
 
   64   int Z        = init_state.
Tgt().
Z(); 
 
   71   double mL = mlout+
kMw;
 
   73   double Delta = TMath::Power(2.*E*Mtgt-mL*mL,2)-4.*TMath::Power(Mtgt*mL,2);
 
   74   if (Delta<0) 
return 0.;
 
   76   double s12_min = E/(2.*E+Mtgt)*(mL*mL+2.*E*Mtgt-TMath::Sqrt(Delta));
 
   77   double s12_max = E/(2.*E+Mtgt)*(mL*mL+2.*E*Mtgt+TMath::Sqrt(Delta));
 
   78   double s12 = TMath::Exp( TMath::Log(s12_min)+(TMath::Log(s12_max)-TMath::Log(s12_min))*n2);
 
   80   double Q2_min = TMath::Power(s12,2)*Mtgt/2./E/(2.*E*Mtgt-s12);
 
   81   double Q2_max = s12 - mL*mL;
 
   82   double Q2 = TMath::Exp( TMath::Log(Q2_min) + (TMath::Log(Q2_max)-TMath::Log(Q2_min))*n3 );
 
   85   double s13 = s12/2.*((1.+
kMw2/s-mlout2/
s)-TMath::Sqrt(
born->
Lambda(1.,
kMw2/s,mlout2/s))*n1);
 
   87   double ME_T = 
born->
PXSecPhoton_T(s12,s13,Q2,mlout2) * (1.-s12/2./E/Mtgt-TMath::Power(s12/2./E,2)/
Q2);
 
   88   double ME_L = 
born->
PXSecPhoton_L(s12,s13,Q2,mlout2) * TMath::Power(1.-s12/4./E/Mtgt,2);
 
   90   double ME   = ME_T+ME_L;
 
   91   double dps2 = 1/32./
kPi2/s12 * TMath::Sqrt( 
born->
Lambda(1.,
kMw2/s,mlout2/s) ) * (TMath::Log(Q2_max)-TMath::Log(Q2_min)) * (TMath::Log(s12_max)-TMath::Log(s12_min));    
 
   92   double dP   = 
born->
GetReAlpha()*TMath::Power(Z,2)*
F2_Q( TMath::Sqrt(Q2), 
r0*TMath::Power(A,1./3.) );
 
   94   double xsec = ME * dps2 * dP;
 
   98           << 
"Doesn't support transformation from " 
  107   LOG(
"PhotonCOHPXSec", 
pINFO) << 
"dxsec/dn1dn2dn3 (E= " << E << 
", n1= " << n1 << 
", n2=" << n2 << 
", n3=" << n3 << 
") = " << xsec;
 
  116   double coth = 1./TMath::TanH(
kPi*Q*
a);
 
  117   FF = 3.*
kPi*a/(TMath::Power(r0,2)+TMath::Power(
kPi*a,2)) / (Q*r0* TMath::SinH(
kPi*Q*a));
 
  118   FF *= (
kPi*a*coth*TMath::Sin(Q*r0) - r0 * TMath::Cos(Q*r0));        
 
  119   return TMath::Power(FF,2);
 
  135   const InitialState & init_state = interaction -> InitState();
 
Cross Section Calculation Interface. 
Cross Section Integrator Interface. 
double Q2(const Interaction *const i)
double PXSecPhoton_T(double s12, double s13, double Q2, double ml2)
double Integral(const Interaction *i) const 
static constexpr double s
Generated/set kinematical variables for an event. 
enum genie::EKinePhaseSpace KinePhaseSpace_t
static const double kElectronMass
static const double kTauMass
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator 
Summary information for an interaction. 
virtual ~PhotonCOHPXSec()
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double A
static string AsString(KinePhaseSpace_t kps)
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
double Lambda(double a, double b, double c)
virtual void Configure(const Registry &config)
static const double kNeutronMass
double PXSecPhoton_L(double s12, double s13, double Q2, double ml2)
double GetKV(KineVar_t kv) const 
bool IsPhotonCoherent(void) const 
double XSec(const Interaction *i, KinePhaseSpace_t k) const 
Compute the cross section for the input interaction. 
bool ValidProcess(const Interaction *i) const 
Can this cross section algorithm handle the input process? 
Born level nu-electron cross section. 
static const double kMuonMass
bool HitNucIsSet(void) const 
A registry. Provides the container for algorithm configuration parameters. 
void Configure(const Registry &config)
const UInt_t kIAssumeFreeNucleon
static constexpr double fermi
const ProcessInfo & ProcInfo(void) const 
const Target & Tgt(void) const 
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double ProbeE(RefFrame_t rf) const 
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
static const double kProtonMass
double F2_Q(double Q, double r0) const 
const UInt_t kISkipProcessChk
if set, skip process validity checks 
Initial State information. 
const Algorithm * SubAlg(const RgKey ®istry_key) const