CMS 3D CMS Logo

HitPairEDProducer.cc
Go to the documentation of this file.
11 
20 
21 namespace {
22  class ImplBase;
23 }
24 
26 public:
27  HitPairEDProducer(const edm::ParameterSet& iConfig);
28  ~HitPairEDProducer() override = default;
29 
30  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
31 
32  void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override;
33 
34 private:
36 
37  std::unique_ptr<::ImplBase> impl_;
38 };
39 
40 namespace {
41  class ImplBase {
42  public:
43  ImplBase(const edm::ParameterSet& iConfig);
44  virtual ~ImplBase() = default;
45 
46  virtual void produces(edm::ProducesCollector) const = 0;
47 
48  virtual void produce(const bool clusterCheckOk, edm::Event& iEvent, const edm::EventSetup& iSetup) = 0;
49 
50  protected:
51  edm::RunningAverage localRA_;
52  const unsigned int maxElement_;
53  const unsigned int maxElementTotal_;
54 
56  std::vector<unsigned> layerPairBegins_;
57  };
58  ImplBase::ImplBase(const edm::ParameterSet& iConfig)
59  : maxElement_(iConfig.getParameter<unsigned int>("maxElement")),
60  maxElementTotal_(iConfig.getParameter<unsigned int>("maxElementTotal")),
61  generator_(0, 1, nullptr, maxElement_), // these indices are dummy, TODO: cleanup HitPairGeneratorFromLayerPair
62  layerPairBegins_(iConfig.getParameter<std::vector<unsigned>>("layerPairs")) {
63  if (layerPairBegins_.empty())
64  throw cms::Exception("Configuration")
65  << "HitPairEDProducer requires at least index for layer pairs (layerPairs parameter), none was given";
66  }
67 
69  template <typename T_SeedingHitSets, typename T_IntermediateHitDoublets, typename T_RegionLayers>
70  class Impl : public ImplBase {
71  public:
72  template <typename... Args>
73  Impl(const edm::ParameterSet& iConfig, Args&&... args)
74  : ImplBase(iConfig), regionsLayers_(&layerPairBegins_, std::forward<Args>(args)...) {}
75  ~Impl() override = default;
76 
77  void produces(edm::ProducesCollector producesCollector) const override {
78  T_SeedingHitSets::produces(producesCollector);
79  T_IntermediateHitDoublets::produces(producesCollector);
80  }
81 
82  void produce(const bool clusterCheckOk, edm::Event& iEvent, const edm::EventSetup& iSetup) override {
83  auto regionsLayers = regionsLayers_.beginEvent(iEvent);
84 
85  auto seedingHitSetsProducer = T_SeedingHitSets(&localRA_);
86  auto intermediateHitDoubletsProducer = T_IntermediateHitDoublets(regionsLayers.seedingLayerSetsHitsPtr());
87 
88  if (!clusterCheckOk) {
89  seedingHitSetsProducer.putEmpty(iEvent);
90  intermediateHitDoubletsProducer.putEmpty(iEvent);
91  return;
92  }
93 
94  seedingHitSetsProducer.reserve(regionsLayers.regionsSize());
95  intermediateHitDoubletsProducer.reserve(regionsLayers.regionsSize());
96 
97  unsigned int nDoublets = 0;
98 
99  for (const auto& regionLayers : regionsLayers) {
100  const TrackingRegion& region = regionLayers.region();
101  auto hitCachePtr_filler_shs = seedingHitSetsProducer.beginRegion(&region, nullptr);
102  auto hitCachePtr_filler_ihd =
103  intermediateHitDoubletsProducer.beginRegion(&region, std::get<0>(hitCachePtr_filler_shs));
104  auto hitCachePtr = std::get<0>(hitCachePtr_filler_ihd);
105 
106  for (SeedingLayerSetsHits::SeedingLayerSet layerSet : regionLayers.layerPairs()) {
107  auto doublets = generator_.doublets(region, iEvent, iSetup, layerSet, *hitCachePtr);
108  LogTrace("HitPairEDProducer") << " created " << doublets.size() << " doublets for layers "
109  << layerSet[0].index() << "," << layerSet[1].index();
110  if (doublets.empty())
111  continue; // don't bother if no pairs from these layers
112  nDoublets += doublets.size();
113  if (nDoublets >= maxElementTotal_) {
114  edm::LogError("TooManyPairs") << "number of total pairs exceed maximum, no pairs produced";
115  auto seedingHitSetsProducerDummy = T_SeedingHitSets(&localRA_);
116  auto intermediateHitDoubletsProducerDummy =
117  T_IntermediateHitDoublets(regionsLayers.seedingLayerSetsHitsPtr());
118  seedingHitSetsProducerDummy.putEmpty(iEvent);
119  intermediateHitDoubletsProducerDummy.putEmpty(iEvent);
120  return;
121  }
122  seedingHitSetsProducer.fill(std::get<1>(hitCachePtr_filler_shs), doublets);
123  intermediateHitDoubletsProducer.fill(std::get<1>(hitCachePtr_filler_ihd), layerSet, std::move(doublets));
124  }
125  }
126 
127  seedingHitSetsProducer.put(iEvent);
128  intermediateHitDoubletsProducer.put(iEvent);
129  }
130 
131  private:
132  T_RegionLayers regionsLayers_;
133  };
134 
136  class DoNothing {
137  public:
138  DoNothing(const SeedingLayerSetsHits*) {}
139  DoNothing(edm::RunningAverage*) {}
140 
141  static void produces(edm::ProducesCollector){};
142 
143  void reserve(size_t) {}
144 
145  auto beginRegion(const TrackingRegion*, LayerHitMapCache* ptr) { return std::make_tuple(ptr, 0); }
146 
147  void fill(int, const HitDoublets&) {}
149 
150  void put(edm::Event&) {}
151  void putEmpty(edm::Event&) {}
152  };
153 
155  class ImplSeedingHitSets {
156  public:
157  ImplSeedingHitSets(edm::RunningAverage* localRA)
158  : seedingHitSets_(std::make_unique<RegionsSeedingHitSets>()), localRA_(localRA) {}
159 
160  static void produces(edm::ProducesCollector producesCollector) {
161  producesCollector.produces<RegionsSeedingHitSets>();
162  }
163 
164  void reserve(size_t regionsSize) { seedingHitSets_->reserve(regionsSize, localRA_->upper()); }
165 
166  auto beginRegion(const TrackingRegion* region, LayerHitMapCache*) {
167  hitCacheTmp_.clear();
168  return std::make_tuple(&hitCacheTmp_, seedingHitSets_->beginRegion(region));
169  }
170 
172  for (size_t i = 0, size = doublets.size(); i < size; ++i) {
173  filler.emplace_back(doublets.hit(i, HitDoublets::inner), doublets.hit(i, HitDoublets::outer));
174  }
175  }
176 
177  void put(edm::Event& iEvent) {
178  seedingHitSets_->shrink_to_fit();
179  localRA_->update(seedingHitSets_->size());
180  putEmpty(iEvent);
181  }
182 
183  void putEmpty(edm::Event& iEvent) { iEvent.put(std::move(seedingHitSets_)); }
184 
185  private:
186  std::unique_ptr<RegionsSeedingHitSets> seedingHitSets_;
187  edm::RunningAverage* localRA_;
188  LayerHitMapCache hitCacheTmp_; // used if !produceIntermediateHitDoublets
189  };
190 
192  class ImplIntermediateHitDoublets {
193  public:
194  ImplIntermediateHitDoublets(const SeedingLayerSetsHits* layers)
195  : intermediateHitDoublets_(std::make_unique<IntermediateHitDoublets>(layers)), layers_(layers) {}
196 
197  static void produces(edm::ProducesCollector producesCollector) {
198  producesCollector.produces<IntermediateHitDoublets>();
199  }
200 
201  void reserve(size_t regionsSize) { intermediateHitDoublets_->reserve(regionsSize, layers_->size()); }
202 
203  auto beginRegion(const TrackingRegion* region, LayerHitMapCache*) {
204  auto filler = intermediateHitDoublets_->beginRegion(region);
205  return std::make_tuple(&(filler.layerHitMapCache()), std::move(filler));
206  }
207 
210  HitDoublets&& doublets) {
211  filler.addDoublets(layerSet, std::move(doublets));
212  }
213 
214  void put(edm::Event& iEvent) {
215  intermediateHitDoublets_->shrink_to_fit();
216  putEmpty(iEvent);
217  }
218 
219  void putEmpty(edm::Event& iEvent) { iEvent.put(std::move(intermediateHitDoublets_)); }
220 
221  private:
222  std::unique_ptr<IntermediateHitDoublets> intermediateHitDoublets_;
223  const SeedingLayerSetsHits* layers_;
224  };
225 
227  // For the usual case that TrackingRegions and seeding layers are read separately
228  class RegionsLayersSeparate {
229  public:
230  class RegionLayers {
231  public:
232  RegionLayers(const TrackingRegion* region, const std::vector<SeedingLayerSetsHits::SeedingLayerSet>* layerPairs)
233  : region_(region), layerPairs_(layerPairs) {}
234 
235  const TrackingRegion& region() const { return *region_; }
236  const std::vector<SeedingLayerSetsHits::SeedingLayerSet>& layerPairs() const { return *layerPairs_; }
237 
238  private:
239  const TrackingRegion* region_;
240  const std::vector<SeedingLayerSetsHits::SeedingLayerSet>* layerPairs_;
241  };
242 
243  class EventTmp {
244  public:
245  class const_iterator {
246  public:
247  using internal_iterator_type = edm::OwnVector<TrackingRegion>::const_iterator;
248  using value_type = RegionLayers;
249  using difference_type = internal_iterator_type::difference_type;
250 
251  const_iterator(internal_iterator_type iter,
252  const std::vector<SeedingLayerSetsHits::SeedingLayerSet>* layerPairs)
253  : iter_(iter), layerPairs_(layerPairs) {}
254 
255  value_type operator*() const { return value_type(&(*iter_), layerPairs_); }
256 
257  const_iterator& operator++() {
258  ++iter_;
259  return *this;
260  }
261  const_iterator operator++(int) {
262  const_iterator clone(*this);
263  ++(*this);
264  return clone;
265  }
266 
267  bool operator==(const const_iterator& other) const { return iter_ == other.iter_; }
268  bool operator!=(const const_iterator& other) const { return !operator==(other); }
269 
270  private:
271  internal_iterator_type iter_;
272  const std::vector<SeedingLayerSetsHits::SeedingLayerSet>* layerPairs_;
273  };
274 
275  EventTmp(const SeedingLayerSetsHits* seedingLayerSetsHits,
277  const std::vector<unsigned>& layerPairBegins)
278  : seedingLayerSetsHits_(seedingLayerSetsHits), regions_(regions) {
279  // construct the pairs from the sets
280  if (seedingLayerSetsHits_->numberOfLayersInSet() > 2) {
281  for (const auto& layerSet : *seedingLayerSetsHits_) {
282  for (const auto pairBeginIndex : layerPairBegins) {
283  if (pairBeginIndex + 1 >= seedingLayerSetsHits->numberOfLayersInSet()) {
284  throw cms::Exception("LogicError")
285  << "Layer pair index " << pairBeginIndex
286  << " is out of bounds, input SeedingLayerSetsHits has only "
287  << seedingLayerSetsHits->numberOfLayersInSet()
288  << " layers per set, and the index+1 must be < than the number of layers in set";
289  }
290 
291  // Take only the requested pair of the set
292  SeedingLayerSetsHits::SeedingLayerSet pairCandidate = layerSet.slice(pairBeginIndex, pairBeginIndex + 1);
293 
294  // it would be trivial to use 128-bit bitfield for O(1) check
295  // if a layer pair has been inserted, but let's test first how
296  // a "straightforward" solution works
297  auto found = std::find_if(
298  layerPairs.begin(), layerPairs.end(), [&](const SeedingLayerSetsHits::SeedingLayerSet& pair) {
299  return pair[0].index() == pairCandidate[0].index() && pair[1].index() == pairCandidate[1].index();
300  });
301  if (found != layerPairs.end())
302  continue;
303 
304  layerPairs.push_back(pairCandidate);
305  }
306  }
307  } else {
308  if (layerPairBegins.size() != 1) {
309  throw cms::Exception("LogicError")
310  << "With pairs of input layers, it doesn't make sense to specify more than one input layer pair, got "
311  << layerPairBegins.size();
312  }
313  if (layerPairBegins[0] != 0) {
314  throw cms::Exception("LogicError")
315  << "With pairs of input layers, it doesn't make sense to specify other input layer pair than 0; got "
316  << layerPairBegins[0];
317  }
318 
319  layerPairs.reserve(seedingLayerSetsHits->size());
320  for (const auto& set : *seedingLayerSetsHits)
321  layerPairs.push_back(set);
322  }
323  }
324 
325  const SeedingLayerSetsHits* seedingLayerSetsHitsPtr() const { return seedingLayerSetsHits_; }
326 
327  size_t regionsSize() const { return regions_->size(); }
328 
329  const_iterator begin() const { return const_iterator(regions_->begin(), &layerPairs); }
330  const_iterator cbegin() const { return begin(); }
331  const_iterator end() const { return const_iterator(regions_->end(), &layerPairs); }
332  const_iterator cend() const { return end(); }
333 
334  private:
335  const SeedingLayerSetsHits* seedingLayerSetsHits_;
336  const edm::OwnVector<TrackingRegion>* regions_;
337  std::vector<SeedingLayerSetsHits::SeedingLayerSet> layerPairs;
338  };
339 
340  RegionsLayersSeparate(const std::vector<unsigned>* layerPairBegins,
341  const edm::InputTag& seedingLayerTag,
342  const edm::InputTag& regionTag,
344  : layerPairBegins_(layerPairBegins),
345  seedingLayerToken_(iC.consumes<SeedingLayerSetsHits>(seedingLayerTag)),
346  regionToken_(iC.consumes<edm::OwnVector<TrackingRegion>>(regionTag)) {}
347 
348  EventTmp beginEvent(const edm::Event& iEvent) const {
350  iEvent.getByToken(seedingLayerToken_, hlayers);
351  const auto* layers = hlayers.product();
352  if (layers->numberOfLayersInSet() < 2)
353  throw cms::Exception("LogicError")
354  << "HitPairEDProducer expects SeedingLayerSetsHits::numberOfLayersInSet() to be >= 2, got "
355  << layers->numberOfLayersInSet()
356  << ". This is likely caused by a configuration error of this module, or SeedingLayersEDProducer.";
358  iEvent.getByToken(regionToken_, hregions);
359 
360  return EventTmp(layers, hregions.product(), *layerPairBegins_);
361  }
362 
363  private:
364  const std::vector<unsigned>* layerPairBegins_;
365  edm::EDGetTokenT<SeedingLayerSetsHits> seedingLayerToken_;
367  };
368 
370  // For the case of automated pixel inactive region recovery where
371  // TrackingRegions and seeding layers become together
372  class RegionsLayersTogether {
373  public:
374  class EventTmp {
375  public:
377 
378  explicit EventTmp(const TrackingRegionsSeedingLayerSets* regionsLayers) : regionsLayers_(regionsLayers) {
379  if (regionsLayers->seedingLayerSetsHits().numberOfLayersInSet() != 2) {
380  throw cms::Exception("LogicError")
381  << "With trackingRegionsSeedingLayers input, the seeding layer sets may only contain layer pairs, now "
382  "got sets with "
383  << regionsLayers->seedingLayerSetsHits().numberOfLayersInSet() << " layers";
384  }
385  }
386 
387  const SeedingLayerSetsHits* seedingLayerSetsHitsPtr() const { return &(regionsLayers_->seedingLayerSetsHits()); }
388 
389  size_t regionsSize() const { return regionsLayers_->regionsSize(); }
390 
391  const_iterator begin() const { return regionsLayers_->begin(); }
392  const_iterator cbegin() const { return begin(); }
393  const_iterator end() const { return regionsLayers_->end(); }
394  const_iterator cend() const { return end(); }
395 
396  private:
397  const TrackingRegionsSeedingLayerSets* regionsLayers_;
398  };
399 
400  RegionsLayersTogether(const std::vector<unsigned>* layerPairBegins,
401  const edm::InputTag& regionLayerTag,
403  : regionLayerToken_(iC.consumes<TrackingRegionsSeedingLayerSets>(regionLayerTag)) {
404  if (layerPairBegins->size() != 1) {
405  throw cms::Exception("LogicError") << "With trackingRegionsSeedingLayers mode, it doesn't make sense to "
406  "specify more than one input layer pair, got "
407  << layerPairBegins->size();
408  }
409  if ((*layerPairBegins)[0] != 0) {
410  throw cms::Exception("LogicError") << "With trackingRegionsSeedingLayers mode, it doesn't make sense to "
411  "specify other input layer pair than 0; got "
412  << (*layerPairBegins)[0];
413  }
414  }
415 
416  EventTmp beginEvent(const edm::Event& iEvent) const {
418  iEvent.getByToken(regionLayerToken_, hregions);
419  return EventTmp(hregions.product());
420  }
421 
422  private:
424  };
425 } // namespace
426 
428  auto layersTag = iConfig.getParameter<edm::InputTag>("seedingLayers");
429  auto regionTag = iConfig.getParameter<edm::InputTag>("trackingRegions");
430  auto regionLayerTag = iConfig.getParameter<edm::InputTag>("trackingRegionsSeedingLayers");
431  const bool useRegionLayers = !regionLayerTag.label().empty();
432  if (useRegionLayers) {
433  if (!regionTag.label().empty()) {
434  throw cms::Exception("Configuration")
435  << "HitPairEDProducer requires either trackingRegions or trackingRegionsSeedingLayers to be set, now both "
436  "are set to non-empty value. Set the unneeded parameter to empty value.";
437  }
438  if (!layersTag.label().empty()) {
439  throw cms::Exception("Configuration")
440  << "With non-empty trackingRegionsSeedingLayers, please set also seedingLayers to empty value to reduce "
441  "confusion, because the parameter is not used";
442  }
443  }
444  if (regionTag.label().empty() && regionLayerTag.label().empty()) {
445  throw cms::Exception("Configuration")
446  << "HitPairEDProducer requires either trackingRegions or trackingRegionsSeedingLayers to be set, now both are "
447  "set to empty value. Set the needed parameter to a non-empty value.";
448  }
449 
450  const bool produceSeedingHitSets = iConfig.getParameter<bool>("produceSeedingHitSets");
451  const bool produceIntermediateHitDoublets = iConfig.getParameter<bool>("produceIntermediateHitDoublets");
452 
454  if (useRegionLayers)
455  throw cms::Exception("Configuration")
456  << "Mode 'trackingRegionsSeedingLayers' makes sense only with 'produceSeedingHitsSets', now also "
457  "'produceIntermediateHitDoublets is active";
458  impl_ = std::make_unique<::Impl<::ImplSeedingHitSets, ::ImplIntermediateHitDoublets, ::RegionsLayersSeparate>>(
459  iConfig, layersTag, regionTag, consumesCollector());
460  } else if (produceSeedingHitSets) {
461  if (useRegionLayers) {
462  impl_ = std::make_unique<::Impl<::ImplSeedingHitSets, ::DoNothing, ::RegionsLayersTogether>>(
463  iConfig, regionLayerTag, consumesCollector());
464  } else {
465  impl_ = std::make_unique<::Impl<::ImplSeedingHitSets, ::DoNothing, ::RegionsLayersSeparate>>(
466  iConfig, layersTag, regionTag, consumesCollector());
467  }
468  } else if (produceIntermediateHitDoublets) {
469  if (useRegionLayers)
470  throw cms::Exception("Configuration")
471  << "Mode 'trackingRegionsSeedingLayers' makes sense only with 'produceSeedingHitsSets', now "
472  "'produceIntermediateHitDoublets is active instead";
473  impl_ = std::make_unique<::Impl<::DoNothing, ::ImplIntermediateHitDoublets, ::RegionsLayersSeparate>>(
474  iConfig, layersTag, regionTag, consumesCollector());
475  } else
476  throw cms::Exception("Configuration")
477  << "HitPairEDProducer requires either produceIntermediateHitDoublets or produceSeedingHitSets to be True. If "
478  "neither are needed, just remove this module from your sequence/path as it doesn't do anything useful";
479 
480  auto clusterCheckTag = iConfig.getParameter<edm::InputTag>("clusterCheck");
481  if (!clusterCheckTag.label().empty())
482  clusterCheckToken_ = consumes<bool>(clusterCheckTag);
483 
484  impl_->produces(producesCollector());
485 }
486 
489 
490  desc.add<edm::InputTag>("seedingLayers", edm::InputTag("seedingLayersEDProducer"))
491  ->setComment("Set this empty if 'trackingRegionsSeedingLayers' is non-empty");
492  desc.add<edm::InputTag>("trackingRegions", edm::InputTag("globalTrackingRegionFromBeamSpot"))
493  ->setComment(
494  "Input tracking regions when using all layer sets in 'seedingLayers' (conflicts with "
495  "'trackingRegionsSeedingLayers', set this empty to use the other)");
496  desc.add<edm::InputTag>("trackingRegionsSeedingLayers", edm::InputTag(""))
497  ->setComment(
498  "Input tracking regions and corresponding layer sets in case of dynamically limiting the seeding layers "
499  "(conflicts with 'trackingRegions', set this empty to use the other; if using this set also 'seedingLayers' "
500  "to empty)");
501  desc.add<edm::InputTag>("clusterCheck", edm::InputTag("trackerClusterCheck"));
502  desc.add<bool>("produceSeedingHitSets", false);
503  desc.add<bool>("produceIntermediateHitDoublets", false);
504  desc.add<unsigned int>("maxElement", 1000000);
505  desc.add<unsigned int>("maxElementTotal", 50000000);
506  desc.add<std::vector<unsigned>>("layerPairs", std::vector<unsigned>{0})
507  ->setComment("Indices to the pairs of consecutive layers, i.e. 0 means (0,1), 1 (1,2) etc.");
508 
509  descriptions.add("hitPairEDProducerDefault", desc);
510 }
511 
513  bool clusterCheckOk = true;
515  edm::Handle<bool> hclusterCheck;
516  iEvent.getByToken(clusterCheckToken_, hclusterCheck);
517  clusterCheckOk = *hclusterCheck;
518  }
519 
520  impl_->produce(clusterCheckOk, iEvent, iSetup);
521 }
522 
ConfigurationDescriptions.h
RunningAverage.h
writedatasetfile.args
args
Definition: writedatasetfile.py:18
IntermediateHitDoublets::RegionFiller
Helper class enforcing correct way of filling the doublets of a region.
Definition: IntermediateHitDoublets.h:174
put
void put(edm::Event &evt, double value, const char *instanceName)
Definition: EventShapeVarsProducer.cc:27
Handle.h
mps_fire.i
i
Definition: mps_fire.py:355
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
operator*
MatrixMeschach operator*(const MatrixMeschach &mat1, const MatrixMeschach &mat2)
Definition: MatrixMeschach.cc:117
edm::Handle::product
T const * product() const
Definition: Handle.h:70
TrackingRegionsSeedingLayerSets
Definition: TrackingRegionsSeedingLayerSets.h:10
HitDoublets::outer
Definition: RecHitsSortedInPhi.h:126
SeedingLayerSetsHits::size
unsigned short size() const
Get the number of SeedingLayerSets.
Definition: SeedingLayerSetsHits.h:199
edm::EDGetTokenT< bool >
edm
HLT enums.
Definition: AlignableModifier.h:19
HitPairEDProducer::produce
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
Definition: HitPairEDProducer.cc:512
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
SeedingLayerSetsHits
Definition: SeedingLayerSetsHits.h:18
HitPairEDProducer::impl_
std::unique_ptr<::ImplBase > impl_
Definition: HitPairEDProducer.cc:37
HLT_2018_cff.produceSeedingHitSets
produceSeedingHitSets
Definition: HLT_2018_cff.py:8529
EDProducer.h
HitPairEDProducer::~HitPairEDProducer
~HitPairEDProducer() override=default
SeedingLayerSetsHits::SeedingLayerSet::slice
SeedingLayerSet slice(size_t begin, size_t end) const
Definition: SeedingLayerSetsHits.h:118
IntermediateHitDoublets.h
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::Handle
Definition: AssociativeIterator.h:50
edm::OwnVector::const_iterator::difference_type
ptrdiff_t difference_type
Definition: OwnVector.h:46
TrajectorySeedProducer_cfi.layerPairs
layerPairs
Definition: TrajectorySeedProducer_cfi.py:23
ProducesCollector.h
end
#define end
Definition: vmac.h:39
HitPairEDProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: HitPairEDProducer.cc:487
edm::InputTag::label
std::string const & label() const
Definition: InputTag.h:36
HitPairGeneratorFromLayerPair
Definition: HitPairGeneratorFromLayerPair.h:11
MakerMacros.h
HLT_2018_cff.doublets
doublets
Definition: HLT_2018_cff.py:8544
LayerHitMapCache.h
LayerHitMapCache
Definition: LayerHitMapCache.h:14
SeedingLayerSetsHits.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
clone
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
ValL1Emulator_cff.regionTag
regionTag
Definition: ValL1Emulator_cff.py:63
edm::EDGetTokenT::isUninitialized
bool isUninitialized() const
Definition: EDGetToken.h:70
HitPairEDProducer
Definition: HitPairEDProducer.cc:25
trackingPlots.other
other
Definition: trackingPlots.py:1465
ParameterSetDescription.h
RegionsSeedingHitSets
Definition: RegionsSeedingHitSets.h:12
EDGetToken.h
edm::OwnVector::const_iterator
Definition: OwnVector.h:41
SeedingLayerSetsHits::numberOfLayersInSet
unsigned short numberOfLayersInSet() const
Get number of layers in each SeedingLayerSets.
Definition: SeedingLayerSetsHits.h:197
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
operator==
bool operator==(const QGLikelihoodParameters &lhs, const QGLikelihoodCategory &rhs)
Test if parameters are compatible with category.
Definition: QGLikelihoodObject.h:49
ntuplemaker.fill
fill
Definition: ntuplemaker.py:304
TrackingRegionsSeedingLayerSets.h
operator!=
bool operator!=(DTCELinkId const &lhs, DTCELinkId const &rhs)
Definition: DTCELinkId.h:81
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
HitDoublets
Definition: RecHitsSortedInPhi.h:124
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
Event.h
trigObjTnPSource_cfi.filler
filler
Definition: trigObjTnPSource_cfi.py:21
ModuleDef.h
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
IntermediateHitDoublets
Definition: IntermediateHitDoublets.h:131
edm::stream::EDProducer
Definition: EDProducer.h:38
edm::ProducesCollector::produces
ProductRegistryHelper::BranchAliasSetterT< ProductType > produces()
Definition: ProducesCollector.h:52
edm::EventSetup
Definition: EventSetup.h:57
RegionsSeedingHitSets.h
reco::JetExtendedAssociation::value_type
Container::value_type value_type
Definition: JetExtendedAssociation.h:30
HitPairEDProducer::clusterCheckToken_
edm::EDGetTokenT< bool > clusterCheckToken_
Definition: HitPairEDProducer.cc:35
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
RegionsSeedingHitSets::reserve
void reserve(size_t nregions, size_t nhitsets)
Definition: RegionsSeedingHitSets.h:56
HLT_2018_cff.produceIntermediateHitDoublets
produceIntermediateHitDoublets
Definition: HLT_2018_cff.py:8530
HitPairEDProducer::HitPairEDProducer
HitPairEDProducer(const edm::ParameterSet &iConfig)
Definition: HitPairEDProducer.cc:427
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
TrackingRegionsSeedingLayerSets::const_iterator
Definition: TrackingRegionsSeedingLayerSets.h:29
edm::ProducesCollector
Definition: ProducesCollector.h:43
RegionsSeedingHitSets::RegionFiller
Helper class enforcing correct way of filling the doublets of a region.
Definition: RegionsSeedingHitSets.h:24
HitPairGeneratorFromLayerPair.h
Exception
Definition: hltDiff.cc:246
HitDoublets::inner
Definition: RecHitsSortedInPhi.h:126
SeedingLayerSetsHits::SeedingLayerSet
Definition: SeedingLayerSetsHits.h:65
HLT_2018_cff.region
region
Definition: HLT_2018_cff.py:81479
TrackingRegion
Definition: TrackingRegion.h:40
AlignmentPI::regions
regions
Definition: AlignmentPayloadInspectorHelper.h:76
ConsumesCollector.h
cms::Exception
Definition: Exception.h:70
TrackingRegion.h
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
ParameterSet.h
TrackingRegionsSeedingLayerSets::seedingLayerSetsHits
const SeedingLayerSetsHits & seedingLayerSetsHits() const
Definition: TrackingRegionsSeedingLayerSets.h:79
OwnVector.h
edm::Event
Definition: Event.h:73
Impl
Definition: __init__.py:1
IntermediateHitDoublets::reserve
void reserve(size_t nregions, size_t nlayersets)
Definition: IntermediateHitDoublets.h:206
edm::InputTag
Definition: InputTag.h:15
begin
#define begin
Definition: vmac.h:32
edm::ConsumesCollector
Definition: ConsumesCollector.h:39
hgcalTopologyTester_cfi.layers
layers
Definition: hgcalTopologyTester_cfi.py:8
edm::RunningAverage
Definition: RunningAverage.h:17
edm::OwnVector< TrackingRegion >
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443