Go to the documentation of this file.00001 #ifndef _MuonIdentification_MuonMesh_h_
00002 #define _MuonIdentification_MuonMesh_h_
00003
00004
00005
00006
00007
00008 #include <vector>
00009 #include <utility>
00010 #include <map>
00011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00012 #include "DataFormats/MuonReco/interface/Muon.h"
00013 #include "DataFormats/TrackingRecHit/interface/RecSegment.h"
00014
00015 class CSCGeometry;
00016
00017 class MuonMesh {
00018
00019 typedef std::map<reco::Muon*,
00020 std::vector<std::pair<reco::Muon*,
00021 std::pair<reco::MuonChamberMatch*,
00022 reco::MuonSegmentMatch*
00023 >
00024 >
00025 >
00026 > MeshType;
00027
00028 typedef std::vector<std::pair<reco::Muon*,
00029 std::pair<reco::MuonChamberMatch*,
00030 reco::MuonSegmentMatch*
00031 >
00032 >
00033 > AssociationType;
00034
00035 public:
00036
00037 MuonMesh(const edm::ParameterSet&);
00038
00039 void runMesh(std::vector<reco::Muon>* p) {fillMesh(p); pruneMesh();}
00040
00041 void clearMesh() { mesh_.clear(); }
00042
00043 void setCSCGeometry(const CSCGeometry* pg) { geometry_ = pg; }
00044
00045 bool isDuplicateOf(const CSCSegmentRef& lhs, const CSCSegmentRef& rhs) const;
00046 bool isDuplicateOf(const std::pair<CSCDetId,CSCSegmentRef>& rhs,
00047 const std::pair<CSCDetId,CSCSegmentRef>& lhs) const;
00048 bool isClusteredWith(const std::pair<CSCDetId,CSCSegmentRef>& lhs,
00049 const std::pair<CSCDetId,CSCSegmentRef>& rhs) const;
00050
00051 private:
00052
00053 void fillMesh(std::vector<reco::Muon>*);
00054
00055 void pruneMesh();
00056
00057
00058
00059
00060 bool withinTwoSigma(const std::pair<CSCDetId,CSCSegmentRef>& rhs,
00061 const std::pair<CSCDetId,CSCSegmentRef>& lhs) const { return false; }
00062
00063
00064
00065
00066
00067 MeshType mesh_;
00068
00069
00070 const CSCGeometry* geometry_;
00071
00072
00073 const bool doME1a, doOverlaps, doClustering;
00074
00075 const double OverlapDPhi, OverlapDTheta, ClusterDPhi, ClusterDTheta;
00076 };
00077
00078 #endif