1 #include "CAFAna/Cuts/NueCutsSecondAna.h" 21 if(sr->
sel.
cosrej.numucontpid < 0.56)
return false;
34 kNus17Veto && kApplySecondAnalysisMask && kNus17EventQuality && kNus17FDContain && kNus17BackwardCut && kNus17NCCosRejAlt &&
kNus17CVNnc,
97 if(nhit < 1.)
return 0.;
179 "time",
"disttime",
"disttimetop",
"lprong",
180 "nusE",
"cvn",
"cvne",
"cvnm",
181 "maxz",
"maxy",
"ncid",
182 "ptp",
"disttop",
"distalltop",
183 "distallbottom",
"distalleast",
184 "distallwest",
"distallfront",
185 "distallback",
"numusa",
"hits"};
189 "Distance from Closest Slice (cm)",
190 "Closest Slice Dist. from Top",
192 "Visible Energy (GeV)",
194 "CVN nue Classifier",
195 "CVN numu Classifier",
198 "NC Cosmic Rejection BDT",
200 "Distance to Top (cm)",
201 "Distance (all prongs) to Top (cm)",
202 "Distance (all prongs) to Bottom (cm)",
203 "Distance (all prongs) to East (cm)",
204 "Distance (all prongs) to West (cm)",
205 "Distance (all prongs) to Front (cm)",
206 "Distance (all prongs) to Back (cm)",
213 "Distance from Closest Slice (cm)",
214 "Closest Slice Dist. from Top (cm)",
215 "Longest Prong (cm)",
216 "Visible Energy (GeV)",
218 "CVN nue Classifier",
219 "CVN numu Classifier",
222 "NC Cosmic Rejection BDT",
224 "Distance to Top (cm)",
225 "Distance (all prongs) to Top (cm)",
226 "Distance (all prongs) to Bottom (cm)",
227 "Distance (all prongs) to East (cm)",
228 "Distance (all prongs) to West (cm)",
229 "Distance (all prongs) to Front (cm)",
230 "Distance (all prongs) to Back (cm)",
const Cut kNCPCut([](const caf::SRProxy *sr){if(sr->sel.cosrej.numucontpid< 0.56) return false;return true;})
const HistAxis disttimeaxis("Distance from Closest Slice (cm)", Binning::Simple(100, 0, 2000), kClosestSlcMinDist)
const HistAxis timedistaxis("Distance from Closest Slice (cm)", Binning::Simple(100, 0., 2000.), kClosestSlcMinDist,"Closest Slice Dist. from Top", Binning::Simple(140, 0, 700), kClosestSlcMinTop)
const Binning nmichelbins
const HistAxis disttimetopaxis("Closest Slice Dist. from Top", Binning::Simple(140, 0, 700), kClosestSlcMinTop)
const Cut kNus17EnergyCut([](const caf::SRProxy *sr){double energy=0.0;energy=kNus17Energy(sr);if(energy< 0.25) return false;if(energy > 10.0) return false;return true;})
const Var kPartPtp([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.partptp)|| std::isinf(1.*sr->sel.nuecosrej.partptp)) return-5.f;return float(sr->sel.nuecosrej.partptp);})
const HistAxis axisarray[nvars]
const HistAxis nmichelaxis("Number of Michel Electrons", nmichelbins, kNMichels)
const HistAxis distallfrontaxis("Distance (all prongs) to Front (cm)", distbins, kDistAllFront)
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
const Var kDistAllBottom([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.distallpngbottom)) return-1000.0f;return float(sr->sel.nuecosrej.distallpngbottom);})
Distance of all showers in slice from the bottom edge of detector.
const std::string axisarray_names_opt[nvars]
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);})
const Var kDistAllWest([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.distallpngwest)) return-1000.0f;return float(sr->sel.nuecosrej.distallpngwest);})
Distance of all showers in slice from the west edge of detector.
const Var kDistTop([](const caf::SRProxy *sr){return std::min(sr->sel.nuecosrej.starttop, sr->sel.nuecosrej.stoptop);})
const HistAxis lprongaxis("Longest Prong", lprongbins, kLongestProng)
const Var kDistAllTop([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.distallpngtop)) return-1000.0f;return float(sr->sel.nuecosrej.distallpngtop);})
Distance of all showers in slice from the top edge of detector.
const Var kDistAllBack([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.distallpngback)) return-1000.0f;return float(sr->sel.nuecosrej.distallpngback);})
Distance of all showers in slice from the back edge of detector.
Proxy for caf::StandardRecord.
const Cut kNus17CVNnc([](const caf::SRProxy *sr){if(sr->slc.nhit < 25) return false;std::cout<< "ERROR::kNus17CVNnc. Looking for cvnProd3Train. Branch no longer exists."<< std::endl;abort();return true;})
const HistAxis distalleastaxis("Distance (all prongs) to East (cm)", distbins, kDistAllEast)
const HistAxis cvnaxis("CVN NC Classifier", cvnbins, kCVNnc)
const Cut kNus17BackwardCut
FD backward photon rejection cut, inherited from nue, from docdb 21113.
const HistAxis numucontaxis("(numu) Cosmic Rejection BDT", cvnbins, kNCP)
const HistAxis distallbottomaxis("Distance (all prongs) to Bottom (cm)", distbins, kDistAllBottom)
const Var kMaxZ([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1000.0f;if(sr->vtx.elastic.fuzzyk.nshwlid==0) return-1000.0f;float maxzall=-999.0;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;i++){maxzall=std::max(std::max(sr->vtx.elastic.fuzzyk.png[i].shwlid.start.Z(), sr->vtx.elastic.fuzzyk.png[i].shwlid.stop.Z()), maxzall);}return maxzall;})
caf::Proxy< caf::SRCosRej > cosrej
const HistAxis cvneaxis("CVN nue Classifier", cvnbins, kCVNe)
const Var kNus17Energy([](const caf::SRProxy *sr){double cale=sr->slc.calE;double recoE=0.;if(sr->hdr.det==caf::kFARDET) recoE=FDscaleCalE17 *cale;if(sr->hdr.det==caf::kNEARDET) recoE=NDscaleCalE17 *cale;return recoE;})
const Var kDistAllEast([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.distallpngeast)) return-1000.0f;return float(sr->sel.nuecosrej.distallpngeast);})
Distance of all showers in slice from the east edge of detector.
caf::Proxy< caf::SRNueCosRej > nuecosrej
const HistAxis cvnmaxis("CVN numu Classifier", cvnbins, kCVNm)
const Cut kNus17FDContain
FD Containment, nue-inspired, from docdb 21113.
const HistAxis ncidaxis("NC Cosmic Rejection BDT", ncidbins, kNCCosRejAlt)
caf::Proxy< unsigned int > nhit
const Var kMaxY([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1000.0f;if(sr->vtx.elastic.fuzzyk.nshwlid==0) return-1000.0f;float maxyall=-999.0;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;i++){maxyall=std::max(std::max(sr->vtx.elastic.fuzzyk.png[i].shwlid.start.Y(), sr->vtx.elastic.fuzzyk.png[i].shwlid.stop.Y()), maxyall);}return maxyall;})
const std::string cutnames[ncuts]
const Var kLongestProng([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return 0.f;if(sr->vtx.elastic.fuzzyk.npng==0) return 0.f;auto idx=sr->vtx.elastic.fuzzyk.longestidx;return float(sr->vtx.elastic.fuzzyk.png[idx].len);})
const HistAxis zaxis("Shower Max Z", zbins, kMaxZ)
const HistAxis dummyaxis("dummy", bins, kDummy)
const HistAxis maxyptpaxis("Shower Max Y", Binning::Simple(320,-800., 800.), kMaxY,"ptp", Binning::Simple(100, 0., 1.), kPartPtp)
const HistAxis distalltopaxis("Distance (all prongs) to Top (cm)", distbins, kDistAllTop)
const Cut kCosPIDContainCut([](const caf::SRProxy *sr){if(sr->sel.nuecosrej.cospidcontain< 0.57) return false;return true;})
const Cut kNus17ShwPtpLow
Carve out space in shower maximum y and #p_{T}/p, from docdb 21113.
const Cut kNus17NCCosRejAlt
Until nccosrej branch is in CAFs, must use these cuts.
const std::string cutnames_nminus1[ncuts_nminus1]
const HistAxis distallbackaxis("Distance (all prongs) to Back (cm)", distbins, kDistAllBack)
#define SIMPLEVAR(CAFNAME)
For Vars where literally all you need is a single CAF variable.
const HistAxis distallwestaxis("Distance (all prongs) to West (cm)", distbins, kDistAllWest)
const Var kClosestSlcMinTop([](const caf::SRProxy *sr){return(float) sr->slc.closestsliceminfromtop;})
const HistAxis eaxis("Visible Energy (GeV)", ebins, kNus17Energy)
const Var kNMichels([](const caf::SRProxy *sr){int n_me=0;for(int i=0;i< (int) sr->me.nslc;i++) if(sr->me.slc[i].mid > 1. &&sr->me.slc[i].deltat > 1200.) n_me++;for(int i=0;i< (int) sr->me.nkalman;i++) if(sr->me.trkkalman[i].mid > 0. &&sr->me.trkkalman[i].deltat > 800.) n_me++;if(n_me > 2) n_me=2;return n_me;})
Number of SlcME's assoc with slice.
const Var kClosestSlcMinDist([](const caf::SRProxy *sr){return(float) sr->slc.closestslicemindist;})
const Cut cutsarray[ncuts]
const Var kDistAllFront([](const caf::SRProxy *sr){if(std::isnan(1.*sr->sel.nuecosrej.distallpngfront)) return-1000.0f;return float(sr->sel.nuecosrej.distallpngfront);})
Distance of all showers in slice from the front edge of detector.
const Cut kNus17Veto([](const caf::SRProxy *sr){return sr->sel.veto.keep;})
caf::Proxy< caf::SRSlice > slc
const Cut kNus17ShwPtpHigh
const HistAxis hitaxis("Number of hits", hitbins, kNHit)
const HistAxis distaxis("Distance to Top (cm)", distbins, kDistTop)
const Cut kNus17SlcTimeGap
Closest slice cuts based on approximation in space and time, from from docdb 21113.
const Var kDummy([](const caf::SRProxy *sr){return 1;})
caf::Proxy< float > cospidcontain
const HistAxis ptpaxis("p_{T}/p", ptpbins, kPartPtp)
caf::Proxy< caf::SRIDBranch > sel
const HistAxis timeaxis("Time Gap (#mus)", Binning::Simple(100,-2000, 2000), kClosestSlcTime)
const double FDscaleCalE17
const HistAxis numusaaxis("numuSA", cvnbins, kNumuSA)
const Var kNusEperH([](const caf::SRProxy *sr){double nhit=(double) sr->slc.nhit;if(nhit< 1.) return 0.;double cale=sr->slc.calE;double recoE=FDscaleCalE17 *cale;return recoE/nhit;})
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 Var kClosestSlcTime([](const caf::SRProxy *sr){return(float) sr->slc.closestslicetime;})
const HistAxis yaxis("Shower Max Y", ybins, kMaxY)
const Cut cutsarray_nminus1[ncuts_nminus1]
const std::string axisarray_names[nvars]
const std::string axisarray_names_xaxis[nvars]