Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 14:25:53

0001 #ifndef _MuonIdentification_MuonMesh_h_
0002 #define _MuonIdentification_MuonMesh_h_
0003 //
0004 // Creates a mesh of muons connected by overlapping segments
0005 // Original author: Lindsey Gray
0006 //
0007 
0008 #include <vector>
0009 #include <utility>
0010 #include <map>
0011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0012 #include "DataFormats/MuonReco/interface/Muon.h"
0013 #include "DataFormats/TrackingRecHit/interface/RecSegment.h"
0014 
0015 class CSCGeometry;
0016 
0017 class MuonMesh {
0018   typedef std::map<reco::Muon*,
0019                    std::vector<std::pair<reco::Muon*, std::pair<reco::MuonChamberMatch*, reco::MuonSegmentMatch*> > > >
0020       MeshType;
0021 
0022   typedef std::vector<std::pair<reco::Muon*, std::pair<reco::MuonChamberMatch*, reco::MuonSegmentMatch*> > >
0023       AssociationType;
0024 
0025 public:
0026   MuonMesh(const edm::ParameterSet&);
0027 
0028   void runMesh(std::vector<reco::Muon>* p) {
0029     fillMesh(p);
0030     pruneMesh();
0031   }
0032 
0033   void clearMesh() { mesh_.clear(); }
0034 
0035   void setCSCGeometry(const CSCGeometry* pg) { geometry_ = pg; }
0036 
0037   bool isDuplicateOf(const CSCSegmentRef& lhs, const CSCSegmentRef& rhs) const;
0038   bool isDuplicateOf(const std::pair<CSCDetId, CSCSegmentRef>& rhs,
0039                      const std::pair<CSCDetId, CSCSegmentRef>& lhs) const;
0040   bool isClusteredWith(const std::pair<CSCDetId, CSCSegmentRef>& lhs,
0041                        const std::pair<CSCDetId, CSCSegmentRef>& rhs) const;
0042 
0043 private:
0044   void fillMesh(std::vector<reco::Muon>*);
0045 
0046   void pruneMesh();
0047 
0048   // implement to remove cases where two segments in the same
0049   // chamber overlap within 2 sigma of ALL of their errors
0050   bool withinTwoSigma(const std::pair<CSCDetId, CSCSegmentRef>& rhs,
0051                       const std::pair<CSCDetId, CSCSegmentRef>& lhs) const {
0052     return false;
0053   }
0054 
0055   MeshType mesh_;
0056 
0057   // geometry cache for segment arbitration
0058   const CSCGeometry* geometry_;
0059 
0060   // do various cleanings?
0061   const bool doME1a, doOverlaps, doClustering;
0062   // overlap and clustering parameters
0063   const double OverlapDPhi, OverlapDTheta, ClusterDPhi, ClusterDTheta;
0064 };
0065 
0066 #endif