ATLAS Offline Software
MuonVrtSec.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 //-------------------------------------------------
11 #include "TMath.h"
12 #include "TH1D.h"
13 //
14 #include<iostream>
15 
16 namespace InDet{
17 
18 
19  xAOD::Vertex* InDetSVWithMuonTool::MuonVrtSec(const std::vector<const xAOD::TrackParticle*>& InpTrk,
20  const xAOD::Vertex & PrimVrt,
21  const xAOD::TrackParticle * Muon,
22  std::vector<const xAOD::TrackParticle*> & ListTracksNearMuon)
23  const
24  {
25 
26  if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "MuonVrtSec() called with xAOD::TrackParticle=" <<InpTrk.size()<< endmsg;
27  std::vector<const xAOD::TrackParticle*> SelectedTracks(0);
28  ListTracksNearMuon.clear();
29 
30  if( InpTrk.empty() ) { return nullptr;} // 0,1 input track => nothing to do!
31  SelGoodTrkParticle( InpTrk, PrimVrt, Muon, SelectedTracks);
32  long int NTracks = SelectedTracks.size();
33  TLorentzVector TrkJet = TotalMom(SelectedTracks);
34  if(m_FillHist){
35  Hists& h = getHists();
36  h.m_hb_nseltrk->Fill( (double)NTracks );
37  }
38  if( NTracks < 1 ) { return nullptr;} // 0,1 selected track => nothing to do!
39 
40  if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "Number of selected tracks dR-close to muon= " <<NTracks << endmsg;
41 
42  if(m_FillHist){
43  Hists& h = getHists();
44  h.m_hb_muonPt->Fill( Muon->pt() );
45  }
46 
47 //--------------------------------------------------------------------------------------------
48 // Initial xAOD::TrackParticle list ready
49 
50  GetTrkWithMuonVrt(SelectedTracks, PrimVrt, Muon, ListTracksNearMuon);
51  int nTracksNearMuon=ListTracksNearMuon.size();
52 //
53 //--- Cleaning
54 //
55  RemoveDoubleEntries(ListTracksNearMuon);
56  AnalysisUtils::Sort::pT (&ListTracksNearMuon); //no sorting for xAOD
57  if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<" Found different xAOD tracks crossing muon="<< ListTracksNearMuon.size()<<endmsg;
58  if(ListTracksNearMuon.empty()) { return nullptr;} // Less than one track left
59 
60 //
61 //-----------------------------------------------------------------------------------------------------
62 // Secondary track list is ready
63 // Now common vertex fit
64 //
65  Amg::Vector3D FitVertex;
66  std::vector<double> ErrorMatrix;
67  std::vector< std::vector<double> > TrkAtVrt;
68  TLorentzVector Momentum;
69  std::vector<double> Impact,ImpactError;
70 
71  double Chi2 = FitCommonVrt( ListTracksNearMuon, PrimVrt, Muon, FitVertex, ErrorMatrix, Momentum, TrkAtVrt);
72  if( Chi2 < 0 && ListTracksNearMuon.size()>2 ) { // Vertex not reconstructed. Try to remove one track with biggest pt.
73  double tpmax=0; int ipmax=-1;
74  for(int it=0; it<(int)ListTracksNearMuon.size(); it++) if(tpmax<ListTracksNearMuon[it]->pt()){tpmax=ListTracksNearMuon[it]->pt(); ipmax=it;}
75  if(ipmax>=0)RemoveEntryInList(ListTracksNearMuon,ipmax);
76  Chi2 = FitCommonVrt( ListTracksNearMuon, PrimVrt, Muon, FitVertex, ErrorMatrix, Momentum, TrkAtVrt);
77  if( Chi2 < 0 && ListTracksNearMuon.size()>2 ) { // Vertex not reconstructed. Try to remove another track with biggest pt.
78  tpmax=0.; ipmax=-1;
79  for(int it=0; it<(int)ListTracksNearMuon.size(); it++) if(tpmax<ListTracksNearMuon[it]->pt()){tpmax=ListTracksNearMuon[it]->pt(); ipmax=it;}
80  if(ipmax>=0)RemoveEntryInList(ListTracksNearMuon,ipmax);
81  Chi2 = FitCommonVrt( ListTracksNearMuon, PrimVrt, Muon, FitVertex, ErrorMatrix, Momentum, TrkAtVrt);
82  }
83  }
84  if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<" FitCommonVrt result="<< Chi2<<endmsg;
85  if( Chi2 < 0) { return nullptr; } // Vertex not reconstructed
86 
87 //
88 // Saving of results
89 //
90 
91  if(m_FillHist){
92  Hists& h = getHists();
93  h.m_hb_r2dc->Fill( FitVertex.perp() );
94  h.m_hb_totmass->Fill( Momentum.M() );
95  h.m_hb_nvrt2->Fill( (double)nTracksNearMuon );
96  }
97 
98 //-------------------------------------------------------------------------------------
99 //Return xAOD::Vertex
100  xAOD::Vertex * tmpVertex=new xAOD::Vertex();
101  tmpVertex->makePrivateStore();
102  tmpVertex->setPosition(FitVertex);
103  std::vector<float> floatErrMtx; floatErrMtx.resize(ErrorMatrix.size());
104  for(int i=0; i<(int)ErrorMatrix.size(); i++) floatErrMtx[i]=ErrorMatrix[i];
105  tmpVertex->setCovariance(floatErrMtx);
106  tmpVertex->setFitQuality(Chi2, (float)(ListTracksNearMuon.size()*2.-3.));
107  xAOD::SecVtxHelper::setVertexMass (tmpVertex, Momentum.M());
108  xAOD::SecVtxHelper::setVtxNtrk (tmpVertex, nTracksNearMuon);
109  xAOD::SecVtxHelper::setEnergyFraction(tmpVertex, Momentum.E()/TrkJet.E());
110  double Signif3D; VrtVrtDist(PrimVrt, FitVertex, ErrorMatrix, Signif3D);
111  xAOD::SecVtxHelper::setVtxnormDist (tmpVertex, Signif3D);
112 
113  std::vector<Trk::VxTrackAtVertex> & tmpVTAV=tmpVertex->vxTrackAtVertex(); tmpVTAV.clear();
114  for(int ii=0; ii<(int)ListTracksNearMuon.size(); ii++) {
115  AmgSymMatrix(5) CovMtxP;
116  CovMtxP.setIdentity();
117  Trk::Perigee * tmpMeasPer = new Trk::Perigee( 0.,0., TrkAtVrt[ii][0], TrkAtVrt[ii][1], TrkAtVrt[ii][2],
118  Trk::PerigeeSurface(FitVertex), CovMtxP );
119  tmpVTAV.emplace_back( 1., tmpMeasPer );
120  ElementLink<xAOD::TrackParticleContainer> TEL; TEL.setElement( ListTracksNearMuon[ii] );
121  const xAOD::TrackParticleContainer* cont = (const xAOD::TrackParticleContainer* ) (ListTracksNearMuon[ii]->container() );
122  TEL.setStorableObject(*cont);
123  tmpVertex->addTrackAtVertex(TEL,1.);
124  }
125  return tmpVertex;
126  }
127 
128 
129 
130 
131 //
132 //-------------------------------------------------------------
133 // Template routine for global secondary vertex fitting
134 // It also inserts(!!!) muon into the list of tracks on return
135 // so that this list can be directly used for vertex saving
136 //
137 
138  double InDetSVWithMuonTool::FitCommonVrt(std::vector<const xAOD::TrackParticle*>& ListSecondTracks,
139  const xAOD::Vertex & PrimVrt,
140  const xAOD::TrackParticle * Muon,
141  Amg::Vector3D & FitVertex,
142  std::vector<double> & ErrorMatrix,
143  TLorentzVector & Momentum,
144  std::vector< std::vector<double> > & TrkAtVrt)
145  const
146  {
147  if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG) << "FitCommonVrt() called with Ntrk="<<ListSecondTracks.size()<< endmsg;
148 //preparation
149  StatusCode sc;
150  ListSecondTracks.insert(ListSecondTracks.begin(), Muon);
151  RemoveDoubleEntries(ListSecondTracks);
152  int NTracksVrt = ListSecondTracks.size();
153 
154  const double maxRecMASS=6000.;
155  long int Charge;
156  double Chi2 = 0., FitProb=0.;
157  Amg::Vector3D tmpVertex;
158  std::vector<double> Chi2PerTrk(0);
159 //
160 // Initialisation of fit
161 //
162  std::unique_ptr<Trk::IVKalState> state = m_fitSvc->makeState();
163  std::vector<double> InpMass(NTracksVrt, m_massPi);
164  m_fitSvc->setMassInputParticles( InpMass, *state ); // Use pions masses
165  sc=VKalVrtFitFastBase(ListSecondTracks,FitVertex, *state); /* Fast crude estimation */
166  if(sc.isFailure() || FitVertex.perp() > m_Rlayer2*2. ) { /* No initial estimation */
167  m_fitSvc->setApproximateVertex(PrimVrt.position().x(), /* Use as starting point */
168  PrimVrt.position().y(),
169  PrimVrt.position().z(),
170  *state);
171  } else {
172  m_fitSvc->setApproximateVertex(FitVertex.x(),FitVertex.y(),FitVertex.z(),*state); /*Use as starting point*/
173  }
175 //
176 //fit itself
177 //
178  for (int i=0; i < NTracksVrt-1; i++) {
179  sc=VKalVrtFitBase(ListSecondTracks,FitVertex, Momentum,Charge,ErrorMatrix,Chi2PerTrk,TrkAtVrt,Chi2,
180  *state, true);
181  if(sc.isFailure() || Chi2 > 1000000. ) { return -10000.;} // No fit
182  int Outlier = FindMaxAfterFirst( Chi2PerTrk);
183  FitProb=TMath::Prob( Chi2, 2*ListSecondTracks.size()-3);
184  if(ListSecondTracks.size() == 2 ) break; // Only 2 tracks left
185  if( FitProb > 0.001) {
186  if( Momentum.M() <maxRecMASS) {
187  if( Chi2PerTrk[Outlier] < m_SecTrkChi2Cut) break; // Solution found
188  } else {
189  double minM=1.e12; int minT=-1; double minChi2=1.e12;
190  for(int it=0; it<(int)ListSecondTracks.size(); it++){
191  std::vector<const xAOD::TrackParticle*> tmpList(ListSecondTracks);
192  tmpList.erase(tmpList.begin()+it);
193  sc=VKalVrtFitBase(tmpList,tmpVertex,Momentum,Charge,ErrorMatrix,Chi2PerTrk,TrkAtVrt,Chi2,*state, true);
194  if(sc.isFailure())continue;
195  if(Momentum.M()<minM && minM>maxRecMASS){minM=Momentum.M(); minT=it; minChi2=Chi2;}
196  else if(Momentum.M()<maxRecMASS && minM<maxRecMASS && Chi2<minChi2){minChi2=Chi2; minT=it;}
197  }
198  if(minT>=0)Outlier=minT;
199  }
200  }
201  RemoveEntryInList(ListSecondTracks,Outlier);
202  m_fitSvc->setApproximateVertex(FitVertex.x(),FitVertex.y(),FitVertex.z(),*state); /*Use as starting point*/
203  }
204 //--
205  if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<" SecVrt fit converged="<< ListSecondTracks.size()<<" Mass="<<Momentum.M()<<endmsg;
206 //--
207  return Chi2;
208 }
209 
210 
211 
212 
213 
214 
215 
216 //
217 //
218 //--------------------------------------------------------
219 // Routine for muon+track secondary vertices selection
220 //
221 
222  void InDetSVWithMuonTool::GetTrkWithMuonVrt(std::vector<const xAOD::TrackParticle*> & SelectedTracks,
223  const xAOD::Vertex & PrimVrt,
224  const xAOD::TrackParticle * Muon,
225  std::vector<const xAOD::TrackParticle*> & ListSecondTracks)
226  const
227  {
228  Amg::Vector3D FitVertex, vDist;
229  std::vector<double> ErrorMatrix,Chi2PerTrk,VKPerigee,CovPerigee;
230  std::vector< std::vector<double> > TrkAtVrt;
231  TLorentzVector Momentum;
232  std::vector<double> Impact,ImpactError;
233  double Chi2, Signif3D, Dist2D, MuonVrtDir;
234  long int Charge;
235 //
236  long int NTracks = (int) (SelectedTracks.size());
237  std::vector<const xAOD::TrackParticle*> TracksForFit(2,nullptr);
238 
239 //
240 // Impact parameters with sign calculations
241 //
242  std::vector<double> TrackSignif(NTracks);
243  double SignifR,SignifZ;
244  for (int i=0; i<NTracks; i++) {
245  TrackSignif[i] = m_fitSvc->VKalGetImpact(SelectedTracks[i], PrimVrt.position(), 1, Impact, ImpactError);
246  if( sin(SelectedTracks[i]->phi() - Muon->phi())*Impact[0] < 0 ){
247  Impact[0] = -std::abs(Impact[0]);
248  }
249  else{ Impact[0] = std::abs(Impact[0]); }
250  if( (SelectedTracks[i]->p4().Theta() - Muon->p4().Theta())*Impact[1] < 0 ){
251  Impact[1] = -std::abs(Impact[1]);
252  }
253  else{ Impact[1] = std::abs(Impact[1]); }
254 
255  SignifR = Impact[0]/ std::sqrt(ImpactError[0]);
256  SignifZ = Impact[1]/ std::sqrt(ImpactError[2]);
257  if(m_FillHist){
258  Hists& h = getHists();
259  h.m_hb_impactR->Fill( SignifR );
260  h.m_hb_impactZ->Fill( SignifZ );
261  h.m_hb_impact->Fill( TrackSignif[i] );
262  }
263  }
264 
265 
266  StatusCode sc;
267  ListSecondTracks.reserve(2*NTracks); // Reserve memory for sigle vertex
268 
269  Amg::Vector3D iniVrt(0.,0.,0.);
270  TracksForFit[0]= Muon;
271  for (int i=0; i<NTracks; i++) {
272  if(TrackSignif[i] < m_TrkSigCut) continue;
273  std::unique_ptr<Trk::IVKalState> state = m_fitSvc->makeState();
274  TracksForFit[1]=SelectedTracks[i];
275  sc=VKalVrtFitFastBase(TracksForFit,FitVertex,*state); /* Fast crude estimation*/
276  if( sc.isFailure() || FitVertex.perp() > m_Rlayer2*2. ) { /* No initial estimation */
277  iniVrt=PrimVrt.position();
278  } else {
279  vDist=FitVertex-PrimVrt.position();
280  MuonVrtDir = Muon->p4().Px()*vDist.x() + Muon->p4().Py()*vDist.y() + Muon->p4().Pz()*vDist.z();
281  if( MuonVrtDir>0. ) iniVrt=FitVertex; /* Good initial estimation */
282  else iniVrt=PrimVrt.position();
283  }
284  m_fitSvc->setApproximateVertex(iniVrt.x(), iniVrt.y(), iniVrt.z(), *state);
285  sc=VKalVrtFitBase(TracksForFit,FitVertex, Momentum,Charge,
286  ErrorMatrix,Chi2PerTrk,TrkAtVrt,Chi2,
287  *state, true);
288  if(sc.isFailure()) continue; /* No fit */
289  if(Chi2 > m_Sel2VrtChi2Cut) continue; /* Bad Chi2 */
290  double mass_PiPi = Momentum.M();
291  if(mass_PiPi > 6000.) continue; // can't be from B decay
292  if(m_FillHist){
293  Hists& h = getHists();
294  h.m_hb_massPiPi->Fill( mass_PiPi );
295  }
296  Dist2D=FitVertex.perp();
297  if(Dist2D > 180. ) continue; // can't be from B decay
298  VrtVrtDist(PrimVrt, FitVertex, ErrorMatrix, Signif3D);
299 //---
300  vDist=FitVertex-PrimVrt.position();
301  double vPos=(vDist.x()*Momentum.Px()+vDist.y()*Momentum.Py()+vDist.z()*Momentum.Pz())/Momentum.Rho();
302  if(vPos<0.) continue; /* Vertex is too far behind primary one*/
303  if(m_FillHist){
304  Hists& h = getHists();
305  h.m_hb_r2d->Fill( Dist2D );
306  h.m_hb_signif3D->Fill( Signif3D );
307  }
308 //
309 // Save track crossing muon
310 //
311  if(Signif3D>m_Sel2VrtSigCut) ListSecondTracks.push_back(SelectedTracks[i]);
312  }
313 
314  }
315 
316 
317 
318 
319 } //end of namespace
InDet::InDetSVWithMuonTool::m_massPi
const double m_massPi
Definition: InDetSVWithMuonTool.h:141
xAOD::Vertex_v1::setPosition
void setPosition(const Amg::Vector3D &position)
Sets the 3-position.
InDet::InDetSVWithMuonTool::RemoveEntryInList
void RemoveEntryInList(std::vector< const Trk * > &, int) const
Definition: InDetSVWithMuonTool.h:215
xAOD::Vertex_v1::setFitQuality
void setFitQuality(float chiSquared, float numberDoF)
Set the 'Fit Quality' information.
Definition: Vertex_v1.cxx:150
InDetSVWithMuonTool.h
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition: Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
InDet::InDetSVWithMuonTool::FitCommonVrt
double FitCommonVrt(std::vector< const xAOD::TrackParticle * > &ListSecondTracks, const xAOD::Vertex &PrimVrt, const xAOD::TrackParticle *Muon, Amg::Vector3D &FitVertex, std::vector< double > &ErrorMatrix, TLorentzVector &Momentum, std::vector< std::vector< double > > &TrkAtVrt) const
Definition: MuonVrtSec.cxx:138
Trk::TrkVKalVrtFitter::setRobustness
virtual void setRobustness(int, IVKalState &istate) const override final
Definition: SetFitOptions.cxx:116
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::PerigeeSurface
Definition: PerigeeSurface.h:43
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_SecTrkChi2Cut
double m_SecTrkChi2Cut
Definition: InDetSVWithMuonTool.h:118
xAOD::SecVtxHelper::setVtxNtrk
void setVtxNtrk(xAOD::Vertex *, int value)
Definition: SecVtxHelper.cxx:48
InDet::InDetSVWithMuonTool::m_fitSvc
Trk::TrkVKalVrtFitter * m_fitSvc
Definition: InDetSVWithMuonTool.h:139
InDet::InDetSVWithMuonTool::getHists
Hists & getHists() const
Definition: InDetSVWithMuonTool.cxx:196
skel.it
it
Definition: skel.GENtoEVGEN.py:423
test_pyathena.pt
pt
Definition: test_pyathena.py:11
Trk::Perigee
ParametersT< 5, Charged, PerigeeSurface > Perigee
Definition: Tracking/TrkEvent/TrkParameters/TrkParameters/TrackParameters.h:29
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
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
SecVtxHelper.h
xAOD::SecVtxHelper::setEnergyFraction
void setEnergyFraction(xAOD::Vertex *, float value)
Definition: SecVtxHelper.cxx:33
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
xAOD::Vertex_v1::setCovariance
void setCovariance(const std::vector< float > &value)
Sets the covariance matrix as a simple vector of values.
InDet::InDetSVWithMuonTool::Hists
Definition: InDetSVWithMuonTool.h:91
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
TrkVKalVrtFitter.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
xAOD::Vertex_v1::addTrackAtVertex
void addTrackAtVertex(const ElementLink< TrackParticleContainer > &tr, float weight=1.0)
Add a new track to the vertex.
Definition: Vertex_v1.cxx:314
InDet::InDetSVWithMuonTool::m_Rlayer2
double m_Rlayer2
Definition: InDetSVWithMuonTool.h:135
InDet::InDetSVWithMuonTool::m_Sel2VrtSigCut
double m_Sel2VrtSigCut
Definition: InDetSVWithMuonTool.h:121
lumiFormat.i
int i
Definition: lumiFormat.py:92
Trk::TrkVKalVrtFitter::setApproximateVertex
virtual void setApproximateVertex(double X, double Y, double Z, IVKalState &istate) const override final
Definition: SetFitOptions.cxx:108
InDet::InDetSVWithMuonTool::VrtVrtDist
static double VrtVrtDist(const xAOD::Vertex &PrimVrt, const Amg::Vector3D &SecVrt, const std::vector< double > &VrtErr, double &Signif)
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/Utilities.cxx:20
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AnalysisUtils::Sort::pT
void pT(COLL *coll)
sort by pT
Definition: AnalysisMisc.h:468
DataVector< xAOD::TrackParticle_v1 >
InDet::InDetSVWithMuonTool::m_FillHist
bool m_FillHist
Definition: InDetSVWithMuonTool.h:126
xAOD::SecVtxHelper::setVtxnormDist
void setVtxnormDist(xAOD::Vertex *, float value)
Definition: SecVtxHelper.cxx:104
InDet::InDetSVWithMuonTool::RemoveDoubleEntries
void RemoveDoubleEntries(std::vector< const Trk * > &) const
Definition: InDetSVWithMuonTool.h:223
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:172
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Muon
struct TBPatternUnitContext Muon
InDet::InDetSVWithMuonTool::m_RobustFit
long int m_RobustFit
Definition: InDetSVWithMuonTool.h:130
InDet::InDetSVWithMuonTool::m_Sel2VrtChi2Cut
double m_Sel2VrtChi2Cut
Definition: InDetSVWithMuonTool.h:120
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
InDet::InDetSVWithMuonTool::VKalVrtFitFastBase
StatusCode VKalVrtFitFastBase(const std::vector< const xAOD::TrackParticle * > &listPart, Amg::Vector3D &Vertex, Trk::IVKalState &istate) const
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/Utilities.cxx:106
DEBUG
#define DEBUG
Definition: page_access.h:11
InDet::InDetSVWithMuonTool::VKalVrtFitBase
StatusCode VKalVrtFitBase(const std::vector< const xAOD::TrackParticle * > &listPart, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, std::vector< double > &ErrorMatrix, std::vector< double > &Chi2PerTrk, std::vector< std::vector< double > > &TrkAtVrt, double &Chi2, Trk::IVKalState &istate, bool ifCovV0) const
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/Utilities.cxx:115
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::InDetSVWithMuonTool::MuonVrtSec
xAOD::Vertex * MuonVrtSec(const std::vector< const xAOD::TrackParticle * > &InpTrk, const xAOD::Vertex &PrimVrt, const xAOD::TrackParticle *Muon, std::vector< const xAOD::TrackParticle * > &ListSecondTracks) const
Definition: MuonVrtSec.cxx:19
InDet::InDetSVWithMuonTool::m_TrkSigCut
double m_TrkSigCut
Definition: InDetSVWithMuonTool.h:122
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
InDet::InDetSVWithMuonTool::GetTrkWithMuonVrt
void GetTrkWithMuonVrt(std::vector< const xAOD::TrackParticle * > &SelectedTracks, const xAOD::Vertex &PrimVrt, const xAOD::TrackParticle *Muon, std::vector< const xAOD::TrackParticle * > &ListSecondTracks) const
Definition: MuonVrtSec.cxx:222
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
xAOD::Vertex_v1::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
Definition: Vertex_v1.cxx:181
InDet::InDetSVWithMuonTool::FindMaxAfterFirst
static int FindMaxAfterFirst(std::vector< double > &Chi2PerTrk)
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/Utilities.cxx:67
OfflineHitType::Outlier
@ Outlier
xAOD::SecVtxHelper::setVertexMass
void setVertexMass(xAOD::Vertex *, float value)
Definition: SecVtxHelper.cxx:18
AnalysisMisc.h
Trk::TrkVKalVrtFitter::setMassInputParticles
virtual void setMassInputParticles(const std::vector< double > &, IVKalState &istate) const override final
Definition: SetFitOptions.cxx:187
Trk::TrkVKalVrtFitter::makeState
virtual std::unique_ptr< IVKalState > makeState(const EventContext &ctx) const override final
Definition: TrkVKalVrtFitter.cxx:118
InDet::InDetSVWithMuonTool::TotalMom
static TLorentzVector TotalMom(const std::vector< const xAOD::TrackParticle * > &InpTrk)
Definition: InnerDetector/InDetRecTools/InDetSVWithMuonTool/src/Utilities.cxx:133