![]() |
![]() |
#include <HLTCSCRing2or3Filter.h>
Public Member Functions | |
virtual bool | filter (edm::Event &, const edm::EventSetup &) |
HLTCSCRing2or3Filter (const edm::ParameterSet &) | |
~HLTCSCRing2or3Filter () | |
Private Attributes | |
edm::InputTag | m_input |
unsigned int | m_minHits |
double | m_xWindow |
double | m_yWindow |
Definition at line 11 of file HLTCSCRing2or3Filter.h.
HLTCSCRing2or3Filter::HLTCSCRing2or3Filter | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 14 of file HLTCSCRing2or3Filter.cc.
: m_input(iConfig.getParameter<edm::InputTag>("input")) , m_minHits(iConfig.getParameter<unsigned int>("minHits")) , m_xWindow(iConfig.getParameter<double>("xWindow")) , m_yWindow(iConfig.getParameter<double>("yWindow")) {}
HLTCSCRing2or3Filter::~HLTCSCRing2or3Filter | ( | ) |
Definition at line 21 of file HLTCSCRing2or3Filter.cc.
{ }
bool HLTCSCRing2or3Filter::filter | ( | edm::Event & | iEvent, |
const edm::EventSetup & | iSetup | ||
) | [virtual] |
Implements HLTFilter.
Definition at line 23 of file HLTCSCRing2or3Filter.cc.
References CSCDetId, Reference_intrackfit_cff::endcap, edm::EventSetup::get(), edm::Event::getByLabel(), m_input, m_minHits, m_xWindow, m_yWindow, python::multivaluedict::map(), relativeConstraints::ring, relativeConstraints::station, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().
{ edm::Handle<CSCRecHit2DCollection> hits; iEvent.getByLabel(m_input, hits); edm::ESHandle<CSCGeometry> cscGeometry; bool got_cscGeometry = false; std::map<int, std::vector<const CSCRecHit2D*> > chamber_tohit; for (CSCRecHit2DCollection::const_iterator hit = hits->begin(); hit != hits->end(); ++hit) { CSCDetId id(hit->geographicalId()); int chamber_id = CSCDetId(id.endcap(), id.station(), id.ring(), id.chamber(), 0).rawId(); if (id.ring() == 2 || id.ring() == 3) { std::map<int, std::vector<const CSCRecHit2D*> >::const_iterator chamber_iter = chamber_tohit.find(chamber_id); if (chamber_iter == chamber_tohit.end()) { std::vector<const CSCRecHit2D*> newlist; newlist.push_back(&(*hit)); } chamber_tohit[chamber_id].push_back(&(*hit)); } // end if this ring is selected } // end loop over hits unsigned int minHitsAlmostSquared = (m_minHits-1) * (m_minHits-2); for (std::map<int, std::vector<const CSCRecHit2D*> >::const_iterator chamber_iter = chamber_tohit.begin(); chamber_iter != chamber_tohit.end(); ++chamber_iter) { if (chamber_iter->second.size() >= m_minHits) { if (!got_cscGeometry) { iSetup.get<MuonGeometryRecord>().get(cscGeometry); got_cscGeometry = true; } unsigned int pairs_in_window = 0; for (std::vector<const CSCRecHit2D*>::const_iterator hit1 = chamber_iter->second.begin(); hit1 != chamber_iter->second.end(); ++hit1) { for (std::vector<const CSCRecHit2D*>::const_iterator hit2 = chamber_iter->second.begin(); hit2 != hit1; ++hit2) { GlobalPoint pos1 = cscGeometry->idToDet((*hit1)->geographicalId())->surface().toGlobal((*hit1)->localPosition()); GlobalPoint pos2 = cscGeometry->idToDet((*hit2)->geographicalId())->surface().toGlobal((*hit2)->localPosition()); if (fabs(pos1.x() - pos2.x()) < m_xWindow && fabs(pos1.y() - pos2.y()) < m_yWindow) pairs_in_window++; if (pairs_in_window >= minHitsAlmostSquared) return true; } // end loop over hits } // end loop over hits } // end if chamber has enough hits } // end loop over chambers return false; }
edm::InputTag HLTCSCRing2or3Filter::m_input [private] |
Definition at line 19 of file HLTCSCRing2or3Filter.h.
Referenced by filter().
unsigned int HLTCSCRing2or3Filter::m_minHits [private] |
Definition at line 20 of file HLTCSCRing2or3Filter.h.
Referenced by filter().
double HLTCSCRing2or3Filter::m_xWindow [private] |
Definition at line 21 of file HLTCSCRing2or3Filter.h.
Referenced by filter().
double HLTCSCRing2or3Filter::m_yWindow [private] |
Definition at line 21 of file HLTCSCRing2or3Filter.h.
Referenced by filter().