13 #include "TObjString.h" 22 template<> std::unique_ptr<osc::IOscCalc>
25 TDirectory*
subdir(dir->GetDirectory(
name.c_str()));
28 TObjString* ptag = (TObjString*)subdir->Get(
"type");
30 const TString
tag = ptag->GetString();
35 if(tag ==
"OscCalculatorDumb")
return std::unique_ptr<osc::IOscCalc>(
new osc::OscCalcDumb);
38 return LoadFrom<osc::IOscCalcAdjustable>(
dir,
name);
42 template<> std::unique_ptr<osc::IOscCalcAdjustable>
45 std::unique_ptr<TDirectory>
dir(topdir->GetDirectory(
name.c_str()));
48 TObjString* ptag = (TObjString*)dir->Get(
"type");
50 const TString
tag = ptag->GetString();
72 if(tag ==
"OscCalculatorSterile") {
73 std::vector<double>
state;
74 for (
int i = 0;
i < params->GetNrows(); ++
i) {
75 state.push_back( (*params)[
i] );
78 return std::unique_ptr<osc::IOscCalcAdjustable>(
ret);
81 if(tag ==
"OscCalculatorPMNS_NSI") {
82 std::vector<double>
state;
83 for (
int i = 0;
i < params->GetNrows(); ++
i) {
84 state.push_back( (*params)[
i] );
87 return std::unique_ptr<osc::IOscCalcAdjustable>(
ret);
90 assert(params->GetNrows() == 8);
92 ret->
SetL ((*params)[0]);
93 ret->
SetRho ((*params)[1]);
99 ret->
SetdCP ((*params)[7]);
101 return std::unique_ptr<osc::IOscCalcAdjustable>(
ret);
107 TDirectory*
tmp = gDirectory;
109 dir = dir->mkdir(name.c_str());
116 ~DirCleaner(){fDir->Write();
delete fDir;}
121 if(dynamic_cast<const osc::NoOscillations*>(&x)){
122 TObjString(
"NoOscillations").Write(
"type");
127 if(dynamic_cast<const osc::OscCalcDumb*>(&x)){
128 TObjString(
"OscCalculatorDumb").Write(
"type");
141 TObjString(
"OscCalculatorSterile").Write(
"type");
144 for (
unsigned int i = 0;
i < state.size(); ++
i)
params[
i] = state[
i];
153 TObjString(
"OscCalculatorPMNS_NSI").Write(
"type");
156 for (
unsigned int i = 0;
i < state.size(); ++
i)
params[
i] = state[
i];
162 if(dynamic_cast<const osc::OscCalc*>(&x)) TObjString(
"OscCalculatorPMNS").Write(
"type");
163 else if(dynamic_cast<const osc::OscCalcGeneral*>(&x)) TObjString(
"OscCalculatorGeneral").Write(
"type");
164 else if(dynamic_cast<const osc::OscCalcPMNS*>(&x)) TObjString(
"OscCalculatorPMNS").Write(
"type");
165 else if(dynamic_cast<const osc::OscCalcPMNSOpt*>(&x)) TObjString(
"OscCalculatorPMNSOpt").Write(
"type");
166 else if(dynamic_cast<const osc::OscCalcDMP*>(&x)) TObjString(
"OscCalculatorDMP").Write(
"type");
167 else if(dynamic_cast<const osc::OscCalcAnalytic*>(&x)) TObjString(
"OscCalculatorAnalytic").Write(
"type");
175 params[0] = y->
GetL();
184 params.Write(
"params");
Optimized version of OscCalcPMNS.
virtual void SetL(double L)=0
Cuts and Vars for the 2020 FD DiF Study.
More generic (but probably slower) oscillation calculations.
_OscCalcPMNSOpt< double > OscCalcPMNSOpt
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
virtual void SetDmsq21(const T &dmsq21)=0
std::vector< double > GetState() const
General interface to oscillation calculators.
virtual double GetL() const
virtual void SetTh13(const T &th13)=0
Adapt the PMNS_Sterile calculator to standard interface.
virtual T GetTh23() const
virtual void SetDmsq32(const T &dmsq32)=0
_NoOscillations< double > NoOscillations
std::vector< double > GetState() const
_OscCalcDMP< double > OscCalcDMP
Simple oscillation probability calculator that has no solar term or mass hierarchy or delta so it's s...
virtual T GetDmsq32() const
virtual T GetTh12() const
virtual T GetTh13() const
virtual T GetDmsq21() const
virtual void SetRho(double rho)=0
_OscCalcPMNS< double > OscCalcPMNS
virtual void SetTh23(const T &th23)=0
assert(nhit_max >=nhit_nbins)
_OscCalcAnalytic< double > OscCalcAnalytic
virtual double GetRho() const
virtual void SetTh12(const T &th12)=0
virtual void SetdCP(const T &dCP)=0