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