Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
genie::QPMDMDISStrucFuncBase Class Reference

Abstract base class. Provides common implementation for concrete objects implementing the DISStructureFuncModelI interface. More...

#include <QPMDMDISStrucFuncBase.h>

Inheritance diagram for genie::QPMDMDISStrucFuncBase:
genie::DISStructureFuncModelI genie::Algorithm genie::DMBYStrucFunc

Public Member Functions

virtual ~QPMDMDISStrucFuncBase ()
 
virtual double F1 (void) const
 Get the computed structure function F1. More...
 
virtual double F2 (void) const
 Get the computed structure function F2. More...
 
virtual double F3 (void) const
 Get the computed structure function F3. More...
 
virtual double F4 (void) const
 Get the computed structure function F4. More...
 
virtual double F5 (void) const
 Get the computed structure function F5. More...
 
virtual double F6 (void) const
 Get the computed structure function F6. More...
 
virtual void Calculate (const Interaction *interaction) const
 Calculate the structure functions F1-F6 for the input interaction. More...
 
void Configure (const Registry &config)
 
void Configure (string param_set)
 
- Public Member Functions inherited from genie::DISStructureFuncModelI
virtual ~DISStructureFuncModelI ()
 
- Public Member Functions inherited from genie::Algorithm
virtual ~Algorithm ()
 
virtual void FindConfig (void)
 
virtual const RegistryGetConfig (void) const
 
RegistryGetOwnedConfig (void)
 
virtual const AlgIdId (void) const
 Get algorithm ID. More...
 
virtual AlgStatus_t GetStatus (void) const
 Get algorithm status. More...
 
virtual bool AllowReconfig (void) const
 
virtual AlgCmp_t Compare (const Algorithm *alg) const
 Compare with input algorithm. More...
 
virtual void SetId (const AlgId &id)
 Set algorithm ID. More...
 
virtual void SetId (string name, string config)
 
const AlgorithmSubAlg (const RgKey &registry_key) const
 
void AdoptConfig (void)
 
void AdoptSubstructure (void)
 
virtual void Print (ostream &stream) const
 Print algorithm info. More...
 

Protected Member Functions

 QPMDMDISStrucFuncBase ()
 
 QPMDMDISStrucFuncBase (string name)
 
 QPMDMDISStrucFuncBase (string name, string config)
 
virtual void LoadConfig (void)
 
virtual void InitPDF (void)
 
virtual double Q2 (const Interaction *i) const
 
virtual double ScalingVar (const Interaction *i) const
 
virtual void CalcPDFs (const Interaction *i) const
 
virtual double NuclMod (const Interaction *i) const
 
virtual double R (const Interaction *i) const
 
virtual void KFactors (const Interaction *i, double &kuv, double &kdv, double &kus, double &kds) const
 
- Protected Member Functions inherited from genie::DISStructureFuncModelI
 DISStructureFuncModelI ()
 
 DISStructureFuncModelI (string name)
 
 DISStructureFuncModelI (string name, string config)
 
- Protected Member Functions inherited from genie::Algorithm
 Algorithm ()
 
 Algorithm (string name)
 
 Algorithm (string name, string config)
 
void Initialize (void)
 
void DeleteConfig (void)
 
void DeleteSubstructure (void)
 
RegistryExtractLocalConfig (const Registry &in) const
 
RegistryExtractLowerConfig (const Registry &in, const string &alg_key) const
 Split an incoming configuration Registry into a block valid for the sub-algo identified by alg_key. More...
 
template<class T >
bool GetParam (const RgKey &name, T &p, bool is_top_call=true) const
 
template<class T >
bool GetParamDef (const RgKey &name, T &p, const T &def) const
 
