ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::InDetDetailedTrackSelectorTool Class Reference

#include <InDetDetailedTrackSelectorTool.h>

Inheritance diagram for InDet::InDetDetailedTrackSelectorTool:
Collaboration diagram for InDet::InDetDetailedTrackSelectorTool:

Public Types

enum  Grade { Undefined , Good , Shared , nbGrades }

Public Member Functions

StatusCode initialize ()
StatusCode finalize ()
 InDetDetailedTrackSelectorTool (const std::string &t, const std::string &n, const IInterface *p)
 ~InDetDetailedTrackSelectorTool ()
bool decision (const Trk::Track &track, const Trk::Vertex *vertex) const
bool decision (const Trk::TrackParticleBase &track, const Trk::Vertex *vertex) const
bool decision (const xAOD::TrackParticle &track, const xAOD::Vertex *vertex) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

int getCount (const xAOD::TrackParticle &tp, xAOD::SummaryType type) const
bool decision (const Trk::Perigee *track, const AmgSymMatrix(3) *covariancePosition) const
bool decision (const Trk::FitQuality *TrkQuality) const
bool decision (double chi2, int ndf) const
bool decision (const Trk::TrackSummary *summary, const xAOD::TrackParticle *tp, bool useSharedHitInfo, bool useTrtHitInfo, const Trk::Perigee *track, const int nHitTrt, const int nHitTrtPlusOutliers) const
bool preselectionBeforeExtrapolation (const Trk::Perigee &myPerigee) const
Amg::Vector3D getPosOrBeamSpot (const xAOD::Vertex *) const
Trk::VertexgetBeamSpot (const EventContext &) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

DoubleProperty m_pTMin {this, "pTMin", 1.*CLHEP::GeV, "min. pT: |pT|>pTMin"}
DoubleProperty m_pMin {this, "pMin", 0., "min. p = pT/cos(theta): |p| > pMin"}
DoubleProperty m_IPd0Max {this, "IPd0Max", 2.*CLHEP::mm, "max. d0: |d0|<d0Max"}
DoubleProperty m_IPz0Max {this, "IPz0Max", 1.5*CLHEP::mm, "max. z0: |z0*sin(theta)|<z0Max"}
DoubleProperty m_z0Max {this, "z0Max", 9999.*CLHEP::mm, "max. z0: |z0|<z0Max"}
DoubleProperty m_sigIPd0Max {this, "sigIPd0Max", 999.*CLHEP::mm, "max d0 error"}
DoubleProperty m_sigIPz0Max {this, "sigIPz0Max", 999.*CLHEP::mm, "max (error only due to z0)*sin(theta)"}
DoubleProperty m_d0significanceMax {this, "d0significanceMax", -1., "max IP significance d0 (-1 switches it off)"}
DoubleProperty m_z0significanceMax {this, "z0significanceMax", -1., "max IP significance z0 (-1 switches it off)"}
DoubleProperty m_etaMax {this, "etaMax", 9999., "max. pseudo-rapidity"}
BooleanProperty m_useTrackSummaryInfo {this, "useTrackSummaryInfo", true}
IntegerProperty m_nHitBLayer {this, "nHitBLayer", 1, "at least n hits in Blayer"}
IntegerProperty m_nHitPix {this, "nHitPix", 2, "at least n hits in pixels"}
IntegerProperty m_nHitSct {this, "nHitSct", 0, "at least n hits in SCT"}
IntegerProperty m_nHitSi {this, "nHitSi", 7, "at least n hits in pixels+SCT"}
IntegerProperty m_nHitPixPhysical {this, "nHitPixPhysical", 0, "at least n physical hits in pixel"}
IntegerProperty m_nHitSiPhysical {this, "nHitSiPhysical", 3, "at least n physical hits in pixel+SCT"}
IntegerProperty m_nHitTrt {this, "nHitTrt", 0, "at least n hits in TRT"}
IntegerProperty m_nHitTrtPlusOutliers
IntegerProperty m_nHitTrtHighE {this, "nHitTrtHighE", 0, "at least n high threshold hits in TRT"}
IntegerProperty m_nHitTrtPlusOutliersHighE
DoubleProperty m_nHitTrtHighEFraction {this, "nHitTrtHighEFractionMax", 999., "maximum x fraction of transition hits in TRT"}
DoubleProperty m_nHitTrtHighEFractionWithOutliers
DoubleProperty m_TrtMaxEtaAcceptance
BooleanProperty m_useSharedHitInfo {this, "useSharedHitInfo", false}
IntegerProperty m_nSharedBLayer {this, "nSharedBLayer", 0, "max. number of shared hits in B layer"}
IntegerProperty m_nSharedPix {this, "nSharedPix", 0, "max. number of shared hits in pixels"}
IntegerProperty m_nSharedSct {this, "nSharedSct", 1, "max. number of shared hits in SCT"}
IntegerProperty m_nSharedSi {this, "nSharedSi", 999, "max. number of shared hits in pixels+SCT"}
IntegerProperty m_nHoles {this, "nHoles", 999, "max. number of holes in pixel+SCT"}
IntegerProperty m_nDoubleHoles {this, "nDoubleHoles", 999, "max number of double-holes in SCT"}
IntegerProperty m_nHolesPix {this, "nHolesPixel", 999, "max. number of holes in pixels"}
IntegerProperty m_nHolesSct {this, "nHolesSct", 999, "max. number of holes in SCT"}
BooleanProperty m_useTrackQualityInfo {this, "useTrackQualityInfo", true}
DoubleProperty m_fitChi2 {this, "fitChi2", 99999., "max. fit chi2"}
DoubleProperty m_fitProb {this, "fitProb", -1., "min. fit chi2 probability"}
DoubleProperty m_fitChi2OnNdfMax {this, "fitChi2OnNdfMax", 999., "max. fitchi2/ndf"}
DoubleProperty m_scaleMinHitTrt
IntegerProperty m_addToMinHitTrt
DoubleProperty m_scaleMinHitTrtWithOutliers
IntegerProperty m_addToMinHitTrtWithOutliers
BooleanProperty m_usePreselectionCuts {this, "usePreselectionCuts", false}
DoubleProperty m_d0MaxPreselection {this, "d0MaxPreselection", 10.}
BooleanProperty m_useEtaDepententMinHitTrt {this, "useEtaDepententMinHitTrt", false}
BooleanProperty m_useEtaDepententMinHitTrtWithOutliers {this, "useEtaDepententMinHitTrtWithOutliers", false}
ToolHandle< Trk::ITrackSummaryToolm_trackSumTool {this, "TrackSummaryTool", "Trk::TrackSummaryTool"}
ToolHandle< Trk::ITrackParticleCreatorToolm_particleCreator {this, "TrackParticleCreatorTool", ""}
ToolHandle< Trk::IExtrapolatorm_extrapolator {this, "Extrapolator", "Trk::Extrapolator"}
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
ToolHandle< ITrtDriftCircleCutToolm_trtDCTool
ToolHandle< InDet::IInDetTestPixelLayerToolm_inDetTestPixelLayerTool
SG::ReadCondHandleKey< AtlasFieldCacheCondObjm_fieldCacheCondObjInputKey
bool m_trackSumToolAvailable = true
bool m_partCreatorToolAvailable = false
BooleanProperty m_usePtDependentCuts {this, "UsePtDependentCuts", false}
FloatArrayProperty m_ptBenchmarks {this, "PtBenchmarks", {}}
IntegerArrayProperty m_nSCTValues {this, "SCTCutValues", {}}
SG::ReadHandleKey< xAOD::EventInfom_eventInfo_key {this, "EventInfo", "EventInfo", "Input event information"}
BooleanProperty m_useEventInfoBs {this, "UseEventInfoBS", false, "Access beamspot via the EvenInfo object"}
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 60 of file InDetDetailedTrackSelectorTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ Grade

Constructor & Destructor Documentation

◆ InDetDetailedTrackSelectorTool()

InDet::InDetDetailedTrackSelectorTool::InDetDetailedTrackSelectorTool ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 32 of file InDetDetailedTrackSelectorTool.cxx.

33 : AthAlgTool(t,n,p)
34 {
35 declareInterface<ITrackSelectorTool>(this);
36 }
AthAlgTool()
Default constructor:

◆ ~InDetDetailedTrackSelectorTool()

InDet::InDetDetailedTrackSelectorTool::~InDetDetailedTrackSelectorTool ( )
default

Member Function Documentation

◆ decision() [1/7]

bool InDet::InDetDetailedTrackSelectorTool::decision ( const Trk::FitQuality * TrkQuality) const
private

Definition at line 793 of file InDetDetailedTrackSelectorTool.cxx.

794 {
795 if(nullptr == trkQuality) {
796 ATH_MSG_WARNING( "Null FitQuality pointer passed. No track Quality cut possible. Selection failed." );
797 return false;
798 }
799 return decision(trkQuality->chiSquared(),trkQuality->numberDoF());
800 }
#define ATH_MSG_WARNING(x)
bool decision(const Trk::Track &track, const Trk::Vertex *vertex) const

◆ decision() [2/7]

bool InDet::InDetDetailedTrackSelectorTool::decision ( const Trk::Perigee * track,
const AmgSymMatrix(3) * covariancePosition ) const
private

Definition at line 652 of file InDetDetailedTrackSelectorTool.cxx.

