CMS 3D CMS Logo

RecoTrackSelectorBase.h
Go to the documentation of this file.
1 #ifndef CommonTools_RecoAlgos_RecoTrackSelectorBase_h
2 #define CommonTools_RecoAlgos_RecoTrackSelectorBase_h
3 
8 
15 
17 public:
20  : ptMin_(cfg.getParameter<double>("ptMin")),
21  minRapidity_(cfg.getParameter<double>("minRapidity")),
22  maxRapidity_(cfg.getParameter<double>("maxRapidity")),
23  meanPhi_((cfg.getParameter<double>("minPhi") + cfg.getParameter<double>("maxPhi")) / 2.),
24  rangePhi_((cfg.getParameter<double>("maxPhi") - cfg.getParameter<double>("minPhi")) / 2.),
25  tip_(cfg.getParameter<double>("tip")),
26  lip_(cfg.getParameter<double>("lip")),
27  maxChi2_(cfg.getParameter<double>("maxChi2")),
28  minHit_(cfg.getParameter<int>("minHit")),
29  minPixelHit_(cfg.getParameter<int>("minPixelHit")),
30  minLayer_(cfg.getParameter<int>("minLayer")),
31  min3DLayer_(cfg.getParameter<int>("min3DLayer")),
32  usePV_(false),
33  invertRapidityCut_(cfg.getParameter<bool>("invertRapidityCut")) {
34  const auto minPhi = cfg.getParameter<double>("minPhi");
35  const auto maxPhi = cfg.getParameter<double>("maxPhi");
36  if (minPhi >= maxPhi) {
37  throw cms::Exception("Configuration")
38  << "RecoTrackSelectorPhase: minPhi (" << minPhi << ") must be smaller than maxPhi (" << maxPhi
39  << "). The range is constructed from minPhi to maxPhi around their average.";
40  }
41  if (minPhi >= M_PI) {
42  throw cms::Exception("Configuration")
43  << "RecoTrackSelectorPhase: minPhi (" << minPhi
44  << ") must be smaller than PI. The range is constructed from minPhi to maxPhi around their average.";
45  }
46  if (maxPhi <= -M_PI) {
47  throw cms::Exception("Configuration")
48  << "RecoTrackSelectorPhase: maxPhi (" << maxPhi
49  << ") must be larger than -PI. The range is constructed from minPhi to maxPhi around their average.";
50  }
51 
52  for (const std::string& quality : cfg.getParameter<std::vector<std::string> >("quality"))
54  for (const std::string& algorithm : cfg.getParameter<std::vector<std::string> >("algorithm"))
56  for (const std::string& algorithm : cfg.getParameter<std::vector<std::string> >("originalAlgorithm"))
58  for (const std::string& algorithm : cfg.getParameter<std::vector<std::string> >("algorithmMaskContains"))
60  }
61 
63  usePV_ = cfg.getParameter<bool>("usePV");
64  bsSrcToken_ = iC.consumes<reco::BeamSpot>(cfg.getParameter<edm::InputTag>("beamSpot"));
65  if (usePV_)
66  vertexToken_ = iC.consumes<reco::VertexCollection>(cfg.getParameter<edm::InputTag>("vertexTag"));
67  }
68 
69  void init(const edm::Event& event, const edm::EventSetup& es) {
71  event.getByToken(bsSrcToken_, beamSpot);
72  vertex_ = beamSpot->position();
73  if (!usePV_)
74  return;
76  event.getByToken(vertexToken_, hVtx);
77  if (hVtx->empty())
78  return;
79  vertex_ = (*hVtx)[0].position();
80  }
81 
82  bool operator()(const reco::TrackRef& tref) const { return (*this)(*tref); }
83 
84  bool operator()(const reco::Track& t) const { return (*this)(t, vertex_); }
85 
86  bool operator()(const reco::Track& t, const reco::Track::Point& vertex) const {
87  bool quality_ok = true;
88  if (!quality_.empty()) {
89  quality_ok = false;
90  for (unsigned int i = 0; i < quality_.size(); ++i) {
91  if (t.quality(quality_[i])) {
92  quality_ok = true;
93  break;
94  }
95  }
96  }
97 
98  bool algo_ok = true;
99  if (!algorithm_.empty()) {
100  if (std::find(algorithm_.begin(), algorithm_.end(), t.algo()) == algorithm_.end())
101  algo_ok = false;
102  }
103  if (!originalAlgorithm_.empty() && algo_ok) {
104  if (std::find(originalAlgorithm_.begin(), originalAlgorithm_.end(), t.originalAlgo()) == originalAlgorithm_.end())
105  algo_ok = false;
106  }
107  if (!algorithmMask_.empty() && algo_ok) {
108  if (std::find_if(algorithmMask_.begin(),
109  algorithmMask_.end(),
110  // for some reason I have to either explicitly give the return type, or use static_cast<bool>()
111  [&](reco::TrackBase::TrackAlgorithm algo) -> bool { return t.algoMask()[algo]; }) ==
112  algorithmMask_.end())
113  algo_ok = false;
114  }
115 
116  const auto dphi = deltaPhi(t.phi(), meanPhi_);
117 
118  auto etaOk = [&](const reco::Track& p) -> bool {
119  float eta = p.eta();
120  if (!invertRapidityCut_)
121  return (eta >= minRapidity_) && (eta <= maxRapidity_);
122  else
123  return (eta < minRapidity_ || eta > maxRapidity_);
124  };
125 
126  return ((algo_ok & quality_ok) && t.hitPattern().numberOfValidHits() >= minHit_ &&
127  t.hitPattern().numberOfValidPixelHits() >= minPixelHit_ &&
128  t.hitPattern().trackerLayersWithMeasurement() >= minLayer_ &&
129  t.hitPattern().pixelLayersWithMeasurement() + t.hitPattern().numberOfValidStripLayersWithMonoAndStereo() >=
130  min3DLayer_ &&
131  fabs(t.pt()) >= ptMin_ && etaOk(t) && dphi >= -rangePhi_ && dphi <= rangePhi_ &&
132  fabs(t.dxy(vertex)) <= tip_ && fabs(t.dsz(vertex)) <= lip_ && t.normalizedChi2() <= maxChi2_);
133  }
134 
135 private:
136  double ptMin_;
137  double minRapidity_;
138  double maxRapidity_;
139  double meanPhi_;
140  double rangePhi_;
141  double tip_;
142  double lip_;
143  double maxChi2_;
144  int minHit_;
148  bool usePV_;
150 
153 
154  std::vector<reco::TrackBase::TrackQuality> quality_;
155  std::vector<reco::TrackBase::TrackAlgorithm> algorithm_;
156  std::vector<reco::TrackBase::TrackAlgorithm> originalAlgorithm_;
157  std::vector<reco::TrackBase::TrackAlgorithm> algorithmMask_;
158 
160 };
161 
162 #endif
RecoTrackSelectorBase::algorithm_
std::vector< reco::TrackBase::TrackAlgorithm > algorithm_
Definition: RecoTrackSelectorBase.h:155
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
RecoTrackSelectorBase::invertRapidityCut_
bool invertRapidityCut_
Definition: RecoTrackSelectorBase.h:149
pwdgSkimBPark_cfi.beamSpot
beamSpot
Definition: pwdgSkimBPark_cfi.py:5
RecoTrackSelectorBase::vertexToken_
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
Definition: RecoTrackSelectorBase.h:152
RecoTrackSelectorBase::bsSrcToken_
edm::EDGetTokenT< reco::BeamSpot > bsSrcToken_
Definition: RecoTrackSelectorBase.h:151
funct::false
false
Definition: Factorize.h:29
RecoTrackSelectorBase::quality_
std::vector< reco::TrackBase::TrackQuality > quality_
Definition: RecoTrackSelectorBase.h:154
RecoTrackSelectorBase::operator()
bool operator()(const reco::Track &t) const
Definition: RecoTrackSelectorBase.h:84
RecoTrackSelectorBase::RecoTrackSelectorBase
RecoTrackSelectorBase(const edm::ParameterSet &cfg)
Definition: RecoTrackSelectorBase.h:19
RecoTrackSelectorBase::operator()
bool operator()(const reco::TrackRef &tref) const
Definition: RecoTrackSelectorBase.h:82
deltaPhi.h
edm::EDGetTokenT< reco::BeamSpot >
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
reco::VertexCollection
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
reco::TrackBase::TrackAlgorithm
TrackAlgorithm
track algorithm
Definition: TrackBase.h:89
RecoTrackSelectorBase::operator()
bool operator()(const reco::Track &t, const reco::Track::Point &vertex) const
Definition: RecoTrackSelectorBase.h:86
spr::find
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
edm::Handle< reco::BeamSpot >
edm::Ref< TrackCollection >
HLT_FULL_cff.maxPhi
maxPhi
Definition: HLT_FULL_cff.py:52976
RecoTrackSelectorBase::minPixelHit_
int minPixelHit_
Definition: RecoTrackSelectorBase.h:145
cmsdt::algo
algo
Definition: constants.h:164
RecoTrackSelectorBase::minHit_
int minHit_
Definition: RecoTrackSelectorBase.h:144
RecoTrackSelectorBase::minLayer_
int minLayer_
Definition: RecoTrackSelectorBase.h:146
Track.h
TrackFwd.h
BeamSpot.h
SiPixelRawToDigiRegional_cfi.deltaPhi
deltaPhi
Definition: SiPixelRawToDigiRegional_cfi.py:9
PVValHelper::eta
Definition: PVValidationHelpers.h:69
reco::BeamSpot
Definition: BeamSpot.h:21
RecoTrackSelectorBase::tip_
double tip_
Definition: RecoTrackSelectorBase.h:141
reco::Track
Definition: Track.h:27
RecoTrackSelectorBase::ptMin_
double ptMin_
Definition: RecoTrackSelectorBase.h:136
RecoTrackSelectorBase::lip_
double lip_
Definition: RecoTrackSelectorBase.h:142
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:55
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Vertex.h
RecoTrackSelectorBase::init
void init(const edm::Event &event, const edm::EventSetup &es)
Definition: RecoTrackSelectorBase.h:69
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
RecoTrackSelectorBase::maxRapidity_
double maxRapidity_
Definition: RecoTrackSelectorBase.h:138
RecoTrackSelectorBase::usePV_
bool usePV_
Definition: RecoTrackSelectorBase.h:148
qcdUeDQM_cfi.algorithm
algorithm
Definition: qcdUeDQM_cfi.py:32
RecoTrackSelectorBase::vertex_
reco::Track::Point vertex_
Definition: RecoTrackSelectorBase.h:159
createfilelist.int
int
Definition: createfilelist.py:10
RecoTrackSelectorBase::maxChi2_
double maxChi2_
Definition: RecoTrackSelectorBase.h:143
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:49
edm::EventSetup
Definition: EventSetup.h:57
RecoTrackSelectorBase::RecoTrackSelectorBase
RecoTrackSelectorBase(const edm::ParameterSet &cfg, edm::ConsumesCollector &iC)
Definition: RecoTrackSelectorBase.h:62
InputTag.h
RecoTrackSelectorBase::RecoTrackSelectorBase
RecoTrackSelectorBase()
Definition: RecoTrackSelectorBase.h:18
looper.cfg
cfg
Definition: looper.py:297
reco::TrackBase::Point
math::XYZPoint Point
point in the space
Definition: TrackBase.h:80
reco::TrackBase::qualityByName
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:126
VertexFwd.h
HLT_FULL_cff.minPhi
minPhi
Definition: HLT_FULL_cff.py:52964
RecoTrackSelectorBase::algorithmMask_
std::vector< reco::TrackBase::TrackAlgorithm > algorithmMask_
Definition: RecoTrackSelectorBase.h:157
RecoTrackSelectorBase
Definition: RecoTrackSelectorBase.h:16
qcdUeDQM_cfi.quality
quality
Definition: qcdUeDQM_cfi.py:31
RecoTrackSelectorBase::meanPhi_
double meanPhi_
Definition: RecoTrackSelectorBase.h:139
Exception
Definition: hltDiff.cc:246
RecoTrackSelectorBase::minRapidity_
double minRapidity_
Definition: RecoTrackSelectorBase.h:137
ConsumesCollector.h
reco::TrackBase::algoByName
static TrackAlgorithm algoByName(const std::string &name)
Definition: TrackBase.cc:137
ParameterSet.h
RecoTrackSelectorBase::originalAlgorithm_
std::vector< reco::TrackBase::TrackAlgorithm > originalAlgorithm_
Definition: RecoTrackSelectorBase.h:156
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
RecoTrackSelectorBase::rangePhi_
double rangePhi_
Definition: RecoTrackSelectorBase.h:140
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
RecoTrackSelectorBase::min3DLayer_
int min3DLayer_
Definition: RecoTrackSelectorBase.h:147