template<class T >
int GetParamVect (const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
 Handle to load vectors of parameters. More...
 
int GetParamVectKeys (const std::string &comm_name, std::vector< RgKey > &k, bool is_top_call=true) const
 
int AddTopRegistry (Registry *rp, bool owns=true)
 add registry with top priority, also update ownership More...
 
int AddLowRegistry (Registry *rp, bool owns=true)
 add registry with lowest priority, also update ownership More...
 
int MergeTopRegistry (const Registry &r)
 
int AddTopRegisties (const vector< Registry * > &rs, bool owns=false)
 Add registries with top priority, also udated Ownerships. More...
 

Protected Attributes

double fQ2min
 min Q^2 allowed for PDFs: PDF(Q2<Q2min):=PDF(Q2min) More...
 
bool fCharmOff
 turn charm production off? More...
 
bool fIncludeR
 include R (~FL) in DIS SF calculation? More...
 
bool fIncludeNuclMod
 include nuclear factor (shadowing, anti-shadowing,...)? More...
 
double fMc
 charm mass used More...
 
double fQuL
 Up Left Dark Matter Coupling. More...
 
double fQuR
 Up Right Dark Matter Coupling. More...
 
double fQcL
 Charm Left Dark Matter Coupling. More...
 
double fQcR
 Charm Right Dark Matter Coupling. More...
 
double fQdL
 Down Left Dark Matter Coupling. More...
 
double fQdR
 Down Right Dark Matter Coupling. More...
 
double fQsL
 Strange Left Dark Matter Coupling. More...
 
double fQsR
 Strange Right Dark Matter Coupling. More...
 
bool fUse2016Corrections
 Use 2016 SF relation corrections. More...
 
double fLowQ2CutoffF1F2
 Set min for relation between 2xF1 and F2. More...
 
double fF1
 
double fF2
 
double fF3
 
double fF4
 
double fF5
 
double fF6
 
PDFfPDF
 computed PDFs @ (x,Q2) More...
 
PDFfPDFc
 computed PDFs @ (slow-rescaling-var,Q2) More...
 
double fuv
 
double fus
 
double fdv
 
double fds
 
double fs
 
double fc
 
double fuv_c
 
double fus_c
 
double fdv_c
 
double fds_c
 
double fs_c
 
double fc_c
 
- Protected Attributes inherited from genie::Algorithm
bool fAllowReconfig
 
bool fOwnsSubstruc
 true if it owns its substructure (sub-algs,...) More...
 
AlgId fID
 algorithm name and configuration set More...
 
vector< Registry * > fConfVect
 
vector< boolfOwnerships
 ownership for every registry in fConfVect More...
 
AlgStatus_t fStatus
 algorithm execution status More...
 
AlgMapfOwnedSubAlgMp
 local pool for owned sub-algs (taken out of the factory pool) More...
 

Additional Inherited Members

- Static Public Member Functions inherited from genie::Algorithm
static string BuildParamVectKey (const std::string &comm_name, unsigned int i)
 
static string BuildParamVectSizeKey (const std::string &comm_name)
 

Detailed Description

Abstract base class. Provides common implementation for concrete objects implementing the DISStructureFuncModelI interface.

For a discussion of DIS SF see for example E.A.Paschos and J.Y.Yu, Phys.Rev.D 65.033002 and R.Devenish and A.Cooper-Sarkar, OUP 2004.

Author
Costas Andreopoulos <constantinos.andreopoulos cern.ch> University of Liverpool & STFC Rutherford Appleton Laboratory

Adapted from neugen 3. Primary authors: D.Naples (Pittsburgh U.), H.Gallagher (Tufts U), CA (RAL)

May 03, 2004

Copyright (c) 2003-2020, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org

Definition at line 37 of file QPMDMDISStrucFuncBase.h.

Constructor & Destructor Documentation

QPMDMDISStrucFuncBase::~QPMDMDISStrucFuncBase ( )
virtual

Definition at line 64 of file QPMDMDISStrucFuncBase.cxx.

65 {
66  delete fPDF;
67  delete fPDFc;
68 }
PDF * fPDF
computed PDFs @ (x,Q2)
PDF * fPDFc
computed PDFs @ (slow-rescaling-var,Q2)
QPMDMDISStrucFuncBase::QPMDMDISStrucFuncBase ( )
protected

Definition at line 46 of file QPMDMDISStrucFuncBase.cxx.

QPMDMDISStrucFuncBase::QPMDMDISStrucFuncBase ( string  name)
protected

Definition at line 52 of file QPMDMDISStrucFuncBase.cxx.

52  :
54 {
55  this->InitPDF();
56 }
static QCString name
Definition: declinfo.cpp:673
QPMDMDISStrucFuncBase::QPMDMDISStrucFuncBase ( string  name,
string  config 
)
protected

Definition at line 58 of file QPMDMDISStrucFuncBase.cxx.

58  :
60 {
61  this->InitPDF();
62 }
static QCString name
Definition: declinfo.cpp:673
static Config * config
Definition: config.cpp:1054

Member Function Documentation

void QPMDMDISStrucFuncBase::CalcPDFs ( const Interaction i) const
protectedvirtual

Definition at line 412 of file QPMDMDISStrucFuncBase.cxx.

413 {
414  // Clean-up previous calculation
415  fPDF -> Reset();
416  fPDFc -> Reset();
417 
418  // Get the kinematical variables x,Q2 (could include corrections)
419  double x = this->ScalingVar(interaction);
420  double Q2val = this->Q2(interaction);
421 
422  // Get the hit nucleon mass (could be off-shell)
423  const Target & tgt = interaction->InitState().Tgt();
424  double M = tgt.HitNucP4().M();
425 
426  // Get the Q2 for which PDFs will be evaluated
427  double Q2pdf = TMath::Max(Q2val, fQ2min);
428 
429  // Compute PDFs at (x,Q2)
430 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
431  LOG("DISSF", pDEBUG) << "Calculating PDFs @ x = " << x << ", Q2 = " << Q2pdf;
432 #endif
433  fPDF->Calculate(x, Q2pdf);
434 
435  // Check whether it is above charm threshold
436  bool above_charm =
438  if(above_charm) {
439 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
440  LOG("DISSF", pDEBUG)
441  << "The event is above the charm threshold (mcharm = " << fMc << ")";
442 #endif
443  if(fCharmOff) {
444  LOG("DISSF", pINFO) << "Charm production is turned off";
445  } else {
446  // compute the slow rescaling var
447  double xc = utils::kinematics::SlowRescalingVar(x, Q2val, M, fMc);
448  if(xc<0 || xc>1) {
449  LOG("DISSF", pINFO) << "Unphys. slow rescaling var: xc = " << xc;
450  } else {
451  // compute PDFs at (xc,Q2)
452 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
453  LOG("DISSF", pDEBUG)
454  << "Calculating PDFs @ xc (slow rescaling) = " << x << ", Q2 = " << Q2val;
455 #endif
456  fPDFc->Calculate(xc, Q2pdf);
457  }
458  }// charm off?
459  }//above charm thr?
460  else {
461  LOG("DISSF", pDEBUG)
462  << "The event is below the charm threshold (mcharm = " << fMc << ")";
463  }
464 
465  // Compute the K factors
466  double kval_u = 1.;
467  double kval_d = 1.;
468  double ksea_u = 1.;
469  double ksea_d = 1.;
470 
471  this->KFactors(interaction, kval_u, kval_d, ksea_u, ksea_d);
472 
473 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
474  LOG("DISSF", pDEBUG) << "K-Factors:";
475  LOG("DISSF", pDEBUG) << "U: Kval = " << kval_u << ", Ksea = " << ksea_u;
476  LOG("DISSF", pDEBUG) << "D: Kval = " << kval_d << ", Ksea = " << ksea_d;
477 #endif
478 
479  // Apply the K factors
480  //
481  // Always scale d pdfs with d kfactors and u pdfs with u kfactors.
482  // Don't swap the applied kfactors for neutrons.
483  // Debdatta & Donna noted (Sep.2006) that a similar swap in the neugen
484  // implementation was the cause of the difference in nu and nubar F2
485  //
486  fPDF->ScaleUpValence (kval_u);
487  fPDF->ScaleDownValence (kval_d);
488  fPDF->ScaleUpSea (ksea_u);
489  fPDF->ScaleDownSea (ksea_d);
490  fPDF->ScaleStrange (ksea_d);
491  fPDF->ScaleCharm (ksea_u);
492  if(above_charm) {
493  fPDFc->ScaleUpValence (kval_u);
494  fPDFc->ScaleDownValence (kval_d);
495  fPDFc->ScaleUpSea (ksea_u);
496  fPDFc->ScaleDownSea (ksea_d);
497  fPDFc->ScaleStrange (ksea_d);
498  fPDFc->ScaleCharm (ksea_u);
499  }
500 
501  // Rules of thumb
502  // ---------------------------------------
503  // - For W+ exchange use: -1/3|e| quarks and -2/3|e| antiquarks
504  // - For W- exchange use: 2/3|e| quarks and 1/3|e| antiquarks
505  // - For each qi -> qj transition multiply with the (ij CKM element)^2
506  // - Use isospin symmetry to get neutron's u,d from proton's u,d
507  // -- neutron d = proton u
508  // -- neutron u = proton d
509  // - Use u = usea + uvalence. Same for d
510  // - For s,c use q=qbar
511  // - For t,b use q=qbar=0
512 
513  fuv = fPDF -> UpValence();
514  fus = fPDF -> UpSea();
515  fdv = fPDF -> DownValence();
516  fds = fPDF -> DownSea();
517  fs = fPDF -> Strange();
518  fc = 0.;
519  fuv_c = fPDFc -> UpValence(); // will be 0 if < charm threshold
520  fus_c = fPDFc -> UpSea(); // ...
521  fdv_c = fPDFc -> DownValence(); // ...
522  fds_c = fPDFc -> DownSea(); // ...
523  fs_c = fPDFc -> Strange(); // ...
524  fc_c = fPDFc -> Charm(); // ...
525 
526  // The above are the proton parton density function. Get the PDFs for the
527  // hit nucleon (p or n) by swapping u<->d if necessary
528 
529  int nuc_pdgc = tgt.HitNucPdg();
530  bool isP = pdg::IsProton (nuc_pdgc);
531  bool isN = pdg::IsNeutron (nuc_pdgc);
532  assert(isP || isN);
533 
534  double tmp = 0;
535  if (isN) { // swap u <-> d
536  tmp = fuv; fuv = fdv; fdv = tmp;
537  tmp = fus; fus = fds; fds = tmp;
538  tmp = fuv_c; fuv_c = fdv_c; fdv_c = tmp;
539  tmp = fus_c; fus_c = fds_c; fds_c = tmp;
540  }
541 
542 }
int HitNucPdg(void) const
Definition: Target.cxx:304
virtual void KFactors(const Interaction *i, double &kuv, double &kdv, double &kus, double &kds) const
void ScaleDownValence(double kscale)
Definition: PDF.cxx:86
bool IsNeutron(int pdgc)
Definition: PDGUtils.cxx:338
const TLorentzVector & HitNucP4(void) const
Definition: Target.h:91
double SlowRescalingVar(double x, double Q2, double M, double mc)
Definition: KineUtils.cxx:1244
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:333
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
virtual double Q2(const Interaction *i) const
PDF * fPDF
computed PDFs @ (x,Q2)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
bool IsAboveCharmThreshold(double x, double Q2, double M, double mc)
Definition: KineUtils.cxx:1225
#define pINFO
Definition: Messenger.h:62
string tmp
Definition: languages.py:63
void Calculate(double x, double q2)
Definition: PDF.cxx:49
PDF * fPDFc
computed PDFs @ (slow-rescaling-var,Q2)
void ScaleUpValence(double kscale)
Definition: PDF.cxx:81
bool fCharmOff
turn charm production off?
list x
Definition: train.py:276
void ScaleUpSea(double kscale)
Definition: PDF.cxx:91
void ScaleCharm(double kscale)
Definition: PDF.cxx:106
virtual double ScalingVar(const Interaction *i) const
void ScaleDownSea(double kscale)
Definition: PDF.cxx:96
double fQ2min
min Q^2 allowed for PDFs: PDF(Q2<Q2min):=PDF(Q2min)
#define pDEBUG
Definition: Messenger.h:63
void ScaleStrange(double kscale)
Definition: PDF.cxx:101
void QPMDMDISStrucFuncBase::Calculate ( const Interaction interaction) const
virtual

Calculate the structure functions F1-F6 for the input interaction.

Implements genie::DISStructureFuncModelI.

Definition at line 133 of file QPMDMDISStrucFuncBase.cxx.

134 {
135  // Reset mutable members
136  fF1 = 0;
137  fF2 = 0;
138  fF3 = 0;
139  fF4 = 0;
140  fF5 = 0;
141  fF6 = 0;
142 
143  // Get process info & perform various checks
144  const ProcessInfo & proc_info = interaction->ProcInfo();
145  const InitialState & init_state = interaction->InitState();
146  const Target & tgt = init_state.Tgt();
147 
148  int nuc_pdgc = tgt.HitNucPdg();
149  int probe_pdgc = init_state.ProbePdg();
150  bool is_p = pdg::IsProton ( nuc_pdgc );
151  bool is_n = pdg::IsNeutron ( nuc_pdgc );
152  bool is_dm = pdg::IsDarkMatter ( probe_pdgc );
153  bool is_dmb = pdg::IsAntiDarkMatter ( probe_pdgc );
154  bool is_dmi = proc_info.IsDarkMatter();
155 
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;
160 
161  // Flags switching on/off quark contributions so that this algorithm can be
162  // used for both l + N -> l' + X, and l + q -> l' + q' level calculations
163 
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.;
174 
175  if(tgt.HitQrkIsSet()) {
176 
177  switch_uv = 0.;
178  switch_us = 0.;
179  switch_ubar = 0.;
180  switch_dv = 0.;
181  switch_ds = 0.;
182  switch_dbar = 0.;
183  switch_s = 0.;
184  switch_sbar = 0.;
185  switch_c = 0.;
186  switch_cbar = 0.;
187 
188  int qpdg = tgt.HitQrkPdg();
189  bool sea = tgt.HitSeaQrk();
190 
191  bool is_u = pdg::IsUQuark (qpdg);
192  bool is_ubar = pdg::IsAntiUQuark (qpdg);
193  bool is_d = pdg::IsDQuark (qpdg);
194  bool is_dbar = pdg::IsAntiDQuark (qpdg);
195  bool is_s = pdg::IsSQuark (qpdg);
196  bool is_sbar = pdg::IsAntiSQuark (qpdg);
197  bool is_c = pdg::IsCQuark (qpdg);
198  bool is_cbar = pdg::IsAntiCQuark (qpdg);
199 
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; }
210  else return;
211 
212  }
213 
214  // Compute PDFs [both at (scaling-var,Q2) and (slow-rescaling-var,Q2)
215  // Applying all PDF K-factors abd scaling variable corrections
216 
217  this -> CalcPDFs (interaction);
218 
219  //
220  // Compute structure functions for the EM, NC and CC cases
221  //
222 
223  double F2val=0, xF3val=0;
224 
225  // *** DARK MATTER
226  if(is_dmi) {
227 
228  if(!is_dm && !is_dmb) return;
229 
230  double gvu = 0.5 * (fQuL + fQuR);
231  double gau = 0.5 * (fQuL - fQuR);
232  double gvc = 0.5 * (fQcL + fQcR);
233  double gac = 0.5 * (fQcL - fQcR);
234  double gvd = 0.5 * (fQdL + fQdR);
235  double gad = 0.5 * (fQdL - fQdR);
236  double gvs = 0.5 * (fQsL + fQsR);
237  double gas = 0.5 * (fQsL - fQsR);
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.);
246 
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));
251 
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));
256 
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;
260 #endif
261 
262  F2val = q2+qb2;
263  xF3val = q3-qb3;
264  }
265 
266  double Q2val = this->Q2 (interaction);
267  double x = this->ScalingVar(interaction);
268  double f = this->NuclMod (interaction); // nuclear modification
269  double r = this->R (interaction); // R ~ FL
270 
271 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
272  LOG("DISSF", pDEBUG) << "Nucl. mod = " << f;
273  LOG("DISSF", pDEBUG) << "R(=FL/2xF1) = " << r;
274 #endif
275 
276  if(fUse2016Corrections) {
277  //It was confirmed by A.Bodek that the modified scaling variable
278  //should just be used to compute the strucure functions F2 and xF3,
279  //but that the usual Bjorken x should be used for the relations
280  //between the structure functions.
281  //For the same reason remove the freezing of Q2 at 0.8 for those relations,
282  //although it has not been explicitly asked to A.Bodek if it should be done.
283 
284  const Kinematics & kinematics = interaction->Kine();
285  double bjx = kinematics.x();
286 
287  double a = TMath::Power(bjx,2.) / TMath::Max(Q2val, fLowQ2CutoffF1F2);
288  double c = (1. + 4. * kNucleonMass2 * a) / (1.+r);
289 
290  fF3 = f * xF3val/bjx;
291  fF2 = f * F2val;
292  fF1 = fF2 * 0.5*c/bjx;
293  fF5 = fF2/bjx; // Albright-Jarlskog relation
294  fF4 = 0.; // Nucl.Phys.B 84, 467 (1975)
295  }
296  else {
297  double a = TMath::Power(x,2.) / TMath::Max(Q2val, fLowQ2CutoffF1F2);
298  double c = (1. + 4. * kNucleonMass2 * a) / (1.+r);
299  //double a = TMath::Power(x,2.) / Q2val;
300  //double c = (1. + 4. * kNucleonMass * a) / (1.+r);
301 
302  fF3 = f * xF3val / x;
303  fF2 = f * F2val;
304  fF1 = fF2 * 0.5 * c / x;
305  fF5 = fF2 / x; // Albright-Jarlskog relation
306  fF4 = 0.; // Nucl.Phys.B 84, 467 (1975)
307  }
308 
309 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
310  LOG("DISSF", pDEBUG)
311  << "F1-F5 = "
312  << fF1 << ", " << fF2 << ", " << fF3 << ", " << fF4 << ", " << fF5;
313 #endif
314 }
bool HitSeaQrk(void) const
Definition: Target.cxx:299
bool IsUQuark(int pdgc)
Definition: PDGUtils.cxx:263
int HitNucPdg(void) const
Definition: Target.cxx:304
virtual double NuclMod(const Interaction *i) const
double fQuR
Up Right Dark Matter Coupling.
int HitQrkPdg(void) const
Definition: Target.cxx:242
double fQdR
Down Right Dark Matter Coupling.
double fQcR
Charm Right Dark Matter Coupling.
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
bool IsDarkMatter(int pdgc)
Definition: PDGUtils.cxx:124
double x(bool selected=false) const
Definition: Kinematics.cxx:99
virtual void CalcPDFs(const Interaction *i) const
bool IsSQuark(int pdgc)
Definition: PDGUtils.cxx:273
bool IsAntiSQuark(int pdgc)
Definition: PDGUtils.cxx:303
double fQsR
Strange Right Dark Matter Coupling.
virtual double R(const Interaction *i) const
bool IsAntiDQuark(int pdgc)
Definition: PDGUtils.cxx:298
bool IsNeutron(int pdgc)
Definition: PDGUtils.cxx:338
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:333
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
bool IsAntiDarkMatter(int pdgc)
Definition: PDGUtils.cxx:130
virtual double Q2(const Interaction *i) const
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:46
const double a
const Kinematics & Kine(void) const
Definition: Interaction.h:71
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
int ProbePdg(void) const
Definition: InitialState.h:64
int Z(void) const
Definition: Target.h:68
#define pINFO
Definition: Messenger.h:62
static const double kNucleonMass2
Definition: Constants.h:89
bool fUse2016Corrections
Use 2016 SF relation corrections.
double fQuL
Up Left Dark Matter Coupling.
double fLowQ2CutoffF1F2
Set min for relation between 2xF1 and F2.
int N(void) const
Definition: Target.h:69
bool IsCQuark(int pdgc)
Definition: PDGUtils.cxx:278
bool HitQrkIsSet(void) const
Definition: Target.cxx:292
bool IsDarkMatter(void) const
bool IsAntiCQuark(int pdgc)
Definition: PDGUtils.cxx:308
bool IsDQuark(int pdgc)
Definition: PDGUtils.cxx:268
const InitialState & InitState(void) const
Definition: Interaction.h:69
const ProcessInfo & ProcInfo(void) const
Definition: Interaction.h:70
list x
Definition: train.py:276
const Target & Tgt(void) const
Definition: InitialState.h:66
virtual double ScalingVar(const Interaction *i) const
double fQsL
Strange Left Dark Matter Coupling.
bool IsAntiUQuark(int pdgc)
Definition: PDGUtils.cxx:293
Initial State information.
Definition: InitialState.h:48
double fQdL
Down Left Dark Matter Coupling.
#define pDEBUG
Definition: Messenger.h:63
double fQcL
Charm Left Dark Matter Coupling.
void QPMDMDISStrucFuncBase::Configure ( const Registry config)
virtual

