Skip to content

Commit 55812bc

Browse files
committed
move more params to fcl, address Giuseppe's comments
1 parent 612ae6a commit 55812bc

4 files changed

Lines changed: 38 additions & 31 deletions

File tree

sbncode/CAFMaker/CAFMakerParams.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,12 @@ namespace caf
374374
false
375375
};
376376

377+
Atom<float> NuGraphFilterCut {
378+
Name("NuGraphFilterCut"),
379+
Comment("Cut on the NuGraph2 filter score to define hit as signal or noise."),
380+
0.5
381+
};
382+
377383
Atom<float> NuGraphHIPTagWireDist {
378384
Name("NuGraphHIPTagWireDist"),
379385
Comment("TPC wire distance from the vertex used to count NuGraph2–tagged HIP hits."),

sbncode/CAFMaker/CAFMaker_module.cc

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,14 +1722,17 @@ void CAFMaker::produce(art::Event& evt) noexcept {
17221722
std::vector<unsigned> slice_tag_indices;
17231723
for (unsigned i_tag = 0; i_tag < pandora_tag_suffixes.size(); i_tag++) {
17241724
const std::string &pandora_tag_suffix = pandora_tag_suffixes[i_tag];
1725+
17251726
// Get a handle on the slices
17261727
art::Handle<std::vector<recob::Slice>> thisSlices;
17271728
GetByLabelStrict(evt, fParams.PFParticleLabel() + pandora_tag_suffix, thisSlices);
1729+
17281730
if (thisSlices.isValid()) {
17291731
art::fill_ptr_vector(slices, thisSlices);
1730-
nuGraphSlices = evt.getProduct<std::vector<art::Ptr<recob::Slice>>>(fParams.NuGraphSlicesLabel().label() + pandora_tag_suffix);
17311732
if (fParams.UsePandoraAfterNuGraph()) {
17321733
nuGraphSlices = slices;
1734+
} else {
1735+
nuGraphSlices = evt.getProduct<std::vector<art::Ptr<recob::Slice>>>(fParams.NuGraphSlicesLabel().label() + pandora_tag_suffix);
17331736
}
17341737
for (unsigned i = 0; i < thisSlices->size(); i++) {
17351738
slice_tag_suffixes.push_back(pandora_tag_suffix);
@@ -2090,24 +2093,16 @@ void CAFMaker::produce(art::Event& evt) noexcept {
20902093

20912094
// filter
20922095
if (findOneFilter.isValid()) {
2096+
ng2_filter_vec.reserve(slcHits.size());
20932097
for (size_t hitIdx = 0; hitIdx < slcHits.size(); ++hitIdx) {
2094-
if (findOneFilter.at(hitIdx).isNull()) {
2095-
slcHits.erase(slcHits.begin()+hitIdx);
2096-
hitIdx--;
2097-
continue;
2098-
}
20992098
ng2_filter_vec.emplace_back(findOneFilter.at(hitIdx));
21002099
}
21012100
}
21022101

21032102
// semantic tagging
21042103
if (findOneSemantic.isValid()) {
2104+
ng2_semantic_vec.reserve(slcHits.size());
21052105
for (size_t hitIdx = 0; hitIdx < slcHits.size(); ++hitIdx) {
2106-
if (findOneSemantic.at(hitIdx).isNull()) {
2107-
slcHits.erase(slcHits.begin()+hitIdx);
2108-
hitIdx--;
2109-
continue;
2110-
}
21112106
ng2_semantic_vec.emplace_back(findOneSemantic.at(hitIdx));
21122107
}
21132108
}
@@ -2129,7 +2124,7 @@ void CAFMaker::produce(art::Event& evt) noexcept {
21292124
if (ng2_filter_vec.size() > 0 || ng2_semantic_vec.size() > 0) {
21302125
FillSliceNuGraph(slcHits, ng2_filter_vec, ng2_semantic_vec, fmPFPartHits,
21312126
vtx_wire, vtx_tick, fParams.NuGraphHIPTagWireDist(), fParams.NuGraphHIPTagTickDist(),
2132-
recslc);
2127+
fParams.NuGraphFilterCut(), recslc);
21332128
}
21342129
}
21352130

@@ -2263,30 +2258,24 @@ void CAFMaker::produce(art::Event& evt) noexcept {
22632258
std::vector<art::Ptr<anab::FeatureVector<1>>> ng2_filter_vec;
22642259
std::vector<art::Ptr<anab::FeatureVector<5>>> ng2_semantic_vec;
22652260

2261+
// filter
22662262
if (findOneFilter.isValid()) {
2263+
ng2_filter_vec.reserve(PFPHits.size());
22672264
for (size_t hitIdx = 0; hitIdx < PFPHits.size(); ++hitIdx) {
2268-
if (findOneFilter.at(hitIdx).isNull()) {
2269-
PFPHits.erase(PFPHits.begin() + hitIdx);
2270-
hitIdx--;
2271-
continue;
2272-
}
22732265
ng2_filter_vec.emplace_back(findOneFilter.at(hitIdx));
22742266
}
22752267
}
22762268

2269+
// semantic tagging
22772270
if (findOneSemantic.isValid()) {
2271+
ng2_semantic_vec.reserve(PFPHits.size());
22782272
for (size_t hitIdx = 0; hitIdx < PFPHits.size(); ++hitIdx) {
2279-
if (findOneSemantic.at(hitIdx).isNull()) {
2280-
PFPHits.erase(PFPHits.begin() + hitIdx);
2281-
hitIdx--;
2282-
continue;
2283-
}
22842273
ng2_semantic_vec.emplace_back(findOneSemantic.at(hitIdx));
22852274
}
22862275
}
22872276

22882277
if (ng2_filter_vec.size() > 0 || ng2_semantic_vec.size() > 0) {
2289-
FillPFPNuGraph(PFPHits, ng2_filter_vec, ng2_semantic_vec, pfp);
2278+
FillPFPNuGraph(PFPHits, ng2_filter_vec, ng2_semantic_vec, fParams.NuGraphFilterCut(), pfp);
22902279
}
22912280
}
22922281

sbncode/CAFMaker/FillReco.cxx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212

1313
namespace caf
1414
{
15-
const float ng_filter_cut = 0.5;
16-
1715
//......................................................................
1816
bool SelectSlice(const caf::SRSlice &slice, bool cut_clear_cosmic) {
1917
return (!slice.is_clear_cosmic || !cut_clear_cosmic) // No clear cosmics
@@ -588,6 +586,7 @@ namespace caf
588586
const float vtx_tick[3],
589587
const float vtx_wire_dist,
590588
const float vtx_tick_dist,
589+
const float filter_cut,
591590
caf::SRSlice &slice)
592591
{
593592

@@ -596,9 +595,10 @@ namespace caf
596595
unsigned int npass = 0;
597596

598597
for ( unsigned int i = 0; i < nHits; i++ ) {
599-
if (ngFilterResult.at(i)->at(0)>=ng_filter_cut) npass++;
598+
if (ngFilterResult.at(i).isNull()) continue;
599+
if (ngFilterResult.at(i)->at(0) >= filter_cut) npass++;
600600
}
601-
slice.ng_filt_pass_frac = float(npass)/nHits;
601+
slice.ng_filt_pass_frac = (nHits > 0) ? float(npass) / nHits : 0.f;
602602

603603
// look-up between hits and PFPs
604604
std::set<art::Ptr<recob::Hit>> pfpHitSet;
@@ -619,6 +619,8 @@ namespace caf
619619
const recob::Hit& hit = *inputHits.at(i);
620620
if (hit.WireID().Plane != plane) continue;
621621

622+
if (ngSemanticResult.at(i).isNull()) continue;
623+
622624
auto const& sem = *ngSemanticResult.at(i);
623625
std::vector<float> semVec;
624626
for (size_t k = 0; k < sem.size(); ++k) semVec.push_back(sem.at(k));
@@ -1081,24 +1083,31 @@ namespace caf
10811083
void FillPFPNuGraph(const std::vector<art::Ptr<recob::Hit>> &pfpHits,
10821084
const std::vector<art::Ptr<anab::FeatureVector<1>>> &ngFilterResult,
10831085
const std::vector<art::Ptr<anab::FeatureVector<5>>> &ngSemanticResult,
1086+
const float filter_cut,
10841087
caf::SRPFP& srpfp,
10851088
bool allowEmpty)
10861089
{
1087-
if (pfpHits.size()>0) {
1088-
std::vector<float> ng2sempfpcounts(5,0);
1090+
if (pfpHits.size() > 0) {
1091+
std::vector<float> ng2sempfpcounts(5, 0);
10891092
size_t ng2bkgpfpcount = 0;
1093+
10901094
for (size_t pos = 0; pos < pfpHits.size(); pos++) {
1095+
1096+
if (ngFilterResult.at(pos).isNull()) continue;
1097+
10911098
auto const& bkgscore = ngFilterResult.at(pos);
1092-
if (bkgscore->at(0)<ng_filter_cut) {
1099+
if (bkgscore->at(0) < filter_cut) {
10931100
ng2bkgpfpcount++;
10941101
} else {
1102+
if (ngSemanticResult.at(pos).isNull()) continue;
10951103
auto const& scores = ngSemanticResult.at(pos);
10961104
std::vector<float> ng2semscores;
10971105
for (size_t i=0;i<scores->size();i++) ng2semscores.push_back(scores->at(i));
10981106
size_t sem_label = std::distance(ng2semscores.begin(), std::max_element(ng2semscores.begin(), ng2semscores.end()));//arg_max(ng2semscores);
10991107
ng2sempfpcounts[sem_label]++;
11001108
}
11011109
}
1110+
11021111
srpfp.ngscore.sem_cat = SRNuGraphScore::NuGraphCategory(std::distance(ng2sempfpcounts.begin(), std::max_element(ng2sempfpcounts.begin(), ng2sempfpcounts.end())));//arg_max(ng2sempfpcounts);
11031112
size_t nonBkgHits = (pfpHits.size() > ng2bkgpfpcount ? pfpHits.size()-ng2bkgpfpcount : 0);
11041113
srpfp.ngscore.mip_frac = (nonBkgHits>0 ? float(ng2sempfpcounts[0])/nonBkgHits : -1.);
@@ -1116,7 +1125,6 @@ namespace caf
11161125
srpfp.ngscore.dif_frac = -1.;
11171126
srpfp.ngscore.bkg_frac = -1.;
11181127
}
1119-
11201128
}
11211129

11221130
void FillHitVars(const recob::Hit& hit,

sbncode/CAFMaker/FillReco.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ namespace caf
116116
* @param vtx_tick vertex coordinates projected onto ticks, per plane
117117
* @param vtx_wire_dist TPC wire distance from the vertex used to count NuGraph2–tagged HIP hits
118118
* @param vtx_tick_dist TPC tick distance from the vertex used to count NuGraph2–tagged HIP hits
119+
* @param filter_cut cut on the NuGraph2 filter score to define hit as signal or noise
119120
* @param[out] slice the destination slice object
120121
*
121122
* Hits with filter value (`ngFilterResult`) lower than `ng_filter_cut` are counted as background.
@@ -128,6 +129,7 @@ namespace caf
128129
const float vtx_tick[3],
129130
const float vtx_wire_dist,
130131
const float vtx_tick_dist,
132+
const float filter_cut,
131133
caf::SRSlice &slice);
132134

133135
bool SelectSlice(const caf::SRSlice &slice, bool cut_clear_cosmic);
@@ -161,6 +163,7 @@ namespace caf
161163
* @param sliceHitsMap maps position of hits in collection input to NuGraph (slice only) to the one input to Pandora (all gaus hits)
162164
* @param ngFilterResult NuGraph filter result, for each hit
163165
* @param ngSemanticResult NuGraph semnatic result, for each hit (MIP track, HIP, shower, Michel electron, diffuse activity)
166+
* @param filter_cut cut on the NuGraph2 filter score to define hit as signal or noise
164167
* @param pfpHits Vector of hits associated to the PFParticle
165168
* @param[out] srpfp the destination PFParticle object
166169
*
@@ -169,6 +172,7 @@ namespace caf
169172
void FillPFPNuGraph(const std::vector<art::Ptr<recob::Hit>> &pfpHits,
170173
const std::vector<art::Ptr<anab::FeatureVector<1>>> &ngFilterResult,
171174
const std::vector<art::Ptr<anab::FeatureVector<5>>> &ngSemanticResult,
175+
const float filter_cut,
172176
caf::SRPFP& srpfp,
173177
bool allowEmpty= false);
174178

0 commit comments

Comments
 (0)