GENIEGenerator
Loading...
Searching...
No Matches
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:
[legend]
Collaboration diagram for genie::QPMDMDISPXSec:
[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.
double Integral (const Interaction *i) const
bool ValidProcess (const Interaction *i) const
 Can this cross section algorithm handle the input process?
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?
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.
virtual AlgStatus_t GetStatus (void) const
 Get algorithm status.
virtual bool AllowReconfig (void) const
virtual AlgCmp_t Compare (const Algorithm *alg) const
 Compare with input algorithm.
virtual void SetId (const AlgId &id)
 Set algorithm ID.
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.

Private Member Functions

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

Private Attributes

DISStructureFunc fDISSF
bool fInInitPhase
const DISStructureFuncModelIfDISSFModel
 SF model.
const HadronizationModelI * fHadronizationModel
 hadronic multip. model
const XSecIntegratorIfXSecIntegrator
 diff. xsec integrator
const XSecAlgorithmIfCharmProdModel
bool fUsingDisResJoin
 use a DMDIS/RES joining scheme?
bool fUseCache
 cache reduction factors used in joining scheme
double fWcut
 apply DMDIS/RES joining scheme < Wcut
double fCCScale
 cross section scaling factor for CC processes
double fNCScale
 cross section scaling factor for NC processes
double fEMScale
 cross section scaling factor for EM processes
double fSin48w
 sin^4(Weingberg angle)
int fVelMode
 velcoity dependence for xsec
double fMedMass
 Mediator mass.
double fgzp
 Coupling to the mediator Zprime.
double fQchiL
 Left-handed DM charge.
double fQchiR
 Right-handed DM charge.
double fQchiS
 Scalar DM charge.

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.
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.
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.
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
int AddLowRegistry (Registry *rp, bool owns=true)
 add registry with lowest priority, also update ownership
int MergeTopRegistry (const Registry &r)
int AddTopRegisties (const vector< Registry * > &rs, bool owns=false)
 Add registries with top priority, also udated Ownerships.
Protected Attributes inherited from genie::Algorithm
bool fAllowReconfig
bool fOwnsSubstruc
 true if it owns its substructure (sub-algs,...)
AlgId fID
 algorithm name and configuration set
vector< Registry * > fConfVect
vector< bool > fOwnerships
 ownership for every registry in fConfVect
AlgStatus_t fStatus
 algorithm execution status
AlgMapfOwnedSubAlgMp
 local pool for owned sub-algs (taken out of the factory pool)

Detailed Description

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

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

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

Created:\n September 4, 2017
License:\n Copyright (c) 2003-2025, 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() [1/2]

QPMDMDISPXSec::QPMDMDISPXSec ( )

Definition at line 49 of file QPMDMDISPXSec.cxx.

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

References fInInitPhase, and genie::XSecAlgorithmI::XSecAlgorithmI().

◆ QPMDMDISPXSec() [2/2]

QPMDMDISPXSec::QPMDMDISPXSec ( string config)

Definition at line 55 of file QPMDMDISPXSec.cxx.

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

References fInInitPhase, and genie::XSecAlgorithmI::XSecAlgorithmI().

◆ ~QPMDMDISPXSec()

QPMDMDISPXSec::~QPMDMDISPXSec ( )
virtual

Definition at line 61 of file QPMDMDISPXSec.cxx.

62{
63
64}

Member Function Documentation

◆ Configure() [1/2]

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.

252{
253 Algorithm::Configure(config);
254 this->LoadConfig();
255}
virtual void Configure(const Registry &config)
Definition Algorithm.cxx:62

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

◆ Configure() [2/2]

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.

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}
string RgKey
static AlgConfigPool * Instance()

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

◆ DMDISRESJoinSuppressionFactor()

double genie::QPMDMDISPXSec::DMDISRESJoinSuppressionFactor ( const Interaction * in) const
private

◆ Integral()

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.

227{
228 double xsec = fXSecIntegrator->Integrate(this,interaction);
229 return xsec;
230}
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator

References fXSecIntegrator.

◆ LoadConfig()

void QPMDMDISPXSec::LoadConfig ( void )
private

Definition at line 272 of file QPMDMDISPXSec.cxx.

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}
#define pDEBUG
Definition Messenger.h:63
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
string Key(void) const
Definition AlgId.h:46
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Algorithm * SubAlg(const RgKey &registry_key) const
virtual const AlgId & Id(void) const
Get algorithm ID.
Definition Algorithm.h:98
static Cache * Instance(void)
Definition Cache.cxx:67
void RmMatchedCacheBranches(string key_substring)
Definition Cache.cxx:127
static PDGLibrary * Instance(void)
TParticlePDG * Find(int pdgc, bool must_exist=true)
double fSin48w
sin^4(Weingberg angle)
double fEMScale
cross section scaling factor for EM processes
double fQchiL
Left-handed DM charge.
DISStructureFunc fDISSF
int fVelMode
velcoity dependence for xsec
double fNCScale
cross section scaling factor for NC processes
double fgzp
Coupling to the mediator Zprime.
double fQchiR
Right-handed DM charge.
double fQchiS
Scalar DM charge.
double fMedMass
Mediator mass.
double fCCScale
cross section scaling factor for CC processes
const DISStructureFuncModelI * fDISSFModel
SF model.
const XSecAlgorithmI * fCharmProdModel
bool fUseCache
cache reduction factors used in joining scheme
bool BareXSecPreCalc(void) const
Definition RunOpt.h:53
static RunOpt * Instance(void)
Definition RunOpt.cxx:54
const int kPdgMediator
Definition PDGCodes.h:220

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::Cache::Instance(), genie::PDGLibrary::Instance(), genie::RunOpt::Instance(), genie::AlgId::Key(), genie::kPdgMediator, LOG, pDEBUG, genie::Cache::RmMatchedCacheBranches(), genie::Algorithm::SubAlg(), and genie::XSecAlgorithmI::XSecAlgorithmI().

