Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:24:57

0001 #ifndef ConversionTrackPairFinder_H
0002 #define ConversionTrackPairFinder_H
0003 
0004 /** \class ConversionTrackPairFinder
0005  *
0006  *
0007  * \author N. Marinelli - Univ. of Notre Dame
0008  *
0009  * \version   
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  // ConversionTrackPairFinder_H