ATLAS Offline Software
Loading...
Searching...
No Matches
Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/CutTrk.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
7
8// Header include
11
12#include "TH1.h"
13
14//-------------------------------------------------
15namespace Rec{
16
17
18//==============================================================================================================
19// xAOD based stuff
20//
22 const xAOD::Vertex & primVrt)
23 const
24 {
25 std::vector<const xAOD::TrackParticle*>& inpTrk = xAODwrk->inpTrk;
26 std::vector<const xAOD::TrackParticle*>& selectedTracks = xAODwrk->listSelTracks;
27 std::vector<const xAOD::TrackParticle*>::const_iterator i_ntrk;
28 std::vector<double> impact,impactError;
29 std::multimap<double,const xAOD::TrackParticle*> orderedTrk;
30 if(m_fillHist){
31 Hists& h = getHists();
32 h.m_hb_ntrkInput->Fill( inpTrk.size()+0.1, m_w_1);
33 }
34 for (i_ntrk = inpTrk.begin(); i_ntrk < inpTrk.end(); ++i_ntrk) {
35//
36//-- Perigee in TrackParticle
37//
38 if(m_fillHist){
39 Hists& h = getHists();
40 h.m_hb_trkSelect->Fill( 0., m_w_1);
41 }
42 if((*i_ntrk)->numberDoF() == 0) continue; //Protection
43 double trkChi2 = (*i_ntrk)->chiSquared() / (*i_ntrk)->numberDoF();
44 if(trkChi2 > m_cutChi2) continue;
45 if( (*i_ntrk)->pt() < m_cutPt) continue;
46 if(m_fillHist){
47 Hists& h = getHists();
48 h.m_hb_trkSelect->Fill( 1., m_w_1);
49 }
50
51 const Trk::Perigee mPer=(*i_ntrk)->perigeeParameters() ;
52 const AmgSymMatrix(5) * locCov = mPer.covariance();
53 const double CovTrkMtx00 = (*locCov)(0,0);
54
55 uint8_t PixelHits,SctHits,BLayHits,TRTHits;
56 if( !((*i_ntrk)->summaryValue(PixelHits,xAOD::numberOfPixelHits)) ) continue; // Track is
57 if( !((*i_ntrk)->summaryValue( SctHits,xAOD::numberOfSCTHits)) ) continue; // definitely
58 if( SctHits<3 ) continue; // bad
59 if( !((*i_ntrk)->summaryValue( TRTHits,xAOD::numberOfTRTHits)) ) continue;
60 if( !((*i_ntrk)->summaryValue(BLayHits,xAOD::numberOfInnermostPixelLayerHits))) BLayHits=0;
61 if(m_fillHist){
62 Hists& h = getHists();
63 h.m_hb_trkSelect->Fill( 2., m_w_1);
64 }
65
66 Amg::Vector3D perigeePos=mPer.position();
67 double impactD0=sqrt( (perigeePos.x()-primVrt.x())*(perigeePos.x()-primVrt.x())
68 +(perigeePos.y()-primVrt.y())*(perigeePos.y()-primVrt.y()) );
69 double impactZ=perigeePos.z()-primVrt.z();
70 if(m_fillHist){
71 Hists& h = getHists();
72 h.m_hb_trkD0->Fill( impactD0, m_w_1);
73 h.m_hb_trkZ ->Fill( impactZ, m_w_1);
74 }
75 if(std::abs(impactZ)*std::sin((*i_ntrk)->theta())>m_maxZVrt && m_maxZVrt > 0.) continue;
76 if(std::abs(impactZ)*std::sin((*i_ntrk)->theta())<m_minZVrt && m_minZVrt > 0.) continue;
77 if(impactD0>m_cutD0Max) continue;
78 if(impactD0<m_cutD0Min) continue;
79 if(m_fillHist){
80 Hists& h = getHists();
81 h.m_hb_trkSelect->Fill( 3., m_w_1);
82 }
83
84 double bX=xAODwrk->beamX + (perigeePos.z()-xAODwrk->beamZ)*xAODwrk->tanBeamTiltX;
85 double bY=xAODwrk->beamY + (perigeePos.z()-xAODwrk->beamZ)*xAODwrk->tanBeamTiltY;
86 double impactBeam=sqrt( (perigeePos.x()-bX)*(perigeePos.x()-bX) + (perigeePos.y()-bY)*(perigeePos.y()-bY));
87//----Anti-pileup
88 double signifBeam = impactBeam / sqrt(CovTrkMtx00);
89 if(signifBeam < m_antiPileupSigRCut) continue; // cut against tracks from pileup vertices
90 if(m_fillHist){
91 Hists& h = getHists();
92 h.m_hb_trkSelect->Fill( 4., m_w_1);
93 }
94//----
95 if(PixelHits < m_cutPixelHits) continue;
96 if(SctHits < m_cutSctHits) continue;
97 if((PixelHits+SctHits) < m_cutSiHits) continue;
98 if(BLayHits < m_cutBLayHits) continue;
99 if(std::abs((*i_ntrk)->eta())<1.9 && TRTHits < m_cutTRTHits) continue; //TRT hits must be present inside TRT
100 if(m_fillHist){
101 Hists& h = getHists();
102 h.m_hb_trkSelect->Fill( 5., m_w_1);
103 }
104//----
105 orderedTrk.emplace(signifBeam,*i_ntrk);
106 selectedTracks.push_back(*i_ntrk);
107 }
108//---- Order tracks according to ranks
109 std::map<double,const xAOD::TrackParticle*>::reverse_iterator rt=orderedTrk.rbegin();
110 selectedTracks.resize(orderedTrk.size());
111 for ( int cntt=0; rt!=orderedTrk.rend(); ++rt,++cntt) {selectedTracks[cntt]=(*rt).second;}
112 }
113
114}//end namespace
#define AmgSymMatrix(dim)
Header file for AthHistogramAlgorithm.
Gaudi::Property< float > m_minZVrt
void selGoodTrkParticle(workVectorArrxAOD *xAODwrk, const xAOD::Vertex &primVrt) const
Gaudi::Property< int > m_cutPixelHits
Gaudi::Property< float > m_antiPileupSigRCut
Gaudi::Property< float > m_maxZVrt
Gaudi::Property< float > m_cutPt
Gaudi::Property< float > m_cutD0Min
Gaudi::Property< int > m_cutBLayHits
Gaudi::Property< float > m_cutD0Max
Gaudi::Property< bool > m_fillHist
Gaudi::Property< float > m_cutChi2
Gaudi::Property< int > m_cutSctHits
Gaudi::Property< int > m_cutTRTHits
const Amg::Vector3D & position() const
Access method for the position.
float z() const
Returns the z position.
float y() const
Returns the y position.
float x() const
Returns the x position.
Eigen::Matrix< double, 3, 1 > Vector3D
Gaudi Tools.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
Vertex_v1 Vertex
Define the latest version of the vertex class.
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfSCTHits
number of hits in SCT [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].
std::vector< const xAOD::TrackParticle * > listSelTracks
std::vector< const xAOD::TrackParticle * > inpTrk