CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/Alignment/CommonAlignmentProducer/src/AlignmentCSCOverlapSelector.cc

Go to the documentation of this file.
00001 #include "Alignment/CommonAlignmentProducer/interface/AlignmentCSCOverlapSelector.h"
00002 
00003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00005 
00006 #include "DataFormats/DetId/interface/DetId.h"
00007 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
00008 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
00009 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00010 #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
00011 
00012 // constructor ----------------------------------------------------------------
00013 
00014 AlignmentCSCOverlapSelector::AlignmentCSCOverlapSelector(const edm::ParameterSet &iConfig)
00015    : m_station(iConfig.getParameter<int>("station"))
00016    , m_minHitsPerChamber(iConfig.getParameter<unsigned int>("minHitsPerChamber"))
00017 {
00018    if (m_station == 0) {
00019       edm::LogInfo("AlignmentCSCOverlapSelector") 
00020          << "Acceptable tracks must have " << m_minHitsPerChamber << " in two chambers on all stations." << std::endl;
00021    }
00022    else {
00023       edm::LogInfo("AlignmentCSCOverlapSelector") 
00024          << "Acceptable tracks must have " << m_minHitsPerChamber << " in two chambers on station " << m_station << "." << std::endl;
00025    }
00026 }
00027 
00028 // destructor -----------------------------------------------------------------
00029 
00030 AlignmentCSCOverlapSelector::~AlignmentCSCOverlapSelector() {}
00031 
00032 // do selection ---------------------------------------------------------------
00033 
00034 AlignmentCSCOverlapSelector::Tracks 
00035 AlignmentCSCOverlapSelector::select(const Tracks &tracks, const edm::Event &iEvent) const {
00036    Tracks result;
00037 
00038    for (Tracks::const_iterator track = tracks.begin();  track != tracks.end();  ++track) {
00039       unsigned int MEminus4_even = 0;
00040       unsigned int MEminus4_odd = 0;
00041       unsigned int MEminus3_even = 0;
00042       unsigned int MEminus3_odd = 0;
00043       unsigned int MEminus2_even = 0;
00044       unsigned int MEminus2_odd = 0;
00045       unsigned int MEminus1_even = 0;
00046       unsigned int MEminus1_odd = 0;
00047 
00048       unsigned int MEplus1_even = 0;
00049       unsigned int MEplus1_odd = 0;
00050       unsigned int MEplus2_even = 0;
00051       unsigned int MEplus2_odd = 0;
00052       unsigned int MEplus3_even = 0;
00053       unsigned int MEplus3_odd = 0;
00054       unsigned int MEplus4_even = 0;
00055       unsigned int MEplus4_odd = 0;
00056 
00057       for (trackingRecHit_iterator hit = (*track)->recHitsBegin();  hit != (*track)->recHitsEnd();  ++hit) {
00058          DetId id = (*hit)->geographicalId();
00059          if (id.det() == DetId::Muon  &&  id.subdetId() == MuonSubdetId::CSC) {
00060             CSCDetId cscid(id.rawId());
00061             int station = (cscid.endcap() == 1 ? 1 : -1) * cscid.station();
00062 
00063             if (station == -4) {
00064                if (cscid.chamber() % 2 == 0) MEminus4_even++;
00065                else MEminus4_odd++;
00066             }
00067             else if (station == -3) {
00068                if (cscid.chamber() % 2 == 0) MEminus3_even++;
00069                else MEminus3_odd++;
00070             }
00071             else if (station == -2) {
00072                if (cscid.chamber() % 2 == 0) MEminus2_even++;
00073                else MEminus2_odd++;
00074             }
00075             else if (station == -1) {
00076                if (cscid.chamber() % 2 == 0) MEminus1_even++;
00077                else MEminus1_odd++;
00078             }
00079 
00080             else if (station == 1) {
00081                if (cscid.chamber() % 2 == 0) MEplus1_even++;
00082                else MEplus1_odd++;
00083             }
00084             else if (station == 2) {
00085                if (cscid.chamber() % 2 == 0) MEplus2_even++;
00086                else MEplus2_odd++;
00087             }
00088             else if (station == 3) {
00089                if (cscid.chamber() % 2 == 0) MEplus3_even++;
00090                else MEplus3_odd++;
00091             }
00092             else if (station == 4) {
00093                if (cscid.chamber() % 2 == 0) MEplus4_even++;
00094                else MEplus4_odd++;
00095             }
00096 
00097          } // end if it's a CSC hit
00098       } // end loop over hits
00099 
00100       if ((m_station == 0  ||  m_station == -4)  &&
00101           (MEminus4_even >= m_minHitsPerChamber)  &&  (MEminus4_odd >= m_minHitsPerChamber)) result.push_back(*track);
00102 
00103       else if ((m_station == 0  ||  m_station == -3)  &&
00104                (MEminus3_even >= m_minHitsPerChamber)  &&  (MEminus3_odd >= m_minHitsPerChamber)) result.push_back(*track);
00105 
00106       else if ((m_station == 0  ||  m_station == -2)  &&
00107                (MEminus2_even >= m_minHitsPerChamber)  &&  (MEminus2_odd >= m_minHitsPerChamber)) result.push_back(*track);
00108 
00109       else if ((m_station == 0  ||  m_station == -1)  &&
00110                (MEminus1_even >= m_minHitsPerChamber)  &&  (MEminus1_odd >= m_minHitsPerChamber)) result.push_back(*track);
00111 
00112       else if ((m_station == 0  ||  m_station == 1)  &&
00113                (MEplus1_even >= m_minHitsPerChamber)  &&  (MEplus1_odd >= m_minHitsPerChamber)) result.push_back(*track);
00114 
00115       else if ((m_station == 0  ||  m_station == 2)  &&
00116                (MEplus2_even >= m_minHitsPerChamber)  &&  (MEplus2_odd >= m_minHitsPerChamber)) result.push_back(*track);
00117 
00118       else if ((m_station == 0  ||  m_station == 3)  &&
00119                (MEplus3_even >= m_minHitsPerChamber)  &&  (MEplus3_odd >= m_minHitsPerChamber)) result.push_back(*track);
00120 
00121       else if ((m_station == 0  ||  m_station == 4)  &&
00122                (MEplus4_even >= m_minHitsPerChamber)  &&  (MEplus4_odd >= m_minHitsPerChamber)) result.push_back(*track);
00123 
00124    } // end loop over tracks
00125   
00126    return result;
00127 }