11 #include "TObjString.h" 22 const DummyNumu2017Syst
kNumu2017MECq0ShapeSyst (
"numu2017MECq0Shape" ,
"MECq0Shape" , {-2, -1, 0, +1, +2},
false);
25 const DummyNumu2017Syst
kNumu2017RPAShapeEnhSyst (
"numu2017RPAShapeenh" ,
"RPAShapeEnh" , {-2, -1, 0, +1, +2},
false);
26 const DummyNumu2017Syst
kNumu2017MaCCRESSyst (
"numu2017MaCCRES" ,
"MaCCRES" , {-2, -1, 0, +1, +2},
false);
27 const DummyNumu2017Syst
kNumu2017MaNCRESSyst (
"numu2017MaNCRES" ,
"MaNCRES" , {-2, -1, 0, +1, +2},
false);
28 const DummyNumu2017Syst
kNumu2017MvCCRESSyst (
"numu2017MvCCRES" ,
"MvCCRES" , {-2, -1, 0, +1, +2},
false);
29 const DummyNumu2017Syst
kNumu2017DISvnCC1piSyst (
"numu2017DISvnCC1pi" ,
"DISvnCC1pi" , {-2, -1, 0, +1, +2},
false);
30 const DummyNumu2017Syst
kNumu2017AllSmallSysts (
"numu2017SumSmallXSecJoint2017",
"SumSmallXSecJoint2017", {-2, -1, 0, +1, +2},
false);
31 const DummyNumu2017Syst
kNumu2017NumuSmallSysts (
"numu2017SumSmallXSecNumu2017" ,
"SumSmallXSecNumu2017" , {-2, -1, 0, +1, +2},
false);
33 const DummyNumu2017Syst
kNumu2017AllBeamSysts(
"numu2017beamTransportComb",
"beamTransportComb", {-2, -1, 0, +1, +2},
false);
35 const DummyNumu2017Syst
kNumu2017RelHadEScale(
"numu2017RelHadEScale2017",
"RelHadEScale", {-2, -1, 0, +1, +2},
false);
36 const DummyNumu2017Syst
kNumu2017AbsHadEScale(
"numu2017AbsHadEScale2017",
"AbsHadEScale", {-2, -1, 0, +1, +2},
false);
37 const DummyNumu2017Syst
kNumu2017RelMuEScale (
"numu2017RelMuEScale2017" ,
"RelMuEScale" , {-2, -1, 0, +1, +2},
false);
38 const DummyNumu2017Syst
kNumu2017AbsMuEScale (
"numu2017AbsMuEScale2017" ,
"AbsMuEScale" , {-2, -1, 0, +1, +2},
false);
40 const DummyNumu2017Syst
kNumu2017AbsCalibSyst (
"numu2017Calibration" ,
"AbsCalib" , {-1, 0, +1},
false);
41 const DummyNumu2017Syst
kNumu2017RelCalibSyst (
"numu2017RelativeCalib",
"RelativeCalib", {-2, 0, +2},
false);
46 const DummyNumu2017Syst
kNumu2017PPFXPC00Syst (
"numu2017ppfx_pc00",
"PPFXPC00Sys", {-2, -1, 0, +1, +2},
false);
47 const DummyNumu2017Syst
kNumu2017PPFXPC01Syst (
"numu2017ppfx_pc01",
"PPFXPC01" , {-2, -1, 0, +1, +2},
false);
48 const DummyNumu2017Syst
kNumu2017PPFXPC02Syst (
"numu2017ppfx_pc02",
"PPFXPC02" , {-2, -1, 0, +1, +2},
false);
49 const DummyNumu2017Syst
kNumu2017PPFXPC03Syst (
"numu2017ppfx_pc03",
"PPFXPC03" , {-2, -1, 0, +1, +2},
false);
50 const DummyNumu2017Syst
kNumu2017PPFXPC04Syst (
"numu2017ppfx_pc04",
"PPFXPC04" , {-2, -1, 0, +1, +2},
false);
54 const DummyNumu2017Syst
kNumu2017NormSystSig (
"numu2017normSig" ,
"Sig. Norm." , {0, +1},
false);
55 const DummyNumu2017Syst
kNumu2017NormSystBkg (
"numu2017normBkg" ,
"Bkg. Norm." , {0, +1},
false);
62 const std::vector<const DummyNumu2017Syst*>&
systs,
75 std::cout <<
"\nLooking at VarName " << VarName <<
" --> Loading nominals now..." <<
std::endl;
78 std::string NomVar = extrapStr+
"Nominal/noShift/"+VarName;
80 nom = ana::LoadFromFile<IPrediction>(
fname, NomVar).
release();
82 std::string LNomVar = extrapStr+
"Lightlevel/noShift/"+VarName;
99 for(
int sigma: syst->Shifts()){
103 if (systName ==
"Lightlevel" || systName ==
"Cherenkov") {
104 std::cout <<
"\tLooking at systName " << systName <<
", so pushing back nomLightLevel " <<
std::endl;
105 sp.
preds.push_back(nomLightLevel);
107 sp.
preds.push_back(nom);
113 if(
sigma == -2) sigmaStr +=
"minusTwo/";
114 if(
sigma == -1) sigmaStr +=
"minusOne/";
115 if(
sigma == +1) sigmaStr +=
"plusOne/";
116 if(
sigma == +2) sigmaStr +=
"plusTwo/";
119 auto shCore = ana::LoadFromFile<PredictionExtrap> (
fname, extrapStr + systName + sigmaStr +VarName).
release();
120 sp.
preds.push_back(shCore);
141 const int nBins = h->GetNbinsX();
148 const double normBothSyst = 3.5/100;
149 const double normBkgSyst = 3.5/100;
150 const double normSigSyst = 3.5/100;
154 if(std::count_if(systs.begin(), systs.end(),
155 [](
const ISyst*
s){
return s->ShortName() ==
"numu2017NormBoth";})){
162 for(
int binIdx = 0; binIdx < nBins+2; ++binIdx){
172 if(std::count_if(systs.begin(), systs.end(),
173 [](
const ISyst*
s){
return s->ShortName() ==
"numu2017normBkg";})){
180 for(
int binIdx = 0; binIdx < nBins+2; ++binIdx){
190 if(std::count_if(systs.begin(), systs.end(),
191 [](
const ISyst*
s){
return s->ShortName() ==
"numu2017normSig";})){
198 for(
int binIdx = 0; binIdx < nBins+2; ++binIdx){
210 dir = dir->GetDirectory(name.c_str());
213 TObjString*
tag = (TObjString*)dir->Get(
"type");
216 assert(tag->GetString() ==
"PredictionSystNumu2017");
235 TDirectory*
tmp = gDirectory;
237 dir = (TDirectory*)dir->GetDirectory(name.c_str());
240 TObjString(
"PredictionSystNumu2017").Write(
"type");
const DummyNumu2017Syst kNumu2017NormSystSig("numu2017normSig","Sig. Norm.",{0,+1}, false)
const DummyNumu2017Syst kNumu2017NormSystBoth("numu2017NormBoth","Sig+Bkg Norm.",{0,+1}, false)
Implements systematic errors by interpolation between shifted templates.
Cuts and Vars for the 2020 FD DiF Study.
const DummyNumu2017Syst kNumu2017RelMuEScale("numu2017RelMuEScale2017","RelMuEScale",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017MaCCQE_reducedSyst("numu2017MaCCQE_reduced","MaCCQE_reduced",{-2,-1, 0,+1,+2}, false)
std::string systName
What systematic we're interpolating.
TH1D * ToTH1(double exposure, Color_t col=kBlack, Style_t style=kSolid, EExposureType expotype=kPOT, EBinType bintype=kBinContent) const
Histogram made from this Spectrum, scaled to some exposure.
const DummyNumu2017Syst kNumu2017LightLevelSyst("numu2017Lightlevel","LightLevel",{-1, 0,+1}, false)
const DummyNumu2017Syst kNumu2017AbsMuEScale("numu2017AbsMuEScale2017","AbsMuEScale",{-2,-1, 0,+1,+2}, false)
General interface to oscillation calculators.
const DummyNumu2017Syst kNumu2017PPFXPC03Syst("numu2017ppfx_pc03","PPFXPC03",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017RPAShapeRESSyst("numu2017RPAShapeRES","RPAShapeRES",{0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017MaCCRESSyst("numu2017MaCCRES","MaCCRES",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017MaNCRESSyst("numu2017MaNCRES","MaNCRES",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017MvCCRESSyst("numu2017MvCCRES","MvCCRES",{-2,-1, 0,+1,+2}, false)
Encapsulate code to systematically shift a caf::SRProxy.
std::unique_ptr< IPrediction > fPredNom
The nominal prediction.
const DummyNumu2017Syst kNumu2017CalibShapeSyst("numu2017CalibShape","CalibShape",{0,+1}, false)
const DummyNumu2017Syst kNumu2017PPFXPC04Syst("numu2017ppfx_pc04","PPFXPC04",{-2,-1, 0,+1,+2}, false)
static std::unique_ptr< PredictionSystNumu2017 > LoadFrom(TDirectory *dir, const std::string &name)
virtual void SaveTo(TDirectory *dir, const std::string &name) const override
const DummyNumu2017Syst kNumu2017AbsHadEScale("numu2017AbsHadEScale2017","AbsHadEScale",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017RelCalibSyst("numu2017RelativeCalib","RelativeCalib",{-2, 0,+2}, false)
std::vector< double > shifts
Shift values sampled.
const DummyNumu2017Syst kNumu2017PPFXPC00Syst("numu2017ppfx_pc00","PPFXPC00Sys",{-2,-1, 0,+1,+2}, false)
Loads shifted spectra from files.
std::vector< IPrediction * > preds
const DummyNumu2017Syst kNumu2017CherenkovSyst("numu2017Cherenkov","Cherenkov",{0,+1}, false)
double coeff(double W, int m, int l, bool real)
Oscillation probability calculators.
virtual _IOscCalc * Copy() const =0
Spectrum Predict(osc::IOscCalc *calc) const override
const DummyNumu2017Syst kNumu2017PPFXPC01Syst("numu2017ppfx_pc01","PPFXPC01",{-2,-1, 0,+1,+2}, false)
REGISTER_LOADFROM("BENDecomp", IDecomp, BENDecomp)
const DummyNumu2017Syst kNumu2017NormSystBkg("numu2017normBkg","Bkg. Norm.",{0,+1}, false)
void AddNormSysts(const std::vector< const DummyNumu2017Syst * > &systs)
assert(nhit_max >=nhit_nbins)
const DummyNumu2017Syst kNumu2017AllSmallSysts("numu2017SumSmallXSecJoint2017","SumSmallXSecJoint2017",{-2,-1, 0,+1,+2}, false)
Standard interface to all prediction techniques.
const DummyNumu2017Syst kNumu2017RPAShapeEnhSyst("numu2017RPAShapeenh","RPAShapeEnh",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017AbsCalibSyst("numu2017Calibration","AbsCalib",{-1, 0,+1}, false)
std::string to_string(ModuleType mt)
std::unordered_map< const ISyst *, ShiftedPreds > fPreds
osc::IOscCalc * fOscOrigin
The oscillation values we assume when evaluating the coefficients.
static void LoadFromBody(TDirectory *dir, PredictionInterp *ret, std::vector< const ISyst * > veto={})
const DummyNumu2017Syst kNumu2017RelHadEScale("numu2017RelHadEScale2017","RelHadEScale",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017AllBeamSysts("numu2017beamTransportComb","beamTransportComb",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017NumuSmallSysts("numu2017SumSmallXSecNumu2017","SumSmallXSecNumu2017",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017DISvnCC1piSyst("numu2017DISvnCC1pi","DISvnCC1pi",{-2,-1, 0,+1,+2}, false)
virtual ~PredictionSystNumu2017()
void SaveTo(TDirectory *dir, const std::string &name) const override
const DummyNumu2017Syst kNumu2017PPFXPC02Syst("numu2017ppfx_pc02","PPFXPC02",{-2,-1, 0,+1,+2}, false)
const DummyNumu2017Syst kNumu2017MECq0ShapeSyst("numu2017MECq0Shape","MECq0Shape",{-2,-1, 0,+1,+2}, false)
std::vector< std::vector< std::vector< Coeffs > > > fits
Indices: [type][histogram bin][shift bin].