Referenced by Configure(), and Configure().

◆ ValidProcess()

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.

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}
const Target & Tgt(void) const
int ProbePdg(void) const
bool IsDarkMatterDeepInelastic(void) const
int HitNucPdg(void) const
Definition Target.cxx:304
bool HitNucIsSet(void) const
Definition Target.cxx:283
bool IsAntiDarkMatter(int pdgc)
Definition PDGUtils.cxx:133
bool IsDarkMatter(int pdgc)
Definition PDGUtils.cxx:127
bool IsNeutronOrProton(int pdgc)
Definition PDGUtils.cxx:351
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition Interaction.h:47

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().

◆ XSec()

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.

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}
#define pINFO
Definition Messenger.h:62
double ProbeE(RefFrame_t rf) const
double y(bool selected=false) const
double x(bool selected=false) const
bool IsWeakNC(void) const
bool IsWeakCC(void) const
bool IsEM(void) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
int N(void) const
Definition Target.h:69
int Z(void) const
Definition Target.h:68
double HitNucMass(void) const
Definition Target.cxx:233
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool IsProton(int pdgc)
Definition PDGUtils.cxx:336
double Q2(const Interaction *const i)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
double XYtoQ2(double Ev, double M, double x, double y)
double J(double q0, double q3, double Enu, double ml)
Definition MECUtils.cxx:147
@ kRfHitNucRest
Definition RefFrame.h:30
const UInt_t kIAssumeFreeNucleon
Definition Interaction.h:49

References genie::Interaction::ExclTagPtr(), 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::kinematics::Jacobian(), genie::kIAssumeFreeNucleon, genie::constants::kPi, genie::kPSxyfE, genie::kRfHitNucRest, LOG, genie::Target::N(), pDEBUG, pINFO, genie::InitialState::ProbeE(), genie::InitialState::ProbePdg(), genie::XclsTag::SetCharm(), genie::InitialState::Tgt(), genie::XclsTag::UnsetCharm(), genie::XSecAlgorithmI::ValidKinematics(), ValidProcess(), genie::Kinematics::x(), genie::utils::kinematics::XYtoQ2(), genie::Kinematics::y(), and genie::Target::Z().

Member Data Documentation

◆ fCCScale

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().

◆ fCharmProdModel

const XSecAlgorithmI* genie::QPMDMDISPXSec::fCharmProdModel
private

Definition at line 65 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fDISSF

DISStructureFunc genie::QPMDMDISPXSec::fDISSF
mutableprivate

Definition at line 58 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fDISSFModel

const DISStructureFuncModelI* genie::QPMDMDISPXSec::fDISSFModel
private

SF model.

Definition at line 61 of file QPMDMDISPXSec.h.

Referenced by LoadConfig().

◆ fEMScale

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().

◆ fgzp

double genie::QPMDMDISPXSec::fgzp
private

Coupling to the mediator Zprime.

Definition at line 76 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fHadronizationModel

const HadronizationModelI* genie::QPMDMDISPXSec::fHadronizationModel
private

hadronic multip. model

Definition at line 62 of file QPMDMDISPXSec.h.

◆ fInInitPhase

bool genie::QPMDMDISPXSec::fInInitPhase
private

Definition at line 59 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), QPMDMDISPXSec(), and QPMDMDISPXSec().

◆ fMedMass

double genie::QPMDMDISPXSec::fMedMass
private

Mediator mass.

Definition at line 75 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fNCScale

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().

◆ fQchiL

double genie::QPMDMDISPXSec::fQchiL
private

Left-handed DM charge.

Definition at line 77 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fQchiR

double genie::QPMDMDISPXSec::fQchiR
private

Right-handed DM charge.

Definition at line 78 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fQchiS

double genie::QPMDMDISPXSec::fQchiS
private

Scalar DM charge.

Definition at line 79 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fSin48w

double genie::QPMDMDISPXSec::fSin48w
private

sin^4(Weingberg angle)

Definition at line 73 of file QPMDMDISPXSec.h.

Referenced by LoadConfig().

◆ fUseCache

bool genie::QPMDMDISPXSec::fUseCache
private

cache reduction factors used in joining scheme

Definition at line 68 of file QPMDMDISPXSec.h.

Referenced by LoadConfig().

◆ fUsingDisResJoin

bool genie::QPMDMDISPXSec::fUsingDisResJoin
private

use a DMDIS/RES joining scheme?

Definition at line 67 of file QPMDMDISPXSec.h.

◆ fVelMode

int genie::QPMDMDISPXSec::fVelMode
private

velcoity dependence for xsec

Definition at line 74 of file QPMDMDISPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fWcut

double genie::QPMDMDISPXSec::fWcut
private

apply DMDIS/RES joining scheme < Wcut

Definition at line 69 of file QPMDMDISPXSec.h.

◆ fXSecIntegrator

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: