GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
genie::QPMDMDISPXSec Class Reference

Computes DMDIS differential cross sections. Is a concrete implementation of the XSecAlgorithmI interface. More...

#include <QPMDMDISPXSec.h>

Inheritance diagram for genie::QPMDMDISPXSec:
Inheritance graph
[legend]
Collaboration diagram for genie::QPMDMDISPXSec:
Collaboration graph
[legend]

Public Member Functions

 QPMDMDISPXSec ()
 
 QPMDMDISPXSec (string config)
 
virtual ~QPMDMDISPXSec ()
 
double XSec (const Interaction *i, KinePhaseSpace_t k) const
 Compute the cross section for the input interaction. More...
 
double Integral (const Interaction *i) const
 
bool ValidProcess (const Interaction *i) const
 Can this cross section algorithm handle the input process? More...
 
void Configure (const Registry &config)
 
void Configure (string config)
 
- Public Member Functions inherited from genie::XSecAlgorithmI
virtual ~XSecAlgorithmI ()
 
virtual bool ValidKinematics (const Interaction *i) const
 Is the input kinematical point a physically allowed one? More...
 
- 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...
 

Private Member Functions

void LoadConfig (void)
 
double DMDISRESJoinSuppressionFactor (const Interaction *in) const
 

Private Attributes

DISStructureFunc fDISSF
 
bool fInInitPhase
 
const DISStructureFuncModelIfDISSFModel
 SF model. More...
 
const HadronizationModelI * fHadronizationModel
 hadronic multip. model More...
 
const XSecIntegratorIfXSecIntegrator
 diff. xsec integrator More...
 
const XSecAlgorithmIfCharmProdModel
 
bool fUsingDisResJoin
 use a DMDIS/RES joining scheme? More...
 
bool fUseCache
 cache reduction factors used in joining scheme More...
 
double fWcut
 apply DMDIS/RES joining scheme < Wcut More...
 
double fCCScale
 cross section scaling factor for CC processes More...
 
double fNCScale
 cross section scaling factor for NC processes More...
 
double fEMScale
 cross section scaling factor for EM processes More...
 
double fSin48w
 sin^4(Weingberg angle) More...
 
int fVelMode
 velcoity dependence for xsec More...
 
double fMedMass
 Mediator mass. More...
 
double fgzp
 Coupling to the mediator Zprime. More...
 
double fQchiL
 Left-handed DM charge. More...
 
double fQchiR
 Right-handed DM charge. More...
 
double fQchiS
 Scalar DM charge. 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)
 
static string BuildParamMatKey (const std::string &comm_name, unsigned int i, unsigned int j)
 
static string BuildParamMatRowSizeKey (const std::string &comm_name)
 
static string BuildParamMatColSizeKey (const std::string &comm_name)
 
