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

29 : AthAlgTool(t,n,p)
30 {
31 declareInterface<ITrackSelectorTool>(this);
32 }
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 802 of file InDetDetailedTrackSelectorTool.cxx.

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

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

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

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

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

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

◆ decision() [7/7]

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

Definition at line 811 of file InDetDetailedTrackSelectorTool.cxx.

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

118 {
119 ATH_MSG_DEBUG( "Finalize successful" );
120 return StatusCode::SUCCESS;
121 }

◆ getBeamSpot()

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

Definition at line 34 of file InDetDetailedTrackSelectorTool.cxx.

35 {
37 SG::ReadHandle<xAOD::EventInfo> evt(m_eventInfo_key, ctx);
38 if (evt.isValid()) {
39 InDet::BeamSpotData temp(evt->beamStatus(), evt->beamPosX(), evt->beamPosY(), evt->beamPosZ(),
40 evt->beamPosSigmaX(), evt->beamPosSigmaY(), evt->beamPosSigmaZ(),
41 evt->beamTiltXZ(), evt->beamTiltYZ(), evt->beamPosSigmaXY());
42 return new Trk::RecVertex(temp.beamVtx());
43 } else {
44 ATH_MSG_WARNING( " Cannot get beamSpot center from xAOD::EventInfo. Using (0,0,0)... " );
45 return new Trk::Vertex(Amg::Vector3D(0,0,0));
46 }
47 }else{
48 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
49 if (beamSpotHandle.isValid()) {
50 return new Trk::RecVertex(beamSpotHandle->beamVtx());
51 } else {
52 ATH_MSG_WARNING( " Cannot get beamSpot center from BeamSpotData. Using (0,0,0)... " );
53 return new Trk::Vertex(Amg::Vector3D(0,0,0));
54 }
55 }
56 }
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 397 of file InDetDetailedTrackSelectorTool.cxx.

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

◆ initialize()

StatusCode InDet::InDetDetailedTrackSelectorTool::initialize ( )

Definition at line 64 of file InDetDetailedTrackSelectorTool.cxx.

64 {
65 if(m_trackSumTool.empty()){
66 ATH_MSG_DEBUG("No TrackSummaryTool set. OK if running on AOD.");
67 }
69 ATH_CHECK(m_trackSumTool.retrieve(DisableTool{!m_trackSumToolAvailable}));
70
72 ATH_MSG_DEBUG("No TrackParticleCreatorTool set but shared hit selection used. OK if running on AOD.");
73 }
75 ATH_CHECK(m_particleCreator.retrieve(DisableTool{!m_partCreatorToolAvailable}));
76
77 ATH_CHECK( m_extrapolator.retrieve() );
81 if(m_trtDCTool.empty()) {
82 ATH_MSG_ERROR(" Eta dependent cut on number of TRT hits requested but TrtDCCutTool not specified. ");
83 return StatusCode::FAILURE;
84 } else if(m_trtDCTool.retrieve().isFailure()) {
85 ATH_MSG_ERROR(" Unable to retrieve tool "<<m_trtDCTool);
86 return StatusCode::FAILURE;
87 }
88 ATH_MSG_DEBUG("Retrieved tool "<<m_trtDCTool);
90 ATH_MSG_DEBUG("Using eta dependent cut on number of TRT hits.");
91 }
93 ATH_MSG_DEBUG("Using eta dependent cut on number of TRT hits + outliers.");
94 }
95 }else{
96 m_trtDCTool.disable();
97 }
98
99 // Read handle for AtlasFieldCacheCondObj
101
102 ATH_MSG_DEBUG("Using cuts on the number of Silicon hits");
104 //checking whether sizes of cuts and pt interval expressed in vectors match
105 if( m_ptBenchmarks.size() != m_nSCTValues.size()){
106 ATH_MSG_ERROR( "Number of cuts DOES NOT match the number of intervals to apply. Please check jobOptions. ");
107 return StatusCode::FAILURE;
108 } else if (m_ptBenchmarks.empty()){
109 ATH_MSG_ERROR( "Zero vectors for number of cuts and pt intervals. Please check jobOptions. ");
110 return StatusCode::FAILURE;
111 }//end of vector size protection block
112 }//end of memory protection
113 return StatusCode::SUCCESS;
114 }
#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 1068 of file InDetDetailedTrackSelectorTool.cxx.

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

◆ 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 >, and AthCheckedComponent<::AthAlgTool >.

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