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,
"useHILoosePixModInnermostLayersCut",
false,
184 "IBL or next layer hit, otherwise zero expected next layer hits"};
186 {
this,
"minNSiHits", -1,
"Minimum silicon (pixel + SCT) hits"};
189 "Maximum silicon (pixel + SCT) sensors shared with other track"};
191 {
this,
"minNSiHitsIfSiSharedHits", -1,
192 "Minimum number of silicon hits if there are any shared silicon hits"};
194 {
this,
"maxNSiHoles",
LOCAL_MAX_INT,
"Maximum silicon (pixel + SCT) holes"};
196 {
this,
"minNPixelHits", -1,
"Required pixel hits"};
199 "Maximum pixels shared with other tracks"};
202 "Maximum number of missed layers in pixel"};
206 "Eta cutoff for strict silicon hits cut"};
208 {
this,
"minNSiHitsAboveEtaCutoff", -1,
209 "Minimum silicon hits at large pseudorapidity"};
211 {
this,
"maxOneSharedModule",
false,
212 "Allow only 1 shared pixel hit or 2 shared SCT hits, not both"};
214 {
this,
"useEtaDependentMaxChiSq",
false,
215 "Whether or not to use the eta-dependent chi squared per degree of freedom cut"};
218 {
this,
"minNSiHitsPhysical", -1,
219 "Minimum physical silicon hits (i.e. dead sensors do not count)"};
221 {
this,
"minNPixelHitsPhysical", -1,
"Minimum physical pixel hits"};
223 {
this,
"minNSctHitsPhysical", -1,
"Minimum physical SCT hits"};
225 {
this,
"minNSctHits", -1,
"Minimum SCT hits"};
228 "Maximum SCT hits shared with other track"};
232 {
this,
"maxNSctDoubleHoles",
LOCAL_MAX_INT,
"Maximum SCT double holes"};
236 "Maximum eta that ignores TRT hit cuts"};
238 {
this,
"maxEtaForTrtHitCuts", -1.,
239 "Eta above which TRT hit cuts are not applied."};
240 Gaudi::Property<int>
m_minNTrtHits{
this,
"minNTrtHits", -1,
"Minimum TRT hits"};
242 {
this,
"minNTrtHitsPlusOutliers", -1,
"Minimum TRT hits including outliers"};
244 {
this,
"minNTrtHighThresholdHits", -1,
"Minimum high E TRT hits"};
246 {
this,
"minNTrtHighThresholdHitsPlusOutliers", -1,
247 "Minimum high E TRT hits including outliers"};
250 "Maximum TRT hits that are above high energy threshold"};
253 "Maximum TRT hits that are above high energy threshold including outliers"};
256 "Maximum fraction of TRT outliers over TRT hits plus outliers"};
262 "Maximum chi squared per degree of freedom"};
263 Gaudi::Property<double>
m_minProb{
this,
"minProb", -1.,
"Minimum p(chi^2, Ndof)"};
266 "Minimum pt for chi-sq probability cut"};
268 {
this,
"minProbAbovePtCutoff", -1.,
269 "Minimum chi-sq probability above a pt cutoff"};
272 {
this,
"minNUsedHitsdEdx", -1,
"Minimum hits used for dEdx"};
274 {
this,
"minNOverflowHitsdEdx", -1,
"Minimum overflow hits in IBL for dEdx"};
276 {
this,
"eProbHTonlyForXe",
false,
277 "Flag whether to apply the eProbabilityHT cut only when all TRT hits are Xenon"};
279 {
this,
"minEProbabilityHT", -1.,
280 "Minimum High Threshold electron probability"};
283 {
this,
"useExperimentalInnermostLayersCut",
false,
284 "Use the experimental cut on pixel holes"};
288 {
this,
"minNSiHitsMod", -1,
289 "Minimum number of Si hits, with pixel hits counting twice"};
291 {
this,
"minNSiHitsModTop", -1,
292 "Min number of Si hits on top half (pixel counting twice)"};
294 {
this,
"minNSiHitsModBottom", -1,
295 "Min number of Si hits on bottom half (pixel counting twice)"};
299 {
this,
"vecEtaCutoffsForSiHitsCut", {},
300 "Minimum eta cutoffs for each Silicon hit cut"};
302 {
this,
"vecMinNSiHitsAboveEta", {},
303 "Minimum Silicon hits above each eta cutoff"};
305 {
this,
"vecEtaCutoffsForPtCut", {},
"Minimum eta cutoffs for each pT cut"};
307 {
this,
"vecMinPtAboveEta", {},
308 "Minimum transverse momentum above each eta cutoff"};
311 {
this,
"vecPtCutoffsForSctHitsCut", {},
312 "Minimum pt cutoffs for each SCT hits"};
314 {
this,
"vecMinNSctHitsAbovePt", {},
315 "Minimum SCT hits above each pt cutoff"};
318 {
this,
"vecEtaCutoffsForZ0SinThetaCut", {},
319 "Minimum eta cutoffs for each Z0SinTheta value"};
321 {
this,
"vecPtCutoffsForZ0SinThetaCut", {},
322 "Minimum pt cutoffs for each Z0SinTheta value"};
324 {
this,
"vecvecMaxZ0SinThetaAboveEtaPt", {},
325 "Maximum Z0SinTheta value above each eta and pT cutoff"};
328 {
this,
"vecEtaCutoffsForD0Cut", {},
"Minimum eta cutoffs for each D0 value"};
330 {
this,
"vecPtCutoffsForD0Cut", {},
"Minimum pt cutoffs for each D0 value"};
332 {
this,
"vecvecMaxD0AboveEtaPt", {},
333 "Maximum D0 value above each eta and pT cutoff"};
336 {
this,
"vecEtaCutoffsForSctHolesCut", {},
337 "Minimum eta cutoffs for each SctHoles value"};
339 {
this,
"vecPtCutoffsForSctHolesCut", {},
340 "Minimum pt cutoffs for each SctHoles value"};
342 {
this,
"vecvecMaxSctHolesAboveEtaPt", {},
343 "Maximum SctHoles value above each eta and pT cutoff"};
346 {
this,
"vecEtaCutoffsForSctHitsPlusDeadCut", {},
347 "Minimum eta cutoffs for each SctHitsPlusDead value"};
349 {
this,
"vecPtCutoffsForSctHitsPlusDeadCut", {},
350 "Minimum pt cutoffs for each SctHitsPlusDead value"};
352 {
this,
"vecvecMinSctHitsPlusDeadAboveEtaPt", {},
353 "Minimum SctHitsPlusDead value above each eta and pT cutoff"};
360 Gaudi::Property<std::string>
m_cutLevel{
this,
"CutLevel",
""};
363 static const std::unordered_map<std::string, CutLevel>
s_mapCutLevel;
366 Gaudi::Property<bool>
m_initTrkTools{
this,
"UseTrkTrackTools",
false,
"Whether to initialize the Trk::Track tools"};
369 {
this,
"TrackSummaryTool",
"Trk::TrackSummaryTool/TrackSummaryTool"};
371 {
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.