Configure the algorithm with an external registry The registry is merged with the top level registry if it is owned, Otherwise a copy of it is added with the highest priority

Reimplemented from genie::Algorithm.

Definition at line 70 of file QPMDMDISStrucFuncBase.cxx.

71 {
72  Algorithm::Configure(config);
73  this->LoadConfig();
74 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
void QPMDMDISStrucFuncBase::Configure ( string  config)
virtual

Configure the algorithm from the AlgoConfigPool based on param_set string given in input An algorithm contains a vector of registries coming from different xml configuration files, which are loaded according a very precise prioriy This methods will load a number registries in order of priority: 1) "Tunable" parameter set from CommonParametes. This is loaded with the highest prioriry and it is designed to be used for tuning procedure Usage not expected from the user. 2) For every string defined in "CommonParame" the corresponding parameter set will be loaded from CommonParameter.xml 3) parameter set specified by the config string and defined in the xml file of the algorithm 4) if config is not "Default" also the Default parameter set from the same xml file will be loaded Effectively this avoids the repetion of a parameter when it is not changed in the requested configuration

Reimplemented from genie::Algorithm.

Definition at line 76 of file QPMDMDISStrucFuncBase.cxx.

77 {
78  Algorithm::Configure(param_set);
79  this->LoadConfig();
80 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
virtual double genie::QPMDMDISStrucFuncBase::F1 ( void  ) const
inlinevirtual

Get the computed structure function F1.

Implements genie::DISStructureFuncModelI.

Definition at line 43 of file QPMDMDISStrucFuncBase.h.

virtual double genie::QPMDMDISStrucFuncBase::F2 ( void  ) const
inlinevirtual

Get the computed structure function F2.

Implements genie::DISStructureFuncModelI.

Definition at line 44 of file QPMDMDISStrucFuncBase.h.

virtual double genie::QPMDMDISStrucFuncBase::F3 ( void  ) const
inlinevirtual

Get the computed structure function F3.

Implements genie::DISStructureFuncModelI.

Definition at line 45 of file QPMDMDISStrucFuncBase.h.

virtual double genie::QPMDMDISStrucFuncBase::F4 ( void  ) const
inlinevirtual

Get the computed structure function F4.

Implements genie::DISStructureFuncModelI.

Definition at line 46 of file QPMDMDISStrucFuncBase.h.

virtual double genie::QPMDMDISStrucFuncBase::F5 ( void  ) const
inlinevirtual

Get the computed structure function F5.

Implements genie::DISStructureFuncModelI.

Definition at line 47 of file QPMDMDISStrucFuncBase.h.

virtual double genie::QPMDMDISStrucFuncBase::F6 ( void  ) const
inlinevirtual

Get the computed structure function F6.

Implements genie::DISStructureFuncModelI.

Definition at line 48 of file QPMDMDISStrucFuncBase.h.

void QPMDMDISStrucFuncBase::InitPDF ( void  )
protectedvirtual

Definition at line 126 of file QPMDMDISStrucFuncBase.cxx.

127 {
128  // evaluated at:
129  fPDF = new PDF(); // x = computed (+/-corrections) scaling var, Q2
130  fPDFc = new PDF(); // x = computed charm slow re-scaling var, Q2
131 }
static QChar PDF((ushort) 0x202c)
PDF * fPDF
computed PDFs @ (x,Q2)
PDF * fPDFc
computed PDFs @ (slow-rescaling-var,Q2)
void QPMDMDISStrucFuncBase::KFactors ( const Interaction i,
double &  kuv,
double &  kdv,
double &  kus,
double &  kds 
) const
protectedvirtual

Reimplemented in genie::DMBYStrucFunc.

Definition at line 351 of file QPMDMDISStrucFuncBase.cxx.

353 {
354 // This is an abstract class: no model-specific correction
355 // The PDF scaling variables are set to 1
356 // Override this method to compute model-dependent corrections
357 
358  kuv = 1.;
359  kdv = 1.;
360  kus = 1.;
361  kds = 1.;
362 }
void QPMDMDISStrucFuncBase::LoadConfig ( void  )
protectedvirtual

Definition at line 82 of file QPMDMDISStrucFuncBase.cxx.

83 {
84  LOG("DISSF", pDEBUG) << "Loading configuration...";
85 
86  //-- pdf
87  const PDFModelI * pdf_model =
88  dynamic_cast<const PDFModelI *> (this->SubAlg("PDF-Set"));
89  fPDF -> SetModel(pdf_model);
90  fPDFc -> SetModel(pdf_model);
91 
92  //-- charm mass
93  GetParam( "Charm-Mass", fMc ) ;
94 
95  //-- min Q2 for PDF evaluation
96  GetParam( "PDF-Q2min", fQ2min ) ;
97 
98  //-- include R (~FL)?
99  GetParam( "IncludeR", fIncludeR ) ;
100 
101  //-- include nuclear factor (shadowing / anti-shadowing / ...)
102  GetParam( "IncludeNuclMod", fIncludeNuclMod ) ;
103 
104  //-- Use 2016 SF relation corrections
105  GetParam( "Use2016Corrections", fUse2016Corrections ) ;
106 
107  //-- Set min for relation between 2xF1 and F2
108  GetParam( "LowQ2CutoffF1F2", fLowQ2CutoffF1F2 ) ;
109 
110  //-- turn charm production off?
111  GetParamDef( "Charm-Prod-Off", fCharmOff, false ) ;
112 
113  //-- dark matter couplings
114  GetParam( "UpLeftCharge", fQuL );
115  GetParam( "UpRightCharge", fQuR );
116  GetParam( "CharmLeftCharge", fQcL );
117  GetParam( "CharmRightCharge", fQcR );
118  GetParam( "DownLeftCharge", fQdL );
119  GetParam( "DownRightCharge", fQdR );
120  GetParam( "StrangeLeftCharge", fQsL );
121  GetParam( "StrangeRightCharge", fQsR );
122 
123  LOG("DISSF", pDEBUG) << "Done loading configuration";
124 }
double fQuR
Up Right Dark Matter Coupling.
double fQdR
Down Right Dark Matter Coupling.
double fQcR
Charm Right Dark Matter Coupling.
double fQsR
Strange Right Dark Matter Coupling.
Pure abstract base class. Defines the PDFModelI interface to be implemented by wrapper classes to exi...
Definition: PDFModelI.h:28
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
bool fIncludeNuclMod
include nuclear factor (shadowing, anti-shadowing,...)?
PDF * fPDF
computed PDFs @ (x,Q2)
bool fIncludeR
include R (~FL) in DIS SF calculation?
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)
bool fCharmOff
turn charm production off?
bool GetParamDef(const RgKey &name, T &p, const T &def) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
double fQsL
Strange Left Dark Matter Coupling.
double fQ2min
min Q^2 allowed for PDFs: PDF(Q2<Q2min):=PDF(Q2min)
double fQdL
Down Left Dark Matter Coupling.
#define pDEBUG
Definition: Messenger.h:63
double fQcL
Charm Left Dark Matter Coupling.
const Algorithm * SubAlg(const RgKey &registry_key) const
Definition: Algorithm.cxx:345
double QPMDMDISStrucFuncBase::NuclMod ( const Interaction i) const
protectedvirtual

Definition at line 364 of file QPMDMDISStrucFuncBase.cxx.

365 {
366 // Nuclear modification to Fi
367 // The scaling variable can be overwritten to include corrections
368 
369  if( interaction->TestBit(kIAssumeFreeNucleon) ) return 1.0;
370  if( interaction->TestBit(kINoNuclearCorrection) ) return 1.0;
371 
372  double f = 1.;
373  if(fIncludeNuclMod) {
374  const Target & tgt = interaction->InitState().Tgt();
375 
376 // The x used for computing the DIS Nuclear correction factor should be the
377 // experimental x, not the rescaled x or off-shell-rest-frame version of x
378 // (i.e. selected x). Since we do not have access to experimental x at this
379 // point in the calculation, just use selected x.
380  const Kinematics & kine = interaction->Kine();
381  double x = kine.x();
382  int A = tgt.A();
384 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
385  LOG("DISSF", pDEBUG) << "Nuclear factor for x of " << x << " = " << f;
386 #endif
387  }
388 
389  return f;
390 }
int A(void) const
Definition: Target.h:70
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
double x(bool selected=false) const
Definition: Kinematics.cxx:99
const UInt_t kINoNuclearCorrection
if set, inhibit nuclear corrections
Definition: Interaction.h:51
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
bool fIncludeNuclMod
include nuclear factor (shadowing, anti-shadowing,...)?
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
const UInt_t kIAssumeFreeNucleon
Definition: Interaction.h:49
#define A
Definition: memgrp.cpp:38
list x
Definition: train.py:276
double DISNuclFactor(double x, int A)
#define pDEBUG
Definition: Messenger.h:63
double QPMDMDISStrucFuncBase::Q2 ( const Interaction i) const
protectedvirtual

