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

Public Types

using ModuleType = EDProducer
 
template<typename UserConfig , typename KeysToIgnore = void>
using Table = Modifier::Table< UserConfig, KeysToIgnore >
 

Public Member Functions

 CRHitRemovalByPCA (fhicl::ParameterSet const &pset)
 
virtual void produce (art::Event &e)
 
virtual void endJob ()
 End job method. More...
 
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 removeTaggedHits (const recob::PFParticle *pfParticle, const art::Handle< std::vector< recob::PFParticle >> &pfParticleHandle, const art::FindManyP< recob::Cluster > &partToClusAssns, const art::FindManyP< recob::Hit > &clusToHitAssns, std::set< const recob::PFParticle * > &taggedParticles, art::PtrVector< recob::Hit > &hitVec)
 

Private Attributes

std::string fCosmicProducerLabel
 Module that produced the PCA based cosmic tags. More...
 
std::string fHitProducerLabel
 The full collection of hits. More...
 
std::string fPFParticleProducerLabel
 PFParticle producer. More...
 
double fCosmicTagThreshold
 Thresholds for tagging. More...
 
int fNumEvent
 Number of events seen. More...
 
int fNumCRRejects
 Number of tracks produced. More...
 

Detailed Description

Definition at line 69 of file CRHitRemovalByPCA_module.cc.

Member Typedef Documentation

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.

Constructor & Destructor Documentation

CRHitRemovalByPCA::CRHitRemovalByPCA ( fhicl::ParameterSet const &  pset)
explicit

Constructor.

Arguments:

pset - Fcl parameters.

Definition at line 108 of file CRHitRemovalByPCA_module.cc.

References fCosmicProducerLabel, fCosmicTagThreshold, fHitProducerLabel, fNumCRRejects, fNumEvent, and fPFParticleProducerLabel.

109  : EDProducer{pset}, fNumEvent(0), fNumCRRejects(0)
110 {
111  fCosmicProducerLabel = pset.get<std::string>("CosmicProducerLabel");
112  fHitProducerLabel = pset.get<std::string>("HitProducerLabel");
113  fPFParticleProducerLabel = pset.get<std::string>("PFParticleProducerLabel");
114  fCosmicTagThreshold = pset.get<double>("CosmicTagThreshold");
115 
116  produces<std::vector<recob::Hit>>();
117 
118  // Report.
119  mf::LogInfo("CRHitRemovalByPCA") << "CRHitRemovalByPCA configured\n";
120 }
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
EDProducer(fhicl::ParameterSet const &pset)
Definition: EDProducer.cc:6
std::string fCosmicProducerLabel
Module that produced the PCA based cosmic tags.
std::string fPFParticleProducerLabel
PFParticle producer.
int fNumCRRejects
Number of tracks produced.
int fNumEvent
Number of events seen.
double fCosmicTagThreshold
Thresholds for tagging.
std::string fHitProducerLabel
The full collection of hits.

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 CRHitRemovalByPCA::endJob ( )
virtual

End job method.

Reimplemented from art::EDProducer.

Definition at line 332 of file CRHitRemovalByPCA_module.cc.

References fNumCRRejects, and fNumEvent.

333 {
334  double aveCRPerEvent = fNumEvent > 0 ? double(fNumCRRejects) / double(fNumEvent) : 0.;
335 
336  mf::LogInfo("CRHitRemovalByPCA") << "CRHitRemovalByPCA statistics:\n"
337  << " Number of events = " << fNumEvent << "\n"
338  << " Number of Cosmic Rays found = " << fNumCRRejects << ", "
339  << aveCRPerEvent << " average/event";
340 }
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
int fNumCRRejects
Number of tracks produced.
int fNumEvent
Number of events seen.
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
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
void CRHitRemovalByPCA::produce ( art::Event evt)
virtual

Produce method.

Arguments:

evt - Art event.

This is the primary method. The goal is to produce a list of recob::Hit objects which are a "clean" subset of all hits and which are believed to be due to a neutrino interaction. It does this by considering input CosmicTag objects, relating them to PFParticles/Tracks and removing the hits associated to those objects which are believed to be Cosmic Rays.