652 {
653
654 // checking pointer first
655 if(nullptr==track || !track->covariance()) {
656 ATH_MSG_WARNING( "Decision on measured perigee: Zero pointer to measured perigee passed. Selection failed." );
657 return false;
658 }
659
660 const AmgVector(5)& perigeeParms = track->parameters();
661
662 // only check pt if mag. field is on
663 const EventContext& ctx = Gaudi::Hive::currentContext();
664 SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
665 const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
666 if (fieldCondObj == nullptr) {
667 ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
668 return false;
669 }
670 MagField::AtlasFieldCache fieldCache;
671 fieldCondObj->getInitializedCache (fieldCache);
672
673 if (fieldCache.solenoidOn()){//B field
674 if (perigeeParms[Trk::qOverP] == 0.) {
675 ATH_MSG_DEBUG("Track rejected because of qOverP == 0.");
676 return false;
677 }
678 double p = std::fabs(1./perigeeParms[Trk::qOverP]);
679 if (p<m_pMin) {
680 ATH_MSG_DEBUG("Track rejected because of p " << p << " < " << m_pMin);
681 return false;
682 }
683 double pt = p*std::sin(perigeeParms[Trk::theta]);
684 if (pt<m_pTMin) {
685 ATH_MSG_DEBUG("Track rejected because of pt " << pt << " < " << m_pTMin);
686 return false;
687 }
688 }
689
690 if (std::fabs(perigeeParms[Trk::d0]) > m_IPd0Max) {
691 ATH_MSG_DEBUG("Track rejected because of fabs(d0) " << std::fabs(perigeeParms[Trk::d0]) << " > " << m_IPd0Max);
692 return false;
693 }
694
695 if (std::fabs(perigeeParms[Trk::z0]*std::sin(perigeeParms[Trk::theta])) > m_IPz0Max) {
696 ATH_MSG_DEBUG("Track rejected because of fabs(z0*sin(theta)) " << std::fabs(perigeeParms[Trk::z0]*std::sin(perigeeParms[Trk::theta])) << " > " << m_IPz0Max);
697 return false;
698 }
699
700 if (std::fabs(perigeeParms[Trk::z0]) > m_z0Max) {
701 ATH_MSG_DEBUG("Track rejected because of fabs(z0) " << std::fabs(perigeeParms[Trk::z0]) << " > " << m_z0Max);
702 return false;
703 }
704
705 if (sqrt( (*track->covariance())(Trk::z0,Trk::z0) )*std::sin(perigeeParms[Trk::theta])>m_sigIPz0Max) {
706 ATH_MSG_DEBUG("Track rejected because of err(z0)*sin(theta) " << sqrt( (*track->covariance())(Trk::z0,Trk::z0) )*std::sin(perigeeParms[Trk::theta]) << " > " << m_sigIPz0Max);
707 return false;
708 }
709
710 if (sqrt( (*track->covariance())(Trk::d0,Trk::d0) )>m_sigIPd0Max) {
711 ATH_MSG_DEBUG("Track rejected because of err(d0) " << sqrt( (*track->covariance())(Trk::d0,Trk::d0) ) << " > " << m_sigIPd0Max);
712 return false;
713 }
714
716
717 double sinTheta = std::sin(perigeeParms[Trk::theta]);
718 double cosTheta = std::cos(perigeeParms[Trk::theta]);
719 double d0wrtPriVtx = perigeeParms[Trk::d0];
720 double deltaZ = perigeeParms[Trk::z0];
721 double z0wrtPriVtx = deltaZ*sinTheta;
722 double testtrackSigD0 = sqrt( (*track->covariance())(Trk::d0,Trk::d0) );
723 double testtrackSigZ0 = sqrt( (*track->covariance())(Trk::z0,Trk::z0) );
724 double testtrackSigTh = sqrt( (*track->covariance())(Trk::theta,Trk::theta) );
725 // error on IP:
726 double trackPhi = perigeeParms[Trk::phi];
727 double dIPdx = std::sin(trackPhi);
728 double dIPdy = -std::cos(trackPhi);
729 double DD0 = testtrackSigD0*testtrackSigD0;
730 double newD0Err=0;
731 if (covariancePosition) {
732 double DXX = dIPdx*dIPdx* (*covariancePosition)(0,0);
733 double DYY = dIPdy*dIPdy* (*covariancePosition)(1,1);
734 double DXY = 2.*dIPdx*dIPdy* (*covariancePosition)(0,1);
735 newD0Err = DD0 + DXX + DYY + DXY;
736 } else {
737 newD0Err = DD0;
738 }
739
740 double d0ErrwrtPriVtx = (newD0Err>0 ? sqrt(newD0Err) : -10e-9);
741
742 if (d0ErrwrtPriVtx<0) {
743 ATH_MSG_WARNING( " error on d0 is negative: numeric error... (not expected. please report!)" );
744 }
745
746 if (m_d0significanceMax>0) {
747 if (std::fabs(d0wrtPriVtx/d0ErrwrtPriVtx)>m_d0significanceMax) {
748 ATH_MSG_DEBUG("Track rejected because of fabs(d0wrtPriVtx/d0ErrwrtPriVtx) " << std::fabs(d0wrtPriVtx/d0ErrwrtPriVtx) << " > " << m_d0significanceMax);
749 return false;
750 }
751 }
752
753 if (m_z0significanceMax>0) {
754
755 // error on zIP:
756 double dZIPdTheta = deltaZ*cosTheta;
757 double dZIPdz0 = sinTheta;
758 double dZIPdzV = -sinTheta;
759 double DTheta2 = dZIPdTheta*dZIPdTheta*testtrackSigTh*testtrackSigTh;
760 double DZ02 = dZIPdz0*dZIPdz0*testtrackSigZ0*testtrackSigZ0;
761 double DThetaZ0 = 2.*dZIPdTheta*dZIPdz0*(*track->covariance())(Trk::theta,Trk::z0);
762 double newZ0Err(0);
763 if (covariancePosition) {
764 double DZV2 = dZIPdzV*dZIPdzV* (*covariancePosition)(2,2);
765 newZ0Err = DTheta2 + DZ02 + DZV2 + DThetaZ0;
766 } else {
767 newZ0Err = DTheta2 + DZ02 + DThetaZ0;
768 }
769
770 double z0ErrwrtPriVtx = (newZ0Err>0 ? sqrt(newZ0Err) : -10e-9);
771
772 if (z0ErrwrtPriVtx<0) {
773 ATH_MSG_WARNING( " error on z0 is negative: numeric error... (not expected. please report!)" );
774 }
775
776 if (std::fabs(z0wrtPriVtx/z0ErrwrtPriVtx)>m_z0significanceMax) {
777 ATH_MSG_DEBUG("Track rejected because of fabs(z0wrtPriVtx/z0ErrwrtPriVtx) " << std::fabs(z0wrtPriVtx/z0ErrwrtPriVtx) << " > " << m_z0significanceMax);
778 return false;
779 }
780 }
781
782 }
783
784 if (std::fabs(track->momentum().eta())>m_etaMax) {
785 ATH_MSG_DEBUG("Track rejected because of fabs(eta) " << std::fabs(track->momentum().eta()) << " > " << m_etaMax);
786 return false;
787 }
788
789 return true;
790 }
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
#define AmgVector(rows)
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
bool solenoidOn() const
status of the magnets
bool trackPhi(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
@ phi
Definition ParamDefs.h:75
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64

◆ decision() [3/7]

bool InDet::InDetDetailedTrackSelectorTool::decision ( const Trk::Track & track,
const Trk::Vertex * vertex ) const
virtual

Implements Trk::ITrackSelectorTool.

Definition at line 129 of file InDetDetailedTrackSelectorTool.cxx.

129 {
130 int nHitTrt = m_nHitTrt;
131 int nHitTrtPlusOutliers = m_nHitTrtPlusOutliers;
132 const Trk::Perigee* perigeeBeforeExtrapolation=dynamic_cast<const Trk::Perigee*>(track.perigeeParameters());
133 if (perigeeBeforeExtrapolation && m_usePreselectionCuts){
134 bool preselectionDecision=preselectionBeforeExtrapolation(*perigeeBeforeExtrapolation);
135 if (!preselectionDecision) {
136 ATH_MSG_DEBUG("Track rejected because of preselection decision!");
137 return false;
138 }
139 } else if (m_usePreselectionCuts){
140 ATH_MSG_DEBUG( " Preselection was requested but cannot be made since no Perigee in Track is available. This is not an error." );
141 }
142 const Trk::Vertex* myVertex=vertex;
143 //in case no Vertex is provided by the user, beam position will be used if available
144 if (myVertex==nullptr) {
145 myVertex = getBeamSpot(Gaudi::Hive::currentContext());
146 }
147 Trk::PerigeeSurface perigeeSurface(myVertex->position());
148 const Trk::TrackParameters *firstmeaspar=nullptr;
149 for (const auto *i : *track.trackParameters()){
150 if ( i->covariance() && !dynamic_cast<const Trk::Perigee*>(i)) {
151 firstmeaspar=i;
152 break;
153 }
154 }
155 if (!firstmeaspar) {
156 //assumes perigeeParameters exist...
157 //no track selection if firstmeas + perigee does not exist !
158 firstmeaspar=track.perigeeParameters();
159 if (!firstmeaspar){
160 ATH_MSG_WARNING( " First measurment on track is missing. Using perigee Parameters, but they are missing: 0 pointer! Track selection failed " );
161 //clean up vertex
162 if (myVertex!=vertex) {
163 delete myVertex;
164 myVertex=nullptr;
165 }
166 return false;
167 }
168 }
169 const Trk::TrackParameters* extrapolatedParameters= m_extrapolator->extrapolate(Gaudi::Hive::currentContext(),
170 *firstmeaspar,
171 perigeeSurface,
173 true,
174 track.info().particleHypothesis() ).release();
175 const Trk::Perigee* extrapolatedPerigee = extrapolatedParameters ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters) : nullptr;
176 if (!extrapolatedPerigee || !extrapolatedPerigee->covariance() ) {
177 ATH_MSG_WARNING( "Track Selector failed to extrapolate track to the vertex: " << myVertex->position() );
178 if (extrapolatedParameters) {
179 ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
180 delete extrapolatedParameters;
181 extrapolatedParameters=nullptr;
182 }
183 }
184
185 //decision based on the track parameters
186 const Trk::RecVertex* recVertex = dynamic_cast<const Trk::RecVertex*>(myVertex);
187 bool dec = decision(extrapolatedPerigee, recVertex ? &recVertex->covariancePosition() : nullptr );
188 if (myVertex!=vertex) {
189 delete myVertex;
190 myVertex=nullptr;
191 }
192 bool isInTrtAcceptance=true;
193 if (!extrapolatedPerigee || std::fabs(extrapolatedPerigee->momentum().eta())>m_TrtMaxEtaAcceptance) {
194 isInTrtAcceptance=false;
195 }
196 if (extrapolatedPerigee!=track.perigeeParameters()) {
197 delete extrapolatedPerigee;
198 extrapolatedPerigee=nullptr;
199 }
200 if(!dec) {
201 ATH_MSG_DEBUG("Track rejected because of perigee parameters!");
202 return false;
203 }
205 const Trk::FitQuality* TrkQuality=track.fitQuality();
206 if (TrkQuality==nullptr) {
207 ATH_MSG_WARNING( "Requested cut on track quality was not possible. Track has no FitQuality object attached. Selection failed." );
208 return false;
209 }
210 if (!decision(TrkQuality)) {
211 return false;
212 }
213 }
215 //number of hits, silicon hits, b-layer
216 // first ask track for summary
217 std::unique_ptr<Trk::TrackSummary> summaryUniquePtr;
218 const Trk::TrackSummary* summary = track.trackSummary();
219 if (m_trackSumToolAvailable && summary == nullptr) {
220 summaryUniquePtr = m_trackSumTool->summary(Gaudi::Hive::currentContext(), track);
221 summary = summaryUniquePtr.get();
222 }
223 if (nullptr==summary ) {
224 ATH_MSG_FATAL( "Track preselection: cannot create a track summary (but useTrackSummary is true). Selection failed." );
225 return false;
226 }
227
228 // Create xAOD::TrackParticle to retrieve shared hit info
229 const xAOD::TrackParticle* tp = m_partCreatorToolAvailable ? m_particleCreator->createParticle(track) : nullptr;
230 if(m_useSharedHitInfo && tp==nullptr){
231 ATH_MSG_FATAL( "Track preselection: cannot create a track particle (but useSharedHitInfo is true). Selection failed." );
232 return false;
233 }
234
235 // get the minimum nimber of TRT hits based on eta of the track
237 nHitTrt = m_trtDCTool->minNumberDCs( (*track.trackParameters())[0] );
238 if(m_addToMinHitTrt!=0){
239 nHitTrt += m_addToMinHitTrt;
240 }else{
241 nHitTrt = (int)((double)nHitTrt*m_scaleMinHitTrt);
242 }
243 }
244
245 // get the minimum nimber of TRT hits + outliers based on eta of the track
247 nHitTrtPlusOutliers = m_trtDCTool->minNumberDCs( (*track.trackParameters())[0] );
249 nHitTrtPlusOutliers += m_addToMinHitTrtWithOutliers;
250 }else{
251 nHitTrtPlusOutliers = (int)((double)nHitTrtPlusOutliers*m_scaleMinHitTrtWithOutliers);
252 }
253 }
254
255 if (!decision(summary, tp, m_useSharedHitInfo,isInTrtAcceptance, perigeeBeforeExtrapolation,
256 nHitTrt, nHitTrtPlusOutliers)) {
257 return false;
258 }
259 }
260 return true;
261 }
#define ATH_MSG_FATAL(x)
ToolHandle< Trk::ITrackParticleCreatorTool > m_particleCreator
bool preselectionBeforeExtrapolation(const Trk::Perigee &myPerigee) const
ToolHandle< ITrtDriftCircleCutTool > m_trtDCTool
Trk::Vertex * getBeamSpot(const EventContext &) const
ToolHandle< Trk::ITrackSummaryTool > m_trackSumTool
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Amg::Vector3D & position() const
return position of vertex
Definition Vertex.cxx:63
@ anyDirection
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< TrackParametersDim, Charged > TrackParameters
TrackParticle_v1 TrackParticle
Reference the current persistent version:

