9 #include "Utilities/func/MathUtil.h" 26 std::vector<double>
E;
28 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
29 E.emplace_back(sr->vtx.elastic.fuzzyk.png[i].calE);
37 std::vector<double>
E;
39 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
40 E.emplace_back(sr->vtx.elastic.fuzzyk.png[i].weightedCalE);
47 std::vector<double>
nhit;
49 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
50 nhit.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nhit);
57 std::vector<double>
nhit;
59 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
60 nhit.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nhitx);
68 std::vector<double>
nhit;
70 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
71 nhit.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nhity);
78 std::vector<double> nplane;
80 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
81 nplane.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nplane);
88 std::vector<double> maxplane;
90 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
91 maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png[i].maxplanecont);
98 std::vector<double> maxplane;
100 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
101 maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png[i].maxplanegap);
108 std::vector<double>
len;
110 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
111 len.emplace_back(sr->vtx.elastic.fuzzyk.png[i].len/100.);
118 std::vector<double>
dir;
120 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
121 dir.emplace_back(sr->vtx.elastic.fuzzyk.png[i].dir.X());
127 std::vector<double>
dir;
129 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
130 dir.emplace_back(sr->vtx.elastic.fuzzyk.png[i].dir.Y());
136 std::vector<double>
dir;
138 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
139 dir.emplace_back(sr->vtx.elastic.fuzzyk.png[i].dir.Z());
146 std::vector<double>
start;
148 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
149 start.emplace_back(sr->vtx.elastic.fuzzyk.png[i].start.X()/100.);
155 std::vector<double>
start;
157 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
158 start.emplace_back(sr->vtx.elastic.fuzzyk.png[i].start.Y()/100.);
164 std::vector<double>
start;
166 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng; ++
i){
167 start.emplace_back(sr->vtx.elastic.fuzzyk.png[i].start.Z()/100.);
179 std::vector<double>
E;
181 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
182 E.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].calE);
190 std::vector<double>
E;
192 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
193 E.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].weightedCalE);
200 std::vector<double>
nhit;
202 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
203 nhit.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nhit);
210 std::vector<double>
nhit;
212 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
213 nhit.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nhitx);
221 std::vector<double>
nhit;
223 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
224 nhit.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nhity);
231 std::vector<double> nplane;
233 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
234 nplane.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nplane);
241 std::vector<double> maxplane;
243 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
244 maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].maxplanecont);
251 std::vector<double> maxplane;
253 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
254 maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].maxplanegap);
261 std::vector<double>
len;
263 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
264 len.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].len/100.);
272 std::vector<double>
dir;
274 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
275 dir.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].dir.X());
281 std::vector<double>
dir;
283 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
284 dir.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].dir.Y());
290 std::vector<double>
dir;
292 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
293 dir.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].dir.Z());
300 std::vector<double>
start;
302 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
303 start.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].start.X()/100.);
309 std::vector<double>
start;
311 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
312 start.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].start.Y()/100.);
318 std::vector<double>
start;
320 for(
unsigned int i = 0; i < sr->vtx.elastic.fuzzyk.npng2d; ++
i){
321 start.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].start.Z()/100.);
368 if(sr->
mc.
nnu==0)
return -5.f;
374 if(sr->
mc.
nnu==0)
return -5.f;
381 if(sr->
mc.
nnu==0)
return -5.f;
382 return (
float)sr->
mc.
nu[0].visE;
387 if(sr->
mc.
nnu==0)
return -5.f;
388 return (
float)sr->
mc.
nu[0].visEinslc;
393 if(sr->
mc.
nnu==0)
return -5.f;
394 return (
float)sr->
mc.
nu[0].visENeutron;
399 if(sr->
mc.
nnu==0)
return -5.f;
400 return (
float)sr->
mc.
nu[0].visEinslcNeutron;
405 if(sr->
mc.
nnu==0)
return -5.f;
406 return (
float)sr->
mc.
nu[0].visEBirks;
411 if(sr->
mc.
nnu==0)
return -5.f;
412 return (
float)sr->
mc.
nu[0].visEinslcBirks;
417 if(sr->
mc.
nnu==0)
return -5.f;
418 return (
float)sr->
mc.
nu[0].visENeutronBirks;
423 if(sr->
mc.
nnu==0)
return -5.f;
424 return (
float)sr->
mc.
nu[0].visEinslcNeutronBirks;
429 if(sr->
mc.
nnu==0)
return -5.f;
430 return (
float)sr->
mc.
nu[0].eff;
435 if(sr->
mc.
nnu==0)
return -5.f;
436 return (
float)sr->
mc.
nu[0].pur;
441 if(sr->
mc.
nnu==0)
return -5.f;
442 return (
float)sr->
mc.
nu[0].nhitslc;
447 if(sr->
mc.
nnu==0)
return -5.f;
448 return (
float)sr->
mc.
nu[0].nhittot;
453 if(sr->
mc.
nnu==0)
return -5.f;
454 return (
float)sr->
mc.
nu[0].p.X();
459 if(sr->
mc.
nnu==0)
return -5.f;
460 return (
float)sr->
mc.
nu[0].p.Y();
465 if(sr->
mc.
nnu==0)
return -5.f;
466 return (
float)sr->
mc.
nu[0].p.Z();
472 if(sr->
mc.
nnu==0)
return -5555.f;
473 return float(sr->
mc.
nu[0].vtx.X()/100.);
478 if(sr->
mc.
nnu==0)
return -5555.f;
479 return float(sr->
mc.
nu[0].vtx.Y()/100.);
484 if(sr->
mc.
nnu==0)
return -5.f;
485 return float(sr->
mc.
nu[0].vtx.Z()/100.);
490 if(sr->
mc.
nnu==0)
return -5.f;
496 if(sr->
mc.
nnu==0)
return -5.f;
502 if(sr->
mc.
nnu==0)
return -5.f;
503 float recoE =
kHadE(sr);
506 return float((recoE-trueE)/trueE);
511 if(sr->
mc.
nnu==0)
return -5.f;
521 return (
float)nu->
visE;
561 return (
float)nu->
eff;
566 return (
float)nu->
pur;
581 return (
float)nu->
p.
X();
586 return (
float)nu->
p.
Y();
591 return (
float)nu->
p.
Z();
const MultiVar kPngCalE([](const caf::SRProxy *sr){std::vector< double > E;if(!sr->vtx.elastic.IsValid) return E;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){E.emplace_back(sr->vtx.elastic.fuzzyk.png[i].calE);}return E;})
caf::Proxy< size_t > npng
const MultiVar kPngDirY([](const caf::SRProxy *sr){std::vector< double > dir;if(!sr->vtx.elastic.IsValid) return dir;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){dir.emplace_back(sr->vtx.elastic.fuzzyk.png[i].dir.Y());}return dir;})
const NuTruthVar kTrueSlcEff_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->eff;})
const NuTruthVar kTrueVisEinSlc_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visEinslc;})
const NuTruthVar kTrueVtxZ_NT([](const caf::SRNeutrinoProxy *nu){return float(nu->vtx.Z()/100.);})
caf::Proxy< caf::SRFuzzyK > fuzzyk
Represent the binning of a Spectrum's x-axis.
Cuts and Vars for the 2020 FD DiF Study.
const MultiVar kPngNhit([](const caf::SRProxy *sr){std::vector< double > nhit;if(!sr->vtx.elastic.IsValid) return nhit;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){nhit.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nhit);}return nhit;})
caf::Proxy< float > visENeutronBirks
const Var kNPng2D([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-5;return(int) sr->vtx.elastic.fuzzyk.npng2d;})
const Var kTrueMomY([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].p.Y();})
const MultiVar kPng2dDirX([](const caf::SRProxy *sr){std::vector< double > dir;if(!sr->vtx.elastic.IsValid) return dir;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){dir.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].dir.X());}return dir;})
const MultiVar kPng2dCalE([](const caf::SRProxy *sr){std::vector< double > E;if(!sr->vtx.elastic.IsValid) return E;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){E.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].calE);}return E;})
const MultiVar kPngStartX([](const caf::SRProxy *sr){std::vector< double > start;if(!sr->vtx.elastic.IsValid) return start;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){start.emplace_back(sr->vtx.elastic.fuzzyk.png[i].start.X()/100.);}return start;})
caf::Proxy< unsigned int > idxremid
caf::Proxy< size_t > ntracks
Proxy for caf::SRNeutrino.
const MultiVar kPngMaxPlaneCont([](const caf::SRProxy *sr){std::vector< double > maxplane;if(!sr->vtx.elastic.IsValid) return maxplane;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png[i].maxplanecont);}return maxplane;})
const NuTruthVar kTrueQ0_NT([](const caf::SRNeutrinoProxy *nu){return nu->y *nu->E;})
True energy transfer (q0 = 0th component of four-momentum transfer)
const MultiVar kPng2dNhitY([](const caf::SRProxy *sr){std::vector< double > nhit;if(!sr->vtx.elastic.IsValid) return nhit;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){nhit.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nhity);}return nhit;})
Proxy for caf::StandardRecord.
const NuTruthVar kTrueQ3_NT([](const caf::SRNeutrinoProxy *nu){return sqrt(nu->q2+util::sqr(kTrueQ0_NT(nu)));})
True magnitude of three-momentum transfer.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
const NuTruthVar kTrueMomY_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->p.Y();})
const NuTruthVar kTrueq0q3_NT([](const caf::SRNeutrinoProxy *nu){return float(kTrueQ0_NT(nu)/kTrueQ3_NT(nu));})
const MultiVar kPngNhitY([](const caf::SRProxy *sr){std::vector< double > nhit;if(!sr->vtx.elastic.IsValid) return nhit;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){nhit.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nhity);}return nhit;})
const Var kMuEres([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return float((kMuE(sr)-kTrueMuonE(sr))/kTrueMuonE(sr));})
const MultiVar kPngDirZ([](const caf::SRProxy *sr){std::vector< double > dir;if(!sr->vtx.elastic.IsValid) return dir;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){dir.emplace_back(sr->vtx.elastic.fuzzyk.png[i].dir.Z());}return dir;})
const NuTruthVar kTrueVisEinSlcBirks_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visEinslcBirks;})
const MultiVar kPngStartZ([](const caf::SRProxy *sr){std::vector< double > start;if(!sr->vtx.elastic.IsValid) return start;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){start.emplace_back(sr->vtx.elastic.fuzzyk.png[i].start.Z()/100.);}return start;})
const Var kTrueVisEinSlc([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visEinslc;})
caf::Proxy< short int > nnu
const NuTruthVar kTrueNHitsSlc_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->nhitslc;})
const MultiVar kPng2dStartX([](const caf::SRProxy *sr){std::vector< double > start;if(!sr->vtx.elastic.IsValid) return start;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){start.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].start.X()/100.);}return start;})
const MultiVar kPng2dMaxPlaneCont([](const caf::SRProxy *sr){std::vector< double > maxplane;if(!sr->vtx.elastic.IsValid) return maxplane;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].maxplanecont);}return maxplane;})
const NuTruthVar kTrueMomZ_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->p.Z();})
const Var kNNonNoise([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return float(sr->slc.nnonnoise);})
const Var kTrueNHitsTot([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].nhittot;})
_Var< caf::SRProxy > Var
Representation of a variable to be retrieved from a caf::StandardRecord object.
const NuTruthVar kTrueVisENeutron_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visENeutron;})
const Var kVtxZm([](const caf::SRProxy *sr){return float(kVtxZ(sr)/100.);})
const Var kNPng3D([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-5;return(int) sr->vtx.elastic.fuzzyk.npng;})
const Var kOrphCalE([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-5.f;return(float) sr->vtx.elastic.fuzzyk.orphCalE;})
caf::Proxy< caf::SRElastic > elastic
const MultiVar kPng2dStartZ([](const caf::SRProxy *sr){std::vector< double > start;if(!sr->vtx.elastic.IsValid) return start;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){start.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].start.Z()/100.);}return start;})
caf::Proxy< caf::SRVector3D > vtx
const MultiVar kPngNPlane([](const caf::SRProxy *sr){std::vector< double > nplane;if(!sr->vtx.elastic.IsValid) return nplane;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){nplane.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nplane);}return nplane;})
const Var kTrueVisENeutronBirks([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visENeutronBirks;})
const MultiVar kPngMaxPlaneGap([](const caf::SRProxy *sr){std::vector< double > maxplane;if(!sr->vtx.elastic.IsValid) return maxplane;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png[i].maxplanegap);}return maxplane;})
const MultiVar kPng2dNhitX([](const caf::SRProxy *sr){std::vector< double > nhit;if(!sr->vtx.elastic.IsValid) return nhit;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){nhit.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nhitx);}return nhit;})
caf::Proxy< unsigned int > nhittot
const MultiVar kPng2dDirY([](const caf::SRProxy *sr){std::vector< double > dir;if(!sr->vtx.elastic.IsValid) return dir;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){dir.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].dir.Y());}return dir;})
const Var kTrkNPlaneGapFrac([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;if(sr->trk.kalman.ntracks > 0 &&sr->trk.kalman.idxremid!=999) return float(float(sr->trk.kalman.tracks[0].nplanegap)/float(sr->trk.kalman.tracks[0].nplane));return-5.f;})
const Var kTrueE([](const caf::SRProxy *sr){assert(sr->mc.nnu==1);return sr->mc.nu[0].E;})
const MultiVar kPng2dMaxPlaneGap([](const caf::SRProxy *sr){std::vector< double > maxplane;if(!sr->vtx.elastic.IsValid) return maxplane;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){maxplane.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].maxplanegap);}return maxplane;})
const NuTruthVar kTrueVisEinSlcNeutronBirks_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visEinslcNeutronBirks;})
const MultiVar kPngLen([](const caf::SRProxy *sr){std::vector< double > len;if(!sr->vtx.elastic.IsValid) return len;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){len.emplace_back(sr->vtx.elastic.fuzzyk.png[i].len/100.);}return len;})
caf::Proxy< float > visEinslcBirks
const Var kTrueVisEinSlcNeutronBirks([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visEinslcNeutronBirks;})
caf::Proxy< caf::SRTrackBranch > trk
const Var kTrueVisEBirks([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visEBirks;})
const Binning kHadronicEnergyBinning
const Var kHadEres([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;float recoE=kHadE(sr);float trueE=kTrueE(sr)-kMuE(sr);return float((recoE-trueE)/trueE);})
const MultiVar kPngNhitX([](const caf::SRProxy *sr){std::vector< double > nhit;if(!sr->vtx.elastic.IsValid) return nhit;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){nhit.emplace_back(sr->vtx.elastic.fuzzyk.png[i].nhitx);}return nhit;})
caf::Proxy< float > visEinslcNeutron
_Var< caf::SRNeutrinoProxy > NuTruthVar
Var designed to be used over the nuTree, ie all neutrinos, not just those that got slices...
const Binning kEnergyBinning
const NuTruthVar kTrueNHitsTot_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->nhittot;})
caf::Proxy< unsigned int > nnonnoise
caf::Proxy< unsigned int > nhitslc
const Var kTrueSlcPur([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].pur;})
const Var kNueCosRejPngPTP
const NuTruthVar kTrueVisENeutronBirks_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visENeutronBirks;})
const MultiVar kPngWtCalE([](const caf::SRProxy *sr){std::vector< double > E;if(!sr->vtx.elastic.IsValid) return E;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){E.emplace_back(sr->vtx.elastic.fuzzyk.png[i].weightedCalE);}return E;})
const Var kKalTrkOverlapE([](const caf::SRProxy *sr){if(sr->trk.kalman.ntracks< 1) return-5.f;return(float) sr->trk.kalman.tracks[0].overlapE;})
const NuTruthVar kTrueMomX_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->p.X();})
caf::Proxy< float > visEinslc
const MultiVar kPng2dNPlane([](const caf::SRProxy *sr){std::vector< double > nplane;if(!sr->vtx.elastic.IsValid) return nplane;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){nplane.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nplane);}return nplane;})
const MultiVar kPngStartY([](const caf::SRProxy *sr){std::vector< double > start;if(!sr->vtx.elastic.IsValid) return start;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){start.emplace_back(sr->vtx.elastic.fuzzyk.png[i].start.Y()/100.);}return start;})
const Var kTrueMomX([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].p.X();})
const Var kTrueVisENeutron([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visENeutron;})
caf::Proxy< caf::SRTruthBranch > mc
const Var kTrueVtxZ([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return float(sr->mc.nu[0].vtx.Z()/100.);})
const Var kTrueVisE([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visE;})
caf::Proxy< float > orphCalE
const NuTruthVar kTrueVisE_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visE;})
caf::Proxy< caf::SRKalman > kalman
const NuTruthVar kTrueSlcPur_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->pur;})
caf::Proxy< bool > IsValid
const NuTruthVar kTrueVtxY_NT([](const caf::SRNeutrinoProxy *nu){return float(nu->vtx.Y()/100.);})
const Var kTrueVisEinSlcBirks([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visEinslcBirks;})
caf::Proxy< caf::SRSlice > slc
const Var kTrueVisEinSlcNeutron([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].visEinslcNeutron;})
caf::Proxy< float > visEinslcNeutronBirks
const Var kEres([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return float((kCCE(sr)-kTrueE(sr))/kTrueE(sr));})
const Var kTrueMomZ([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].p.Z();})
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 Binning kEnergyBinningZoom
const MultiVar kPngDirX([](const caf::SRProxy *sr){std::vector< double > dir;if(!sr->vtx.elastic.IsValid) return dir;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){dir.emplace_back(sr->vtx.elastic.fuzzyk.png[i].dir.X());}return dir;})
#define SIMPLEVAR(CAFNAME)
For Vars where literally all you need is a single CAF variable.
caf::Proxy< float > visENeutron
_MultiVar< caf::SRProxy > MultiVar
const MultiVar kPng2dLen([](const caf::SRProxy *sr){std::vector< double > len;if(!sr->vtx.elastic.IsValid) return len;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){len.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].len/100.);}return len;})
const NuTruthVar kTrueLepE_NT([](const caf::SRNeutrinoProxy *nu){return float(nu->prim[0].p.E);})
caf::Proxy< caf::SRLorentzVector > p
const MultiVar kPng2dDirZ([](const caf::SRProxy *sr){std::vector< double > dir;if(!sr->vtx.elastic.IsValid) return dir;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){dir.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].dir.Z());}return dir;})
caf::Proxy< std::vector< caf::SRKalmanTrack > > tracks
caf::Proxy< size_t > npng2d
const MultiVar kPng2dNhit([](const caf::SRProxy *sr){std::vector< double > nhit;if(!sr->vtx.elastic.IsValid) return nhit;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){nhit.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].nhit);}return nhit;})
const Var kVtxXm([](const caf::SRProxy *sr){return float(kVtxX(sr)/100.);})
caf::Proxy< caf::SRVertexBranch > vtx
const NuTruthVar kTrueMode_NT([](const caf::SRNeutrinoProxy *nu){return int(nu->mode);})
static Binning Simple(int n, double lo, double hi, const std::vector< std::string > &labels={})
const NuTruthVar kTrueVtxX_NT([](const caf::SRNeutrinoProxy *nu){return float(nu->vtx.X()/100.);})
caf::Proxy< float > visEBirks
const NuTruthVar kTrueVisEBirks_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visEBirks;})
const Var kTrueVtxX([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5555.f;return float(sr->mc.nu[0].vtx.X()/100.);})
const Binning kHadronicEnergyBinningZoom
const Var kVtxYm([](const caf::SRProxy *sr){return float(kVtxY(sr)/100.);})
const MultiVar kPng2dWtCalE([](const caf::SRProxy *sr){std::vector< double > E;if(!sr->vtx.elastic.IsValid) return E;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){E.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].weightedCalE);}return E;})
caf::Proxy< std::vector< caf::SRTrueParticle > > prim
const MultiVar kPng2dStartY([](const caf::SRProxy *sr){std::vector< double > start;if(!sr->vtx.elastic.IsValid) return start;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng2d;++i){start.emplace_back(sr->vtx.elastic.fuzzyk.png2d[i].start.Y()/100.);}return start;})
const Var kNNonNoiseWt([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return float(1./kNNonNoise(sr));})
const Var kTrueVtxY([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5555.f;return float(sr->mc.nu[0].vtx.Y()/100.);})
const Var kTrueSlcEff([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].eff;})
const NuTruthVar kTrueVisEinSlcNeutron_NT([](const caf::SRNeutrinoProxy *nu){return(float) nu->visEinslcNeutron;})
const Var kTrueNHitsSlc([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return-5.f;return(float) sr->mc.nu[0].nhitslc;})