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++) {
130 double fEvalGLoBES[3];
137 for (
int i = 0; i <
fNumNus; i++) {
138 fEval[i] = fEvalGLoBES[i];
139 for (
int j = 0; j <
fNumNus; j++) {
fEvec[i][j] = fEvecGLoBES[i][j]; }
156 double s12, s23, s13, c12, c23, c13;
158 if (
fIsNuBar) idelta = conj(idelta);
167 fEvec[0][0] = c12 * c13;
168 fEvec[0][1] = s12 * c13;
169 fEvec[0][2] = s13 * exp(-idelta);
171 fEvec[1][0] = -s12 * c23 - c12 * s23 * s13 * exp(idelta);
172 fEvec[1][1] = c12 * c23 - s12 * s23 * s13 * exp(idelta);
173 fEvec[1][2] = s23 * c13;
175 fEvec[2][0] = s12 * s23 - c12 * c23 * s13 * exp(idelta);
176 fEvec[2][1] = -c12 * s23 - s12 * c23 * s13 * exp(idelta);
177 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 SolveHamMatter()
Solve the full Hamiltonian in matter.
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])