◆ decision() [4/7]

bool InDet::InDetDetailedTrackSelectorTool::decision ( const Trk::TrackParticleBase & track,
const Trk::Vertex * vertex ) const
virtual

Implements Trk::ITrackSelectorTool.

Definition at line 265 of file InDetDetailedTrackSelectorTool.cxx.

265 {
266 int nHitTrt = m_nHitTrt;
267 int nHitTrtPlusOutliers = m_nHitTrtPlusOutliers;
268 const Trk::TrackParameters* definintParameters=&(track.definingParameters());
269 const Trk::Perigee* perigeeBeforeExtrapolation=dynamic_cast<const Trk::Perigee*>(definintParameters);
270 if (perigeeBeforeExtrapolation && m_usePreselectionCuts) {
271 bool preselectionDecision=preselectionBeforeExtrapolation(*perigeeBeforeExtrapolation);
272 if (!preselectionDecision) {
273 ATH_MSG_DEBUG("Track rejected because of preselection decision!");
274 return false;
275 }
276 } else if (m_usePreselectionCuts) {
277 ATH_MSG_WARNING( " Preselection was requested but cannot be made since the Perigee is not the defining Parameter of the TrackParticle. This is not an error." );
278 }
279 bool isInTrtAcceptance=true;
280 if (!perigeeBeforeExtrapolation || std::fabs(perigeeBeforeExtrapolation->momentum().eta())>m_TrtMaxEtaAcceptance) {
281 isInTrtAcceptance=false;
282 }
284 const Trk::FitQuality* TrkQuality=track.fitQuality();
285 if (TrkQuality==nullptr) {
286 ATH_MSG_WARNING( "Requested cut on track quality was not possible. TrackParticleBase has no FitQuality object attached. Selection failed." );
287 return false;
288 }
289 if (!decision(TrkQuality)) {
290 return false;
291 }
292 }
294 //number of hits, silicon hits, b-layer
295 const Trk::TrackSummary* summary = track.trackSummary();
296 if (nullptr==summary ) {
297 ATH_MSG_WARNING( "Track preselection: cannot create a track summary (but useTrackSummary is true). Selection failed." );
298 return false;
299 }
300
301
302 if (m_useSharedHitInfo) {
303 ATH_MSG_ERROR( "Use of InDetDetailedTrackSelectorTool with Trk::TrackParticleBase and useSharedHitInfo is not supported");
304 return false;
305 }
306 const xAOD::TrackParticle* tp = nullptr;
307
309 nHitTrt = m_trtDCTool->minNumberDCs( (track.trackParameters())[0] );
310 if(m_addToMinHitTrt!=0){
311 nHitTrt += m_addToMinHitTrt;
312 }else{
313 nHitTrt = (int)((double)nHitTrt*m_scaleMinHitTrt);
314 }
315 }
316
318 nHitTrtPlusOutliers = m_trtDCTool->minNumberDCs( (track.trackParameters())[0] );
320 nHitTrtPlusOutliers += m_addToMinHitTrtWithOutliers;
321 }else{
322 nHitTrtPlusOutliers = (int)((double)nHitTrtPlusOutliers*m_scaleMinHitTrtWithOutliers);
323 }
324 }
325
326 if ((!perigeeBeforeExtrapolation) or
327 (!decision(summary, tp, m_useSharedHitInfo, isInTrtAcceptance, perigeeBeforeExtrapolation,
328 nHitTrt, nHitTrtPlusOutliers))) {
329 return false;
330 }
331 }
332 const Trk::Perigee* extrapolatedPerigee=dynamic_cast<const Trk::Perigee*>(definintParameters);
333 const Trk::Vertex* myVertex=vertex;
334 if (vertex==nullptr) {
335 myVertex = getBeamSpot(Gaudi::Hive::currentContext());
336 }
337 Trk::PerigeeSurface perigeeSurface(myVertex->position());
338 const Trk::TrackParameters *firstmeaspar=nullptr;
339 for (const auto *i : track.trackParameters()) {
340 if (i->covariance() &&
341 !dynamic_cast<const Trk::Perigee*>(i)) {
342 firstmeaspar=i;
343 break;
344 }
345 }
346 if (!firstmeaspar) {
347 if (!extrapolatedPerigee || !extrapolatedPerigee->covariance() ) {
348 ATH_MSG_DEBUG( " Track Paraemters at first measurement not found. Perigee not found. Cannot do TrackSelection..." );
349 if (myVertex!=vertex) {
350 delete myVertex;
351 myVertex=nullptr;
352 }
353 return false;
354 }
355 //using perigee instead of firstmeasurement, since first measurement was not found...
356 firstmeaspar=&(track.definingParameters());
357 }
358
359 ATH_MSG_VERBOSE ("Input to extrapolation: " << *firstmeaspar);
360 ATH_MSG_VERBOSE ("Extrapolating to position: " << myVertex->position()[0] << " , " <<
361 myVertex->position()[1] << " , " << myVertex->position()[2]);
362 const Trk::TrackParameters* extrapolatedParameters= firstmeaspar ?
363 m_extrapolator->extrapolate(Gaudi::Hive::currentContext(),
364 *firstmeaspar,
365 perigeeSurface,
367 true,Trk::pion ).release() : nullptr;
368 extrapolatedPerigee = extrapolatedParameters ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters) : nullptr;
369 if (extrapolatedPerigee==nullptr || !extrapolatedPerigee->covariance()) {
370 ATH_MSG_WARNING( "Track Selector failed to extrapolate track to the vertex: " << myVertex->position() );
371 if (extrapolatedParameters) {
372 ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
373 delete extrapolatedParameters;
374 extrapolatedParameters = nullptr;
375 }
376 }
377 if (extrapolatedParameters) ATH_MSG_VERBOSE ("Result: " << *extrapolatedParameters);
378 const Trk::RecVertex* recVertex = dynamic_cast<const Trk::RecVertex*>(myVertex);
379 bool dec = decision(extrapolatedPerigee, recVertex ? &recVertex->covariancePosition() : nullptr );
380 if (myVertex!=vertex) {
381 delete myVertex;
382 myVertex=nullptr;
383 }
384 if (extrapolatedPerigee!=&(track.definingParameters())) {
385 delete extrapolatedPerigee;
386 extrapolatedPerigee=nullptr;
387 }
388 if(!dec) {
389 ATH_MSG_DEBUG("Track rejected because of perigee parameters!");
390 return false;
391 }
392 return true;
393 }
#define ATH_MSG_VERBOSE(x)

