File indexing completed on 2025-02-05 23:50:57
0001 #include "Alignment/CommonAlignmentProducer/interface/AlignmentCSCOverlapSelector.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 AlignmentCSCOverlapSelector::AlignmentCSCOverlapSelector(const edm::ParameterSet &iConfig)
0015 : m_station(iConfig.getParameter<int>("station")),
0016 m_minHitsPerChamber(iConfig.getParameter<unsigned int>("minHitsPerChamber")) {
0017 if (m_station == 0) {
0018 edm::LogInfo("AlignmentCSCOverlapSelector")
0019 << "Acceptable tracks must have " << m_minHitsPerChamber << " in two chambers on all stations." << std::endl;
0020 } else {
0021 edm::LogInfo("AlignmentCSCOverlapSelector") << "Acceptable tracks must have " << m_minHitsPerChamber
0022 << " in two chambers on station " << m_station << "." << std::endl;
0023 }
0024 }
0025
0026 void AlignmentCSCOverlapSelector::fillPSetDescription(edm::ParameterSetDescription &desc) {
0027 desc.add<int>("station", 1);
0028 desc.add<unsigned int>("minHitsPerChamber", 0);
0029 }
0030
0031
0032
0033 AlignmentCSCOverlapSelector::~AlignmentCSCOverlapSelector() {}
0034
0035
0036
0037 AlignmentCSCOverlapSelector::Tracks AlignmentCSCOverlapSelector::select(const Tracks &tracks,
0038 const edm::Event &iEvent) const {
0039 Tracks result;
0040
0041 for (auto const &track : tracks) {
0042 unsigned int MEminus4_even = 0;
0043 unsigned int MEminus4_odd = 0;
0044 unsigned int MEminus3_even = 0;
0045 unsigned int MEminus3_odd = 0;
0046 unsigned int MEminus2_even = 0;
0047 unsigned int MEminus2_odd = 0;
0048 unsigned int MEminus1_even = 0;
0049 unsigned int MEminus1_odd = 0;
0050
0051 unsigned int MEplus1_even = 0;
0052 unsigned int MEplus1_odd = 0;
0053 unsigned int MEplus2_even = 0;
0054 unsigned int MEplus2_odd = 0;
0055 unsigned int MEplus3_even = 0;
0056 unsigned int MEplus3_odd = 0;
0057 unsigned int MEplus4_even = 0;
0058 unsigned int MEplus4_odd = 0;
0059
0060 for (auto const &hit : track->recHits()) {
0061 DetId id = hit->geographicalId();
0062 if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::CSC) {
0063 CSCDetId cscid(id.rawId());
0064 int station = (cscid.endcap() == 1 ? 1 : -1) * cscid.station();
0065
0066 if (station == -4) {
0067 if (cscid.chamber() % 2 == 0)
0068 MEminus4_even++;
0069 else
0070 MEminus4_odd++;
0071 } else if (station == -3) {
0072 if (cscid.chamber() % 2 == 0)
0073 MEminus3_even++;
0074 else
0075 MEminus3_odd++;
0076 } else if (station == -2) {
0077 if (cscid.chamber() % 2 == 0)
0078 MEminus2_even++;
0079 else
0080 MEminus2_odd++;
0081 } else if (station == -1) {
0082 if (cscid.chamber() % 2 == 0)
0083 MEminus1_even++;
0084 else
0085 MEminus1_odd++;
0086 }
0087
0088 else if (station == 1) {
0089 if (cscid.chamber() % 2 == 0)
0090 MEplus1_even++;
0091 else
0092 MEplus1_odd++;
0093 } else if (station == 2) {
0094 if (cscid.chamber() % 2 == 0)
0095 MEplus2_even++;
0096 else
0097 MEplus2_odd++;
0098 } else if (station == 3) {
0099 if (cscid.chamber() % 2 == 0)
0100 MEplus3_even++;
0101 else
0102 MEplus3_odd++;
0103 } else if (station == 4) {
0104 if (cscid.chamber() % 2 == 0)
0105 MEplus4_even++;
0106 else
0107 MEplus4_odd++;
0108 }
0109
0110 }
0111 }
0112
0113 if ((m_station == 0 || m_station == -4) && (MEminus4_even >= m_minHitsPerChamber) &&
0114 (MEminus4_odd >= m_minHitsPerChamber))
0115 result.push_back(track);
0116
0117 else if ((m_station == 0 || m_station == -3) && (MEminus3_even >= m_minHitsPerChamber) &&
0118 (MEminus3_odd >= m_minHitsPerChamber))
0119 result.push_back(track);
0120
0121 else if ((m_station == 0 || m_station == -2) && (MEminus2_even >= m_minHitsPerChamber) &&
0122 (MEminus2_odd >= m_minHitsPerChamber))
0123 result.push_back(track);
0124
0125 else if ((m_station == 0 || m_station == -1) && (MEminus1_even >= m_minHitsPerChamber) &&
0126 (MEminus1_odd >= m_minHitsPerChamber))
0127 result.push_back(track);
0128
0129 else if ((m_station == 0 || m_station == 1) && (MEplus1_even >= m_minHitsPerChamber) &&
0130 (MEplus1_odd >= m_minHitsPerChamber))
0131 result.push_back(track);
0132
0133 else if ((m_station == 0 || m_station == 2) && (MEplus2_even >= m_minHitsPerChamber) &&
0134 (MEplus2_odd >= m_minHitsPerChamber))
0135 result.push_back(track);
0136
0137 else if ((m_station == 0 || m_station == 3) && (MEplus3_even >= m_minHitsPerChamber) &&
0138 (MEplus3_odd >= m_minHitsPerChamber))
0139 result.push_back(track);
0140
0141 else if ((m_station == 0 || m_station == 4) && (MEplus4_even >= m_minHitsPerChamber) &&
0142 (MEplus4_odd >= m_minHitsPerChamber))
0143 result.push_back(track);
0144
0145 }
0146
0147 return result;
0148 }