37 std::string sFD_ND = ( IsFarDet ==
true ?
"FD" :
"ND" );
44 fname =
"prod_caf_R17-11-14-prod4reco.d_fd_genie_nonswap_fhc_nova_v08_full_v1";
48 fname =
"prod_caf_R17-11-14-prod4reco.d_nd_genie_nonswap_fhc_nova_v08_full_v1";
54 fname =
"prod_caf_R17-11-14-prod4reco.e_fd_genie_nonswap_rhc_nova_v08_full_v1";
58 fname =
"prod_caf_R17-11-14-prod4reco.e_nd_genie_nonswap_rhc_nova_v08_full_v1";
70 std::string sOutFile =
"SpectrumFiles_"+sFD_ND+
"_"+sFHC_RHC+
".root";
73 const std::vector<Cut> GENIECuts = {
kNoCut };
74 const std::vector<std::string>
GENIEStr = {
"All" };
77 const unsigned int NumGENIE = GENIECuts.size();
80 std::vector<std::string>
CutNames; std::vector<Cut> kDetCuts;
87 CutNames.push_back(
"FD_nue2018full"); kDetCuts.push_back(
kNue2018FD );
94 CutNames.push_back(
"ND_nue2018full"); kDetCuts.push_back(
kNue2018NDCVNSsb );
96 unsigned int nDetCuts = kDetCuts.size();
99 std::string fdspecfile =
"/pnfs/nova/persistent/analysis/numu/Ana2018/provisional/quantiles/quantiles__" + sFHC_RHC +
"_full__numu2018.root";
102 TH2 *FDSpec2D = (TH2*)inFile->FindObjectAny(
"FDSpec2D" );
104 const int NHadEFracQuantiles = 4;
107 HadEFracQuantCuts.push_back(
kNoCut );
108 std::vector<std::string>
QuantNames = {
"Quant1",
"Quant2",
"Quant3",
"Quant4",
"AllQuant" };
109 const unsigned int nQuants = QuantNames.size();
112 const unsigned int NumEBins = 100;
113 const Binning LepBins = Binning::Simple(500, 0., 5.);
114 const Binning HadBins = Binning::Simple(100, 0., 1.);
115 const Binning FracBins = Binning::Simple(100, 0., 1.);
116 const Binning EpHBins = Binning::Simple(50, 0., 100.);
117 const Binning CVNBins = Binning::Simple(20, 0., 1.);
119 static const double MassNeut = 0.939565;
120 static const double MassProt = 0.938272;
125 if (sr->
mc.
nnu == 0)
return -5.;
126 if (sr->
mc.
nu[0].E<=0)
return -5.;
129 ThisEn = sr->
mc.
nu[0].E;
137 if (sr->
mc.
nnu == 0)
return -5.;
138 if (sr->
mc.
nu[0].E<=0)
return -5.;
140 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
142 if(sr->
mc.
nu[0].prim[PrimL].p.E<0.0)
continue;
144 if (sr->
mc.
nu[0].prim[PrimL].pdg == 2112) E = sr->
mc.
nu[0].prim[PrimL].p.E -
MassNeut;
145 else if (sr->
mc.
nu[0].prim[PrimL].pdg == 2212) E = sr->
mc.
nu[0].prim[PrimL].p.E -
MassProt;
146 else E = sr->
mc.
nu[0].prim[PrimL].p.E;
156 if (sr->
mc.
nnu == 0)
return -5.;
157 if (sr->
mc.
nu[0].E<=0)
return -5.;
159 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
161 if(sr->
mc.
nu[0].prim[PrimL].p.E<0.0)
continue;
163 if (sr->
mc.
nu[0].prim[PrimL].pdg == 2112) E = 1.2*(sr->
mc.
nu[0].prim[PrimL].p.E -
MassNeut);
164 else if (sr->
mc.
nu[0].prim[PrimL].pdg == 2212) E = sr->
mc.
nu[0].prim[PrimL].p.E -
MassProt;
165 else E = sr->
mc.
nu[0].prim[PrimL].p.E;
175 if (sr->
mc.
nnu == 0)
return -5.;
176 if (sr->
mc.
nu[0].E<=0)
return -5.;
179 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
181 if(sr->
mc.
nu[0].prim[PrimL].p.E<0.0)
continue;
183 if (sr->
mc.
nu[0].prim[PrimL].pdg == 2112) E = 0.8*(sr->
mc.
nu[0].prim[PrimL].p.E -
MassNeut);
184 else if (sr->
mc.
nu[0].prim[PrimL].pdg == 2212) E = sr->
mc.
nu[0].prim[PrimL].p.E -
MassProt;
185 else E = sr->
mc.
nu[0].prim[PrimL].p.E;
193 if (sr->
mc.
nnu == 0)
return -5.;
194 return double(sr->
mc.
nu[0].nneutron);
200 std::vector<double>
E;
201 if (sr->
mc.
nnu == 0)
return E;
202 if (sr->
mc.
nu[0].E<=0)
return E;
204 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
205 if (sr->
mc.
nu[0].prim[PrimL].pdg != 2112)
continue;
206 E.push_back(sr->
mc.
nu[0].prim[PrimL].p.E - MassNeut);
214 std::vector<double>
E;
215 if (sr->
mc.
nnu == 0)
return E;
216 if (sr->
mc.
nu[0].E<=0)
return E;
218 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
219 if (sr->
mc.
nu[0].prim[PrimL].pdg != 2112)
continue;
220 E.push_back((sr->
mc.
nu[0].prim[PrimL].p.E - MassNeut)/sr->
mc.
nu[0].E);
228 std::vector<double>
E;
234 if (png.truth.motherpdg != 2112) continue;
235 E.push_back(png.calE);
242 std::vector<double> EperH;
247 if (png.truth.motherpdg != 2112) continue;
248 EperH.push_back((png.calE*1000)/double(png.nhit));
256 std::vector<double>
E;
261 if (png.truth.motherpdg != 2112) continue;
262 E.push_back(png.calE);
266 if (png.truth.motherpdg != 2112) continue;
267 E.push_back(png.calE);
276 std::vector<double> EperH;
282 if (png.truth.motherpdg != 2112) continue;
283 EperH.push_back((png.calE*1000)/double(png.nhit));
287 if (png.truth.motherpdg != 2112) continue;
288 EperH.push_back((png.calE*1000)/double(png.nhit));
297 std::vector<double>
E;
303 if (png.truth.motherpdg != 2112) continue;
304 E.push_back(png.weightedCalE);
312 std::vector<double> EperH;
318 if (png.truth.motherpdg != 2112) continue;
319 EperH.push_back((png.weightedCalE*1000)/double(png.nhit));
328 std::vector<double>
E;
333 if (png.truth.motherpdg != 2112) continue;
334 E.push_back(png.weightedCalE);
338 if (png.truth.motherpdg != 2112) continue;
339 E.push_back(png.weightedCalE);
348 std::vector<double> EperH;
353 if (png.truth.motherpdg != 2112) continue;
354 EperH.push_back((png.weightedCalE*1000)/double(png.nhit));
358 if (png.truth.motherpdg != 2112) continue;
359 EperH.push_back((png.weightedCalE*1000)/double(png.nhit));
370 std::vector<double>
id;
371 if (sr->
mc.
nnu == 0)
return id;
372 if (sr->
mc.
nu[0].E<=0)
return id;
374 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
375 if (sr->
mc.
nu[0].prim[PrimL].pdg != 2112)
continue;
384 std::vector<double>
id;
386 if (sr->
mc.
nnu == 0)
return id;
387 if (sr->
mc.
nu[0].E<=0)
return id;
389 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
390 if (sr->
mc.
nu[0].prim[PrimL].pdg != 2112)
continue;
391 id.push_back(sr->
sel.cvnProd3Train.nueid);
399 std::vector<double>
id;
401 if (sr->
mc.
nnu == 0)
return id;
402 if (sr->
mc.
nu[0].E<=0)
return id;
404 for (
unsigned int PrimL=0; PrimL < sr->
mc.
nu[0].prim.size(); ++PrimL) {
405 if (sr->
mc.
nu[0].prim[PrimL].pdg != 2112)
continue;
406 id.push_back(sr->
sel.cvnProd3Train.numuid);
413 Spectrum *NeutrinoE [NumGENIE][nDetCuts][nQuants];
414 Spectrum *TotPrimE [NumGENIE][nDetCuts][nQuants];
415 Spectrum *TotPrimEnKEp20 [NumGENIE][nDetCuts][nQuants];
416 Spectrum *TotPrimEnKEm20 [NumGENIE][nDetCuts][nQuants];
417 Spectrum *NeutMult [NumGENIE][nDetCuts][nQuants];
418 Spectrum *NeutEnergy [NumGENIE][nDetCuts][nQuants];
419 Spectrum *NeutEFrac [NumGENIE][nDetCuts][nQuants];
421 Spectrum *NeutPngCalE [NumGENIE][nDetCuts][nQuants];
422 Spectrum *NeutPngCalEpH [NumGENIE][nDetCuts][nQuants];
423 Spectrum *NeutPng2DCalE [NumGENIE][nDetCuts][nQuants];
424 Spectrum *NeutPng2DCalEpH [NumGENIE][nDetCuts][nQuants];
426 Spectrum *NeutPngWtCalE [NumGENIE][nDetCuts][nQuants];
427 Spectrum *NeutPngWtCalEpH [NumGENIE][nDetCuts][nQuants];
428 Spectrum *NeutPng2DWtCalE [NumGENIE][nDetCuts][nQuants];
429 Spectrum *NeutPng2DWtCalEpH[NumGENIE][nDetCuts][nQuants];
433 Spectrum *NEFvsCVNe [NumGENIE][nDetCuts][nQuants];
434 Spectrum *NEFvsCVNm [NumGENIE][nDetCuts][nQuants];
435 Spectrum *NEFvsReMId[NumGENIE][nDetCuts][nQuants];
438 for (
unsigned int gen=0; gen<NumGENIE; ++gen) {
439 for (
unsigned int det=0;
det<nDetCuts; ++
det) {
440 for (
unsigned int quant=0; quant<nQuants; ++quant) {
442 Cut GENIECut = GENIECuts[gen] && kDetCuts[
det] && HadEFracQuantCuts[quant];
443 std::string MyStr =
" for GENIE Int. "+GENIEStr[gen]+
", Cut "+CutNames[
det]+
", "+QuantNames[quant];
447 TotPrimE[gen][
det][quant] =
new Spectrum(
"Total primE (GeV)" + MyStr, LepBins,
loader, kTotPrimE, GENIECut,
kNoShift, weight);
448 TotPrimEnKEp20[gen][
det][quant] =
new Spectrum(
"Total primE (GeV), n KE +20%"+ MyStr, LepBins,
loader, kTotPrimEnKEp20, GENIECut,
kNoShift, weight);
449 TotPrimEnKEm20[gen][
det][quant] =
new Spectrum(
"Total primE (GeV), n KE +20%"+ MyStr, LepBins,
loader, kTotPrimEnKEm20, GENIECut,
kNoShift, weight);
452 NeutEFrac [gen][
det][quant] =
new Spectrum(
"True Neutron KE / True Neutrino E" +MyStr, FracBins,
loader, kNeutronEF, GENIECut,
kNoShift, weight);
453 NeutPngCalE [gen][
det][quant] =
new Spectrum(
"Neutron Prong calE"+MyStr, HadBins,
loader, kNeutronProngCalE, GENIECut,
kNoShift, weight);
454 NeutPngCalEpH [gen][
det][quant] =
new Spectrum(
"Neutron Prong calE per hit"+MyStr, EpHBins,
loader, kNeutronProngCalEperHit, GENIECut,
kNoShift, weight);
455 NeutPng2DCalE [gen][
det][quant] =
new Spectrum(
"Neutron Prong (inc. 2d) calE" +MyStr, HadBins,
loader, kNeutronProng2dCalE, GENIECut,
kNoShift, weight);
456 NeutPng2DCalEpH [gen][
det][quant] =
new Spectrum(
"Neutron Prong (inc. 2d) calE per hit" +MyStr, EpHBins,
loader, kNeutronProng2dCalEperHit, GENIECut,
kNoShift, weight);
457 NeutPngWtCalE [gen][
det][quant] =
new Spectrum(
"Neutron Prong weighted calE"+MyStr, HadBins,
loader, kNeutronProngWtCalE, GENIECut,
kNoShift, weight);
458 NeutPngWtCalEpH [gen][
det][quant] =
new Spectrum(
"Neutron Prong weighted calE per hit" +MyStr, EpHBins,
loader, kNeutronProngWtCalEperHit, GENIECut,
kNoShift, weight);
459 NeutPng2DWtCalE [gen][
det][quant] =
new Spectrum(
"Neutron Prong (inc. 2d) weighted calE"+MyStr, HadBins,
loader, kNeutronProngWt2dCalE, GENIECut,
kNoShift, weight);
460 NeutPng2DWtCalEpH [gen][
det][quant] =
new Spectrum(
"Neutron Prong (inc. 2d) weighted calE per hit"+MyStr, HadBins,
loader, kNeutronProngWt2dCalEperHit, GENIECut,
kNoShift, weight);
461 NEFvsCVNe [gen][
det][quant] =
new Spectrum(
"Neutron KE/nu E vs. CVNe"+MyStr,
loader, CVNBins, kCVNeid, FracBins, kNeutronEF, GENIECut,
kNoShift, weight);
462 NEFvsCVNm [gen][
det][quant] =
new Spectrum(
"Neutron KE/nu E vs. CVNm"+MyStr,
loader, CVNBins, kCVNmid, FracBins, kNeutronEF, GENIECut,
kNoShift, weight);
473 TFile *
OutFile =
new TFile(sOutFile.c_str(),
"RECREATE");
476 for (
unsigned int gen=0; gen<NumGENIE; ++gen) {
477 for (
unsigned int det=0;
det<nDetCuts; ++
det) {
478 for (
unsigned int quant=0; quant<nQuants; ++quant) {
479 std::string MyStr = GENIEStr[gen]+
"_"+CutNames[
det]+
"_"+QuantNames[quant];;
482 NeutrinoE [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutrinoE_") + TString(MyStr) ) ;
483 TotPrimE [gen][
det][quant] ->
SaveTo( OutFile, TString(
"TotPrimE_") + TString(MyStr) ) ;
484 TotPrimEnKEp20 [gen][
det][quant] ->
SaveTo( OutFile, TString(
"TotPrimEnKEp20_") + TString(MyStr) ) ;
485 TotPrimEnKEm20 [gen][
det][quant] ->
SaveTo( OutFile, TString(
"TotPrimEnKEm20_") + TString(MyStr) ) ;
486 NeutMult [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutMult") + TString(MyStr) ) ;
487 NeutEnergy [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutEnergy") + TString(MyStr) ) ;
488 NeutEFrac [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutEFrac") + TString(MyStr) ) ;
489 NeutPngCalE [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPngCalE") + TString(MyStr) ) ;
490 NeutPngCalEpH [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPngCalEpH") + TString(MyStr) ) ;
491 NeutPng2DCalE [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPng2DCalE") + TString(MyStr) ) ;
492 NeutPng2DCalEpH [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPng2DCalEpH") + TString(MyStr) ) ;
493 NeutPngWtCalE [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPngWtCalE") + TString(MyStr) ) ;
494 NeutPngWtCalEpH [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPngWtCalEpH") + TString(MyStr) ) ;
495 NeutPng2DWtCalE [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPng2DWtCalE") + TString(MyStr) ) ;
496 NeutPng2DWtCalEpH [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NeutPng2DWtCalEpH") + TString(MyStr) ) ;
498 NEFvsCVNe [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NEFvsCVNe_") + TString(MyStr) ) ;
499 NEFvsCVNm [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NEFvsCVNm_") + TString(MyStr) ) ;
500 NEFvsReMId [gen][
det][quant] ->
SaveTo( OutFile, TString(
"NEFvsReMId_")+ TString(MyStr) ) ;
::xsd::cxx::tree::id< char, ncname > id
caf::Proxy< size_t > npng
caf::Proxy< caf::SRFuzzyK > fuzzyk
Represent the binning of a Spectrum's x-axis.
void SaveTo(const osc::IOscCalc &x, TDirectory *dir, const std::string &name)
const Binning kRemidBinning
Binning for plotting remid attractively.
caf::Proxy< std::vector< caf::SRProng > > png2d
const Cut kNumuContainND2017([](const caf::SRProxy *sr){if(!sr->vtx.elastic.IsValid) return false;for(unsigned int i=0;i< sr->vtx.elastic.fuzzyk.nshwlid;++i){TVector3 start=sr->vtx.elastic.fuzzyk.png[i].shwlid.start;TVector3 stop=sr->vtx.elastic.fuzzyk.png[i].shwlid.stop;if(std::min(start.X(), stop.X())< -180.0) return false;if(std::max(start.X(), stop.X()) > 180.0) return false;if(std::min(start.Y(), stop.Y())< -180.0) return false;if(std::max(start.Y(), stop.Y()) > 180.0) return false;if(std::min(start.Z(), stop.Z())< 20.0) return false;if(std::max(start.Z(), stop.Z()) > 1525.0) return false;}if(sr->trk.kalman.ntracks< 1) return false;for(unsigned int i=0;i< sr->trk.kalman.ntracks;++i){if(i==sr->trk.kalman.idxremid) continue;else if(sr->trk.kalman.tracks[i].start.Z() > 1275||sr->trk.kalman.tracks[i].stop.Z() > 1275) return false;}return(sr->trk.kalman.ntracks > sr->trk.kalman.idxremid &&sr->slc.firstplane > 1
&&sr->slc.lastplane< 212 &&sr->trk.kalman.tracks[0].start.Z()< 1100
&&(sr->trk.kalman.tracks[0].stop.Z()< 1275 ||sr->sel.contain.kalyposattrans< 55) &&sr->sel.contain.kalfwdcellnd > 5 &&sr->sel.contain.kalbakcellnd > 10);})
Simple record of shifts applied to systematic parameters.
Proxy for caf::StandardRecord.
caf::Proxy< std::vector< caf::SRNeutrino > > nu
const Var kReMId([](const caf::SRProxy *sr){return sr->sel.remid.pid;})
const Cut kNue2018NDCVNSsb
const HistAxis kHadEFracAxis("E_{had.} / E_{#nu}", Binning::Simple(200, 0, 1), kHadEFrac)
HistAxis that implements Hadronic Energy fraction binning used by L.Vinton to derive Hadronic Energy ...
caf::Proxy< short int > nnu
std::string pnfs2xrootd(std::string loc, bool unauth)
Representation of a spectrum in any variable, with associated POT.
caf::Proxy< caf::SRElastic > elastic
const Cut kNumuCosmicRej2018([](const caf::SRProxy *sr){return(sr->sel.cosrej.anglekal > 0.5 && sr->sel.cosrej.numucontpid2019 > 0.53 && sr->slc.nhit< 400 && sr->sel.nuecosrej.pngptp< 0.9 );})
caf::Proxy< std::vector< caf::SRFuzzyKProng > > png
const Cut kNumuContainFD2017
const SpillCut kStandardDQCuts([](const caf::SRSpillProxy *spill){if(spill->dcmedgematchfrac==0 &&spill->fracdcm3hits==0 &&spill->nmissingdcmslg==0) return bool(spill->isgoodspill); if(spill->det==caf::kNEARDET && (spill->fracdcm3hits > 0.45|| spill->nmissingdcms > 0)) return false; if(spill->eventincomplete) return false; if(spill->det==caf::kFARDET && spill->nmissingdcmslg > 0) return false; if(spill->det==caf::kFARDET && !spill->ismc && spill->dcmedgematchfrac<=0.2) return false;return true;})
Cut out events with a noisy detector or with parts missing.
static const float MassProt
caf::Proxy< caf::SRRemid > remid
const std::string QuantNames[NumQuant]
const Var kNNeutrons([](const caf::SRProxy *sr){float NPar=0.;if(DEBUGGING){std::cout<< "\nLooking at event "<< sr->hdr.evt<< ", there are "<< sr->mc.nu.size()<< ", the 0th neutrino is a "<< sr->mc.nu[0].pdg<< ", with Energy "<< sr->mc.nu[0].E<< ". There were a total of "<< sr->mc.nu[0].prim.size()<< " other primaries associated with that neutrino, "<< sr->mc.nu[0].nneutron<< " were neutrons."<< std::endl;if(kIsDytmanMEC(sr)) std::cout<< " The neutrino was a MEC"<< std::endl;else if(kIsDIS(sr)) std::cout<< " The neutrino was a DIS"<< std::endl;else if(kIsRes(sr)) std::cout<< " The neutrino was a Resonance"<< std::endl;else if(kIsCoh(sr)) std::cout<< " The neutrino was a Coherent"<< std::endl;float TotEn=0.0;for(unsigned int PrimL=0;PrimL< sr->mc.nu[0].prim.size();++PrimL){std::cout<< "\t\tLooking at Prim "<< PrimL<< " of "<< sr->mc.nu[0].prim.size()<< ", it was a "<< sr->mc.nu[0].prim[PrimL].pdg<< ", VisE "<< sr->mc.nu[0].prim[PrimL].visE<< ", VisEInslc "<< sr->mc.nu[0].prim[PrimL].visEinslc<< ", E0 "<< sr->mc.nu[0].prim[PrimL].p.E<< ", enteringE "<< sr->mc.nu[0].prim[PrimL].enteringE<< ", totEscE "<< sr->mc.nu[0].prim[PrimL].totEscE<< std::endl;TotEn+=sr->mc.nu[0].prim[PrimL].totEscE;}std::cout<< "\tThe total uncontained energy was "<< TotEn<< std::endl;NPar=sr->mc.nu[0].nneutron;}return NPar;})
std::vector< float > Spectrum
const HistAxis kNumuCCOptimisedAxis("Reconstructed Neutrino Energy (GeV)", kNumuCCEOptimisedBinning, kCCE)
HistAxis that implements optimised numuCCE from L. Vinton. See docdb 16332. This was close to 'custC'...
const SystShifts kNoShift
caf::Proxy< caf::SRTruthBranch > mc
caf::Proxy< bool > IsValid
Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.
const Cut kNumuPID2018([](const caf::SRProxy *sr){std::cout<< "ERROR::kNumuPID2018, cutting on both cvnProd3Train and cvn2017."<< " Neither branch exists anymore. Returning False."<< std::endl;abort();return false;})
const Var kNeutronEn([](const caf::SRProxy *sr){float ThisEn=0.;ThisEn=CalcPrimE(sr, 2112, false);return ThisEn;})
static const float MassNeut
const std::vector< std::string > GENIEStr
std::vector< Cut > QuantileCutsFromTH2(TH2 *quantileHist, const HistAxis &independentAxis, const HistAxis &quantileAxis, const unsigned int &numQuantiles, const bool verbose)
: Do the same as the QuantileCuts function but taking in the TH2 instead of making it...
const Var kNeutrinoEn([](const caf::SRProxy *sr){float ThisEn=0.;ThisEn=sr->mc.nu[0].E;return ThisEn;})
caf::Proxy< caf::SRIDBranch > sel
caf::Proxy< caf::SRVertexBranch > vtx
std::vector< std::string > CutNames