22 if (!
isFHC) horn_tag =
"rhc";
26 std::string fnameData =
"defname: prod4_sumrestricteddecaf_fd_numi_fhc_full_goodruns_numu2019";
28 if (!
isFHC) fnameData =
"defname: prod4_sumrestricteddecaf_fd_numi_rhc_full_goodruns_numu2019";
33 std::string infile_quant =
"/cvmfs/nova.opensciencegrid.org/externals/numudata/v00.00/NULL/ana2018/Quantiles/quantiles__"+horn_tag+
"_full__numu2018.root";
34 TFile*
infile =
new TFile(infile_quant.c_str());
35 TH2* FDSpec2D = (TH2*)infile->FindObjectAny(
"FDSpec2D");
40 std::vector<Spectrum*>
data;
42 for(
auto thisCut : HadEFracQuantCuts){
48 TFile*
fout =
new TFile((
"numu_data_2019_"+horn_tag+
".root").c_str(),
"RECREATE");
49 for(
int quant=0; quant<5; quant++){
50 data[quant]->
SaveTo(&fout->, Form(
"data_q%d", quant));
57 TFile *
file =
new TFile ((
"numu_data_2019_"+horn_tag+
"_test.root").c_str(),
"READ");
58 std::vector<Spectrum*>
data;
59 for(
int quant=0; quant<5; quant++){
61 TH1*
hist = data->ToTH1(data->POT());
62 cout<<
" data: "<<hist->Integral()<<
" POT "<<data->POT()<<
endl;
Cuts and Vars for the 2020 FD DiF Study.
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
void get_numu_data_histogram(bool isFHC=true)
const HistAxis kHadEFracAxis("E_{had.} / E_{#nu}", Binning::Simple(200, 0, 1), kHadEFrac)
HistAxis that implements Hadronic Energy fraction binning used by L.Vinton to derive Hadronic Energy ...
void SetSpillCut(const SpillCut &cut)
const XML_Char const XML_Char * data
static std::unique_ptr< Spectrum > LoadFrom(TDirectory *dir, const std::string &name)
virtual void Go() override
Load all the registered spectra.
std::vector< float > Spectrum
const HistAxis kNumuCCOptimisedAxis("Reconstructed Neutrino Energy (GeV)", kNumuCCEOptimisedBinning, kCCE)
HistAxis that implements optimised numuCCE from L. Vinton. See docdb 16332. This was close to 'custC'...
const SystShifts kNoShift
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
std::vector< Cut > QuantileCutsFromTH2(TH2 *quantileHist, const HistAxis &independentAxis, const HistAxis &quantileAxis, const unsigned int &numQuantiles, const bool verbose)
: Do the same as the QuantileCuts function but taking in the TH2 instead of making it...
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.