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 801 of file InDetDetailedTrackSelectorTool.cxx.

802 {
803 if(nullptr == trkQuality) {
804 ATH_MSG_WARNING( "Null FitQuality pointer passed. No track Quality cut possible. Selection failed." );
805 return false;
806 }
807 return decision(trkQuality->chiSquared(),trkQuality->numberDoF());
808 }
#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 660 of file InDetDetailedTrackSelectorTool.cxx.

660 {
661
662 // checking pointer first
663 if(nullptr==track || !track->covariance()) {
664 ATH_MSG_WARNING( "Decision on measured perigee: Zero pointer to measured perigee passed. Selection failed." );
665 return false;
666 }
667
668 const AmgVector(5)& perigeeParms = track->parameters();
669
670 // only check pt if mag. field is on
671 const EventContext& ctx = Gaudi::Hive::currentContext();
672 SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx};
673 const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
674 if (fieldCondObj == nullptr) {
675 ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
676 return false;
677 }
678 MagField::AtlasFieldCache fieldCache;
679 fieldCondObj->getInitializedCache (fieldCache);
680
681 if (fieldCache.solenoidOn()){//B field
682 if (perigeeParms[Trk::qOverP] == 0.) {
683 ATH_MSG_DEBUG("Track rejected because of qOverP == 0.");
684 return false;
685 }
686 double p = std::fabs(1./perigeeParms[Trk::qOverP]);
687 if (p<m_pMin) {
688 ATH_MSG_DEBUG("Track rejected because of p " << p << " < " << m_pMin);
689 return false;
690 }
691 double pt = p*std::sin(perigeeParms[Trk::theta]);
692 if (pt<m_pTMin) {
693 ATH_MSG_DEBUG("Track rejected because of pt " << pt << " < " << m_pTMin);
694 return false;
695 }
696 }
697
698 if (std::fabs(perigeeParms[Trk::d0]) > m_IPd0Max) {
699 ATH_MSG_DEBUG("Track rejected because of fabs(d0) " << std::fabs(perigeeParms[Trk::d0]) << " > " << m_IPd0Max);
700 return false;
701 }
702
703 if (std::fabs(perigeeParms[Trk::z0]*std::sin(perigeeParms[Trk::theta])) > m_IPz0Max) {
704 ATH_MSG_DEBUG("Track rejected because of fabs(z0*sin(theta)) " << std::fabs(perigeeParms[Trk::z0]*std::sin(perigeeParms[Trk::theta])) << " > " << m_IPz0Max);
705 return false;
706 }
707
708 if (std::fabs(perigeeParms[Trk::z0]) > m_z0Max) {
709 ATH_MSG_DEBUG("Track rejected because of fabs(z0) " << std::fabs(perigeeParms[Trk::z0]) << " > " << m_z0Max);
710 return false;
711 }
712
713 if (sqrt( (*track->covariance())(Trk::z0,Trk::z0) )*std::sin(perigeeParms[Trk::theta])>m_sigIPz0Max) {
714 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);
715 return false;
716 }
717
718 if (sqrt( (*track->covariance())(Trk::d0,Trk::d0) )>m_sigIPd0Max) {
719 ATH_MSG_DEBUG("Track rejected because of err(d0) " << sqrt( (*track->covariance())(Trk::d0,Trk::d0) ) << " > " << m_sigIPd0Max);
720 return false;
721 }
722
724
725 double sinTheta = std::sin(perigeeParms[Trk::theta]);
726 double cosTheta = std::cos(perigeeParms[Trk::theta]);
727 double d0wrtPriVtx = perigeeParms[Trk::d0];
728 double deltaZ = perigeeParms[Trk::z0];
729 double z0wrtPriVtx = deltaZ*sinTheta;
730 double testtrackSigD0 = sqrt( (*track->covariance())(Trk::d0,Trk::d0) );
731 double testtrackSigZ0 = sqrt( (*track->covariance())(Trk::z0,Trk::z0) );
732 double testtrackSigTh = sqrt( (*track->covariance())(Trk::theta,Trk::theta) );
733 // error on IP:
734 double trackPhi = perigeeParms[Trk::phi];
735 double dIPdx = std::sin(trackPhi);
736 double dIPdy = -std::cos(trackPhi);
737 double DD0 = testtrackSigD0*testtrackSigD0;
738 double newD0Err=0;
739 if (covariancePosition) {
740 double DXX = dIPdx*dIPdx* (*covariancePosition)(0,0);
741 double DYY = dIPdy*dIPdy* (*covariancePosition)(1,1);
742 double DXY = 2.*dIPdx*dIPdy* (*covariancePosition)(0,1);
743 newD0Err = DD0 + DXX + DYY + DXY;
744 } else {
745 newD0Err = DD0;
746 }
747
748 double d0ErrwrtPriVtx = (newD0Err>0 ? sqrt(newD0Err) : -10e-9);
749
750 if (d0ErrwrtPriVtx<0) {
751 ATH_MSG_WARNING( " error on d0 is negative: numeric error... (not expected. please report!)" );
752 }
753
754 if (m_d0significanceMax>0) {
755 if (std::fabs(d0wrtPriVtx/d0ErrwrtPriVtx)>m_d0significanceMax) {
756 ATH_MSG_DEBUG("Track rejected because of fabs(d0wrtPriVtx/d0ErrwrtPriVtx) " << std::fabs(d0wrtPriVtx/d0ErrwrtPriVtx) << " > " << m_d0significanceMax);
757 return false;
758 }
759 }
760
761 if (m_z0significanceMax>0) {
762
763 // error on zIP:
764 double dZIPdTheta = deltaZ*cosTheta;
765 double dZIPdz0 = sinTheta;
766 double dZIPdzV = -sinTheta;
767 double DTheta2 = dZIPdTheta*dZIPdTheta*testtrackSigTh*testtrackSigTh;
768 double DZ02 = dZIPdz0*dZIPdz0*testtrackSigZ0*testtrackSigZ0;
769 double DThetaZ0 = 2.*dZIPdTheta*dZIPdz0*(*track->covariance())(Trk::theta,Trk::z0);
770 double newZ0Err(0);
771 if (covariancePosition) {
772 double DZV2 = dZIPdzV*dZIPdzV* (*covariancePosition)(2,2);
773 newZ0Err = DTheta2 + DZ02 + DZV2 + DThetaZ0;
774 } else {
775 newZ0Err = DTheta2 + DZ02 + DThetaZ0;
776 }
777
778 double z0ErrwrtPriVtx = (newZ0Err>0 ? sqrt(newZ0Err) : -10e-9);
779
780 if (z0ErrwrtPriVtx<0) {
781 ATH_MSG_WARNING( " error on z0 is negative: numeric error... (not expected. please report!)" );
782 }
783
784 if (std::fabs(z0wrtPriVtx/z0ErrwrtPriVtx)>m_z0significanceMax) {
785 ATH_MSG_DEBUG("Track rejected because of fabs(z0wrtPriVtx/z0ErrwrtPriVtx) " << std::fabs(z0wrtPriVtx/z0ErrwrtPriVtx) << " > " << m_z0significanceMax);
786 return false;
787 }
788 }
789
790 }
791
792 if (std::fabs(track->momentum().eta())>m_etaMax) {
793 ATH_MSG_DEBUG("Track rejected because of fabs(eta) " << std::fabs(track->momentum().eta()) << " > " << m_etaMax);
794 return false;
795 }
796
797 return true;
798 }
#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
131 const EventContext& ctx = Gaudi::Hive::currentContext();
132
133 int nHitTrt = m_nHitTrt;
134 int nHitTrtPlusOutliers = m_nHitTrtPlusOutliers;
135 const Trk::Perigee* perigeeBeforeExtrapolation=dynamic_cast<const Trk::Perigee*>(track.perigeeParameters());
136 if (perigeeBeforeExtrapolation && m_usePreselectionCuts){
137 bool preselectionDecision=preselectionBeforeExtrapolation(*perigeeBeforeExtrapolation);
138 if (!preselectionDecision) {
139 ATH_MSG_DEBUG("Track rejected because of preselection decision!");
140 return false;
141 }
142 } else if (m_usePreselectionCuts){
143 ATH_MSG_DEBUG( " Preselection was requested but cannot be made since no Perigee in Track is available. This is not an error." );
144 }
145 const Trk::Vertex* myVertex=vertex;
146 //in case no Vertex is provided by the user, beam position will be used if available
147 if (myVertex==nullptr) {
148 myVertex = getBeamSpot(ctx);
149 }
150 Trk::PerigeeSurface perigeeSurface(myVertex->position());
151 const Trk::TrackParameters *firstmeaspar=nullptr;
152 for (const auto *i : *track.trackParameters()){
153 if ( i->covariance() && !dynamic_cast<const Trk::Perigee*>(i)) {
154 firstmeaspar=i;
155 break;
156 }
157 }
158 if (!firstmeaspar) {
159 //assumes perigeeParameters exist...
160 //no track selection if firstmeas + perigee does not exist !
161 firstmeaspar=track.perigeeParameters();
162 if (!firstmeaspar){
163 ATH_MSG_WARNING( " First measurment on track is missing. Using perigee Parameters, but they are missing: 0 pointer! Track selection failed " );
164 //clean up vertex
165 if (myVertex!=vertex) {
166 delete myVertex;
167 myVertex=nullptr;
168 }
169 return false;
170 }
171 }
172 const Trk::TrackParameters* extrapolatedParameters= m_extrapolator->extrapolate(ctx,
173 *firstmeaspar,
174 perigeeSurface,
176 true,
177 track.info().particleHypothesis() ).release();
178 const Trk::Perigee* extrapolatedPerigee = extrapolatedParameters ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters) : nullptr;
179 if (!extrapolatedPerigee || !extrapolatedPerigee->covariance() ) {
180 ATH_MSG_WARNING( "Track Selector failed to extrapolate track to the vertex: " << myVertex->position() );
181 if (extrapolatedParameters) {
182 ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
183 delete extrapolatedParameters;
184 extrapolatedParameters=nullptr;
185 }
186 }
187
188 //decision based on the track parameters
189 const Trk::RecVertex* recVertex = dynamic_cast<const Trk::RecVertex*>(myVertex);
190 bool dec = decision(extrapolatedPerigee, recVertex ? &recVertex->covariancePosition() : nullptr );
191 if (myVertex!=vertex) {
192 delete myVertex;
193 myVertex=nullptr;
194 }
195 bool isInTrtAcceptance=true;
196 if (!extrapolatedPerigee || std::fabs(extrapolatedPerigee->momentum().eta())>m_TrtMaxEtaAcceptance) {
197 isInTrtAcceptance=false;
198 }
199 if (extrapolatedPerigee!=track.perigeeParameters()) {
200 delete extrapolatedPerigee;
201 extrapolatedPerigee=nullptr;
202 }
203 if(!dec) {
204 ATH_MSG_DEBUG("Track rejected because of perigee parameters!");
205 return false;
206 }
208 const Trk::FitQuality* TrkQuality=track.fitQuality();
209 if (TrkQuality==nullptr) {
210 ATH_MSG_WARNING( "Requested cut on track quality was not possible. Track has no FitQuality object attached. Selection failed." );
211 return false;
212 }
213 if (!decision(TrkQuality)) {
214 return false;
215 }
216 }
218 //number of hits, silicon hits, b-layer
219 // first ask track for summary
220 std::unique_ptr<Trk::TrackSummary> summaryUniquePtr;
221 const Trk::TrackSummary* summary = track.trackSummary();
222 if (m_trackSumToolAvailable && summary == nullptr) {
223 summaryUniquePtr = m_trackSumTool->summary(ctx, track);
224 summary = summaryUniquePtr.get();
225 }
226 if (nullptr==summary ) {
227 ATH_MSG_FATAL( "Track preselection: cannot create a track summary (but useTrackSummary is true). Selection failed." );
228 return false;
229 }
230
231 // Create xAOD::TrackParticle to retrieve shared hit info
232 const xAOD::TrackParticle* tp = m_partCreatorToolAvailable ? m_particleCreator->createParticle(ctx, track) : nullptr;
233 if(m_useSharedHitInfo && tp==nullptr){
234 ATH_MSG_FATAL( "Track preselection: cannot create a track particle (but useSharedHitInfo is true). Selection failed." );
235 return false;
236 }
237
238 // get the minimum nimber of TRT hits based on eta of the track
240 nHitTrt = m_trtDCTool->minNumberDCs( (*track.trackParameters())[0] );
241 if(m_addToMinHitTrt!=0){
242 nHitTrt += m_addToMinHitTrt;
243 }else{
244 nHitTrt = (int)((double)nHitTrt*m_scaleMinHitTrt);
245 }
246 }
247
248 // get the minimum nimber of TRT hits + outliers based on eta of the track
250 nHitTrtPlusOutliers = m_trtDCTool->minNumberDCs( (*track.trackParameters())[0] );
252 nHitTrtPlusOutliers += m_addToMinHitTrtWithOutliers;
253 }else{
254 nHitTrtPlusOutliers = (int)((double)nHitTrtPlusOutliers*m_scaleMinHitTrtWithOutliers);
255 }
256 }
257
258 if (!decision(summary, tp, m_useSharedHitInfo,isInTrtAcceptance, perigeeBeforeExtrapolation,
259 nHitTrt, nHitTrtPlusOutliers)) {
260 return false;
261 }
262 }
263 return true;
264 }
#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 268 of file InDetDetailedTrackSelectorTool.cxx.

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

