37 for (
int dim = 3; dim < 8; dim += 2) {
38 for (
int flvi = 0; flvi < 3; flvi++) {
39 for (
int flvj = flvi; flvj < 3; flvj++) {
40 SetaT(flvi, flvj, dim, 0, 0);
41 SetcT(flvi, flvj, dim + 1, 0, 0);
71 cerr <<
"WARNING: First argument should be smaller or equal to second "
74 <<
"Setting reverse order (aT_" << flvj << flvi <<
"). " << endl;
79 if (flvi < 0 || flvi > 2 || flvj < flvi || flvj > 2) {
80 cerr <<
"WARNING: aT_" << flvi << flvj <<
" not valid for " <<
fNumNus
81 <<
" neutrinos. Doing nothing." << endl;
84 if (dim != 3 && dim != 5 && dim != 7) {
85 cerr <<
"WARNING: Invalid aT coefficient dimension dim=" << dim
86 <<
" not in [3,5,7].\n";
90 int pos = (dim - 3) / 2;
94 if (flvi != flvj) h *=
complexD(cos(phase), sin(phase));
96 bool isSame = (
faT[flvi][flvj][pos] == h);
102 faT[flvi][flvj][pos] = h;
123 cerr <<
"WARNING: First argument should be smaller or equal to second "
126 <<
"Setting reverse order (cT_" << flvj << flvi <<
"). " << endl;
131 if (flvi < 0 || flvi > 2 || flvj < flvi || flvj > 2) {
132 cerr <<
"WARNING: cT_" << flvi << flvj <<
" not valid for " <<
fNumNus
133 <<
" neutrinos. Doing nothing." << endl;
136 if (dim != 4 && dim != 6 && dim != 8) {
137 cerr <<
"WARNING: Invalid cT coefficient dimension dim=" << dim
138 <<
" not in [4,6,8].\n";
142 int pos = dim / 2 - 2;
146 if (flvi != flvj) h *=
complexD(cos(phase), sin(phase));
148 bool isSame = (
fcT[flvi][flvj][pos] == h);
154 fcT[flvi][flvj][pos] = h;
176 cerr <<
"WARNING: First argument should be smaller or equal to second "
179 <<
"Setting reverse order (aT_" << flvj << flvi <<
"). " << endl;
184 if (flvi < 0 || flvi > 2 || flvj < flvi || flvj > 2) {
185 cerr <<
"WARNING: aT_" << flvi << flvj <<
" not valid for " <<
fNumNus
186 <<
" neutrinos. Returning 0." << endl;
189 if (dim != 3 && dim != 5 && dim != 7) {
190 cerr <<
"WARNING: Invalid aT coefficient dimension dim=" << dim
191 <<
" not in [3,5,7].\n";
195 int pos = (dim - 3) / 2;
197 return faT[flvi][flvj][pos];
219 cerr <<
"WARNING: First argument should be smaller or equal to second "
222 <<
"Setting reverse order (cT_" << flvj << flvi <<
"). " << endl;
227 if (flvi < 0 || flvi > 2 || flvj < flvi || flvj > 2) {
228 cerr <<
"WARNING: cT_" << flvi << flvj <<
" not valid for " <<
fNumNus
229 <<
" neutrinos. Returning 0." << endl;
232 if (dim != 4 && dim != 6 && dim != 8) {
233 cerr <<
"WARNING: Invalid cT coefficient dimension dim=" << dim
234 <<
" not in [4,6,8].\n";
238 int pos = dim / 2 - 2;
240 return fcT[flvi][flvj][pos];
260 for (
int i = 0; i <
fNumNus; i++) {
267 fHam[0][0] += kr2GNe;
269 fHam[0][0] -= kr2GNe;
274 for (
int dim = 3; dim < 9; dim++) {
276 if (dim > 3) energy_pow *=
fEnergy;
279 int coeff_idx = (dim - 3) / 2;
281 for (
int i = 0; i <
fNumNus; i++) {
282 for (
int j = i; j <
fNumNus; j++) {
287 liv_term *= -
faT[i][j][coeff_idx];
289 liv_term *=
faT[i][j][coeff_idx];
294 liv_term *= -4 / 3. *
fcT[i][j][coeff_idx];
296 liv_term *= -
fcT[i][j][coeff_idx];
299 fHam[i][j] += liv_term;
306 for (
int i = 0; i <
fNumNus; i++) {
307 for (
int j = i + 1; j <
fNumNus; j++) {
fHam[i][j] = conj(
fHam[i][j]); }
346 double aT_emu,
double aT_etau,
double aT_mutau,
347 double cT_ee,
double cT_mumu,
double cT_tautau,
348 double cT_emu,
double cT_etau,
double cT_mutau,
349 double delta_aT_emu,
double delta_aT_etau,
350 double delta_aT_mutau,
double delta_cT_emu,
351 double delta_cT_etau,
double delta_cT_mutau)
353 SetaT(0, 0, aT_ee, 0);
354 SetaT(1, 1, aT_mumu, 0);
355 SetaT(2, 2, aT_tautau, 0);
357 SetaT(0, 1, aT_emu, delta_aT_emu);
358 SetaT(0, 2, aT_etau, delta_aT_etau);
359 SetaT(1, 2, aT_mutau, delta_aT_mutau);
361 SetcT(0, 0, cT_ee, 0);
362 SetcT(1, 1, cT_mumu, 0);
363 SetcT(2, 2, cT_tautau, 0);
365 SetcT(0, 1, cT_emu, delta_cT_emu);
366 SetcT(0, 2, cT_etau, delta_cT_etau);
367 SetcT(1, 2, cT_mutau, delta_cT_mutau);
390 SetaT(flvi, flvj, 3, val, phase);
413 SetcT(flvi, flvj, 4, val, phase);
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.
virtual void SolveHamMatter()
Solve the full Hamiltonian in matter.
complexD fHam[3][3]
The full hamiltonian.
virtual void SetaT_ee(double a)
Set eps_ee parameter.
virtual void SetcT_ee(double a)
Set eps_ee parameter.
void SetLIV(double aT_ee, double aT_mumu, double aT_tautau, double aT_emu, double aT_etau, double aT_mutau, double cT_ee, double CT_mumu, double CT_tautau, double cT_emu, double cT_etau, double cT_mutau, double delta_aT_emu=0, double delta_aT_etau=0, double delta_aT_mutau=0, double delta_cT_emu=0, double delta_cT_etau=0, double delta_cT_mutau=0)
Set the LIV parameters all at once.
virtual void SetaT_tautau(double a)
Set eps_tautau parameter.
virtual void SetIsOscProbAvg(bool isOscProbAvg)
Deactivate Maltoni.
virtual void SetcT_mutau(double a, double phi)
virtual void SetcT_etau(double a, double phi)
virtual void SetcT_tautau(double a)
Set eps_tautau parameter.
virtual complexD GetcT(int flvi, int flvj, int dim=4)
virtual void UpdateHam()
Build the full Hamiltonian.
virtual void SetaT_emu(double a, double phi)
Set diagonal LIV pars.
virtual void SetcT_emu(double a, double phi)
virtual void SetaT_mumu(double a)
Set eps_mumu parameter.
virtual void SetaT_mutau(double a, double phi)
virtual void SetcT_mumu(double a)
Set eps_mumu parameter.
virtual ~PMNS_LIV()
Destructor.
complexD fcT[3][3][3]
Stores each cT LIV parameter of dimension 4,6,8.
virtual complexD GetaT(int flvi, int flvj, int dim=3)
virtual void SolveHam()
Solve the full Hamiltonian.
virtual void SetaT(int flvi, int flvj, int dim, double val, double phase)
virtual void SetcT(int flvi, int flvj, int dim, double val, double phase)
virtual void SetaT_etau(double a, double phi)
complexD faT[3][3][3]
Stores each aT LIV parameter of dimension 3,5,7.
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.