Definition at line 316 of file QPMDMDISStrucFuncBase.cxx.

317 {
318 // Return Q2 from the kinematics or, if not set, compute it from x,y
319 // The x might be corrected
320 
321  const Kinematics & kinematics = interaction->Kine();
322 
323  // if Q2 (or q2) is set then prefer this value
324  if (kinematics.KVSet(kKVQ2) || kinematics.KVSet(kKVq2)) {
325  double Q2val = kinematics.Q2();
326  return Q2val;
327  }
328  // if Q2 was not set, then compute it from x,y,Ev,Mnucleon
329  if (kinematics.KVSet(kKVy)) {
330  const InitialState & init_state = interaction->InitState();
331  double Mn = init_state.Tgt().HitNucP4Ptr()->M(); // could be off-shell
332  //double x = this->ScalingVar(interaction); // could be redefined
333  double x = kinematics.x();
334  double y = kinematics.y();
335  double Ev = init_state.ProbeE(kRfHitNucRest);
336  double Q2val = 2*Mn*Ev*x*y;
337  return Q2val;
338  }
339  LOG("DISSF", pERROR) << "Could not compute Q2!";
340  return 0;
341 }
#define pERROR
Definition: Messenger.h:59
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
double x(bool selected=false) const
Definition: Kinematics.cxx:99
double y(bool selected=false) const
Definition: Kinematics.cxx:112
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
bool KVSet(KineVar_t kv) const
Definition: Kinematics.cxx:317
TLorentzVector * HitNucP4Ptr(void) const
Definition: Target.cxx:247
list x
Definition: train.py:276
double Q2(bool selected=false) const
Definition: Kinematics.cxx:125
const Target & Tgt(void) const
Definition: InitialState.h:66
double ProbeE(RefFrame_t rf) const
Initial State information.
Definition: InitialState.h:48
double QPMDMDISStrucFuncBase::R ( const Interaction i) const
protectedvirtual

