16#include <Math/Integrator.h>
57 const InitialState & init_state = interaction -> InitState();
62 const int nu_pdg = init_state.
ProbePdg();
66 const unsigned int Z = target.
Z();
69 unsigned short nu_i = 3;
70 if(
pdg::IsNuE( TMath::Abs( nu_pdg ) ) ) nu_i = 0;
71 else if (
pdg::IsNuMu( TMath::Abs( nu_pdg ) ) ) nu_i = 1;
72 else if (
pdg::IsNuTau( TMath::Abs( nu_pdg ) ) ) nu_i = 2;
76 const double M = target.
Mass();
78 const double FF =
fFF->FormFactor(Q2, target);
79 const double TT = TE - M;
82 const double E2 = E * E;
83 const double Z2 = Z * Z;
84 const double FF2 = FF * FF;
85 const double TTDiff = TT - M;
90 const double num_fact1 = FF2 * Z2;
91 const double num_fact21 =
fDNuMass2 * (TTDiff - 2.*E);
92 const double num_fact22 = 2. * M * (2.*E2 - 2.*TT*E + TT*TTDiff);
93 const double den_fact1 = 1. / (E2);
94 const double den_fact2 = TMath::Power((
fDMediatorMass2 + 2.*TT*M), -2.);
97 const double xsec = const_factor * model_params * num_fact1 *
98 (num_fact21 + num_fact22) * den_fact1 * den_fact2;
122 const Target & target = init_state.
Tgt();
123 if( ! target.
IsNucleus() )
return false ;
138 const double tl = DNu.E()*(M+E) - E*M - 0.5*
fDNuMass2;
139 const double tr = E * DNu.P();
141 if(tl < -1.*tr)
return false;
142 if(tl > tr)
return false;
163 bool good_configuration = true ;
165 double DKineticMixing = 0.;
166 this->
GetParam(
"Dark-KineticMixing", DKineticMixing);
167 fEps2 = DKineticMixing * DKineticMixing;
169 bool force_unitarity = false ;
170 GetParam(
"Dark-Mixing-ForceUnitarity", force_unitarity ) ;
172 unsigned int n_min_mixing = force_unitarity ? 3 : 4 ;
174 std::vector<double> DMixing2s;
178 if ( DMixing2s.size () < n_min_mixing ) {
179 good_configuration = false ;
181 <<
"Not enough mixing elements specified, only specified "
182 << DMixing2s.size() <<
" / " << n_min_mixing ;
186 for(
unsigned int i = 0; i < n_min_mixing ; ++i ) {
187 if ( DMixing2s[i] < 0. ) {
188 good_configuration = false ;
190 <<
"Mixing " << i <<
" non positive: " << DMixing2s[i] ;
196 if ( force_unitarity ) {
199 if ( DMixing2s[3] < 0. ) {
200 good_configuration = false ;
202 <<
"Mixing D4 non positive: " << DMixing2s[3] ;
221 if ( ! good_configuration ) {
222 LOG(
"BertuzzoDNuCOH",
pFATAL ) <<
"Wrong configuration. Exiting" ;
#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.
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
int GetParamVect(const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
Handle to load vectors of parameters.
virtual void Configure(const Registry &config)
const Algorithm * SubAlg(const RgKey ®istry_key) const
bool ValidProcess(const Interaction *i) const override
Can this cross section algorithm handle the input process?
const EngelFormFactor * fFF
Engel Form Factor algorithm.
double XSec(const Interaction *i, KinePhaseSpace_t k) const override
Compute the cross section for the input interaction.
void Configure(const Registry &config) override
const XSecIntegratorI * fXSecIntegrator
cross section integrator
double Integral(const Interaction *i) const override
virtual ~BertuzzoDNuCOHPXSec()
std::array< double, 4 > fMixing2s
bool ValidKinematics(const Interaction *i) const override
Is the input kinematical point a physically allowed one?
Initial State information.
const Target & Tgt(void) const
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
const Kinematics & Kine(void) const
const ProcessInfo & ProcInfo(void) const
const KPhaseSpace & PhaseSpace(void) const
const InitialState & InitState(void) const
bool IsAboveThreshold(void) const
Checks whether the interaction is above the energy threshold.
Generated/set kinematical variables for an event.
const TLorentzVector & FSLeptonP4(void) const
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsCoherentElastic(void) const
bool IsDarkNeutralCurrent(void) const
A registry. Provides the container for algorithm configuration parameters.
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
bool IsNucleus(void) const
Cross Section Integrator Interface.
bool IsNeutrino(int pdgc)
Simple functions for loading and reading nucleus dependent keys from config files.
Root of GENIE utility namespaces.
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EKinePhaseSpace KinePhaseSpace_t
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
const UInt_t kISkipProcessChk
if set, skip process validity checks