PMNS_Sterile.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 /// \class PMNS_Sterile
3 ///
4 /// \brief Implementation of oscillations of neutrinos in matter in a
5 /// n-neutrino framework.
6 ///
7 /// \version $Id: PMNS_Sterile.h,v 1.3 2014/04/17 21:01:58 jcoelho Exp $
8 ///
9 /// @author joao.coelho@tufts.edu
10 ////////////////////////////////////////////////////////////////////////
11 #ifndef PMNS_STERILE_H
12 #define PMNS_STERILE_H
13 #include <list>
14 #include <complex>
15 #include <vector>
16 
17 namespace osc {
18  class PMNS_Sterile {
19  public:
20 
21  PMNS_Sterile(int NumNus);
22  virtual ~PMNS_Sterile();
23 
24  /// Set the parameters of the PMNS matrix
25  /// @param th - The angle theta_ij in radians
26  virtual void SetAngle(int i, int j, double th);
27  virtual void SetDelta(int i, int j, double delta);
28 
29  /// Set the mass-splittings
30  /// @param dmi1 - mi^2-m1^2 in eV^2
31  virtual void SetDm(int i, double dm);
32 
33  /// Set standard 3-flavor parameters
34  virtual void SetStdPars();
35 
36  /// Propagate a neutrino through a slab of matter
37  /// @param L - length of slab (km)
38  /// @param E - neutrino energy in GeV
39  /// @param Ne - electron number density of matter in mole/cm^3
40  /// @param anti - +1 = neutrino case, -1 = anti-neutrino case
41  virtual void PropMatter(double L, double E, double Ne, int anti=1);
42  virtual void PropMatter(const std::list<double>& L,
43  double E,
44  const std::list<double>& Ne,
45  int anti);
46 
47  /// Return the probability of final state in flavour flv
48  /// @param flv - final flavor (0,1,2) = (nue,numu,nutau)
49  virtual double P(int flv) const;
50 
51  /// Erase memory of neutrino propagate and reset neutrino
52  /// to pure flavour flv. Preserves values of mixing and mass-splittings
53  /// @param flv - final flavor (0,1,2) = (nue,numu,nutau)
54  virtual void ResetToFlavour(int flv=1);
55 
56  /// Getters
57  virtual int GetNFlavors() const { return fNumNus; }
58  virtual double GetDm(int i) const { return fDm[i-1]; }
59  virtual double GetAngle(int i, int j) const { return fTheta[i-1][j-1]; }
60  virtual double GetDelta(int i, int j) const { return fDelta[i-1][j-1]; }
61 
62  protected:
63 
64  // A shorthand...
65  typedef std::complex<double> complex;
66 
67  virtual void InitializeVectors();
68 
69  /// Rotate the Hamiltonian by theta_ij and delta_ij
70  virtual void RotateH(int i,int j);
71 
72  /// Build Hms = H*2E, where H is the Hamiltonian in vacuum on flavour basis
73  /// and E is the neutrino energy. This is effectively the matrix of masses squared.
74  virtual void BuildHms();
75 
76  /// Solve the full Hamiltonian for eigenvectors and eigenvalues
77  /// @param E - neutrino energy in GeV
78  /// @param Ne - electron number density of matter in mole/cm^3
79  /// @param anti - +1 = neutrino case, -1 = anti-neutrino case
80  virtual void SolveHam(double E, double Ne, int anti);
81 
82  int fNumNus;
83 
84  std::vector<double> fDm; ///< m^2_i - m^2_1 in vacuum
85  std::vector< std::vector<double> > fTheta; ///< theta[i][j] mixing angle
86  std::vector< std::vector<double> > fDelta; ///< delta[i][j] CP violating phase
87 
88  std::vector<complex> fNuState; ///< The neutrino current state
89  std::vector< std::vector<complex> > fHms; ///< matrix H*2E in eV^2
90 
91  double fCachedNe; ///< Cached electron density
92  double fCachedE; ///< Cached neutrino energy
93  int fCachedAnti; ///< Cached nu/nubar selector
94  bool fBuiltHms; ///< Tag to avoid rebuilding Hms
95 
96  struct Priv;
97  Priv* d;
98 
99  };
100 }
101 #endif
102 ////////////////////////////////////////////////////////////////////////
std::vector< double > fDm
m^2_i - m^2_1 in vacuum
Definition: PMNS_Sterile.h:84
virtual double GetAngle(int i, int j) const
Definition: PMNS_Sterile.h:59
virtual void SetDelta(int i, int j, double delta)
virtual void SetAngle(int i, int j, double th)
double delta
Definition: runWimpSim.h:98
virtual double P(int flv) const
virtual void PropMatter(double L, double E, double Ne, int anti=1)
virtual void SetDm(int i, double dm)
double fCachedNe
Cached electron density.
Definition: PMNS_Sterile.h:91
PMNS_Sterile(int NumNus)
virtual void BuildHms()
virtual double GetDm(int i) const
Definition: PMNS_Sterile.h:58
virtual void RotateH(int i, int j)
Rotate the Hamiltonian by theta_ij and delta_ij.
static constexpr double L
Float_t E
Definition: plot.C:20
std::vector< complex > fNuState
The neutrino current state.
Definition: PMNS_Sterile.h:88
std::complex< double > complex
Definition: PMNS_Sterile.h:65
virtual void SetStdPars()
Set standard 3-flavor parameters.
const double j
Definition: BetheBloch.cxx:29
virtual void ResetToFlavour(int flv=1)
virtual int GetNFlavors() const
Getters.
Definition: PMNS_Sterile.h:57
Oscillation probability calculators.
Definition: Calcs.h:5
virtual ~PMNS_Sterile()
int fCachedAnti
Cached nu/nubar selector.
Definition: PMNS_Sterile.h:93
bool fBuiltHms
Tag to avoid rebuilding Hms.
Definition: PMNS_Sterile.h:94
std::vector< std::vector< double > > fTheta
theta[i][j] mixing angle
Definition: PMNS_Sterile.h:85
virtual void SolveHam(double E, double Ne, int anti)
double fCachedE
Cached neutrino energy.
Definition: PMNS_Sterile.h:92
std::vector< std::vector< complex > > fHms
matrix H*2E in eV^2
Definition: PMNS_Sterile.h:89
virtual double GetDelta(int i, int j) const
Definition: PMNS_Sterile.h:60
std::vector< std::vector< double > > fDelta
delta[i][j] CP violating phase
Definition: PMNS_Sterile.h:86
virtual void InitializeVectors()