58 SetDm(3, dm32 + dm21);
73 double kr2GNe =
kK2 * M_SQRT2 *
kGf;
77 for (
int i = 0; i <
fNumNus; i++) {
79 for (
int j = i + 1; j <
fNumNus; j++) {
119 double fEvalGLoBES[3];
126 for (
int i = 0; i <
fNumNus; i++) {
127 fEval[i] = fEvalGLoBES[i];
128 for (
int j = 0; j <
fNumNus; j++) {
fEvec[i][j] = fEvecGLoBES[i][j]; }
145 double s12, s23, s13, c12, c23, c13;
147 if (
fIsNuBar) idelta = conj(idelta);
156 fEvec[0][0] = c12 * c13;
157 fEvec[0][1] = s12 * c13;
158 fEvec[0][2] = s13 * exp(-idelta);
160 fEvec[1][0] = -s12 * c23 - c12 * s23 * s13 * exp(idelta);
161 fEvec[1][1] = c12 * c23 - s12 * s23 * s13 * exp(idelta);
162 fEvec[1][2] = s23 * c13;
164 fEvec[2][0] = s12 * s23 - c12 * c23 * s13 * exp(idelta);
165 fEvec[2][1] = -c12 * s23 - s12 * c23 * s13 * exp(idelta);
166 fEvec[2][2] = c23 * c13;
Base class implementing general functions for computing neutrino oscillations.
bool fIsNuBar
Anti-neutrino flag.
int fNumNus
Number of neutrino flavours.
double fEnergy
Neutrino energy.
static const double kK2
mol/GeV^2/cm^3 to eV
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
bool fGotES
Tag to avoid recalculating eigensystem.
virtual void FillCache()
Cache the current eigensystem.
static const double kGf
G_F in units of GeV^-2.
matrixC fEvec
Eigenvectors of the Hamiltonian.
NuPath fPath
Current neutrino path.
vectorD fEval
Eigenvalues of the Hamiltonian.
vectorD fDm
m^2_i - m^2_1 in vacuum
virtual bool TryCache()
Try to find a cached eigensystem.
matrixD fDelta
delta[i][j] CP violating phase
virtual void SetAngle(int i, int j, double th)
Set the mixing angle theta_ij.
virtual void BuildHms()
Build the matrix of masses squared.
static const double kGeV2eV
GeV to eV.
matrixD fTheta
theta[i][j] mixing angle
virtual void UpdateHam()
Build the full Hamiltonian.
virtual void SetDeltaMsqrs(double dm21, double dm32)
Set both mass-splittings at once.
virtual void SetVacuumEigensystem()
Set the eigensystem to the analytic solution of the vacuum Hamiltonian.
virtual void SolveHam()
Solve the full Hamiltonian for eigenvectors and eigenvalues.
complexD fHam[3][3]
The full hamiltonian.
virtual void SetMix(double th12, double th23, double th13, double deltacp)
Set the all mixing parameters at once.
virtual ~PMNS_Fast()
Destructor.
Some useful general definitions.
std::complex< double > complexD
double density
The density of the path segment in g/cm^3.
double zoa
The effective Z/A value of the path segment.
int zheevh3(std::complex< double > A[3][3], std::complex< double > Q[3][3], double w[3])