GENIEGenerator
Loading...
Searching...
No Matches
HNLBRCalculator.h
Go to the documentation of this file.
1//----------------------------------------------------------------------------
2/*!
3
4 An Algorithm that manages the calculations of production and decay
5 branching ratios for HNL.
6
7\class genie::hnl::BRCalculator
8
9\brief Manages HNL BR (prod and decay)
10
11\author John Plows <komninos-john.plows@physics.ox.ac.uk>
12
13\created December 3rd, 2021
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//----------------------------------------------------------------------------
20
21#ifndef _HNL_BRFUNCTIONS_H_
22#define _HNL_BRFUNCTIONS_H_
23
24// -- C++ includes
25#include <iterator>
26#include <sstream>
27
28// -- ROOT includes
29#include "TF1.h"
30#include "TF2.h"
31#include "TMath.h"
32
33// -- GENIE includes
39
41
46
47namespace genie {
48
49 class PDGLibrary;
50
51 namespace hnl {
52
54
55 public:
56
58 BRCalculator(string name);
59 BRCalculator(string name, string config);
61
62 // -- implement the ChannelCalculatorI interface
63
64 // overload the Algorithm::Configure() methods to load private data
65 // members from configuration options
66 void Configure(const Registry & config);
67 void Configure(string config);
68
69 // return the kinematic scaling for a production channel
70 double KinematicScaling( genie::hnl::HNLProd_t hnlprod ) const;
71
72 // return the integrated decay width for a decay channel
73 double DecayWidth( genie::hnl::HNLDecayMode_t hnldm ) const;
74
75 private:
76
77 void LoadConfig(void);
78
79 //============================================
80 // total decay widths, parents to HNL
81 //============================================
82
83 double KScale_Global( genie::hnl::HNLProd_t hnldm, const double M ) const;
84
85 // P --> N + \ell_{\alpha}
86 double DWidth_PseudoscalarToLepton( const double mP, const double M, const double Ua42, const double ma ) const;
87 double KScale_PseudoscalarToLepton( const double mP, const double M, const double ma ) const; // uses formulae (2.12)-(2.14) from Shrock, Phys. Rev. D 24 (1981) 5
88
89 // P --> N + \ell_{\alpha} + \pi^0
90 double DWidth_PseudoscalarToPiLepton( const double mP, const double M, const double Ua42, const double ma ) const;
91 double KScale_PseudoscalarToPiLepton( const double mP, const double M, const double ma ) const;
92
93 // mu --> N + \nu_{\alpha} + e
94 double DWidth_MuonToNuAndElectron( const double M, const double Ue42, const double Umu42, const double Ut42 ) const;
95 double KScale_MuonToNuAndElectron( const double M ) const;
96
97 //============================================
98 // total decay widths for HNL channels
99 //============================================
100
101 double DWidth_Global( genie::hnl::HNLDecayMode_t hnldm, const double M ) const;
102
103 // N --> pi0 + nu_\alpha
104 double DWidth_PiZeroAndNu( const double M, const double Ue42, const double Umu42, const double Ut42 ) const;
105
106 // N --> pi^{\pm} + \ell_{\alpha}
107 double DWidth_PiAndLepton( const double M, const double Ua42, const double ma ) const;
108
109 // invisible
110 double DWidth_Invisible( const double M, const double Ue42, const double Umu42, const double Ut42 ) const;
111
112 // N --> nu + \ell_{\beta} \ell_{\beta} , \beta = e or mu
113 double DWidth_SameLepton( const double M, const double Ue42, const double Umu42, const double Ut42, const double mb, bool bIsMu ) const;
114
115 // N --> nu + \ell_{\alpha}^{-} + \ell_{\beta}^{+}, \alpha != \beta, \alpha = e or mu
116 // alpha is the "correct" lepton number sign ( Q < 0 for N, Q > 0 for Nbar)
117 double DWidth_DiffLepton( const double M, const double Ua42, const double Ub42, const int IsMajorana ) const;
118
119 // N --> pi^\pm + pi^0 + \ell_{\alpha}^\mp, \alpha = e or mu
120 double DWidth_PiPi0Ell( const double M, const double ml,
121 const double Ue42, const double Umu42, const double Ut42,
122 const bool isElectron = false ) const;
123
124 // N --> pi^0 + pi^0 + \nu (all flavours summed up)
125 double DWidth_Pi0Pi0Nu( const double M,
126 const double Ue42, const double Umu42, const double Ut42 ) const;
127
128 static double PiPi0EllForm( double *x, double *par );
129 static double Pi0Pi0NuForm( double *x, double *par );
130
131 // kinematic functions
132 double GetFormfactorF1( double x ) const;
133 double GetFormfactorF2( double x ) const;
134
135 bool fIsConfigLoaded = false;
136
137 // physical constants
138 double wAng, s2w;
139 const double GF = genie::constants::kGF; // GeV^{-2}
140 const double GF2 = GF*GF;
141 const double pi = genie::constants::kPi;
142 double fpi, fpi2;
143 double BR_C1, BR_C2;
144
145 double mPi0, mPi, mMu, mK, mK0, mE;
146 double fMass;
147 std::vector< double > fCouplings; double fUe42, fUm42, fUt42;
149
150 double Vud, Vud2;
151
152 // PMNS matrix elements
153 double Ue1, Ue2, Ue3, Um1, Um2, Um3, Ut1, Ut2, Ut3;
154
155 // scaling factors (3-body decays) from Ballett et al, JHEP 2020 (2019) 3 Fig. 2
156 // this figure was digitised so write as map between x = HNL mass [GeV] and y = scaling
157 // Digitisation done using WebPlotDigitizer (https://apps.automeris.io/wpd ; https://github.com/ankitrohatgi/WebPlotDigitizer)
158 std::map< double, double > kscale_K3mu, kscale_K3e, kscale_mu3e;
159
160 }; // class BRCalculator
161
162} // namespace hnl
163} // namespace genie
164
165#endif // #ifndef _HNL_BRFUNCTIONS_H_
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
Singleton class to load & serve a TDatabasePDG.
Definition PDGLibrary.h:36
A registry. Provides the container for algorithm configuration parameters.
Definition Registry.h:65
double DWidth_SameLepton(const double M, const double Ue42, const double Umu42, const double Ut42, const double mb, bool bIsMu) const
double DWidth_PseudoscalarToPiLepton(const double mP, const double M, const double Ua42, const double ma) const
double DWidth_PiAndLepton(const double M, const double Ua42, const double ma) const
double GetFormfactorF1(double x) const
std::vector< double > fCouplings
double DWidth_Global(genie::hnl::HNLDecayMode_t hnldm, const double M) const
double DecayWidth(genie::hnl::HNLDecayMode_t hnldm) const
double DWidth_PseudoscalarToLepton(const double mP, const double M, const double Ua42, const double ma) const
double KScale_PseudoscalarToLepton(const double mP, const double M, const double ma) const
std::map< double, double > kscale_K3mu
void Configure(const Registry &config)
static double Pi0Pi0NuForm(double *x, double *par)
double KScale_Global(genie::hnl::HNLProd_t hnldm, const double M) const
double DWidth_MuonToNuAndElectron(const double M, const double Ue42, const double Umu42, const double Ut42) const
double DWidth_PiZeroAndNu(const double M, const double Ue42, const double Umu42, const double Ut42) const
double GetFormfactorF2(double x) const
double DWidth_DiffLepton(const double M, const double Ua42, const double Ub42, const int IsMajorana) const
double DWidth_Invisible(const double M, const double Ue42, const double Umu42, const double Ut42) const
std::map< double, double > kscale_K3e
static double PiPi0EllForm(double *x, double *par)
double KScale_PseudoscalarToPiLepton(const double mP, const double M, const double ma) const
std::map< double, double > kscale_mu3e
double KinematicScaling(genie::hnl::HNLProd_t hnlprod) const
double KScale_MuonToNuAndElectron(const double M) const
double DWidth_PiPi0Ell(const double M, const double ml, const double Ue42, const double Umu42, const double Ut42, const bool isElectron=false) const
double DWidth_Pi0Pi0Nu(const double M, const double Ue42, const double Umu42, const double Ut42) const
enum genie::hnl::t_HNLProd HNLProd_t
enum genie::hnl::EHNLDecayMode HNLDecayMode_t
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25