8 #include "CAFAna/Core/Var.h" 14 #include "CAFAna/Core/Cut.h"
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;})
const Var kNonQEE
Energy estimator for non quasielastic CC events.
const ana::Var kRecoQ2([](const caf::SRProxy *sr){const double M_mu_sqrd=util::sqr(0.1056);double E_mu=kMuE(sr);double p_mu=sqrt(util::sqr(E_mu)-M_mu_sqrd);return 2 *kCCE(sr)*(E_mu-p_mu *kCosNumi(sr))-M_mu_sqrd;})
Reconstructed four-momentum transfer invariant (Q^2)
const Var kNcellsFromEdge
Cuts and Vars for the 2020 FD DiF Study.
const Var kSlcMeanTime([](const caf::SRProxy *sr){return sr->slc.meantime/1000.;})
const Var kKalmanBackwardCell
const Var kNumuMuonPt([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999){double pmu=sqrt(util::sqr(kMuE(sr))-util::sqr(0.1056));double Zbeam=kCosNumi(sr);double pt=pmu *sqrt(1-Zbeam *Zbeam);return(float) pt;}return-5.f;})
const Var kSlcMaxZ([](const caf::SRProxy *sr){return sr->slc.boxmax.Z()/100.;})
const Var kSlcCalEPerNHit([](const caf::SRProxy *sr){if(sr->slc.nhit > 0) return sr->slc.calE/(1.78 *sr->slc.nhit);return-5.;})
const Var kSlcMaxY([](const caf::SRProxy *sr){return sr->slc.boxmax.Y()/100.;})
const Var kRecoQmag([](const caf::SRProxy *sr){return sqrt(kRecoQ2(sr)+util::sqr(kHadE(sr)));})
Reconstructed three-momentum transfer.
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 Var kSlcExtentY([](const caf::SRProxy *sr){return(sr->slc.boxmax.Y()-sr->slc.boxmin.Y())/100.;})
const Var kTrkCalEPerNHit([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.f;return sr->trk.kalman.tracks[0].calE/sr->trk.kalman.tracks[0].nhit;})
const Var kMuonRecoRelTrueTrkLen([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-1.;if(sr->energy.numu.trkccE<=0) return-1.;if(sr->energy.numu.hadtrkE< 0) return-1.;if(sr->mc.nnu==0) return-1.;if(sr->mc.nu[0].prim.empty()) return-1.;if(std::abs(sr->mc.nu[0].prim[0].pdg)!=13) return-1.;double recoE=sr->energy.numu.recomuonE;double trueE=sr->mc.nu[0].prim[0].p.E;if(trueE<=0.0) return-1.;return((recoE-trueE)/trueE);})
const Var kRecoMuonEFromVisEND([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.;if(sr->energy.numu.trkccE<=0) return 0.;if(sr->energy.numu.hadtrkE< 0) return 0.;double visE=((sr->trk.kalman.tracks[0].calE)/1.78)-sr->energy.numu.hadtrkE;double offset=0.222;double slope1=1.14;double slope2=1.475;double stitch=0.312;if(visE< stitch){return(visE *slope1+offset);}else{return(visE *slope2+((slope1-slope2)*stitch+offset));}})
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;})
const Var kSlcMinX([](const caf::SRProxy *sr){return sr->slc.boxmin.X()/100.;})
const Var kHadEPerNHit([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.0f;int nHit=sr->slc.nhit-sr->trk.kalman.tracks[0].nhit;if(nHit<=0) return 0.0f;float hadE=sr->energy.numu.hadcalE;return hadE/nHit;})
const Var kRecoMuonEFromVisEFD([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.;if(sr->energy.numu.trkccE<=0) return 0.;if(sr->energy.numu.hadtrkE< 0) return 0.;double visE=((sr->trk.kalman.tracks[0].calE)/1.78)-sr->energy.numu.hadtrkE;double offset=0.32;double slope1=1.01;double slope2=1.504;double stitch=0.315;if(visE< stitch){return(visE *slope1+offset);}else{return(visE *slope2+((slope1-slope2)*stitch+offset));}})
const Var kNumuHadVisE([](const caf::SRProxy *sr){return kNumuHadCalE(sr)+kNumuHadTrkE(sr);})
const Var kSlcMaxX([](const caf::SRProxy *sr){return sr->slc.boxmax.X()/100.;})
const Var kCosmicForwardCell
const Var kDirY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].dir.Y();})
const Var kMuonRecoRelTrueVisEND([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-1.;if(sr->energy.numu.trkccE<=0) return-1.;if(sr->energy.numu.hadtrkE< 0) return-1.;if(sr->mc.nnu==0) return-1.;if(sr->mc.nu[0].prim.empty()) return-1.;if(std::abs(sr->mc.nu[0].prim[0].pdg)!=13) return-1.;double visE=((sr->trk.kalman.tracks[0].calE)/1.78)-sr->energy.numu.hadtrkE;double offset=0.222;double slope1=1.14;double slope2=1.475;double stitch=0.312;double recoE=-5.0;if(visE< stitch){recoE=visE *slope1+offset;}else{recoE=visE *slope2+((slope1-slope2)*stitch+offset);}double trueE=sr->mc.nu[0].prim[0].p.E;if(trueE<=0.0) return-1.;return((recoE-trueE)/trueE);})
const Var kSlcMinY([](const caf::SRProxy *sr){return sr->slc.boxmin.Y()/100.;})
const Var kMuonRecoRelRecoFD([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-1.;if(sr->energy.numu.trkccE<=0) return-1.;if(sr->energy.numu.hadtrkE< 0) return-1.;if(sr->mc.nnu==0) return-1.;if(sr->mc.nu[0].prim.empty()) return-1.;if(std::abs(sr->mc.nu[0].prim[0].pdg)!=13) return-1.;double recoETrkLen=sr->energy.numu.recomuonE;double visE=((sr->trk.kalman.tracks[0].calE)/1.78)-sr->energy.numu.hadtrkE;double offset=0.32;double slope1=1.01;double slope2=1.504;double stitch=0.315;double recoE=-5.0;if(visE< stitch){recoE=visE *slope1+offset;}else{recoE=visE *slope2+((slope1-slope2)*stitch+offset);}if(recoETrkLen<=0.0) return-1.;return((recoE-recoETrkLen)/recoETrkLen);})
const Var kRecoMuonEFromTrkLen([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.f;if(sr->energy.numu.trkccE<=0) return 0.f;if(sr->energy.numu.hadtrkE< 0) return 0.f;return float(sr->energy.numu.recomuonE);})
const Var kKalmanFwdDist([](const caf::SRProxy *sr){return sr->sel.contain.kalfwddist/100.;})
const Var kMuonRecoRelTrueVisEFD([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-1.;if(sr->energy.numu.trkccE<=0) return-1.;if(sr->energy.numu.hadtrkE< 0) return-1.;if(sr->mc.nnu==0) return-1.;if(sr->mc.nu[0].prim.empty()) return-1.;if(std::abs(sr->mc.nu[0].prim[0].pdg)!=13) return-1.;double visE=((sr->trk.kalman.tracks[0].calE)/1.78)-sr->energy.numu.hadtrkE;double offset=0.32;double slope1=1.01;double slope2=1.504;double stitch=0.315;double recoE=-5.0;if(visE< stitch){recoE=visE *slope1+offset;}else{recoE=visE *slope2+((slope1-slope2)*stitch+offset);}double trueE=sr->mc.nu[0].prim[0].p.E;if(trueE<=0.0) return-1.;return((recoE-trueE)/trueE);})
const Var kMuonRecoRelRecoND([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-1.;if(sr->energy.numu.trkccE<=0) return-1.;if(sr->energy.numu.hadtrkE< 0) return-1.;double recoETrkLen=sr->energy.numu.recomuonE;double visE=((sr->trk.kalman.tracks[0].calE)/1.78)-sr->energy.numu.hadtrkE;double offset=0.222;double slope1=1.14;double slope2=1.475;double stitch=0.312;double recoE=-5.0;if(visE< stitch){recoE=visE *slope1+offset;}else{recoE=visE *slope2+((slope1-slope2)*stitch+offset);}if(recoETrkLen<=0.0) return-1.;return((recoE-recoETrkLen)/recoETrkLen);})
const Var kNumuContPID2019
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;})
const Var kNumuMuonPtP([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999){if(sr->hdr.det==1){double Zbeam=sr->trk.kalman.tracks[0].dir.Dot(beamDirND);double ptp=sqrt(1-Zbeam *Zbeam);return(float) ptp;}if(sr->hdr.det==2){double Zbeam=sr->trk.kalman.tracks[0].dir.Dot(beamDirFD);double ptp=sqrt(1-Zbeam *Zbeam);return(float) ptp;}}return-5.f;})
const Var kNonQeHadE([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999) return float(sr->energy.numu.recotrkcchadE);return-5.f;})
const Var kSlcStartTime([](const caf::SRProxy *sr){return sr->slc.starttime/1000.;})
const Var kVisTrkCalE([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.;if(sr->energy.numu.trkccE<=0) return 0.;if(sr->energy.numu.hadtrkE< 0) return 0.;return((sr->trk.kalman.tracks[0].calE)/1.78)-sr->energy.numu.hadtrkE;})
const Var kTrkCalE([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.f;return float(sr->trk.kalman.tracks[0].calE);})
const Var kKalmanForwardCell
const Var kKalmanBackDist([](const caf::SRProxy *sr){return sr->sel.contain.kalbakdist/100.;})
const Var kQeHadE([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999) return sr->energy.numu.trkqeE-sr->energy.numu.recomuonE;return-5.f;})
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 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 kMuEPerNHit([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 0.f;return(float) kMuE(sr)/sr->trk.kalman.tracks[0].nhit;})
const Var kRecoW([](const caf::SRProxy *sr){const double M_p=0.938272;double WSq=M_p *M_p+2 *M_p *(kCCE(sr)-kMuE(sr))-kRecoQ2(sr);if(WSq > 0) return sqrt(WSq);else return-5.;})
Reconstructed invariant mass (W)
const Var kTrkNPlaneGap([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999) return int(sr->trk.kalman.tracks[0].nplanegap);return 500;})
const Var kNumuHadEFrac2020
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;})
const Var kSlcEndTime([](const caf::SRProxy *sr){return sr->slc.endtime/1000.;})
const Var kTrueMuonE([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return 0.f;if(sr->mc.nu[0].prim.empty()) return 0.f;if(std::abs(sr->mc.nu[0].prim[0].pdg)!=13) return 0.f;return float(sr->mc.nu[0].prim[0].p.E);})
const Var kDirX([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return sr->trk.kalman.tracks[0].dir.X();})
const Var kRecoThetaMu([](const caf::SRProxy *sr){return acos(kCosNumi(sr))*180.0/3.1416;})
const Var kQEE
Energy estimator for quasielastic CC events.
const Var kCosmicBackwardCell
const Var kNplanesToFront
const Var kcosDirY([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return(float) cos(kDirY(sr));})
const Var kSlcExtentX([](const caf::SRProxy *sr){return(sr->slc.boxmax.X()-sr->slc.boxmin.X())/100.;})
const Var kSlcExtentZ([](const caf::SRProxy *sr){return(sr->slc.boxmax.Z()-sr->slc.boxmin.Z())/100.;})
const Var kSlcUnCalibNHit([](const caf::SRProxy *sr){return sr->slc.nhit-sr->slc.ncalhit;})
const Var kCosNumi([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999){if(sr->hdr.det==1){return sr->trk.kalman.tracks[0].dir.Dot(beamDirND);}if(sr->hdr.det==2){return sr->trk.kalman.tracks[0].dir.Dot(beamDirFD);}}return-5.f;})
const Var kSlcMinZ([](const caf::SRProxy *sr){return sr->slc.boxmin.Z()/100.;})
const Var kTrkNhits([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return 65535;return int(sr->trk.kalman.tracks[0].nhit);})
const Var kNumuCosRejAngleCos