849 {
850 if (summary==nullptr) {
851 ATH_MSG_WARNING( "Null TrackSummary pointer passed. Selection failed." );
852 return false;
853 }
854
856
857 if(nb<0) nb=0;
858
860 if(np<0) np=0;
861
863 if(npd<0) npd=0;
864
865 int ns = summary->get(Trk::numberOfSCTHits);
866 if(ns<0) ns=0;
867
868 int nhp = summary->get(Trk::numberOfPixelHoles);
869 if (nhp < 0) nhp = 0;
870
871 int nhs = summary->get(Trk::numberOfSCTHoles);
872 if (nhs < 0) nhs = 0;
873
874 int ndhs = summary->get(Trk::numberOfSCTDoubleHoles);
875 if (ndhs < 0) ndhs = 0;
876
877 //**-----------------------------------------------------------------------
878
880 if (!track) {
881 return false;
882 }
883 const AmgVector(5)& perigeeParms = track->parameters();
884 double p = std::fabs(1./perigeeParms[Trk::qOverP]);
885 double pt = p*std::sin(perigeeParms[Trk::theta]);
886
887 unsigned int it = 0;
888 for(; it< m_ptBenchmarks.size()-1; ++it ) {
889 if(pt>m_ptBenchmarks[it] && pt <=m_ptBenchmarks[it+1] && ns < m_nSCTValues[it]) {
890 ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
891 return false;
892 }
893 }//end of pt intervals loop
894
895 //now cutting all the rest by the last value in the vector
896 if(pt>m_ptBenchmarks[it+1] && ns < m_nSCTValues[it+1]) {
897 ATH_MSG_DEBUG("Track rejected because of Pt-Dependent SCT Hit cut (CAREFUL! Excludes dead modules)") ;
898 return false;
899 }
900
901 }
902
903 //*--------------------------------------------------------------------------------
904
905 //normal cuts in all their variety
906
907 if(nb == 0 && nb < m_nHitBLayer) {
908 ATH_MSG_DEBUG("Track rejected because of nHitBLayer "<<nb<<" < "<<m_nHitBLayer);
909 if(m_inDetTestPixelLayerTool.empty()) {
910 ATH_MSG_DEBUG("and no blayer tool configured, so will not try to recover track");
911 return false;
912 } else if (m_inDetTestPixelLayerTool->expectHitInInnermostPixelLayer(track)) {
913 ATH_MSG_DEBUG("and track rejected because at least one hit is expected in the innermost pixel layer") ;
914 return false;
915 }else ATH_MSG_DEBUG("recovered track as no b-layer expected") ;
916 }//end of checking the b-layer
917
918 if(np+npd < m_nHitPix) {
919 ATH_MSG_DEBUG("Track rejected because of nHitPix "<<np+npd<<" < "<<m_nHitPix);
920 return false;
921 }
922
923 if(np < m_nHitPixPhysical) {
924 ATH_MSG_DEBUG("Track rejected because of nHitPixPhysical "<<np<<" < "<<m_nHitPixPhysical);
925 return false;
926 }
927
928 int nsd = summary->get(Trk::numberOfSCTDeadSensors);
929 if(nsd<0)
930 nsd=0;
931
932 if(ns+nsd < m_nHitSct)
933 {
934 ATH_MSG_DEBUG("Track rejected because of nHitSct "<<ns+nsd<<" < "<<m_nHitSct);
935 return false;
936 }
937
938 if((np+ns+npd+nsd) < m_nHitSi)
939 {
940 ATH_MSG_DEBUG("Track rejected because of nHitSi "<<np+npd+ns+nsd<<" < "<<m_nHitSi);
941 return false;
942 }
943
944 if((np+ns) < m_nHitSiPhysical)
945 {
946 ATH_MSG_DEBUG("Track rejected because of nHitSiPhysical "<<np+ns<<" < "<<m_nHitSiPhysical);
947 return false;
948 }
949
950 // Cuts on number of Holes
951
952 if ((nhp+nhs) > m_nHoles)
953 {
954 ATH_MSG_DEBUG("Track rejected because of nHolesPixPlusSCT "<<nhp+nhs<<" > "<<m_nHoles);
955 return false;
956 }
957
958 if (ndhs > m_nDoubleHoles)
959 {
960 ATH_MSG_DEBUG("Track rejected because of nDoubleHolesSCT "<<ndhs<<" > "<<m_nDoubleHoles);
961 return false;
962 }
963
964 if (nhp > m_nHolesPix)
965 {
966 ATH_MSG_DEBUG("Track rejected because of nHolesPix "<<nhp<<" > "<<m_nHolesPix);
967 return false;
968 }
969
970 if (nhs > m_nHolesSct)
971 {
972 ATH_MSG_DEBUG("Track rejected because of nHolesSct "<<nhs<<" > "<<m_nHolesSct);
973 return false;
974 }
975
976 if (useTrtHitInfo) {
977
978 int nh = summary->get(Trk::numberOfTRTHits);
979 if(nh<0) nh=0;
980 if(nh < nHitTrt) {
981 ATH_MSG_DEBUG("Track rejected because of nHitTrt "<<nh<<" < "<<nHitTrt);
982 return false;
983 }
984
986 if (nhh<0) nhh=0;
987 if (nhh<nHitTrtPlusOutliers) {
988 ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliers "<<nhh<<" < "<<nHitTrtPlusOutliers);
989 return false;
990 }
991
993 if (nhthits<0) nhthits=0;
994 if (nhthits<m_nHitTrtHighE) {
995 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighE "<<nhthits<<" < "<<m_nHitTrtHighE);
996 return false;
997 }
998
1000 if (nhthitsWithOutliers<0) nhthitsWithOutliers=0;
1001 if (nhthitsWithOutliers<m_nHitTrtPlusOutliersHighE) {
1002 ATH_MSG_DEBUG("Track rejected because of nHitTrtPlusOutliersHighE "<<nhthitsWithOutliers<<" < "<<m_nHitTrtPlusOutliersHighE);
1003 return false;
1004 }
1005
1006 if (summary->get( Trk :: numberOfTRTHits )>0) {
1008 if(nhe<0.) nhe=0.;
1009 if(nhe > m_nHitTrtHighEFraction ) {
1010 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFraction "<<nhe<<" < "<<m_nHitTrtHighEFraction);
1011 return false;
1012 }
1013 }
1014
1015 if ( summary->get( Trk :: numberOfTRTHits ) + summary->get( Trk :: numberOfTRTOutliers ) > 0 ) {
1017 (double)(summary->get( Trk::numberOfTRTHits) + summary->get( Trk :: numberOfTRTOutliers ) );
1018 if(nheh<0.) nheh=0.;
1019 if (nheh>1.) nheh=1.;
1021 ATH_MSG_DEBUG("Track rejected because of nHitTrtHighEFractionWithOutliers "<<nheh<<" < "<<m_nHitTrtHighEFractionWithOutliers);
1022 return false;
1023 }
1024 }
1025 }
1026
1027 if (useSharedHitInfo) {
1028 if(!tp){
1029 ATH_MSG_DEBUG("Track rejected because xAOD::TrackParticle not available");
1030 return false;
1031 }
1032
1034 if(nbs < 0) nbs = 0;
1035 if (nbs>1) nbs=1;
1036 if(nbs>m_nSharedBLayer) {
1037 ATH_MSG_DEBUG("Track rejected because of nSharedBLayer "<<nbs<<" < "<<m_nSharedBLayer);
1038 return false;
1039 }
1040
1042 if(nps < 0) nps = 0;
1043 if(nps>m_nSharedPix) {
1044 ATH_MSG_DEBUG("Track rejected because of nSharedPix "<<nps<<" < "<<m_nSharedPix);
1045 return false;
1046 }
1047
1049 if(nss < 0) nss = 0;
1050 if(nss > m_nSharedSct) {
1051 ATH_MSG_DEBUG("Track rejected because of nSharedSct "<<nss<<" < "<<m_nSharedSct);
1052 return false;
1053 }
1054
1055 int nst = nps + nss;
1056 if(nst>m_nSharedSi) {
1057 ATH_MSG_DEBUG("Track rejected because of nSharedSi "<<nst<<" < "<<m_nSharedSi);
1058 return false;
1059 }
1060 }
1061
1062 return true;
1063
1064 }
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 428 of file InDetDetailedTrackSelectorTool.cxx.

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

810 {
811
812 double proba = 1.;
813
814 if(ndf>0 && chi2>=0.) {
815 Genfun::CumulativeChiSquare myCumulativeChiSquare(ndf);
816 proba = 1.-myCumulativeChiSquare(chi2);
817 }
818
819 if(chi2>m_fitChi2) {
820 ATH_MSG_DEBUG("Track rejected because of chi2 "<<chi2<<" > "<<m_fitChi2);
821 return false;
822 }
823
824 if(proba<m_fitProb) {
825 ATH_MSG_DEBUG("Track rejected because of fit probability "<<proba<<" > "<<m_fitProb);
826 return false;
827 }
828 if(!ndf) {
829 ATH_MSG_DEBUG("Track rejected because of ndof = "<<ndf);
830 return false;
831 }
832 if(chi2/double(ndf)>m_fitChi2OnNdfMax) {
833 ATH_MSG_DEBUG("Track rejected because of chi2/ndof "<<chi2/double(ndf)<<" > "<<m_fitChi2OnNdfMax);
834 return false;
835 }
836
837 return true;
838 }
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 }
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.

◆ getPosOrBeamSpot()

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

Definition at line 401 of file InDetDetailedTrackSelectorTool.cxx.

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

◆ 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 1067 of file InDetDetailedTrackSelectorTool.cxx.

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

◆ 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: