12#include <unsupported/Eigen/MatrixFunctions>
65 cerr <<
"WARNING: Alpha3 must be positive. Doing nothing." << endl;
82 cerr <<
"WARNING: Alpha2 must be positive. Doing nothing." << endl;
117 SetDm(3, dm32 + dm21);
148 for (
int j = 0; j <
fNumNus; j++) {
153 for (
int i = 0; i < j; i++) {
158 for (
int i = 0; i < j; i++) {
166 for (
int i = 0; i <
fNumNus; i++) {
167 for (
int j = i + 1; j <
fNumNus; j++) {
170 fHd[i][j] = conj(
fHd[i][j]);
173 fHd[j][i] = conj(
fHd[i][j]);
179 for (
int j = 0; j <
fNumNus; j++) {
180 for (
int i = 0; i <
fNumNus; i++) {
204 double kr2GNe =
kK2 * M_SQRT2 *
kGf;
208 for (
int i = 0; i <
fNumNus; i++) {
213 fHam(0, 0) += kr2GNe;
215 fHam(0, 0) -= kr2GNe;
267 Eigen::Matrix3cd H =
fHam;
272 for (
int i = 0; i <
fNumNus; i++) {
Base class implementing general functions for computing neutrino oscillations.
static const complexD zero
zero in complex
bool fIsNuBar
Anti-neutrino flag.
vectorC fNuState
The neutrino current state.
int fNumNus
Number of neutrino flavours.
double fEnergy
Neutrino energy.
virtual void RotateH(int i, int j, matrixC &Ham)
Rotate the Hamiltonian by theta_ij and delta_ij.
static const double kK2
mol/GeV^2/cm^3 to eV
static const double kKm2eV
km to eV^-1
virtual void SetDm(int j, double dm)
Set the mass-splitting dm_j1 in eV^2.
virtual void SetDelta(int i, int j, double delta)
Set the CP phase delta_ij.
matrixC fHms
matrix H*2E in eV^2
vectorC fBuffer
Buffer for neutrino state tranformations.
bool fGotES
Tag to avoid recalculating eigensystem.
static const double kGf
G_F in units of GeV^-2.
NuPath fPath
Current neutrino path.
vectorD fEval
Eigenvalues of the Hamiltonian.
bool fBuiltHms
Tag to avoid rebuilding Hms.
virtual void SetCurPath(NuPath p)
Set the path currently in use by the class.
vectorD fDm
m^2_i - m^2_1 in vacuum
virtual void SetAngle(int i, int j, double th)
Set the mixing angle theta_ij.
static const double kGeV2eV
GeV to eV.
vectorD fAlpha
alpha parameters
virtual double GetAlpha2()
virtual void PropagatePath(NuPath p)
Propagation with Decay.
virtual void SetAlpha2(double alpha2)
virtual void UpdateHam()
Build the full Hamiltonian.
virtual double GetAlpha3()
virtual void SetIsNuBar(bool isNuBar)
Eigen::Matrix3cd fHam
Final hamiltonian.
virtual void SetAlpha3(double alpha3)
virtual void SetDeltaMsqrs(double dm21, double dm32)
Set both mass-splittings at once.
matrixC fHd
Decay hamiltonian.
virtual void BuildHms()
Build the Hms Hamiltonian.
virtual void SolveHam()
Solve the full Hamiltonian for eigenvalues.
virtual void SetMix(double th12, double th23, double th13, double deltacp)
Set the all mixing parameters at once.
virtual ~PMNS_Decay()
Destructor.
void complexsolver(const Eigen::Matrix3cd &A, OscProb::vectorD &w)
Some useful general definitions.
std::complex< double > complexD
std::vector< complexD > vectorC
std::vector< double > vectorD
std::vector< vectorC > matrixC
A struct representing a neutrino path segment.
double density
The density of the path segment in g/cm^3.
double length
The length of the path segment in km.
double zoa
The effective Z/A value of the path segment.