28 SetNSI(0., 0., 0., 0., 0., 0., 0., 0., 0.);
56 double eps_mumu,
double eps_mutau,
double eps_tautau,
57 double delta_emu,
double delta_etau,
double delta_mutau)
61 SetEps(2, 2, eps_tautau, 0);
63 SetEps(0, 1, eps_emu, delta_emu);
64 SetEps(0, 2, eps_etau, delta_etau);
65 SetEps(1, 2, eps_mutau, delta_mutau);
89 cerr <<
"WARNING: First argument should be smaller or equal to second "
92 <<
"Setting reverse order (Eps_" << flvj << flvi <<
"). " << endl;
97 if (flvi < 0 || flvi > 2 || flvj < flvi || flvj > 2) {
98 cerr <<
"WARNING: Eps_" << flvi << flvj <<
" not valid for " <<
fNumNus
99 <<
" neutrinos. Doing nothing." << endl;
105 if (flvi != flvj) h *=
complexD(cos(phase), sin(phase));
107 bool isSame = (
fEps[flvi][flvj] == h);
113 fEps[flvi][flvj] = h;
132 cerr <<
"WARNING: First argument should be smaller or equal to second "
135 <<
"Setting reverse order (Eps_" << flvj << flvi <<
"). " << endl;
140 if (flvi < 0 || flvi > 2 || flvj < flvi || flvj > 2) {
141 cerr <<
"WARNING: Eps_" << flvi << flvj <<
" not valid for " <<
fNumNus
142 <<
" neutrinos. Returning 0." << endl;
146 return fEps[flvi][flvj];
231 double kr2GNnsi = kr2GNe;
237 for (
int i = 0; i <
fNumNus; i++) {
238 for (
int j = i; j <
fNumNus; j++) {
242 fHam[i][j] = conj(
fHms[i][j] / lv - kr2GNnsi *
fEps[i][j]);
247 fHam[0][0] += kr2GNe;
249 fHam[0][0] -= kr2GNe;
static const complexD zero
zero in complex
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
matrixC fHms
matrix H*2E in eV^2
bool fGotES
Tag to avoid recalculating eigensystem.
static const double kGf
G_F in units of GeV^-2.
NuPath fPath
Current neutrino path.
virtual void ClearCache()
Clear the cache.
static const double kGeV2eV
GeV to eV.
virtual void SetStdPath()
Set standard neutrino path.
Implementation of oscillations of neutrinos in matter in a three-neutrino framework.
complexD fHam[3][3]
The full hamiltonian.
virtual void SetEps_ee(double a)
Set eps_ee parameter.
double fNSIcoup[3]
Relative NSI couplings.
virtual void SetCoupByIndex(double c, int i)
Set a given fermion coupling.
virtual void SetUpCoup(double u)
Set u-quark couling.
virtual double GetZoACoup()
Get effective Z/A coupling.
virtual double GetDownCoup()
Get d-quark couling.
virtual void SetEps_tautau(double a)
Set eps_tautau parameter.
virtual double GetUpCoup()
Get u-quark couling.
virtual complexD GetEps(int flvi, int flvj)
Get any given NSI parameter.
virtual void SetEps_etau(double a, double phi)
Set eps_etau parameter.
virtual void SetFermCoup(double e, double u, double d)
Set all fermion couplings.
virtual void SetEps(int flvi, int flvj, double val, double phase)
Set any given NSI parameter.
virtual void SetElecCoup(double e)
Set electron coupling.
virtual ~PMNS_NSI()
Destructor.
virtual void UpdateHam()
Build the full Hamiltonian.
complexD fEps[3][3]
Stores each NSI parameter.
virtual void SetDownCoup(double d)
Set d-quark couling.
virtual void SetEps_mumu(double a)
Set eps_mumu parameter.
virtual void SetEps_mutau(double a, double phi)
Set eps_mutau parameter.
virtual void SetEps_emu(double a, double phi)
Set eps_emu parameter.
virtual double GetElecCoup()
Get electron coupling.
void SetNSI(double eps_ee, double eps_emu, double eps_etau, double eps_mumu, double eps_mutau, double eps_tautau, double delta_emu=0, double delta_etau=0, double delta_mutau=0)
Set the NSI parameters all at once.
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.