26 const Var kSliceMeanTime =
SIMPLEVAR(hdr.subevtmeantime);
30 const HistAxis kNue2017SBEnergyAxis(
"Nue Energy Estimator (GeV)",
35 "prod_restricteddecaf_R17-03-01-prod3reco.k_fd_numi_fhc_full_v1_goodruns_nue2017";
47 const CutDef SBCuts[kNCuts] =
54 Spectrum* spec_cvn_cvn2d_outtime[kNCuts];
55 Spectrum* spec_cvn_nueE_outtime[kNCuts];
56 Spectrum* spec_cvn_time_outtime[kNCuts];
57 Spectrum* spec_cvn_slctime_outtime[kNCuts];
59 Spectrum* spec_cvn_cvn2d_intime[kNCuts];
60 Spectrum* spec_cvn_nueE_intime[kNCuts];
61 Spectrum* spec_cvn_time_intime[kNCuts];
62 Spectrum* spec_cvn_slctime_intime[kNCuts];
64 for(
unsigned int i = 0 ;
i < kNCuts ; ++
i){
70 spec_cvn_nueE_outtime[
i] =
new Spectrum(loadercos, kNue2017SBEnergyAxis,
74 spec_cvn_time_outtime[
i] =
new Spectrum(loadercos, kTimeAxis,
78 spec_cvn_slctime_outtime[
i] =
new Spectrum(loadercos, kSliceTimeAxis,
87 spec_cvn_nueE_intime[
i] =
new Spectrum(loadercos, kNue2017SBEnergyAxis,
91 spec_cvn_time_intime[
i] =
new Spectrum(loadercos, kTimeAxis,
95 spec_cvn_slctime_intime[
i] =
new Spectrum(loadercos, kSliceTimeAxis,
104 TFile
fout(
"Ana2017_numi_sb.root",
"RECREATE");
107 for(
unsigned int i = 0 ;
i < kNCuts ; ++
i){
108 spec_cvn_cvn2d_intime[
i]->
SaveTo(&fout, (
"spec_cvn_cvn2d_numi_"+SBCuts[
i].
label).c_str());
109 spec_cvn_cvn2d_outtime[
i]->
SaveTo(&fout, (
"spec_cvn_cvn2d_cosmic_"+SBCuts[
i].label).c_str());
111 spec_cvn_nueE_intime[
i]->
SaveTo(&fout, (
"spec_cvn_nueE_numi_"+SBCuts[
i].label).c_str());
112 spec_cvn_nueE_outtime[
i]->
SaveTo(&fout, (
"spec_cvn_nueE_cosmic_"+SBCuts[
i].label).c_str());
114 spec_cvn_time_intime[
i]->
SaveTo(&fout, (
"spec_cvn_time_numi_"+SBCuts[
i].label).c_str());
115 spec_cvn_time_outtime[
i]->
SaveTo(&fout, (
"spec_cvn_time_cosmic_"+SBCuts[
i].label).c_str());
117 spec_cvn_slctime_intime[
i]->
SaveTo(&fout, (
"spec_cvn_slctime_numi_"+SBCuts[
i].label).c_str());
118 spec_cvn_slctime_outtime[
i]->
SaveTo(&fout, (
"spec_cvn_slctime_cosmic_"+SBCuts[
i].label).c_str());
132 std::vector<Cut>
cuts;
133 std::vector<std:: string> fnames;
134 for(
unsigned int i = 0 ;
i < kNCuts ; ++
i){
138 fnames.push_back((
"Ana2017_selected_numi_sb_"+SBCuts[
i].
label+
".txt").c_str());
139 fnames.push_back((
"Ana2017_selected_cosmic_sb_"+SBCuts[
i].
label+
".txt").c_str());
Cuts and Vars for the 2020 FD DiF Study.
const Cut kNue2017FDPeripheralLPsideband
Definition of the FD peripheral Low PID.
const Var kSliceTime([](const caf::SRProxy *sr){return sr->slc.meantime/1000;})
void SetSpillCut(const SpillCut &cut)
const Cut kNue2017FDPeripheralHELPsideband
Definition of the FD peripheral High Energy Low PID.
const Cut kNue2017FDPeripheralHEMPsideband
Definition of the FD peripheral High Energy Mid PID.
#define SIMPLEVAR(CAFNAME)
For Vars where literally all you need is a single CAF variable.
Representation of a spectrum in any variable, with associated POT.
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;})
void MakeTextListFile(const std::string &wildcard, const std::vector< Cut > &cut, const std::vector< std::string > &output, const std::vector< const Var * > &floatVars, const std::vector< const Var * > &intVars, const SpillCut *spillCut)
Make a file listing all the events passing the specified cut.
const Var kNueEnergy2017([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1.0;if(sr->vtx.elastic.fuzzyk.npng< 1) return-1.0;return NueRecoE_2017FDFit(kCVNemE(sr), kCVNhadE(sr));})
void Ana2017_sb_opening_macro()
Struct to hold cut information.
virtual void Go() override
Load all the registered spectra.
void SaveTo(TDirectory *dir, const std::string &name) const
std::vector< float > Spectrum
const HistAxis kNue2017Axis("NuE Energy / Analysis Bin", kNue2017Binning, kNue2017AnaBin)
const SystShifts kNoShift
const Cut kNue2017FDPeripheralMPsideband
Definition of the FD peripheral Mid PID.
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
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?
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})