ATLAS Offline Software
InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/CutTrk.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Header include
9 #include <iostream>
10 //-------------------------------------------------
11 namespace InDet{
12 
13  StatusCode InDetSVWithMuonTool::CutTrk(double PInvVert,double ThetaVert,
14  double A0Vert, double ZVert, double Chi2,
15  long int PixelHits,long int SctHits,long int SharedHits, long int BLayHits)
16  const
17  {
18  double Pt = sin(ThetaVert)/std::abs(PInvVert);
19 //- Track quality
20  if(Pt < m_CutPt) return StatusCode::FAILURE;
21  if(std::abs(ZVert)*sin(ThetaVert) > m_CutZVrt) return StatusCode::FAILURE;
22  if(Chi2 > m_CutChi2) return StatusCode::FAILURE;
23  if(std::abs(A0Vert) > m_CutA0) return StatusCode::FAILURE;
24 
25 
26  if(PixelHits < m_CutPixelHits) return StatusCode::FAILURE;
27  if(SctHits < m_CutSctHits) return StatusCode::FAILURE;
28  if((PixelHits+SctHits) < m_CutSiHits) return StatusCode::FAILURE;
29  if(BLayHits < m_CutBLayHits) return StatusCode::FAILURE;
30  if(SharedHits > m_CutSharedHits) return StatusCode::FAILURE;
31 
32  return StatusCode::SUCCESS;
33  }
34 
35 
36 
37 
38 
39 //==============================================================================================================
40 // xAOD based stuff
41 //
42  void InDetSVWithMuonTool::SelGoodTrkParticle( const std::vector<const xAOD::TrackParticle*>& InpTrk,
43  const xAOD::Vertex & PrimVrt,
44  const xAOD::TrackParticle * Muon,
45  std::vector<const xAOD::TrackParticle*>& SelectedTracks)
46  const
47  {
48 
49  std::vector<const xAOD::TrackParticle*>::const_iterator i_ntrk;
50  std::vector<double> Impact,ImpactError;
51  for (i_ntrk = InpTrk.begin(); i_ntrk < InpTrk.end(); ++i_ntrk) {
52 //
53 //-- Perigee in TrackParticle
54 //
55  const Trk::Perigee mPer=(*i_ntrk)->perigeeParameters() ;
56  AmgVector(5) VectPerig = mPer.parameters();
57 
58 
59  if((*i_ntrk)->numberDoF() == 0) continue; //Protection
60  double trkChi2 = (*i_ntrk)->chiSquared() / (*i_ntrk)->numberDoF();
61 
62  double CovTrkMtx11 = (*i_ntrk)->definingParametersCovMatrix()(0,0);
63  double CovTrkMtx22 = (*i_ntrk)->definingParametersCovMatrix()(1,1);
64  double CovTrkMtx55 = (*i_ntrk)->definingParametersCovMatrix()(4,4);
65 
66 
67 
68  if ( CovTrkMtx11 > m_A0TrkErrorCut*m_A0TrkErrorCut ) continue;
69  if ( CovTrkMtx22 > m_ZTrkErrorCut*m_ZTrkErrorCut ) continue;
70  if( ConeDist(VectPerig,Muon->p4()) > m_ConeForTag ) continue;
71  if( ConeDist(VectPerig,Muon->p4()) < 0.005 ) continue; //muon itself. To protect code.
72 
73  double trkP=1./std::abs(VectPerig[4]);
74  if(trkP>10000.){
75  double trkPErr=std::sqrt(CovTrkMtx55)*trkP;
76  if(trkPErr>0.5) continue;
77  }
78 
79  uint8_t PixelHits,SctHits,BLayHits;
80  if( !((*i_ntrk)->summaryValue(PixelHits,xAOD::numberOfPixelHits)) ) continue; // Track is
81  if( !((*i_ntrk)->summaryValue( SctHits,xAOD::numberOfSCTHits)) ) continue; // definitely
82  if( SctHits<3 ) continue; // bad
83  if( !((*i_ntrk)->summaryValue(BLayHits,xAOD::numberOfInnermostPixelLayerHits))) BLayHits=0;
84  long int SharedHits = 0; //VK Should always be
85 
86  uint8_t splSCTHits,outSCTHits,splPixHits,outPixHits;
87  if( !((*i_ntrk)->summaryValue(splSCTHits,xAOD::numberOfSCTSpoiltHits))) splSCTHits=0;
88  if( !((*i_ntrk)->summaryValue(outSCTHits,xAOD::numberOfSCTOutliers))) outSCTHits=0;
89  if( !((*i_ntrk)->summaryValue(splPixHits,xAOD::numberOfPixelSpoiltHits)))splPixHits=0;
90  if( !((*i_ntrk)->summaryValue(outPixHits,xAOD::numberOfPixelOutliers))) outPixHits=0;
91 
92 
93  m_fitSvc->VKalGetImpact((*i_ntrk), PrimVrt.position(), 1, Impact, ImpactError);
94  double ImpactA0=VectPerig[0]; // Temporary
95  double ImpactZ=VectPerig[1]-PrimVrt.position().z(); // Temporary
96  ImpactA0=Impact[0];
97  ImpactZ=Impact[1];
98  if(std::abs((*i_ntrk)->eta())>2.) {
99  if(PixelHits<=3 &&
100  (splSCTHits || outSCTHits || outPixHits || splPixHits)) continue;
101  if(m_existIBL){PixelHits -=1; SctHits -=1;} // 4-layer pixel detector
102  else {PixelHits -=1;} // 3-layer pixel detector
103  }
104  if(std::abs((*i_ntrk)->eta())>1.65) SctHits -=1;
105 //----
106  StatusCode sc = CutTrk( VectPerig[4] , VectPerig[3],
107  ImpactA0 , ImpactZ, trkChi2,
108  PixelHits, SctHits, SharedHits, BLayHits); //
109  if( sc.isFailure() ) continue;
110  SelectedTracks.push_back(*i_ntrk);
111  }
112  AnalysisUtils::Sort::pT (&SelectedTracks); }
113 
114 
115 }//end namespace
InDet::InDetSVWithMuonTool::CutTrk
StatusCode CutTrk(double, double, double, double, double, long int, long int, long int, long int) const
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/CutTrk.cxx:13
xAOD::numberOfSCTSpoiltHits
@ numberOfSCTSpoiltHits
number of SCT hits with broad errors (width/sqrt(12)) [unit8_t].
Definition: TrackingPrimitives.h:274
InDetSVWithMuonTool.h
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
InDet::InDetSVWithMuonTool::SelGoodTrkParticle
void SelGoodTrkParticle(const std::vector< const xAOD::TrackParticle * > &InpTrk, const xAOD::Vertex &PrimVrt, const xAOD::TrackParticle *Muon, std::vector< const xAOD::TrackParticle * > &SelectedTracks) const
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/CutTrk.cxx:42
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::InDetSVWithMuonTool::m_fitSvc
Trk::TrkVKalVrtFitter * m_fitSvc
Definition: InDetSVWithMuonTool.h:139
InDet::InDetSVWithMuonTool::m_CutPt
double m_CutPt
Definition: InDetSVWithMuonTool.h:114
Trk::TrkVKalVrtFitter::VKalGetImpact
virtual double VKalGetImpact(const xAOD::TrackParticle *, const Amg::Vector3D &Vertex, const long int Charge, dvect &Impact, dvect &ImpactError, IVKalState &istate) const override final
Definition: VKalGetImpact.cxx:91
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
InDet::InDetSVWithMuonTool::m_CutSctHits
long int m_CutSctHits
Definition: InDetSVWithMuonTool.h:109
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
InDet::InDetSVWithMuonTool::m_CutZVrt
double m_CutZVrt
Definition: InDetSVWithMuonTool.h:115
InDet::InDetSVWithMuonTool::m_CutSiHits
long int m_CutSiHits
Definition: InDetSVWithMuonTool.h:111
TrkVKalVrtFitter.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
InDet::InDetSVWithMuonTool::m_existIBL
bool m_existIBL
Definition: InDetSVWithMuonTool.h:128
InDet::InDetSVWithMuonTool::m_CutSharedHits
long int m_CutSharedHits
Definition: InDetSVWithMuonTool.h:113
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
AnalysisUtils::Sort::pT
void pT(COLL *coll)
sort by pT
Definition: AnalysisMisc.h:468
xAOD::numberOfPixelOutliers
@ numberOfPixelOutliers
these are the pixel outliers, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:260
xAOD::numberOfPixelSpoiltHits
@ numberOfPixelSpoiltHits
number of pixel hits with broad errors (width/sqrt(12)) [unit8_t].
Definition: TrackingPrimitives.h:267
InDet::InDetSVWithMuonTool::m_CutChi2
double m_CutChi2
Definition: InDetSVWithMuonTool.h:117
InDet::InDetSVWithMuonTool::ConeDist
static double ConeDist(const AmgVector(5) &, const TLorentzVector &)
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/Utilities.cxx:54
Prompt::Def::Pt
@ Pt
Definition: VarHolder.h:76
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
xAOD::numberOfSCTOutliers
@ numberOfSCTOutliers
number of SCT outliers [unit8_t].
Definition: TrackingPrimitives.h:269
InDet::InDetSVWithMuonTool::m_A0TrkErrorCut
double m_A0TrkErrorCut
Definition: InDetSVWithMuonTool.h:123
InDet::InDetSVWithMuonTool::m_ZTrkErrorCut
double m_ZTrkErrorCut
Definition: InDetSVWithMuonTool.h:124
InDet::InDetSVWithMuonTool::m_ConeForTag
double m_ConeForTag
Definition: InDetSVWithMuonTool.h:119
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
InDet::InDetSVWithMuonTool::m_CutBLayHits
long int m_CutBLayHits
Definition: InDetSVWithMuonTool.h:112
InDet::InDetSVWithMuonTool::m_CutPixelHits
long int m_CutPixelHits
Definition: InDetSVWithMuonTool.h:110
AnalysisMisc.h
InDet::InDetSVWithMuonTool::m_CutA0
double m_CutA0
Definition: InDetSVWithMuonTool.h:116
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237