CMS 3D CMS Logo

HLTRecHitInAllL1RegionsProducer.cc
Go to the documentation of this file.
1 #include <memory>
2 
10 
12 
13 // Reco candidates (might not need)
16 
17 // Geometry and topology
23 
24 // Level 1 Trigger
31 
35 
38 
41 
43 
45 
46 //this is a re-write of HLTRechitInRegionsProducer to be able to handle arbitary L1 collections as inputs
47 //in the process, some of the cruft was cleaned up but it mantains almost all the old behaviour
48 //think the only difference now is that it wont throw if its not ECALBarrel, ECALEndcap or ECAL PS rec-hit type
50 public:
51  virtual ~L1RegionDataBase() {}
52  virtual void getEtaPhiRegions(const edm::Event&,
53  std::vector<RectangularEtaPhiRegion>&,
54  const L1CaloGeometry&) const = 0;
55 };
56 
57 template <typename T1>
59 private:
60  double minEt_;
61  double maxEt_;
65 
66 public:
68  : minEt_(para.getParameter<double>("minEt")),
69  maxEt_(para.getParameter<double>("maxEt")),
70  regionEtaMargin_(para.getParameter<double>("regionEtaMargin")),
71  regionPhiMargin_(para.getParameter<double>("regionPhiMargin")),
72  token_(consumesColl.consumes<T1>(para.getParameter<edm::InputTag>("inputColl"))) {}
73 
74  void getEtaPhiRegions(const edm::Event&, std::vector<RectangularEtaPhiRegion>&, const L1CaloGeometry&) const override;
75  template <typename T2>
76  static typename T2::const_iterator beginIt(const T2& coll) {
77  return coll.begin();
78  }
79  template <typename T2>
80  static typename T2::const_iterator endIt(const T2& coll) {
81  return coll.end();
82  }
83  template <typename T2>
84  static typename BXVector<T2>::const_iterator beginIt(const BXVector<T2>& coll) {
85  return coll.begin(0);
86  }
87  template <typename T2>
88  static typename BXVector<T2>::const_iterator endIt(const BXVector<T2>& coll) {
89  return coll.end(0);
90  }
91 };
92 
93 template <typename RecHitType>
96 
97 public:
100 
101  void produce(edm::Event&, const edm::EventSetup&) override;
102  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
103 
104 private:
106  const edm::ParameterSet&,
107  edm::ConsumesCollector&&); //calling function owns this
108 
109  std::vector<std::unique_ptr<L1RegionDataBase>> l1RegionData_;
110 
111  std::vector<edm::InputTag> recHitLabels_;
112  std::vector<std::string> productLabels_;
113 
114  std::vector<edm::EDGetTokenT<RecHitCollectionType>> recHitTokens_;
115 };
116 
117 template <typename RecHitType>
119  const std::vector<edm::ParameterSet> l1InputRegions =
120  para.getParameter<std::vector<edm::ParameterSet>>("l1InputRegions");
121  for (auto& pset : l1InputRegions) {
122  const std::string type = pset.getParameter<std::string>("type");
123  l1RegionData_.emplace_back(createL1RegionData(
124  type,
125  pset,
126  consumesCollector())); //meh I was going to use a factory but it was going to be overly complex for my needs
127  }
128  recHitLabels_ = para.getParameter<std::vector<edm::InputTag>>("recHitLabels");
129  productLabels_ = para.getParameter<std::vector<std::string>>("productLabels");
130 
131  for (unsigned int collNr = 0; collNr < recHitLabels_.size(); collNr++) {
132  recHitTokens_.push_back(consumes<RecHitCollectionType>(recHitLabels_[collNr]));
133  produces<RecHitCollectionType>(productLabels_[collNr]);
134  }
135 }
136 template <typename RecHitType>
139  std::vector<std::string> productTags;
140  productTags.push_back("EcalRegionalRecHitsEB");
141  productTags.push_back("EcalRegionalRecHitsEE");
142  desc.add<std::vector<std::string>>("productLabels", productTags);
143  std::vector<edm::InputTag> recHitLabels;
144  recHitLabels.push_back(edm::InputTag("hltEcalRegionalEgammaRecHit:EcalRecHitsEB"));
145  recHitLabels.push_back(edm::InputTag("hltEcalRegionalEgammaRecHit:EcalRecHitsEE"));
146  recHitLabels.push_back(edm::InputTag("hltESRegionalEgammaRecHit:EcalRecHitsES"));
147  desc.add<std::vector<edm::InputTag>>("recHitLabels", recHitLabels);
148  std::vector<edm::ParameterSet> l1InputRegions;
149 
150  edm::ParameterSet emIsoPSet;
151  emIsoPSet.addParameter<std::string>("type", "L1EmParticle");
152  emIsoPSet.addParameter<double>("minEt", 5);
153  emIsoPSet.addParameter<double>("maxEt", 999);
154  emIsoPSet.addParameter<double>("regionEtaMargin", 0.14);
155  emIsoPSet.addParameter<double>("regionPhiMargin", 0.4);
156  emIsoPSet.addParameter<edm::InputTag>("inputColl", edm::InputTag("hltL1extraParticles:NonIsolated"));
157  l1InputRegions.push_back(emIsoPSet);
158  edm::ParameterSet emNonIsoPSet;
159  emNonIsoPSet.addParameter<std::string>("type", "L1EmParticle");
160  emNonIsoPSet.addParameter<double>("minEt", 5);
161  emNonIsoPSet.addParameter<double>("maxEt", 999);
162  emNonIsoPSet.addParameter<double>("regionEtaMargin", 0.14);
163  emNonIsoPSet.addParameter<double>("regionPhiMargin", 0.4);
164  emNonIsoPSet.addParameter<edm::InputTag>("inputColl", edm::InputTag("hltL1extraParticles:Isolated"));
165  l1InputRegions.push_back(emNonIsoPSet);
166 
167  // Why no Central Jets here? They are present in the python config, e.g. OnLine_HLT_GRun.py
168  // SHarper: because these are the default parameters designed to reproduce the original (no jets) behaviour
169  //
170  edm::ParameterSet egPSet;
171  egPSet.addParameter<std::string>("type", "EGamma");
172  egPSet.addParameter<double>("minEt", 5);
173  egPSet.addParameter<double>("maxEt", 999);
174  egPSet.addParameter<double>("regionEtaMargin", 0.4);
175  egPSet.addParameter<double>("regionPhiMargin", 0.5);
176  egPSet.addParameter<edm::InputTag>("inputColl", edm::InputTag("hltCaloStage2Digis"));
177  l1InputRegions.push_back(egPSet);
178 
180  jetPSet.addParameter<std::string>("type", "EGamma");
181  jetPSet.addParameter<double>("minEt", 200);
182  jetPSet.addParameter<double>("maxEt", 999);
183  jetPSet.addParameter<double>("regionEtaMargin", 0.4);
184  jetPSet.addParameter<double>("regionPhiMargin", 0.5);
185  jetPSet.addParameter<edm::InputTag>("inputColl", edm::InputTag("hltCaloStage2Digis"));
186  l1InputRegions.push_back(jetPSet);
187 
188  edm::ParameterSetDescription l1InputRegionDesc;
189  l1InputRegionDesc.add<std::string>("type");
190  l1InputRegionDesc.add<double>("minEt");
191  l1InputRegionDesc.add<double>("maxEt");
192  l1InputRegionDesc.add<double>("regionEtaMargin");
193  l1InputRegionDesc.add<double>("regionPhiMargin");
194  l1InputRegionDesc.add<edm::InputTag>("inputColl");
195  desc.addVPSet("l1InputRegions", l1InputRegionDesc, l1InputRegions);
196 
198 }
199 
200 template <typename RecHitType>
202  // get the collection geometry:
203  edm::ESHandle<CaloGeometry> caloGeomHandle;
204  setup.get<CaloGeometryRecord>().get(caloGeomHandle);
205 
206  // Get the CaloGeometry
208  setup.get<L1CaloGeometryRecord>().get(l1CaloGeom);
209 
210  std::vector<RectangularEtaPhiRegion> regions;
211  std::for_each(l1RegionData_.begin(),
212  l1RegionData_.end(),
213  [&event, &regions, l1CaloGeom](const std::unique_ptr<L1RegionDataBase>& input) {
214  input->getEtaPhiRegions(event, regions, *l1CaloGeom);
215  });
216 
217  for (size_t recHitCollNr = 0; recHitCollNr < recHitTokens_.size(); recHitCollNr++) {
219  event.getByToken(recHitTokens_[recHitCollNr], recHits);
220 
221  if (!(recHits.isValid())) {
222  edm::LogError("ProductNotFound") << "could not get a handle on the " << typeid(RecHitCollectionType).name()
223  << " named " << recHitLabels_[recHitCollNr].encode() << std::endl;
224  continue;
225  }
226 
227  auto filteredRecHits = std::make_unique<RecHitCollectionType>();
228 
229  if (!recHits->empty()) {
230  const CaloSubdetectorGeometry* subDetGeom = caloGeomHandle->getSubdetectorGeometry(recHits->front().id());
231  if (!regions.empty()) {
232  for (const RecHitType& recHit : *recHits) {
233  auto this_cell = subDetGeom->getGeometry(recHit.id());
234  for (const auto& region : regions) {
235  if (region.inRegion(this_cell->etaPos(), this_cell->phiPos())) {
236  filteredRecHits->push_back(recHit);
237  break;
238  }
239  }
240  }
241  } //end check of empty regions
242  } //end check of empty rec-hits
243  // std::cout <<"putting fileter coll in "<<filteredRecHits->size()<<std::endl;
244  event.put(std::move(filteredRecHits), productLabels_[recHitCollNr]);
245  } //end loop over all rec hit collections
246 }
247 
248 template <typename RecHitType>
250  const std::string& type, const edm::ParameterSet& para, edm::ConsumesCollector&& consumesColl) {
251  if (type == "L1EmParticle") {
252  return new L1RegionData<l1extra::L1EmParticleCollection>(para, consumesColl);
253  } else if (type == "L1JetParticle") {
254  return new L1RegionData<l1extra::L1JetParticleCollection>(para, consumesColl);
255  } else if (type == "L1MuonParticle") {
256  return new L1RegionData<l1extra::L1MuonParticleCollection>(para, consumesColl);
257  } else if (type == "EGamma") {
258  return new L1RegionData<l1t::EGammaBxCollection>(para, consumesColl);
259  } else if (type == "Jet") {
260  return new L1RegionData<l1t::JetBxCollection>(para, consumesColl);
261  } else if (type == "Muon") {
262  return new L1RegionData<l1t::MuonBxCollection>(para, consumesColl);
263  } else if (type == "Tau") {
264  return new L1RegionData<l1t::TauBxCollection>(para, consumesColl);
265  } else {
266  //this is a major issue and could lead to rather subtle efficiency losses, so if its incorrectly configured, we're aborting the job!
267  throw cms::Exception("InvalidConfig")
268  << " type " << type
269  << " is not recognised, this means the rec-hit you think you are keeping may not be and you should fix this "
270  "error as it can lead to hard to find efficiency loses"
271  << std::endl;
272  }
273 }
274 
275 template <typename L1CollType>
277  std::vector<RectangularEtaPhiRegion>& regions,
278  const L1CaloGeometry&) const {
279  edm::Handle<L1CollType> l1Cands;
280  event.getByToken(token_, l1Cands);
281 
282  for (auto l1CandIt = beginIt(*l1Cands); l1CandIt != endIt(*l1Cands); ++l1CandIt) {
283  if (l1CandIt->et() >= minEt_ && l1CandIt->et() < maxEt_) {
284  double etaLow = l1CandIt->eta() - regionEtaMargin_;
285  double etaHigh = l1CandIt->eta() + regionEtaMargin_;
286  double phiLow = l1CandIt->phi() - regionPhiMargin_;
287  double phiHigh = l1CandIt->phi() + regionPhiMargin_;
288 
289  regions.push_back(RectangularEtaPhiRegion(etaLow, etaHigh, phiLow, phiHigh));
290  }
291  }
292 }
293 
294 template <>
296  std::vector<RectangularEtaPhiRegion>& regions,
297  const L1CaloGeometry& l1CaloGeom) const {
299  event.getByToken(token_, l1Cands);
300 
301  for (const auto& l1Cand : *l1Cands) {
302  if (l1Cand.et() >= minEt_ && l1Cand.et() < maxEt_) {
303  // Access the GCT hardware object corresponding to the L1Extra EM object.
304  int etaIndex = l1Cand.gctJetCand()->etaIndex();
305  int phiIndex = l1Cand.gctJetCand()->phiIndex();
306 
307  // Use the L1CaloGeometry to find the eta, phi bin boundaries.
308  double etaLow = l1CaloGeom.etaBinLowEdge(etaIndex);
309  double etaHigh = l1CaloGeom.etaBinHighEdge(etaIndex);
310  double phiLow = l1CaloGeom.emJetPhiBinLowEdge(phiIndex);
311  double phiHigh = l1CaloGeom.emJetPhiBinHighEdge(phiIndex);
312 
313  etaLow -= regionEtaMargin_;
314  etaHigh += regionEtaMargin_;
315  phiLow -= regionPhiMargin_;
316  phiHigh += regionPhiMargin_;
317 
318  regions.push_back(RectangularEtaPhiRegion(etaLow, etaHigh, phiLow, phiHigh));
319  }
320  }
321 }
322 
323 template <>
325  std::vector<RectangularEtaPhiRegion>& regions,
326  const L1CaloGeometry& l1CaloGeom) const {
328  event.getByToken(token_, l1Cands);
329 
330  for (const auto& l1Cand : *l1Cands) {
331  if (l1Cand.et() >= minEt_ && l1Cand.et() < maxEt_) {
332  // Access the GCT hardware object corresponding to the L1Extra EM object.
333  int etaIndex = l1Cand.gctEmCand()->etaIndex();
334  int phiIndex = l1Cand.gctEmCand()->phiIndex();
335 
336  // Use the L1CaloGeometry to find the eta, phi bin boundaries.
337  double etaLow = l1CaloGeom.etaBinLowEdge(etaIndex);
338  double etaHigh = l1CaloGeom.etaBinHighEdge(etaIndex);
339  double phiLow = l1CaloGeom.emJetPhiBinLowEdge(phiIndex);
340  double phiHigh = l1CaloGeom.emJetPhiBinHighEdge(phiIndex);
341 
342  etaLow -= regionEtaMargin_;
343  etaHigh += regionEtaMargin_;
344  phiLow -= regionPhiMargin_;
345  phiHigh += regionPhiMargin_;
346 
347  regions.push_back(RectangularEtaPhiRegion(etaLow, etaHigh, phiLow, phiHigh));
348  }
349  }
350 }
351 
defaultModuleLabel.h
L1CaloGeometry::emJetPhiBinHighEdge
double emJetPhiBinHighEdge(unsigned int phiIndex) const
Definition: L1CaloGeometry.cc:232
HLTRecHitInAllL1RegionsProducer::l1RegionData_
std::vector< std::unique_ptr< L1RegionDataBase > > l1RegionData_
Definition: HLTRecHitInAllL1RegionsProducer.cc:109
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
CaloTools.h
input
static const std::string input
Definition: EdmProvDump.cc:48
L1MuonParticleFwd.h
ESHandle.h
RectangularEtaPhiRegion.h
edm::EDGetTokenT< T1 >
CaloGeometryRecord
Definition: CaloGeometryRecord.h:30
edm
HLT enums.
Definition: AlignableModifier.h:19
L1CaloGeometry::etaBinHighEdge
double etaBinHighEdge(unsigned int etaIndex, bool central=true) const
Definition: L1CaloGeometry.cc:205
Muon.h
JetMonitor_cfi.jetPSet
jetPSet
Definition: JetMonitor_cfi.py:12
HLTRecHitInAllL1RegionsProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: HLTRecHitInAllL1RegionsProducer.cc:201
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
CaloGeometry::getSubdetectorGeometry
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
EDProducer.h
Jet.h
edm::SortedCollection
Definition: SortedCollection.h:49
EcalUncalibratedRecHit.h
HLT_2018_cff.l1InputRegions
l1InputRegions
Definition: HLT_2018_cff.py:13212
L1RegionData::endIt
static BXVector< T2 >::const_iterator endIt(const BXVector< T2 > &coll)
Definition: HLTRecHitInAllL1RegionsProducer.cc:88
edm::Handle
Definition: AssociativeIterator.h:50
RecoCandidate.h
RectangularEtaPhiRegion
Definition: RectangularEtaPhiRegion.h:6
HLTRecHitInAllL1RegionsProducer::createL1RegionData
L1RegionDataBase * createL1RegionData(const std::string &, const edm::ParameterSet &, edm::ConsumesCollector &&)
Definition: HLTRecHitInAllL1RegionsProducer.cc:249
L1RegionDataBase
Definition: HLTRecHitInAllL1RegionsProducer.cc:49
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
reco::RecHitType
RecHitType
Definition: TrackInfoEnum.h:16
BXVector
Definition: BXVector.h:15
HLTRecHitInAllL1RegionsProducer::recHitTokens_
std::vector< edm::EDGetTokenT< RecHitCollectionType > > recHitTokens_
Definition: HLTRecHitInAllL1RegionsProducer.cc:114
MakerMacros.h
L1RegionDataBase::~L1RegionDataBase
virtual ~L1RegionDataBase()
Definition: HLTRecHitInAllL1RegionsProducer.cc:51
HLTRecHitInAllL1RegionsProducer::recHitLabels_
std::vector< edm::InputTag > recHitLabels_
Definition: HLTRecHitInAllL1RegionsProducer.cc:111
HLT_2018_cff.recHitLabels
recHitLabels
Definition: HLT_2018_cff.py:13235
L1RegionDataBase::getEtaPhiRegions
virtual void getEtaPhiRegions(const edm::Event &, std::vector< RectangularEtaPhiRegion > &, const L1CaloGeometry &) const =0
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
L1RegionData::token_
edm::EDGetTokenT< T1 > token_
Definition: HLTRecHitInAllL1RegionsProducer.cc:64
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
L1RegionData::beginIt
static BXVector< T2 >::const_iterator beginIt(const BXVector< T2 > &coll)
Definition: HLTRecHitInAllL1RegionsProducer.cc:84
EGamma.h
edm::ESHandle< CaloGeometry >
BXVector::begin
const_iterator begin(int bx) const
L1CaloGeometryRecord
Definition: L1CaloGeometryRecord.h:30
CaloGeometryRecord.h
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
L1EmParticleFwd.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
FastTrackerRecHitMaskProducer_cfi.recHits
recHits
Definition: FastTrackerRecHitMaskProducer_cfi.py:8
HLTEcalUncalibratedRecHitInAllL1RegionsProducer
HLTRecHitInAllL1RegionsProducer< EcalUncalibratedRecHit > HLTEcalUncalibratedRecHitInAllL1RegionsProducer
Definition: HLTRecHitInAllL1RegionsProducer.cc:354
L1RegionData::minEt_
double minEt_
Definition: HLTRecHitInAllL1RegionsProducer.cc:60
HLTRecHitInAllL1RegionsProducer::HLTRecHitInAllL1RegionsProducer
HLTRecHitInAllL1RegionsProducer(const edm::ParameterSet &ps)
Definition: HLTRecHitInAllL1RegionsProducer.cc:118
CaloSubdetectorGeometry.h
L1JetParticleFwd.h
BXVector::end
const_iterator end(int bx) const
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
defaultModuleLabel
std::string defaultModuleLabel()
Definition: defaultModuleLabel.h:16
HLTRecHitInAllL1RegionsProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: HLTRecHitInAllL1RegionsProducer.cc:137
Event.h
L1CaloGeometry
Definition: L1CaloGeometry.h:33
edm::ParameterSetDescription::addVPSet
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
Definition: ParameterSetDescription.h:149
L1CaloGeometryRecord.h
L1RegionData::beginIt
static T2::const_iterator beginIt(const T2 &coll)
Definition: HLTRecHitInAllL1RegionsProducer.cc:76
edm::ParameterSet::addParameter
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:124
edm::stream::EDProducer
Definition: EDProducer.h:38
edm::EventSetup
Definition: EventSetup.h:57
HLTRecHitInAllL1RegionsProducer::productLabels_
std::vector< std::string > productLabels_
Definition: HLTRecHitInAllL1RegionsProducer.cc:112
L1EmParticle.h
get
#define get
EcalRecHit.h
L1RegionData
Definition: HLTRecHitInAllL1RegionsProducer.cc:58
L1CaloGeometry::emJetPhiBinLowEdge
double emJetPhiBinLowEdge(unsigned int phiIndex) const
Definition: L1CaloGeometry.cc:228
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
L1RegionData::endIt
static T2::const_iterator endIt(const T2 &coll)
Definition: HLTRecHitInAllL1RegionsProducer.cc:80
CaloCellGeometry.h
L1RegionData::regionPhiMargin_
double regionPhiMargin_
Definition: HLTRecHitInAllL1RegionsProducer.cc:63
type
type
Definition: HCALResponse.h:21
eostools.move
def move(src, dest)
Definition: eostools.py:511
L1MuonParticle.h
RecoChargedCandidate.h
GeomDetEnumerators::subDetGeom
constexpr SubDetector subDetGeom[21]
Definition: GeomDetEnumerators.h:40
L1RegionData::regionEtaMargin_
double regionEtaMargin_
Definition: HLTRecHitInAllL1RegionsProducer.cc:62
Frameworkfwd.h
Exception
Definition: hltDiff.cc:246
CaloGeometry.h
L1RegionData::L1RegionData
L1RegionData(const edm::ParameterSet &para, edm::ConsumesCollector &consumesColl)
Definition: HLTRecHitInAllL1RegionsProducer.cc:67
HLT_2018_cff.region
region
Definition: HLT_2018_cff.py:81479
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
CaloSubdetectorGeometry
Definition: CaloSubdetectorGeometry.h:22
L1RegionData::maxEt_
double maxEt_
Definition: HLTRecHitInAllL1RegionsProducer.cc:61
AlignmentPI::regions
regions
Definition: AlignmentPayloadInspectorHelper.h:76
ConsumesCollector.h
ParameterSet.h
HLTRecHitInAllL1RegionsProducer::~HLTRecHitInAllL1RegionsProducer
~HLTRecHitInAllL1RegionsProducer() override
Definition: HLTRecHitInAllL1RegionsProducer.cc:99
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
HLTEcalRecHitInAllL1RegionsProducer
HLTRecHitInAllL1RegionsProducer< EcalRecHit > HLTEcalRecHitInAllL1RegionsProducer
Definition: HLTRecHitInAllL1RegionsProducer.cc:352
event
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of "!*" before the partial wildcard feature was incorporated). The per-event "cost" of each negative criterion with multiple relevant triggers is about the same as ! *was in the past
L1JetParticle.h
L1CaloGeometry.h
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:39
L1CaloGeometry::etaBinLowEdge
double etaBinLowEdge(unsigned int etaIndex, bool central=true) const
Definition: L1CaloGeometry.cc:186
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
L1RegionData::getEtaPhiRegions
void getEtaPhiRegions(const edm::Event &, std::vector< RectangularEtaPhiRegion > &, const L1CaloGeometry &) const override
Definition: HLTRecHitInAllL1RegionsProducer.cc:276
HLTRecHitInAllL1RegionsProducer
Definition: HLTRecHitInAllL1RegionsProducer.cc:94