Go to the documentation of this file.00001 #ifndef RecoMuon_L3MuonProducer_L3TkMuonProducer_H
00002 #define RecoMuon_L3MuonProducer_L3TkMuonProducer_H
00003
00013 #include "FWCore/Framework/interface/EDProducer.h"
00014 #include "FWCore/Utilities/interface/InputTag.h"
00015
00016 #include "DataFormats/TrackReco/interface/Track.h"
00017 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00018 #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeed.h"
00019 #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeedCollection.h"
00020 #include "DataFormats/L1Trigger/interface/L1MuonParticle.h"
00021
00022
00023 namespace edm {class ParameterSet; class Event; class EventSetup;}
00024
00025 class L3TkMuonProducer : public edm::EDProducer {
00026
00027 public:
00028
00030 L3TkMuonProducer(const edm::ParameterSet&);
00031
00033 virtual ~L3TkMuonProducer();
00034
00036 virtual void produce(edm::Event&, const edm::EventSetup&);
00037
00038 typedef edm::Ref<L3MuonTrajectorySeedCollection> SeedRef;
00039
00040 private:
00041
00042
00043 edm::InputTag theL3CollectionLabel;
00044
00045
00046 typedef std::pair<unsigned int,unsigned int> pseudoRef;
00047 typedef std::map<pseudoRef, std::pair<reco::TrackRef,SeedRef> > LXtoL3sMap;
00048
00049 pseudoRef makePseudoRef(const L3MuonTrajectorySeed& s){
00050 reco::TrackRef l2ref = s.l2Track();
00051 if (l2ref.isNull()){
00052 l1extra::L1MuonParticleRef l1ref = s.l1Particle();
00053 return std::make_pair(l1ref.id().id(),l1ref.key());
00054 }else return std::make_pair(l2ref.id().id(),l2ref.key());
00055 }
00056
00057 bool sharedSeed(const L3MuonTrajectorySeed& s1,const L3MuonTrajectorySeed& s2);
00058
00059
00060
00061 static bool seedRefBypT(const SeedRef & s1, const SeedRef & s2){
00062 double pt1,pt2;
00063 reco::TrackRef l2ref1 = s1->l2Track();
00064 if (l2ref1.isNull()) pt1=s1->l1Particle()->pt();
00065 else pt1=l2ref1->pt();
00066 reco::TrackRef l2ref2 = s2->l2Track();
00067 if (l2ref2.isNull()) pt2=s2->l1Particle()->pt();
00068 else pt2=l2ref2->pt();
00069 return (pt1>pt2);
00070 }
00071
00072 static bool trackRefBypT(const reco::TrackRef & t1,const reco::TrackRef & t2){
00073 return (t1->pt()>t2->pt());
00074 }
00075
00076
00077
00078 };
00079
00080 #endif