32PMNS_SiderealLIV::PMNS_SiderealLIV()
33 :
PMNS_Fast(), fa{}, fc{}, fN{0.0, 0.0, 0.0}, fTime(0.0), fChi(0.0)
53 cerr <<
"WARNING: First argument should be smaller or equal to second "
56 <<
"Setting reverse order (" << name <<
"_" << flvj << flvi <<
"). "
58 std::swap(flvi, flvj);
60 if (flvi < 0 || flvi > 2 || flvj < flvi || flvj > 2) {
61 cerr <<
"WARNING: " << name <<
"_" << flvi << flvj
62 <<
" not valid for 3 neutrinos. Doing nothing." << endl;
72 const char* paramName)
74 if (coord < 0 || coord > 2) {
75 cerr <<
"WARNING: " << coordName <<
" = " << coord
76 <<
" out of range [0,2] for " << paramName <<
". Doing nothing."
102 fa[flvi][flvj][coord] = val;
127 fc[flvi][flvj][coord1][coord2] = val;
151 return fa[flvi][flvj][coord];
177 return fc[flvi][flvj][coord1][coord2];
189 double chi =
fChi * M_PI / 180.0;
190 double zen = zenith * M_PI / 180.0;
191 double azi = azimuth * M_PI / 180.0;
192 double N0 = cos(chi) * sin(zen) * cos(azi) + sin(chi) * cos(zen);
193 double N1 = sin(zen) * sin(azi);
194 double N2 = -sin(chi) * sin(zen) * cos(azi) + cos(chi) * cos(zen);
235 double latitude = deg + min / 60.0 + sec / 3600.0;
236 fChi = 90.0 - latitude;
265 for (
int i = 0; i <
fNumNus; i++) {
272 fHam[0][0] += kr2GNe;
274 fHam[0][0] -= kr2GNe;
276 for (
int i = 0; i <
fNumNus; i++) {
277 for (
int j = i; j <
fNumNus; j++) {
280 double C0 = -sign *
fa[i][j][2] *
fN[2];
282 double As0 = sign * (
fa[i][j][0] *
fN[1] -
fa[i][j][1] *
fN[0]);
283 double Ac0 = -sign * (
fa[i][j][0] *
fN[0] +
fa[i][j][1] *
fN[1]);
286 2 *
fN[0] *
fN[2] *
fc[i][j][1][2]);
287 double Ac1 =
kGeV2eV * (-2 *
fN[0] *
fN[2] *
fc[i][j][0][2] -
288 2 *
fN[1] *
fN[2] *
fc[i][j][1][2]);
292 (
fN[0] *
fN[0] -
fN[1] *
fN[1]) *
fc[i][j][0][1]);
296 (
fc[i][j][0][0] -
fc[i][j][1][1]) -
297 2.0 *
fN[0] *
fN[1] *
fc[i][j][0][1]);
300 double As = As0 +
fEnergy * As1;
301 double Ac = Ac0 +
fEnergy * Ac1;
310 fHam[i][j] += liv_term;
316 for (
int i = 0; i <
fNumNus; i++) {
317 for (
int j = i + 1; j <
fNumNus; j++) {
fHam[i][j] = conj(
fHam[i][j]); }
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.
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.
virtual void SolveHamMatter()
Solve the full Hamiltonian in matter.
complexD fHam[3][3]
The full hamiltonian.
virtual void SetIsOscProbAvg(bool isOscProbAvg)
Set flag for which averaging to use.
virtual void SetA(int flvi, int flvj, int coord, double val)
virtual double GetC(int flvi, int flvj, int coord1, int coord2)
virtual ~PMNS_SiderealLIV()
Destructor.
virtual void SolveHam()
Solve the full Hamiltonian.
virtual void SetColatitude(double chi)
virtual double GetA(int flvi, int flvj, int coord)
static bool ValidateAndOrder(int &flvi, int &flvj, const char *name)
double fc[3][3][3][3]
cT LIVS parameters (mass dimension 4)
double fa[3][3][3]
aT LIVS parameters (mass dimension 3)
static bool ValidateCoord(int coord, const char *coordName, const char *paramName)
virtual double GetColatitude() const
Get the detector colatitude (chi), in degrees.
double fTime
Local sidereal time, in hours.
virtual void SetC(int flvi, int flvj, int coord1, int coord2, double val)
virtual void UpdateHam()
Build the full Hamiltonian.
static constexpr double kOmegaSidereal
Angular sidereal frequency, in rad/h.
double fN[3]
Neutrino directional factors (NX, NY, NZ)
virtual void SetNeutrinoDirection(double zenith, double azimuth)
virtual void SetTimeHours(double hours)
Some useful general definitions.
double density
The density of the path segment in g/cm^3.
double zoa
The effective Z/A value of the path segment.