Implements art::EDProducer.

Definition at line 135 of file CRHitRemovalByPCA_module.cc.

References anab::CosmicTag::CosmicScore(), art::PtrVector< T >::empty(), art::PtrVector< T >::end(), fCosmicProducerLabel, fCosmicTagThreshold, fHitProducerLabel, fNumEvent, fPFParticleProducerLabel, art::Ptr< T >::get(), art::ProductRetriever::getByLabel(), art::PtrVector< T >::insert(), recob::PFParticle::IsPrimary(), art::Handle< T >::isValid(), art::PtrVector< T >::push_back(), art::Event::put(), and removeTaggedHits().

136 {
137  ++fNumEvent;
138 
139  // Start by looking up the original hits
141  evt.getByLabel(fHitProducerLabel, hitHandle);
142 
143  // If there are no hits then there should be no output
144  if (!hitHandle.isValid()) return;
145 
146  // If there are hits then we are going to output something so get a new
147  // output hit vector
148  std::unique_ptr<std::vector<recob::Hit>> outputHits(new std::vector<recob::Hit>);
149 
150  // And fill it with the complete original list of hits
151  *outputHits = *hitHandle;
152 
153  // Recover the PFParticles that are responsible for making the tracks
155  evt.getByLabel(fPFParticleProducerLabel, pfParticleHandle);
156 
157  // Without a valid collection of PFParticles we can't do the hit removal
158  if (!pfParticleHandle.isValid()) {
159  evt.put(std::move(outputHits));
160  return;
161  }
162 
163  // Recover the clusters so we can do associations to the hits
164  // In theory the clusters come from the same producer as the PFParticles
166  evt.getByLabel(fPFParticleProducerLabel, clusterHandle);
167 
168  // If there are no clusters then something is really wrong
169  if (!clusterHandle.isValid()) {
170  evt.put(std::move(outputHits));
171  return;
172  }
173 
174  // Recover the list of cosmic tags
176  evt.getByLabel(fCosmicProducerLabel, cosmicTagHandle);
177 
178  // No cosmic tags then nothing to do here
179  if (!cosmicTagHandle.isValid() || cosmicTagHandle->empty()) {
180  evt.put(std::move(outputHits));
181  return;
182  }
183 
184  // Start recovering the necessary associations
185  // Start by finding the associations going from cosmic tags to PFParticles
186  art::FindManyP<recob::PFParticle> cosmicTagToPFPartAssns(
187  cosmicTagHandle, evt, fCosmicProducerLabel);
188 
189  // From PFParticles we go to clusters
190  art::FindManyP<recob::Cluster> clusterAssns(pfParticleHandle, evt, fPFParticleProducerLabel);
191 
192  // Likewise, recover the collection of associations to hits
193  art::FindManyP<recob::Hit> clusterHitAssns(clusterHandle, evt, fPFParticleProducerLabel);
194 
195  // Container to contain the "bad" hits...
196  art::PtrVector<recob::Hit> taggedHits;
197 
198  // No point double counting hits
199  std::set<const recob::PFParticle*> taggedSet;
200 
201  // Start the identification of hits to remove. The outer loop is over the various producers of
202  // the CosmicTag objects we're examininig
203  for (size_t crIdx = 0; crIdx != cosmicTagHandle->size(); crIdx++) {
204  art::Ptr<anab::CosmicTag> cosmicTag(cosmicTagHandle, crIdx);
205 
206  // If this was tagged as a CR muon then we have work to do!
207  if (cosmicTag->CosmicScore() > fCosmicTagThreshold) {
208  // Recover the associated PFParticle
209  std::vector<art::Ptr<recob::PFParticle>> pfPartVec = cosmicTagToPFPartAssns.at(crIdx);
210 
211  if (pfPartVec.empty()) continue;
212 
213  art::Ptr<recob::PFParticle> pfParticle = pfPartVec.front();
214 
215  // Again, most likely needless
216  if (!pfParticle) continue;
217 
218  // A cosmic ray must be a primary (by fiat)
219  if (!pfParticle->IsPrimary()) continue;
220 
221  // Avoid double counting if more than one tagger running
222  if (taggedSet.find(pfParticle.get()) != taggedSet.end()) continue;
223 
224  // Remove all hits associated to this particle and its daughters
226  pfParticle.get(), pfParticleHandle, clusterAssns, clusterHitAssns, taggedSet, taggedHits);
227  }
228  }
229 
230  // Are there any tagged hits?
231  if (!taggedHits.empty()) {
232  // First order of business is to attempt to restore any hits which are shared between a tagged
233  // CR PFParticle and an untagged one. We can do this by going through the PFParticles and
234  // "removing" hits which are in the not tagged set.
235  art::PtrVector<recob::Hit> untaggedHits;
236 
237  for (const auto& pfParticle : *pfParticleHandle) {
238  if (taggedSet.find(&pfParticle) != taggedSet.end()) continue;
239 
240  // Recover the clusters associated to the input PFParticle
241  std::vector<art::Ptr<recob::Cluster>> clusterVec = clusterAssns.at(pfParticle.Self());
242 
243  // Loop over the clusters and grab the associated hits
244  for (const auto& cluster : clusterVec) {
245  std::vector<art::Ptr<recob::Hit>> clusHitVec = clusterHitAssns.at(cluster->ID());
246  untaggedHits.insert(untaggedHits.end(), clusHitVec.begin(), clusHitVec.end());
247  }
248  }
249 
250  // Filter out the hits we want to save
251  FilterHits(taggedHits, untaggedHits);
252 
253  // The below is rather ugly but there is an interplay between art::Ptr's and the
254  // actual pointers to objects that I might be missing and this is what I see how to do
255  // First move all the original art::Ptr hits into a local art::PtrVector
256  art::PtrVector<recob::Hit> originalHits;
257 
258  // Fill this one hit at a time...
259  for (size_t hitIdx = 0; hitIdx != hitHandle->size(); hitIdx++) {
260  art::Ptr<recob::Hit> hit(hitHandle, hitIdx);
261 
262  originalHits.push_back(hit);
263  }
264 
265  // Remove the cosmic ray tagged hits
266  FilterHits(originalHits, taggedHits);
267 
268  // Clear the current outputHits vector since we're going to refill...
269  outputHits->clear();
270 
271  // Now make the new list of output hits
272  for (const auto& hit : originalHits) {
273  // Kludge to remove out of time hits
274  if (hit->StartTick() > 6400 || hit->EndTick() < 3200) continue;
275 
276  outputHits->emplace_back(*hit);
277  }
278  }
279 
280  // Add tracks and associations to event.
281  evt.put(std::move(outputHits));
282 }
void removeTaggedHits(const recob::PFParticle *pfParticle, const art::Handle< std::vector< recob::PFParticle >> &pfParticleHandle, const art::FindManyP< recob::Cluster > &partToClusAssns, const art::FindManyP< recob::Hit > &clusToHitAssns, std::set< const recob::PFParticle * > &taggedParticles, art::PtrVector< recob::Hit > &hitVec)
std::string fCosmicProducerLabel
Module that produced the PCA based cosmic tags.
Cluster finding and building.
std::string fPFParticleProducerLabel
PFParticle producer.
bool isValid() const noexcept
Definition: Handle.h:203
PutHandle< PROD > put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
Definition: Event.h:77
int fNumEvent
Number of events seen.
void push_back(Ptr< U > const &p)
Definition: PtrVector.h:435
iterator end()
Definition: PtrVector.h:231
bool IsPrimary() const
Returns whether the particle is the root of the flow.
Definition: PFParticle.h:82
reference at(size_type n)
Definition: PtrVector.h:359
bool empty() const
Definition: PtrVector.h:330
Detector simulation of raw signals on wires.
double fCosmicTagThreshold
Thresholds for tagging.
iterator insert(iterator position, Ptr< U > const &p)
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
std::string fHitProducerLabel
The full collection of hits.
T const * get() const
Definition: Ptr.h:138
Definition: fwd.h:26
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 CRHitRemovalByPCA::removeTaggedHits ( const recob::PFParticle pfParticle,
const art::Handle< std::vector< recob::PFParticle >> &  pfParticleHandle,
const art::FindManyP< recob::Cluster > &  partToClusAssns,
const art::FindManyP< recob::Hit > &  clusToHitAssns,
std::set< const recob::PFParticle * > &  taggedParticles,
art::PtrVector< recob::Hit > &  hitVec 
)
private

Hit removal method

Arguments:

pfParticle - the top level PFParticle to have hits removed pfParticleHandle - handle to the PFParticle objects partToClusAssns - list of PFParticle to Cluster associations clusToHitAssns - list of Cluster to Hit associations hitVec - the current list of hits

This recursively called method will remove all hits associated to an input PFParticle and, in addition, will call itself for all daughters of the input PFParticle

Definition at line 299 of file CRHitRemovalByPCA_module.cc.

References recob::PFParticle::Daughters(), art::PtrVector< T >::end(), art::Ptr< T >::get(), art::PtrVector< T >::insert(), and recob::PFParticle::Self().

Referenced by produce().

306 {
307  // Recover the clusters associated to the input PFParticle
308  std::vector<art::Ptr<recob::Cluster>> clusterVec = partToClusAssns.at(pfParticle->Self());
309 
310  // Record this PFParticle as tagged
311  taggedParticles.insert(pfParticle);
312 
313  // Loop over the clusters and grab the associated hits
314  for (const auto& cluster : clusterVec) {
315  std::vector<art::Ptr<recob::Hit>> clusHitVec = clusToHitAssns.at(cluster->ID());
316  hitVec.insert(hitVec.end(), clusHitVec.begin(), clusHitVec.end());
317  }
318 
319  // Loop over the daughters of this particle and remove their hits as well
320  for (const auto& daughterId : pfParticle->Daughters()) {
321  art::Ptr<recob::PFParticle> daughter(pfParticleHandle, daughterId);
322 
324  daughter.get(), pfParticleHandle, partToClusAssns, clusToHitAssns, taggedParticles, hitVec);
325  }
326 
327  return;
328 }
void removeTaggedHits(const recob::PFParticle *pfParticle, const art::Handle< std::vector< recob::PFParticle >> &pfParticleHandle, const art::FindManyP< recob::Cluster > &partToClusAssns, const art::FindManyP< recob::Hit > &clusToHitAssns, std::set< const recob::PFParticle * > &taggedParticles, art::PtrVector< recob::Hit > &hitVec)
const std::vector< size_t > & Daughters() const
Returns the collection of daughter particles.
Definition: PFParticle.h:110
size_t Self() const
Returns the index of this particle.
Definition: PFParticle.h:88
Cluster finding and building.
iterator end()
Definition: PtrVector.h:231
iterator insert(iterator position, Ptr< U > const &p)
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

std::string CRHitRemovalByPCA::fCosmicProducerLabel
private

Module that produced the PCA based cosmic tags.

Definition at line 88 of file CRHitRemovalByPCA_module.cc.

Referenced by CRHitRemovalByPCA(), and produce().

double CRHitRemovalByPCA::fCosmicTagThreshold
private

Thresholds for tagging.

Definition at line 92 of file CRHitRemovalByPCA_module.cc.

Referenced by CRHitRemovalByPCA(), and produce().

std::string CRHitRemovalByPCA::fHitProducerLabel
private

The full collection of hits.

Definition at line 89 of file CRHitRemovalByPCA_module.cc.

Referenced by CRHitRemovalByPCA(), and produce().

int CRHitRemovalByPCA::fNumCRRejects
private

Number of tracks produced.

Definition at line 96 of file CRHitRemovalByPCA_module.cc.

Referenced by CRHitRemovalByPCA(), and endJob().

int CRHitRemovalByPCA::fNumEvent
private

Number of events seen.

Definition at line 95 of file CRHitRemovalByPCA_module.cc.

Referenced by CRHitRemovalByPCA(), endJob(), and produce().

std::string CRHitRemovalByPCA::fPFParticleProducerLabel
private

PFParticle producer.

Definition at line 90 of file CRHitRemovalByPCA_module.cc.

Referenced by CRHitRemovalByPCA(), and produce().


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