ATLAS Offline Software
Loading...
Searching...
No Matches
V0Tools.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef V0TOOLS_H
6#define V0TOOLS_H
7
9#include "GaudiKernel/ToolHandle.h"
13#include "xAODTracking/TrackParticle.h" //Full include needed for FourMom_t
14#include <span>
15
24
25namespace CLHEP{
26 class HepLorentzVector;
27}
28
29namespace Trk
30{
31 class IExtrapolator;
32
33 static const InterfaceID IID_V0Tools("V0Tools", 1, 1);
34
35 class V0Tools : public AthAlgTool
36 {
37 public:
38
42 V0Tools(const std::string& t, const std::string& n, const IInterface* p);
43
48
52 StatusCode initialize();
53
57 static const InterfaceID& interfaceID()
58 {
59 return IID_V0Tools;
60 }
61
70 double invariantMass(const xAOD::Vertex * vxCandidate, double posTrackMass, double negTrackMass) const;
71 double invariantMass(const xAOD::Vertex * vxCandidate, std::span<const double> masses) const;
72 double invariantMassError(const xAOD::Vertex * vxCandidate, double posTrackMass, double negTrackMass) const;
73 double invariantMassError(const xAOD::Vertex * vxCandidate, std::span<const double> masses) const;
74 double invariantMassProbability(const xAOD::Vertex * vxCandidate, double V0Mass, double posTrackMass, double negTrackMass) const;
75 double invariantMassProbability(const xAOD::Vertex * vxCandidate, double V0Mass, std::span<const double> masses) const;
76 double massProbability(double V0Mass, double mass, double massErr) const;
77
82 static Amg::Vector3D trackMomentum(const xAOD::Vertex * vxCandidate, unsigned int trkIndex) ;
83 static Amg::Vector3D positiveTrackMomentum(const xAOD::Vertex * vxCandidate) ;
84 static Amg::Vector3D negativeTrackMomentum(const xAOD::Vertex * vxCandidate) ;
85 static Amg::Vector3D V0Momentum(const xAOD::Vertex * vxCandidate) ;
86
91 static xAOD::TrackParticle::FourMom_t track4Momentum(const xAOD::Vertex * vxCandidate, unsigned int trkIndex, double trackMass) ;
92 static xAOD::TrackParticle::FourMom_t positiveTrack4Momentum(const xAOD::Vertex * vxCandidate, double posTrackMass) ;
93 static xAOD::TrackParticle::FourMom_t negativeTrack4Momentum(const xAOD::Vertex * vxCandidate, double negTrackMass) ;
94 static xAOD::TrackParticle::FourMom_t V04Momentum(const xAOD::Vertex * vxCandidate, double V0Mass) ;
95
99 static float ndof(const xAOD::Vertex * vxCandidate) ;
100
104 static float chisq(const xAOD::Vertex * vxCandidate) ;
105
109 double vertexProbability(const xAOD::Vertex * vxCandidate) const;
110
114 static Amg::Vector3D vtx(const xAOD::Vertex * vxCandidate) ;
115
119 static double rxy(const xAOD::Vertex * vxCandidate) ;
120
124 static double rxy(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
125
129 static double rxy(const xAOD::Vertex * vxCandidate, const Amg::Vector3D& vertex) ;
130
134 static double rxy_var(double dx, double dy, const Amg::MatrixX& cov) ;
135
139 double rxyError(const xAOD::Vertex * vxCandidate) const;
140
144 double rxyError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) const;
145
149 double rxyError(const xAOD::Vertex * vxCandidate, const Amg::Vector3D& vertex) const;
150
154 static double pT(const xAOD::Vertex * vxCandidate) ;
155
159 double pTError(const xAOD::Vertex * vxCandidate) const;
160
164 double separation(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) const;
165 double separation(const xAOD::Vertex * vxCandidate, const Amg::Vector3D& vertex) const;
166
172 static double a0xy(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
173 static double a0z(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
174
178 static double a0(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
179
183 static Amg::Vector3D pca(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
184
188 double a0xyError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) const;
189 double a0zError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) const;
190
194 double a0Error(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, bool in3D=true) const;
195
200 static double lxy(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
201
205 double lxyError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) const;
206
211 static double lxyz(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
212
216 double lxyzError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) const;
217
222 double tau(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double posTrackMass, double negTrackMass) const;
223
227 double tau(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses) const;
228
233 double tau(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double posTrackMass, double negTrackMass, double massV0) const;
234
239 double tau(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses, double massV0) const;
240
245 static double tau(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double massV0) ;
246
251 double tauError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double posTrackMass, double negTrackMass) const;
252
256 double tauError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses) const;
257
262 double tauError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double posTrackMass, double negTrackMass, double massV0) const;
263
268 double tauError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses, double massV0) const;
269
274 double tauError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double massV0) const;
275
279 Amg::MatrixX tauMassCovariance(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses) const;
280 double massTauCov(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses) const;
281
285 double tau3D(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses) const;
286
291 static double tau3D(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double massV0) ;
292
296 double tau3DError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, std::span<const double> masses) const;
297
302 double tau3DError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex, double massV0) const;
303
309 static double thetaStar(const xAOD::Vertex * vxCandidate, double mass1, double mass2) ;
310
314 static double cosThetaStar(const xAOD::Vertex * vxCandidate, double posTrackMass, double negTrackMass) ;
315 static double cosThetaStar(const CLHEP::HepLorentzVector & posTrack, const CLHEP::HepLorentzVector & negTrack) ;
316
320 //double phiStar(xAOD::Vertex * vxCandidate) const;
321 static double phiStar(const xAOD::Vertex * vxCandidate, double posTrackMass, double negTrackMass) ;
322 static double phiStar(const CLHEP::HepLorentzVector & v0, const CLHEP::HepLorentzVector & track) ;
323
327 static double cosTheta(const xAOD::Vertex * vxCandidate, const Amg::Vector3D& vertex) ;
328 static double cosTheta(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
329
333 static double cosTheta_xy(const xAOD::Vertex * vxCandidate, const Amg::Vector3D& vertex) ;
334 static double cosTheta_xy(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) ;
335
339 static float charge(const xAOD::Vertex * vxCandidate) ;
340
344 static const xAOD::TrackParticle* origTrack(const xAOD::Vertex * vxCandidate, int trkIndex) ;
345 static const xAOD::TrackParticle* positiveOrigTrack(const xAOD::Vertex * vxCandidate) ;
346 static const xAOD::TrackParticle* negativeOrigTrack(const xAOD::Vertex * vxCandidate) ;
347
351 // JRC: not possible with new EDM
352 //Rec::TrackParticle* createParticle(const ExtendedVxCandidate * vxCandidate) const;
353 //Rec::TrackParticle* createParticle(const Trk::V0Hypothesis * v0Hypothesis) const;
354
363 double invariantMassBeforeFitIP(const xAOD::Vertex * vxCandidate, std::span<const double> masses) const;
364 double invariantMassBeforeFit(const xAOD::Vertex * vxCandidate, std::span<const double> masses, const EventContext&, const Trk::IExtrapolator*) const;
365 double invariantMassBeforeFit(const xAOD::Vertex * vxCandidate, std::span<const double> masses, const Amg::Vector3D& vertex, const EventContext&, const Trk::IExtrapolator*) const;
366 double invariantMassErrorBeforeFitIP(const xAOD::Vertex * vxCandidate, std::span<const double> masses) const;
367 double invariantMassErrorBeforeFit(const xAOD::Vertex * vxCandidate, std::span<const double> masses, const EventContext& ctx, const Trk::IExtrapolator*) const;
368 double invariantMassErrorBeforeFit(const xAOD::Vertex * vxCandidate, std::span<const double> masses, const Amg::Vector3D& vertex, const EventContext& ctx, const Trk::IExtrapolator*) const;
369
370 static Amg::MatrixX convertCovMatrix(const xAOD::Vertex * vxCandidate) ;
371
372 static Amg::MatrixX makeV0Cov(const xAOD::Vertex * vxCandidate) ;
373
374 private:
375
376 double massErrorV0Fitter(const xAOD::Vertex * vxCandidate, double posTrackMass, double negTrackMass) const;
377 double massErrorV0Fitter(const xAOD::Vertex * vxCandidate, std::span<const double> masses) const;
378 double massErrorVKalVrt(const xAOD::Vertex * vxCandidate, double posTrackMass, double negTrackMass) const;
379 double massErrorVKalVrt(const xAOD::Vertex * vxCandidate, std::span<const double> masses) const;
380 double massErrorVxCandidate(const xAOD::Vertex * vxCandidate, double posTrackMass, double negTrackMass) const;
381 double massErrorVxCandidate(const xAOD::Vertex * vxCandidate, std::span<const double> masses) const;
382
383 };//end of class definitions
384
385
386}//end of namespace definitions
387
388#endif
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Interface class for the extrapolation AlgTool, it inherits from IAlgTool Detailed information about p...
static Amg::MatrixX makeV0Cov(const xAOD::Vertex *vxCandidate)
Definition V0Tools.cxx:2505
V0Tools(const std::string &t, const std::string &n, const IInterface *p)
Default constructor due to Athena interface.
Definition V0Tools.cxx:26
static double phiStar(const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass)
phiStar
Definition V0Tools.cxx:1797
static xAOD::TrackParticle::FourMom_t positiveTrack4Momentum(const xAOD::Vertex *vxCandidate, double posTrackMass)
Definition V0Tools.cxx:417
double massErrorVxCandidate(const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const
Definition V0Tools.cxx:243
double lxyzError(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const
error on lxyz
Definition V0Tools.cxx:1054
static float ndof(const xAOD::Vertex *vxCandidate)
NDoF of the vertex fit.
Definition V0Tools.cxx:447
double massErrorVKalVrt(const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const
Definition V0Tools.cxx:168
static xAOD::TrackParticle::FourMom_t negativeTrack4Momentum(const xAOD::Vertex *vxCandidate, double negTrackMass)
Definition V0Tools.cxx:427
double invariantMassProbability(const xAOD::Vertex *vxCandidate, double V0Mass, double posTrackMass, double negTrackMass) const
Definition V0Tools.cxx:318
double invariantMassBeforeFitIP(const xAOD::Vertex *vxCandidate, std::span< const double > masses) const
create neutral TrackParticle from vxCandidate
Definition V0Tools.cxx:2140
static Amg::Vector3D vtx(const xAOD::Vertex *vxCandidate)
vertex position
Definition V0Tools.cxx:477
static double cosTheta(const xAOD::Vertex *vxCandidate, const Amg::Vector3D &vertex)
cosTheta (pointing angle to an Amg::Vector3D or an xAOD::Vertex)
Definition V0Tools.cxx:1824
double separation(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const
statistical separation (Mahalanobis distance)
Definition V0Tools.cxx:635
static Amg::Vector3D negativeTrackMomentum(const xAOD::Vertex *vxCandidate)
Definition V0Tools.cxx:385
static double lxyz(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex)
projection of distance in 3D of the vertex wrt an xAOD::Vertex vertex along the momentum direction (P...
Definition V0Tools.cxx:1043
static const InterfaceID & interfaceID()
AlgTool interface methods.
Definition V0Tools.h:57
static double a0z(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex)
Definition V0Tools.cxx:673
static double cosThetaStar(const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass)
cosThetaStar
Definition V0Tools.cxx:1773
double massErrorV0Fitter(const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const
Definition V0Tools.cxx:102
double invariantMassBeforeFit(const xAOD::Vertex *vxCandidate, std::span< const double > masses, const EventContext &, const Trk::IExtrapolator *) const
Definition V0Tools.cxx:2165
double tau3DError(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const
proper time error in 3D wrt an xAOD::Vertex vertex assuming track masses
Definition V0Tools.cxx:1511
static double thetaStar(const xAOD::Vertex *vxCandidate, double mass1, double mass2)
Polarization angles in helicity frame (using positive track):
Definition V0Tools.cxx:1757
double tau3D(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const
proper time in 3D wrt an xAOD::Vertex vertex assuming track masses
Definition V0Tools.cxx:1487
double massProbability(double V0Mass, double mass, double massErr) const
Definition V0Tools.cxx:347
static const xAOD::TrackParticle * negativeOrigTrack(const xAOD::Vertex *vxCandidate)
Definition V0Tools.cxx:1888
static const xAOD::TrackParticle * positiveOrigTrack(const xAOD::Vertex *vxCandidate)
Definition V0Tools.cxx:1877
StatusCode initialize()
Standard AlgTool methods.
Definition V0Tools.cxx:34
double tau(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double posTrackMass, double negTrackMass) const
proper time wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass tau = CONST*M*lxy/pT
Definition V0Tools.cxx:1165
Amg::MatrixX tauMassCovariance(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const
mass-proper time covariance
Definition V0Tools.cxx:2524
static double lxy(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex)
projection of distance in xy of the vertex wrt an xAOD::Vertex vertex along the momentum direction (P...
Definition V0Tools.cxx:929
static Amg::Vector3D positiveTrackMomentum(const xAOD::Vertex *vxCandidate)
Definition V0Tools.cxx:373
double invariantMassError(const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const
Definition V0Tools.cxx:70
double massTauCov(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const
Definition V0Tools.cxx:2376
static double a0xy(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex)
closest distance in Z and the transverse plane of the momentum vector to an xAOD::Vertex a0xy using t...
Definition V0Tools.cxx:665
double lxyError(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const
error on lxy
Definition V0Tools.cxx:939
double a0xyError(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const
errors on a0xy and a0z
Definition V0Tools.cxx:803
double a0Error(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, bool in3D=true) const
error on a0
Definition V0Tools.cxx:808
static float charge(const xAOD::Vertex *vxCandidate)
sum of the charges of the tracks in the vertex
Definition V0Tools.cxx:1858
double invariantMassErrorBeforeFitIP(const xAOD::Vertex *vxCandidate, std::span< const double > masses) const
Definition V0Tools.cxx:2224
static double rxy_var(double dx, double dy, const Amg::MatrixX &cov)
rxy_var
Definition V0Tools.cxx:497
static xAOD::TrackParticle::FourMom_t track4Momentum(const xAOD::Vertex *vxCandidate, unsigned int trkIndex, double trackMass)
Methods, returning the refitted 4-momenta of the positive and negative tracks and the V0 for a given ...
Definition V0Tools.cxx:407
double pTError(const xAOD::Vertex *vxCandidate) const
error on the transverse momentum of the V0
Definition V0Tools.cxx:548
static const xAOD::TrackParticle * origTrack(const xAOD::Vertex *vxCandidate, int trkIndex)
pointers to original tracks
Definition V0Tools.cxx:1872
~V0Tools()
Virtual destructor.
double vertexProbability(const xAOD::Vertex *vxCandidate) const
Probability of the vertex fit.
Definition V0Tools.cxx:457
double invariantMass(const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const
Methods, returning the invariant mass, error on the invariant mass and Chi2 probability of the invari...
Definition V0Tools.cxx:40
static double rxy(const xAOD::Vertex *vxCandidate)
Rxy of the vertex.
Definition V0Tools.cxx:482
double tauError(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double posTrackMass, double negTrackMass) const
proper time error wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass tau = CONST*M*lxy...
Definition V0Tools.cxx:1220
static Amg::Vector3D pca(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex)
point of closest approach of the momentum vector to an xAOD::Vertex
Definition V0Tools.cxx:620
static double cosTheta_xy(const xAOD::Vertex *vxCandidate, const Amg::Vector3D &vertex)
cosTheta (pointing angle to an Amg::Vector3D or an xAOD::Vertex in transverse plane)
Definition V0Tools.cxx:1840
static xAOD::TrackParticle::FourMom_t V04Momentum(const xAOD::Vertex *vxCandidate, double V0Mass)
Definition V0Tools.cxx:437
double invariantMassErrorBeforeFit(const xAOD::Vertex *vxCandidate, std::span< const double > masses, const EventContext &ctx, const Trk::IExtrapolator *) const
Definition V0Tools.cxx:2291
static float chisq(const xAOD::Vertex *vxCandidate)
Chisq of the vertex fit.
Definition V0Tools.cxx:452
double rxyError(const xAOD::Vertex *vxCandidate) const
error on Rxy
Definition V0Tools.cxx:511
double a0zError(const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const
Definition V0Tools.cxx:689
static Amg::Vector3D trackMomentum(const xAOD::Vertex *vxCandidate, unsigned int trkIndex)
Methods, returning the refitted 3-momenta of the positive and negative tracks and the V0 (for more th...
Definition V0Tools.cxx:367
static double pT(const xAOD::Vertex *vxCandidate)
transverse momentum of the V0
Definition V0Tools.cxx:543
static Amg::MatrixX convertCovMatrix(const xAOD::Vertex *vxCandidate)
Definition V0Tools.cxx:2653
static Amg::Vector3D V0Momentum(const xAOD::Vertex *vxCandidate)
Definition V0Tools.cxx:397
IParticle::FourMom_t FourMom_t
Definition of the 4-momentum type.
double a0
Definition globals.cxx:27
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
static const InterfaceID IID_V0Tools("V0Tools", 1, 1)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.