4 #include "CAFAna/Core/Cut.h" 12 #include "TParticlePDG.h" 23 if(sr->
vtx.nelastic == 0 && sr ->
mc.
nnu == 0)
return false;
36 if (sr->
mc.
nnu == 0)
return false;
37 if (sr->
vtx.nelastic == 0)
return false;
38 if(
fabs(sr->
mc.
nu[0].vtx.x) > 200.0)
return false;
39 if(
fabs(sr->
mc.
nu[0].vtx.y) > 200.0)
return false;
40 if((sr->
mc.
nu[0].vtx.z) < 0.0)
return false;
41 if((sr->
mc.
nu[0].vtx.z) > 1600.0)
return false;
49 if(sr->
mc.
nnu==0)
return false;
50 if(sr->
vtx.nelastic==0)
return false;
69 if(sr->
vtx.nelastic == 0 && sr->
mc.
nnu == 0)
return false;
70 return (sr->
vtx.nelastic==1);
75 if(sr->
vtx.nelastic == 0)
return false;
93 if(sr->
vtx.nelastic==0 && sr->
mc.
nnu == 0)
return false;
100 if (sr->
mc.
nnu == 0)
return false;
101 if (sr->
vtx.nelastic == 0)
return false;
102 return(sr->
mc.
nu[0].iscc &&
103 sr->
mc.
nu[0].pdg == 14);
109 if (sr->
mc.
nnu == 0)
return false;
110 if (sr->
vtx.nelastic == 0)
return false;
111 return(sr->
mc.
nu[0].iscc &&
112 sr->
mc.
nu[0].pdg == 12);
119 if (sr->
mc.
nnu == 0)
return false;
120 if (sr->
vtx.nelastic == 0)
return false;
121 return (sr->
mc.
nu[0].iscc == 0);
127 if (sr->
mc.
nnu == 0)
return false;
128 if (sr->
vtx.nelastic == 0)
return false;
129 return (sr->
mc.
nu[0].iscc==1);
136 float MassOfPi0=0.135;
139 if(sr->
mc.
nnu == 0)
return false;
140 if(sr->
vtx.nelastic == 0)
return false;
141 if(sr->
mc.
nu[0].prim.size() == 0)
return false;
142 int nbofprim=sr->
mc.
nu[0].prim.size();
144 for(
int i = 0;
i < nbofprim;
i++)
146 if(sr->
mc.
nu[0].prim[
i].pdg == 111)
148 en= sr->
mc.
nu[0].prim[
i].p.E;
149 kinetic = en - MassOfPi0;
151 if(kinetic > 0.0) countpi++;
154 if(countpi > 0)
return true;
162 float MassOfPi0=0.135;
165 if(sr->
mc.
nnu == 0)
return false;
166 if(sr->
vtx.nelastic == 0)
return false;
167 if(sr->
mc.
nu[0].prim.size() == 0)
return false;
168 int nbofprim=sr->
mc.
nu[0].prim.size();
170 for(
int i = 0;
i < nbofprim;
i++)
172 if(sr->
mc.
nu[0].prim[
i].pdg == 111)
174 en= sr->
mc.
nu[0].prim[
i].p.E;
175 kinetic = en - MassOfPi0;
180 if (countpi == 0 && !sr->
mc.
nu[0].iscc)
return true;
188 if(sr->
mc.
nnu == 0)
return false;
189 if(sr->
vtx.nelastic == 0)
return false;
190 if(sr->
mc.
nu[0].prim.size() == 0)
return false;
191 int nbofprim=sr->
mc.
nu[0].prim.size();
194 for(
int i=0;
i<nbofprim;
i++)
196 if(sr->
mc.
nu[0].prim[
i].pdg==111) countpi++;
198 if (countpi > 0 && sr->
mc.
nu[0].iscc)
return true;
206 if(sr->
mc.
nnu == 0)
return false;
207 if(sr->
vtx.nelastic == 0)
return false;
208 if(sr->
mc.
nu[0].prim.size() == 0)
return false;
209 int nbofprim=sr->
mc.
nu[0].prim.size();
212 for(
int i=0;
i<nbofprim;
i++)
214 if(sr->
mc.
nu[0].prim[
i].pdg==111) countpi++;
216 if (countpi == 0 && sr->
mc.
nu[0].iscc)
return true;
233 float MassOfPi0=0.135;
238 if(sr->
vtx.nelastic == 0 && sr->
mc.
nnu==0)
return false;
240 reco= (totEn-MassOfPi0);
242 if(reco > .2)
return true;
249 if(sr->
vtx.nelastic == 0 && sr->
mc.
nnu==0)
return false;
250 if(sr->
slc.
calE > .2)
return true;
257 if(sr->
vtx.nelastic == 0 && sr->
mc.
nnu==0)
return false;
266 if(sr->
vtx.nelastic == 0)
return false;
267 if(sr->
mc.
nnu==0)
return false;
275 if(sr->
vtx.nelastic == 0)
return false;
276 if(sr->
mc.
nnu==0)
return false;
284 if(sr->
vtx.nelastic == 0)
return false;
285 if(sr->
mc.
nnu==0)
return false;
293 if(sr->
vtx.nelastic == 0)
return false;
294 if(sr->
mc.
nnu==0)
return false;
caf::Proxy< size_t > npng
caf::Proxy< unsigned int > nshwlid
const Cut kCVNPhoton([](const caf::SRProxy *sr){return(sr->vtx.elastic[0].fuzzyk.png[0].cvnpart.photonid >0.7);})
const Cut kCCurrent([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);if(sr->vtx.elastic[0].fuzzyk.nshwlid==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;return(sr->mc.nu[0].iscc==1);})
caf::Proxy< caf::SRFuzzyK > fuzzyk
Cuts and Vars for the 2020 FD DiF Study.
const Cut kElectron([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;if(sr->mc.nnu==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;if(sr->vtx.elastic[0].fuzzyk.png[0].truth.pdg==11) return true;return false;})
fvar< T > fabs(const fvar< T > &x)
const Cut k1Prong([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0 &&sr->mc.nnu==0) return false;return(sr->vtx.elastic[0].fuzzyk.npng==1);})
Proxy for caf::StandardRecord.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
const Cut kNCurrent([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);if(sr->vtx.elastic[0].fuzzyk.nshwlid==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;return(sr->mc.nu[0].iscc==0);})
CC and NC current cuts///.
double Distance(double x1, double y1, double x2, double y2)
const Cut kVertexDistance([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;float Distance;Distance=sqrt( (sr->mc.nu[0].vtx.x-sr->vtx.elastic[0].vtx.x)* (sr->mc.nu[0].vtx.x-sr->vtx.elastic[0].vtx.x)+ (sr->mc.nu[0].vtx.y-sr->vtx.elastic[0].vtx.y)* (sr->mc.nu[0].vtx.y-sr->vtx.elastic[0].vtx.y)+ (sr->mc.nu[0].vtx.z-sr->vtx.elastic[0].vtx.z)* (sr->mc.nu[0].vtx.z-sr->vtx.elastic[0].vtx.z) );return Distance > 10.0;})
caf::Proxy< short int > nnu
const Cut kNumu([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;if(sr->mc.nnu==0) return false;return(sr->mc.nu[0].pdg==14);})
const Cut kPhoton([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;if(sr->mc.nnu==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;if(sr->vtx.elastic[0].fuzzyk.png[0].truth.pdg==22) return true;return false;})
const Cut NCBkg([](const caf::SRProxy *sr){float MassOfPi0=0.135;float kinetic=-10;float en=-99;if(sr->mc.nnu==0) return false;if(sr->vtx.nelastic==0) return false;if(sr->mc.nu[0].prim.size()==0) return false;int nbofprim=sr->mc.nu[0].prim.size();int countpi=0;for(int i=0;i< nbofprim;i++){if(sr->mc.nu[0].prim[i].pdg==111){en=sr->mc.nu[0].prim[i].p.E;kinetic=en-MassOfPi0;countpi++;}}if(countpi==0 &&!sr->mc.nu[0].iscc) return true;return false;})
caf::Proxy< caf::SRElastic > elastic
const Cut kPiPlus([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;if(sr->mc.nnu==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;if(sr->vtx.elastic[0].fuzzyk.png[0].truth.pdg==211) return true;return false;})
caf::Proxy< std::vector< caf::SRFuzzyKProng > > png
const Cut CCPi0Bkg([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;if(sr->vtx.nelastic==0) return false;if(sr->mc.nu[0].prim.size()==0) return false;int nbofprim=sr->mc.nu[0].prim.size();int countpi=0;for(int i=0;i< nbofprim;i++){if(sr->mc.nu[0].prim[i].pdg==111) countpi++;}if(countpi > 0 &&sr->mc.nu[0].iscc) return true;return false;})
_Cut< caf::SRProxy > Cut
Representation of a cut (selection) to be applied to a caf::StandardRecord object.
const Cut kFiducial([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0 &&sr->mc.nnu==0) return false;if((sr->vtx.elastic[0].vtx.x)< -170.0) return false;if((sr->vtx.elastic[0].vtx.x) > 170.0) return false;if((sr->vtx.elastic[0].vtx.y)< -160.0) return false;if((sr->vtx.elastic[0].vtx.y) > 170.0) return false;if((sr->vtx.elastic[0].vtx.z)< 50.0) return false;if((sr->vtx.elastic[0].vtx.z) > 1100.0) return false;return true;})
caf::Proxy< caf::SRRemid > remid
const Cut kContainment([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;if(sr->vtx.nelastic==0) return false;if(sr->vtx.elastic[0].fuzzyk.nshwlid==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;for(unsigned int i=0;i< sr->vtx.elastic[0].fuzzyk.nshwlid;i++){if((sr->vtx.elastic[0].fuzzyk.png[i].shwlid.stop.x)< -160.0) return false;if((sr->vtx.elastic[0].fuzzyk.png[i].shwlid.stop.x) > 120.0) return false;if((sr->vtx.elastic[0].fuzzyk.png[i].shwlid.stop.y)< -180.0) return false;if((sr->vtx.elastic[0].fuzzyk.png[i].shwlid.stop.y) > 155.0) return false;if((sr->vtx.elastic[0].fuzzyk.png[i].shwlid.stop.z)< 200.0) return false;if((sr->vtx.elastic[0].fuzzyk.png[i].shwlid.stop.z) > 1200.0) return false;}return true;})
const Cut kNue([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;if(sr->vtx.nelastic==0) return false;return(sr->mc.nu[0].iscc && sr->mc.nu[0].pdg==12);})
caf::Proxy< caf::SRTruthBranch > mc
const Cut kremid([](const caf::SRProxy *sr){ return(sr->sel.remid.pid< 0.4125);})
const Cut CCNonPi0Bkg([](const caf::SRProxy *sr){if(sr->mc.nnu==0) return false;if(sr->vtx.nelastic==0) return false;if(sr->mc.nu[0].prim.size()==0) return false;int nbofprim=sr->mc.nu[0].prim.size();int countpi=0;for(int i=0;i< nbofprim;i++){if(sr->mc.nu[0].prim[i].pdg==111) countpi++;}if(countpi==0 &&sr->mc.nu[0].iscc) return true;return false;})
caf::Proxy< caf::SRSlice > slc
caf::Proxy< caf::SRVector3D > vtx
const Cut kVtx([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0 &&sr->mc.nnu==0) return false;return(sr->vtx.nelastic==0);})
const Cut kprongnhits([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0 &&sr->mc.nnu==0) return false;if(sr->vtx.elastic[0].fuzzyk.png[0].nhitx< 5) return false;if(sr->vtx.elastic[0].fuzzyk.png[0].nhity< 5) return false;return true;})
caf::Proxy< caf::SRIDBranch > sel
Template for Cut and SpillCut.
caf::Proxy< caf::SRVertexBranch > vtx
const Cut kMuon([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0) return false;if(sr->mc.nnu==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;if(sr->vtx.elastic[0].fuzzyk.png[0].truth.pdg==13) return true;return false;})
const Cut ksliceenergy([](const caf::SRProxy *sr){if(sr->vtx.nelastic==0 &&sr->mc.nnu==0) return false;if(sr->slc.calE >.2) return true;return false;})
const Cut kPi0([](const caf::SRProxy *sr){float MassOfPi0=0.135;float kinetic=-10;float en=-99;if(sr->vtx.nelastic==0) return false;if(sr->vtx.elastic[0].fuzzyk.nshwlid==0) return false;if(sr->vtx.elastic[0].fuzzyk.npng==0) return false;if(sr->mc.nnu==0) return false;assert(sr->mc.nnu==1);if(sr->mc.nu[0].prim.size()==0) return false;int nbofprim=sr->mc.nu[0].prim.size();int countpi0=0;for(int i=0;i< nbofprim;i++){if(sr->mc.nu[0].prim[i].pdg==111){en=sr->mc.nu[0].prim[i].p.E; if(en > 0.3){countpi0++;}}}if(countpi0 > 0) return true;return false;})
const Cut krecoprongenergy([](const caf::SRProxy *sr){float MassOfPi0=0.135;float kinetic=-10;float en=-99;float totEn;float reco;if(sr->vtx.nelastic==0 &&sr->mc.nnu==0) return false;totEn=(sr->vtx.elastic[0].fuzzyk.png[0].shwlid.calE);reco=(totEn-MassOfPi0);if(reco >.2) return true;return false;})