ATLAS Offline Software
TrackSelectionAlgs.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Header include
9 
12 
13 #include <iostream>
14 
15 #include "TH1D.h"
16 #include "TNtuple.h"
17 #include "TTree.h"
18 #include "TROOT.h"
19 
20 //-------------------------------------------------
21 
22 using namespace std;
23 
24 namespace VKalVrtAthena {
25 
26 
27  //____________________________________________________________________________________________________
28  bool VrtSecInclusive::selectTrack_d0Cut ( const xAOD::TrackParticle* trk ) const { return ( fabs( trk->d0() ) > m_jp.d0TrkPVDstMinCut && fabs( trk->d0() ) < m_jp.d0TrkPVDstMaxCut ); }
29  bool VrtSecInclusive::selectTrack_z0Cut ( const xAOD::TrackParticle* trk ) const { return ( fabs( trk->z0() ) > m_jp.z0TrkPVDstMinCut && fabs( trk->z0() ) < m_jp.z0TrkPVDstMaxCut ); }
30  bool VrtSecInclusive::selectTrack_d0errCut ( const xAOD::TrackParticle* trk ) const { const double cov11 = trk->definingParametersCovMatrix()(0,0); return cov11 < m_jp.d0TrkErrorCut*m_jp.d0TrkErrorCut; }
31  bool VrtSecInclusive::selectTrack_z0errCut ( const xAOD::TrackParticle* trk ) const { const double cov22 = trk->definingParametersCovMatrix()(1,1); return cov22 < m_jp.z0TrkErrorCut*m_jp.z0TrkErrorCut; }
32  bool VrtSecInclusive::selectTrack_d0signifCut ( const xAOD::TrackParticle* ) { return true; }
33  bool VrtSecInclusive::selectTrack_z0signifCut ( const xAOD::TrackParticle* ) { return true; }
34  bool VrtSecInclusive::selectTrack_pTCut ( const xAOD::TrackParticle* trk ) const { return trk->pt() > m_jp.TrkPtCut; }
35  bool VrtSecInclusive::selectTrack_chi2Cut ( const xAOD::TrackParticle* trk ) const { return trk->chiSquared() / (trk->numberDoF()+AlgConsts::infinitesimal) < m_jp.TrkChi2Cut; }
36 
37  //____________________________________________________________________________________________________
38  bool VrtSecInclusive::selectTrack_hitPattern( const xAOD::TrackParticle* trk ) const {
39 
40  uint8_t PixelHits = 0;
41  uint8_t SCTHits = 0;
42  uint8_t BLayHits = 0;
43  uint8_t PixShare = 0;
44  uint8_t SCTShare = 0;
45  uint8_t TRTHits = 0;
46 
47  if( !(trk->summaryValue( PixelHits, xAOD::numberOfPixelHits ) ) ) PixelHits =0;
48  if( !(trk->summaryValue( SCTHits, xAOD::numberOfSCTHits ) ) ) SCTHits =0;
49  if( !(trk->summaryValue( BLayHits, xAOD::numberOfInnermostPixelLayerHits ) ) ) BLayHits =0;
50  if( !(trk->summaryValue( PixShare, xAOD::numberOfPixelSharedHits ) ) ) PixShare =0;
51  if( !(trk->summaryValue( SCTShare, xAOD::numberOfSCTSharedHits ) ) ) SCTShare =0;
52  if( !(trk->summaryValue( TRTHits, xAOD::numberOfTRTHits ) ) ) TRTHits =0;
53 
54  uint8_t SharedHits = PixShare + SCTShare;
55 
56  // do Pixel/SCT/SiHits only if we exclude StandAlone TRT hits
57  if( !m_jp.SAloneTRT ) {
58  if(PixelHits < m_jp.CutPixelHits) return false;
59  if(SCTHits < m_jp.CutSctHits) return false;
60  if((PixelHits+SCTHits) < m_jp.CutSiHits) return false;
61  if(BLayHits < m_jp.CutBLayHits) return false;
62  if(SharedHits > m_jp.CutSharedHits) return false;
63  }
64 
65  // The folloing part reproduces the track selection in RPVDixpVrt
66  if( m_jp.doTRTPixCut ) {
67  if(TRTHits == 0 && PixelHits < 2) return false;
68  }
69 
70  if( PixelHits == 0 && SCTHits < 6 ) return false;
71 
72  return true;
73  }
74 
75  //____________________________________________________________________________________________________
76  bool VrtSecInclusive::selectTrack_hitPatternTight( const xAOD::TrackParticle* trk ) const {
77  uint8_t PixelHits = 0;
78  uint8_t SCTHits = 0;
79  uint8_t TRTHits = 0;
80 
81  if( !(trk->summaryValue( PixelHits, xAOD::numberOfPixelHits ) ) ) PixelHits =0;
82  if( !(trk->summaryValue( SCTHits, xAOD::numberOfSCTHits ) ) ) SCTHits =0;
83  if( !(trk->summaryValue( TRTHits, xAOD::numberOfTRTHits ) ) ) TRTHits =0;
84 
85  if( trk->pt() > 20.e3 ) return true;
86 
87  if( SCTHits < m_jp.CutTightSCTHits ) return false;
88 
89  if( fabs( trk->eta() ) < 1.7 ) {
90  if( TRTHits < m_jp.CutTightTRTHits ) return false;
91  }
92 
93  return true;
94  }
95 
96  //____________________________________________________________________________________________________
97  bool VrtSecInclusive::selectTrack_notPVassociated ( const xAOD::TrackParticle* trk ) const {
98  return !( VKalVrtAthena::isAssociatedToVertices( trk, m_primaryVertices ) );
99  }
100 
101  //____________________________________________________________________________________________________
102  bool VrtSecInclusive::selectTrack_LRTR3Cut( const xAOD::TrackParticle* trk ) const {
103  uint8_t npix = 0;
105  uint8_t nsct = 0;
107  uint8_t nSiHits = npix + nsct ;
108  uint8_t nSCTHoles=0;
110 
111  double dTheta = std::fabs(TMath::ATan2(std::fabs(trk->d0()),trk->z0())-2*std::atan(std::exp(-1*trk->eta())));
112  bool geometric_cut = dTheta < 1. || std::fabs(trk->z0()) < 200. ;
113 
114  bool z0_cut = trk->z0() <= 500. ;
115  bool chi2_cut = (trk->chiSquared()/ (trk->numberDoF()+AlgConsts::infinitesimal)) <= 9. ;
116  bool NSiHits_cut = nSiHits >=8 ;
117  bool NSCTHits_cut = nsct >= 7 ;
118  bool NSCTHoles_cut = nSCTHoles <= 1;
119 
120  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": z0_cut, chi2_cut, NSiHits_cut, NSCTHits_cut, NSCTHoles_cut = " <<z0_cut<<", "<<chi2_cut<<", "<<NSiHits_cut<<", "<<NSCTHits_cut<<", "<< NSCTHoles_cut );
121  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": npix, nsct, nSiHits, nSCTHoles, dTheta, z0, d0, chi2 = " <<unsigned(npix)<<", "<<unsigned(nsct)<<", "<<unsigned(nSiHits)<<", "<<unsigned(nSCTHoles)<<", "<< dTheta<<", "<< trk->z0()<<", "<< trk->d0()<<", " <<trk->chiSquared() ) ;
122 
123  const std::bitset<xAOD::NumberOfTrackRecoInfo> patternReco = trk->patternRecoInfo();
124  bool isLRT = patternReco.test(49) ;
125  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Track is LRT = " << isLRT ) ;
126  if (isLRT) { // apply all cuts to LRT tracks
127  return (z0_cut && chi2_cut && NSiHits_cut && NSCTHits_cut && NSCTHoles_cut && geometric_cut);
128  }
129  else{ // not LRT track; only apply SiHit cut
130  return NSiHits_cut ;
131  }
132  }
133 
134 
135  //____________________________________________________________________________________________________
136  void VrtSecInclusive::selectTrack( const xAOD::TrackParticle* trk ) {
137 
138  if( !m_decor_isSelected ) m_decor_isSelected = std::make_unique< SG::AuxElement::Decorator< char > >( "is_selected" + m_jp.augVerString );
139 
140  // Setup cut functions
141  if( m_trackSelectionFuncs.empty() && !m_jp.passThroughTrackSelection ) {
142 
143  // These cuts are optional. Specified by JobProperty
144  if( m_jp.do_PVvetoCut ) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_notPVassociated );
145  if( m_jp.do_d0Cut ) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_d0Cut );
146  if( m_jp.do_z0Cut ) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_z0Cut );
147  if( m_jp.do_d0errCut ) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_d0errCut );
148  if( m_jp.do_z0errCut ) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_z0errCut );
149  if (m_jp.doSelectTracksWithLRTCuts) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_LRTR3Cut );
150  //if( m_jp.do_d0signifCut ) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_d0signifCut ); // not implemented yet
151  //if( m_jp.do_z0signifCut ) m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_z0signifCut ); // not implemented yet
152 
153  // These cuts are used by default
154  m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_hitPattern );
155  m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_hitPatternTight );
156  m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_chi2Cut );
157  m_trackSelectionFuncs.emplace_back( &VrtSecInclusive::selectTrack_pTCut );
158 
159  }
160 
161  if( std::find( m_selectedTracks->begin(), m_selectedTracks->end(), trk ) != m_selectedTracks->end() ) return;
162 
163  std::vector<bool> cutBits;
164 
165  cutBits.reserve(m_trackSelectionFuncs.size());
166 for( auto func : m_trackSelectionFuncs ) cutBits.emplace_back( (this->*func)( trk ) );
167 
168  if( m_jp.FillHist ) {
169  m_hists["trkSelCuts"]->Fill( 0 );
170  for( size_t ibit = 0; ibit < cutBits.size(); ibit++) {
171  if( cutBits.at(ibit) ) {
172  m_hists["trkSelCuts"]->Fill( ibit+1 );
173  } else {
174  break;
175  }
176  }
177  }
178 
179  // Good track should not find any false bit
180  bool isGood_standard = ( std::find( cutBits.begin(), cutBits.end(), false ) == cutBits.end() );
181 
182  if( isGood_standard ) {
183 
184  // Store the selected track to the new m_selectedTracks
185  // Here we firstly need to register the empty pointer to the m_selectedTracks,
186  // then need to do deep copy after then. This is the feature of xAOD.
187 
188  int barcode=HepMC::UNDEFINED_ID; // FIXME barcode-based
189 
190  if( m_jp.doTruth ) {
191 
192  const xAOD::TruthParticle *truth = getTrkGenParticle(trk);
193 
194  if ( truth ) {
195  barcode = truth->barcode(); // FIXME barcode-based
196  }
197 
198  }
199 
200  (*m_decor_isSelected)( *trk ) = true;
201  if (m_jp.doSelectTracksFromElectrons || m_jp.doSelectIDAndGSFTracks) {
202  const xAOD::TrackParticle *id_tr;
204  if (id_tr != nullptr){
205  (*m_decor_isSelected)( *id_tr ) = true; }
206  }
207 
208  m_selectedTracks->emplace_back( trk );
209 
210  if( m_jp.FillNtuple ) m_ntupleVars->get< vector<int> >( "SelTrk_barcode" ).emplace_back(barcode); // will need this later // FIXME barcode-based
211 
212  ATH_MSG_VERBOSE( " > " << __FUNCTION__ << ": Track index " << trk->index() << " has been selected." );
213  ATH_MSG_VERBOSE( " > " << __FUNCTION__ << ": Track index " << trk->index()
214  << " parameter:"
215  << " pt = " << trk->pt()
216  << " eta = " << trk->eta()
217  << " d0 = " << trk->d0()
218  << " z0 = " << trk->z0() << "." );
219 
220  }
221 
222  }
223 
224  //____________________________________________________________________________________________________
225  StatusCode VrtSecInclusive::selectTracksInDet() {
226 
227  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": begin" );
228 
229  //--------------------------------------------------------
230  // Extract tracks from xAOD::TrackParticle container
231  //
232 
233  const xAOD::TrackParticleContainer* trackParticleContainer ( nullptr );
234  ATH_CHECK( evtStore()->retrieve( trackParticleContainer, m_jp.TrackLocation) );
235 
236  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Extracted xAOD::TrackParticle number=" << trackParticleContainer->size() );
237 
238  if( m_jp.FillNtuple )
239  m_ntupleVars->get<unsigned int>( "NumAllTrks" ) = static_cast<int>( trackParticleContainer->size() );
240 
241 
242  // Loop over tracks
243  for( const auto *trk : *trackParticleContainer ) { selectTrack( trk ); }
244 
245  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of total ID tracks = " << trackParticleContainer->size() );
246  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of selected tracks = " << m_selectedTracks->size() );
247 
248  return StatusCode::SUCCESS;
249  }
250 
251 
252  //____________________________________________________________________________________________________
253  StatusCode VrtSecInclusive::selectTracksFromMuons() {
254 
255  const xAOD::MuonContainer* muons ( nullptr );
256  ATH_CHECK( evtStore()->retrieve( muons, m_jp.MuonLocation) );
257 
258 
259  for( const auto *const muon : *muons ) {
260  const auto* trk = muon->trackParticle( xAOD::Muon::InnerDetectorTrackParticle );
261 
262  if( !trk ) continue;
263  // remove calo-tagged muons when selecting muons
264  if (m_jp.doRemoveCaloTaggedMuons) {
265  if (muon->muonType() == xAOD::Muon::CaloTagged) continue;
266  }
267  selectTrack( trk );
268 
269  }
270 
271  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of total muons = " << muons->size() );
272  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of selected tracks = " << m_selectedTracks->size() );
273 
274  return StatusCode::SUCCESS;
275  }
276 
277 
278  //____________________________________________________________________________________________________
279  StatusCode VrtSecInclusive::selectTracksFromElectrons() {
280 
281  const xAOD::ElectronContainer *electrons( nullptr );
282  ATH_CHECK( evtStore()->retrieve( electrons, m_jp.ElectronLocation ) );
283 
284  for( const auto *const electron : *electrons ) {
285  if( 0 == electron->nTrackParticles() ) continue;
286 
287  // The first track is the best-matched track
288  const auto* trk = electron->trackParticle(0);
289 
290  if( !trk ) continue;
291  selectTrack( trk );
292  }
293 
294  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of total electrons = " << electrons->size() );
295  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of selected tracks = " << m_selectedTracks->size() );
296 
297  return StatusCode::SUCCESS;
298  }
299 
300 
301  //____________________________________________________________________________________________________
302  StatusCode VrtSecInclusive::selectInDetAndGSFTracks() {
303 
304  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": begin" );
305 
306  //--------------------------------------------------------
307  // Extract tracks from xAOD::TrackParticle container
308  //
309 
310  const xAOD::TrackParticleContainer* IDtracks ( nullptr );
311  ATH_CHECK( evtStore()->retrieve( IDtracks, m_jp.TrackLocation) );
312 
313  const xAOD::ElectronContainer *electrons( nullptr );
314  ATH_CHECK( evtStore()->retrieve( electrons, m_jp.ElectronLocation ) );
315 
316  const xAOD::MuonContainer* muons ( nullptr );
317  ATH_CHECK( evtStore()->retrieve( muons, m_jp.MuonLocation) );
318 
319  std::vector<const xAOD::TrackParticle*> IDTrksFromEls;
320 
321  // Loop over electrons to select all GSF tracks
322  for( const auto *electron : *electrons ) {
323  if( 0 == electron->nTrackParticles() ) { continue; }
324  // The first track is the best-matched GSF track
325  const auto* el_trk = electron->trackParticle(0);
326  selectTrack( el_trk );
327  m_leptonicTracks->emplace_back(el_trk);
328  IDTrksFromEls.emplace_back(xAOD::EgammaHelpers::getOriginalTrackParticle(electron));
329  }
330 
331  // Loop over ID tracks to select all non-el tracks
332  for( const auto *trk : *IDtracks ) {
333  // do not select ID track if matched to an electron
334  if ( std::find(IDTrksFromEls.begin(), IDTrksFromEls.end(), trk) != IDTrksFromEls.end() ) { continue; }
335  selectTrack( trk );
336  }
337 
338  // Loop over muons to book-keep all ID tracks matched to muons
339  for (const auto *muon : *muons) {
340  if (m_jp.doRemoveCaloTaggedMuons && muon->muonType() == xAOD::Muon::CaloTagged) { continue; }
341  const auto* mu_trk = muon->trackParticle( xAOD::Muon::InnerDetectorTrackParticle );
342  if(!mu_trk) { continue; }
343  m_leptonicTracks->emplace_back(mu_trk);
344  }
345 
346  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of total ID tracks = " << IDtracks->size() );
347  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of total electrons = " << electrons->size() );
348  ATH_MSG_DEBUG( " > " << __FUNCTION__ << ": Number of selected tracks = " << m_selectedTracks->size() );
349 
350  return StatusCode::SUCCESS;
351  }
352 
353 
354 } // end of namespace VKalVrtAthena
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
VKalVrtAthena::AlgConsts::infinitesimal
constexpr double infinitesimal
Definition: Reconstruction/VKalVrt/VrtSecInclusive/VrtSecInclusive/Constants.h:19
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
xAOD::numberOfSCTSharedHits
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
Definition: TrackingPrimitives.h:272
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:77
xAOD::TrackParticle_v1::summaryValue
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
Definition: TrackParticle_v1.cxx:736
xAOD::TrackParticle_v1::z0
float z0() const
Returns the parameter.
xAOD::TrackParticle_v1::chiSquared
float chiSquared() const
Returns the of the overall track fit.
ElectronxAODHelpers.h
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
NtupleVars.h
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
VrtSecInclusive.h
VKalVrtAthena
Definition: AANT_Tools.cxx:25
VKalVrtAthena::isAssociatedToVertices
bool isAssociatedToVertices(const xAOD::TrackParticle *trk, const xAOD::VertexContainer *vertices)
Definition: Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx:34
xAOD::numberOfPixelSharedHits
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
Definition: TrackingPrimitives.h:262
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::numberOfSCTHoles
@ numberOfSCTHoles
number of SCT holes [unit8_t].
Definition: TrackingPrimitives.h:270
xAOD::TruthParticle_v1::barcode
int barcode() const
Barcode.
IDTPM::nSCTHoles
float nSCTHoles(const U &p)
Definition: TrackParametersHelper.h:375
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
HepMC::UNDEFINED_ID
constexpr int UNDEFINED_ID
Definition: MagicNumbers.h:55
xAOD::TrackParticle_v1::definingParametersCovMatrix
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
Definition: TrackParticle_v1.cxx:246
xAOD::TrackParticle_v1::patternRecoInfo
std::bitset< NumberOfTrackRecoInfo > patternRecoInfo() const
Access method for pattern recognition algorithm.
Definition: TrackParticle_v1.cxx:706
MagicNumbers.h
xAOD::EgammaHelpers::getOriginalTrackParticleFromGSF
const xAOD::TrackParticle * getOriginalTrackParticleFromGSF(const xAOD::TrackParticle *trkPar)
Helper function for getting the "Original" Track Particle (i.e before GSF) via the GSF Track Particle...
Definition: ElectronxAODHelpers.cxx:22
plotIsoValidation.el_trk
el_trk
Definition: plotIsoValidation.py:166
python.HLT.Muon.MuonRecoSequences.isLRT
def isLRT(name)
Definition: MuonRecoSequences.py:65
xAOD::EgammaParameters::electron
@ electron
Definition: EgammaEnums.h:18
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
xAOD::EgammaHelpers::getOriginalTrackParticle
const xAOD::TrackParticle * getOriginalTrackParticle(const xAOD::Electron *el)
Helper function for getting the "Original" Track Particle (i.e before GSF) via the electron.
Definition: ElectronxAODHelpers.cxx:11
xAOD::TrackParticle_v1::numberDoF
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
Tools.h
plotIsoValidation.mu_trk
mu_trk
Definition: plotIsoValidation.py:153
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
IDTPM::nSiHits
float nSiHits(const U &p)
Definition: TrackParametersHelper.h:399
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
LArGeo::ATan2
GeoGenfun::FunctionNoop ATan2(GeoGenfun::GENFUNCTION y, GeoGenfun::GENFUNCTION x)
Definition: BarrelAuxFunctions.cxx:50