10 #include "TMVA/Reader.h" 30 float antinuebdt = -5.;
39 antinuebdt = fReaderBDTNue->EvaluateMVA(
"BDTG");
45 if(!fReaderBDTNue) fReaderBDTNue =
new TMVA::Reader;
47 fReaderBDTNue->AddVariable(
"stretch", &BDTNueVars[0]);
48 fReaderBDTNue->AddVariable(
"inelasticity", &BDTNueVars[1]);
49 fReaderBDTNue->AddVariable(
"prim_dedx0", &BDTNueVars[2]);
50 fReaderBDTNue->AddVariable(
"sec_shw_gap", &BDTNueVars[3]);
51 fReaderBDTNue->AddVariable(
"sec_avg_dedx", &BDTNueVars[4]);
52 fReaderBDTNue->BookMVA(
"BDTG", pidlib);
57 float antinumubdt = -5.;
66 antinumubdt = fReaderBDTNumu->EvaluateMVA(
"BDTG");
72 if(!fReaderBDTNumu) fReaderBDTNumu =
new TMVA::Reader;
74 fReaderBDTNumu->AddVariable(
"stretch", &BDTNumuVars[0]);
75 fReaderBDTNumu->AddVariable(
"inelasticity", &BDTNumuVars[1]);
76 fReaderBDTNumu->AddVariable(
"prim_dedx0", &BDTNumuVars[2]);
77 fReaderBDTNumu->AddVariable(
"sec_shw_gap", &BDTNumuVars[3]);
78 fReaderBDTNumu->AddVariable(
"sec_avg_dedx", &BDTNumuVars[4]);
79 fReaderBDTNumu->BookMVA(
"BDTG", pidlib);
85 float antinuebdt = -5.;
99 if(!fReaderBDTCVNNue_p1 || !fReaderBDTCVNNue_p2)
InitTMVA();
101 antinuebdt = fReaderBDTCVNNue_p1->EvaluateMVA(
"BDTG");
103 antinuebdt = fReaderBDTCVNNue_p2->EvaluateMVA(
"BDTG");
110 if(!fReaderBDTCVNNue_p1) fReaderBDTCVNNue_p1 =
new TMVA::Reader;
111 if(!fReaderBDTCVNNue_p2) fReaderBDTCVNNue_p2 =
new TMVA::Reader;
114 fReaderBDTCVNNue_p1->AddVariable(
"stretch", &BDTCVNNue_p1Vars[0]);
115 fReaderBDTCVNNue_p1->AddVariable(
"inelasticity", &BDTCVNNue_p1Vars[1]);
116 fReaderBDTCVNNue_p1->AddVariable(
"prim_dedx0", &BDTCVNNue_p1Vars[2]);
117 fReaderBDTCVNNue_p1->AddVariable(
"cvnfsp", &BDTCVNNue_p1Vars[3]);
118 fReaderBDTCVNNue_p1->BookMVA(
"BDTG", pidlib_p1);
120 fReaderBDTCVNNue_p2->AddVariable(
"stretch", &BDTCVNNue_p2Vars[0]);
121 fReaderBDTCVNNue_p2->AddVariable(
"inelasticity", &BDTCVNNue_p2Vars[1]);
122 fReaderBDTCVNNue_p2->AddVariable(
"prim_dedx0", &BDTCVNNue_p2Vars[2]);
123 fReaderBDTCVNNue_p2->AddVariable(
"cvnfsp", &BDTCVNNue_p2Vars[3]);
124 fReaderBDTCVNNue_p2->AddVariable(
"maxprotondist", &BDTCVNNue_p2Vars[4]);
125 fReaderBDTCVNNue_p2->AddVariable(
"maxproton", &BDTCVNNue_p2Vars[5]);
126 fReaderBDTCVNNue_p2->BookMVA(
"BDTG", pidlib_p2);
131 float antinumubdt = -5.;
133 BDTCVNNumu_p1Vars[0] =
kStretch(sr);
138 BDTCVNNumu_p2Vars[0] =
kStretch(sr);
145 if(!fReaderBDTCVNNumu_p1 || !fReaderBDTCVNNumu_p2)
InitTMVA();
147 antinumubdt = fReaderBDTCVNNumu_p1->EvaluateMVA(
"BDTG");
149 antinumubdt = fReaderBDTCVNNumu_p2->EvaluateMVA(
"BDTG");
156 if(!fReaderBDTCVNNumu_p1) fReaderBDTCVNNumu_p1 =
new TMVA::Reader;
157 if(!fReaderBDTCVNNumu_p2) fReaderBDTCVNNumu_p2 =
new TMVA::Reader;
160 fReaderBDTCVNNumu_p1->AddVariable(
"stretch", &BDTCVNNumu_p1Vars[0]);
161 fReaderBDTCVNNumu_p1->AddVariable(
"inelasticity", &BDTCVNNumu_p1Vars[1]);
162 fReaderBDTCVNNumu_p1->AddVariable(
"prim_dedx0", &BDTCVNNumu_p1Vars[2]);
163 fReaderBDTCVNNumu_p1->AddVariable(
"cvnfsp", &BDTCVNNumu_p1Vars[3]);
164 fReaderBDTCVNNumu_p1->BookMVA(
"BDTG", pidlib_p1);
166 fReaderBDTCVNNumu_p2->AddVariable(
"stretch", &BDTCVNNumu_p2Vars[0]);
167 fReaderBDTCVNNumu_p2->AddVariable(
"inelasticity", &BDTCVNNumu_p2Vars[1]);
168 fReaderBDTCVNNumu_p2->AddVariable(
"prim_dedx0", &BDTCVNNumu_p2Vars[2]);
169 fReaderBDTCVNNumu_p2->AddVariable(
"cvnfsp", &BDTCVNNumu_p2Vars[3]);
170 fReaderBDTCVNNumu_p2->AddVariable(
"maxprotondist", &BDTCVNNumu_p2Vars[4]);
171 fReaderBDTCVNNumu_p2->AddVariable(
"maxproton", &BDTCVNNumu_p2Vars[5]);
172 fReaderBDTCVNNumu_p2->BookMVA(
"BDTG", pidlib_p2);
202 if(sr->
slc.
calE == 0)
return -5.;
209 if(sr->
slc.
calE == 0)
return -5.;
222 #define PrimVAR(VAR) \ 224 [](const caf::SRProxy* sr) \ 226 if(!sr->vtx.elastic.IsValid) return -5.; \ 227 if(sr->vtx.elastic.fuzzyk.nshwlid < 1) return -5.; \ 228 return double(sr->vtx.elastic.fuzzyk.png[0].shwlid.VAR); \ 231 #define SecVAR(VAR) \ 233 [](const caf::SRProxy* sr) \ 235 if(!sr->vtx.elastic.IsValid) return -5.; \ 236 if(sr->vtx.elastic.fuzzyk.nshwlid< 2) return 0.; \ 237 return double(sr->vtx.elastic.fuzzyk.png[1].shwlid.VAR); \ 245 if(!sr->vtx.elastic.IsValid)
247 if(sr->vtx.elastic.fuzzyk.nshwlid < 1)
return -5.;
248 if(sr->vtx.elastic.fuzzyk.npng < 1)
return -5.;
249 if(sr->vtx.elastic.fuzzyk.png[0].len < 1
e-10)
return -5.;
250 return (
double)(sr->vtx.elastic.fuzzyk.png[0].calE/sr->vtx.elastic.fuzzyk.png[0].len);
275 if(!sr->vtx.elastic.IsValid)
return -5;
276 return (
int)sr->vtx.elastic.fuzzyk.npng;
caf::Proxy< size_t > npng
caf::Proxy< unsigned int > nshwlid
const Var kEthetaSqr([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-5.;if(sr->vtx.elastic.fuzzyk.png.size()==0) return-5.;return(double)(sr->vtx.elastic.fuzzyk.png[0].calE *std::pow(acos(sr->vtx.elastic.fuzzyk.png[0].dir.z), 2));})
float operator()(const caf::SRProxy *sr) const
const Var kInElasticity([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return 1.f;if(sr->vtx.elastic.fuzzyk.nshwlid< 1) return 1.f;return((sr->slc.calE- sr->vtx.elastic.fuzzyk.png[0].shwlid.calE)/(sr->slc.calE));})
caf::Proxy< caf::SRFuzzyK > fuzzyk
Cuts and Vars for the 2020 FD DiF Study.
const Var kSecAvgDedx([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-5.;if(sr->vtx.elastic.fuzzyk.nshwlid< 2) return 0.;if(sr->vtx.elastic.fuzzyk.npng< 2) return 0.;if(sr->vtx.elastic.fuzzyk.png[1].len< 1e-10) return-5.;return(double)(sr->vtx.elastic.fuzzyk.png[1].calE/sr->vtx.elastic.fuzzyk.png[1].len);})
const Var kLeptonAngle([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-5.;if(sr->vtx.elastic.fuzzyk.png.size()==0) return-5.;return(double) acos(sr->vtx.elastic.fuzzyk.png[0].dir.z)*180./M_PI;})
const Var kNumuHadVisEFrac([](const caf::SRProxy *sr){if(sr->slc.calE==0) return-5.;return(double)(sr->energy.numu.hadcalE+sr->energy.numu.hadtrkE)/(sr->slc.calE);})
const Var kProngCVNMaxProtonDist([](const caf::SRProxy *sr){double score=-5;double dist=-5;const caf::SRVector3DProxy &vtx=sr->vtx.elastic.vtx;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){if(sr->vtx.elastic.fuzzyk.png[i].cvnpart.protonid > score){score=sr->vtx.elastic.fuzzyk.png[i].cvnpart.protonid;const caf::SRVector3DProxy &st=sr->vtx.elastic.fuzzyk.png[i].start;dist=util::pythag(vtx.X()-st.X(), vtx.Y()-st.Y(), vtx.Z()-st.Z());}}return dist;})
return distance from vertex for most proton-like prong
caf::Proxy< caf::SRNumuEnergy > numu
Proxy for caf::StandardRecord.
caf::Proxy< float > hadtrkE
caf::Proxy< caf::SREnergyBranch > energy
std::string FindCAFAnaDir()
caf::Proxy< caf::SRVector3D > boxmin
caf::Proxy< caf::SRElastic > elastic
caf::Proxy< std::vector< caf::SRFuzzyKProng > > png
float BDTCVNNue_p1Vars[4]
caf::Proxy< caf::StandardRecord > SRProxy
static TMVA::Reader * fReaderBDTCVNNue_p1
caf::Proxy< float > hadcalE
const Var kCVNFSProtonScore2018([](const caf::SRProxy *sr){return CVNFinalStateScore2018(sr, 2212);})
Proton score from CVN Final State labels, using Prod3Train CVN.
float operator()(const caf::SRProxy *sr) const
float operator()(const caf::SRProxy *sr) const
static TMVA::Reader * fReaderBDTNumu
caf::Proxy< bool > IsValid
static TMVA::Reader * fReaderBDTCVNNue_p2
const Var kProngCVNMaxProton([](const caf::SRProxy *sr){double score=-5;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.npng;++i){if(sr->vtx.elastic.fuzzyk.png[i].cvnpart.protonid > score) score=sr->vtx.elastic.fuzzyk.png[i].cvnpart.protonid;}return score;})
return CVN proton score for most proton-like prong
static TMVA::Reader * fReaderBDTCVNNumu_p2
caf::Proxy< caf::SRSlice > slc
const Var kNumuHadEFrac([](const caf::SRProxy *sr){if(sr->slc.calE==0) return-5.;return(double)(sr->energy.numu.hadcalE)/(sr->slc.calE);})
float BDTCVNNue_p2Vars[6]
caf::Proxy< caf::SRVector3D > meanpos
static TMVA::Reader * fReaderBDTCVNNumu_p1
float operator()(const caf::SRProxy *sr) const
const Var kStretch([](const caf::SRProxy *sr){if(sr->slc.meanpos.z==sr->slc.boxmin.z) return-5.;return(double)((sr->slc.boxmax.z-sr->slc.meanpos.z)/(sr->slc.meanpos.z-sr->slc.boxmin.z));})
const Var kSecShwGap([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return-5.;if(sr->vtx.elastic.fuzzyk.nshwlid< 1) return-5.;if(sr->vtx.elastic.fuzzyk.nshwlid< 2) return(double) sr->vtx.elastic.fuzzyk.png[0].shwlid.gap;return double(sr->vtx.elastic.fuzzyk.png[1].shwlid.gap);})
This module creates Common Analysis Files.
caf::Proxy< caf::SRVertexBranch > vtx
static TMVA::Reader * fReaderBDTNue
float BDTCVNNumu_p1Vars[4]
caf::Proxy< caf::SRVector3D > boxmax
float BDTCVNNumu_p2Vars[6]