1 #ifndef RecoEgamma_EgammayHLTProducers_HLTRecHitInAllL1RegionsProducer_h_
2 #define RecoEgamma_EgammayHLTProducers_HLTRecHitInAllL1RegionsProducer_h_
67 minEt_(para.getParameter<double>(
"minEt")),
68 maxEt_(para.getParameter<double>(
"maxEt")),
71 token_(consumesColl.consumes<T1>(para.getParameter<edm::
InputTag>(
"inputColl"))){}
74 template<
typename T2>
static typename T2::const_iterator
beginIt(
const T2&
coll){
return coll.begin();}
75 template<
typename T2>
static typename T2::const_iterator
endIt(
const T2&
coll){
return coll.end();}
84 template<
typename RecHitType>
111 template<
typename RecHitType>
115 for(
auto&
pset : l1InputRegions){
117 l1RegionData_.emplace_back(createL1RegionData(type,
pset,consumesCollector()));
119 recHitLabels_ =para.
getParameter<std::vector<edm::InputTag>>(
"recHitLabels");
120 productLabels_=para.
getParameter<std::vector<std::string>>(
"productLabels");
122 for (
unsigned int collNr=0; collNr<recHitLabels_.size(); collNr++) {
123 recHitTokens_.push_back(consumes<RecHitCollectionType>(recHitLabels_[collNr]));
124 produces<RecHitCollectionType> (productLabels_[collNr]);
127 template<
typename RecHitType>
131 std::vector<std::string> productTags;
132 productTags.push_back(
"EcalRegionalRecHitsEB");
133 productTags.push_back(
"EcalRegionalRecHitsEE");
134 desc.
add<std::vector<std::string>>(
"productLabels", productTags);
136 recHitLabels.push_back(
edm::InputTag(
"hltEcalRegionalEgammaRecHit:EcalRecHitsEB"));
137 recHitLabels.push_back(
edm::InputTag(
"hltEcalRegionalEgammaRecHit:EcalRecHitsEE"));
138 recHitLabels.push_back(
edm::InputTag(
"hltESRegionalEgammaRecHit:EcalRecHitsES"));
149 l1InputRegions.push_back(emIsoPSet);
154 emNonIsoPSet.
addParameter<
double>(
"regionEtaMargin",0.14);
155 emNonIsoPSet.
addParameter<
double>(
"regionPhiMargin",0.4);
157 l1InputRegions.push_back(emNonIsoPSet);
169 l1InputRegions.push_back(egPSet);
178 l1InputRegions.push_back(jetPSet);
183 l1InputRegionDesc.
add<
double>(
"minEt");
184 l1InputRegionDesc.
add<
double>(
"maxEt");
185 l1InputRegionDesc.
add<
double>(
"regionEtaMargin");
186 l1InputRegionDesc.
add<
double>(
"regionPhiMargin");
188 desc.
addVPSet(
"l1InputRegions",l1InputRegionDesc,l1InputRegions);
194 template<
typename RecHitType>
205 std::vector<EcalEtaPhiRegion> regions;
206 std::for_each(l1RegionData_.begin(),l1RegionData_.end(),
207 [&
event,®ions,l1CaloGeom](
const std::unique_ptr<L1RegionDataBase>&
input)
208 {
input->getEtaPhiRegions(event,regions,*l1CaloGeom);}
211 for(
size_t recHitCollNr=0;recHitCollNr<recHitTokens_.size();recHitCollNr++){
213 event.getByToken(recHitTokens_[recHitCollNr],recHits);
222 if(!recHits->empty()){
224 if(!regions.empty()){
229 for(
const auto&
region : regions){
230 if(
region.inRegion(position)) {
231 filteredRecHits->push_back(recHit);
239 event.put(filteredRecHits,productLabels_[recHitCollNr]);
248 template<
typename RecHitType>
251 if(type==
"L1EmParticle"){
253 }
else if(type==
"L1JetParticle"){
255 }
else if(type==
"L1MuonParticle"){
257 }
else if(type==
"EGamma"){
259 }
else if(type==
"Jet"){
261 }
else if(type==
"Muon"){
263 }
else if(type==
"Tau"){
267 throw cms::Exception(
"InvalidConfig") <<
" type "<<type<<
" is not recognised, this means the rec-hit you think you are keeping may not be and you should fix this error as it can lead to hard to find efficiency loses"<<std::endl;
273 template<
typename L1CollType>
277 event.getByToken(token_,l1Cands);
279 for(
auto l1CandIt = beginIt(*l1Cands);l1CandIt!=endIt(*l1Cands);++l1CandIt){
280 if(l1CandIt->et() >= minEt_ && l1CandIt->et() < maxEt_){
282 double etaLow = l1CandIt->eta() - regionEtaMargin_;
283 double etaHigh = l1CandIt->eta() + regionEtaMargin_;
284 double phiLow = l1CandIt->phi() - regionPhiMargin_;
285 double phiHigh = l1CandIt->phi() + regionPhiMargin_;
296 event.getByToken(token_,l1Cands);
298 for(
const auto& l1Cand : *l1Cands){
299 if(l1Cand.et() >= minEt_ && l1Cand.et() < maxEt_){
302 int etaIndex = l1Cand.gctJetCand()->etaIndex();
303 int phiIndex = l1Cand.gctJetCand()->phiIndex();
311 etaLow -= regionEtaMargin_;
312 etaHigh += regionEtaMargin_;
313 phiLow -= regionPhiMargin_;
314 phiHigh += regionPhiMargin_;
326 event.getByToken(token_,l1Cands);
328 for(
const auto& l1Cand : *l1Cands){
329 if(l1Cand.et() >= minEt_ && l1Cand.et() < maxEt_){
332 int etaIndex = l1Cand.gctEmCand()->etaIndex();
333 int phiIndex = l1Cand.gctEmCand()->phiIndex();
341 etaLow -= regionEtaMargin_;
342 etaHigh += regionEtaMargin_;
343 phiLow -= regionPhiMargin_;
344 phiHigh += regionPhiMargin_;
void getEtaPhiRegions(const edm::Event &, std::vector< EcalEtaPhiRegion > &, const L1CaloGeometry &) const override
const_iterator end(int bx) const
T getParameter(std::string const &) const
std::string defaultModuleLabel()
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
double etaBinHighEdge(unsigned int etaIndex, bool central=true) const
HLTRecHitInAllL1RegionsProducer< EcalRecHit > HLTEcalRecHitInAllL1RegionsProducer
double etaBinLowEdge(unsigned int etaIndex, bool central=true) const
std::vector< std::unique_ptr< L1RegionDataBase > > l1RegionData_
void produce(edm::Event &, const edm::EventSetup &) override
#define DEFINE_FWK_MODULE(type)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
L1RegionData(const edm::ParameterSet ¶, edm::ConsumesCollector &consumesColl)
virtual ~L1RegionDataBase()
static BXVector< T2 >::const_iterator beginIt(const BXVector< T2 > &coll)
HLTRecHitInAllL1RegionsProducer(const edm::ParameterSet &ps)
std::vector< edm::InputTag > recHitLabels_
~HLTRecHitInAllL1RegionsProducer()
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
static std::string const input
std::vector< std::string > productLabels_
void addParameter(std::string const &name, T const &value)
HLTRecHitInAllL1RegionsProducer< EcalUncalibratedRecHit > HLTEcalUncalibratedRecHitInAllL1RegionsProducer
ParameterDescriptionBase * add(U const &iLabel, T const &value)
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
edm::EDGetTokenT< T1 > token_
static T2::const_iterator endIt(const T2 &coll)
SubDetector subDetGeom[18]
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static int position[264][3]
static BXVector< T2 >::const_iterator endIt(const BXVector< T2 > &coll)
virtual void getEtaPhiRegions(const edm::Event &, std::vector< EcalEtaPhiRegion > &, const L1CaloGeometry &) const =0
static T2::const_iterator beginIt(const T2 &coll)
double emJetPhiBinLowEdge(unsigned int phiIndex) const
std::vector< edm::EDGetTokenT< RecHitCollectionType > > recHitTokens_
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
const_iterator begin(int bx) const
L1RegionDataBase * createL1RegionData(const std::string &, const edm::ParameterSet &, edm::ConsumesCollector &&)
double emJetPhiBinHighEdge(unsigned int phiIndex) const