31 #include "Framework/Conventions/GBuild.h"
42 using namespace genie;
43 using namespace genie::constants;
84 LOG(
"DISSF",
pDEBUG) <<
"Loading configuration...";
89 fPDF -> SetModel(pdf_model);
90 fPDFc -> SetModel(pdf_model);
123 LOG(
"DISSF",
pDEBUG) <<
"Done loading configuration";
149 int probe_pdgc = init_state.
ProbePdg();
156 if ( !is_dm && !is_dmb )
return;
157 if ( !is_p && !is_n )
return;
158 if ( tgt.
N() == 0 && is_n )
return;
159 if ( tgt.
Z() == 0 && is_p )
return;
164 double switch_uv = 1.;
165 double switch_us = 1.;
166 double switch_ubar = 1.;
167 double switch_dv = 1.;
168 double switch_ds = 1.;
169 double switch_dbar = 1.;
170 double switch_s = 1.;
171 double switch_sbar = 1.;
172 double switch_c = 1.;
173 double switch_cbar = 1.;
200 if (!sea && is_u ) { switch_uv = 1; }
201 else if ( sea && is_u ) { switch_us = 1; }
202 else if ( sea && is_ubar) { switch_ubar = 1; }
203 else if (!sea && is_d ) { switch_dv = 1; }
204 else if ( sea && is_d ) { switch_ds = 1; }
205 else if ( sea && is_dbar) { switch_dbar = 1; }
206 else if ( sea && is_s ) { switch_s = 1; }
207 else if ( sea && is_sbar) { switch_sbar = 1; }
208 else if ( sea && is_c ) { switch_c = 1; }
209 else if ( sea && is_cbar) { switch_cbar = 1; }
223 double F2val=0, xF3val=0;
228 if(!is_dm && !is_dmb)
return;
238 double gvu2 = TMath::Power(gvu, 2.);
239 double gau2 = TMath::Power(gau, 2.);
240 double gvc2 = TMath::Power(gvc, 2.);
241 double gac2 = TMath::Power(gac, 2.);
242 double gvd2 = TMath::Power(gvd, 2.);
243 double gad2 = TMath::Power(gad, 2.);
244 double gvs2 = TMath::Power(gvs, 2.);
245 double gas2 = TMath::Power(gas, 2.);
247 double q2 = 4.0 * ((switch_uv *
fuv + switch_us *
fus) * (gvu2+gau2) + switch_c *
fc * (gvc2+gac2) +
248 (switch_dv *
fdv + switch_ds *
fds) * (gvd2+gad2) + switch_s *
fs * (gvs2+gas2));
249 double q3 = 4.0 * ((switch_uv *
fuv + switch_us *
fus) * (2*gvu*gau) + switch_c *
fc * (2*gvc*gac) +
250 (switch_dv *
fdv + switch_ds * fds) * (2*gvd*gad) + switch_s *
fs * (2*gvs*gas));
252 double qb2 = 4.0 * (switch_ubar *
fus * (gvu2+gau2) + switch_cbar *
fc * (gvc2+gac2) +
253 switch_dbar * fds * (gvd2+gad2) + switch_sbar *
fs * (gvs2+gas2));
254 double qb3 = 4.0 * (switch_ubar *
fus * (2*gvu*gau) + switch_cbar *
fc * (2*gvc*gac) +
255 switch_dbar * fds * (2*gvd*gad) + switch_sbar *
fs * (2*gvs*gas));
257 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
258 LOG(
"DISSF",
pINFO) <<
"f2 : q = " << q2 <<
", bar{q} = " << qb2;
259 LOG(
"DISSF",
pINFO) <<
"xf3: q = " << q3 <<
", bar{q} = " << qb3;
266 double Q2val = this->
Q2 (interaction);
268 double f = this->
NuclMod (interaction);
269 double r = this->
R (interaction);
271 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
272 LOG(
"DISSF",
pDEBUG) <<
"Nucl. mod = " << f;
273 LOG(
"DISSF",
pDEBUG) <<
"R(=FL/2xF1) = " << r;
285 double bjx = kinematics.
x();
290 fF3 = f * xF3val/bjx;
302 fF3 = f * xF3val / x;
309 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
325 double Q2val = kinematics.
Q2();
333 double x = kinematics.
x();
334 double y = kinematics.
y();
336 double Q2val = 2*Mn*Ev*x*y;
339 LOG(
"DISSF",
pERROR) <<
"Could not compute Q2!";
348 return interaction->
Kine().
x();
352 double & kuv,
double & kdv,
double & kus,
double & kds)
const
384 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
385 LOG(
"DISSF",
pDEBUG) <<
"Nuclear factor for x of " << x <<
" = " << f;
405 double Q2val = this->
Q2(interaction);
420 double Q2val = this->
Q2(interaction);
427 double Q2pdf = TMath::Max(Q2val,
fQ2min);
430 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
431 LOG(
"DISSF",
pDEBUG) <<
"Calculating PDFs @ x = " << x <<
", Q2 = " << Q2pdf;
439 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
441 <<
"The event is above the charm threshold (mcharm = " <<
fMc <<
")";
444 LOG(
"DISSF",
pINFO) <<
"Charm production is turned off";
449 LOG(
"DISSF",
pINFO) <<
"Unphys. slow rescaling var: xc = " << xc;
452 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
454 <<
"Calculating PDFs @ xc (slow rescaling) = " << x <<
", Q2 = " << Q2val;
462 <<
"The event is below the charm threshold (mcharm = " <<
fMc <<
")";
471 this->
KFactors(interaction, kval_u, kval_d, ksea_u, ksea_d);
473 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
475 LOG(
"DISSF",
pDEBUG) <<
"U: Kval = " << kval_u <<
", Ksea = " << ksea_u;
476 LOG(
"DISSF",
pDEBUG) <<
"D: Kval = " << kval_d <<
", Ksea = " << ksea_d;
Pure Abstract Base Class. Defines the DISStructureFuncModelI interface to be implemented by any algor...
double fMc
charm mass used
bool HitSeaQrk(void) const
int HitNucPdg(void) const
virtual double NuclMod(const Interaction *i) const
double fQuR
Up Right Dark Matter Coupling.
int HitQrkPdg(void) const
virtual ~QPMDMDISStrucFuncBase()
virtual void KFactors(const Interaction *i, double &kuv, double &kdv, double &kus, double &kds) const
double fQdR
Down Right Dark Matter Coupling.
double fQcR
Charm Right Dark Matter Coupling.
Generated/set kinematical variables for an event.
bool IsDarkMatter(int pdgc)
double x(bool selected=false) const
virtual void CalcPDFs(const Interaction *i) const
bool IsAntiSQuark(int pdgc)
double fQsR
Strange Right Dark Matter Coupling.
Pure abstract base class. Defines the PDFModelI interface to be implemented by wrapper classes to exi...
virtual double R(const Interaction *i) const
bool IsAntiDQuark(int pdgc)
void ScaleDownValence(double kscale)
double y(bool selected=false) const
void Configure(const Registry &config)
Summary information for an interaction.
const TLorentzVector & HitNucP4(void) const
double SlowRescalingVar(double x, double Q2, double M, double mc)
const UInt_t kINoNuclearCorrection
if set, inhibit nuclear corrections
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
bool KVSet(KineVar_t kv) const
bool IsAntiDarkMatter(int pdgc)
virtual double Q2(const Interaction *i) const
bool fIncludeNuclMod
include nuclear factor (shadowing, anti-shadowing,...)?
PDF * fPDF
computed PDFs @ (x,Q2)
static constexpr double A
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool fIncludeR
include R (~FL) in DIS SF calculation?
const Kinematics & Kine(void) const
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
bool IsAboveCharmThreshold(double x, double Q2, double M, double mc)
static const double kNucleonMass2
void Calculate(double x, double q2)
bool fUse2016Corrections
Use 2016 SF relation corrections.
double fQuL
Up Left Dark Matter Coupling.
double fLowQ2CutoffF1F2
Set min for relation between 2xF1 and F2.
PDF * fPDFc
computed PDFs @ (slow-rescaling-var,Q2)
void ScaleUpValence(double kscale)
TLorentzVector * HitNucP4Ptr(void) const
bool fCharmOff
turn charm production off?
bool HitQrkIsSet(void) const
virtual void Calculate(const Interaction *interaction) const
Calculate the structure functions F1-F6 for the input interaction.
bool IsDarkMatter(void) const
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
bool IsAntiCQuark(int pdgc)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
double Q2(bool selected=false) const
bool GetParamDef(const RgKey &name, T &p, const T &def) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
virtual void InitPDF(void)
void ScaleUpSea(double kscale)
void ScaleCharm(double kscale)
double DISNuclFactor(double x, int A)
double RWhitlow(double x, double Q2)
virtual double ScalingVar(const Interaction *i) const
double fQsL
Strange Left Dark Matter Coupling.
void ScaleDownSea(double kscale)
double ProbeE(RefFrame_t rf) const
double fQ2min
min Q^2 allowed for PDFs: PDF(Q2<Q2min):=PDF(Q2min)
bool IsAntiUQuark(int pdgc)
Initial State information.
double fQdL
Down Left Dark Matter Coupling.
void ScaleStrange(double kscale)
double fQcL
Charm Left Dark Matter Coupling.
virtual void LoadConfig(void)
const Algorithm * SubAlg(const RgKey ®istry_key) const