00001 #ifndef TrackAssociatorByHits_h
00002 #define TrackAssociatorByHits_h
00003
00004 #include "FWCore/Framework/interface/Frameworkfwd.h"
00005 #include "FWCore/Framework/interface/Event.h"
00006 #include "FWCore/Framework/interface/EventSetup.h"
00007 #include "FWCore/Framework/interface/ESHandle.h"
00008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00009 #include "DataFormats/Common/interface/EDProduct.h"
00010 #include "DataFormats/Common/interface/Ref.h"
00011 #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
00012
00013
00014 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00015 #include "DataFormats/TrackReco/interface/Track.h"
00016 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00017
00018 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
00019 #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
00020 #include "SimTracker/TrackAssociation/interface/TrackAssociatorBase.h"
00021
00022 class TrackAssociatorByHits : public TrackAssociatorBase {
00023
00024 public:
00025 explicit TrackAssociatorByHits( const edm::ParameterSet& );
00026 ~TrackAssociatorByHits();
00027
00028
00029
00031 reco::RecoToSimCollection associateRecoToSim(edm::RefToBaseVector<reco::Track>&,
00032 edm::RefVector<TrackingParticleCollection>&,
00033 const edm::Event * event = 0 ) const ;
00035 reco::SimToRecoCollection associateSimToReco(edm::RefToBaseVector<reco::Track>&,
00036 edm::RefVector<TrackingParticleCollection>&,
00037 const edm::Event * event = 0 ) const ;
00038
00040 reco::RecoToSimCollection associateRecoToSim(edm::Handle<edm::View<reco::Track> >& tCH,
00041 edm::Handle<TrackingParticleCollection>& tPCH,
00042 const edm::Event * event = 0) const {
00043 return TrackAssociatorBase::associateRecoToSim(tCH,tPCH,event);
00044 }
00045
00047 reco::SimToRecoCollection associateSimToReco(edm::Handle<edm::View<reco::Track> >& tCH,
00048 edm::Handle<TrackingParticleCollection>& tPCH,
00049 const edm::Event * event = 0) const {
00050 return TrackAssociatorBase::associateSimToReco(tCH,tPCH,event);
00051 }
00052
00053
00054 reco::RecoToSimCollectionSeed associateRecoToSim(edm::Handle<edm::View<TrajectorySeed> >&,
00055 edm::Handle<TrackingParticleCollection>&,
00056 const edm::Event * event = 0) const;
00057
00058 reco::SimToRecoCollectionSeed associateSimToReco(edm::Handle<edm::View<TrajectorySeed> >&,
00059 edm::Handle<TrackingParticleCollection>&,
00060 const edm::Event * event = 0) const;
00061 template<typename iter>
00062 void getMatchedIds(std::vector<SimHitIdpr>&,
00063 std::vector<SimHitIdpr>&,
00064 int&,
00065 iter,
00066 iter,
00067 TrackerHitAssociator*) const;
00068
00069 int getShared(std::vector<SimHitIdpr>&,
00070 std::vector<SimHitIdpr>&,
00071 TrackingParticleCollection::const_iterator) const;
00072
00073 private:
00074
00075 const edm::ParameterSet& conf_;
00076 const bool AbsoluteNumberOfHits;
00077 const std::string SimToRecoDenominator;
00078 const double quality_SimToReco;
00079 const double purity_SimToReco;
00080 const double cut_RecoToSim;
00081 const bool UsePixels;
00082 const bool UseGrouped;
00083 const bool UseSplitting;
00084 const bool ThreeHitTracksAreSpecial;
00085 int LayerFromDetid(const DetId&) const;
00086
00087 const TrackingRecHit* getHitPtr(edm::OwnVector<TrackingRecHit>::const_iterator iter) const {return &*iter;}
00088 const TrackingRecHit* getHitPtr(trackingRecHit_iterator iter) const {return &**iter;}
00089 };
00090
00091 #endif