14 #include "TObjString.h" 23 REGISTER_LOADFROM(
"PredictionSyst3Flavor2020", IPrediction, PredictionSyst3Flavor2020);
29 const std::vector<const ISyst*>&
systs,
39 gROOT->SetMustClean(
false);
48 << (mergePeripheral ?
"true" :
"false") <<
std::endl;
50 std::cout <<
"use FakeNDData predictions is " 51 << (isFakeData ?
"true" :
"false") <<
std::endl;
73 std::string FileDir =
"/cvmfs/nova.osgstorage.org/analysis/3flavor/Predictions/";
79 if (
IsFHC() && !isFakeData) { fnameSyst = FileDir +
"pred_xp_nue_combo_Nue2020Axis_full_FHCAllSysts_PtQuants3_nueconcat_realNDData_20200427.root";
80 }
else if (!
IsFHC() && !isFakeData) { fnameSyst = FileDir +
"pred_xp_nue_prop_Nue2020Axis_full_RHCAllSysts_PtQuants3_nueconcat_realNDData_20200427.root";
81 }
else if (
IsFHC() && isFakeData) { fnameSyst = FileDir +
"pred_xp_nue_combo_Nue2020Axis_full_FHCAllSysts_PtQuants3_nueconcat_fakeNDData_20200427.root";
82 }
else if (!
IsFHC() && isFakeData) { fnameSyst = FileDir +
"pred_xp_nue_prop_Nue2020Axis_full_RHCAllSysts_PtQuants3_nueconcat_fakeNDData_20200427.root";
86 if (
IsFHC() && !isFakeData) { fnameSyst = FileDir +
"pred_Nue2020Axis_full_FHCAllSysts_nueconcat_20200428.root";
87 }
else if (!
IsFHC() && !isFakeData) { fnameSyst = FileDir +
"pred_Nue2020Axis_full_RHCAllSysts_nueconcat_20200428.root";
88 }
else if (
IsFHC() && isFakeData) { fnameSyst = FileDir +
"pred_xp_nue_combo_Nue2020Axis_full_FHCAllSysts_nueconcat_fakeNDData_20200427.root";
89 }
else if (!
IsFHC() && isFakeData) { fnameSyst = FileDir +
"pred_xp_nue_prop_Nue2020Axis_full_RHCAllSysts_nueconcat_fakeNDData_20200427.root";
96 TFile* fSyst = TFile::Open(fnameSyst.c_str(),
"read");
115 PredictionNoExtrap* nomNoExtrap = ana::LoadFrom<PredictionNoExtrap>(fSyst,
"pred_nxp_Nominal/noShift" + varname).
release();
120 for(
const ISyst* syst: systs)
147 if (
sigma == 0) {sp.
preds.push_back(nom);
continue;}
153 sp.
preds.push_back(nom);
167 PredictionNoExtrap* shNoExtrap = ana::LoadFrom<PredictionNoExtrap>(fSyst,
"pred_nxp_" + systName + sigmaStr +varname).
release();
194 const int EhadFracQuant,
195 const std::vector<const ISyst*>&
systs,
202 gROOT->SetMustClean(
false);
210 std::cout <<
"use FakeNDData predictions is " 211 << (isFakeData ?
"true" :
"false") <<
std::endl;
219 if (EhadFracQuant == -1) VarName =
"numu_pred_NumuEnergy";
221 std::cout <<
"\nLooking at VarName " << VarName <<
" --> Loading nominals now..." <<
std::endl;
229 std::string FileDir =
"/cvmfs/nova.osgstorage.org/analysis/3flavor/Predictions/";
235 if (
IsFHC() && !isFakeData ) { fnameSyst = FileDir +
"pred_xp_numu_NumuEnergy_AllQuantiles_full_FHCAllSysts_PtQuants3_numuconcat_realNDData_20200427.root";
236 }
else if ( !
IsFHC() && !isFakeData ) { fnameSyst = FileDir +
"pred_xp_numu_NumuEnergy_AllQuantiles_full_RHCAllSysts_PtQuants3_numuconcat_realNDData_20200427.root";
237 }
else if (
IsFHC() && isFakeData ) { fnameSyst = FileDir +
"pred_xp_numu_NumuEnergy_AllQuantiles_full_FHCAllSysts_PtQuants3_numuconcat_fakeNDData_20200427.root";
238 }
else if ( !
IsFHC() && isFakeData ) { fnameSyst = FileDir +
"pred_xp_numu_NumuEnergy_AllQuantiles_full_RHCAllSysts_PtQuants3_numuconcat_fakeNDData_20200427.root";
242 if (
IsFHC() && !isFakeData ) { fnameSyst = FileDir +
"pred_NumuEnergy_AllQuantiles_full_FHCAllSysts_numuconcat_20200428.root";
243 }
else if ( !
IsFHC() && !isFakeData ) { fnameSyst = FileDir +
"pred_NumuEnergy_AllQuantiles_full_RHCAllSysts_numuconcat_20200428.root";
244 }
else if (
IsFHC() && isFakeData ) { fnameSyst = FileDir +
"pred_xp_numu_NumuEnergy_AllQuantiles_full_FHCAllSysts_numuconcat_fakeNDData_20200427.root";
245 }
else if ( !
IsFHC() && isFakeData ) { fnameSyst = FileDir +
"pred_xp_numu_NumuEnergy_AllQuantiles_full_RHCAllSysts_numuconcat_fakeNDData_20200427.root";
252 TFile*
fin = TFile::Open(fnameSyst.c_str(),
"read");
262 std::string NomVar = extrapStr+
"Nominal/noShift/"+VarName;
267 for(
const ISyst* syst: systs){
297 if (
sigma == 0) {sp.
preds.push_back(nom);
continue;}
304 sp.
preds.push_back(nom);
312 else shCore = ana::LoadFrom<PredictionExtrap> (
fin, extrapStr + systName + sigmaStr +VarName).
release();
313 sp.
preds.push_back(shCore);
351 const double kNormNumuFHC = 0.0059;
352 const double kNormNueFHC = 0.0069;
354 const double kNormNumuRHC = 0.0073;
355 const double kNormNueRHC = 0.0076;
364 const double kNormHornCorr = 0.0082;
410 const std::vector<const ISyst*>&
systs,
411 double fracNueApp,
double fracOthers)
414 if(std::find(systs.begin(), systs.end(), syst) == systs.end())
return;
417 const int nBins = h->GetNbinsX();
428 normsp.
fits[CoeffsType::kNueApp].resize(nBins+2);
430 for(
int binIdx = 0; binIdx < nBins+2; ++binIdx){
431 normsp.
fits[CoeffsType::kNueApp][binIdx].emplace_back(0, 0, fracNueApp, 1);
438 for(
int binIdx = 0; binIdx < nBins+2; ++binIdx){
439 normsp.
fits[
coeff][binIdx].emplace_back(0, 0, fracOthers, 1);
446 fPreds.emplace(syst, normsp);
504 if(sigma == -2)
return "minusTwo";
505 if(sigma == -1)
return "minusOne";
506 if(sigma == 0)
return "";
507 if(sigma == +1)
return "plusOne";
508 if(sigma == +2)
return "plusTwo";
524 std::cout <<
"ENu2020ExtrapType must be kComboPtExtrap or kPropPtExtrap" <<
std::endl;
530 std::vector<std::string> pred_paths;
533 pred_paths.push_back( Form(
"%s_%s/%s/%s", bkgd_str.c_str(), syst_name.c_str(), sigma_str.c_str(), var.c_str() ) );
537 for (
int ptQuant = 1; ptQuant <= NPtQuants; ++ptQuant )
539 std::string signal_path = Form(
"%s_%s/%s/%s_Signal_PtQuant%d", signal_str.c_str(), syst_name.c_str(), sigma_str.c_str(), var.c_str(), ptQuant );
540 pred_paths.push_back( signal_path );
549 if ( EhadFracQuant < 1 || EhadFracQuant > 4 )
555 std::string base_path = Form(
"pred_xp_numu_%s/%s/numu_pred_NumuEnergy_EhadFracQuant%d", syst_name.c_str(), sigma_str.c_str(), EhadFracQuant );
558 std::vector<std::string> pred_paths;
559 for (
int ptQuant = 1; ptQuant <= NPtQuants; ++ptQuant )
561 pred_paths.push_back( base_path + Form(
"_PtQuant%dof%d", ptQuant, NPtQuants ) );
570 if(
fBeam ==
"fhc" )
return true;
571 if(
fBeam ==
"rhc")
return false;
573 std::cout <<
"PredictionSyst3Flavor2020: Bad beam string: "
static std::unique_ptr< PredictionSyst3Flavor2020 > LoadFrom(TDirectory *dir, const std::string &name)
const DummyAnaSyst kAna2020NormFHC("NormFHC2020","FHC. Norm.")
Cuts and Vars for the 2020 FD DiF Study.
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.
virtual const std::string & ShortName() const final
The name printed out to the screen.
General interface to oscillation calculators.
std::vector< std::vector< std::vector< Coeffs > > > fitsNubar
Will be filled if signs are separated, otherwise not.
IPrediction * LoadNuePtExtrapPred(TFile *file, ENu2020ExtrapType extrap, std::string syst_name, std::string sigma_str) const
const DummyAnaSyst kAna2020NormHornCorr("NormHornCorr","HornCorr Norm.")
std::vector< int > GetDummyShifts(const ISyst *s)
const DummyAnaSyst kAna2020NormRHC("NormRHC2020","RHC. Norm.")
const NueAcceptSystSignalKin2020FHC kNueAcceptSystSignalKin2020FHC
Encapsulate code to systematically shift a caf::SRProxy.
bool IsFHC() const
Interprets fBeam.
const LeptonAngleSyst kLeptonAngleSystNDYZ2020("LeptonAngleSystNDYZ2020","Lepton Angle Syst ND YZ", caf::kNEARDET, kAngleShiftYZ, 0.010)
void SaveTo(TDirectory *dir, const std::string &name) const override
const LeptonAngleSyst kLeptonAngleSystNDXZ2020("LeptonAngleSystNDXZ2020","Lepton Angle Syst ND XZ", caf::kNEARDET, kAngleShiftXZ, 0.010)
std::unique_ptr< IPrediction > fPredNom
The nominal prediction.
const LeptonAngleSyst kLeptonAngleSystFDXZ2020("LeptonAngleSystFDXZ2020","Lepton Angle Syst FD XZ", caf::kFARDET, kAngleShiftXZ, 0.010)
const DummyAnaSyst kAnaCherenkovSyst("Cherenkov","Cherenkov")
const Binning kNue2020Binning
std::vector< double > shifts
Shift values sampled.
IPrediction * LoadNumuPtExtrapPred(TFile *file, int EhadFracQuant, std::string syst_name, std::string sigma_str) const
void AddNormSyst(const ISyst *syst, const std::vector< const ISyst * > &systs, double fracNueApp, double fracOthers)
std::string getenv(std::string const &name)
void AddNormSysts(const std::vector< const ISyst * > &systs, ENu2020ExtrapType extrap)
Must set fBeam first.
std::vector< IPrediction * > preds
virtual ~PredictionSyst3Flavor2020()
const NueAcceptSystSignalKin2020FHC kNueAcceptSystSignalKinPtExtrap2020FHC(ana::kExtrapPt,"accept_signalkin_pTextrap_FHC_2020")
std::string SigmaToString(int sigma) const
std::unique_ptr< IPrediction > LoadFrom< IPrediction >(TDirectory *dir, const std::string &label)
double coeff(double W, int m, int l, bool real)
Oscillation probability calculators.
const MichelTaggingSyst2020 kMichelTaggingSyst2020
virtual _IOscCalc * Copy() const =0
Spectrum Predict(osc::IOscCalc *calc) const override
REGISTER_LOADFROM("BENDecomp", IDecomp, BENDecomp)
Standard interface to all prediction techniques.
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.
PredictionSyst3Flavor2020()
const DummyAnaSyst kAnaCalibDriftSyst("CalibDrift","CalibDrift")
const LeptonAngleSyst kLeptonAngleSystFDYZ2020("LeptonAngleSystFDYZ2020","Lepton Angle Syst FD YZ", caf::kFARDET, kAngleShiftYZ, 0.010)
const NueAcceptSystSignalKin2020RHC kNueAcceptSystSignalKinPtExtrap2020RHC(ana::kExtrapPt,"accept_signalkin_pTextrap_RHC_2020")
std::vector< std::vector< std::vector< Coeffs > > > fits
Indices: [type][histogram bin][shift bin].
const NueAcceptSystSignalKin2020RHC kNueAcceptSystSignalKin2020RHC