Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-05 23:51:00

0001 #ifndef Calibration_TkAlCaRecoProducers_CalibrationTrackSelector_h
0002 #define Calibration_TkAlCaRecoProducers_CalibrationTrackSelector_h
0003 
0004 #include <vector>
0005 
0006 #include "DataFormats/TrackReco/interface/Track.h"
0007 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h"
0008 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h"
0009 #include "FWCore/Framework/interface/ConsumesCollector.h"
0010 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0011 #include "FWCore/Utilities/interface/InputTag.h"
0012 
0013 namespace edm {
0014   class Event;
0015   class ParameterSet;
0016 }  // namespace edm
0017 
0018 class TrackingRecHit;
0019 
0020 class CalibrationTrackSelector {
0021 public:
0022   typedef std::vector<const reco::Track *> Tracks;
0023 
0024   /// constructor
0025   CalibrationTrackSelector(const edm::ParameterSet &cfg, edm::ConsumesCollector &iC);
0026 
0027   /// destructor
0028   ~CalibrationTrackSelector();
0029 
0030   /// select tracks
0031   Tracks select(const Tracks &tracks, const edm::Event &evt) const;
0032 
0033   static void fillPSetDescription(edm::ParameterSetDescription &desc);
0034 
0035 private:
0036   /// apply basic cuts on pt,eta,phi,nhit
0037   Tracks basicCuts(const Tracks &tracks, const edm::Event &evt) const;
0038   /// checking hit requirements beyond simple number of valid hits
0039   bool detailedHitsCheck(const reco::Track *track, const edm::Event &evt) const;
0040   bool isHit2D(const TrackingRecHit &hit) const;
0041   bool isOkCharge(const TrackingRecHit *therechit) const;
0042   bool isIsolated(const TrackingRecHit *therechit, const edm::Event &evt) const;
0043 
0044   /// filter the n highest pt tracks
0045   Tracks theNHighestPtTracks(const Tracks &tracks) const;
0046 
0047   /// compare two tracks in pt (used by theNHighestPtTracks)
0048   struct ComparePt {
0049     bool operator()(const reco::Track *t1, const reco::Track *t2) const { return t1->pt() > t2->pt(); }
0050   };
0051   ComparePt ptComparator;
0052 
0053   const bool applyBasicCuts_, applyNHighestPt_, applyMultiplicityFilter_;
0054   const int seedOnlyFromAbove_;
0055   const bool applyIsolation_, chargeCheck_;
0056   const int nHighestPt_, minMultiplicity_, maxMultiplicity_;
0057   const bool multiplicityOnInput_;  /// if true, cut min/maxMultiplicity on input
0058                                     /// instead of on final result
0059   const double ptMin_, ptMax_, etaMin_, etaMax_, phiMin_, phiMax_, nHitMin_, nHitMax_, chi2nMax_;
0060   const double minHitChargeStrip_, minHitIsolation_;
0061   const edm::InputTag rphirecHitsTag_;
0062   const edm::InputTag matchedrecHitsTag_;
0063   const unsigned int nHitMin2D_;
0064   const int minHitsinTIB_, minHitsinTOB_, minHitsinTID_, minHitsinTEC_, minHitsinBPIX_, minHitsinFPIX_;
0065   const edm::EDGetTokenT<SiStripRecHit2DCollection> rphirecHitsToken_;
0066   const edm::EDGetTokenT<SiStripMatchedRecHit2DCollection> matchedrecHitsToken_;
0067 };
0068 
0069 #endif