4#include "../tutorial/SetNiceStyle.C"
23 p->
SetDm(3, 2.507e-3);
25 p->
SetAngle(1,3, asin(sqrt(0.02225)));
27 p->
SetDelta(1,3, 232 * TMath::DegToRad());
149 p->
SetaT(0,0, 0.1e-22, 0);
150 p->
SetaT(0,1, 0.2e-22, 0);
151 p->
SetaT(0,2, 0.3e-22, 0);
152 p->
SetaT(1,1, 0.4e-22, 0);
153 p->
SetaT(1,2, 0.5e-22, 0);
154 p->
SetaT(2,2, 0.6e-22, 0);
155 p->
SetcT(0,0, 0.1e-22, 0);
156 p->
SetcT(0,1, 0.2e-22, 0);
157 p->
SetcT(0,2, 0.3e-22, 0);
158 p->
SetcT(1,1, 0.4e-22, 0);
159 p->
SetcT(1,2, 0.5e-22, 0);
160 p->
SetcT(2,2, 0.6e-22, 0);
188 if(model ==
"Iter")
return GetIter(is_nominal);
189 if(model ==
"Deco")
return GetDeco(is_nominal);
190 if(model ==
"Sterile")
return GetSterile(is_nominal);
191 if(model ==
"Decay")
return GetDecay(is_nominal);
192 if(model ==
"NSI")
return GetNSI(is_nominal);
193 if(model ==
"LIV")
return GetLIV(is_nominal);
194 if(model ==
"SNSI")
return GetSNSI(is_nominal);
195 if(model ==
"NUNM")
return GetNUNM(is_nominal);
196 if(model ==
"OQS")
return GetOQS(is_nominal);
205 return {
"Fast",
"Iter",
"Sterile",
"NSI",
206 "Deco",
"Decay",
"LIV",
"SNSI",
226 vector<double> xbins = GetLogAxis(nbins, 0.1, 10);
229 TFile* f =
new TFile(
"data/"+filename,
"recreate");
231 for(
int flvi=0; flvi<3; flvi++){
232 for(
int flvf=0; flvf<3; flvf++){
233 for(
int isnb=0; isnb<2; isnb++){
235 TString hname = TString::Format(
"h%d%d%d",flvi,flvf,isnb);
236 h =
new TH1D(hname,
"", nbins, &xbins[0]);
237 for(
int i=1; i<=nbins; i++){
238 double energy = h->GetBinCenter(i);
239 double dE = h->GetBinWidth(i);
240 h->SetBinContent(i, p->
AvgProb(flvi, flvf, energy, dE));
247 cout <<
"Saved new test file: data/" + filename << endl;
256 TFile* f = TFile::Open(
"data/"+filename,
"read");
259 printf((
Color::FAILED +
" data/%s not found\n").c_str(), filename.Data());
270 for(
int flvi=0; flvi<3; flvi++){
271 for(
int flvf=0; flvf<3; flvf++){
272 for(
int isnb=0; isnb<2; isnb++){
274 TString hname = TString::Format(
"h%d%d%d",flvi,flvf,isnb);
275 h0 = (TH1D*)f->Get(hname);
276 h = (TH1D*)h0->Clone();
278 for(
int i=1; i<=h0->GetNbinsX(); i++){
279 double energy = h->GetBinCenter(i);
280 double dE = h->GetBinWidth(i);
281 double p0 = h0->GetBinContent(i);
282 double p1 = p->
AvgProb(flvi, flvf, energy, dE);
284 if(abs(p0-p1)>1e-12){
288 h->SetBinContent(i, p1);
296 TString nu_lab = isnb ?
"#bar{#nu}" :
"#nu";
297 TString flv_lab[3] = {
"e",
"#mu",
"#tau"};
298 TString ylab =
"P(" + nu_lab +
"_{" + flv_lab[flvi] +
299 "}#rightarrow" + nu_lab +
"_{" + flv_lab[flvf] +
"})";
300 h0->SetTitle(
";Energy [GeV];"+ylab+
";");
302 double ymax = max(h->GetMaximum(),
304 double ymin = min(h->GetMinimum(),
306 h0->GetYaxis()->SetRangeUser(ymin, ymax);
307 h0->DrawCopy(
"hist");
308 h->DrawCopy(
"hist same");
312 h->SetTitle(
";Energy [GeV];#Delta"+ylab+
";");
318 MiscText(0.55,0.8,0.1,filename,kGray,1);
320 TString pngfile = filename;
321 pngfile.ReplaceAll(
".root",
".png");
322 c1->SaveAs(
"plots/Failed_"+hname+
"_"+pngfile);
330 printf((
Color::FAILED +
" Found %d differences in %d tests (%.3g%%) in %s\n").c_str(),
331 fails, ntests, 100.*fails/ntests, filename.Data());
334 cout <<
Color::PASSED <<
" No differences found in " << filename << endl;
OscProb::PMNS_NUNM * GetNUNM(bool is_nominal)
OscProb::PMNS_LIV * GetLIV(bool is_nominal)
OscProb::PMNS_Fast * GetFast(bool is_nominal)
OscProb::PMNS_Deco * GetDeco(bool is_nominal)
OscProb::PMNS_Sterile * GetSterile(bool is_nominal)
vector< string > GetListOfModels()
void SetNominalPars(OscProb::PMNS_Base *p)
OscProb::PMNS_Iter * GetIter(bool is_nominal)
OscProb::PMNS_NSI * GetNSI(bool is_nominal)
OscProb::PMNS_Base * GetModel(string model, bool is_nominal=false)
void SetTestPath(OscProb::PMNS_Base *p)
OscProb::PMNS_Decay * GetDecay(bool is_nominal)
void SaveTestFile(OscProb::PMNS_Base *p, TString filename)
OscProb::PMNS_SNSI * GetSNSI(bool is_nominal)
OscProb::PMNS_OQS * GetOQS(bool is_nominal)
int CheckProb(OscProb::PMNS_Base *p, TString filename)
Base class implementing general functions for computing neutrino oscillations.
virtual void SetDm(int j, double dm)
Set the mass-splitting dm_j1 in eV^2.
virtual void SetDelta(int i, int j, double delta)
Set the CP phase delta_ij.
virtual void SetIsNuBar(bool isNuBar)
Set the anti-neutrino flag.
virtual double AvgProb(vectorC nu_in, int flvf, double E, double dE=0)
Compute the average probability over a bin of energy.
virtual void AddPath(NuPath p)
Add a path to the sequence.
virtual void SetPath(NuPath p)
Set a single path.
virtual void SetAngle(int i, int j, double th)
Set the mixing angle theta_ij.
Implementation of neutrino decay in a three-neutrino framework.
virtual void SetAlpha3(double alpha3)
Implementation of oscillations of neutrinos in matter in a three-neutrino framework with decoherence.
virtual void SetGamma(int j, double val)
Set any given decoherence parameter.
Implementation of oscillations of neutrinos in matter in a three-neutrino framework.
Implementation of oscillations of neutrinos in matter in a three-neutrino framework.
Implements oscillations with LIV as modelled by SME.
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)
Implementation of oscillations of neutrinos in matter in a three-neutrino framework with NSI.
virtual void SetEps(int flvi, int flvj, double val, double phase)
Set any given NSI parameter.
Implementation of oscillations of neutrinos in matter in a three-neutrino framework with Non unitary ...
virtual void SetAlpha(int i, int j, double val, double phase)
Set any given NUNM parameter.
Implements neutrino oscillations using an open quantum system approach.
virtual void SetDecoAngle(int i, int j, double th)
Set mixing angle between two decoherence parameters a_i, a_j.
virtual void SetDecoElement(int i, double val)
Set value of the a_i decoherence element in Gell-Mann basis.
Implementation of oscillations of neutrinos in matter in a three-neutrino framework with scalar NSI.
Implementation of oscillations of neutrinos in matter in a N-neutrino framework.
static const string PASSED
static const string FAILED