Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // constructor ----------------------------------------------------------------
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 // destructor -----------------------------------------------------------------
0028 
0029 AlignmentCSCBeamHaloSelector::~AlignmentCSCBeamHaloSelector() {}
0030 
0031 // do selection ---------------------------------------------------------------
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       }  // end if it's a CSC hit
0052     }  // end loop over hits
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   }  // end loop over tracks
0065 
0066   return result;
0067 }