LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
vertex::VertexMatch Class Reference
Inheritance diagram for vertex::VertexMatch:
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

 VertexMatch (fhicl::ParameterSet const &pset)
 
virtual ~VertexMatch ()
 
void produce (art::Event &evt)
 
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

std::string fVertexModuleLabel
 
std::string fHoughModuleLabel
 
double fMaxDistance
 

Detailed Description

Definition at line 59 of file VertexMatch_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

vertex::VertexMatch::VertexMatch ( fhicl::ParameterSet const &  pset)
explicit

Definition at line 79 of file VertexMatch_module.cc.

80  : fVertexModuleLabel(pset.get< std::string >("VertexModuleLabel"))
81  , fHoughModuleLabel (pset.get< std::string >("HoughModuleLabel"))
82  , fMaxDistance (pset.get< double >("MaxDistance"))
83 {
84  produces< std::vector<recob::EndPoint2D> >();
85  produces< art::Assns<recob::EndPoint2D, recob::Hit> >();
86 }
std::string fVertexModuleLabel
vertex::VertexMatch::~VertexMatch ( )
virtual

Definition at line 89 of file VertexMatch_module.cc.

90 {
91 }

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 vertex::VertexMatch::produce ( art::Event evt)
virtual

Implements art::EDProducer.

Definition at line 108 of file VertexMatch_module.cc.

References art::PtrVector< T >::begin(), art::PtrVector< T >::clear(), util::CreateAssn(), DEFINE_ART_MODULE, art::PtrVector< T >::end(), fHoughModuleLabel, fMaxDistance, fVertexModuleLabel, art::DataViewImpl::getByLabel(), geo::GeometryCore::IteratePlaneIDs(), n, geo::PlaneID::Plane, geo::WireID::planeID(), art::PtrVector< T >::push_back(), art::Event::put(), art::PtrVector< T >::size(), sort_pred(), sort_pred2(), and geo::GeometryCore::View().

