3 #include "sbnanaobj/StandardRecord/Proxy/SRProxy.h"
13 for (
auto const& trk : slc->reco.trk)
15 if ( (trk.truth.p.pdg == 13 || trk.truth.p.pdg == -13) && trk.truth.p.length > len ) len = trk.truth.p.length;
24 for (std::size_t i(0); i < slc->reco.trk.size(); ++i)
26 auto const& trk = slc->reco.trk.at(i);
27 if(trk.bestplane == -1)
continue;
30 const float Atslc = std::hypot(slc->vertex.x - trk.start.x,
31 slc->vertex.y - trk.start.y,
32 slc->vertex.z - trk.start.z);
36 const bool AtSlice = ( Atslc < 10.0 && trk.pfp.parent_is_primary);
38 const float Chi2Proton = trk.chi2pid[trk.bestplane].chi2_proton;
39 const float Chi2Muon = trk.chi2pid[trk.bestplane].chi2_muon;
41 const bool Contained = ( !isnan(trk.end.x) &&
42 ( trk.end.x < -71.1 - 25 && trk.end.x > -369.33 + 25 ) &&
44 ( trk.end.y > -181.7 + 25 && trk.end.y < 134.8 - 25 ) &&
46 ( trk.end.z > -895.95 + 30 && trk.end.z < 895.95 - 50 ) );
47 const bool MaybeMuonExiting = ( !Contained && trk.len > 100);
48 const bool MaybeMuonContained = ( Contained && Chi2Proton > 60 && Chi2Muon < 30 && trk.len > 50 );
49 if ( AtSlice && ( MaybeMuonExiting || MaybeMuonContained ) && trk.len > Longest )
63 auto const& trk = slc->reco.trk.at(
kPTrackInd(slc));
64 const bool Contained = ( !isnan(trk.end.x) &&
65 ( trk.end.x < -71.1 - 25 && trk.end.x > -369.33 + 25 ) &&
67 ( trk.end.y > -181.7 + 25 && trk.end.y < 134.8 - 25 ) &&
69 ( trk.end.z > -895.95 + 30 && trk.end.z < 895.95 - 50 ) );
70 if(Contained)
p = trk.rangeP.p_muon;
71 else p = trk.mcsP.fwdP_muon;
81 auto const& trk = slc->reco.trk.at(
kPTrackInd(slc));
82 p = std::hypot(trk.truth.p.genp.x, trk.truth.p.genp.y, trk.truth.p.genp.z);
const Var kTrueMuonP([](const caf::SRSliceProxy *slc) -> float{float p(-5.f);{auto const &trk=slc->reco.trk.at(kPTrackInd(slc));p=std::hypot(trk.truth.p.genp.x, trk.truth.p.genp.y, trk.truth.p.genp.z);}return p;})
const Var kRecoMuonP([](const caf::SRSliceProxy *slc) -> float{float p(-5.f);{auto const &trk=slc->reco.trk.at(kPTrackInd(slc));const bool Contained=(!isnan(trk.end.x)&&(trk.end.x< -71.1-25 &&trk.end.x >-369.33+25)&&!isnan(trk.end.y)&&(trk.end.y >-181.7+25 &&trk.end.y< 134.8-25)&&!isnan(trk.end.z)&&(trk.end.z >-895.95+30 &&trk.end.z< 895.95-50));if(Contained) p=trk.rangeP.p_muon;else p=trk.mcsP.fwdP_muon;}return p;})
const Var kMuMaxTrack([](const caf::SRSliceProxy *slc) -> float{float len(-5.f);for(auto const &trk:slc->reco.trk){if((trk.truth.p.pdg==13||trk.truth.p.pdg==-13)&&trk.truth.p.length > len) len=trk.truth.p.length;}return len;})
process_name opflashCryoW ana
caf::Proxy< caf::SRSlice > SRSliceProxy
_Var< caf::SRSliceProxy > Var
Representation of a variable to be retrieved from a caf::StandardRecord object.
#define SIMPLEVAR(CAFNAME)
For Vars where literally all you need is a single CAF variable.
const Var kPTrackInd([](const caf::SRSliceProxy *slc) -> int{float Longest(0);int PTrackInd(-1);for(std::size_t i(0);i< slc->reco.trk.size();++i){auto const &trk=slc->reco.trk.at(i);if(trk.bestplane==-1) continue;const float Atslc=std::hypot(slc->vertex.x-trk.start.x, slc->vertex.y-trk.start.y, slc->vertex.z-trk.start.z);const bool AtSlice=(Atslc< 10.0 &&trk.pfp.parent_is_primary);const float Chi2Proton=trk.chi2pid[trk.bestplane].chi2_proton;const float Chi2Muon=trk.chi2pid[trk.bestplane].chi2_muon;const bool Contained=(!isnan(trk.end.x)&&(trk.end.x< -71.1-25 &&trk.end.x >-369.33+25)&&!isnan(trk.end.y)&&(trk.end.y >-181.7+25 &&trk.end.y< 134.8-25)&&!isnan(trk.end.z)&&(trk.end.z >-895.95+30 &&trk.end.z< 895.95-50));const bool MaybeMuonExiting=(!Contained &&trk.len > 100);const bool MaybeMuonContained=(Contained &&Chi2Proton > 60 &&Chi2Muon< 30 &&trk.len > 50);{Longest=trk.len;PTrackInd=i;}}return PTrackInd;})