File indexing completed on 2025-02-05 23:50:57
0001 #include "Alignment/CommonAlignmentProducer/interface/AlignmentCSCBeamHaloSelector.h"
0002
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005
0006 #include "DataFormats/DetId/interface/DetId.h"
0007 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
0008 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
0009 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0010 #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
0011
0012
0013
0014 AlignmentCSCBeamHaloSelector::AlignmentCSCBeamHaloSelector(const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC)
0015 : m_minStations(iConfig.getParameter<unsigned int>("minStations")),
0016 m_minHitsPerStation(iConfig.getParameter<unsigned int>("minHitsPerStation")) {
0017 edm::LogInfo("AlignmentCSCBeamHaloSelector")
0018 << "Acceptable tracks must have at least " << m_minHitsPerStation << " hits in " << m_minStations
0019 << " different CSC stations." << std::endl;
0020 }
0021
0022 void AlignmentCSCBeamHaloSelector::fillPSetDescription(edm::ParameterSetDescription &desc) {
0023 desc.add<unsigned int>("minStations", 0);
0024 desc.add<unsigned int>("minHitsPerStation", 1);
0025 }
0026
0027
0028
0029 AlignmentCSCBeamHaloSelector::~AlignmentCSCBeamHaloSelector() {}
0030
0031
0032
0033 AlignmentCSCBeamHaloSelector::Tracks AlignmentCSCBeamHaloSelector::select(const Tracks &tracks,
0034 const edm::Event &iEvent) const {
0035 Tracks result;
0036
0037 for (auto const &track : tracks) {
0038 std::map<int, unsigned int> station_map;
0039
0040 for (auto const &hit : track->recHits()) {
0041 DetId id = hit->geographicalId();
0042 if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::CSC) {
0043 CSCDetId cscid(id.rawId());
0044 int station = (cscid.endcap() == 1 ? 1 : -1) * cscid.station();
0045
0046 std::map<int, unsigned int>::const_iterator station_iter = station_map.find(station);
0047 if (station_iter == station_map.end()) {
0048 station_map[station] = 0;
0049 }
0050 station_map[station]++;
0051 }
0052 }
0053
0054 unsigned int stations = 0;
0055 for (std::map<int, unsigned int>::const_iterator station_iter = station_map.begin();
0056 station_iter != station_map.end();
0057 ++station_iter) {
0058 if (station_iter->second > m_minHitsPerStation)
0059 stations++;
0060 }
0061 if (stations >= m_minStations) {
0062 result.push_back(track);
0063 }
0064 }
0065
0066 return result;
0067 }