◆ decision() [5/7]

bool InDet::InDetDetailedTrackSelectorTool::decision ( const Trk::TrackSummary * summary,
const xAOD::TrackParticle * tp,
bool useSharedHitInfo,
bool useTrtHitInfo,
const Trk::Perigee * track,
const int nHitTrt,
const int nHitTrtPlusOutliers ) const
private

Definition at line 834 of file InDetDetailedTrackSelectorTool.cxx.

841 {
842 if (summary==nullptr) {
843 ATH_MSG_WARNING( "Null TrackSummary pointer passed. Selection failed." );
844 return false;
845 }
846
848
849 if(nb<0) nb=0;
850
852 if(np<0) np=0;
853
855 if(npd<0) npd=0;
856
857 int ns = summary->get(Trk::numberOfSCTHits);
858 if(ns<0) ns=0;
859
860 int nhp = summary->get(Trk::numberOfPixelHoles);
861 if (nhp < 0) nhp = 0;
862
863 int nhs = summary->get(Trk::numberOfSCTHoles);
864 if (nhs < 0) nhs = 0;
865
866 int ndhs = summary->get(Trk::numberOfSCTDoubleHoles);
867 if (ndhs < 0) ndhs = 0;
868
869 //**-----------------------------------------------------------------------
870
872 if (!track) {
873 return false;
874 }
875 const AmgVector(5)& perigeeParms = track->parameters();
876 double p = std::fabs(1./perigeeParms[Trk::qOverP]);
877 double pt = p*std::sin(perigeeParms[Trk::theta]);
878
879 unsigned int it = 0;
880 for(; it< m_ptBenchmarks.size()-1; ++it ) {
881 if(pt>m_ptBenchmarks[it] && pt <=m_ptBenchmarks[it+1] && ns < m_nSCTValues[it]) {
882 ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
883 return false;
884 }
885 }//end of pt intervals loop
886
887 //now cutting all the rest by the last value in the vector
888 if(pt>m_ptBenchmarks[it+1] && ns < m_nSCTValues[it+1]) {
889 ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
890 return false;
891 }
892
893 }
894
895 //*--------------------------------------------------------------------------------
896
897 //normal cuts in all their variety
898
899 if(nb == 0 && nb < m_nHitBLayer) {
900 ATH_MSG_DEBUG("Track rejected because of nHitBLayer "<<nb<<" < "<<m_nHitBLayer);
901 if(m_inDetTestPixelLayerTool.empty()) {
902 ATH_MSG_DEBUG("and no blayer tool configured, so will not try to recover track");
903 return false;
904 } else if (m_inDetTestPixelLayerTool->expectHitInInnermostPixelLayer(track)) {
905 ATH_MSG_DEBUG("and track rejected because at least one hit is expected in the innermost pixel layer") ;
906 return false;
907 }else ATH_MSG_DEBUG("recovered track as no b-layer expected") ;
908 }//end of checking the b-layer
909
910 if(np+npd < m_nHitPix) {
911 ATH_MSG_DEBUG("Track rejected because of nHitPix "<<np+npd<<" < "<<m_nHitPix);
912 return false;
913 }
914
915 if(np < m_nHitPixPhysical) {
916 ATH_MSG_DEBUG("Track rejected because of nHitPixPhysical "<<np<<" < "<<m_nHitPixPhysical);
917 return false;
918 }
919
920 int nsd = summary->get(Trk::numberOfSCTDeadSensors);
921 if(nsd<0)
922 nsd=0;
923
924 if(ns+nsd < m_nHitSct)
925 {
926 ATH_MSG_DEBUG("Track rejected because of nHitSct "<<ns+nsd<<" < "<<m_nHitSct);
927 return false;
928 }
929
930 if((np+ns+npd+nsd) < m_nHitSi)
931 {
932 ATH_MSG_DEBUG("Track rejected because of nHitSi "<<np+npd+ns+nsd<<" < "<<m_nHitSi);
933 return false;
934 }
935
936 if((np+ns) < m_nHitSiPhysical)
937 {
938 ATH_MSG_DEBUG("Track rejected because of nHitSiPhysical "<<np+ns<<" < "<<m_nHitSiPhysical);
939 return false;
940 }
941
942 // Cuts on number of Holes
943
944 if ((nhp+nhs) > m_nHoles)
945 {
946 ATH_MSG_DEBUG("Track rejected because of nHolesPixPlusSCT "<<nhp+nhs<<" > "<<m_nHoles);
947 return false;
948 }
949
950 if (ndhs > m_nDoubleHoles)
951 {
952 ATH_MSG_DEBUG("Track rejected because of nDoubleHolesSCT "<<ndhs<<" > "<<m_nDoubleHoles);
953 return false;
954 }
955
956 if (nhp > m_nHolesPix)
957 {
958 ATH_MSG_DEBUG("Track rejected because of nHolesPix "<<nhp<<" > "<<m_nHolesPix);
959 return false;
960 }
961
962 if (nhs > m_nHolesSct)
963 {
964 ATH_MSG_DEBUG("Track rejected because of nHolesSct "<<nhs<<" > "<<m_nHolesSct);
965 return false;
966 }
967
968 if (useTrtHitInfo) {
969
970 int nh = summary->get(Trk::numberOfTRTHits);
971 if(nh<0) nh=0;
972 if(nh < nHitTrt) {
973 ATH_MSG_DEBUG("Track rejected because of nHitTrt "<<nh<<" < "<<nHitTrt);
974 return false;
975 }
976
978 if (nhh<0) nhh=0;
979 if (nhh<nHitTrtPlusOutliers) {
980 ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliers "<<nhh<<" < "<<nHitTrtPlusOutliers);
981 return false;
982 }
983
985 if (nhthits<0) nhthits=0;
986 if (nhthits<m_nHitTrtHighE) {
987 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighE "<<nhthits<<" < "<<m_nHitTrtHighE);
988 return false;
989 }
990
992 if (nhthitsWithOutliers<0) nhthitsWithOutliers=0;
993 if (nhthitsWithOutliers<m_nHitTrtPlusOutliersHighE) {
994 ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliersHighE "<<nhthitsWithOutliers<<" < "<<m_nHitTrtPlusOutliersHighE);
995 return false;
996 }
997
998 if (summary->get( Trk :: numberOfTRTHits )>0) {
1000 if(nhe<0.) nhe=0.;
1001 if(nhe > m_nHitTrtHighEFraction ) {
1002 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFraction "<<nhe<<" < "<<m_nHitTrtHighEFraction);
1003 return false;
1004 }
1005 }
1006
1007 if ( summary->get( Trk :: numberOfTRTHits ) + summary->get( Trk :: numberOfTRTOutliers ) > 0 ) {
1009 (double)(summary->get( Trk::numberOfTRTHits) + summary->get( Trk :: numberOfTRTOutliers ) );
1010 if(nheh<0.) nheh=0.;
1011 if (nheh>1.) nheh=1.;
1013 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFractionWithOutliers "<<nheh<<" < "<<m_nHitTrtHighEFractionWithOutliers);
1014 return false;
1015 }
1016 }
1017 }
1018
1019 if (useSharedHitInfo) {
1020 if(!tp){
1021 ATH_MSG_DEBUG("Track rejected because xAOD::TrackParticle not available");
1022 return false;
1023 }
1024
1026 if(nbs < 0) nbs = 0;
1027 if (nbs>1) nbs=1;
1028 if(nbs>m_nSharedBLayer) {
1029 ATH_MSG_DEBUG("Track rejected because of nSharedBLayer "<<nbs<<" < "<<m_nSharedBLayer);
1030 return false;
1031 }
1032
1034 if(nps < 0) nps = 0;
1035 if(nps>m_nSharedPix) {
1036 ATH_MSG_DEBUG("Track rejected because of nSharedPix "<<nps<<" < "<<m_nSharedPix);
1037 return false;
1038 }
1039
1041 if(nss < 0) nss = 0;
1042 if(nss > m_nSharedSct) {
1043 ATH_MSG_DEBUG("Track rejected because of nSharedSct "<<nss<<" < "<<m_nSharedSct);
1044 return false;
1045 }
1046
1047 int nst = nps + nss;
1048 if(nst>m_nSharedSi) {
1049 ATH_MSG_DEBUG("Track rejected because of nSharedSi "<<nst<<" < "<<m_nSharedSi);
1050 return false;
1051 }
1052 }
1053
1054 return true;
1055
1056 }
ToolHandle< InDet::IInDetTestPixelLayerTool > m_inDetTestPixelLayerTool
int getCount(const xAOD::TrackParticle &tp, xAOD::SummaryType type) const
@ numberOfPixelHits
number of pixel layers on track with absence of hits
@ numberOfTRTHighThresholdOutliers
number of dead TRT straws crossed
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
@ numberOfTRTHighThresholdHits
total number of TRT hits which pass the high threshold
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].

