File indexing completed on 2023-03-17 11:17:44
0001 #ifndef ConversionTrackPairFinder_H
0002 #define ConversionTrackPairFinder_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "DataFormats/TrackReco/interface/Track.h"
0014 #include "DataFormats/TrackReco/interface/TrackExtra.h"
0015 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
0016 #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h"
0017 #include "DataFormats/GsfTrackReco/interface/GsfTrackExtra.h"
0018
0019
0020 #include "FWCore/Framework/interface/ESHandle.h"
0021 #include "FWCore/Framework/interface/EventSetup.h"
0022 #include "FWCore/Framework/interface/Event.h"
0023 #include "DataFormats/Common/interface/Handle.h"
0024 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
0025 #include "DataFormats/Common/interface/ValueMap.h"
0026
0027
0028 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
0029 #include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h"
0030 #include "DataFormats/EgammaTrackReco/interface/TrackCaloClusterAssociation.h"
0031
0032 struct CompareTwoTracks {
0033 bool operator()(const reco::TransientTrack& a, const reco::TransientTrack& b) const {
0034 return a.impactPointState().globalMomentum().perp() > b.impactPointState().globalMomentum().perp();
0035 }
0036 };
0037
0038 struct CompareTwoTracksVectors {
0039 bool operator()(const std::vector<reco::TransientTrack>& a, const std::vector<reco::TransientTrack>& b) const {
0040 return (a[0].impactPointState().globalMomentum().perp() > b[0].impactPointState().globalMomentum().perp());
0041 }
0042 };
0043
0044 class ConversionTrackPairFinder {
0045 public:
0046 ConversionTrackPairFinder();
0047
0048 ~ConversionTrackPairFinder();
0049
0050 std::map<std::vector<reco::TransientTrack>, reco::CaloClusterPtr, CompareTwoTracksVectors> run(
0051 const std::vector<reco::TransientTrack>& outIn,
0052 const edm::Handle<reco::TrackCollection>& outInTrkHandle,
0053 const edm::Handle<reco::TrackCaloClusterPtrAssociation>& outInTrackSCAssH,
0054 const std::vector<reco::TransientTrack>& inOut,
0055 const edm::Handle<reco::TrackCollection>& inOutTrkHandle,
0056 const edm::Handle<reco::TrackCaloClusterPtrAssociation>& inOutTrackSCAssH);
0057
0058 private:
0059 class ByNumOfHits {
0060 public:
0061 bool operator()(reco::TransientTrack const& a, reco::TransientTrack const& b) {
0062 if (a.numberOfValidHits() == b.numberOfValidHits()) {
0063 return a.normalizedChi2() < b.normalizedChi2();
0064 } else {
0065 return a.numberOfValidHits() > b.numberOfValidHits();
0066 }
0067 }
0068 };
0069 };
0070
0071 #endif