- Protected Member Functions inherited from genie::XSecAlgorithmI
 XSecAlgorithmI ()
 
 XSecAlgorithmI (string name)
 
 XSecAlgorithmI (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
 
template<class T >
int GetParamMat (const std::string &comm_name, TMatrixT< T > &mat, bool is_top_call=true) const
 Handle to load matrix of parameters. More...
 
template<class T >
int GetParamMatSym (const std::string &comm_name, TMatrixTSym< T > &mat, bool is_top_call=true) const
 
int GetParamMatKeys (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 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< bool > fOwnerships
 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...
 

Detailed Description

Computes DMDIS differential cross sections. Is a concrete implementation of the XSecAlgorithmI interface.

References:
E.A.Paschos and J.Y.Yu, Phys.Rev.D 65.03300
Author
Joshua Berger <jberger physics.wisc.edu University of Wisconsin-Madison

Costas Andreopoulos <c.andreopoulos cern.ch> University of Liverpool

Created:
September 4, 2017
License:
Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org

Definition at line 37 of file QPMDMDISPXSec.h.

Constructor & Destructor Documentation

QPMDMDISPXSec::QPMDMDISPXSec ( )

Definition at line 49 of file QPMDMDISPXSec.cxx.

References fInInitPhase.

49  :
50 XSecAlgorithmI("genie::QPMDMDISPXSec")
51 {
52  fInInitPhase = true;
53 }
QPMDMDISPXSec::QPMDMDISPXSec ( string  config)

Definition at line 55 of file QPMDMDISPXSec.cxx.

References fInInitPhase.

55  :
56 XSecAlgorithmI("genie::QPMDMDISPXSec", config)
57 {
58  fInInitPhase = true;
59 }
QPMDMDISPXSec::~QPMDMDISPXSec ( )
virtual

Definition at line 61 of file QPMDMDISPXSec.cxx.

62 {
63 
64 }

Member Function Documentation

void QPMDMDISPXSec::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 251 of file QPMDMDISPXSec.cxx.

References genie::Algorithm::Configure(), and LoadConfig().

252 {
253  Algorithm::Configure(config);
254  this->LoadConfig();
255 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
void QPMDMDISPXSec::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 257 of file QPMDMDISPXSec.cxx.

References genie::Algorithm::Configure(), genie::AlgConfigPool::Instance(), LoadConfig(), and genie::Registry::Set().

258 {
259  Algorithm::Configure(config);
260 
261  Registry r( "QPMDMDISPXSec_specific", false ) ;
262 
263  RgKey xdefkey = "XSecModel@genie::EventGenerator/DIS-CC-CHARM";
264  RgKey local_key = "CharmXSec" ;
265  r.Set( local_key, AlgConfigPool::Instance() -> GlobalParameterList() -> GetAlg(xdefkey) ) ;
266 
268 
269  this->LoadConfig();
270 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
string RgKey
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:65
static AlgConfigPool * Instance()
double genie::QPMDMDISPXSec::DMDISRESJoinSuppressionFactor ( const Interaction in) const
private
double QPMDMDISPXSec::Integral ( const Interaction i) const
virtual

Integrate the model over the kinematic phase space available to the input interaction (kinematical cuts can be included)

Implements genie::XSecAlgorithmI.

Definition at line 226 of file QPMDMDISPXSec.cxx.

References fXSecIntegrator, and genie::XSecIntegratorI::Integrate().

227 {
228  double xsec = fXSecIntegrator->Integrate(this,interaction);
229  return xsec;
230 }
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator
Definition: QPMDMDISPXSec.h:63
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
void QPMDMDISPXSec::LoadConfig ( void  )
private

Definition at line 272 of file QPMDMDISPXSec.cxx.

References genie::RunOpt::BareXSecPreCalc(), fCCScale, fCharmProdModel, fDISSF, fDISSFModel, fEMScale, fgzp, genie::PDGLibrary::Find(), fInInitPhase, fMedMass, fNCScale, fQchiL, fQchiR, fQchiS, fSin48w, fUseCache, fVelMode, fXSecIntegrator, genie::Algorithm::GetParam(), genie::Algorithm::GetParamDef(), genie::Algorithm::Id(), genie::RunOpt::Instance(), genie::PDGLibrary::Instance(), genie::Cache::Instance(), genie::AlgId::Key(), genie::kPdgMediator, LOG, pDEBUG, genie::Cache::RmMatchedCacheBranches(), genie::DISStructureFunc::SetModel(), and genie::Algorithm::SubAlg().

Referenced by Configure().

273 {
274  // Access global defaults to use in case of missing parameters
275 
276  fDISSFModel = 0;
277  fDISSFModel =
278  dynamic_cast<const DISStructureFuncModelI *> (this->SubAlg("SFAlg"));
279  assert(fDISSFModel);
280 
281  fDISSF.SetModel(fDISSFModel); // <-- attach algorithm
282 
283  // Cross section scaling factor
284  this->GetParam( "DIS-CC-XSecScale", fCCScale ) ;
285  this->GetParam( "DIS-NC-XSecScale", fNCScale ) ;
286  this->GetParam( "DIS-EM-XSecScale", fEMScale ) ;
287 
288  // sin^4(theta_weinberg)
289  double thw ;
290  this->GetParam( "WeinbergAngle", thw ) ;
291  fSin48w = TMath::Power( TMath::Sin(thw), 4 );
292 
293  // Caching the reduction factors used in the DMDIS/RES joing scheme?
294  // In normal event generation (1 config -> many calls) it is worth caching
295  // these suppression factors.
296  // Depending on the way this algorithm is used during event reweighting,
297  // precomputing (for all W's) & caching these factors might not be efficient.
298  // Here we provide the option to turn the caching off at run-time (default: on)
299 
300  bool cache_enabled = RunOpt::Instance()->BareXSecPreCalc();
301 
302  this->GetParamDef( "UseCache", fUseCache, true ) ;
303  fUseCache = fUseCache && cache_enabled;
304 
305  // Since this method would be called every time the current algorithm is
306  // reconfigured at run-time, remove all the data cached by this algorithm
307  // since they depend on the previous configuration
308 
309  if(!fInInitPhase) {
310  Cache * cache = Cache::Instance();
311  string keysubstr = this->Id().Key() + "/DMDIS-RES-Join";
312  cache->RmMatchedCacheBranches(keysubstr);
313  }
314  fInInitPhase = false;
315 
316  // velocity dependence of the interaction
317  this->GetParamDef("velocity-mode", fVelMode, 0);
318 
319  // mediator coupling
320  this->GetParam("ZpCoupling", fgzp);
321  this->GetParam("DarkLeftCharge", fQchiL);
322  this->GetParam("DarkRightCharge", fQchiR);
323  this->GetParam("DarkScalarCharge", fQchiS);
324 
325  // mediator mass ratio and mediator mass
327 
328  //-- load the differential cross section integrator
330  dynamic_cast<const XSecIntegratorI *> (this->SubAlg("XSec-Integrator"));
331  assert(fXSecIntegrator);
332 
333  RgKey local_key = "CharmXSec" ;
334  RgAlg xalg ;
335  GetParam( local_key, xalg) ;
336  LOG("DMDISXSec", pDEBUG)
337  << "Loading the cross section model: " << xalg;
338  fCharmProdModel = dynamic_cast<const XSecAlgorithmI *> ( this -> SubAlg(local_key) ) ;
339  assert(fCharmProdModel);
340 }
void SetModel(const DISStructureFuncModelI *model)
Attach an algorithm.
Cross Section Calculation Interface.
Pure Abstract Base Class. Defines the DISStructureFuncModelI interface to be implemented by any algor...
double fgzp
Coupling to the mediator Zprime.
Definition: QPMDMDISPXSec.h:76
Cross Section Integrator Interface.
const int kPdgMediator
Definition: PDGCodes.h:220
double fSin48w
sin^4(Weingberg angle)
Definition: QPMDMDISPXSec.h:73
int fVelMode
velcoity dependence for xsec
Definition: QPMDMDISPXSec.h:74
const XSecAlgorithmI * fCharmProdModel
Definition: QPMDMDISPXSec.h:65
double fQchiS
Scalar DM charge.
Definition: QPMDMDISPXSec.h:79
bool BareXSecPreCalc(void) const
Definition: RunOpt.h:53
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
double fQchiR
Right-handed DM charge.
Definition: QPMDMDISPXSec.h:78
const DISStructureFuncModelI * fDISSFModel
SF model.
Definition: QPMDMDISPXSec.h:61
double fMedMass
Mediator mass.
Definition: QPMDMDISPXSec.h:75
DISStructureFunc fDISSF
Definition: QPMDMDISPXSec.h:58
bool fUseCache
cache reduction factors used in joining scheme
Definition: QPMDMDISPXSec.h:68
double fQchiL
Left-handed DM charge.
Definition: QPMDMDISPXSec.h:77
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator
Definition: QPMDMDISPXSec.h:63
GENIE Cache Memory.
Definition: Cache.h:38
virtual const AlgId & Id(void) const
Get algorithm ID.
Definition: Algorithm.h:98
static PDGLibrary * Instance(void)
Definition: PDGLibrary.cxx:68
static RunOpt * Instance(void)
Definition: RunOpt.cxx:54
string RgKey
void RmMatchedCacheBranches(string key_substring)
Definition: Cache.cxx:127
TParticlePDG * Find(int pdgc, bool must_exist=true)
Definition: PDGLibrary.cxx:86
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 fEMScale
cross section scaling factor for EM processes
Definition: QPMDMDISPXSec.h:72
static Cache * Instance(void)
Definition: Cache.cxx:67
double fCCScale
cross section scaling factor for CC processes
Definition: QPMDMDISPXSec.h:70
string Key(void) const
Definition: AlgId.h:46
double fNCScale
cross section scaling factor for NC processes
Definition: QPMDMDISPXSec.h:71
#define pDEBUG
Definition: Messenger.h:63
const Algorithm * SubAlg(const RgKey &registry_key) const
Definition: Algorithm.cxx:345
bool QPMDMDISPXSec::ValidProcess ( const Interaction i) const
virtual

Can this cross section algorithm handle the input process?

Implements genie::XSecAlgorithmI.

Definition at line 232 of file QPMDMDISPXSec.cxx.

References genie::Target::HitNucIsSet(), genie::Target::HitNucPdg(), genie::pdg::IsAntiDarkMatter(), genie::pdg::IsDarkMatter(), genie::ProcessInfo::IsDarkMatterDeepInelastic(), genie::pdg::IsNeutronOrProton(), genie::kISkipProcessChk, genie::InitialState::ProbePdg(), genie::Interaction::ProcInfo(), and genie::InitialState::Tgt().

Referenced by XSec().

233 {
234  if(interaction->TestBit(kISkipProcessChk)) return true;
235 
236  const ProcessInfo & proc_info = interaction->ProcInfo();
237  if(!proc_info.IsDarkMatterDeepInelastic()) return false;
238 
239  const InitialState & init_state = interaction -> InitState();
240  int probe_pdg = init_state.ProbePdg();
241  if(!pdg::IsDarkMatter(probe_pdg) && !pdg::IsAntiDarkMatter(probe_pdg)) return false;
242 
243  if(! init_state.Tgt().HitNucIsSet()) return false;
244 
245  int hitnuc_pdg = init_state.Tgt().HitNucPdg();
246  if(!pdg::IsNeutronOrProton(hitnuc_pdg)) return false;
247 
248  return true;
249 }
int HitNucPdg(void) const
Definition: Target.cxx:304
bool IsDarkMatter(int pdgc)
Definition: PDGUtils.cxx:127
bool IsAntiDarkMatter(int pdgc)
Definition: PDGUtils.cxx:133
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:46
int ProbePdg(void) const
Definition: InitialState.h:64
bool HitNucIsSet(void) const
Definition: Target.cxx:283
bool IsNeutronOrProton(int pdgc)
Definition: PDGUtils.cxx:351
const Target & Tgt(void) const
Definition: InitialState.h:66
bool IsDarkMatterDeepInelastic(void) const
Definition: ProcessInfo.cxx:94
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition: Interaction.h:47
Initial State information.
Definition: InitialState.h:48
double QPMDMDISPXSec::XSec ( const Interaction i,
KinePhaseSpace_t  k 
) const
virtual

Compute the cross section for the input interaction.

Implements genie::XSecAlgorithmI.

Definition at line 66 of file QPMDMDISPXSec.cxx.

References genie::DISStructureFunc::Calculate(), genie::Interaction::ExclTagPtr(), genie::DISStructureFunc::F1(), genie::DISStructureFunc::F2(), genie::DISStructureFunc::F3(), genie::DISStructureFunc::F4(), genie::DISStructureFunc::F5(), fCCScale, fCharmProdModel, fDISSF, fEMScale, fgzp, fMedMass, fNCScale, fQchiL, fQchiR, fQchiS, genie::Interaction::FSPrimLepton(), fVelMode, genie::Target::HitNucMass(), genie::Target::HitNucPdg(), genie::pdg::IsAntiDarkMatter(), genie::ProcessInfo::IsEM(), genie::pdg::IsProton(), genie::ProcessInfo::IsWeakCC(), genie::ProcessInfo::IsWeakNC(), genie::utils::mec::J(), genie::utils::kinematics::Jacobian(), genie::kIAssumeFreeNucleon, genie::constants::kPi, genie::kPSxyfE, genie::kRfHitNucRest, LOG, genie::Target::N(), pDEBUG, pINFO, genie::InitialState::ProbeE(), genie::InitialState::ProbePdg(), genie::utils::kinematics::Q2(), genie::XclsTag::SetCharm(), genie::InitialState::Tgt(), genie::XclsTag::UnsetCharm(), genie::XSecAlgorithmI::ValidKinematics(), ValidProcess(), genie::Kinematics::x(), genie::XSecAlgorithmI::XSec(), genie::utils::kinematics::XYtoQ2(), genie::Kinematics::y(), and genie::Target::Z().

68 {
69  if(! this -> ValidProcess (interaction) ) return 0.;
70  if(! this -> ValidKinematics (interaction) ) return 0.;
71 
72  // Get kinematical & init-state parameters
73  const Kinematics & kinematics = interaction -> Kine();
74  const InitialState & init_state = interaction -> InitState();
75  const ProcessInfo & proc_info = interaction -> ProcInfo(); // comment-out unused variable to eliminate warnings
76 
77  LOG("DMDISPXSec", pDEBUG) << "Using v^" << fVelMode << " dependence";
78 
79  double E = init_state.ProbeE(kRfHitNucRest);
80  double ml = interaction->FSPrimLepton()->Mass();
81  double Mnuc = init_state.Tgt().HitNucMass();
82  double x = kinematics.x();
83  double y = kinematics.y();
84 
85  double E2 = E * E;
86  double ml2 = ml * ml;
87  // double ml4 = ml2 * ml2; // comment-out unused variable to eliminate warnings
88  // double Mnuc2 = Mnuc * Mnuc; // comment-out unused variable to eliminate warnings
89 
90 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
91  LOG("DMDISPXSec", pDEBUG)
92  << "Computing d2xsec/dxdy @ E = " << E << ", x = " << x << ", y = " << y;
93 #endif
94 
95  // One of the xsec terms changes sign for antineutrinos @ DMDIS/CC
96 
97  // bool is_nubar_cc = pdg::IsAntiNeutrino(init_state.ProbePdg()) &&
98  // proc_info.IsWeakCC(); // // comment-out unused variable to eliminate warnings
99  // int sign = (is_nubar_cc) ? -1 : 1; // comment-out unused variable to eliminate warnings
100  int sign = 1;
101  if ( pdg::IsAntiDarkMatter(init_state.ProbePdg()) ) sign = -1;
102 
103  // Calculate the DMDIS structure functions
104  fDISSF.Calculate(interaction);
105 
106 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
107  LOG("DMDISPXSec", pDEBUG) << fDISSF;
108 #endif
109 
110  //
111  // Compute the differential cross section
112  //
113 
114  // For EM interaction replace G_{Fermi} with :
115  // a_{em} * pi / ( sqrt(2) * sin^2(theta_weinberg) * Mass_{W}^2 }
116  // See C.Quigg, Gauge Theories of the Strong, Weak and E/M Interactions,
117  // ISBN 0-8053-6021-2, p.112 (6.3.57)
118  // Also, take int account that the photon propagator is 1/p^2 but the
119  // W propagator is 1/(p^2-Mass_{W}^2), so weight the EM case with
120  // Mass_{W}^4 / q^4
121  // So, overall:
122  // G_{Fermi}^2 --> a_{em}^2 * pi^2 / (2 * sin^4(theta_weinberg) * q^{4})
123  //
124  double Q2 = utils::kinematics::XYtoQ2(E,Mnuc,x,y);
125  // double Q4 = Q2*Q2; // comment-out unused variable to eliminate warnings
126  // temp: set the Z' mass to MZ and g' = 1 for now
127  LOG("DMDISPXSec", pDEBUG)
128  << "Using a mediator mass " << fMedMass;
129  double Mzp2 = TMath::Power(fMedMass,2);
130  // double gzp = RunOpt::Instance()->ZpCoupling();
131  double gzp = fgzp;
132  double gzp4 = TMath::Power(gzp,4);
133  double g2 = gzp4 / TMath::Power((Q2 + Mzp2), 2);
134  double p2 = TMath::Max(E2 - ml2,0.);
135  double front_factor = (g2*Mnuc*E) / (64.0 * kPi) * (E2 / p2);
136 
137  // Build all dxsec/dxdy terms
138  double term1 = 0.;
139  double term2 = 0.;
140  double term3 = 0.;
141  double term4 = 0.;
142  double term5 = 0.;
143  // The cross-check of these expressions is that they should
144  // give the elastic cross-section in the limit x -> 1, PDF -> 1,
145  // and absent nuclear effects
146  if (fVelMode == 0) {
147  // Second lines contain longitudinal Z' coupling
148  // If the mediator is relatively light, these terms are important
149  // and can't be neglected like they are in the SM
150  double QchiV2 = TMath::Power(0.5*(fQchiL + fQchiR),2);
151  double QchiA2 = TMath::Power(0.5*(fQchiL - fQchiR),2);
152  double QchiVA = TMath::Power(0.5*fQchiL,2) - TMath::Power(0.5*fQchiR,2);
153  double LongF = TMath::Power(1.0 + 2.0 * x * y * Mnuc * E / Mzp2,2);
154  term1 = 8.0 * y * ((QchiV2 + QchiA2) * x * y - (QchiV2 - (2.0 + LongF) * QchiA2) * ml2 / (E * Mnuc));
155  term2 = 4.0 * (2.0 * (QchiV2 + QchiA2) * (1.0 - y - 0.5 * Mnuc / E * x * y) - QchiA2 * ml2 / E * (2.0 / E + y / x / Mnuc * (1.0 - LongF)));
156  term3 = sign * 8.0 * (2.0 - y) * x * y * QchiVA;
157  term4 = 16.0 * QchiA2 * LongF * ml2 * x * y / (E * Mnuc);
158  term5 = -8.0 * QchiA2 * LongF * ml2 * y / (E * Mnuc);
159  }
160  else if (fVelMode == 2) {
161  // Scalar case has no longitudinal Z' coupling
162  double QchiS2 = TMath::Power(fQchiS, 2);
163  term1 = - 4.0 * QchiS2 * y * (x * y + 2.0 * ml2/(E*Mnuc));
164  term2 = 2.0 * QchiS2 * TMath::Power(y - 2.0,2);
165  }
166 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
167  LOG("DMDISPXSec", pDEBUG)
168  << "\nd2xsec/dxdy ~ (" << term1 << ")*F1+(" << term2 << ")*F2+("
169  << term3 << ")*F3+(" << term4 << ")*F4+(" << term5 << ")*F5";
170 #endif
171 
172  term1 *= fDISSF.F1();
173  term2 *= fDISSF.F2();
174  term3 *= fDISSF.F3();
175  term4 *= fDISSF.F4();
176  term5 *= fDISSF.F5();
177 
178  LOG("DMDISPXSec", pDEBUG)
179  << "\nd2xsec/dxdy ~ (" << term1 << ")+(" << term2 << ")+("
180  << term3 << ")+(" << term4 << ")+(" << term5 << ")";
181 
182 
183  double xsec = front_factor * (term1 + term2 + term3 + term4 + term5);
184  xsec = TMath::Max(xsec,0.);
185 
186 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
187  LOG("DMDISPXSec", pINFO)
188  << "d2xsec/dxdy[FreeN] (E= " << E
189  << ", x= " << x << ", y= " << y << ") = " << xsec;
190 #endif
191 
192  // The algorithm computes d^2xsec/dxdy
193  // Check whether variable tranformation is needed
194  if(kps!=kPSxyfE) {
195  double J = utils::kinematics::Jacobian(interaction,kPSxyfE,kps);
196  xsec *= J;
197  }
198 
199  // If requested return the free nucleon xsec even for input nuclear tgt
200  if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
201 
202  // Compute nuclear cross section (simple scaling here, corrections must
203  // have been included in the structure functions)
204  const Target & target = init_state.Tgt();
205  int nucpdgc = target.HitNucPdg();
206  int NNucl = (pdg::IsProton(nucpdgc)) ? target.Z() : target.N();
207  xsec *= NNucl;
208 
209  // Apply scaling / if required to reach well known asymmptotic value
210  if( proc_info.IsWeakCC()) xsec *= fCCScale;
211  else if( proc_info.IsWeakNC()) xsec *= fNCScale;
212  else if( proc_info.IsEM()) xsec *= fEMScale;
213 
214  // Subtract the inclusive charm production cross section
215  interaction->ExclTagPtr()->SetCharm();
216  double xsec_charm = fCharmProdModel->XSec(interaction,kps);
217  interaction->ExclTagPtr()->UnsetCharm();
218 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
219  LOG("DMDISPXSec", pINFO)
220  << "Subtracting charm piece: " << xsec_charm << " / out of " << xsec;
221 #endif
222  xsec = TMath::Max(0., xsec-xsec_charm);
223  return xsec;
224 }
bool IsWeakCC(void) const
double fgzp
Coupling to the mediator Zprime.
Definition: QPMDMDISPXSec.h:76
double F2(void) const
Get the computed structure function F2.
double J(double q0, double q3, double Enu, double ml)
Definition: MECUtils.cxx:147
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1077
int HitNucPdg(void) const
Definition: Target.cxx:304
double HitNucMass(void) const
Definition: Target.cxx:233
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
double x(bool selected=false) const
Definition: Kinematics.cxx:99
int fVelMode
velcoity dependence for xsec
Definition: QPMDMDISPXSec.h:74
const XSecAlgorithmI * fCharmProdModel
Definition: QPMDMDISPXSec.h:65
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double y(bool selected=false) const
Definition: Kinematics.cxx:112
double F4(void) const
Get the computed structure function F4.
double fQchiS
Scalar DM charge.
Definition: QPMDMDISPXSec.h:79
double F1(void) const
Get the computed structure function F1.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:336
bool IsWeakNC(void) const
#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:133
double fQchiR
Right-handed DM charge.
Definition: QPMDMDISPXSec.h:78
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:46
double XYtoQ2(double Ev, double M, double x, double y)
Definition: KineUtils.cxx:1208
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
double fMedMass
Mediator mass.
Definition: QPMDMDISPXSec.h:75
int ProbePdg(void) const
Definition: InitialState.h:64
DISStructureFunc fDISSF
Definition: QPMDMDISPXSec.h:58
int Z(void) const
Definition: Target.h:68
#define pINFO
Definition: Messenger.h:62
double fQchiL
Left-handed DM charge.
Definition: QPMDMDISPXSec.h:77
virtual double XSec(const Interaction *i, KinePhaseSpace_t k=kPSfE) const =0
Compute the cross section for the input interaction.
double F5(void) const
Get the computed structure function F5.
bool IsEM(void) const
double F3(void) const
Get the computed structure function F3.
int N(void) const
Definition: Target.h:69
const UInt_t kIAssumeFreeNucleon
Definition: Interaction.h:49
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
Definition: KineUtils.cxx:130
void Calculate(const Interaction *interaction)
Calculate the S/F&#39;s for the input interaction using the attached algorithm.
const Target & Tgt(void) const
Definition: InitialState.h:66
double fEMScale
cross section scaling factor for EM processes
Definition: QPMDMDISPXSec.h:72
double ProbeE(RefFrame_t rf) const
double fCCScale
cross section scaling factor for CC processes
Definition: QPMDMDISPXSec.h:70
double fNCScale
cross section scaling factor for NC processes
Definition: QPMDMDISPXSec.h:71
Initial State information.
Definition: InitialState.h:48
#define pDEBUG
Definition: Messenger.h:63

Member Data Documentation

double genie::QPMDMDISPXSec::fCCScale
private

cross section scaling factor for CC processes

Definition at line 70 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

const XSecAlgorithmI* genie::QPMDMDISPXSec::fCharmProdModel
private

Definition at line 65 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

DISStructureFunc genie::QPMDMDISPXSec::fDISSF
mutableprivate

Definition at line 58 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

const DISStructureFuncModelI* genie::QPMDMDISPXSec::fDISSFModel
private

SF model.

Definition at line 61 of file QPMDMDISPXSec.h.

Referenced by LoadConfig().

double genie::QPMDMDISPXSec::fEMScale
private

cross section scaling factor for EM processes

Definition at line 72 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

double genie::QPMDMDISPXSec::fgzp
private

Coupling to the mediator Zprime.

Definition at line 76 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

const HadronizationModelI* genie::QPMDMDISPXSec::fHadronizationModel
private

hadronic multip. model

Definition at line 62 of file QPMDMDISPXSec.h.

bool genie::QPMDMDISPXSec::fInInitPhase
private

Definition at line 59 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and QPMDMDISPXSec().

double genie::QPMDMDISPXSec::fMedMass
private

Mediator mass.

Definition at line 75 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

double genie::QPMDMDISPXSec::fNCScale
private

cross section scaling factor for NC processes

Definition at line 71 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

double genie::QPMDMDISPXSec::fQchiL
private

Left-handed DM charge.

Definition at line 77 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

double genie::QPMDMDISPXSec::fQchiR
private

Right-handed DM charge.

Definition at line 78 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

double genie::QPMDMDISPXSec::fQchiS
private

Scalar DM charge.

Definition at line 79 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

double genie::QPMDMDISPXSec::fSin48w
private

sin^4(Weingberg angle)

Definition at line 73 of file QPMDMDISPXSec.h.

Referenced by LoadConfig().

bool genie::QPMDMDISPXSec::fUseCache
private

cache reduction factors used in joining scheme

Definition at line 68 of file QPMDMDISPXSec.h.

Referenced by LoadConfig().

bool genie::QPMDMDISPXSec::fUsingDisResJoin
private

use a DMDIS/RES joining scheme?

Definition at line 67 of file QPMDMDISPXSec.h.

int genie::QPMDMDISPXSec::fVelMode
private

velcoity dependence for xsec

Definition at line 74 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

double genie::QPMDMDISPXSec::fWcut
private

apply DMDIS/RES joining scheme < Wcut

Definition at line 69 of file QPMDMDISPXSec.h.

const XSecIntegratorI* genie::QPMDMDISPXSec::fXSecIntegrator
private

diff. xsec integrator

Definition at line 63 of file QPMDMDISPXSec.h.

Referenced by Integral(), and LoadConfig().


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