PMNS_NCI.cxx
Go to the documentation of this file.
1 
2 
3 // $Id: PMNS_NCI.cxx,v 1.1 2013/10/17 22:18:11 ljf26 Exp $
4 //
5 // Implementation of oscillations of neutrinos in matter in a
6 // three-neutrino framework with NSI.
7 
8 //......................................................................
9 //
10 // Throughout I have taken:
11 // - L to be the neutrino flight distance in km
12 // - E to be the neutrino energy in GeV
13 // - Dmij to be the differences between the mass-squares in eV^2
14 // - Ne to be the electron number density in mole/cm^3
15 // - theta12,theta23,theta13,deltaCP to be in radians
16 // - NSI parameters are dimensionless
17 //
18 // This class inherits from the PMNSOpt class
19 //
20 // joao.coelho@tufts.edu
21 
22 #include "OscLib/func/PMNS_NSI.h"
23 
24 // Just pull in all the cxx files from MatrixDecomp. This way we don't have
25 // another library to worry about building and linking everywhere.
26 //#include "OscLib/func/MatrixDecomp/zhetrd3.cxx"
27 //#include "OscLib/func/MatrixDecomp/zheevc3.cxx"
28 #include "OscLib/func/MatrixDecomp/zheevh3.h"
29 //#include "OscLib/func/MatrixDecomp/zheevq3.cxx"
30 
31 #include <cstdlib>
32 #include <cassert>
33 
34 using namespace osc;
35 
36 //......................................................................
37 
39 {
40  this->SetMix(0.,0.,0.,0.);
41  this->SetDeltaMsqrs(0.,0.);
42  this->SetNSI(0.,0.,0.,0.,0.,0.,0.,0.,0.);
43  this->ResetToFlavour(1);
44  fCachedNe = 0.0;
45  fCachedE = 1.0;
46  fCachedAnti = 1;
47 }
48 
50 }
51 
52 //......................................................................
53 
54 void PMNS_NSI::SetNSI(double eps_ee, double eps_emu, double eps_etau,
55  double eps_mumu, double eps_mutau, double eps_tautau,
56  double delta_emu, double delta_etau, double delta_mutau)
57 {
58 
59  fEps_ee = eps_ee;
60  fEps_mumu = eps_mumu;
61  fEps_tautau = eps_tautau;
62  fEps_emu = eps_emu * complex(cos(delta_emu) , sin(delta_emu));
63  fEps_etau = eps_etau * complex(cos(delta_etau) , sin(delta_etau));
64  fEps_mutau = eps_mutau * complex(cos(delta_mutau) , sin(delta_mutau));
65 
66  fResetNSI = true;
67 
68 }
69 
70 //......................................................................
71 void PMNS_NSI::SolveHam(double E, double Ne, int anti)
72 {
73 
74  // Check if anything has changed before recalculating
75  if(Ne!=fCachedNe || E!=fCachedE || anti!=fCachedAnti || !fBuiltHlv || fResetNSI){
76  fCachedNe = Ne;
77  fCachedE = E;
78  fCachedAnti = anti;
79  fResetNSI = false;
80  this->BuildHlv();
81  }
82  else return;
83 
84  double lv = 2 * kGeV2eV*E / fDm31; // Osc. length in eV^-1
85  double kr2GNe = kK2*M_SQRT2*kGf*Ne; // Matter potential in eV
86 
87  // Finish build Hamiltonian in matter with dimension of eV
88  complex A[3][3];
89  for(int i=0;i<3;i++){
90  A[i][i] = fHlv[i][i]/lv;
91  for(int j=i+1;j<3;j++){
92  if(anti>0) A[i][j] = fHlv[i][j]/lv;
93  else A[i][j] = conj(fHlv[i][j])/lv;
94  }
95  }
96  if(anti>0){
97  A[0][0] += kr2GNe * (1 + fEps_ee);
98  A[0][1] += kr2GNe * fEps_emu;
99  A[0][2] += kr2GNe * fEps_etau;
100  A[1][1] += kr2GNe * fEps_mumu;
101  A[1][2] += kr2GNe * fEps_mutau;
102  A[2][2] += kr2GNe * fEps_tautau;
103  }
104  else{
105  A[0][0] -= kr2GNe * (1 + fEps_ee);
106  A[0][1] -= kr2GNe * fEps_emu;
107  A[0][2] -= kr2GNe * fEps_etau;
108  A[1][1] -= kr2GNe * fEps_mumu;
109  A[1][2] -= kr2GNe * fEps_mutau;
110  A[2][2] -= kr2GNe * fEps_tautau;
111  }
112 
113  // Solve Hamiltonian for eigensystem using the GLoBES method
114  zheevh3(A,fEvec,fEval);
115 
116 }
117 
double fEval[3]
Definition: PMNSOpt.h:89
double fCachedE
Definition: PMNSOpt.h:92
double fCachedNe
Definition: PMNSOpt.h:91
complex fEps_emu
Definition: PMNS_NSI.h:36
complex fEvec[3][3]
Definition: PMNSOpt.h:88
virtual ~PMNS_NSI()
Definition: PMNS_NCI.cxx:49
static const double kGf
Definition: PMNSOpt.h:47
virtual void SolveHam(double E, double Ne, int anti)
Definition: PMNS_NCI.cxx:71
bool fResetNSI
Definition: PMNS_NSI.h:39
std::complex< double > complex
Definition: PMNSOpt.h:73
double fDm31
Definition: PMNSOpt.h:82
static const double kK2
Definition: PMNS.cxx:47
virtual void ResetToFlavour(int flv=1)
complex fEps_mutau
Definition: PMNS_NSI.h:38
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)
Definition: PMNS_NCI.cxx:54
double fEps_mumu
Definition: PMNS_NSI.h:34
virtual void SetMix(double th12, double th23, double th13, double deltacp)
bool fBuiltHlv
Definition: PMNSOpt.h:94
virtual void SetDeltaMsqrs(double dm21, double dm32)
Definition: EarthModel.h:12
double fEps_tautau
Definition: PMNS_NSI.h:35
double fEps_ee
Definition: PMNS_NSI.h:33
E
Definition: 018_def.c:13
static const double kGeV2eV
Definition: PMNS.cxx:48
#define A
Definition: memgrp.cpp:38
int fCachedAnti
Definition: PMNSOpt.h:93
virtual void BuildHlv()
complex fHlv[3][3]
Definition: PMNSOpt.h:87
complex fEps_etau
Definition: PMNS_NSI.h:37