31 const bool makeFile=
false,
46 std::vector<CutDef>
sels = {
52 {
"5_kNusCVN", kNus17FDSansTimePtpAlt},
55 {
"8_kNusFDNhit", kNus17FDExtraAlt}
61 std::vector<double> passes;
62 for(
unsigned int i = 0;
i < sels.size(); ++
i){
63 if(sels[
i].
cut(sr)) passes.push_back(
i);
78 std::vector<std::vector<Spectrum*> > spects;
79 std::vector<std::vector<Spectrum*> > spectsMC;
80 std::vector<std::vector<IPrediction*> > preds;
82 for(
int selIdx = 0; selIdx < (
int)sels.size(); ++selIdx){
83 std::vector<Spectrum *> temp_spec_non;
84 std::vector<Spectrum *> temp_specMC;
85 std::vector<IPrediction *> temp_pred;
87 for(
int varIdx = 0; varIdx < (
int)defs.size(); ++varIdx){
89 temp_spec_non.emplace_back(
new Spectrum(loaderCosmic,
94 temp_specMC.emplace_back(
new Spectrum(loaderMCnon,
109 spects.push_back(temp_spec_non);
110 preds.push_back(temp_pred);
117 TFile*
fout =
new TFile(predFileName.c_str(),
"RECREATE");
118 for(
int selIdx = 0; selIdx < (
int)sels.size(); ++selIdx){
119 const char*
cut = sels[selIdx].name.c_str();
120 for(
int varIdx = 0; varIdx < (
int)defs.size(); ++varIdx){
121 const char*
name = defs[varIdx].name.c_str();
122 spects[selIdx][varIdx]->SaveTo(fout,
TString::Format(
"spect_%s_%s", name, cut));
123 preds[selIdx][varIdx]->SaveTo(fout,
TString::Format(
"pred_%s_%s", name, cut));
137 TFile * predFile =
new TFile (predFileName.c_str(),
"READ");
138 TString validFileName1 (predFileName); validFileName1.ReplaceAll(
".root",
"_fhc_mc_validation.root");
139 TString validFileName2 (predFileName); validFileName2.ReplaceAll(
".root",
"_cosmic_validation.root");
141 TFile * validFile1 =
new TFile(validFileName1,
"RECREATE");
142 TFile * validFile2 =
new TFile(validFileName2,
"RECREATE");
150 for(
int selIdx = 0; selIdx <
kNumSels; ++selIdx){
151 const char*
cut = sels[selIdx].name.c_str();
152 for(
int varIdx = 0; varIdx <
kNumVars; ++varIdx){
153 const char*
name = defs[varIdx].name.c_str();
158 spec->SaveTo(validFile2,
TString::Format(
"%s{group=Cut,cat=%s}", name,cut));
171 std::cout <<
"Formatted outputs saved to "
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
const std::vector< T > & GetVars() const
const Cut kApplySecondAnalysisMask([](const caf::SRProxy *sr){if(sr->hdr.det!=caf::kFARDET) return true; std::bitset< 14 > binary(sr->hdr.dibmask);std::pair< int, int > planesA=calcFirstLastLivePlane(sr->slc.firstplane, binary);std::pair< int, int > planesB=calcFirstLastLivePlane(sr->slc.lastplane, binary);if((planesA.first!=planesB.first)||(planesA.second!=planesB.second)) return false;return((planesA.second-planesA.first+1)/64 >=4);})
Proxy for caf::StandardRecord.
const Cut kNus17BackwardCut
FD backward photon rejection cut, inherited from nue, from docdb 21113.
void SetSpillCut(const SpillCut &cut)
osc::IOscCalcAdjustable * DefaultOscCalc()
Create a new calculator with default assumptions for all parameters.
const Cut kInTimingSideband([](const caf::SRProxy *sr){if(sr->spill.run > util::kLastBadTimingRun) return(kInTimingSideband_before(sr)|| kInTimingSideband_after(sr));else return(kInTimingSideband_before(sr)|| kInTimingSideband_afterA(sr)|| kInTimingSideband_afterB(sr));}, [](const caf::SRSpillProxy *spill){if(spill->run > util::kLastBadTimingRun) return(kInTimingSideband_before.Livetime(spill)+ kInTimingSideband_after.Livetime(spill));else return(kInTimingSideband_before.Livetime(spill)+ kInTimingSideband_afterA.Livetime(spill)+ kInTimingSideband_afterB.Livetime(spill));}, [](const caf::SRSpillProxy *spill){return 0;})
std::vector< HistDef > getAllNusAna01FDHistDefs()
Charged-current interactions.
Interactions of both types.
static std::unique_ptr< Spectrum > LoadFrom(TDirectory *dir, const std::string &name)
void FDDataMC(const std::string predFileName, const bool makeFile=false, const std::string ldrFDnon="", const std::string ldrFDswp="", const std::string ldrCosmic="")
Struct to hold cut information.
const Cut kNus17NCCosRejAlt
Until nccosrej branch is in CAFs, must use these cuts.
const HistDef defs[kNumVars]
std::vector< float > Spectrum
const SystShifts kNoShift
const std::vector< Binning > & GetBinnings() const
const Cut kNus17Veto([](const caf::SRProxy *sr){return sr->sel.veto.keep;})
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
const Cut kNus17SlcTimeGap
Closest slice cuts based on approximation in space and time, from from docdb 21113.
Neutral-current interactions.
const Cut kInBeamSpill([](const caf::SRProxy *sr){if(sr->spill.run > util::kLastBadTimingRun) return kInBeamSpill_main(sr);else return kInBeamSpill_main(sr)||kInBeamSpill_shifted(sr);}, [](const caf::SRSpillProxy *spill){if(spill->run > util::kLastBadTimingRun) return kInBeamSpill_main.Livetime(spill);else return kInBeamSpill_main.Livetime(spill)+kInBeamSpill_shifted.Livetime(spill);}, [](const caf::SRSpillProxy *spill) -> double{return spill->spillpot;})
Does the event fall inside the window we call the beam spill?
Both neutrinos and antineutrinos.
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)
All neutrinos, any flavor.
const Cut kNus17FDPresel
The Nus17 preselection cuts for the Far Detector from docdb 21113.
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.
const std::vector< std::string > & GetLabels() const