11 #include "CAFAna/Cuts/NumuCuts.h" 16 #include "CAFAna/Vars/NumuVars.h" 23 const double pot = 36e20;
31 const Cut kCCEshiftBelow5({
"energy.numusimp.trkccE",
"sel.remid.bestidx",
"energy.mutrkE.E",
"hdr.ismc"},
35 float hadE =
sr->
energy.numusimp.trkccE - muE;
37 || (!
sr->
hdr.
ismc && muE+1.14f*hadE < 5.0) );
54 return sr->
mc.
nu[0].woscdumb;
60 if(
sr->
mc.
nnu == 0)
return false;
83 std::cout <<
"\nrun : ---- Running CAF NuMU FD Validation - MC (no Tau).\n";
100 const int kNumCuts = 10;
128 {
";Reconstructed Neutrino Energy (GeV);Events / (0.25 GeV)",
"ccEshift",
kEnergyBinning, kCCEshift},
130 {
";Reconstructed Neutrino Energy (GeV);Events / (0.25 GeV)",
"ccE",
kEnergyBinning,
kCCE},
132 {
";Hadronic Energy (GeV);Events / (0.25 GeV)",
"hadEshift",
kEnergyBinning, kHadEshift},
136 {
";Slice Maximum z (m);Events / (5 m)",
"maxZ",
kZBins,
kSlcMaxZ},
140 {
";Track Start X Position (m);Events / (1.5 m)",
"trkStartX",
kXYBins,
kTrkStartX},
141 {
";Track Start Y Position (m);Events / (1.5 m)",
"trkStartY",
kXYBins,
kTrkStartY},
142 {
";Track Start Z Position (m);Events / (5 m)",
"trkStartZ",
kZBins,
kTrkStartZ},
143 {
";Track End X Position (m);Events / (1.5 m)",
"trkEndX",
kXYBins,
kTrkEndX},
144 {
";Track End Y Position (m);Events / (1.5 m)",
"trkEndY",
kXYBins,
kTrkEndY},
145 {
";Track End Z Position (m);Events / (5 m)",
"trkEndZ",
kZBins,
kTrkEndZ},
149 {
";Basic Track Forward Distance to Edge (m);Events / (5 m)",
"cosFwdDist",
kZBins,
kCosFwdDist},
150 {
";Basic Track Backward Distance to Edge (m);Events / (5 m)",
"cosBackDist",
kZBins,
kCosBackDist},
151 {
";Kalman Track Forward Distance to Edge (m);Events / (5 m)",
"kalFwdDist",
kZBins,
kKalmanFwdDist},
152 {
";Kalman Track Backward Distance to Edge (m);Events / (5 m)",
"kalBackDist",
kZBins,
kKalmanBackDist},
167 for(
int j = 0;
j < kNumCuts; ++
j){
182 std::cout <<
"\nrun : --- run loaders.\n";
187 std::cout <<
"\nrun : --- save output.\n";
188 TFile*
f =
new TFile(kOutputFileName.c_str(),
"RECREATE");
190 for(
int j = 0;
j < kNumCuts; ++
j){
198 NonSwap->SetName(fullName.c_str());
199 NonSwap->Add(FluxSwap);
206 TH1D* TotalPOT =
new TH1D(
"meta-TotalPOT",
";;Total POT", 1, 0, 1);
207 TotalPOT->SetBinContent(1,
pot);
const Var kHadNHit([](const caf::SRProxy *sr){unsigned int nought=0;if(sr->trk.kalman.ntracks< 1) return nought;return sr->slc.nhit-sr->trk.kalman.tracks[0].nhit;})
Represent the binning of a Spectrum's x-axis.
const Var kNcellsFromEdge
Cuts and Vars for the 2020 FD DiF Study.
SRHeader hdr
Header branch: run, subrun, etc.
TH1D * ToTH1(double exposure, Color_t col=kBlack, Style_t style=kSolid, EExposureType expotype=kPOT, EBinType bintype=kBinContent) const
Histogram made from this Spectrum, scaled to some exposure.
const Var kSlcMaxZ([](const caf::SRProxy *sr){return sr->slc.boxmax.Z()/100.;})
const Var kSlcMaxY([](const caf::SRProxy *sr){return sr->slc.boxmax.Y()/100.;})
SRVector3D boxmax
Maximum coordinates box containing all the hits [cm].
const Var kNumuCosRejAngleKal
const Var kTrkStartY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.Y()/100;})
const Var kSliceTime([](const caf::SRProxy *sr){return sr->slc.meantime/1000;})
const Var kCosBackDist([](const caf::SRProxy *sr){return sr->sel.contain.cosbakdist/100.;})
const Var kSliceDuration([](const caf::SRProxy *sr){return(sr->slc.endtime-sr->slc.starttime);})
const Var kCosFwdDist([](const caf::SRProxy *sr){return sr->sel.contain.cosfwddist/100.;})
const Cut kNumuContainFD([](const caf::SRProxy *sr){ std::pair< int, int > planes=calcFirstLastLivePlane(sr->slc.firstplane, std::bitset< 14 >(sr->hdr.dibmask));int planestofront=sr->slc.firstplane-planes.first;int planestoback=planes.second-sr->slc.lastplane;return( sr->slc.ncellsfromedge > 1 &&planestofront > 1 &&planestoback > 1 &&sr->sel.contain.kalfwdcell > 10 &&sr->sel.contain.kalbakcell > 10 &&sr->sel.contain.cosfwdcell > 0 &&sr->sel.contain.cosbakcell > 0);})
void SetSpillCut(const SpillCut &cut)
const Var kDirZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].dir.Z();})
const Var kTrkLength([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].len/100;})
#define SIMPLEVAR(CAFNAME)
For Vars where literally all you need is a single CAF variable.
const Var kSlcMaxX([](const caf::SRProxy *sr){return sr->slc.boxmax.X()/100.;})
Representation of a spectrum in any variable, with associated POT.
====================================================================== ///
const Var kKalmanFwdDist([](const caf::SRProxy *sr){return sr->sel.contain.kalfwddist/100.;})
const std::vector< Plot > plots
const Var kTrkStartZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.Z()/100;})
SRRemid remid
Output from RecoMuonID (ReMId) package.
float calE
Calorimetric energy of the cluster [GeV].
const Binning kEnergyBinning
virtual void Go() override
Load all the registered spectra.
const Cut kBlindedRegion({"slc.calE","slc.meantime","hdr.run"}, [](const caf::StandardRecord *sr){return sr->slc.calE > 0.8 &&sr->slc.calE< 3.0 &&((sr->slc.meantime > 207000 &&sr->slc.meantime< 237000) ||(sr->slc.meantime > 271000 &&sr->slc.meantime< 301000 &&sr->hdr.run<=17500));})
const Cut kNumuNCRej([](const caf::SRProxy *sr){return(sr->sel.remid.pid >0.75);})
short nnu
Number of neutrinos in nu vector (0 or 1)
const Var kKalmanBackDist([](const caf::SRProxy *sr){return sr->sel.contain.kalbakdist/100.;})
std::vector< float > Spectrum
const Var kTrkStartX([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].start.X()/100;})
const SystShifts kNoShift
const Var kTrkEndZ([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.Z()/100;})
const Var kWOscDumb([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return 0.f;return float(sr->mc.nu[0].woscdumb);})
The StandardRecord is the primary top-level object in the Common Analysis File trees.
const Var kTrkEndY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.Y()/100;})
const Var kTrkEndX([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-10.0f;return sr->trk.kalman.tracks[0].stop.X()/100;})
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
SRIDBranch sel
Selector (PID) branch.
const Cut kCCEshiftBelow5({"energy.numusimp.trkccE","sel.remid.bestidx","energy.mutrkE.E","hdr.ismc"}, [](const caf::StandardRecord *sr){float muE=sr->energy.mutrkE[sr->sel.remid.bestidx].E;float hadE=sr->energy.numusimp.trkccE-muE;return((sr->hdr.ismc &&sr->energy.numusimp.trkccE< 5.0) ||(!sr->hdr.ismc &&muE+1.14f *hadE< 5.0));})
assert(nhit_max >=nhit_nbins)
SRSlice slc
Slice branch: nhit, extents, time, etc.
SRTruthBranch mc
Truth branch for MC: energy, flavor, etc.
const Var kNplanesToFront
const SpillCut kStandardSpillCuts
Apply this unless you're doing something special.
void caf_numu_fd_validation_MC_no_tau(std::string kInputNonSwapFileName, std::string kInputSwapFileName, std::string kOutputFileName)
SREnergyBranch energy
Energy estimator branch.
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
std::vector< SRNeutrino > nu
implemented as a vector to maintain mc.nu structure, i.e. not a pointer, but with 0 or 1 entries...
const Cut kNoCut
The simplest possible cut: pass everything, used as a default.
const Var kTrkNhits([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 65535;return int(sr->trk.kalman.tracks[0].nhit);})
float meantime
mean time, weighted by charge [ns]