Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // constructor ----------------------------------------------------------------
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 // destructor -----------------------------------------------------------------
0032 
0033 AlignmentCSCOverlapSelector::~AlignmentCSCOverlapSelector() {}
0034 
0035 // do selection ---------------------------------------------------------------
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       }  // end if it's a CSC hit
0111     }  // end loop over hits
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   }  // end loop over tracks
0146 
0147   return result;
0148 }