7#ifndef INDETTRACKSELECTIONTOOL_INDETTRACKSELECTIONTOOL_H
8#define INDETTRACKSELECTIONTOOL_INDETTRACKSELECTIONTOOL_H
17#include "GaudiKernel/ToolHandle.h"
18#include "GaudiKernel/ServiceHandle.h"
27#include <unordered_map>
76 virtual StatusCode
finalize()
override;
100 const Trk::Vertex* vertex =
nullptr )
const override;
105 virtual void setCutLevel( InDet::CutLevel level,
bool overwrite =
true ) override
106 __attribute__ ((deprecated(
"For consistency with the athena interface, the cut level is best set through the \"CutLevel\" property.")));
116 template <
int VERBOSE, class Trk_Helper>
119 template <class Trk_Helper>
137 static inline bool maxDoubleIsSet(
double cutValue) {
return cutValue < InDet::InDetTrackSelectionTool::LOCAL_MAX_DOUBLE && cutValue >= 0.;}
138 static inline bool maxIntIsSet(
int cutValue){
return cutValue < InDet::InDetTrackSelectionTool::LOCAL_MAX_INT && cutValue >= 0;}
142 Gaudi::Property<double>
m_minPt{
this,
"minPt", -1.,
"Minimum transverse momentum"};
143 Gaudi::Property<double>
m_minP{
this,
"minP", -1.,
"Minimum momentum"};
146 {
this,
"maxAbsEta",
LOCAL_MAX_DOUBLE,
"Maximum magnitude of pseudorapidity"};
158 {
this,
"maxSigmaZ0SinTheta",
LOCAL_MAX_DOUBLE,
"Maximum error on z0*sin(theta)"};
165 "Significance cut on |z0*sin(theta)|"};
168 {
this,
"minNInnermostLayerHits", -1,
169 "Required hits on the innermost pixel layer"};
171 {
this,
"minNNextToInnermostLayerHits", -1,
172 "Required hits on the next to innermost pixel layer"};
174 {
this,
"minNBothInnermostLayersHits", -1,
175 "Required hits on two innermost pixel layers"};
178 "Maximum shared hits in innermost pixel layer"};
180 {
this,
"useMinBiasInnermostLayersCut", 0,
181 "IBL hit if expected, otherwise next layer hit if expected"};
183 {
this,
"minNSiHits", -1,
"Minimum silicon (pixel + SCT) hits"};
186 "Maximum silicon (pixel + SCT) sensors shared with other track"};
188 {
this,
"minNSiHitsIfSiSharedHits", -1,
189 "Minimum number of silicon hits if there are any shared silicon hits"};
191 {
this,
"maxNSiHoles",
LOCAL_MAX_INT,
"Maximum silicon (pixel + SCT) holes"};
193 {
this,
"minNPixelHits", -1,
"Required pixel hits"};
196 "Maximum pixels shared with other tracks"};
199 "Maximum number of missed layers in pixel"};
203 "Eta cutoff for strict silicon hits cut"};
205 {
this,
"minNSiHitsAboveEtaCutoff", -1,
206 "Minimum silicon hits at large pseudorapidity"};
208 {
this,
"maxOneSharedModule",
false,
209 "Allow only 1 shared pixel hit or 2 shared SCT hits, not both"};
211 {
this,
"useEtaDependentMaxChiSq",
false,
212 "Whether or not to use the eta-dependent chi squared per degree of freedom cut"};
215 {
this,
"minNSiHitsPhysical", -1,
216 "Minimum physical silicon hits (i.e. dead sensors do not count)"};
218 {
this,
"minNPixelHitsPhysical", -1,
"Minimum physical pixel hits"};
220 {
this,
"minNSctHitsPhysical", -1,
"Minimum physical SCT hits"};
222 {
this,
"minNSctHits", -1,
"Minimum SCT hits"};
225 "Maximum SCT hits shared with other track"};
229 {
this,
"maxNSctDoubleHoles",
LOCAL_MAX_INT,
"Maximum SCT double holes"};
233 "Maximum eta that ignores TRT hit cuts"};
235 {
this,
"maxEtaForTrtHitCuts", -1.,
236 "Eta above which TRT hit cuts are not applied."};
237 Gaudi::Property<int>
m_minNTrtHits{
this,
"minNTrtHits", -1,
"Minimum TRT hits"};
239 {
this,
"minNTrtHitsPlusOutliers", -1,
"Minimum TRT hits including outliers"};
241 {
this,
"minNTrtHighThresholdHits", -1,
"Minimum high E TRT hits"};
243 {
this,
"minNTrtHighThresholdHitsPlusOutliers", -1,
244 "Minimum high E TRT hits including outliers"};
247 "Maximum TRT hits that are above high energy threshold"};
250 "Maximum TRT hits that are above high energy threshold including outliers"};
253 "Maximum fraction of TRT outliers over TRT hits plus outliers"};
259 "Maximum chi squared per degree of freedom"};
260 Gaudi::Property<double>
m_minProb{
this,
"minProb", -1.,
"Minimum p(chi^2, Ndof)"};
263 "Minimum pt for chi-sq probability cut"};
265 {
this,
"minProbAbovePtCutoff", -1.,
266 "Minimum chi-sq probability above a pt cutoff"};
269 {
this,
"minNUsedHitsdEdx", -1,
"Minimum hits used for dEdx"};
271 {
this,
"minNOverflowHitsdEdx", -1,
"Minimum overflow hits in IBL for dEdx"};
273 {
this,
"eProbHTonlyForXe",
false,
274 "Flag whether to apply the eProbabilityHT cut only when all TRT hits are Xenon"};
276 {
this,
"minEProbabilityHT", -1.,
277 "Minimum High Threshold electron probability"};
280 {
this,
"useExperimentalInnermostLayersCut",
false,
281 "Use the experimental cut on pixel holes"};
285 {
this,
"minNSiHitsMod", -1,
286 "Minimum number of Si hits, with pixel hits counting twice"};
288 {
this,
"minNSiHitsModTop", -1,
289 "Min number of Si hits on top half (pixel counting twice)"};
291 {
this,
"minNSiHitsModBottom", -1,
292 "Min number of Si hits on bottom half (pixel counting twice)"};
296 {
this,
"vecEtaCutoffsForSiHitsCut", {},
297 "Minimum eta cutoffs for each Silicon hit cut"};
299 {
this,
"vecMinNSiHitsAboveEta", {},
300 "Minimum Silicon hits above each eta cutoff"};
302 {
this,
"vecEtaCutoffsForPtCut", {},
"Minimum eta cutoffs for each pT cut"};
304 {
this,
"vecMinPtAboveEta", {},
305 "Minimum transverse momentum above each eta cutoff"};
308 {
this,
"vecPtCutoffsForSctHitsCut", {},
309 "Minimum pt cutoffs for each SCT hits"};
311 {
this,
"vecMinNSctHitsAbovePt", {},
312 "Minimum SCT hits above each pt cutoff"};
315 {
this,
"vecEtaCutoffsForZ0SinThetaCut", {},
316 "Minimum eta cutoffs for each Z0SinTheta value"};
318 {
this,
"vecPtCutoffsForZ0SinThetaCut", {},
319 "Minimum pt cutoffs for each Z0SinTheta value"};
321 {
this,
"vecvecMaxZ0SinThetaAboveEtaPt", {},
322 "Maximum Z0SinTheta value above each eta and pT cutoff"};
325 {
this,
"vecEtaCutoffsForD0Cut", {},
"Minimum eta cutoffs for each D0 value"};
327 {
this,
"vecPtCutoffsForD0Cut", {},
"Minimum pt cutoffs for each D0 value"};
329 {
this,
"vecvecMaxD0AboveEtaPt", {},
330 "Maximum D0 value above each eta and pT cutoff"};
333 {
this,
"vecEtaCutoffsForSctHolesCut", {},
334 "Minimum eta cutoffs for each SctHoles value"};
336 {
this,
"vecPtCutoffsForSctHolesCut", {},
337 "Minimum pt cutoffs for each SctHoles value"};
339 {
this,
"vecvecMaxSctHolesAboveEtaPt", {},
340 "Maximum SctHoles value above each eta and pT cutoff"};
343 {
this,
"vecEtaCutoffsForSctHitsPlusDeadCut", {},
344 "Minimum eta cutoffs for each SctHitsPlusDead value"};
346 {
this,
"vecPtCutoffsForSctHitsPlusDeadCut", {},
347 "Minimum pt cutoffs for each SctHitsPlusDead value"};
349 {
this,
"vecvecMinSctHitsPlusDeadAboveEtaPt", {},
350 "Minimum SctHitsPlusDead value above each eta and pT cutoff"};
357 Gaudi::Property<std::string>
m_cutLevel{
this,
"CutLevel",
""};
360 static const std::unordered_map<std::string, CutLevel>
s_mapCutLevel;
363 Gaudi::Property<bool>
m_initTrkTools{
this,
"UseTrkTrackTools",
false,
"Whether to initialize the Trk::Track tools"};
366 {
this,
"TrackSummaryTool",
"Trk::TrackSummaryTool/TrackSummaryTool"};
368 {
this,
"Extrapolator",
"Trk::Extrapolator/Extrapolator"};
__attribute__((always_inline)) inline uint16_t TileCalibDrawerBase
Object to encode the result of several cuts.
This class is a simplest representation of a vertex candidate.
Class mimicking the AthMessaging class from the offline software.
Class providing the definition of the 4-vector interface.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.