109 {
110 
112  evt.getByLabel(fVertexModuleLabel,vertexListHandle);
113 
115  evt.getByLabel(fHoughModuleLabel,houghListHandle);
116 
117  std::unique_ptr<std::vector<recob::EndPoint2D> > mvertexcol(new std::vector<recob::EndPoint2D>);
118  std::unique_ptr< art::Assns<recob::EndPoint2D, recob::Hit> > assn(new art::Assns<recob::EndPoint2D, recob::Hit>);
119 
121  //hits associated with a vertex
122  std::vector< art::Ptr<recob::Hit> > vHits;
123  art::PtrVector<recob::Hit> vertexhit;
124 
125  std::vector<double> weakvertexstrength; //strength of weak vertices
126  std::vector<double> strongvertexstrength; //strength of strong vertices
127  //hits associated with a hough line
128  std::vector< art::Ptr<recob::Hit> > hHits;
130 
131  //art::PtrVector< std::pair<recob::Hit,double> > matchedvertex;//vertices associated with a hough line
132 
133  std::vector< std::pair<art::Ptr<recob::Hit>, double> > matchedvertex;
134 
135  art::PtrVector<recob::Hit> strongvertex;
136  std::vector< std::pair<art::Ptr<recob::Hit>, double> > strongestvertex; //the strongest strong vertex
137 
139 
140  for(size_t ii = 0; ii < vertexListHandle->size(); ++ii){
141  art::Ptr<recob::EndPoint2D> vertex(vertexListHandle, ii);
142  vertIn.push_back(vertex);
143  }
144 
145  art::FindManyP<recob::Hit> fmh(vertexListHandle, evt, fVertexModuleLabel);
146 
148  for(size_t ii = 0; ii < houghListHandle->size(); ++ii){
149  art::Ptr<recob::Cluster> cluster(houghListHandle, ii);
150  houghIn.push_back(cluster);
151  }
152 
153  art::FindManyP<recob::Hit> fmhh(houghListHandle, evt, fHoughModuleLabel);
154 
155  uint32_t channel = 0;
156  uint32_t wire = 0;
157  geo::PlaneID planeID(999,999,999);
158  geo::WireID wireID;
159  double slope,intercept,distance;
160  double starttime, endtime;
161  int startwire, endwire;
162  double strength; //the strength of a strong vertex
163 
164  for(auto const& pid : geom->IteratePlaneIDs() ){
165  //create the vector of vertex hits
168  for(size_t v = 0; v < vertIn.size(); ++v){
169  // vHits = (*vertexIter)->Hits(p,-1);
170  // if(vHits.size() > 0){
171  // vertexhit.insert(vertexhit.end(),vHits.begin(),vHits.end());
172  // weakvertexstrength.push_back((*vertexIter)->Strength());
173  // }
174  vHits = fmh.at(v);
175  if(vHits.size() > 0){
176  art::PtrVector<recob::Hit>::const_iterator vertexhitIter = vHits.begin();
177  while (vertexhitIter != vHits.end()){
178  vertexhit.push_back((*vertexhitIter));
179  weakvertexstrength.push_back((*vertexIter)->Strength());
180  vertexhitIter++;
181  }
182  }
183 
184  }// end loop over vertIn
185 
186 
187  if(vHits.size() == 0)
188  continue;
189 
190  vHits.clear();
191  //loop over vector of hough lines and find the vertex hits that are associated with the hough line(s)
192  houghIter = houghIn.begin();
193  size_t ctr = 0;
194  while(houghIter!= houghIn.end()){
195  houghhit.clear();
196  hHits.clear();
197  planeID.Plane = 999;
198  distance = -1.;
199  //create vector of hits associated with hough line
200  hHits = fmhh.at(ctr);
201 
202  if(hHits.size() > 0){
203 
204  art::PtrVector<recob::Hit>::const_iterator hitIter = hHits.begin();
205  while (hitIter!=hHits.end()){
206  houghhit.push_back((*hitIter));
207  hitIter++;
208  }
209  }
210  if(houghhit.size()){
211  wire = houghhit[0]->WireID().Wire;
212  wireID = houghhit[0]->WireID(); //for update to EndPoint2D ... WK 4/22/13
213  planeID = wireID.planeID();
214  }
215  if(pid == planeID){
216  slope = std::atan((*houghIter)->StartAngle());
217  intercept=(*houghIter)->StartTick() - slope*(*houghIter)->StartWire();
218  for(unsigned int i=0;i < vertexhit.size(); i++){
219 
220  distance=-1;
221  wire = vertexhit[i]->WireID().Wire;
222  wireID = vertexhit[i]->WireID(); //for update to EndPoint2D ... WK 4/22/13
223 
224  starttime=(*houghIter)->StartTick();
225  endtime=(*houghIter)->EndTick();
226  startwire=(*houghIter)->StartWire();
227  endwire=(*houghIter)->EndWire();
228 
229  //require the vertices found with HarrisVertexFinder to match up with the endpoints
230  //(within a window) of a Hough line. A strong vertex matches up with at least two Hough lines.
231  if(((std::abs((int)(wire-startwire))<fMaxDistance*.0743)
232  ||(std::abs((int)(wire-endwire))<fMaxDistance*.0743)
233  )
234  &&((std::abs(vertexhit[i]->PeakTime()-starttime)<fMaxDistance)
235  ||(std::abs(vertexhit[i]->PeakTime()-endtime)<fMaxDistance)
236  ))
237  distance=(std::abs(vertexhit[i]->PeakTime()-slope*(double)wire-intercept)/(std::sqrt(pow(.0743*slope,2)+1)));
238 
239  if(distance<(fMaxDistance+vertexhit[i]->RMS())&&distance>-1)
240  matchedvertex.emplace_back(vertexhit[i],
241  weakvertexstrength[i]*std::sqrt(std::pow(std::abs(endwire-startwire)*.0743,2)
242  +std::pow(std::abs(endtime-starttime),2)));
243  //ala strongestvertex.push_back(std::pair<art::PtrVector<recob::Hit>,double>(matchedvertex[i].first,strength));
244  }
245  }
246 
247  if(vertexhit.size() == 0 || houghhit.size() == 0){
248  houghIter++;
249  ++ctr;
250  continue;
251  }
252 
253  if(vertexIter!=vertIn.end()) vertexIter++;
254  if(houghIter!=houghIn.end()){
255  houghIter++;
256  ++ctr;
257  }
258  }
259 
260  //sort matchedvertex vector to make it easy to find duplicate entries (strong vertices)
261  std::sort(matchedvertex.rbegin(), matchedvertex.rend(),sort_pred);
262 
263  // the "strength" of a strong vertex is defined as
264  // (HarrisVertexStrength*LengthofHoughLine)_1+(HarrisVertexStrength*LengthofHoughLine)_2+...
265  // ...+(HarrisVertexStrength*LengthofHoughLine)_n, where n is the number of vertices
266  // associated with a Hough Line
267  for(unsigned int i=0;i < matchedvertex.size(); i++){
268  strength=matchedvertex[i].second;
269 
270  for(unsigned int n=1;n < matchedvertex.size() && i>=n; n++)
271  if(matchedvertex[i].first==matchedvertex[i-n].first)
272  strength+=matchedvertex[i-n].second;
273 
274  strongvertexstrength.push_back(strength);
275  //make sure there is more than one Hough Line associated with the vertex
276 
277  if(strength>matchedvertex[i].second)
278  strongestvertex.emplace_back(matchedvertex[i].first,strength);
279  }
280 
281 
282  //sort the strength of the strong vertices to find the strongest vertex
283  std::sort(strongestvertex.rbegin(), strongestvertex.rend(),sort_pred2);
284  for(unsigned int i=0;i < matchedvertex.size(); i++){
285  // I think this is grabbing first item in pair, itself a pointer then grabbing first
286  // (.begin()) one of those. EC, 18-Oct-2010.
287  channel=(matchedvertex[i].first)->Channel();
288 
289  // strongvertex, despite name, is a hit vector.
290  strongvertex.push_back(matchedvertex[i].first);
291 
292  //find the strong vertices, those vertices that have been
293  // associated with more than one hough line
294  int id = 0;
295  if(i > 0){
296  if(matchedvertex[i].first==matchedvertex[i-1].first){
297  if(strongvertex[0]==(strongestvertex[0].first)&&strongestvertex.size()>0)
298  id = 4;//the strongest strong vertex is given a vertex id=4
299  else
300  id = 3;//strong vertices are given vertex id=3
301  }
302  }
303  else{
304  // weak vertices that have been associated with an endpoint of
305  // a single Hough line are given vertex id=2
306  id = 2;
307  }
308 
309  // strongvertex is a collection of hits
310  double totalQ = 0.;
311  for(size_t h = 0; h < strongvertex.size(); ++h) totalQ += strongvertex[h]->Integral();
312 
313  recob::EndPoint2D vertex((matchedvertex[i].first)->PeakTime(),
314  wireID,
315  strongvertexstrength[i],
316  id,
317  geom->View(channel),
318  totalQ);
319 
320  mvertexcol->push_back(vertex);
321 
322  util::CreateAssn(*this, evt, *(mvertexcol.get()), strongvertex, *(assn.get()));
323 
324  strongvertex.clear();
325 
326  }
327 
328  strongestvertex.clear();
329  matchedvertex.clear();
330  vertexhit.clear();
331  }// end loop over planeIDs
332 
333  evt.put(std::move(mvertexcol));
334  evt.put(std::move(assn));
335 }
PlaneID const & planeID() const
Definition: geo_types.h:355
iterator begin()
Definition: PtrVector.h:223
The data type to uniquely identify a Plane.
Definition: geo_types.h:250
Cluster finding and building.
bool sort_pred2(const std::pair< art::Ptr< recob::Hit >, double > &left, const std::pair< art::Ptr< recob::Hit >, double > &right)
IteratorBox< plane_id_iterator,&GeometryCore::begin_plane_id,&GeometryCore::end_plane_id > IteratePlaneIDs() const
Enables ranged-for loops on all plane IDs of the detector.
ProductID put(std::unique_ptr< PROD > &&product)
Definition: Event.h:102
void push_back(Ptr< U > const &p)
Definition: PtrVector.h:441
std::string fVertexModuleLabel
iterator end()
Definition: PtrVector.h:237
bool sort_pred(const std::pair< art::Ptr< recob::Hit >, double > &left, const std::pair< art::Ptr< recob::Hit >, double > &right)
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.
View_t View(geo::PlaneID const &pid) const
Returns the view (wire orientation) on the channels of specified TPC plane.
size_type size() const
Definition: PtrVector.h:308
data_t::const_iterator const_iterator
Definition: PtrVector.h:61
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
Definition: DataViewImpl.h:344
Char_t n[5]
void clear()
Definition: PtrVector.h:537
Definition: fwd.h:25
vertex reconstruction
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::string vertex::VertexMatch::fHoughModuleLabel
private

Definition at line 69 of file VertexMatch_module.cc.

Referenced by produce().

double vertex::VertexMatch::fMaxDistance
private

Definition at line 70 of file VertexMatch_module.cc.

Referenced by produce().

std::string vertex::VertexMatch::fVertexModuleLabel
private

Definition at line 68 of file VertexMatch_module.cc.

Referenced by produce().


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