LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
cluster::BlurredClustering Class Reference
Inheritance diagram for cluster::BlurredClustering:
art::EDProducer art::ProducerBase art::Consumer art::EngineCreator art::ProductRegistryHelper

Public Types

using ModuleType = EDProducer
 
using WorkerType = WorkerT< EDProducer >
 
template<typename UserConfig , typename KeysToIgnore = void>
using Table = ProducerBase::Table< UserConfig, KeysToIgnore >
 

Public Member Functions

 BlurredClustering (fhicl::ParameterSet const &pset)
 
virtual ~BlurredClustering ()
 
void produce (art::Event &evt)
 
void reconfigure (fhicl::ParameterSet const &p)
 
template<typename PROD , BranchType B = InEvent>
ProductID getProductID (std::string const &instanceName={}) const
 
template<typename PROD , BranchType B>
ProductID getProductID (ModuleDescription const &moduleDescription, std::string const &instanceName) const
 
bool modifiesEvent () const
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > consumes (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > consumesView (InputTag const &it)
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ProductToken< T > mayConsume (InputTag const &it)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , art::BranchType BT>
art::ViewToken< T > mayConsumeView (InputTag const &it)
 
base_engine_tcreateEngine (seed_t seed)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make)
 
base_engine_tcreateEngine (seed_t seed, std::string const &kind_of_engine_to_make, label_t const &engine_label)
 
seed_t get_seed_value (fhicl::ParameterSet const &pset, char const key[]="seed", seed_t const implicit_seed=-1)
 

Static Public Member Functions

static cet::exempt_ptr< Consumernon_module_context ()
 

Protected Member Functions

CurrentProcessingContext const * currentContext () const
 
void validateConsumedProduct (BranchType const bt, ProductInfo const &pi)
 
void prepareForJob (fhicl::ParameterSet const &pset)
 
void showMissingConsumes () const
 

Private Attributes

int fEvent
 
int fRun
 
int fSubrun
 
std::string fHitsModuleLabel
 
std::string fTrackModuleLabel
 
std::string fVertexModuleLabel
 
std::string fPFParticleModuleLabel
 
bool fCreateDebugPDF
 
bool fMergeClusters
 
bool fGlobalTPCRecon
 
bool fShowerReconOnly
 
cluster::BlurredClusteringAlg fBlurredClusteringAlg
 
cluster::MergeClusterAlg fMergeClusterAlg
 
shower::TrackShowerSeparationAlg fTrackShowerSeparationAlg
 
std::unique_ptr< std::vector< recob::Cluster > > clusters
 
std::unique_ptr< art::Assns< recob::Cluster, recob::Hit > > associations
 

Detailed Description

Definition at line 54 of file BlurredClustering_module.cc.

Member Typedef Documentation

using art::EDProducer::ModuleType = EDProducer
inherited

Definition at line 34 of file EDProducer.h.

template<typename UserConfig , typename KeysToIgnore = void>
using art::EDProducer::Table = ProducerBase::Table<UserConfig, KeysToIgnore>
inherited

Definition at line 43 of file EDProducer.h.

using art::EDProducer::WorkerType = WorkerT<EDProducer>
inherited

Definition at line 35 of file EDProducer.h.

Constructor & Destructor Documentation

cluster::BlurredClustering::BlurredClustering ( fhicl::ParameterSet const &  pset)
explicit

Definition at line 80 of file BlurredClustering_module.cc.

References reconfigure().

80  : fBlurredClusteringAlg(pset.get<fhicl::ParameterSet>("BlurredClusterAlg")),
81  fMergeClusterAlg(pset.get<fhicl::ParameterSet>("MergeClusterAlg")),
82  fTrackShowerSeparationAlg(pset.get<fhicl::ParameterSet>("TrackShowerSeparationAlg")) {
83  this->reconfigure(pset);
84  produces<std::vector<recob::Cluster> >();
85  produces<art::Assns<recob::Cluster,recob::Hit> >();
86 }
cluster::MergeClusterAlg fMergeClusterAlg
void reconfigure(fhicl::ParameterSet const &p)
shower::TrackShowerSeparationAlg fTrackShowerSeparationAlg
cluster::BlurredClusteringAlg fBlurredClusteringAlg
cluster::BlurredClustering::~BlurredClustering ( )
virtual