Definition at line 392 of file QPMDMDISStrucFuncBase.cxx.

393 {
394 // Computes R ( ~ longitudinal structure function FL = R * 2xF1)
395 // The scaling variable can be overwritten to include corrections
396 
397 // The x used for computing the DIS Nuclear correction factor should be the
398 // experimental x, not the rescaled x or off-shell-rest-frame version of x
399 // (i.e. selected x). Since we do not have access to experimental x at this
400 // point in the calculation, just use selected x.
401  if(fIncludeR) {
402  const Kinematics & kine = interaction->Kine();
403  double x = kine.x();
404 // double x = this->ScalingVar(interaction);
405  double Q2val = this->Q2(interaction);
406  double Rval = utils::phys::RWhitlow(x, Q2val);
407  return Rval;
408  }
409  return 0;
410 }
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
double x(bool selected=false) const
Definition: Kinematics.cxx:99
virtual double Q2(const Interaction *i) const
bool fIncludeR
include R (~FL) in DIS SF calculation?
list x
Definition: train.py:276
double RWhitlow(double x, double Q2)
Definition: PhysUtils.cxx:75
double QPMDMDISStrucFuncBase::ScalingVar ( const Interaction i) const
protectedvirtual

Reimplemented in genie::DMBYStrucFunc.

Definition at line 343 of file QPMDMDISStrucFuncBase.cxx.

344 {
345 // The scaling variable is set to the normal Bjorken x.
346 // Override DISStructureFuncModel::ScalingVar() to compute corrections
347 
348  return interaction->Kine().x();
349 }

Member Data Documentation

double genie::QPMDMDISStrucFuncBase::fc
mutableprotected

Definition at line 104 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fc_c
mutableprotected

Definition at line 110 of file QPMDMDISStrucFuncBase.h.

bool genie::QPMDMDISStrucFuncBase::fCharmOff
protected

turn charm production off?

Definition at line 76 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fds
mutableprotected

Definition at line 102 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fds_c
mutableprotected

Definition at line 108 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fdv
mutableprotected

Definition at line 101 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fdv_c
mutableprotected

Definition at line 107 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fF1
mutableprotected

Definition at line 91 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fF2
mutableprotected

Definition at line 92 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fF3
mutableprotected

Definition at line 93 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fF4
mutableprotected

Definition at line 94 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fF5
mutableprotected

Definition at line 95 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fF6
mutableprotected

Definition at line 96 of file QPMDMDISStrucFuncBase.h.

bool genie::QPMDMDISStrucFuncBase::fIncludeNuclMod
protected

include nuclear factor (shadowing, anti-shadowing,...)?

