GENIEGenerator
Loading...
Searching...
No Matches
genie::BertuzzoDNuCOHPXSec Class Reference

Differential cross section for v+As coherent elastic scattering.Coherent DNu.
Is a concrete implementation of the XSecAlgorithmI interface.
. More...

#include <BertuzzoDNuCOHPXSec.h>

Inheritance diagram for genie::BertuzzoDNuCOHPXSec:
[legend]
Collaboration diagram for genie::BertuzzoDNuCOHPXSec:
[legend]

Public Member Functions

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

Private Attributes

const XSecIntegratorIfXSecIntegrator
 cross section integrator
const EngelFormFactorfFF
 Engel Form Factor algorithm.
double fEps2
std::array< double, 4 > fMixing2s
double fAlpha_D
double fDNuMass
double fDNuMass2
double fDMediatorMass
double fDMediatorMass2

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

Differential cross section for v+As coherent elastic scattering.Coherent DNu.
Is a concrete implementation of the XSecAlgorithmI interface.
.

References:\n E.Bertuzzo, S.Jana, P.A.N.Machado, R. Zukanovich Funcal
PhysRevLett.121.241801 (2018)
Author
Author: Iker de Icaza <i.de-icaza-astiz \at sussex.ac.uk> University of Sussex

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

Created:\n June 12, 2020
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 35 of file BertuzzoDNuCOHPXSec.h.

Constructor & Destructor Documentation

◆ BertuzzoDNuCOHPXSec() [1/2]

BertuzzoDNuCOHPXSec::BertuzzoDNuCOHPXSec ( )

Definition at line 34 of file BertuzzoDNuCOHPXSec.cxx.

34 :
35XSecAlgorithmI("genie::BertuzzoDNuCOHPXSec")
36{
37
38}

References genie::XSecAlgorithmI::XSecAlgorithmI().

◆ BertuzzoDNuCOHPXSec() [2/2]

BertuzzoDNuCOHPXSec::BertuzzoDNuCOHPXSec ( string config)

Definition at line 40 of file BertuzzoDNuCOHPXSec.cxx.

40 :
41XSecAlgorithmI("genie::BertuzzoDNuCOHPXSec", config)
42{
43
44}

References genie::XSecAlgorithmI::XSecAlgorithmI().

◆ ~BertuzzoDNuCOHPXSec()

BertuzzoDNuCOHPXSec::~BertuzzoDNuCOHPXSec ( )
virtual

Definition at line 46 of file BertuzzoDNuCOHPXSec.cxx.

47{
48
49}

Member Function Documentation

◆ Configure() [1/2]

void BertuzzoDNuCOHPXSec::Configure ( const Registry & config)
overridevirtual

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 148 of file BertuzzoDNuCOHPXSec.cxx.

149{
150 Algorithm::Configure(config);
151 this->LoadConfig();
152}
virtual void Configure(const Registry &config)
Definition Algorithm.cxx:62

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

◆ Configure() [2/2]

void BertuzzoDNuCOHPXSec::Configure ( string config)
overridevirtual

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 154 of file BertuzzoDNuCOHPXSec.cxx.

155{
156 Algorithm::Configure(config);
157 this->LoadConfig();
158}

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

◆ Integral()

double BertuzzoDNuCOHPXSec::Integral ( const Interaction * i) const
overridevirtual

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

Implements genie::XSecAlgorithmI.

Definition at line 105 of file BertuzzoDNuCOHPXSec.cxx.

106{
107 double xsec = fXSecIntegrator->Integrate(this,interaction);
108 return xsec;
109}
const XSecIntegratorI * fXSecIntegrator
cross section integrator

References fXSecIntegrator.

◆ LoadConfig()

void BertuzzoDNuCOHPXSec::LoadConfig ( void )
private

Definition at line 160 of file BertuzzoDNuCOHPXSec.cxx.

161{
162
163 bool good_configuration = true ;
164
165 double DKineticMixing = 0.;
166 this->GetParam("Dark-KineticMixing", DKineticMixing);
167 fEps2 = DKineticMixing * DKineticMixing;
168
169 bool force_unitarity = false ;
170 GetParam( "Dark-Mixing-ForceUnitarity", force_unitarity ) ;
171
172 unsigned int n_min_mixing = force_unitarity ? 3 : 4 ;
173
174 std::vector<double> DMixing2s; // |U_{\alpha 4}|^2
175 this->GetParamVect("Dark-Mixings2", DMixing2s);
176
177 // check whether we have enough mixing elements
178 if ( DMixing2s.size () < n_min_mixing ) {
179 good_configuration = false ;
180 LOG("BertuzzoDNuCOH", pERROR )
181 << "Not enough mixing elements specified, only specified "
182 << DMixing2s.size() << " / " << n_min_mixing ;
183 }
184
185 double tot_mix = 0.;
186 for( unsigned int i = 0; i < n_min_mixing ; ++i ) {
187 if ( DMixing2s[i] < 0. ) {
188 good_configuration = false ;
189 LOG("BertuzzoDNuCOH", pERROR )
190 << "Mixing " << i << " non positive: " << DMixing2s[i] ;
191 continue ;
192 }
193 tot_mix += fMixing2s[i] = DMixing2s[i] ;
194 }
195
196 if ( force_unitarity ) {
197 fMixing2s[3] = 1. - tot_mix ;
198 }
199 if ( DMixing2s[3] < 0. ) {
200 good_configuration = false ;
201 LOG("BertuzzoDNuCOH", pERROR )
202 << "Mixing D4 non positive: " << DMixing2s[3] ;
203 }
204
205 this->GetParam("Dark-Alpha", fAlpha_D);
206
207 fDNuMass = 0.;
208 this->GetParam("Dark-NeutrinoMass", fDNuMass);
210
211 fDMediatorMass = 0.;
212 this->GetParam("Dark-MediatorMass", fDMediatorMass);
214
216 dynamic_cast<const XSecIntegratorI *> (this->SubAlg("XSec-Integrator"));
217 assert(fXSecIntegrator);
218 fFF = dynamic_cast<const EngelFormFactor *> (this->SubAlg("FormFactor"));
219 assert(fFF);
220
221 if ( ! good_configuration ) {
222 LOG("BertuzzoDNuCOH", pFATAL ) << "Wrong configuration. Exiting" ;
223 exit ( 78 ) ;
224 }
225
226}
#define pERROR
Definition Messenger.h:59
#define pFATAL
Definition Messenger.h:56
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
int GetParamVect(const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
Handle to load vectors of parameters.
const Algorithm * SubAlg(const RgKey &registry_key) const
const EngelFormFactor * fFF
Engel Form Factor algorithm.
std::array< double, 4 > fMixing2s

References fAlpha_D, fDMediatorMass, fDMediatorMass2, fDNuMass, fDNuMass2, fEps2, fFF, fMixing2s, fXSecIntegrator, genie::Algorithm::GetParam(), genie::Algorithm::GetParamVect(), LOG, pERROR, pFATAL, and genie::Algorithm::SubAlg().

Referenced by Configure(), and Configure().

◆ ValidKinematics()

bool BertuzzoDNuCOHPXSec::ValidKinematics ( const Interaction * i) const
overridevirtual

Is the input kinematical point a physically allowed one?

Reimplemented from genie::XSecAlgorithmI.

Definition at line 128 of file BertuzzoDNuCOHPXSec.cxx.

129{
130 if(interaction->TestBit(kISkipKinematicChk)) return true;
131
132 if(!interaction->PhaseSpace().IsAboveThreshold()) return false;
133
134 const double E = interaction->InitState().ProbeE(kRfLab);
135 const double M = interaction->InitState().Tgt().Mass();
136 const TLorentzVector& DNu = interaction->Kine().FSLeptonP4();
137
138 const double tl = DNu.E()*(M+E) - E*M - 0.5*fDNuMass2;
139 const double tr = E * DNu.P();
140
141 if(tl < -1.*tr) return false;
142 if(tl > tr) return false;
143
144 return true;
145
146}
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
Definition Interaction.h:48
@ kRfLab
Definition RefFrame.h:26

References fDNuMass2, genie::Kinematics::FSLeptonP4(), genie::Interaction::InitState(), genie::KPhaseSpace::IsAboveThreshold(), genie::Interaction::Kine(), genie::kISkipKinematicChk, genie::kRfLab, genie::Target::Mass(), genie::Interaction::PhaseSpace(), genie::InitialState::ProbeE(), and genie::InitialState::Tgt().

Referenced by XSec().

◆ ValidProcess()

bool BertuzzoDNuCOHPXSec::ValidProcess ( const Interaction * i) const
overridevirtual

Can this cross section algorithm handle the input process?

Implements genie::XSecAlgorithmI.

Definition at line 111 of file BertuzzoDNuCOHPXSec.cxx.

112{
113 if(interaction->TestBit(kISkipProcessChk)) return true;
114
115 const ProcessInfo & proc_info = interaction->ProcInfo();
116 if ( ! proc_info.IsCoherentElastic() ) return false;
117 if ( ! proc_info.IsDarkNeutralCurrent() ) return false ;
118
119 const InitialState & init_state = interaction->InitState();
120 if ( ! pdg::IsNeutrino( TMath::Abs( init_state.ProbePdg() ) ) ) return false ;
121
122 const Target & target = init_state.Tgt();
123 if( ! target.IsNucleus() ) return false ;
124
125 return true;
126}
const Target & Tgt(void) const
int ProbePdg(void) const
bool IsCoherentElastic(void) const
bool IsDarkNeutralCurrent(void) const
bool IsNucleus(void) const
Definition Target.cxx:272
bool IsNeutrino(int pdgc)
Definition PDGUtils.cxx:110
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition Interaction.h:47

References genie::Interaction::InitState(), genie::ProcessInfo::IsCoherentElastic(), genie::ProcessInfo::IsDarkNeutralCurrent(), genie::pdg::IsNeutrino(), genie::Target::IsNucleus(), genie::kISkipProcessChk, genie::InitialState::ProbePdg(), genie::Interaction::ProcInfo(), and genie::InitialState::Tgt().

Referenced by XSec().

◆ XSec()

double BertuzzoDNuCOHPXSec::XSec ( const Interaction * i,
KinePhaseSpace_t k ) const
overridevirtual

Compute the cross section for the input interaction.

Implements genie::XSecAlgorithmI.

Definition at line 51 of file BertuzzoDNuCOHPXSec.cxx.

53{
54 if(! this -> ValidProcess (interaction) ) return 0.;
55 if(! this -> ValidKinematics (interaction) ) return 0.;
56
57 const InitialState & init_state = interaction -> InitState();
58 const Kinematics & kinematics = interaction -> Kine();
59 const Target & target = init_state.Tgt();
60
61 // User inputs to the calculation
62 const int nu_pdg = init_state.ProbePdg();
63 const double E = init_state.ProbeE(kRfLab); // neutrino energy, units: GeV
64 const double Q2 = kinematics.Q2(); // momentum transfer, units: GeV^2
65 const double TE = kinematics.HadSystP4().E(); // energy of the target
66 const unsigned int Z = target.Z(); // number of protons
67
68 // select the mixing depending on the incoming neutrino
69 unsigned short nu_i = 3;
70 if( pdg::IsNuE( TMath::Abs( nu_pdg ) ) ) nu_i = 0;
71 else if ( pdg::IsNuMu( TMath::Abs( nu_pdg ) ) ) nu_i = 1;
72 else if ( pdg::IsNuTau( TMath::Abs( nu_pdg ) ) ) nu_i = 2;
73 const double DTheta2 = fMixing2s[nu_i] * fMixing2s[3] ;
74
75 // Target atomic mass number and mass calculated from inputs
76 const double M = target.Mass(); // units: GeV
77
78 const double FF = fFF->FormFactor(Q2, target);
79 const double TT = TE - M;
80
81 // auxiliary variables
82 const double E2 = E * E;
83 const double Z2 = Z * Z;
84 const double FF2 = FF * FF;
85 const double TTDiff = TT - M;
86
87 const double const_factor = 2* constants::kPi * constants::kAem ;
88 const double model_params = fEps2 * DTheta2 * fAlpha_D ;
89
90 const double num_fact1 = FF2 * Z2;
91 const double num_fact21 = fDNuMass2 * (TTDiff - 2.*E);
92 const double num_fact22 = 2. * M * (2.*E2 - 2.*TT*E + TT*TTDiff);
93 const double den_fact1 = 1. / (E2);
94 const double den_fact2 = TMath::Power((fDMediatorMass2 + 2.*TT*M), -2.);
95
96 if(kps == kPSEDNufE) {
97 const double xsec = const_factor * model_params * num_fact1 *
98 (num_fact21 + num_fact22) * den_fact1 * den_fact2;
99
100 return xsec;
101 }
102 return 0.;
103}
bool ValidProcess(const Interaction *i) const override
Can this cross section algorithm handle the input process?
bool ValidKinematics(const Interaction *i) const override
Is the input kinematical point a physically allowed one?
double ProbeE(RefFrame_t rf) const
double Q2(bool selected=false) const
const TLorentzVector & HadSystP4(void) const
Definition Kinematics.h:66
int Z(void) const
Definition Target.h:68
double Mass(void) const
Definition Target.cxx:224
bool IsNuE(int pdgc)
Definition PDGUtils.cxx:158
bool IsNuMu(int pdgc)
Definition PDGUtils.cxx:163
bool IsNuTau(int pdgc)
Definition PDGUtils.cxx:168
double Q2(const Interaction *const i)

References fAlpha_D, fDMediatorMass2, fDNuMass2, fEps2, fFF, fMixing2s, genie::pdg::IsNuE(), genie::pdg::IsNuMu(), genie::pdg::IsNuTau(), genie::constants::kAem, genie::constants::kPi, genie::kPSEDNufE, genie::kRfLab, genie::Target::Mass(), genie::InitialState::ProbeE(), genie::InitialState::ProbePdg(), genie::InitialState::Tgt(), ValidKinematics(), ValidProcess(), and genie::Target::Z().

Member Data Documentation

◆ fAlpha_D

double genie::BertuzzoDNuCOHPXSec::fAlpha_D
private

Definition at line 66 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fDMediatorMass

double genie::BertuzzoDNuCOHPXSec::fDMediatorMass
private

Definition at line 69 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig().

◆ fDMediatorMass2

double genie::BertuzzoDNuCOHPXSec::fDMediatorMass2
private

Definition at line 69 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fDNuMass

double genie::BertuzzoDNuCOHPXSec::fDNuMass
private

Definition at line 68 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig().

◆ fDNuMass2

double genie::BertuzzoDNuCOHPXSec::fDNuMass2
private

Definition at line 68 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig(), ValidKinematics(), and XSec().

◆ fEps2

double genie::BertuzzoDNuCOHPXSec::fEps2
private

Definition at line 60 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fFF

const EngelFormFactor* genie::BertuzzoDNuCOHPXSec::fFF
private

Engel Form Factor algorithm.

Definition at line 58 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fMixing2s

std::array<double, 4> genie::BertuzzoDNuCOHPXSec::fMixing2s
private

Definition at line 62 of file BertuzzoDNuCOHPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fXSecIntegrator

const XSecIntegratorI* genie::BertuzzoDNuCOHPXSec::fXSecIntegrator
private

cross section integrator

Definition at line 57 of file BertuzzoDNuCOHPXSec.h.

Referenced by Integral(), and LoadConfig().


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