◆ decision() [6/7]

bool InDet::InDetDetailedTrackSelectorTool::decision ( const xAOD::TrackParticle & track,
const xAOD::Vertex * vertex ) const
virtual

Implements Trk::ITrackSelectorTool.

Definition at line 422 of file InDetDetailedTrackSelectorTool.cxx.

423 {
424 int nHitTrt = m_nHitTrt;
425 int nHitTrtPlusOutliers = m_nHitTrtPlusOutliers;
426
427 const Trk::Perigee& perigee=tp.perigeeParameters();
429 ATH_MSG_DEBUG("Track rejected because of preselection decision!");
430 return false;
431 }
432
433 if (m_useTrackQualityInfo && !decision(tp.chiSquared(),tp.numberDoF())) {
434 ATH_MSG_DEBUG("Track rejected because of bad fit quality!");
435 return false;
436 }
437
439 //number of hits, silicon hits, b-layer
440
442 nHitTrt = m_trtDCTool->minNumberDCs( &perigee );
443 if(m_addToMinHitTrt!=0){
444 nHitTrt += m_addToMinHitTrt;
445 }else{
446 nHitTrt = (int)((double)nHitTrt*m_scaleMinHitTrt);
447 }
448 }
450 nHitTrtPlusOutliers = m_trtDCTool->minNumberDCs( &perigee );
452 nHitTrtPlusOutliers += m_addToMinHitTrtWithOutliers;
453 }else{
454 nHitTrtPlusOutliers = (int)((double)nHitTrtPlusOutliers*m_scaleMinHitTrtWithOutliers);
455 }
456 }
461 int nhp = getCount(tp,xAOD::numberOfPixelHoles );
462 int nhs = getCount(tp,xAOD::numberOfSCTHoles );
464 bool eiph = (getCount(tp,xAOD::expectInnermostPixelLayerHit)==1);
465
466 //**-----------------------------------------------------------------------
468 double pt = tp.pt();
469 unsigned int it = 0;
470 for(; it< m_ptBenchmarks.size()-1; ++it ) {
471 if(pt>m_ptBenchmarks[it] && pt <=m_ptBenchmarks[it+1] && ns < m_nSCTValues[it]) {
472 ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
473 return false;
474 }
475 }//end of pt intervals loop
476
477 //now cutting all the rest by the last value in the vector
478 if(pt>m_ptBenchmarks[it+1] && ns < m_nSCTValues[it+1]) {
479 ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
480 return false;
481 }
482 }
483
484 //*--------------------------------------------------------------------------------
485
486 //normal cuts in all their variety
487
488 if(nb == 0 && nb < m_nHitBLayer) {
489 ATH_MSG_DEBUG("Track rejected because of nHitBLayer "<<nb<<" < "<<m_nHitBLayer);
490 if (eiph) {
491 ATH_MSG_DEBUG("and track rejected because at least one hit is expected in the innermost pixel layer") ;
492 return false;
493 }else ATH_MSG_DEBUG("recovered track as no b-layer expected") ;
494 }//end of checking the b-layer
495
496 if(np+npd < m_nHitPix) {
497 ATH_MSG_DEBUG("Track rejected because of nHitPix "<<np+npd<<" < "<<m_nHitPix);
498 return false;
499 }
500
501 if(np < m_nHitPixPhysical) {
502 ATH_MSG_DEBUG("Track rejected because of nHitPixPhysical "<<np<<" < "<<m_nHitPixPhysical);
503 return false;
504 }
505
507 if(ns+nsd < m_nHitSct) {
508 ATH_MSG_DEBUG("Track rejected because of nHitSct "<<ns+nsd<<" < "<<m_nHitSct);
509 return false;
510 }
511
512 if(np+ns+npd+nsd < m_nHitSi) {
513 ATH_MSG_DEBUG("Track rejected because of nHitSi "<<np+npd+ns+nsd<<" < "<<m_nHitSi);
514 return false;
515 }
516
517 if(np+ns < m_nHitSiPhysical) {
518 ATH_MSG_DEBUG("Track rejected because of nHitSiPhysical "<<np+ns<<" < "<<m_nHitSiPhysical);
519 return false;
520 }
521
522 // Cuts on number of Holes
523 if (nhp+nhs > m_nHoles){
524 ATH_MSG_DEBUG("Track rejected because of nHolesPixPlusSCT "<<nhp+nhs<<" > "<<m_nHoles);
525 return false;
526 }
527
528 if(ndhs > m_nDoubleHoles){
529 ATH_MSG_DEBUG("Track rejected because of nDoubleHolesSCT "<<ndhs<<" > "<<m_nDoubleHoles);
530 return false;
531 }
532
533 if(nhp > m_nHolesPix){
534 ATH_MSG_DEBUG("Track rejected because of nHolesPix "<<nhp<<" > "<<m_nHolesPix);
535 return false;
536 }
537
538 if (nhs > m_nHolesSct){
539 ATH_MSG_DEBUG("Track rejected because of nHolesSct "<<nhs<<" > "<<m_nHolesSct);
540 return false;
541 }
542
543 if (std::fabs(tp.eta())>m_TrtMaxEtaAcceptance) {
544 int nh = getCount(tp,xAOD::numberOfTRTHits);
545 if(nh < nHitTrt) {
546 ATH_MSG_DEBUG("Track rejected because of nHitTrt "<<nh<<" < "<<nHitTrt);
547 return false;
548 }
549
551 if (nhh<nHitTrtPlusOutliers) {
552 ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliers "<<nhh<<" < "<<nHitTrtPlusOutliers);
553 return false;
554 }
555
557 if (nhthits<m_nHitTrtHighE) {
558 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighE "<<nhthits<<" < "<<m_nHitTrtHighE);
559 return false;
560 }
561
563 if (nhthitsWithOutliers<m_nHitTrtPlusOutliersHighE) {
564 ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliersHighE "<<nhthitsWithOutliers<<" < "<<m_nHitTrtPlusOutliersHighE);
565 return false;
566 }
567
568 if ( getCount(tp, xAOD::numberOfTRTHits )>0) {
571 if(nhe > m_nHitTrtHighEFraction ) {
572 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFraction "<<nhe<<" < "<<m_nHitTrtHighEFraction);
573 return false;
574 }
575 }
576
580 if(nheh<0.) nheh=0.;
581 if (nheh>1.) nheh=1.;
583 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFractionWithOutliers "<<nheh<<" < "<<m_nHitTrtHighEFractionWithOutliers);
584 return false;
585 }
586 }
587 }
588 if (m_useSharedHitInfo) {
590 if (nbs>1) nbs=1;
591 if(nbs>m_nSharedBLayer) {
592 ATH_MSG_DEBUG("Track rejected because of nSharedBLayer "<<nbs<<" < "<<m_nSharedBLayer);
593 return false;
594 }
595
597 if(nps>m_nSharedPix) {
598 ATH_MSG_DEBUG("Track rejected because of nSharedPix "<<nps<<" < "<<m_nSharedPix);
599 return false;
600 }
601
603 if(nss > m_nSharedSct) {
604 ATH_MSG_DEBUG("Track rejected because of nSharedSct "<<nss<<" < "<<m_nSharedSct);
605 return false;
606 }
607
608 int nst = nps + nss;
609 if(nst>m_nSharedSi) {
610 ATH_MSG_DEBUG("Track rejected because of nSharedSi "<<nst<<" < "<<m_nSharedSi);
611 return false;
612 }
613 }
614 }
615 Trk::PerigeeSurface perigeeSurface( getPosOrBeamSpot(vertex) );
616
617 const Trk::TrackParameters* extrapolatedParameters= m_extrapolator->extrapolate(
618 Gaudi::Hive::currentContext(),
619 perigee,perigeeSurface,
620 Trk::anyDirection,true,Trk::pion).release();
621 const Trk::Perigee* extrapolatedPerigee = extrapolatedParameters ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters) : nullptr;
622 if (extrapolatedPerigee==nullptr) {
623 ATH_MSG_WARNING( "Extrapolation to the vertex failed: " << perigeeSurface << std::endl << perigee );
624 if (extrapolatedParameters!=nullptr) {
625 ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
626 delete extrapolatedParameters;
627 extrapolatedParameters=nullptr;
628 }
629 return false;
630 }
631 bool dec = false;
632 if( vertex ){
633 // for now copy the position error
634 const AmgSymMatrix(3)& vertexError = vertex->covariancePosition();
635 dec = decision(extrapolatedPerigee,&vertexError);
636 }else{
637 dec = decision(extrapolatedPerigee,nullptr);
638 }
639
640 delete extrapolatedPerigee;
641
642 if(!dec) {
643 ATH_MSG_DEBUG("Track rejected because of perigee parameters!");
644 return false;
645 }
646
647 return true;
648 }
#define AmgSymMatrix(dim)
Amg::Vector3D getPosOrBeamSpot(const xAOD::Vertex *) const
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfTRTHighThresholdOutliers
number of TRT high threshold outliers (only xenon counted) [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfSCTDoubleHoles
number of Holes in both sides of a SCT module [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].

◆ decision() [7/7]

bool InDet::InDetDetailedTrackSelectorTool::decision ( double chi2,
int ndf ) const
private

Definition at line 802 of file InDetDetailedTrackSelectorTool.cxx.

802 {
803
804 double proba = 1.;
805
806 if(ndf>0 && chi2>=0.) {
807 Genfun::CumulativeChiSquare myCumulativeChiSquare(ndf);
808 proba = 1.-myCumulativeChiSquare(chi2);
809 }
810
811 if(chi2>m_fitChi2) {
812 ATH_MSG_DEBUG("Track rejected because of chi2 "<<chi2<<" > "<<m_fitChi2);
813 return false;
814 }
815
816 if(proba<m_fitProb) {
817 ATH_MSG_DEBUG("Track rejected because of fit probability "<<proba<<" > "<<m_fitProb);
818 return false;
819 }
820 if(!ndf) {
821 ATH_MSG_DEBUG("Track rejected because of ndof = "<<ndf);
822 return false;
823 }
824 if(chi2/double(ndf)>m_fitChi2OnNdfMax) {
825 ATH_MSG_DEBUG("Track rejected because of chi2/ndof "<<chi2/double(ndf)<<" > "<<m_fitChi2OnNdfMax);
826 return false;
827 }
828
829 return true;
830 }
double chi2(TH1 *h0, TH1 *h1)

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ finalize()

StatusCode InDet::InDetDetailedTrackSelectorTool::finalize ( )

Definition at line 121 of file InDetDetailedTrackSelectorTool.cxx.

122 {
123 ATH_MSG_DEBUG( "Finalize successful" );
124 return StatusCode::SUCCESS;
125 }

◆ getBeamSpot()

Trk::Vertex * InDet::InDetDetailedTrackSelectorTool::getBeamSpot ( const EventContext & ctx) const
private

Definition at line 38 of file InDetDetailedTrackSelectorTool.cxx.

39 {
41 SG::ReadHandle<xAOD::EventInfo> evt(m_eventInfo_key, ctx);
42 if (evt.isValid()) {
43 InDet::BeamSpotData temp(evt->beamStatus(), evt->beamPosX(), evt->beamPosY(), evt->beamPosZ(),
44 evt->beamPosSigmaX(), evt->beamPosSigmaY(), evt->beamPosSigmaZ(),
45 evt->beamTiltXZ(), evt->beamTiltYZ(), evt->beamPosSigmaXY());
46 return new Trk::RecVertex(temp.beamVtx());
47 } else {
48 ATH_MSG_WARNING( " Cannot get beamSpot center from xAOD::EventInfo. Using (0,0,0)... " );
49 return new Trk::Vertex(Amg::Vector3D(0,0,0));
50 }
51 }else{
52 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
53 if (beamSpotHandle.isValid()) {
54 return new Trk::RecVertex(beamSpotHandle->beamVtx());
55 } else {
56 ATH_MSG_WARNING( " Cannot get beamSpot center from BeamSpotData. Using (0,0,0)... " );
57 return new Trk::Vertex(Amg::Vector3D(0,0,0));
58 }
59 }
60 }
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
Eigen::Matrix< double, 3, 1 > Vector3D

◆ getCount()

int InDet::InDetDetailedTrackSelectorTool::getCount ( const xAOD::TrackParticle & tp,
xAOD::SummaryType type ) const
inlineprivate

Definition at line 82 of file InDetDetailedTrackSelectorTool.h.

82 {
84 if( !tp.summaryValue(val,type) ) return 0;
85 return val > 0 ? val : 0;
86 }

◆ getPosOrBeamSpot()

Amg::Vector3D InDet::InDetDetailedTrackSelectorTool::getPosOrBeamSpot ( const xAOD::Vertex * vertex) const
private

Definition at line 395 of file InDetDetailedTrackSelectorTool.cxx.

396 {
397 if(vertex) return vertex->position();
399 SG::ReadHandle<xAOD::EventInfo> evt(m_eventInfo_key);
400 if (evt.isValid()) {
401 InDet::BeamSpotData temp(evt->beamStatus(), evt->beamPosX(), evt->beamPosY(), evt->beamPosZ(),
402 evt->beamPosSigmaX(), evt->beamPosSigmaY(), evt->beamPosSigmaZ(),
403 evt->beamTiltXZ(), evt->beamTiltYZ(), evt->beamPosSigmaXY());
404 return temp.beamVtx().position();
405 } else {
406 ATH_MSG_WARNING( " Cannot get beamSpot center from xAOD::EventInfo. Using (0,0,0)... " );
407 return Amg::Vector3D(0,0,0);
408 }
409 }else{
410 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
411 if (beamSpotHandle.isValid()) {
412 return beamSpotHandle->beamVtx().position();
413 } else {
414 ATH_MSG_WARNING( " Cannot get beamSpot center from BeamSpotData. Using (0,0,0)... " );
415 return Amg::Vector3D(0,0,0);
416 }
417 }
418 }

◆ initialize()

StatusCode InDet::InDetDetailedTrackSelectorTool::initialize ( )

Definition at line 68 of file InDetDetailedTrackSelectorTool.cxx.

68 {
69 if(m_trackSumTool.empty()){
70 ATH_MSG_DEBUG("No TrackSummaryTool set. OK if running on AOD.");
71 }
73 ATH_CHECK(m_trackSumTool.retrieve(DisableTool{!m_trackSumToolAvailable}));
74
76 ATH_MSG_DEBUG("No TrackParticleCreatorTool set but shared hit selection used. OK if running on AOD.");
77 }
79 ATH_CHECK(m_particleCreator.retrieve(DisableTool{!m_partCreatorToolAvailable}));
80
81 ATH_CHECK( m_extrapolator.retrieve() );
85 if(m_trtDCTool.empty()) {
86 ATH_MSG_ERROR(" Eta dependent cut on number of TRT hits requested but TrtDCCutTool not specified. ");
87 return StatusCode::FAILURE;
88 } else if(m_trtDCTool.retrieve().isFailure()) {
89 ATH_MSG_ERROR(" Unable to retrieve tool "<<m_trtDCTool);
90 return StatusCode::FAILURE;
91 }
92 ATH_MSG_DEBUG("Retrieved tool "<<m_trtDCTool);
94 ATH_MSG_DEBUG("Using eta dependent cut on number of TRT hits.");
95 }
97 ATH_MSG_DEBUG("Using eta dependent cut on number of TRT hits + outliers.");
98 }
99 }else{
100 m_trtDCTool.disable();
101 }
102
103 // Read handle for AtlasFieldCacheCondObj
105
106 ATH_MSG_DEBUG("Using cuts on the number of Silicon hits");
108 //checking whether sizes of cuts and pt interval expressed in vectors match
109 if( m_ptBenchmarks.size() != m_nSCTValues.size()){
110 ATH_MSG_ERROR( "Number of cuts DOES NOT match the number of intervals to apply. Please check jobOptions. ");
111 return StatusCode::FAILURE;
112 } else if (m_ptBenchmarks.empty()){
113 ATH_MSG_ERROR( "Zero vectors for number of cuts and pt intervals. Please check jobOptions. ");
114 return StatusCode::FAILURE;
115 }//end of vector size protection block
116 }//end of memory protection
117 return StatusCode::SUCCESS;
118 }
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & Trk::ITrackSelectorTool::interfaceID ( )
inlinestaticinherited

Definition at line 38 of file ITrackSelectorTool.h.

39 {
41 }
static const InterfaceID IID_ITrackSelectorTool("Trk::ITrackSelectorTool", 1, 0)

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ preselectionBeforeExtrapolation()

bool InDet::InDetDetailedTrackSelectorTool::preselectionBeforeExtrapolation ( const Trk::Perigee & myPerigee) const
private

Definition at line 1059 of file InDetDetailedTrackSelectorTool.cxx.

1060 {
1061 const AmgVector(5)& perigeeParms = myPerigee.parameters();
1062
1063 // only check pt if mag. field is on
1064 const EventContext& ctx = Gaudi::Hive::currentContext();
1065 SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
1066 const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
1067 if (fieldCondObj == nullptr) {
1068 ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
1069 return false;
1070 }
1071 MagField::AtlasFieldCache fieldCache;
1072 fieldCondObj->getInitializedCache (fieldCache);
1073
1074 if (fieldCache.solenoidOn()){//B field
1075 if (perigeeParms[Trk::qOverP] == 0.) {
1076 ATH_MSG_DEBUG("Track rejected because of perigee qOverP == 0.");
1077 return false;
1078 }
1079 double p = std::fabs(1./perigeeParms[Trk::qOverP]);
1080 if (p<m_pMin) {
1081 ATH_MSG_DEBUG("Track rejected because of p " << p << " < " << m_pMin);
1082 return false;
1083 }
1084 double pt = p*std::sin(perigeeParms[Trk::theta]);
1085 if (pt<m_pTMin) {
1086 ATH_MSG_DEBUG("Track rejected because of pt " << pt << " < " << m_pTMin);
1087 return false;
1088 }
1089 }
1090
1091 if (std::fabs(perigeeParms[Trk::d0]) > m_d0MaxPreselection) {
1092 ATH_MSG_DEBUG("Track rejected because of fabs(d0) "<<std::fabs(perigeeParms[Trk::d0])<<" < "<<m_d0MaxPreselection);
1093 return false;
1094 }
1095
1096 return true;
1097 }

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_addToMinHitTrt

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_addToMinHitTrt
private
Initial value:
{this, "addToMinHitTrt", 0,
"add to/subtract from eta dependent minimum nimber of TRT hits"}

Definition at line 177 of file InDetDetailedTrackSelectorTool.h.

178 {this, "addToMinHitTrt", 0,
179 "add to/subtract from eta dependent minimum nimber of TRT hits"};

◆ m_addToMinHitTrtWithOutliers

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_addToMinHitTrtWithOutliers
private
Initial value:
{this, "addToMinHitTrtWithOutliers", 0,
"add to/subtract from eta dependent minimum nimber of TRT hits + outliers"}

Definition at line 183 of file InDetDetailedTrackSelectorTool.h.

184 {this, "addToMinHitTrtWithOutliers", 0,
185 "add to/subtract from eta dependent minimum nimber of TRT hits + outliers"};

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> InDet::InDetDetailedTrackSelectorTool::m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"}
private

Definition at line 201 of file InDetDetailedTrackSelectorTool.h.

202{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"};

◆ m_d0MaxPreselection

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_d0MaxPreselection {this, "d0MaxPreselection", 10.}
private

Definition at line 188 of file InDetDetailedTrackSelectorTool.h.

188{this, "d0MaxPreselection", 10.};

◆ m_d0significanceMax

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_d0significanceMax {this, "d0significanceMax", -1., "max IP significance d0 (-1 switches it off)"}
private

Definition at line 109 of file InDetDetailedTrackSelectorTool.h.

110{this, "d0significanceMax", -1., "max IP significance d0 (-1 switches it off)"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_etaMax

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_etaMax {this, "etaMax", 9999., "max. pseudo-rapidity"}
private

Definition at line 113 of file InDetDetailedTrackSelectorTool.h.

113{this, "etaMax", 9999., "max. pseudo-rapidity"};

◆ m_eventInfo_key

SG::ReadHandleKey<xAOD::EventInfo> InDet::InDetDetailedTrackSelectorTool::m_eventInfo_key {this, "EventInfo", "EventInfo", "Input event information"}
private

Definition at line 225 of file InDetDetailedTrackSelectorTool.h.

226{this, "EventInfo", "EventInfo", "Input event information"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extrapolator

ToolHandle<Trk::IExtrapolator> InDet::InDetDetailedTrackSelectorTool::m_extrapolator {this, "Extrapolator", "Trk::Extrapolator"}
private

Definition at line 199 of file InDetDetailedTrackSelectorTool.h.

200{this, "Extrapolator", "Trk::Extrapolator"};

◆ m_fieldCacheCondObjInputKey

SG::ReadCondHandleKey<AtlasFieldCacheCondObj> InDet::InDetDetailedTrackSelectorTool::m_fieldCacheCondObjInputKey
private
Initial value:
{this, "AtlasFieldCacheCondObj", "fieldCondObj",
"Name of the Magnetic Field conditions object key"}

Definition at line 211 of file InDetDetailedTrackSelectorTool.h.

212 {this, "AtlasFieldCacheCondObj", "fieldCondObj",
213 "Name of the Magnetic Field conditions object key"};

◆ m_fitChi2

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_fitChi2 {this, "fitChi2", 99999., "max. fit chi2"}
private

Definition at line 170 of file InDetDetailedTrackSelectorTool.h.

170{this, "fitChi2", 99999., "max. fit chi2"};

◆ m_fitChi2OnNdfMax

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_fitChi2OnNdfMax {this, "fitChi2OnNdfMax", 999., "max. fitchi2/ndf"}
private

Definition at line 172 of file InDetDetailedTrackSelectorTool.h.

172{this, "fitChi2OnNdfMax", 999., "max. fitchi2/ndf"};

◆ m_fitProb

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_fitProb {this, "fitProb", -1., "min. fit chi2 probability"}
private

Definition at line 171 of file InDetDetailedTrackSelectorTool.h.

171{this, "fitProb", -1., "min. fit chi2 probability"};

◆ m_inDetTestPixelLayerTool

ToolHandle< InDet::IInDetTestPixelLayerTool > InDet::InDetDetailedTrackSelectorTool::m_inDetTestPixelLayerTool
private
Initial value:
{this, "InDetTestPixelLayerTool", "",
"Tool to test if the track crosses a dead module on the b-layer"}

Definition at line 207 of file InDetDetailedTrackSelectorTool.h.

208 {this, "InDetTestPixelLayerTool", "",
209 "Tool to test if the track crosses a dead module on the b-layer"};

◆ m_IPd0Max

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_IPd0Max {this, "IPd0Max", 2.*CLHEP::mm, "max. d0: |d0|<d0Max"}
private

Definition at line 103 of file InDetDetailedTrackSelectorTool.h.

103{this, "IPd0Max", 2.*CLHEP::mm, "max. d0: |d0|<d0Max"};

◆ m_IPz0Max

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_IPz0Max {this, "IPz0Max", 1.5*CLHEP::mm, "max. z0: |z0*sin(theta)|<z0Max"}
private

Definition at line 104 of file InDetDetailedTrackSelectorTool.h.

104{this, "IPz0Max", 1.5*CLHEP::mm, "max. z0: |z0*sin(theta)|<z0Max"};

◆ m_nDoubleHoles

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nDoubleHoles {this, "nDoubleHoles", 999, "max number of double-holes in SCT"}
private

Definition at line 161 of file InDetDetailedTrackSelectorTool.h.

162{this, "nDoubleHoles", 999, "max number of double-holes in SCT"};

◆ m_nHitBLayer

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitBLayer {this, "nHitBLayer", 1, "at least n hits in Blayer"}
private

Definition at line 117 of file InDetDetailedTrackSelectorTool.h.

118{this, "nHitBLayer", 1, "at least n hits in Blayer"};

◆ m_nHitPix

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitPix {this, "nHitPix", 2, "at least n hits in pixels"}
private

Definition at line 119 of file InDetDetailedTrackSelectorTool.h.

119{this, "nHitPix", 2, "at least n hits in pixels"};

◆ m_nHitPixPhysical

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitPixPhysical {this, "nHitPixPhysical", 0, "at least n physical hits in pixel"}
private

Definition at line 122 of file InDetDetailedTrackSelectorTool.h.

123{this, "nHitPixPhysical", 0, "at least n physical hits in pixel"};

◆ m_nHitSct

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitSct {this, "nHitSct", 0, "at least n hits in SCT"}
private

Definition at line 120 of file InDetDetailedTrackSelectorTool.h.

120{this, "nHitSct", 0, "at least n hits in SCT"};

◆ m_nHitSi

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitSi {this, "nHitSi", 7, "at least n hits in pixels+SCT"}
private

Definition at line 121 of file InDetDetailedTrackSelectorTool.h.

121{this, "nHitSi", 7, "at least n hits in pixels+SCT"};

◆ m_nHitSiPhysical

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitSiPhysical {this, "nHitSiPhysical", 3, "at least n physical hits in pixel+SCT"}
private

Definition at line 124 of file InDetDetailedTrackSelectorTool.h.

125{this, "nHitSiPhysical", 3, "at least n physical hits in pixel+SCT"};

◆ m_nHitTrt

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitTrt {this, "nHitTrt", 0, "at least n hits in TRT"}
private

Definition at line 126 of file InDetDetailedTrackSelectorTool.h.

126{this, "nHitTrt", 0, "at least n hits in TRT"};

◆ m_nHitTrtHighE

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitTrtHighE {this, "nHitTrtHighE", 0, "at least n high threshold hits in TRT"}
private

Definition at line 132 of file InDetDetailedTrackSelectorTool.h.

133{this, "nHitTrtHighE", 0, "at least n high threshold hits in TRT"};

◆ m_nHitTrtHighEFraction

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_nHitTrtHighEFraction {this, "nHitTrtHighEFractionMax", 999., "maximum x fraction of transition hits in TRT"}
private

Definition at line 138 of file InDetDetailedTrackSelectorTool.h.

139{this, "nHitTrtHighEFractionMax", 999., "maximum x fraction of transition hits in TRT"};

◆ m_nHitTrtHighEFractionWithOutliers

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_nHitTrtHighEFractionWithOutliers
private
Initial value:
{this, "nHitTrtHighEFractionWithOutliersMax", 999.,
"maximum x fraction of transition hits in TRT (including outliers)"}

Definition at line 140 of file InDetDetailedTrackSelectorTool.h.

141 {this, "nHitTrtHighEFractionWithOutliersMax", 999.,
142 "maximum x fraction of transition hits in TRT (including outliers)"};

◆ m_nHitTrtPlusOutliers

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitTrtPlusOutliers
private
Initial value:
{this, "nHitTrtPlusOutliers", 0,
"at least n hits in TRT (including outliers)"}

Definition at line 127 of file InDetDetailedTrackSelectorTool.h.

128 {this, "nHitTrtPlusOutliers", 0,
129 "at least n hits in TRT (including outliers)"};

◆ m_nHitTrtPlusOutliersHighE

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHitTrtPlusOutliersHighE
private
Initial value:
{this, "nHitTrtPlusOutliersHighE", 0,
"at least n high threshold hits in TRT (including outliers)"}

Definition at line 134 of file InDetDetailedTrackSelectorTool.h.

135 {this, "nHitTrtPlusOutliersHighE", 0,
136 "at least n high threshold hits in TRT (including outliers)"};

◆ m_nHoles

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHoles {this, "nHoles", 999, "max. number of holes in pixel+SCT"}
private

Definition at line 159 of file InDetDetailedTrackSelectorTool.h.

160{this, "nHoles", 999, "max. number of holes in pixel+SCT"};

◆ m_nHolesPix

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHolesPix {this, "nHolesPixel", 999, "max. number of holes in pixels"}
private

Definition at line 163 of file InDetDetailedTrackSelectorTool.h.

164{this, "nHolesPixel", 999, "max. number of holes in pixels"};

◆ m_nHolesSct

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nHolesSct {this, "nHolesSct", 999, "max. number of holes in SCT"}
private

Definition at line 165 of file InDetDetailedTrackSelectorTool.h.

166{this, "nHolesSct", 999, "max. number of holes in SCT"};

◆ m_nSCTValues

IntegerArrayProperty InDet::InDetDetailedTrackSelectorTool::m_nSCTValues {this, "SCTCutValues", {}}
private

Definition at line 223 of file InDetDetailedTrackSelectorTool.h.

223{this, "SCTCutValues", {}};

◆ m_nSharedBLayer

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nSharedBLayer {this, "nSharedBLayer", 0, "max. number of shared hits in B layer"}
private

Definition at line 150 of file InDetDetailedTrackSelectorTool.h.

151{this, "nSharedBLayer", 0, "max. number of shared hits in B layer"};

◆ m_nSharedPix

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nSharedPix {this, "nSharedPix", 0, "max. number of shared hits in pixels"}
private

Definition at line 152 of file InDetDetailedTrackSelectorTool.h.

153{this, "nSharedPix", 0, "max. number of shared hits in pixels"};

◆ m_nSharedSct

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nSharedSct {this, "nSharedSct", 1, "max. number of shared hits in SCT"}
private

Definition at line 154 of file InDetDetailedTrackSelectorTool.h.

155{this, "nSharedSct", 1, "max. number of shared hits in SCT"};

◆ m_nSharedSi

IntegerProperty InDet::InDetDetailedTrackSelectorTool::m_nSharedSi {this, "nSharedSi", 999, "max. number of shared hits in pixels+SCT"}
private

Definition at line 156 of file InDetDetailedTrackSelectorTool.h.

157{this, "nSharedSi", 999, "max. number of shared hits in pixels+SCT"};

◆ m_partCreatorToolAvailable

bool InDet::InDetDetailedTrackSelectorTool::m_partCreatorToolAvailable = false
private

Definition at line 216 of file InDetDetailedTrackSelectorTool.h.

◆ m_particleCreator

ToolHandle<Trk::ITrackParticleCreatorTool> InDet::InDetDetailedTrackSelectorTool::m_particleCreator {this, "TrackParticleCreatorTool", ""}
private

Definition at line 197 of file InDetDetailedTrackSelectorTool.h.

198{this, "TrackParticleCreatorTool", ""};

◆ m_pMin

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_pMin {this, "pMin", 0., "min. p = pT/cos(theta): |p| > pMin"}
private

Definition at line 102 of file InDetDetailedTrackSelectorTool.h.

102{this, "pMin", 0., "min. p = pT/cos(theta): |p| > pMin"};

◆ m_ptBenchmarks

FloatArrayProperty InDet::InDetDetailedTrackSelectorTool::m_ptBenchmarks {this, "PtBenchmarks", {}}
private

Definition at line 221 of file InDetDetailedTrackSelectorTool.h.

221{this, "PtBenchmarks", {}};

◆ m_pTMin

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_pTMin {this, "pTMin", 1.*CLHEP::GeV, "min. pT: |pT|>pTMin"}
private

Definition at line 101 of file InDetDetailedTrackSelectorTool.h.

101{this, "pTMin", 1.*CLHEP::GeV, "min. pT: |pT|>pTMin"};

◆ m_scaleMinHitTrt

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_scaleMinHitTrt
private
Initial value:
{this, "scaleMinHitTrt", 1.,
"scale the eta dependent minimum number of TRT hits; scaling is only applied if m_addToMinHitTrt==0"}

Definition at line 174 of file InDetDetailedTrackSelectorTool.h.

175 {this, "scaleMinHitTrt", 1.,
176 "scale the eta dependent minimum number of TRT hits; scaling is only applied if m_addToMinHitTrt==0"};

◆ m_scaleMinHitTrtWithOutliers

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_scaleMinHitTrtWithOutliers
private
Initial value:
{this, "scaleMinHitTrtWithOutliers", 1.,
"scale the eta dependent minimum number of TRT hits + outliers; scaling is only applied if m_addToMinHitTrtWithOutliers==0"}

Definition at line 180 of file InDetDetailedTrackSelectorTool.h.

181 {this, "scaleMinHitTrtWithOutliers", 1.,
182 "scale the eta dependent minimum number of TRT hits + outliers; scaling is only applied if m_addToMinHitTrtWithOutliers==0"};

◆ m_sigIPd0Max

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_sigIPd0Max {this, "sigIPd0Max", 999.*CLHEP::mm, "max d0 error"}
private

Definition at line 106 of file InDetDetailedTrackSelectorTool.h.

106{this, "sigIPd0Max", 999.*CLHEP::mm, "max d0 error"};

◆ m_sigIPz0Max

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_sigIPz0Max {this, "sigIPz0Max", 999.*CLHEP::mm, "max (error only due to z0)*sin(theta)"}
private

Definition at line 107 of file InDetDetailedTrackSelectorTool.h.

108{this, "sigIPz0Max", 999.*CLHEP::mm, "max (error only due to z0)*sin(theta)"};

◆ m_trackSumTool

ToolHandle<Trk::ITrackSummaryTool> InDet::InDetDetailedTrackSelectorTool::m_trackSumTool {this, "TrackSummaryTool", "Trk::TrackSummaryTool"}
private

Definition at line 195 of file InDetDetailedTrackSelectorTool.h.

196{this, "TrackSummaryTool", "Trk::TrackSummaryTool"};

◆ m_trackSumToolAvailable

bool InDet::InDetDetailedTrackSelectorTool::m_trackSumToolAvailable = true
private

Definition at line 215 of file InDetDetailedTrackSelectorTool.h.

◆ m_trtDCTool

ToolHandle<ITrtDriftCircleCutTool> InDet::InDetDetailedTrackSelectorTool::m_trtDCTool
private
Initial value:
{this, "TrtDCCutTool", "InDet::InDetTrtDriftCircleCutTool",
"Tool to get eta dependent cut on number of TRT hits"}

Definition at line 203 of file InDetDetailedTrackSelectorTool.h.

204 {this, "TrtDCCutTool", "InDet::InDetTrtDriftCircleCutTool",
205 "Tool to get eta dependent cut on number of TRT hits"};

◆ m_TrtMaxEtaAcceptance

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_TrtMaxEtaAcceptance
private
Initial value:
{this, "TrtMaxEtaAcceptance", 999.,
"limit of eta regions where trt hits are expected"}

Definition at line 144 of file InDetDetailedTrackSelectorTool.h.

145 {this, "TrtMaxEtaAcceptance", 999.,
146 "limit of eta regions where trt hits are expected"};

◆ m_useEtaDepententMinHitTrt

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_useEtaDepententMinHitTrt {this, "useEtaDepententMinHitTrt", false}
private

Definition at line 190 of file InDetDetailedTrackSelectorTool.h.

191{this, "useEtaDepententMinHitTrt", false};

◆ m_useEtaDepententMinHitTrtWithOutliers

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_useEtaDepententMinHitTrtWithOutliers {this, "useEtaDepententMinHitTrtWithOutliers", false}
private

Definition at line 192 of file InDetDetailedTrackSelectorTool.h.

193{this, "useEtaDepententMinHitTrtWithOutliers", false};

◆ m_useEventInfoBs

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_useEventInfoBs {this, "UseEventInfoBS", false, "Access beamspot via the EvenInfo object"}
private

Definition at line 227 of file InDetDetailedTrackSelectorTool.h.

228{this, "UseEventInfoBS", false, "Access beamspot via the EvenInfo object"};

◆ m_usePreselectionCuts

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_usePreselectionCuts {this, "usePreselectionCuts", false}
private

Definition at line 187 of file InDetDetailedTrackSelectorTool.h.

187{this, "usePreselectionCuts", false};

◆ m_usePtDependentCuts

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_usePtDependentCuts {this, "UsePtDependentCuts", false}
private

Definition at line 219 of file InDetDetailedTrackSelectorTool.h.

219{this, "UsePtDependentCuts", false};

◆ m_useSharedHitInfo

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_useSharedHitInfo {this, "useSharedHitInfo", false}
private

Definition at line 149 of file InDetDetailedTrackSelectorTool.h.

149{this, "useSharedHitInfo", false};

◆ m_useTrackQualityInfo

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_useTrackQualityInfo {this, "useTrackQualityInfo", true}
private

Definition at line 169 of file InDetDetailedTrackSelectorTool.h.

169{this, "useTrackQualityInfo", true};

◆ m_useTrackSummaryInfo

BooleanProperty InDet::InDetDetailedTrackSelectorTool::m_useTrackSummaryInfo {this, "useTrackSummaryInfo", true}
private

Definition at line 116 of file InDetDetailedTrackSelectorTool.h.

116{this, "useTrackSummaryInfo", true};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_z0Max

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_z0Max {this, "z0Max", 9999.*CLHEP::mm, "max. z0: |z0|<z0Max"}
private

Definition at line 105 of file InDetDetailedTrackSelectorTool.h.

105{this, "z0Max", 9999.*CLHEP::mm, "max. z0: |z0|<z0Max"};

◆ m_z0significanceMax

DoubleProperty InDet::InDetDetailedTrackSelectorTool::m_z0significanceMax {this, "z0significanceMax", -1., "max IP significance z0 (-1 switches it off)"}
private

Definition at line 111 of file InDetDetailedTrackSelectorTool.h.

112{this, "z0significanceMax", -1., "max IP significance z0 (-1 switches it off)"};

The documentation for this class was generated from the following files: