OscProb
PMNS_Maltoni.h
Go to the documentation of this file.
1
23
24#include "PMNS_Base.h"
25#include <Eigen/Core>
26
27#ifndef PMNS_BASEAVG_H
28#define PMNS_BASEAVG_H
29
30#include "PremModel.h"
31
32namespace OscProb {
33
34 class PMNS_Maltoni : public PMNS_Base {
35 public:
36 PMNS_Maltoni(int numNus);
37 virtual void SetPremModel(OscProb::PremModel& prem);
38
41
44 virtual double AvgProb(int flvi, int flvf, double E, double dE);
45
48 virtual double AvgProb(int flvi, int flvf, double E, double cosT,
49 double dcosT);
50
53 virtual double AvgProb(int flvi, int flvf, double E, double dE,
54 double cosT, double dcosT);
55
58 virtual double AvgProbLoE(int flvi, int flvf, double LoE, double dLoE);
59
62 virtual double AvgProbLoE(int flvi, int flvf, double LoE, double dLoE,
63 double cosT, double dcosT);
64
67 virtual vectorD AvgProbVector(int flvi, double E, double dE);
68
71 virtual vectorD AvgProbVectorLoE(int flvi, double LoE, double dLoE);
72
75 virtual matrixD AvgProbMatrix(int nflvi, int nflvf, double E, double dE);
76
79 virtual matrixD AvgProbMatrixLoE(int nflvi, int nflvf, double LoE,
80 double dLoE);
81
83 virtual double ExtrapolationProb(int flvi, int flvf, double E, double dE);
84
86 virtual double ExtrapolationProbLoE(int flvi, int flvf, double LoE,
87 double dLoE);
88
90 virtual double ExtrapolationProbCosT(int flvi, int flvf, double cosT,
91 double dcosT);
92
94 virtual void SetIsOscProbAvg(bool isOscProbAvg);
95
96 protected:
98 virtual vectorD GetSamplePointsAvgClass(double LoE, double dLoE);
99
101 virtual vectorD GetSamplePointsAvgClass(double E, double cosT,
102 double dcosT);
103
106 virtual matrixC GetSamplePointsAvgClass(double InvE, double dInvE,
107 double cosT, double dcosT);
108
109 virtual void UpdateHam() = 0;
110
112 virtual void InitializeTaylorsVectors();
113
115 virtual void SetwidthBin(double dE, double dcosT);
116
117 virtual void SetCosT(double cosT);
118
120 virtual void BuildKE(double L);
121
123 virtual void BuildKcosT();
124
126 virtual double LnDerivative();
127
129 virtual void PropagatePathTaylor(NuPath p);
130
132 virtual void PropagateTaylor();
133
134 // Rotation from mass to flavor basis
135 virtual void rotateS();
136 virtual void rotateK();
137
139 virtual void MultiplicationRuleS();
140
142 virtual void MultiplicationRuleK(Eigen::MatrixXcd& K);
143
145 void SolveK(Eigen::MatrixXcd& K, vectorD& lambda, matrixC& V);
146
148 template <typename T>
149 void TemplateSolver(Eigen::MatrixXcd& K, vectorD& lambda, matrixC& V);
150
151 // Propagating
153 virtual double AvgFormula(int flvi, int flvf, double dbin,
154 vectorD flambda, matrixC fV);
155
157 virtual double AvgFormulaExtrapolation(int flvi, int flvf, double dE,
158 vectorD flambda, matrixC fV);
159
162 virtual double AvgAlgo(int flvi, int flvf, double LoE, double dLoE,
163 double L);
164
167 virtual double AvgAlgo(int flvi, int flvf, double InvE, double dInvE,
168 double cosT, double dcosT);
169
172 virtual double AvgAlgoCosT(int flvi, int flvf, double E, double cosT,
173 double dcosT);
174
176 virtual double AlgorithmDensityMatrix(int flvi, int flvf);
177
179 virtual void RotateDensityM(bool to_basis, matrixC V);
180
182 virtual void HadamardProduct(vectorD lambda, double dbin);
183
184 double fcosT;
185
186 double fdInvE;
187 double fdcosT;
188
192
194 Eigen::MatrixXcd fKInvE;
196 Eigen::MatrixXcd fKcosT;
197
205
207
208 // Variables for the compute of the derivation of one layer's length
209 int fLayer;
210 int fdl;
211 double fDetRadius;
212 double fminRsq;
213
216
217 Eigen::MatrixXcd fHam;
218
220 };
221
222} // namespace OscProb
223
224#endif
Base class implementing general functions for computing neutrino oscillations.
Definition: PMNS_Base.h:26
virtual double AvgProbLoE(vectorC nu_in, int flvf, double LoE, double dLoE=0)
Compute the average probability over a bin of L/E.
Definition: PMNS_Base.cxx:1643
virtual double AvgProb(vectorC nu_in, int flvf, double E, double dE=0)
Compute the average probability over a bin of energy.
Definition: PMNS_Base.cxx:1568
Implementation of oscillations of neutrinos in matter in a framework with a Taylor expansion.
Definition: PMNS_Maltoni.h:34
virtual void HadamardProduct(vectorD lambda, double dbin)
Apply an Hadamard Product to the density matrix.
PMNS_Maltoni(int numNus)
Constructor.
double fcosT
Cosine of zenith angle.
Definition: PMNS_Maltoni.h:184
virtual double AvgAlgoCosT(int flvi, int flvf, double E, double cosT, double dcosT)
virtual void MultiplicationRuleS()
Product between two S matrices.
virtual matrixD AvgProbMatrix(int nflvi, int nflvf, double E, double dE)
Eigen::MatrixXcd fHam
The full Hamiltonian.
Definition: PMNS_Maltoni.h:217
virtual void rotateK()
Rotate one K matrix.
virtual void SetIsOscProbAvg(bool isOscProbAvg)
Set flag for which averaging to use.
void TemplateSolver(Eigen::MatrixXcd &K, vectorD &lambda, matrixC &V)
Auxiliary function to choose eigensystem method.
virtual void BuildKcosT()
build K matrix for angle in flavor basis
matrixC fKmass
K matrix in mass basis for one layer.
Definition: PMNS_Maltoni.h:203
virtual void UpdateHam()=0
Build the full Hamiltonian.
virtual double AvgFormulaExtrapolation(int flvi, int flvf, double dE, vectorD flambda, matrixC fV)
Formula for the extrapolation of probability.
matrixC fVInvE
Eigenvalues of K_invE.
Definition: PMNS_Maltoni.h:191
virtual double LnDerivative()
Compute the derivation of one layer's length.
virtual double AlgorithmDensityMatrix(int flvi, int flvf)
Algorithm for the transformations on the density matrix.
Eigen::MatrixXcd fKcosT
K matrix for neutrino angle for the entire path.
Definition: PMNS_Maltoni.h:196
virtual double ExtrapolationProb(int flvi, int flvf, double E, double dE)
Compute the probability of flvi going to flvf for an energy E+dE.
vectorD flambdaInvE
Eigenvectors of K_invE.
Definition: PMNS_Maltoni.h:189
Eigen::MatrixXcd fKInvE
K matrix for the inverse of energy for the entire path.
Definition: PMNS_Maltoni.h:194
virtual void InitializeTaylorsVectors()
Initialize all member vectors with zeros.
OscProb::PremModel fPrem
Earth model used.
Definition: PMNS_Maltoni.h:215
int fdl
Length derivative.
Definition: PMNS_Maltoni.h:210
virtual void rotateS()
Rotate the S matrix.
virtual void PropagateTaylor()
Propagate neutrino through full path.
virtual matrixD AvgProbMatrixLoE(int nflvi, int nflvf, double LoE, double dLoE)
virtual vectorD AvgProbVector(int flvi, double E, double dE)
virtual void PropagatePathTaylor(NuPath p)
Propagate neutrino through a single path.
virtual double AvgAlgo(int flvi, int flvf, double LoE, double dLoE, double L)
virtual void SetCosT(double cosT)
Set neutrino angle.
virtual vectorD AvgProbVectorLoE(int flvi, double LoE, double dLoE)
int fLayer
Layer index.
Definition: PMNS_Maltoni.h:209
double fdInvE
Bin's width for the inverse of energy.
Definition: PMNS_Maltoni.h:186
virtual double AvgFormula(int flvi, int flvf, double dbin, vectorD flambda, matrixC fV)
Formula for the average probability over a bin of width dbin.
virtual void SetPremModel(OscProb::PremModel &prem)
virtual void SetwidthBin(double dE, double dcosT)
Set bin's widths for energy and angle.
vectorD flambdaCosT
Eigenvectors of K_cosTheta.
Definition: PMNS_Maltoni.h:190
double fdcosT
Bin's width for zenith angle.
Definition: PMNS_Maltoni.h:187
virtual double AvgProbLoE(int flvi, int flvf, double LoE, double dLoE)
virtual void RotateDensityM(bool to_basis, matrixC V)
Apply rotation to the density matrix.
bool fIsOscProbAvg
Flag to call OscProb default or Maltoni average.
Definition: PMNS_Maltoni.h:219
double fminRsq
Minimum square radius.
Definition: PMNS_Maltoni.h:212
matrixC fdensityMatrix
The neutrino density matrix state.
Definition: PMNS_Maltoni.h:206
matrixC fVcosT
Eigenvalues of K_cosTheta.
Definition: PMNS_Maltoni.h:201
matrixC fSflavor
S matrix for one layer.
Definition: PMNS_Maltoni.h:202
virtual vectorD GetSamplePointsAvgClass(double LoE, double dLoE)
Compute the sample points fo a bin of L/E with width dLoE.
virtual double AvgProb(int flvi, int flvf, double E, double dE)
void SolveK(Eigen::MatrixXcd &K, vectorD &lambda, matrixC &V)
Solve the K matrix for eigenvectors and eigenvalues.
virtual double ExtrapolationProbCosT(int flvi, int flvf, double cosT, double dcosT)
Compute the probability of flvi going to flvf for an angle cosT+dcosT.
virtual void BuildKE(double L)
build K matrix for the inverse of energy in mass basis
virtual void MultiplicationRuleK(Eigen::MatrixXcd &K)
Product between two K matrices.
double fDetRadius
Detector radius.
Definition: PMNS_Maltoni.h:211
matrixC fKflavor
K matrix in flavor basis for one layer.
Definition: PMNS_Maltoni.h:204
virtual double ExtrapolationProbLoE(int flvi, int flvf, double LoE, double dLoE)
Compute the probability of flvi going to flvf at LoE+dLoE.
Implements an earth model with spherical shells.
Definition: PremModel.h:33
Some useful general definitions.
Definition: Absorption.h:6
std::vector< double > vectorD
Definition: Definitions.h:18
std::vector< vectorD > matrixD
Definition: Definitions.h:19
std::vector< vectorC > matrixC
Definition: Definitions.h:23
A struct representing a neutrino path segment.
Definition: NuPath.h:34