LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
nnet::EmTrackClusterId Class Reference
Inheritance diagram for nnet::EmTrackClusterId:
art::EDProducer art::detail::Producer art::detail::LegacyModule art::Modifier art::ModuleBase art::ProductRegistryHelper

Classes

struct  Config
 

Public Types

typedef std::unordered_map< unsigned int, std::vector< size_t > > view_keymap
 
typedef std::unordered_map< unsigned int, view_keymaptpc_view_keymap
 
typedef std::unordered_map< unsigned int, tpc_view_keymapcryo_tpc_view_keymap
 
using Parameters = art::EDProducer::Table< Config >
 
using ModuleType = EDProducer
 
template<typename UserConfig , typename KeysToIgnore = void>
using Table = Modifier::Table< UserConfig, KeysToIgnore >
 

Public Member Functions

 EmTrackClusterId (Parameters const &p)
 
 EmTrackClusterId (EmTrackClusterId const &)=delete
 
 EmTrackClusterId (EmTrackClusterId &&)=delete
 
EmTrackClusterIdoperator= (EmTrackClusterId const &)=delete
 
EmTrackClusterIdoperator= (EmTrackClusterId &&)=delete
 
void doBeginJob (SharedResources const &resources)
 
void doEndJob ()
 
void doRespondToOpenInputFile (FileBlock const &fb)
 
void doRespondToCloseInputFile (FileBlock const &fb)
 
void doRespondToOpenOutputFiles (FileBlock const &fb)
 
void doRespondToCloseOutputFiles (FileBlock const &fb)
 
bool doBeginRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doEndRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doBeginSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEndSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEvent (EventPrincipal &ep, ModuleContext const &mc, std::atomic< std::size_t > &counts_run, std::atomic< std::size_t > &counts_passed, std::atomic< std::size_t > &counts_failed)
 
void fillProductDescriptions ()
 
void registerProducts (ProductDescriptions &productsToRegister)
 
ModuleDescription const & moduleDescription () const
 
void setModuleDescription (ModuleDescription const &)
 
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables () const
 
void sortConsumables (std::string const &current_process_name)
 
std::unique_ptr< Worker > makeWorker (WorkerParams const &wp)
 
template<typename T , BranchType BT>
ViewToken< T > consumesView (InputTag const &tag)
 
template<typename T , BranchType BT>
ViewToken< T > mayConsumeView (InputTag const &tag)
 

Protected Member Functions

ConsumesCollector & consumesCollector ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 

Private Member Functions

void produce (art::Event &e) override
 
bool isViewSelected (int view) const
 

Private Attributes

size_t fBatchSize
 
PointIdAlg fPointIdAlg
 
anab::MVAWriter< 3 > fMVAWriter
 
art::InputTag fWireProducerLabel
 
art::InputTag fHitModuleLabel
 
art::InputTag fClusterModuleLabel
 
art::InputTag fTrackModuleLabel
 
bool fDoClusters
 
bool fDoTracks
 
std::vector< int > fViews
 
art::InputTag fNewClustersTag
 

Detailed Description

Definition at line 57 of file EmTrackClusterId3out_module.cc.

Member Typedef Documentation

typedef std::unordered_map<unsigned int, tpc_view_keymap> nnet::EmTrackClusterId::cryo_tpc_view_keymap

Definition at line 62 of file EmTrackClusterId3out_module.cc.

Definition at line 17 of file EDProducer.h.

template<typename UserConfig , typename KeysToIgnore = void>
using art::detail::Producer::Table = Modifier::Table<UserConfig, KeysToIgnore>
inherited

Definition at line 26 of file Producer.h.

typedef std::unordered_map<unsigned int, view_keymap> nnet::EmTrackClusterId::tpc_view_keymap

Definition at line 61 of file EmTrackClusterId3out_module.cc.

typedef std::unordered_map<unsigned int, std::vector<size_t> > nnet::EmTrackClusterId::view_keymap

Definition at line 60 of file EmTrackClusterId3out_module.cc.

Constructor & Destructor Documentation

nnet::EmTrackClusterId::EmTrackClusterId ( EmTrackClusterId::Parameters const &  config)
explicit

Definition at line 122 of file EmTrackClusterId3out_module.cc.

References fBatchSize, fClusterModuleLabel, fDoClusters, fDoTracks, fHitModuleLabel, fMVAWriter, fNewClustersTag, fPointIdAlg, fTrackModuleLabel, fViews, fWireProducerLabel, art::InputTag::label(), anab::FVectorWriter< N >::produces_using(), and art::ProductRegistryHelper::producesCollector().

123  : EDProducer{config}
124  , fBatchSize(config().BatchSize())
125  , fPointIdAlg(config().PointIdAlg())
126  , fMVAWriter(producesCollector(), "emtrack")
127  , fWireProducerLabel(config().WireLabel())
128  , fHitModuleLabel(config().HitModuleLabel())
129  , fClusterModuleLabel(config().ClusterModuleLabel())
130  , fTrackModuleLabel(config().TrackModuleLabel())
131  , fViews(config().Views())
132  ,
133 
134  fNewClustersTag(config.get_PSet().get<std::string>("module_label"),
135  "",
137  {
139 
140  if (!fClusterModuleLabel.label().empty()) {
141  produces<std::vector<recob::Cluster>>();
142  produces<art::Assns<recob::Cluster, recob::Hit>>();
143 
145  fDoClusters = true;
146  }
147  else {
148  fDoClusters = false;
149  }
150 
151  if (!fTrackModuleLabel.label().empty()) {
153  fDoTracks = true;
154  }
155  else {
156  fDoTracks = false;
157  }
158  }
EDProducer(fhicl::ParameterSet const &pset)
Definition: EDProducer.cc:6
Set of hits with a 2D structure.
Definition: Cluster.h:69
std::string const & label() const noexcept
Definition: InputTag.cc:79
ProducesCollector & producesCollector() noexcept
2D representation of charge deposited in the TDC/wire plane
Definition: Hit.h:46
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a "fitted" track:
Definition: Track.h:49
nnet::EmTrackClusterId::EmTrackClusterId ( EmTrackClusterId const &  )
delete
nnet::EmTrackClusterId::EmTrackClusterId ( EmTrackClusterId &&  )
delete

Member Function Documentation

template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::consumes ( InputTag const &  tag)
protectedinherited

Definition at line 61 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumes().

62  {
63  return collector_.consumes<T, BT>(tag);
64  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ProductToken< T > consumes(InputTag const &)
ConsumesCollector & art::ModuleBase::consumesCollector ( )
protectedinherited

Definition at line 57 of file ModuleBase.cc.

References art::ModuleBase::collector_.

58  {
59  return collector_;
60  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::consumesMany ( )
protectedinherited

Definition at line 75 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesMany().

76  {
77  collector_.consumesMany<T, BT>();
78  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::consumesView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::consumesView ( InputTag const &  tag)
inherited

Definition at line 68 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::consumesView().

69  {
70  return collector_.consumesView<T, BT>(tag);
71  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > consumesView(InputTag const &)
void art::detail::Producer::doBeginJob ( SharedResources const &  resources)
inherited

Definition at line 22 of file Producer.cc.

References art::detail::Producer::beginJobWithFrame(), and art::detail::Producer::setupQueues().

23  {
24  setupQueues(resources);
25  ProcessingFrame const frame{ScheduleID{}};
26  beginJobWithFrame(frame);
27  }
virtual void setupQueues(SharedResources const &)=0
virtual void beginJobWithFrame(ProcessingFrame const &)=0
bool art::detail::Producer::doBeginRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 65 of file Producer.cc.

References art::detail::Producer::beginRunWithFrame(), art::RangeSet::forRun(), art::RunPrincipal::makeRun(), r, art::RunPrincipal::runID(), and art::ModuleContext::scheduleID().

66  {
67  auto r = rp.makeRun(mc, RangeSet::forRun(rp.runID()));
68  ProcessingFrame const frame{mc.scheduleID()};
69  beginRunWithFrame(r, frame);
70  r.commitProducts();
71  return true;
72  }
TRandom r
Definition: spectrum.C:23
virtual void beginRunWithFrame(Run &, ProcessingFrame const &)=0
static RangeSet forRun(RunID)
Definition: RangeSet.cc:51
bool art::detail::Producer::doBeginSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 85 of file Producer.cc.

References art::detail::Producer::beginSubRunWithFrame(), art::RangeSet::forSubRun(), art::SubRunPrincipal::makeSubRun(), art::ModuleContext::scheduleID(), and art::SubRunPrincipal::subRunID().

86  {
87  auto sr = srp.makeSubRun(mc, RangeSet::forSubRun(srp.subRunID()));
88  ProcessingFrame const frame{mc.scheduleID()};
89  beginSubRunWithFrame(sr, frame);
90  sr.commitProducts();
91  return true;
92  }
virtual void beginSubRunWithFrame(SubRun &, ProcessingFrame const &)=0
static RangeSet forSubRun(SubRunID)
Definition: RangeSet.cc:57
void art::detail::Producer::doEndJob ( )
inherited

Definition at line 30 of file Producer.cc.

References art::detail::Producer::endJobWithFrame().

31  {
32  ProcessingFrame const frame{ScheduleID{}};
33  endJobWithFrame(frame);
34  }
virtual void endJobWithFrame(ProcessingFrame const &)=0
bool art::detail::Producer::doEndRun ( RunPrincipal rp,
ModuleContext const &  mc 
)
inherited

Definition at line 75 of file Producer.cc.

References art::detail::Producer::endRunWithFrame(), art::RunPrincipal::makeRun(), r, art::ModuleContext::scheduleID(), and art::Principal::seenRanges().

76  {
77  auto r = rp.makeRun(mc, rp.seenRanges());
78  ProcessingFrame const frame{mc.scheduleID()};
79  endRunWithFrame(r, frame);
80  r.commitProducts();
81  return true;
82  }
TRandom r
Definition: spectrum.C:23
virtual void endRunWithFrame(Run &, ProcessingFrame const &)=0
bool art::detail::Producer::doEndSubRun ( SubRunPrincipal srp,
ModuleContext const &  mc 
)
inherited

Definition at line 95 of file Producer.cc.

References art::detail::Producer::endSubRunWithFrame(), art::SubRunPrincipal::makeSubRun(), art::ModuleContext::scheduleID(), and art::Principal::seenRanges().

96  {
97  auto sr = srp.makeSubRun(mc, srp.seenRanges());
98  ProcessingFrame const frame{mc.scheduleID()};
99  endSubRunWithFrame(sr, frame);
100  sr.commitProducts();
101  return true;
102  }
virtual void endSubRunWithFrame(SubRun &, ProcessingFrame const &)=0
bool art::detail::Producer::doEvent ( EventPrincipal ep,
ModuleContext const &  mc,
std::atomic< std::size_t > &  counts_run,
std::atomic< std::size_t > &  counts_passed,
std::atomic< std::size_t > &  counts_failed 
)
inherited

Definition at line 105 of file Producer.cc.

References art::detail::Producer::checkPutProducts_, e, art::EventPrincipal::makeEvent(), art::detail::Producer::produceWithFrame(), and art::ModuleContext::scheduleID().

110  {
111  auto e = ep.makeEvent(mc);
112  ++counts_run;
113  ProcessingFrame const frame{mc.scheduleID()};
114  produceWithFrame(e, frame);
115  e.commitProducts(checkPutProducts_, &expectedProducts<InEvent>());
116  ++counts_passed;
117  return true;
118  }
bool const checkPutProducts_
Definition: Producer.h:70
Float_t e
Definition: plot.C:35
virtual void produceWithFrame(Event &, ProcessingFrame const &)=0
void art::detail::Producer::doRespondToCloseInputFile ( FileBlock const &  fb)
inherited

Definition at line 44 of file Producer.cc.

References art::detail::Producer::respondToCloseInputFileWithFrame().

45  {
46  ProcessingFrame const frame{ScheduleID{}};
48  }
virtual void respondToCloseInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Producer::doRespondToCloseOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 58 of file Producer.cc.

References art::detail::Producer::respondToCloseOutputFilesWithFrame().

59  {
60  ProcessingFrame const frame{ScheduleID{}};
62  }
virtual void respondToCloseOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Producer::doRespondToOpenInputFile ( FileBlock const &  fb)
inherited

Definition at line 37 of file Producer.cc.

References art::detail::Producer::respondToOpenInputFileWithFrame().

38  {
39  ProcessingFrame const frame{ScheduleID{}};
41  }
virtual void respondToOpenInputFileWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::detail::Producer::doRespondToOpenOutputFiles ( FileBlock const &  fb)
inherited

Definition at line 51 of file Producer.cc.

References art::detail::Producer::respondToOpenOutputFilesWithFrame().

52  {
53  ProcessingFrame const frame{ScheduleID{}};
55  }
virtual void respondToOpenOutputFilesWithFrame(FileBlock const &, ProcessingFrame const &)=0
TFile fb("Li6.root")
void art::Modifier::fillProductDescriptions ( )
inherited

Definition at line 10 of file Modifier.cc.

References art::ProductRegistryHelper::fillDescriptions(), and art::ModuleBase::moduleDescription().

11  {
13  }
void fillDescriptions(ModuleDescription const &md)
ModuleDescription const & moduleDescription() const
Definition: ModuleBase.cc:13
std::array< std::vector< ProductInfo >, NumBranchTypes > const & art::ModuleBase::getConsumables ( ) const
inherited

Definition at line 43 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::getConsumables().

44  {
45  return collector_.getConsumables();
46  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables() const
bool nnet::EmTrackClusterId::isViewSelected ( int  view) const
private

Definition at line 418 of file EmTrackClusterId3out_module.cc.

References DEFINE_ART_MODULE, and fViews.

Referenced by produce().

419  {
420  if (fViews.empty())
421  return true;
422  else {
423  for (auto k : fViews)
424  if (k == view) { return true; }
425  return false;
426  }
427  }
std::unique_ptr< Worker > art::ModuleBase::makeWorker ( WorkerParams const &  wp)
inherited

Definition at line 37 of file ModuleBase.cc.

References art::ModuleBase::doMakeWorker(), and art::NumBranchTypes.

38  {
39  return doMakeWorker(wp);
40  }
virtual std::unique_ptr< Worker > doMakeWorker(WorkerParams const &wp)=0
template<typename T , BranchType BT>
ProductToken< T > art::ModuleBase::mayConsume ( InputTag const &  tag)
protectedinherited

Definition at line 82 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsume().

83  {
84  return collector_.mayConsume<T, BT>(tag);
85  }
ProductToken< T > mayConsume(InputTag const &)
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename T , BranchType BT>
void art::ModuleBase::mayConsumeMany ( )
protectedinherited

Definition at line 96 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeMany().

97  {
98  collector_.mayConsumeMany<T, BT>();
99  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::ModuleBase::mayConsumeView ( InputTag const &  )
protectedinherited
template<typename T , BranchType BT>
ViewToken<T> art::ModuleBase::mayConsumeView ( InputTag const &  tag)
inherited

Definition at line 89 of file ModuleBase.h.

References art::ModuleBase::collector_, and art::ConsumesCollector::mayConsumeView().

90  {
91  return collector_.mayConsumeView<T, BT>(tag);
92  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
ViewToken< Element > mayConsumeView(InputTag const &)
ModuleDescription const & art::ModuleBase::moduleDescription ( ) const
inherited

Definition at line 13 of file ModuleBase.cc.

References art::errors::LogicError.

Referenced by art::OutputModule::doRespondToOpenInputFile(), art::OutputModule::doWriteEvent(), art::Modifier::fillProductDescriptions(), art::OutputModule::makePlugins_(), art::OutputWorker::OutputWorker(), reco::shower::LArPandoraModularShowerCreation::produce(), art::Modifier::registerProducts(), and art::OutputModule::registerProducts().

14  {
15  if (md_.has_value()) {
16  return *md_;
17  }
18 
20  "There was an error while calling moduleDescription().\n"}
21  << "The moduleDescription() base-class member function cannot be called\n"
22  "during module construction. To determine which module is "
23  "responsible\n"
24  "for calling it, find the '<module type>:<module "
25  "label>@Construction'\n"
26  "tag in the message prefix above. Please contact artists@fnal.gov\n"
27  "for guidance.\n";
28  }
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
EmTrackClusterId& nnet::EmTrackClusterId::operator= ( EmTrackClusterId const &  )
delete
EmTrackClusterId& nnet::EmTrackClusterId::operator= ( EmTrackClusterId &&  )
delete
void nnet::EmTrackClusterId::produce ( art::Event e)
overrideprivatevirtual

Implements art::EDProducer.

Definition at line 161 of file EmTrackClusterId3out_module.cc.

References anab::MVAWriter< N >::addOutput(), util::CreateAssn(), art::EventID::event(), fBatchSize, fClusterModuleLabel, fDoClusters, fDoTracks, fHitModuleLabel, art::fill_ptr_vector(), fMVAWriter, fNewClustersTag, fPointIdAlg, fTrackModuleLabel, fWireProducerLabel, anab::MVAWriter< N >::getOutput(), art::ProductRetriever::getValidHandle(), art::Event::id(), anab::FVectorWriter< N >::initOutputs(), nnet::PointIdAlg::isInsideFiducialRegion(), isViewSelected(), nnet::PointIdAlg::outputLabels(), recob::Hit::PeakTime(), geo::WireID::planeID(), nnet::PointIdAlg::predictIdVectors(), art::PtrVector< T >::push_back(), art::Event::put(), art::Event::run(), anab::FVectorWriter< N >::saveOutputs(), anab::MVAWriter< N >::setOutput(), img::DataProviderAlg::setWireDriftData(), geo::WireID::Wire, and recob::Hit::WireID().

162  {
163  mf::LogVerbatim("EmTrackClusterId") << "next event: " << evt.run() << " / " << evt.id().event();
164 
165  auto wireHandle = evt.getValidHandle<std::vector<recob::Wire>>(fWireProducerLabel);
166 
167  unsigned int cryo, tpc, view;
168 
169  // ******************* get and sort hits ********************
170  auto hitListHandle = evt.getValidHandle<std::vector<recob::Hit>>(fHitModuleLabel);
171  std::vector<art::Ptr<recob::Hit>> hitPtrList;
172  art::fill_ptr_vector(hitPtrList, hitListHandle);
173 
175  for (auto const& h : hitPtrList) {
176  view = h->WireID().Plane;
177  if (!isViewSelected(view)) continue;
178 
179  cryo = h->WireID().Cryostat;
180  tpc = h->WireID().TPC;
181 
182  hitMap[cryo][tpc][view].push_back(h.key());
183  }
184 
185  // ********************* classify hits **********************
186  auto hitID = fMVAWriter.initOutputs<recob::Hit>(
187  fHitModuleLabel, hitPtrList.size(), fPointIdAlg.outputLabels());
188 
189  auto const clockData = art::ServiceHandle<detinfo::DetectorClocksService const>()->DataFor(evt);
190  auto const detProp =
192 
193  std::vector<char> hitInFA(
194  hitPtrList.size(),
195  0); // tag hits in fid. area as 1, use 0 for hits close to the projectrion edges
196  for (auto const& [cryo, tpcs] : hitMap) {
197  for (auto const& [tpc, views] : tpcs) {
198  for (auto const& pview : views) {
199  view = pview.first;
200  if (!isViewSelected(view)) continue; // should not happen, hits were selected
201 
202  fPointIdAlg.setWireDriftData(clockData, detProp, *wireHandle, view, tpc, cryo);
203 
204  // (1) do all hits in this plane ------------------------------------------------
205  for (size_t idx = 0; idx < pview.second.size(); idx += fBatchSize) {
206  std::vector<std::pair<unsigned int, float>> points;
207  std::vector<size_t> keys;
208  for (size_t k = 0; k < fBatchSize; ++k) {
209  if (idx + k >= pview.second.size()) { break; } // careful about the tail
210 
211  size_t h = pview.second[idx + k]; // h is the Ptr< recob::Hit >::key()
212  const recob::Hit& hit = *(hitPtrList[h]);
213  points.emplace_back(hit.WireID().Wire, hit.PeakTime());
214  keys.push_back(h);
215  }
216 
217  auto batch_out = fPointIdAlg.predictIdVectors(points);
218  if (points.size() != batch_out.size()) {
219  throw cet::exception("EmTrackClusterId") << "hits processing failed" << std::endl;
220  }
221 
222  for (size_t k = 0; k < points.size(); ++k) {
223  size_t h = keys[k];
224  fMVAWriter.setOutput(hitID, h, batch_out[k]);
225  if (fPointIdAlg.isInsideFiducialRegion(points[k].first, points[k].second)) {
226  hitInFA[h] = 1;
227  }
228  }
229  } // hits done ------------------------------------------------------------------
230  }
231  }
232  }
233 
234  // (2) do clusters when hits are ready in all planes ----------------------------------------
235  if (fDoClusters) {
236  // **************** prepare for new clusters ****************
237  auto clusters = std::make_unique<std::vector<recob::Cluster>>();
238  auto clu2hit = std::make_unique<art::Assns<recob::Cluster, recob::Hit>>();
239 
240  // ************** get and sort input clusters ***************
241  auto cluListHandle = evt.getValidHandle<std::vector<recob::Cluster>>(fClusterModuleLabel);
242  std::vector<art::Ptr<recob::Cluster>> cluPtrList;
243  art::fill_ptr_vector(cluPtrList, cluListHandle);
244 
246  for (auto const& c : cluPtrList) {
247  view = c->Plane().Plane;
248  if (!isViewSelected(view)) continue;
249 
250  cryo = c->Plane().Cryostat;
251  tpc = c->Plane().TPC;
252 
253  cluMap[cryo][tpc][view].push_back(c.key());
254  }
255 
256  auto cluID =
258 
259  unsigned int cidx = 0; // new clusters index
260  art::FindManyP<recob::Hit> hitsFromClusters(cluListHandle, evt, fClusterModuleLabel);
261  std::vector<bool> hitUsed(hitPtrList.size(), false); // tag hits used in clusters
262  for (auto const& pcryo : cluMap) {
263  cryo = pcryo.first;
264  for (auto const& ptpc : pcryo.second) {
265  tpc = ptpc.first;
266  for (auto const& pview : ptpc.second) {
267  view = pview.first;
268  if (!isViewSelected(view)) continue; // should not happen, clusters were pre-selected
269 
270  for (size_t c : pview.second) // c is the Ptr< recob::Cluster >::key()
271  {
272  auto v = hitsFromClusters.at(c);
273  if (v.empty()) continue;
274 
275  for (auto const& hit : v) {
276  if (hitUsed[hit.key()]) {
277  mf::LogWarning("EmTrackClusterId") << "hit already used in another cluster";
278  }
279  hitUsed[hit.key()] = true;
280  }
281 
282  auto vout = fMVAWriter.getOutput<recob::Hit>(
283  v, [&](art::Ptr<recob::Hit> const& ptr) { return (float)hitInFA[ptr.key()]; });
284 
285  float pvalue = vout[0] / (vout[0] + vout[1]);
286  mf::LogVerbatim("EmTrackClusterId") << "cluster in tpc:" << tpc << " view:" << view
287  << " size:" << v.size() << " p:" << pvalue;
288 
289  clusters->emplace_back(recob::Cluster(0.0F,
290  0.0F,
291  0.0F,
292  0.0F,
293  0.0F,
294  0.0F,
295  0.0F,
296  0.0F,
297  0.0F,
298  0.0F,
299  0.0F,
300  0.0F,
301  0.0F,
302  0.0F,
303  0.0F,
304  0.0F,
305  0.0F,
306  0.0F,
307  v.size(),
308  0.0F,
309  0.0F,
310  cidx,
311  (geo::View_t)view,
312  v.front()->WireID().planeID()));
313  util::CreateAssn(evt, *clusters, v, *clu2hit);
314  cidx++;
315 
316  fMVAWriter.addOutput(cluID, vout); // add copy of the input cluster
317  }
318 
319  // (2b) make single-hit clusters --------------------------------------------
320  for (size_t h : hitMap[cryo][tpc][view]) // h is the Ptr< recob::Hit >::key()
321  {
322  if (hitUsed[h]) continue;
323 
324  auto vout = fMVAWriter.getOutput<recob::Hit>(h);
325  float pvalue = vout[0] / (vout[0] + vout[1]);
326 
327  mf::LogVerbatim("EmTrackClusterId")
328  << "single hit in tpc:" << tpc << " view:" << view
329  << " wire:" << hitPtrList[h]->WireID().Wire
330  << " drift:" << hitPtrList[h]->PeakTime() << " p:" << pvalue;
331 
332  art::PtrVector<recob::Hit> cluster_hits;
333  cluster_hits.push_back(hitPtrList[h]);
334  clusters->emplace_back(recob::Cluster(0.0F,
335  0.0F,
336  0.0F,
337  0.0F,
338  0.0F,
339  0.0F,
340  0.0F,
341  0.0F,
342  0.0F,
343  0.0F,
344  0.0F,
345  0.0F,
346  0.0F,
347  0.0F,
348  0.0F,
349  0.0F,
350  0.0F,
351  0.0F,
352  1,
353  0.0F,
354  0.0F,
355  cidx,
356  (geo::View_t)view,
357  hitPtrList[h]->WireID().planeID()));
358  util::CreateAssn(evt, *clusters, cluster_hits, *clu2hit);
359  cidx++;
360 
361  fMVAWriter.addOutput(cluID, vout); // add single-hit cluster tagging unclutered hit
362  }
363  mf::LogVerbatim("EmTrackClusterId")
364  << "...produced " << cidx - pview.second.size() << " single-hit clusters.";
365  }
366  }
367  }
368 
369  evt.put(std::move(clusters));
370  evt.put(std::move(clu2hit));
371  } // all clusters done ----------------------------------------------------------------------
372 
373  // (3) do tracks when all hits in all cryo/tpc/plane are done -------------------------------
374  if (fDoTracks) {
375  auto trkListHandle = evt.getValidHandle<std::vector<recob::Track>>(fTrackModuleLabel);
376  art::FindManyP<recob::Hit> hitsFromTracks(trkListHandle, evt, fTrackModuleLabel);
377  std::vector<std::vector<art::Ptr<recob::Hit>>> trkHitPtrList(trkListHandle->size());
378  for (size_t t = 0; t < trkListHandle->size(); ++t) {
379  auto v = hitsFromTracks.at(t);
380  size_t nh[3] = {0, 0, 0};
381  for (auto const& hptr : v) {
382  ++nh[hptr->View()];
383  }
384  size_t best_view = 2; // collection
385  if ((nh[0] >= nh[1]) && (nh[0] > 2 * nh[2])) best_view = 0; // ind1
386  if ((nh[1] >= nh[0]) && (nh[1] > 2 * nh[2])) best_view = 1; // ind2
387 
388  size_t k = 0;
389  while (!isViewSelected(best_view)) {
390  best_view = (best_view + 1) % 3;
391  if (++k > 3) {
392  throw cet::exception("EmTrackClusterId") << "No views selected at all?" << std::endl;
393  }
394  }
395 
396  for (auto const& hptr : v) {
397  if (hptr->View() == best_view) trkHitPtrList[t].emplace_back(hptr);
398  }
399  }
400 
401  auto trkID = fMVAWriter.initOutputs<recob::Track>(
402  fTrackModuleLabel, trkHitPtrList.size(), fPointIdAlg.outputLabels());
403  for (size_t t = 0; t < trkHitPtrList.size(); ++t) // t is the Ptr< recob::Track >::key()
404  {
405  auto vout =
406  fMVAWriter.getOutput<recob::Hit>(trkHitPtrList[t], [&](art::Ptr<recob::Hit> const& ptr) {
407  return (float)hitInFA[ptr.key()];
408  });
409  fMVAWriter.setOutput(trkID, t, vout);
410  }
411  }
412  // tracks done ------------------------------------------------------------------------------
413 
415  }
bool isInsideFiducialRegion(unsigned int wire, float drift) const
Definition: PointIdAlg.cxx:330
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
unsigned int event
Definition: DataStructs.h:627
std::vector< std::string > const & outputLabels() const
network output labels
Definition: PointIdAlg.h:121
unsigned int run
Definition: DataStructs.h:628
enum geo::_plane_proj View_t
Enumerate the possible plane projections.
void setOutput(FVector_ID id, size_t key, std::array< float, N > const &values)
Definition: MVAWriter.h:214
Set of hits with a 2D structure.
Definition: Cluster.h:69
WireID_t Wire
Index of the wire within its plane.
Definition: geo_types.h:563
geo::WireID const & WireID() const
Initial tdc tick for hit.
Definition: Hit.h:280
bool isViewSelected(int view) const
FVector_ID initOutputs(std::string const &dataTag, size_t dataSize, std::vector< std::string > const &names=std::vector< std::string >(N,""))
IDparameter< geo::WireID > WireID
Member type of validated geo::WireID parameter.
void push_back(Ptr< U > const &p)
Definition: PtrVector.h:435
std::array< float, N > getOutput(std::vector< art::Ptr< T >> const &items) const
Definition: MVAWriter.h:251
void saveOutputs(art::Event &evt)
Check consistency and save all the results in the event.
Definition: MVAWriter.h:404
Detector simulation of raw signals on wires.
void addOutput(FVector_ID id, std::array< float, N > const &values)
Definition: MVAWriter.h:231
bool CreateAssn(art::Event &evt, std::vector< T > const &a, art::Ptr< U > const &b, art::Assns< U, T > &assn, std::string a_instance, size_t index=UINT_MAX)
Creates a single one-to-one association.
float PeakTime() const
Time of the signal peak, in tick units.
Definition: Hit.h:220
bool setWireDriftData(const detinfo::DetectorClocksData &clock_data, const detinfo::DetectorPropertiesData &det_prop, const std::vector< recob::Wire > &wires, unsigned int plane, unsigned int tpc, unsigned int cryo)
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
2D representation of charge deposited in the TDC/wire plane
Definition: Hit.h:46
constexpr PlaneID const & planeID() const
Definition: geo_types.h:620
TCEvent evt
Definition: DataStructs.cxx:8
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
Definition: Ptr.h:306
std::vector< std::vector< float > > predictIdVectors(std::vector< std::pair< unsigned int, float >> points) const
Definition: PointIdAlg.cxx:257
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a "fitted" track:
Definition: Track.h:49
std::unordered_map< unsigned int, tpc_view_keymap > cryo_tpc_view_keymap
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
void art::Modifier::registerProducts ( ProductDescriptions productsToRegister)
inherited

Definition at line 16 of file Modifier.cc.

References art::ModuleBase::moduleDescription(), and art::ProductRegistryHelper::registerProducts().

17  {
18  ProductRegistryHelper::registerProducts(productsToRegister,
20  }
void registerProducts(ProductDescriptions &productsToRegister, ModuleDescription const &md)
ModuleDescription const & moduleDescription() const
Definition: ModuleBase.cc:13
void art::ModuleBase::setModuleDescription ( ModuleDescription const &  md)
inherited

Definition at line 31 of file ModuleBase.cc.

References art::ModuleBase::md_.

32  {
33  md_ = md;
34  }
std::optional< ModuleDescription > md_
Definition: ModuleBase.h:55
void art::ModuleBase::sortConsumables ( std::string const &  current_process_name)
inherited

Definition at line 49 of file ModuleBase.cc.

References art::ModuleBase::collector_, and art::ConsumesCollector::sortConsumables().

50  {
51  // Now that we know we have seen all the consumes declarations,
52  // sort the results for fast lookup later.
53  collector_.sortConsumables(current_process_name);
54  }
ConsumesCollector collector_
Definition: ModuleBase.h:56
void sortConsumables(std::string const &current_process_name)

Member Data Documentation

size_t nnet::EmTrackClusterId::fBatchSize
private

Definition at line 106 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

art::InputTag nnet::EmTrackClusterId::fClusterModuleLabel
private

Definition at line 112 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

bool nnet::EmTrackClusterId::fDoClusters
private

Definition at line 114 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

bool nnet::EmTrackClusterId::fDoTracks
private

Definition at line 114 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

art::InputTag nnet::EmTrackClusterId::fHitModuleLabel
private

Definition at line 111 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

anab::MVAWriter<3> nnet::EmTrackClusterId::fMVAWriter
private

Definition at line 108 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

art::InputTag nnet::EmTrackClusterId::fNewClustersTag
private

Definition at line 118 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

PointIdAlg nnet::EmTrackClusterId::fPointIdAlg
private

Definition at line 107 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

art::InputTag nnet::EmTrackClusterId::fTrackModuleLabel
private

Definition at line 113 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().

std::vector<int> nnet::EmTrackClusterId::fViews
private

Definition at line 116 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and isViewSelected().

art::InputTag nnet::EmTrackClusterId::fWireProducerLabel
private

Definition at line 110 of file EmTrackClusterId3out_module.cc.

Referenced by EmTrackClusterId(), and produce().


The documentation for this class was generated from the following file: