3 #include "CAFAna/Core/Cut.h" const Cut kIsNumuCC(CCFlavSel(14, 14))
Select CC .
const Cut kIsNumuCCNotFromKaDk
const Cut kIsNueFromKaDecay([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return(( sr->mc.nu[0].beam.tptype==321)|| sr->mc.nu[0].beam.tptype==130);})
Cuts and Vars for the 2020 FD DiF Study.
const Cut kIsNueCCFromPiDk
const Cut kIsNumuCCFromKa
const Cut kIsNueCCNotFromPi
const Cut kIsNumuCCFromPi
const Cut kIsAntiNu([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return sr->mc.nu[0].pdg< 0;})
Is this truly an antineutrino?
const Cut kNueDQ2017CVN([](const caf::SRProxy *sr){if(sr->sel.nuecosrej.hitsperplane >=8) return false;if(!sr->vtx.elastic.IsValid) return false;if(sr->vtx.elastic.fuzzyk.npng==0) return false;return true;})
const Cut kIsBeamNue(CCFlavSel(12, 12))
Select CC .
const Cut kIsNumuCCNotFromPi
const Cut kNue2018CVNCut([](const caf::SRProxy *sr){if(kIsRHC(sr)) return kNue2018RHCCVNCut(sr);else return kNue2018FHCCVNCut(sr);})
const Cut kNue2017NDProngLength
const Cut kNueNDPreselExtend
const Cut kNumuContainND([](const caf::SRProxy *sr){return( sr->trk.kalman.ntracks > sr->trk.kalman.idxremid &&sr->slc.ncellsfromedge > 1 &&sr->slc.firstplane > 1
&&sr->slc.lastplane< 212 &&sr->trk.kalman.tracks[0].start.Z()< 1150
&&( sr->trk.kalman.tracks[0].stop.Z()< 1275 ||sr->sel.contain.kalyposattrans< 55) &&( sr->energy.numu.ndhadcalcatE +sr->energy.numu.ndhadcaltranE)< 0.03
&&sr->sel.contain.kalfwdcellnd > 4 &&sr->sel.contain.kalbakcellnd > 8);})
const Cut kIsNueFromPiDecay([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return(sr->mc.nu[0].beam.ndecay==11 && (sr->mc.nu[0].beam.tptype==211|| sr->mc.nu[0].beam.tptype==3122|| sr->mc.nu[0].beam.tptype==3222) );})
const Cut kNumu2020PID([](const caf::SRProxy *sr){return(sr->sel.remid.pid > 0.30 && sr->sel.cvnloosepreselptp.numuid > 0.80);})
const Cut kIsNumuCCNotFromPiDk
const Cut kNue2017NDNHits
const Var kNueEnergy2018([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-1.0;if(sr->vtx.elastic.fuzzyk.npng< 1) return-1.0;if(kIsRHC(sr)) return kNueEnergyRHC(sr);else return kNueEnergyFHC(sr);})
const Cut kIsNueCCFromKaDk
const Cut kNueNDEnergyExtend
const Cut kBENLowTrueECut([](const caf::SRProxy *sr){return(sr->mc.nnu==0)?false:sr->mc.nu[0].E< 4;})
const Cut kNue2017NDFrontPlanes
No hits in the first 5 planes of the detector, doc 12879.
const Cut kIsNumuCCNotFromKa
const Cut kIsNueCCNotFromKa
const Cut kNumuNCRej([](const caf::SRProxy *sr){return(sr->sel.remid.pid >0.75);})
const Cut kIsNumuCCFromPiDk
const Cut kIsNumuFromKaDecay([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return((sr->mc.nu[0].beam.ndecay==5|| sr->mc.nu[0].beam.ndecay==7)&& sr->mc.nu[0].beam.tptype==321);})
const Cut kNumuUncontainNDDecafCut
const Cut kNumuBasicQuality([](const caf::SRProxy *sr){return(sr->energy.numu.trkccE > 0 && sr->sel.remid.pid > 0 &&
sr->slc.nhit > 20 &&
sr->slc.ncontplanes > 4 &&
sr->trk.cosmic.ntracks > 0);})
const Cut kBENKaNumuFiducial([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;if(sr->trk.kalman.ntracks<=0) return false;return(sr->vtx.elastic.vtx.X() >-170 && sr->vtx.elastic.vtx.X()< 170 && sr->vtx.elastic.vtx.Y() >-170 && sr->vtx.elastic.vtx.Y()< 170 && sr->vtx.elastic.vtx.Z() > 30 && sr->vtx.elastic.vtx.Z()< 1150 && sr->trk.kalman.tracks[0].start.X() >-170 && sr->trk.kalman.tracks[0].start.X()< 170 && sr->trk.kalman.tracks[0].start.Y() >-170 && sr->trk.kalman.tracks[0].start.Y()< 170 && sr->trk.kalman.tracks[0].start.Z() > 30 && sr->trk.kalman.tracks[0].start.Z()< 1150 );})
const Cut kParentIsPiPlus([](const caf::SRProxy *sr){return(sr->mc.nu[0].beam.ptype==211);})
const Cut kNumuHadSel([](const caf::SRProxy *sr){std::cout<< "WARNING! Attempting to access kNumuHadSel which relies on qepid (which no longer exists.) Aborting..."<< std::endl;abort(); return false;})
const Cut kNue2017NDContain([](const caf::SRProxy *sr){for(unsigned int ix=0;ix< sr->vtx.elastic.fuzzyk.nshwlid;++ix){TVector3 start=sr->vtx.elastic.fuzzyk.png[ix].shwlid.start;TVector3 stop=sr->vtx.elastic.fuzzyk.png[ix].shwlid.stop;if(std::min(start.X(), stop.X())< -170.0) return false;if(std::max(start.X(), stop.X()) > 170.0) return false;if(std::min(start.Y(), stop.Y())< -170.0) return false;if(std::max(start.Y(), stop.Y()) > 170.0) return false;if(std::min(start.Z(), stop.Z())< 100.0) return false;if(std::max(start.Z(), stop.Z()) > 1225.0) return false;}return true;})
Loose containtment on start and end of all showers, docdb-12943.
const Cut kIsNueCCNotFromKaDk
const Cut kBENKaNumuContain([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks<=0) return false;return( sr->trk.kalman.tracks[0].stop.X() >-185 && sr->trk.kalman.tracks[0].stop.X()< 185 && sr->trk.kalman.tracks[0].stop.Y() >-185 && sr->trk.kalman.tracks[0].stop.Y()< 185 && sr->trk.kalman.tracks[0].stop.Z() > 19 && sr->trk.kalman.tracks[0].stop.Z()< 1275 );})
Template for Cut and SpillCut.
const Cut kIsNumuCCFromKaDk
const Cut kNumuContainND2020([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;++i){const caf::SRVector3DProxy &start=sr->vtx.elastic.fuzzyk.png[i].shwlid.start;const caf::SRVector3DProxy &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())< 40.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 Cut kParentIsKaPlus([](const caf::SRProxy *sr){return(sr->mc.nu[0].beam.ptype==321);})
const Cut kIsNumuFromPiDecay([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);return(sr->mc.nu[0].beam.ndecay==13 && sr->mc.nu[0].beam.tptype==211);})
const Cut kIsNueCCNotFromPiDk
const Cut kParentIsMuPlus([](const caf::SRProxy *sr){return(sr->mc.nu[0].beam.ptype==13);})
const Cut kNumuContainNDDecafCut
const Cut kNue2017NDFiducial([](const caf::SRProxy *sr){assert(sr->vtx.elastic.IsValid &&"Must apply DQ cuts");if(sr->vtx.elastic.vtx.X()< -100.0) return false;if(sr->vtx.elastic.vtx.X() > 160.0) return false;if(sr->vtx.elastic.vtx.Y()< -160.0) return false;if(sr->vtx.elastic.vtx.Y() > 100.0) return false;if(sr->vtx.elastic.vtx.Z()< 150.0) return false;if(sr->vtx.elastic.vtx.Z() > 900.0) return false;return true;})
Cut on ND vertex position.