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::PaisQELLambdaPXSec Class Reference

Implementation of the quasi-elastic scattering formula for production of particles with different masses than the target. More...

#include <PaisQELLambdaPXSec.h>

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

Public Member Functions

 PaisQELLambdaPXSec ()
 
 PaisQELLambdaPXSec (string config)
 
virtual ~PaisQELLambdaPXSec ()
 
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...
 
bool ValidKinematics (const Interaction *i) const
 Is the input kinematical point a physically allowed one? More...
 
void Configure (const Registry &config)
 
void Configure (string param_set)
 
- 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. 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 MHyperon (const Interaction *interaction) const
 

Private Attributes

QELFormFactors fFormFactors
 
const QELFormFactorsModelIfFormFactorsModel
 
const XSecIntegratorIfXSecIntegrator
 
double fSin8c2
 

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

Implementation of the quasi-elastic scattering formula for production of particles with different masses than the target.

References:
Weak Interactions at High Energies A. Pais, Annals of Physics 63, 361-392 (1971) Implemented here is equation 2.34 of the Pais paper, but ignoring lepton mass terms. This equation is given also as Equation 3.37 in the Llewellyn-Smith paper, though this paper uses slightly different notation than that used in the Pais paper, and introduces a small error in the kinematic coefficient of the w2 term. The notation here by and large follows that of the Llewelyn-Smith paper.
Author
Hugh Gallagher Tufts University
Created:
June 10, 2004
License:
Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org

Definition at line 39 of file PaisQELLambdaPXSec.h.

Constructor & Destructor Documentation

PaisQELLambdaPXSec::PaisQELLambdaPXSec ( )

Definition at line 37 of file PaisQELLambdaPXSec.cxx.

37  :
38 XSecAlgorithmI("genie::PaisQELLambdaPXSec")
39 {
40 
41 }
PaisQELLambdaPXSec::PaisQELLambdaPXSec ( string  config)

Definition at line 43 of file PaisQELLambdaPXSec.cxx.

43  :
44 XSecAlgorithmI("genie::PaisQELLambdaPXSec", config)
45 {
46 
47 }
PaisQELLambdaPXSec::~PaisQELLambdaPXSec ( )
virtual

Definition at line 49 of file PaisQELLambdaPXSec.cxx.

50 {
51 
52 }

Member Function Documentation

void PaisQELLambdaPXSec::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 208 of file PaisQELLambdaPXSec.cxx.

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

209 {
210  Algorithm::Configure(config);
211  this->LoadConfig();
212 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
void PaisQELLambdaPXSec::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 214 of file PaisQELLambdaPXSec.cxx.

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

215 {
216  Algorithm::Configure(param_set);
217  this->LoadConfig();
218 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
double PaisQELLambdaPXSec::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 145 of file PaisQELLambdaPXSec.cxx.

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

146 {
147 
148  double xsec = fXSecIntegrator->Integrate(this,interaction);
149  return xsec;
150 }
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
const XSecIntegratorI * fXSecIntegrator
void PaisQELLambdaPXSec::LoadConfig ( void  )
private

Definition at line 220 of file PaisQELLambdaPXSec.cxx.

References fFormFactors, fFormFactorsModel, fSin8c2, fXSecIntegrator, genie::Algorithm::GetParam(), genie::QELFormFactors::SetModel(), and genie::Algorithm::SubAlg().

Referenced by Configure().

221 {
222 
223  double thc ;
224  GetParam( "CabibboAngle", thc ) ;
225  fSin8c2 = TMath::Power(TMath::Sin(thc), 2);
226 
227  // load QEL form factors model
228  fFormFactorsModel = dynamic_cast<const QELFormFactorsModelI *> (
229  this->SubAlg("FormFactorsAlg"));
230  assert(fFormFactorsModel);
231  fFormFactors.SetModel(fFormFactorsModel); // <-- attach algorithm
232 
233  // load XSec Integrator
235  dynamic_cast<const XSecIntegratorI *> (this->SubAlg("XSec-Integrator"));
236  assert(fXSecIntegrator);
237 }
Cross Section Integrator Interface.
void SetModel(const QELFormFactorsModelI *model)
Attach an algorithm.
Pure abstract base class. Defines the QELFormFactorsModelI interface to be implemented by any algorit...
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const XSecIntegratorI * fXSecIntegrator
const QELFormFactorsModelI * fFormFactorsModel
const Algorithm * SubAlg(const RgKey &registry_key) const
Definition: Algorithm.cxx:345
double PaisQELLambdaPXSec::MHyperon ( const Interaction interaction) const
private

Definition at line 136 of file PaisQELLambdaPXSec.cxx.

References genie::Interaction::ExclTag(), genie::PDGLibrary::Find(), genie::PDGLibrary::Instance(), and genie::XclsTag::StrangeHadronPdg().

Referenced by ValidKinematics(), and XSec().

137 {
138  const XclsTag & xcls = interaction->ExclTag();
139 
140  int pdgc = xcls.StrangeHadronPdg();
141  double MR = PDGLibrary::Instance()->Find(pdgc)->Mass();
142  return MR;
143 }
Contains minimal information for tagging exclusive processes.
Definition: XclsTag.h:39
int StrangeHadronPdg(void) const
Definition: XclsTag.h:55
static PDGLibrary * Instance(void)
Definition: PDGLibrary.cxx:68
const XclsTag & ExclTag(void) const
Definition: Interaction.h:72
TParticlePDG * Find(int pdgc, bool must_exist=true)
Definition: PDGLibrary.cxx:86
bool PaisQELLambdaPXSec::ValidKinematics ( const Interaction i) const
virtual

Is the input kinematical point a physically allowed one?

Reimplemented from genie::XSecAlgorithmI.

Definition at line 186 of file PaisQELLambdaPXSec.cxx.

References genie::Interaction::FSPrimLepton(), genie::Target::HitNucP4Ptr(), genie::Interaction::InitState(), genie::kISkipKinematicChk, genie::kRfHitNucRest, MHyperon(), genie::InitialState::ProbeE(), and genie::InitialState::Tgt().

Referenced by XSec().

188 {
189  if(interaction->TestBit(kISkipKinematicChk)) return true;
190 
191  const InitialState & init_state = interaction->InitState();
192  double E = init_state.ProbeE(kRfHitNucRest);
193 
194  //resonance, final state primary lepton & nucleon mass
195  double MR = this -> MHyperon (interaction);
196  double ml = interaction->FSPrimLepton()->Mass();
197  double Mnuc = init_state.Tgt().HitNucP4Ptr()->M();
198  double Mnuc2 = TMath::Power(Mnuc,2);
199 
200  //resonance threshold
201  double ER = ( TMath::Power(MR+ml,2) - Mnuc2 ) / (2*Mnuc);
202 
203  if(E <= ER) return false;
204 
205  return true;
206 }
double MHyperon(const Interaction *interaction) const
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
Definition: Interaction.h:48
TLorentzVector * HitNucP4Ptr(void) const
Definition: Target.cxx:247
const Target & Tgt(void) const
Definition: InitialState.h:66
double ProbeE(RefFrame_t rf) const
Initial State information.
Definition: InitialState.h:48
bool PaisQELLambdaPXSec::ValidProcess ( const Interaction i) const
virtual

Can this cross section algorithm handle the input process?

Implements genie::XSecAlgorithmI.

Definition at line 152 of file PaisQELLambdaPXSec.cxx.

References genie::Interaction::ExclTag(), genie::Target::HitNucPdg(), genie::Interaction::InitState(), genie::XclsTag::IsInclusiveStrange(), genie::pdg::IsNeutron(), genie::pdg::IsProton(), genie::ProcessInfo::IsQuasiElastic(), genie::XclsTag::IsStrangeEvent(), genie::ProcessInfo::IsWeak(), genie::kISkipProcessChk, genie::kPdgLambda, genie::kPdgSigma0, genie::kPdgSigmaM, genie::Interaction::ProcInfo(), genie::XclsTag::StrangeHadronPdg(), and genie::InitialState::Tgt().

Referenced by XSec().

154 {
155  // Make sure we are dealing with one of the following channels:
156  // v + n --> mu+ + Sigma^{-}
157  // v + p --> mu+ + Lambda^{0}
158  // v + p --> mu+ + Sigma^{0}
159 
160  if(interaction->TestBit(kISkipProcessChk)) return true;
161 
162  const XclsTag & xcls = interaction->ExclTag();
163  const InitialState & init_state = interaction->InitState();
164  const ProcessInfo & proc_info = interaction->ProcInfo();
165 
166  bool is_exclusive_strange = (xcls.IsStrangeEvent() && !xcls.IsInclusiveStrange());
167  if(!is_exclusive_strange) return false;
168 
169  if(!proc_info.IsQuasiElastic()) return false;
170  if(!proc_info.IsWeak()) return false;
171 
172  bool isP = pdg::IsProton ( init_state.Tgt().HitNucPdg() );
173  bool isN = pdg::IsNeutron( init_state.Tgt().HitNucPdg() );
174 
175  int pdgc = xcls.StrangeHadronPdg();
176 
177  bool can_handle = (
178  (pdgc == kPdgSigmaM && isN) || /* v + n -> l + #Sigma^{-} */
179  (pdgc == kPdgLambda && isP) || /* v + p -> l + #Lambda^{0} */
180  (pdgc == kPdgSigma0 && isP) /* v + p -> l + #Sigma^{0} */
181  );
182 
183  return can_handle;
184 }
bool IsWeak(void) const
const int kPdgLambda
Definition: PDGCodes.h:85
int HitNucPdg(void) const
Definition: Target.cxx:304
bool IsQuasiElastic(void) const
Definition: ProcessInfo.cxx:69
bool IsStrangeEvent(void) const
Definition: XclsTag.h:53
const int kPdgSigma0
Definition: PDGCodes.h:88
Contains minimal information for tagging exclusive processes.
Definition: XclsTag.h:39
bool IsNeutron(int pdgc)
Definition: PDGUtils.cxx:341
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:336
int StrangeHadronPdg(void) const
Definition: XclsTag.h:55
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:46
const int kPdgSigmaM
Definition: PDGCodes.h:89
bool IsInclusiveStrange(void) const
Definition: XclsTag.cxx:71
const Target & Tgt(void) const
Definition: InitialState.h:66
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition: Interaction.h:47
Initial State information.
Definition: InitialState.h:48
double PaisQELLambdaPXSec::XSec ( const Interaction i,
KinePhaseSpace_t  k 
) const
virtual

Compute the cross section for the input interaction.

Implements genie::XSecAlgorithmI.

Definition at line 54 of file PaisQELLambdaPXSec.cxx.

References genie::QELFormFactors::Calculate(), genie::QELFormFactors::F1V(), genie::QELFormFactors::FA(), fFormFactors, fSin8c2, genie::Interaction::FSPrimLepton(), genie::Target::HitNucMass(), genie::Target::HitNucPdg(), genie::Interaction::InitState(), genie::pdg::IsNeutrino(), genie::pdg::IsProton(), genie::utils::mec::J(), genie::utils::kinematics::Jacobian(), genie::constants::kGF2, genie::kIAssumeFreeNucleon, genie::Interaction::Kine(), genie::constants::kPi, genie::kPSQ2fE, genie::kRfHitNucRest, MHyperon(), genie::Target::N(), genie::InitialState::ProbeE(), genie::InitialState::ProbePdg(), genie::Kinematics::q2(), genie::units::s, genie::InitialState::Tgt(), ValidKinematics(), ValidProcess(), genie::QELFormFactors::xiF2V(), and genie::Target::Z().

56 {
57  if(! this -> ValidProcess (interaction) ) return 0.;
58  if(! this -> ValidKinematics (interaction) ) return 0.;
59 
60  //----- get kinematics & init state - compute auxiliary vars
61  const Kinematics & kinematics = interaction->Kine();
62  const InitialState & init_state = interaction->InitState();
63  const Target & target = init_state.Tgt();
64 
65  //neutrino energy & momentum transfer
66  double E = init_state.ProbeE(kRfHitNucRest);
67  double E2 = E * E;
68  double q2 = kinematics.q2();
69 
70 
71  //resonance mass & nucleon mass
72  double Mnuc = target.HitNucMass();
73  double Mnuc2 = TMath::Power(Mnuc,2);
74 
75  //----- Calculate the differential cross section dxsec/dQ^2
76  double Gf = kGF2 / (2*kPi);
77  double ml = interaction->FSPrimLepton()->Mass();
78  double ml2 = TMath::Power(ml,2);
79  double M1 = Mnuc;
80  double M2 = (this)->MHyperon(interaction);
81  double v = (TMath::Power(M2,2) - Mnuc2 - q2) / (2*Mnuc);
82  double v2 = TMath::Power(v,2);
83  double s = Mnuc2 + 2*Mnuc*E;
84  double u = Mnuc2 + ml2 + 2*v*Mnuc - 2*Mnuc*E;
85 
86 // xsec term changes sign for antineutrinos
87  bool is_neutrino = pdg::IsNeutrino(init_state.ProbePdg());
88  int sign = (is_neutrino) ? -1 : 1;
89 
90 // Calculate the QEL form factors
91  fFormFactors.Calculate(interaction);
92 
93  double F1V = fFormFactors.F1V();
94  double xiF2V = fFormFactors.xiF2V();
95  double FA = fFormFactors.FA();
96 // double Fp = fFormFactors.Fp();
97 
98 // calculate w coefficients
99  //start with Mass terms
100  double Mp = M2 + M1;
101  double Mm = M2 - M1;
102  double Mm2 = TMath::Power(Mm, 2);
103  double Mp2 = TMath::Power(Mp, 2);
104 
105  //Powers of Form Factors
106  double FA2 = TMath::Power(FA, 2);
107 // double FA3 = 0;
108 
109  //Calculate W terms
110 
111  double w1 = (Mm2 - q2)/(4*Mnuc2)*TMath::Power((F1V + xiF2V), 2) + (Mp2 - q2)/(4*Mnuc2) * FA2;
112  double w2 = FA2 + TMath::Power((F1V + xiF2V - Mp * xiF2V / (2 * Mnuc)), 2) - q2 / Mnuc2 * TMath::Power((xiF2V / 2), 2);
113  double w3 = 2 * FA * (F1V + xiF2V);
114 
115  double xsec = Gf*fSin8c2 / (16*Mnuc2*E2) * (-8*Mnuc2*q2*w1 - 4*(Mnuc2*v2 - q2)*w2 - sign*2*(s - u)*q2*w3 + (s-u)*(s-u)*w2);
116  xsec = TMath::Max(xsec,0.);
117 
118  //----- The algorithm computes dxsec/dQ2
119  // Check whether variable tranformation is needed
120  if(kps!=kPSQ2fE) {
121  double J = utils::kinematics::Jacobian(interaction,kPSQ2fE,kps);
122  xsec *= J;
123  }
124 
125  //----- If requested return the free nucleon xsec even for input nuclear tgt
126  if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
127 
128  //----- Nuclear cross section (simple scaling here)
129  int nuc = target.HitNucPdg();
130  int NNucl = (pdg::IsProton(nuc)) ? target.Z() : target.N();
131  xsec *= NNucl;
132 
133  return xsec;
134 }
bool IsNeutrino(int pdgc)
Definition: PDGUtils.cxx:110
double J(double q0, double q3, double Enu, double ml)
Definition: MECUtils.cxx:147
int HitNucPdg(void) const
Definition: Target.cxx:304
double HitNucMass(void) const
Definition: Target.cxx:233
static constexpr double s
Definition: Units.h:95
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
double MHyperon(const Interaction *interaction) const
double q2(bool selected=false) const
Definition: Kinematics.cxx:141
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:336
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
double xiF2V(void) const
Get the computed form factor xi*F2V.
void Calculate(const Interaction *interaction)
Compute the form factors for the input interaction using the attached model.
int N(void) const
Definition: Target.h:69
bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
const UInt_t kIAssumeFreeNucleon
Definition: Interaction.h:49
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
Definition: KineUtils.cxx:130
double F1V(void) const
Get the computed form factor F1V.
const Target & Tgt(void) const
Definition: InitialState.h:66
double ProbeE(RefFrame_t rf) const
double FA(void) const
Get the computed form factor FA.
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
Initial State information.
Definition: InitialState.h:48

Member Data Documentation

QELFormFactors genie::PaisQELLambdaPXSec::fFormFactors
mutableprivate

Definition at line 61 of file PaisQELLambdaPXSec.h.

Referenced by LoadConfig(), and XSec().

const QELFormFactorsModelI* genie::PaisQELLambdaPXSec::fFormFactorsModel
private

Definition at line 62 of file PaisQELLambdaPXSec.h.

Referenced by LoadConfig().

double genie::PaisQELLambdaPXSec::fSin8c2
private

Definition at line 64 of file PaisQELLambdaPXSec.h.

Referenced by LoadConfig(), and XSec().

const XSecIntegratorI* genie::PaisQELLambdaPXSec::fXSecIntegrator
private

Definition at line 63 of file PaisQELLambdaPXSec.h.

Referenced by Integral(), and LoadConfig().


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