Definition at line 88 of file BlurredClustering_module.cc.

88 { }

Member Function Documentation

template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::consumes ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::consumes ( InputTag const &  it)
inherited

Definition at line 147 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

148 {
149  if (!moduleContext_)
150  return ProductToken<T>::invalid();
151 
152  consumables_[BT].emplace_back(ConsumableType::Product,
153  TypeID{typeid(T)},
154  it.label(),
155  it.instance(),
156  it.process());
157  return ProductToken<T>{it};
158 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::consumesMany ( )
inherited

Definition at line 162 of file Consumer.h.

163 {
164  if (!moduleContext_)
165  return;
166 
167  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
168 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::consumesView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::consumesView ( InputTag const &  it)
inherited

Definition at line 172 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

173 {
174  if (!moduleContext_)
175  return ViewToken<T>::invalid();
176 
177  consumables_[BT].emplace_back(ConsumableType::ViewElement,
178  TypeID{typeid(T)},
179  it.label(),
180  it.instance(),
181  it.process());
182  return ViewToken<T>{it};
183 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make 
)
inherited

Definition at line 32 of file EngineCreator.cc.

References art::EngineCreator::rng().

34 {
35  return rng()->createEngine(
36  placeholder_schedule_id(), seed, kind_of_engine_to_make);
37 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
EngineCreator::base_engine_t & EngineCreator::createEngine ( seed_t  seed,
std::string const &  kind_of_engine_to_make,
label_t const &  engine_label 
)
inherited

Definition at line 40 of file EngineCreator.cc.

References art::EngineCreator::rng().

43 {
44  return rng()->createEngine(
45  placeholder_schedule_id(), seed, kind_of_engine_to_make, engine_label);
46 }
long seed
Definition: chem4.cc:68
static art::ServiceHandle< art::RandomNumberGenerator > & rng()
CurrentProcessingContext const * art::EDProducer::currentContext ( ) const
protectedinherited

Definition at line 120 of file EDProducer.cc.

References art::EDProducer::current_context_.

121  {
122  return current_context_.get();
123  }
CPC_exempt_ptr current_context_
Definition: EDProducer.h:116
EngineCreator::seed_t EngineCreator::get_seed_value ( fhicl::ParameterSet const &  pset,
char const  key[] = "seed",
seed_t const  implicit_seed = -1 
)
inherited

Definition at line 49 of file EngineCreator.cc.

References fhicl::ParameterSet::get().

Referenced by art::MixFilter< T >::initEngine_().

52 {
53  auto const& explicit_seeds = pset.get<std::vector<int>>(key, {});
54  return explicit_seeds.empty() ? implicit_seed : explicit_seeds.front();
55 }
template<typename PROD , BranchType B>
ProductID art::EDProducer::getProductID ( std::string const &  instanceName = {}) const
inlineinherited

Definition at line 123 of file EDProducer.h.

References art::EDProducer::moduleDescription_.

124  {
125  return ProducerBase::getProductID<PROD, B>(moduleDescription_,
126  instanceName);
127  }
ModuleDescription moduleDescription_
Definition: EDProducer.h:115
template<typename PROD , BranchType B>
ProductID art::ProducerBase::getProductID ( ModuleDescription const &  moduleDescription,
std::string const &  instanceName 
) const
inherited

Definition at line 56 of file ProducerBase.h.

References B, and art::ModuleDescription::moduleLabel().

Referenced by art::ProducerBase::modifiesEvent().

58  {
59  auto const& pd =
60  get_ProductDescription<PROD>(B, md.moduleLabel(), instanceName);
61  return pd.productID();
62  }
Int_t B
Definition: plot.C:25
template<typename T , BranchType = InEvent>
ProductToken<T> art::Consumer::mayConsume ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ProductToken<T> art::Consumer::mayConsume ( InputTag const &  it)
inherited

Definition at line 190 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

191 {
192  if (!moduleContext_)
193  return ProductToken<T>::invalid();
194 
195  consumables_[BT].emplace_back(ConsumableType::Product,
196  TypeID{typeid(T)},
197  it.label(),
198  it.instance(),
199  it.process());
200  return ProductToken<T>{it};
201 }
static ProductToken< T > invalid()
Definition: ProductToken.h:47
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename T , art::BranchType BT>
void art::Consumer::mayConsumeMany ( )
inherited

Definition at line 205 of file Consumer.h.

206 {
207  if (!moduleContext_)
208  return;
209 
210  consumables_[BT].emplace_back(ConsumableType::Many, TypeID{typeid(T)});
211 }
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
template<typename Element , BranchType = InEvent>
ViewToken<Element> art::Consumer::mayConsumeView ( InputTag const &  )
inherited
template<typename T , art::BranchType BT>
art::ViewToken<T> art::Consumer::mayConsumeView ( InputTag const &  it)
inherited

Definition at line 215 of file Consumer.h.

References art::InputTag::instance(), art::InputTag::label(), and art::InputTag::process().

216 {
217  if (!moduleContext_)
218  return ViewToken<T>::invalid();
219 
220  consumables_[BT].emplace_back(ConsumableType::ViewElement,
221  TypeID{typeid(T)},
222  it.label(),
223  it.instance(),
224  it.process());
225  return ViewToken<T>{it};
226 }
static ViewToken< Element > invalid()
Definition: ProductToken.h:75
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
bool art::ProducerBase::modifiesEvent ( ) const
inlineinherited

Definition at line 40 of file ProducerBase.h.

References art::ProducerBase::getProductID().

41  {
42  return true;
43  }
void art::Consumer::prepareForJob ( fhicl::ParameterSet const &  pset)
protectedinherited

Definition at line 89 of file Consumer.cc.

References fhicl::ParameterSet::get_if_present().

Referenced by art::EDProducer::doBeginJob(), art::EDFilter::doBeginJob(), and art::EDAnalyzer::doBeginJob().

90 {
91  if (!moduleContext_)
92  return;
93 
94  pset.get_if_present("errorOnMissingConsumes", requireConsumes_);
95  for (auto& consumablesPerBranch : consumables_) {
96  cet::sort_all(consumablesPerBranch);
97  }
98 }
bool requireConsumes_
Definition: Consumer.h:137
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
void cluster::BlurredClustering::produce ( art::Event evt)
virtual

Implements art::EDProducer.

Definition at line 104 of file BlurredClustering_module.cc.

References associations, art::PtrVector< T >::back(), clusters, cluster::BlurredClusteringAlg::ConvertBinsToClusters(), cluster::BlurredClusteringAlg::ConvertRecobHitsToVector(), util::CreateAssn(), cluster::BlurredClusteringAlg::CreateDebugPDF(), DEFINE_ART_MODULE, art::Event::event(), fBlurredClusteringAlg, fCreateDebugPDF, fEvent, fGlobalTPCRecon, fHitsModuleLabel, art::fill_ptr_vector(), cluster::BlurredClusteringAlg::FindClusters(), fMergeClusterAlg, fMergeClusters, fPFParticleModuleLabel, art::PtrVector< T >::front(), fRun, fShowerReconOnly, fSubrun, fTrackModuleLabel, fTrackShowerSeparationAlg, fVertexModuleLabel, cluster::BlurredClusteringAlg::GaussianBlur(), art::DataViewImpl::getByLabel(), cluster::BlurredClusteringAlg::GetMinSize(), cluster::BlurredClusteringAlg::GlobalWire(), hits(), cluster::ClusterParamsImportWrapper< Algo >::ImportHits(), art::Handle< T >::isValid(), cluster::BlurredClusteringAlg::MakeHistogram(), cluster::MergeClusterAlg::MergeClusters(), art::Event::put(), art::Event::run(), cluster::BlurredClusteringAlg::SaveImage(), shower::TrackShowerSeparationAlg::SelectShowerHits(), recob::Cluster::Sentry, art::PtrVector< T >::size(), art::Event::subRun(), and lar::dump::vector().

104  {
105 
106  fEvent = evt.event();
107  fRun = evt.run();
108  fSubrun = evt.subRun();
109 
110  // Create debug pdf to illustrate the blurring process
111  if (fCreateDebugPDF)
113 
114  // Output containers -- collection of clusters and associations
115  clusters.reset(new std::vector<recob::Cluster>);
117 
118  // Compute the cluster characteristics
119  // Just use default for now, but configuration will go here
120  ClusterParamsImportWrapper<StandardClusterParamsAlg> ClusterParamAlgo;
121 
122  // Create geometry handle
124 
125  // Get the hits from the event
126  art::Handle<std::vector<recob::Hit> > hitCollection;
127  std::vector<art::Ptr<recob::Hit> > hits;
128  std::vector<art::Ptr<recob::Hit> > hitsToCluster;
129  if (evt.getByLabel(fHitsModuleLabel,hitCollection))
130  art::fill_ptr_vector(hits, hitCollection);
131 
132  if (fShowerReconOnly) {
133 
134  // Get the tracks from the event
135  art::Handle<std::vector<recob::Track> > trackCollection;
136  std::vector<art::Ptr<recob::Track> > tracks;
137  if (evt.getByLabel(fTrackModuleLabel,trackCollection))
138  art::fill_ptr_vector(tracks, trackCollection);
139 
140  // Get the space points from the event
141  art::Handle<std::vector<recob::SpacePoint> > spacePointCollection;
142  std::vector<art::Ptr<recob::SpacePoint> > spacePoints;
143  if (evt.getByLabel(fTrackModuleLabel,spacePointCollection))
144  art::fill_ptr_vector(spacePoints, spacePointCollection);
145 
146  // Get vertices from the event
147  art::Handle<std::vector<recob::Vertex> > vertexCollection;
148  std::vector<art::Ptr<recob::Vertex> > vertices;
149  if (evt.getByLabel(fVertexModuleLabel, vertexCollection))
150  art::fill_ptr_vector(vertices, vertexCollection);
151 
152  // Get pandora pfparticles and clusters from the event
153  art::Handle<std::vector<recob::PFParticle> > pfParticleCollection;
154  std::vector<art::Ptr<recob::PFParticle> > pfParticles;
155  if (evt.getByLabel(fPFParticleModuleLabel, pfParticleCollection))
156  art::fill_ptr_vector(pfParticles, pfParticleCollection);
157  art::Handle<std::vector<recob::Cluster> > clusterCollection;
158  evt.getByLabel(fPFParticleModuleLabel, clusterCollection);
159 
160  if (trackCollection.isValid()) {
161  art::FindManyP<recob::Hit> fmht(trackCollection, evt, fTrackModuleLabel);
162  art::FindManyP<recob::Track> fmth(hitCollection, evt, fTrackModuleLabel);
163  art::FindManyP<recob::SpacePoint> fmspt(trackCollection, evt, fTrackModuleLabel);
164  art::FindManyP<recob::Track> fmtsp(spacePointCollection, evt, fTrackModuleLabel);
165  hitsToCluster = fTrackShowerSeparationAlg.SelectShowerHits(evt.event(), hits, tracks, spacePoints, fmht, fmth, fmspt, fmtsp);
166  }
167 
168  // // Remove hits from tracks before performing any clustering
169  // if (pfParticleCollection.isValid() and clusterCollection.isValid()) {
170  // mf::LogInfo("BlurredCluster") << "Removing track-like hits before clustering: will use information from PFParticles." << std::endl;
171  // art::FindManyP<recob::Cluster> fmcpfp(pfParticleCollection, evt, fPFParticleModuleLabel);
172  // art::FindManyP<recob::Hit> fmhpfp(clusterCollection, evt, fPFParticleModuleLabel);
173  // hitsToCluster = fTrackShowerSeparationAlg.RemoveTrackHits(hits, pfParticles, fmcpfp, fmhpfp);
174  // }
175  // else if (trackCollection.isValid() and trackCollection.isValid() and spacePointCollection.isValid()) {
176  // mf::LogInfo("BlurredCluster") << "Removing track-like hits before clustering: no PFParticle information available so will use tracks and vertices." << std::endl;
177  // art::FindManyP<recob::Track> fmth(hitCollection, evt, fTrackModuleLabel);
178  // art::FindManyP<recob::Track> fmtsp(spacePointCollection, evt, fTrackModuleLabel);
179  // art::FindManyP<recob::Hit> fmh(trackCollection, evt, fTrackModuleLabel);
180  // hitsToCluster = fTrackShowerSeparationAlg.RemoveTrackHits(hits, tracks, spacePoints, vertices, fmth, fmtsp, fmh, evt.event(), evt.run());
181  // }
182  // else
183  // throw art::Exception(art::errors::Configuration) << "Error: configuration is set to remove track-like hits before clustering but no prior reconstruction is provided... "
184  // << std::endl
185  // << "Require either a) Pandora or b) track, vertices and space points to have already been found." << std::endl;
186 
187  }
188 
189  else
190  hitsToCluster = hits;
191 
192  // Make a map between the planes and the hits on each
193  std::map<std::pair<int,int>,std::vector<art::Ptr<recob::Hit> > > planeToHits;
194  for (std::vector<art::Ptr<recob::Hit> >::iterator hitToCluster = hitsToCluster.begin(); hitToCluster != hitsToCluster.end(); ++hitToCluster) {
195  if (fGlobalTPCRecon)
196  planeToHits[std::make_pair((*hitToCluster)->WireID().Plane,(*hitToCluster)->WireID().TPC%2)].push_back(*hitToCluster);
197  else
198  planeToHits[std::make_pair((*hitToCluster)->WireID().Plane,(*hitToCluster)->WireID().TPC)].push_back(*hitToCluster);
199  }
200 
201  // Loop over views
202  for (std::map<std::pair<int,int>,std::vector<art::Ptr<recob::Hit> > >::iterator planeIt = planeToHits.begin(); planeIt != planeToHits.end(); ++planeIt) {
203 
204  //std::cout << "Clustering in plane " << planeIt->first.first << " in global TPC " << planeIt->first.second << std::endl;
205  // if (!(planeIt->first.first == 1 and planeIt->first.second == 1))
206  // continue;
207 
208  std::vector<art::PtrVector<recob::Hit> > finalClusters;
209 
210  // Implement the algorithm
211  if (planeIt->second.size() >= fBlurredClusteringAlg.GetMinSize()) {
212 
213  // Convert hit map to TH2 histogram and blur it
214  std::vector<std::vector<double> > image = fBlurredClusteringAlg.ConvertRecobHitsToVector(planeIt->second);
215  std::vector<std::vector<double> > blurred = fBlurredClusteringAlg.GaussianBlur(image);
216 
217  // Find clusters in histogram
218  std::vector<std::vector<int> > allClusterBins; // Vector of clusters (clusters are vectors of hits)
219  int numClusters = fBlurredClusteringAlg.FindClusters(blurred, allClusterBins);
220  mf::LogVerbatim("Blurred Clustering") << "Found " << numClusters << " clusters" << std::endl;
221 
222  // Create output clusters from the vector of clusters made in FindClusters
223  std::vector<art::PtrVector<recob::Hit> > planeClusters;
224  fBlurredClusteringAlg.ConvertBinsToClusters(image, allClusterBins, planeClusters);
225 
226  // Use the cluster merging algorithm
227  if (fMergeClusters) {
228  int numMergedClusters = fMergeClusterAlg.MergeClusters(planeClusters, finalClusters);
229  mf::LogVerbatim("Blurred Clustering") << "After merging, there are " << numMergedClusters << " clusters" << std::endl;
230  }
231  else finalClusters = planeClusters;
232 
233  // Make the debug PDF
234  if (fCreateDebugPDF) {
235  std::stringstream name;
236  name << "blurred_image";
237  TH2F* imageHist = fBlurredClusteringAlg.MakeHistogram(image, TString(name.str()));
238  name << "_convolved";
239  TH2F* blurredHist = fBlurredClusteringAlg.MakeHistogram(blurred, TString(name.str()));
240  fBlurredClusteringAlg.SaveImage(imageHist, 1, planeIt->first.second, planeIt->first.first);
241  fBlurredClusteringAlg.SaveImage(blurredHist, 2, planeIt->first.second, planeIt->first.first);
242  fBlurredClusteringAlg.SaveImage(blurredHist, allClusterBins, 3, planeIt->first.second, planeIt->first.first);
243  fBlurredClusteringAlg.SaveImage(imageHist, finalClusters, 4, planeIt->first.second, planeIt->first.first);
244  imageHist->Delete();
245  blurredHist->Delete();
246  }
247 
248  } // End min hits check
249 
250  //fBlurredClusteringAlg.fHitMap.clear();
251 
252  // Make the output cluster objects
253  for (std::vector<art::PtrVector<recob::Hit> >::iterator clusIt = finalClusters.begin(); clusIt != finalClusters.end(); ++clusIt) {
254 
255  art::PtrVector<recob::Hit> clusterHits = *clusIt;
256  if (clusterHits.size() > 0) {
257 
258  // Get the start and end wires of the cluster
259  unsigned int startWire = fBlurredClusteringAlg.GlobalWire(clusterHits.front()->WireID());
260  unsigned int endWire = fBlurredClusteringAlg.GlobalWire(clusterHits.back()->WireID());
261 
262  // Put cluster hits in the algorithm
263  ClusterParamAlgo.ImportHits(clusterHits);
264 
265  // Create the recob::Cluster and place in the vector of clusters
266  ClusterCreator cluster(
267  ClusterParamAlgo, // algo
268  float(startWire), // start_wire
269  0., // sigma_start_wire
270  clusterHits.front()->PeakTime(), // start_tick
271  clusterHits.front()->SigmaPeakTime(), // sigma_start_tick
272  float(endWire), // end_wire
273  0., // sigma_end_wire,
274  clusterHits.back()->PeakTime(), // end_tick
275  clusterHits.back()->SigmaPeakTime(), // sigma_end_tick
276  clusters->size(), // ID
277  clusterHits.front()->View(), // view
278  clusterHits.front()->WireID().planeID(), // plane
279  recob::Cluster::Sentry // sentry
280  );
281 
282  clusters->emplace_back(cluster.move());
283 
284  // Associate the hits to this cluster
285  util::CreateAssn(*this, evt, *(clusters.get()), clusterHits, *(associations.get()));
286 
287  } // End this cluster
288 
289  } // End loop over all clusters
290 
291  }
292 
293  evt.put(std::move(clusters));
294  evt.put(std::move(associations));
295 
296  return;
297 
298 }
void SaveImage(TH2F *image, std::vector< art::PtrVector< recob::Hit > > const &allClusters, int pad, int tpc, int plane)
MaybeLogger_< ELseverityLevel::ELsev_info, true > LogVerbatim
SubRunNumber_t subRun() const
Definition: Event.h:72
int FindClusters(std::vector< std::vector< double > > const &image, std::vector< std::vector< int > > &allcluster)
Find clusters in the histogram.
std::vector< std::vector< double > > GaussianBlur(std::vector< std::vector< double > > const &image)
Applies Gaussian blur to image.
int MergeClusters(std::vector< art::PtrVector< recob::Hit > > const &planeClusters, std::vector< art::PtrVector< recob::Hit > > &clusters)
cluster::MergeClusterAlg fMergeClusterAlg
std::vector< art::Ptr< recob::Hit > > SelectShowerHits(int event, const std::vector< art::Ptr< recob::Hit > > &hits, const std::vector< art::Ptr< recob::Track > > &tracks, const std::vector< art::Ptr< recob::SpacePoint > > &spacePoints, const art::FindManyP< recob::Hit > &fmht, const art::FindManyP< recob::Track > &fmth, const art::FindManyP< recob::SpacePoint > &fmspt, const art::FindManyP< recob::Track > &fmtsp)
Cluster finding and building.
static const SentryArgument_t Sentry
An instance of the sentry object.
Definition: Cluster.h:182
ProductID put(std::unique_ptr< PROD > &&product)
Definition: Event.h:102
bool isValid() const
Definition: Handle.h:190
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:265
reference back()
Definition: PtrVector.h:393
void CreateDebugPDF(int run, int subrun, int event)
Create the PDF to save debug images.
void hits()
Definition: readHits.C:15
std::unique_ptr< std::vector< recob::Cluster > > clusters
bool CreateAssn(PRODUCER const &prod, art::Event &evt, std::vector< T > const &a, art::Ptr< U > const &b, art::Assns< U, T > &assn, std::string a_instance, size_t indx=UINT_MAX)
Creates a single one-to-one association.
EventNumber_t event() const
Definition: Event.h:67
size_type size() const
Definition: PtrVector.h:308
shower::TrackShowerSeparationAlg fTrackShowerSeparationAlg
reference front()
Definition: PtrVector.h:379
TH2F * MakeHistogram(std::vector< std::vector< double > > const &image, TString name)
Converts a 2D vector in a histogram for the debug pdf.
cluster::BlurredClusteringAlg fBlurredClusteringAlg
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
Definition: DataViewImpl.h:344
std::vector< std::vector< double > > ConvertRecobHitsToVector(std::vector< art::Ptr< recob::Hit > > const &hits)
Takes hit map and returns a 2D vector representing wire and tick, filled with the charge...
void fill_ptr_vector(std::vector< Ptr< T >> &ptrs, H const &h)
Definition: Ptr.h:464
std::unique_ptr< art::Assns< recob::Cluster, recob::Hit > > associations
RunNumber_t run() const
Definition: Event.h:77
void ConvertBinsToClusters(std::vector< std::vector< double > > const &image, std::vector< std::vector< int > > const &allClusterBins, std::vector< art::PtrVector< recob::Hit > > &clusters)
Takes a vector of clusters (itself a vector of hits) and turns them into clusters using the initial h...
unsigned int GetMinSize()
Minimum size of cluster to save.
int GlobalWire(geo::WireID const &wireID)
Find the global wire position.
void cluster::BlurredClustering::reconfigure ( fhicl::ParameterSet const &  p)

Definition at line 90 of file BlurredClustering_module.cc.

References fBlurredClusteringAlg, fCreateDebugPDF, fGlobalTPCRecon, fHitsModuleLabel, fMergeClusterAlg, fMergeClusters, fPFParticleModuleLabel, fShowerReconOnly, fTrackModuleLabel, fTrackShowerSeparationAlg, fVertexModuleLabel, fhicl::ParameterSet::get(), cluster::MergeClusterAlg::reconfigure(), cluster::BlurredClusteringAlg::reconfigure(), and shower::TrackShowerSeparationAlg::reconfigure().

Referenced by BlurredClustering().

90  {
91  fHitsModuleLabel = p.get<std::string>("HitsModuleLabel");
92  fTrackModuleLabel = p.get<std::string>("TrackModuleLabel");
93  fVertexModuleLabel = p.get<std::string>("VertexModuleLabel");
94  fPFParticleModuleLabel = p.get<std::string>("PFParticleModuleLabel");
95  fCreateDebugPDF = p.get<bool> ("CreateDebugPDF");
96  fMergeClusters = p.get<bool> ("MergeClusters");
97  fGlobalTPCRecon = p.get<bool> ("GlobalTPCRecon");
98  fShowerReconOnly = p.get<bool> ("ShowerReconOnly");
99  fBlurredClusteringAlg.reconfigure(p.get<fhicl::ParameterSet>("BlurredClusterAlg"));
100  fMergeClusterAlg.reconfigure(p.get<fhicl::ParameterSet>("MergeClusterAlg"));
101  fTrackShowerSeparationAlg.reconfigure(p.get<fhicl::ParameterSet>("TrackShowerSeparationAlg"));
102 }
void reconfigure(fhicl::ParameterSet const &pset)
Read in configurable parameters from provided parameter set.
void reconfigure(fhicl::ParameterSet const &p)
cluster::MergeClusterAlg fMergeClusterAlg
void reconfigure(fhicl::ParameterSet const &p)
shower::TrackShowerSeparationAlg fTrackShowerSeparationAlg
cluster::BlurredClusteringAlg fBlurredClusteringAlg
void art::Consumer::showMissingConsumes ( ) const
protectedinherited

Definition at line 125 of file Consumer.cc.

Referenced by art::EDProducer::doEndJob(), art::EDFilter::doEndJob(), art::EDAnalyzer::doEndJob(), and art::RootOutput::endJob().

126 {
127  if (!moduleContext_)
128  return;
129 
130  // If none of the branches have missing consumes statements, exit early.
131  if (std::all_of(cbegin(missingConsumes_),
132  cend(missingConsumes_),
133  [](auto const& perBranch) { return perBranch.empty(); }))
134  return;
135 
136  constexpr cet::HorizontalRule rule{60};
137  mf::LogPrint log{"MTdiagnostics"};
138  log << '\n'
139  << rule('=') << '\n'
140  << "The following consumes (or mayConsume) statements are missing from\n"
141  << module_context(moduleDescription_) << '\n'
142  << rule('-') << '\n';
143 
144  cet::for_all_with_index(
145  missingConsumes_, [&log](std::size_t const i, auto const& perBranch) {
146  for (auto const& pi : perBranch) {
147  log << " "
148  << assemble_consumes_statement(static_cast<BranchType>(i), pi)
149  << '\n';
150  }
151  });
152  log << rule('=');
153 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139
void art::Consumer::validateConsumedProduct ( BranchType const  bt,
ProductInfo const &  pi 
)
protectedinherited

Definition at line 101 of file Consumer.cc.

References art::errors::ProductRegistrationFailure.

103 {
104  // Early exits if consumes tracking has been disabled or if the
105  // consumed product is an allowed consumable.
106  if (!moduleContext_)
107  return;
108 
109  if (cet::binary_search_all(consumables_[bt], pi))
110  return;
111 
112  if (requireConsumes_) {
114  "Consumer: an error occurred during validation of a "
115  "retrieved product\n\n")
116  << "The following consumes (or mayConsume) statement is missing from\n"
117  << module_context(moduleDescription_) << ":\n\n"
118  << " " << assemble_consumes_statement(bt, pi) << "\n\n";
119  }
120 
121  missingConsumes_[bt].insert(pi);
122 }
cet::exempt_ptr< ModuleDescription const > moduleDescription_
Definition: Consumer.h:140
bool requireConsumes_
Definition: Consumer.h:137
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
Definition: Exception.h:66
constexpr T pi()
Returns the constant pi (up to 35 decimal digits of precision)
ConsumableProducts consumables_
Definition: Consumer.h:138
bool moduleContext_
Definition: Consumer.h:136
ConsumableProductSets missingConsumes_
Definition: Consumer.h:139

Member Data Documentation

std::unique_ptr<art::Assns<recob::Cluster,recob::Hit> > cluster::BlurredClustering::associations
private

Definition at line 76 of file BlurredClustering_module.cc.

Referenced by produce().

std::unique_ptr<std::vector<recob::Cluster> > cluster::BlurredClustering::clusters
private

Definition at line 75 of file BlurredClustering_module.cc.

Referenced by produce().

cluster::BlurredClusteringAlg cluster::BlurredClustering::fBlurredClusteringAlg
private

Definition at line 70 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

bool cluster::BlurredClustering::fCreateDebugPDF
private

Definition at line 67 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

int cluster::BlurredClustering::fEvent
private

Definition at line 65 of file BlurredClustering_module.cc.

Referenced by produce().

bool cluster::BlurredClustering::fGlobalTPCRecon
private

Definition at line 67 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

std::string cluster::BlurredClustering::fHitsModuleLabel
private

Definition at line 66 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

cluster::MergeClusterAlg cluster::BlurredClustering::fMergeClusterAlg
private

Definition at line 71 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

bool cluster::BlurredClustering::fMergeClusters
private

Definition at line 67 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

std::string cluster::BlurredClustering::fPFParticleModuleLabel
private

Definition at line 66 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

int cluster::BlurredClustering::fRun
private

Definition at line 65 of file BlurredClustering_module.cc.

Referenced by produce().

bool cluster::BlurredClustering::fShowerReconOnly
private

Definition at line 67 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

int cluster::BlurredClustering::fSubrun
private

Definition at line 65 of file BlurredClustering_module.cc.

Referenced by produce().

std::string cluster::BlurredClustering::fTrackModuleLabel
private

Definition at line 66 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

shower::TrackShowerSeparationAlg cluster::BlurredClustering::fTrackShowerSeparationAlg
private

Definition at line 72 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().

std::string cluster::BlurredClustering::fVertexModuleLabel
private

Definition at line 66 of file BlurredClustering_module.cc.

Referenced by produce(), and reconfigure().


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