GENIEGenerator
Loading...
Searching...
No Matches
AlvarezRusoCOHPiPDXSec.h
Go to the documentation of this file.
1//____________________________________________________________________________
2/*!
3
4\class genie::alvarezruso::AlvarezRusoCOHPiPDXsec
5
6\brief 5d differential cross section for Alvarez-Ruso Coherent Pion Production xsec
7
8\ref
9
10\author Steve Dennis
11 University of Warwick, Rutherford Appleton Laboratory
12
13\created 05/12/2013
14
15\cpright Copyright (c) 2003-2025, The GENIE Collaboration
16 For the full text of the license visit http://copyright.genie-mc.org
17*/
18//____________________________________________________________________________
19#ifndef _AR_COH_MULTIDIFF_H_
20#define _AR_COH_MULTIDIFF_H_
21
22#include <TMath.h>
23#include <Math/SMatrix.h>
24#include <Math/SVector.h>
25#include <Math/LorentzVector.h>
26
31
32#include <complex>
33
34namespace genie
35{
36namespace alvarezruso
37{
38
39class ARWFSolution;
40
45
47{
48 public:
49
50 AlvarezRusoCOHPiPDXSec(unsigned int Z_, unsigned int A_, const current_t current_,
51 const flavour_t flavour_ = kE, const nutype_t nutype = kNu,
52 const formfactors_t ff_ = kNieves);
54
55 // 5d cross section per nucleon
56 double DXSec(const double E_nu_, const double E_l_, const double theta_l_,
57 const double phi_l_, const double theta_pi_, const double phi_pi_);
58
59 void SetDebug(bool debug) { debug_ = debug; };
60
63
64 int GetSampling() const {
65 return fSampling;
66 }
67
68 double GetPiMass() const {
69 return fM_pi;
70 }
71 double GetLeptonMass() const {
72 return fM_l;
73 }
74
75 private:
76 // Fill the ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >s based on the values from the kinematics
77 void SetKinematics();
78
79 // Fill values based on the flavour
80 void SetFlavour();
81
82 // Fill values based on the current
83 void SetCurrent();
84
85 std::complex<double> DeltaCouplingInMed(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum,
86 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pion_momentum, double density_cent);
87 double PiDecayVertex(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pion_momentum, double mass);
88 std::complex<double> DeltaPropagatorInMed(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum);
89 double DeltaWidthPauliBlocked(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum, double density);
90 double DeltaWidthFree(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum);
91 std::complex<double> H(unsigned int i, unsigned int j) const;
93 double PionMomentumCM(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum);
94 double PNVertexFactor(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > momentum, double mass);
95 double DeltaSelfEnergyRe(double density);
96 double DeltaSelfEnergyIm(double density);
97 double DeltaSelfEnergyConstant(double a, double b, double c, double E);
98 std::complex<double> NucleonPropagator(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > nucleon_momentum);
99
100 void NuclearCurrent(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > q, ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pdir, ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pcrs, ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > ppi, std::complex<double> *jPtr);
101
102 // Fill the wavefunctions
103 void SolveWavefunctions();
104
105 //______________________________________________________________
106 // Properties
107
108 bool debug_;
109 // Nucleus
110 unsigned int fZ;
111 unsigned int fA;
112 unsigned int fSampling;
113 // Choice of current
115 // Choice of neutrino flavour
117 // Chocie of initial neutrino type
119 // Choice of form-factor approximation
121 // Constants
123 // Nuclear values
125 // Wavefunction calculator
127
128 // Kinematics of the event
129 double fE_nu; // initial neutrino energy [GeV]
130 double fE_l; // scattered lepton energy [GeV]
131 double fTheta_l; // scattered lepton angle
132 double fTheta_pi; // pion angle
133 double fPhi; // angle between lepton and pion
134
135 double fLastE_pi;
136
137 // Four-momenta of particles and transfers involved
138 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fQ; // momentum-transfer
139 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_nu; // incoming neutrino
140 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_l; // outgoing lepton/neutrino
141 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_pi; // outgoing pion
142 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_n_i; // incoming (stationary) nucleon
143 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_n_o; // outgoing nucleon
144 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_direct; // intermediary particle (Delta/nucleon) in direct diagrams
145 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_cross; // intermediary particle (Delta/nucleon) in crossed diagrams
146
147 // Values and constants which will be used during the running
148 // Get set to one of the mass values above in the constructor
149 double fM_pi; // mass of the pion
150 double fM_l; // mass of the lepton
151 double fg_factor; // Current factor. if(NC) = 1/2 G^2. if(CC) = 1/2 G^2 cos^2(theta_c)
152
153 // Form factors for PiNDelta decay vertex
158
159 // Wavefunction
163
164 std::complex<double> fJ_hadronic[4];
165};
166
167} //namespace alvarezruso
168} //namespace genie
169#endif
Nucleus class for Alvarez-Ruso Coherent Pion Production xsec.
Abstract base class for Alvarez-Ruso wavefunction solution.
Wave function class for AlvarezRuso Coherent pion production xsec.
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_nu
double PionMomentumCM(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
std::complex< double > H(unsigned int i, unsigned int j) const
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_direct
void NuclearCurrent(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > q, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pdir, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pcrs, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > ppi, std::complex< double > *jPtr)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_l
std::complex< double > NucleonPropagator(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > nucleon_momentum)
double DeltaSelfEnergyConstant(double a, double b, double c, double E)
std::complex< double > DeltaCouplingInMed(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pion_momentum, double density_cent)
double PiDecayVertex(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pion_momentum, double mass)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_cross
double DeltaWidthPauliBlocked(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum, double density)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_n_o
double DeltaWidthFree(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
double PNVertexFactor(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > momentum, double mass)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_n_i
AlvarezRusoCOHPiPDXSec(unsigned int Z_, unsigned int A_, const current_t current_, const flavour_t flavour_=kE, const nutype_t nutype=kNu, const formfactors_t ff_=kNieves)
double DXSec(const double E_nu_, const double E_l_, const double theta_l_, const double phi_l_, const double theta_pi_, const double phi_pi_)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_pi
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fQ
std::complex< double > DeltaPropagatorInMed(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
const double a
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25