Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-05 23:50:57

0001 #ifndef Alignment_CommonAlignmentAlgorithm_AlignmentTrackSelector_h
0002 #define Alignment_CommonAlignmentAlgorithm_AlignmentTrackSelector_h
0003 
0004 #include "DataFormats/Alignment/interface/AliClusterValueMapFwd.h"
0005 #include "DataFormats/TrackReco/interface/Track.h"
0006 #include "DataFormats/TrackerCommon/interface/TrackerTopology.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/Utilities/interface/EDGetToken.h"
0011 #include "FWCore/Utilities/interface/InputTag.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0013 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0014 #include <vector>
0015 
0016 namespace edm {
0017   class Event;
0018   class EventSetup;
0019   class ParameterSet;
0020 }  // namespace edm
0021 
0022 class TrackingRecHit;
0023 class SiStripRecHit1D;
0024 class SiStripRecHit2D;
0025 
0026 class AlignmentTrackSelector {
0027 public:
0028   typedef std::vector<const reco::Track*> Tracks;
0029 
0030   /// constructor
0031   AlignmentTrackSelector(const edm::ParameterSet& cfg, edm::ConsumesCollector& iC);
0032 
0033   /// destructor
0034   ~AlignmentTrackSelector();
0035 
0036   /// select tracks
0037   Tracks select(const Tracks& tracks, const edm::Event& evt, const edm::EventSetup& eSetup) const;
0038   ///returns if any of the Filters is used.
0039   bool useThisFilter();
0040 
0041   static void fillPSetDescription(edm::ParameterSetDescription& desc);
0042 
0043 private:
0044   /// apply basic cuts on pt,eta,phi,nhit
0045   Tracks basicCuts(const Tracks& tracks, const edm::Event& evt, const edm::EventSetup& eSetup) const;
0046   /// checking hit requirements beyond simple number of valid hits
0047   bool detailedHitsCheck(const reco::Track* track, const edm::Event& evt, const edm::EventSetup& eSetup) const;
0048   bool isHit2D(const TrackingRecHit& hit) const;
0049   /// if valid, check for minimum charge (currently only in strip), if invalid give true
0050   bool isOkCharge(const TrackingRecHit* therechit) const;
0051   bool isOkChargeStripHit(const SiStripRecHit1D& siStripRecHit1D) const;
0052   bool isOkChargeStripHit(const SiStripRecHit2D& siStripRecHit2D) const;
0053   bool isIsolated(const TrackingRecHit* therechit, const edm::Event& evt) const;
0054   bool isOkTrkQuality(const reco::Track* track) const;
0055 
0056   /// filter the n highest pt tracks
0057   Tracks theNHighestPtTracks(const Tracks& tracks) const;
0058 
0059   //filter tracks that do not have a min # of hits taken by the Skim&Prescale workflow
0060   Tracks checkPrescaledHits(const Tracks& tracks, const edm::Event& evt) const;
0061 
0062   /// compare two tracks in pt (used by theNHighestPtTracks)
0063   struct ComparePt {
0064     bool operator()(const reco::Track* t1, const reco::Track* t2) const { return t1->pt() > t2->pt(); }
0065   };
0066   ComparePt ptComparator;
0067 
0068   edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tTopoToken_;
0069 
0070   const bool applyBasicCuts_, applyNHighestPt_, applyMultiplicityFilter_;
0071   const int seedOnlyFromAbove_;
0072   const bool applyIsolation_, chargeCheck_;
0073   const int nHighestPt_, minMultiplicity_, maxMultiplicity_;
0074   const bool multiplicityOnInput_;  /// if true, cut min/maxMultiplicity on input instead of on final result
0075   const double ptMin_, ptMax_, pMin_, pMax_, etaMin_, etaMax_, phiMin_, phiMax_;
0076   const double nHitMin_, nHitMax_, chi2nMax_, d0Min_, d0Max_, dzMin_, dzMax_;
0077   const int theCharge_;
0078   const double minHitChargeStrip_, minHitIsolation_;
0079   edm::EDGetTokenT<SiStripRecHit2DCollection> rphirecHitsToken_;
0080   edm::EDGetTokenT<SiStripMatchedRecHit2DCollection> matchedrecHitsToken_;
0081   const bool countStereoHitAs2D_;  // count hits on stereo components of GluedDet for nHitMin2D_?
0082   const unsigned int nHitMin2D_;
0083   const int minHitsinTIB_, minHitsinTOB_, minHitsinTID_, minHitsinTEC_;
0084   const int minHitsinBPIX_, minHitsinFPIX_, minHitsinPIX_;
0085   const int minHitsinTIDplus_, minHitsinTIDminus_, minHitsinTECplus_, minHitsinTECminus_;
0086   const int minHitsinFPIXplus_, minHitsinFPIXminus_;
0087   const int minHitsinENDCAP_, minHitsinENDCAPplus_, minHitsinENDCAPminus_;
0088   const double maxHitDiffEndcaps_;
0089   const double nLostHitMax_;
0090   std::vector<double> RorZofFirstHitMin_;
0091   std::vector<double> RorZofFirstHitMax_;
0092   std::vector<double> RorZofLastHitMin_;
0093   std::vector<double> RorZofLastHitMax_;
0094 
0095   const edm::InputTag clusterValueMapTag_;                     // ValueMap containing association cluster - flag
0096   edm::EDGetTokenT<AliClusterValueMap> clusterValueMapToken_;  // ValueMap containing association cluster - flag
0097   const int minPrescaledHits_;
0098   const bool applyPrescaledHitsFilter_;
0099 
0100   std::vector<reco::TrackBase::TrackQuality> trkQualities_;
0101 
0102   std::vector<reco::TrackBase::TrackAlgorithm> trkSteps_;
0103   bool applyTrkQualityCheck_;
0104   bool applyIterStepCheck_;
0105 };
0106 
0107 #endif