18 #include "3Flavor/Vars/HistAxes.h" 38 std::string sFHC_RHC = (IsFHC ==
true ?
"fhc" :
"rhc" );
39 std::string sIsMC = (IsMC ==
true ?
"Mont" :
"Data" );
40 std::string OutName =
"NearDet_CutFlow_"+sIsMC+
".root";
43 if ( IsMC && IsFHC) { MyLoader =
"karlwarb_ND_FHC_MC"; }
44 else if ( IsMC && !IsFHC) { MyLoader =
"karlwarb_ND_RHC_MC"; }
45 else if (!IsMC && IsFHC) { MyLoader =
"karlwarb_ND_FHC_Data"; }
46 else if (!IsMC && !IsFHC) { MyLoader =
"karlwarb_ND_RHC_Data"; }
48 if ( IsMC && IsFHC) { MyLoader =
"prod_caf_R17-11-14-prod4reco.d_nd_genie_nonswap_fhc_nova_v08_full_v1"; }
49 else if ( IsMC && !IsFHC) { MyLoader =
"prod_caf_R17-11-14-prod4reco.e_nd_genie_nonswap_rhc_nova_v08_full_v1"; }
50 else if (!IsMC && IsFHC) { MyLoader =
"prod_caf_R17-09-05-prod4recopreview.f_nd_numi_fhc_full_v1_addShortSimpleCVN_goodruns"; }
51 else if (!IsMC && !IsFHC) { MyLoader =
"prod_caf_R17-09-05-prod4recopreview.f_nd_numi_rhc_full_v1_addShortSimpleCVN_goodruns"; }
54 std::string QuantFile =
"/pnfs/nova/persistent/analysis/numu/Ana2018/provisional/quantiles/quantiles__"+sFHC_RHC+
"_full__numu2018.root";
56 std::cout <<
"\n\n My macro is configured as follows; IsMC " << IsMC <<
", IsFHC " << IsFHC <<
"\nTherefore;" 57 <<
"\n\t sFHC_RHC = " << sFHC_RHC
58 <<
"\n\t sIsMC = " << sIsMC
59 <<
"\n\t OutName = " << OutName
60 <<
"\n\t MyLoader = " << MyLoader
61 <<
"\n\t QuantFile = " << QuantFile
69 std::vector<Cut> TieredCuts;
71 CutNames.emplace_back(
"NoCut"); TieredCuts.emplace_back(
kNoCut);
72 CutNames.emplace_back(
"Quality"); TieredCuts.emplace_back(
kNumuQuality);
76 size_t NCuts = TieredCuts.size();
80 TH2 *FDSpec2D = (TH2*)inFile->FindObjectAny(
"FDSpec2D" );
82 const int NHadEFracQuantiles = 4;
94 for (
int quant=0; quant<NHadEFracQuantiles; ++quant ) {
109 if (quant == NHadEFracQuantiles-1) {
126 TFile *
OutFile =
new TFile(OutName.c_str(),
"RECREATE");
129 for (
int quant=0; quant<NHadEFracQuantiles; ++quant ) {
132 FullMC [
cut][quant] ->
SaveTo( OutFile, TString(
"FullMC_" )+TString(ThisDir) ) ;
133 NuMuCC [
cut][quant] ->
SaveTo( OutFile, TString(
"NuMuCC_" )+TString(ThisDir) ) ;
134 AntiNuMuCC[
cut][quant] ->
SaveTo( OutFile, TString(
"AntiNuMuCC_")+TString(ThisDir) ) ;
135 AllOtherCC[
cut][quant] ->
SaveTo( OutFile, TString(
"AllOtherCC_")+TString(ThisDir) ) ;
136 AllNC [
cut][quant] ->
SaveTo( OutFile, TString(
"AllNC_" )+TString(ThisDir) ) ;
139 if (quant == NHadEFracQuantiles-1) {
140 ThisDir = CutNames[
cut]+
"_QuantAll";
141 FullMC [
cut][quant] ->
SaveTo( OutFile, TString(
"FullMC_" )+TString(ThisDir) ) ;
142 NuMuCC [
cut][quant] ->
SaveTo( OutFile, TString(
"NuMuCC_" )+TString(ThisDir) ) ;
143 AntiNuMuCC[
cut][quant] ->
SaveTo( OutFile, TString(
"AntiNuMuCC_")+TString(ThisDir) ) ;
144 AllOtherCC[
cut][quant] ->
SaveTo( OutFile, TString(
"AllOtherCC_")+TString(ThisDir) ) ;
145 AllNC [
cut][quant] ->
SaveTo( OutFile, TString(
"AllNC_" )+TString(ThisDir) ) ;
const Cut kIsNumuCC(CCFlavSel(14, 14))
Select CC .
Cuts and Vars for the 2020 FD DiF Study.
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
const Cut kNumuContainND2017([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;++i){TVector3 start=sr->vtx.elastic.fuzzyk.png[i].shwlid.start;TVector3 stop=sr->vtx.elastic.fuzzyk.png[i].shwlid.stop;if(std::min(start.X(), stop.X())< -180.0) return false;if(std::max(start.X(), stop.X()) > 180.0) return false;if(std::min(start.Y(), stop.Y())< -180.0) return false;if(std::max(start.Y(), stop.Y()) > 180.0) return false;if(std::min(start.Z(), stop.Z())< 20.0) return false;if(std::max(start.Z(), stop.Z()) > 1525.0) return false;}if(sr->trk.kalman.ntracks< 1) return false;for(unsigned int i=0;i< sr->trk.kalman.ntracks;++i){if(i==sr->trk.kalman.idxremid) continue;else if(sr->trk.kalman.tracks[i].start.Z() > 1275||sr->trk.kalman.tracks[i].stop.Z() > 1275) return false;}return(sr->trk.kalman.ntracks > sr->trk.kalman.idxremid &&sr->slc.firstplane > 1
&&sr->slc.lastplane< 212 &&sr->trk.kalman.tracks[0].start.Z()< 1100
&&(sr->trk.kalman.tracks[0].stop.Z()< 1275 ||sr->sel.contain.kalyposattrans< 55) &&sr->sel.contain.kalfwdcellnd > 5 &&sr->sel.contain.kalbakcellnd > 10);})
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 CutFlow_NearDet(bool IsMC, bool IsFHC, bool IsTest=false)
void SetSpillCut(const SpillCut &cut)
std::string pnfs2xrootd(std::string loc, bool unauth)
const Cut kIsNu([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return sr->mc.nu[0].pdg > 0;})
Representation of a spectrum in any variable, with associated POT.
const Cut kIsNC([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return!sr->mc.nu[0].iscc;})
Is this a Neutral Current event?
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.
const Cut kNumuPID2018([](const caf::SRProxy *sr){std::cout<< "ERROR::kNumuPID2018, cutting on both cvnProd3Train and cvn2017."<< " Neither branch exists anymore. Returning False."<< std::endl;abort();return false;})
const Binning kNumuCCEOptimisedBinning
Optimised binning for numuCCE from L. Vinton. See docdb 16332. This was close to 'custC' in that talk...
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.
std::string to_string(ModuleType mt)
const Var kUnweighted
The simplest possible Var, always 1. Used as a default weight.
const Cut kNoCut
The simplest possible cut: pass everything, used as a default.
std::vector< std::string > CutNames