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();
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
virtual void Configure(const Registry &config)
const Algorithm * SubAlg(const RgKey ®istry_key) const
Born level nu-electron cross section.
Initial State information.
const Target & Tgt(void) const
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
const ProcessInfo & ProcInfo(void) const
static string AsString(KinePhaseSpace_t kps)
Generated/set kinematical variables for an event.
double GetKV(KineVar_t kv) const
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator
virtual ~PhotonCOHPXSec()
double F2_Q(double Q, double r0) const
double Integral(const Interaction *i) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
void Configure(const Registry &config)
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsPhotonCoherent(void) const
A registry. Provides the container for algorithm configuration parameters.
bool HitNucIsSet(void) const
Cross Section Integrator Interface.
static const double kTauMass
static const double kMuonMass
static const double kElectronMass
static const double kNeutronMass
static const double kProtonMass
static constexpr double fermi
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EKinePhaseSpace KinePhaseSpace_t
const UInt_t kISkipProcessChk
if set, skip process validity checks
const UInt_t kIAssumeFreeNucleon