Definition at line 78 of file QPMDMDISStrucFuncBase.h.

bool genie::QPMDMDISStrucFuncBase::fIncludeR
protected

include R (~FL) in DIS SF calculation?

Definition at line 77 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fLowQ2CutoffF1F2
protected

Set min for relation between 2xF1 and F2.

Definition at line 89 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fMc
protected

charm mass used

Definition at line 79 of file QPMDMDISStrucFuncBase.h.

PDF* genie::QPMDMDISStrucFuncBase::fPDF
protected

computed PDFs @ (x,Q2)

Definition at line 97 of file QPMDMDISStrucFuncBase.h.

PDF* genie::QPMDMDISStrucFuncBase::fPDFc
protected

computed PDFs @ (slow-rescaling-var,Q2)

Definition at line 98 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQ2min
protected

min Q^2 allowed for PDFs: PDF(Q2<Q2min):=PDF(Q2min)

Definition at line 75 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQcL
protected

Charm Left Dark Matter Coupling.

Definition at line 82 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQcR
protected

Charm Right Dark Matter Coupling.

Definition at line 83 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQdL
protected

Down Left Dark Matter Coupling.

Definition at line 84 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQdR
protected

Down Right Dark Matter Coupling.

Definition at line 85 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQsL
protected

Strange Left Dark Matter Coupling.

Definition at line 86 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQsR
protected

Strange Right Dark Matter Coupling.

Definition at line 87 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQuL
protected

Up Left Dark Matter Coupling.

Definition at line 80 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fQuR
protected

Up Right Dark Matter Coupling.

Definition at line 81 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fs
mutableprotected

Definition at line 103 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fs_c
mutableprotected

Definition at line 109 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fus
mutableprotected

Definition at line 100 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fus_c
mutableprotected

Definition at line 106 of file QPMDMDISStrucFuncBase.h.

bool genie::QPMDMDISStrucFuncBase::fUse2016Corrections
protected

Use 2016 SF relation corrections.

Definition at line 88 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fuv
mutableprotected

Definition at line 99 of file QPMDMDISStrucFuncBase.h.

double genie::QPMDMDISStrucFuncBase::fuv_c
mutableprotected

Definition at line 105 of file QPMDMDISStrucFuncBase.h.


The documentation for this class was generated from the following files: