45 std::vector<CutDef >
sels = {
51 {
"5_kNusNDExtra", kNus17NDExtra},
52 {
"6_kNusNDPtp", kNus17NDExtra && (
kPartPtp <= 0.8)}
58 std::vector<double> passes;
59 for(
unsigned int i = 0;
i < sels.size(); ++
i){
60 if(sels[
i].
cut(sr)) passes.push_back(
i);
82 std::vector<std::vector<Spectrum*> > spects;
83 std::vector<std::vector<Spectrum*> > spectsMC;
84 std::vector<std::vector<CheatDecomp*> > preds;
86 for(
int selIdx = 0; selIdx < (
int)sels.size(); ++selIdx){
87 std::vector<Spectrum*> temp_spec;
88 std::vector<Spectrum*> temp_specMC;
89 std::vector<CheatDecomp*> temp_pred;
91 for(
int varIdx = 0; varIdx < (
int)nus_defs.size(); ++varIdx){
101 spects.push_back(temp_spec);
102 spectsMC.push_back(temp_specMC);
103 preds.push_back(temp_pred);
106 auto spfl_data =
new Spectrum(
"Cut Flow", flowBins, loaderData, kCutFlowVar,
kNoCut);
107 auto spfl_ndmc =
new Spectrum(
"Cut Flow", flowBins, loaderMC, kCutFlowVar,
kNoCut);
112 TFile*
fout =
new TFile(predFileName.c_str(),
"RECREATE");
113 for(
int selIdx = 0; selIdx < (
int)sels.size(); ++selIdx){
114 const char*
cut = sels[selIdx].name.c_str();
115 for(
int varIdx = 0; varIdx < (
int)nus_defs.size(); ++varIdx){
116 const char*
name = nus_defs[varIdx].name.c_str();
117 spects[selIdx][varIdx]->SaveTo(fout,
TString::Format(
"spect_%s_%s", name, cut));
118 spectsMC[selIdx][varIdx]->SaveTo(fout,
TString::Format(
"spectMC_%s_%s", name, cut));
119 preds[selIdx][varIdx]->SaveTo(fout,
TString::Format(
"pred_%s_%s", name, cut));
124 spfl_data->SaveTo(fout,
"spect_data_cutflow");
125 spfl_ndmc->SaveTo(fout,
"spect_mc_cutflow");
136 TFile * predFile =
new TFile (predFileName.c_str(),
"READ");
137 TString validFileName1 (predFileName); validFileName1.ReplaceAll(
".root",
"_mc_validation.root");
138 TString validFileName2 (predFileName); validFileName2.ReplaceAll(
".root",
"_data_validation.root");
140 TFile * validFile1 =
new TFile(validFileName1,
"RECREATE");
141 TFile * validFile2 =
new TFile(validFileName2,
"RECREATE");
147 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
148 const char*
cut = sels[selIdx].name.c_str();
149 for(
int varIdx = 0; varIdx <
kNumVars; ++varIdx){
150 const char*
name = nus_defs[varIdx].name.c_str();
157 spec->SaveTo(validFile2,
TString::Format(
"%s{group=Cut,cat=%s}", name,cut));
158 specMC->SaveTo(validFile1,
TString::Format(
"%s{group=Cut,cat=%s}", name,cut));
163 TDirectory* comp = validFile1->GetDirectory(
"MCComponents");
164 if(!comp) comp = validFile1->mkdir(
"MCComponents");
169 pred->AntiNueComponent().
SaveTo(comp,
TString::Format(
"%s{group=Cut,cat=%s}{group=Component,cat=3_antinue}", name,cut));
170 pred->AntiNumuComponent().SaveTo(comp,
TString::Format(
"%s{group=Cut,cat=%s}{group=Component,cat=4_antinumu}", name,cut));
172 (*specMC-(
pred->TotalMC())).SaveTo(comp,
TString::Format(
"%s_{group=Cut,cat=%s}{group=Component,cat=5_other}",name,cut));
176 spfl->SaveTo(validFile2,
TString::Format(
"%s{group=Cut,cat=%s}",
"_cutflow",cut));
179 spfl->SaveTo(validFile1,
TString::Format(
"%s{group=Cut,cat=%s}",
"_cutflow",cut));
182 std::cout <<
"Formatted outputs saved to " << validFileName1 <<
" and " << validFileName2 <<
std::endl;
void NDDataMC(const std::string predFileName, const bool makeFile=false, const std::string ldrData="", const std::string ldrMC="")
const Var kPartPtp([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.partptp)|| std::isinf(1.*sr->sel.nuecosrej.partptp)) return-5.f;return float(sr->sel.nuecosrej.partptp);})
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
std::vector< HistDef > getAllNusAna01NDHistDefs()
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
Proxy for caf::StandardRecord.
const Cut kNus17NDFiducial([](const caf::SRProxy *sr){assert(sr->vtx.elastic.IsValid &&"Must apply EQ cuts");if(sr->vtx.elastic.vtx.X()< -100.0) return false;if(sr->vtx.elastic.vtx.X() > 100.0) return false;if(sr->vtx.elastic.vtx.Y()< -100.0) return false;if(sr->vtx.elastic.vtx.Y() > 100.0) return false;if(sr->vtx.elastic.vtx.Z()< 150.0) return false;if(sr->vtx.elastic.vtx.Z() > 1000.0) return false;return true;})
void SetSpillCut(const SpillCut &cut)
static std::unique_ptr< CheatDecomp > LoadFrom(TDirectory *dir, const std::string &name)
static std::unique_ptr< Spectrum > LoadFrom(TDirectory *dir, const std::string &name)
const Cut kNus17ND
Full Nus17 ND analysis selection.
Struct to hold cut information.
std::vector< float > Spectrum
const SystShifts kNoShift
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
const Var kDummy([](const caf::SRProxy *sr){return 1;})
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
void Format(TGraph *gr, int lcol, int lsty, int lwid, int mcol, int msty, double msiz)
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
const Cut kNus17EventQuality([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;if(sr->sel.nuecosrej.hitsperplane >=8) return false;if(sr->vtx.elastic.fuzzyk.npng==0) return false;if(sr->slc.ncontplanes<=2) return false;return true;})
Data Quality cuts from docdb 21113.
Just return the ND truth spectra as the decomposition.
const Cut kNoCut
The simplest possible cut: pass everything, used as a default.