Project
Loading...
Searching...
No Matches
TrackParam.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
16
17#ifndef O2_MCH_TRACKPARAM_H_
18#define O2_MCH_TRACKPARAM_H_
19
20#include <memory> // for std::unique_ptr
21#include <TMatrixD.h>
22
23#include "MCHBase/TrackBlock.h"
24
25namespace o2
26{
27namespace mch
28{
29
30struct Cluster;
31
34{
35 public:
36 TrackParam() = default;
37 TrackParam(Double_t z, const Double_t param[5]);
38 TrackParam(Double_t z, const Double_t param[5], const Double_t cov[15]);
39 ~TrackParam() = default;
40
41 TrackParam(const TrackParam& tp);
45
47 Double_t getZ() const { return mZ; }
49 void setZ(Double_t z) { mZ = z; }
51 Double_t getNonBendingCoor() const { return mParameters(0, 0); }
53 void setNonBendingCoor(Double_t nonBendingCoor) { mParameters(0, 0) = nonBendingCoor; }
55 Double_t getNonBendingSlope() const { return mParameters(1, 0); }
57 void setNonBendingSlope(Double_t nonBendingSlope) { mParameters(1, 0) = nonBendingSlope; }
59 Double_t getBendingCoor() const { return mParameters(2, 0); }
61 void setBendingCoor(Double_t bendingCoor) { mParameters(2, 0) = bendingCoor; }
63 Double_t getBendingSlope() const { return mParameters(3, 0); }
65 void setBendingSlope(Double_t bendingSlope) { mParameters(3, 0) = bendingSlope; }
67 Double_t getInverseBendingMomentum() const { return mParameters(4, 0); }
69 void setInverseBendingMomentum(Double_t inverseBendingMomentum) { mParameters(4, 0) = inverseBendingMomentum; }
71 Double_t getCharge() const { return TMath::Sign(1., mParameters(4, 0)); }
73 void setCharge(Double_t charge)
74 {
75 if (charge * mParameters(4, 0) < 0.) {
76 mParameters(4, 0) *= -1.;
77 }
78 }
79
81 const TMatrixD& getParameters() const { return mParameters; }
83 void setParameters(const TMatrixD& parameters) { mParameters = parameters; }
85 void setParameters(const Double_t parameters[5]) { mParameters.SetMatrixArray(parameters); }
87 void addParameters(const TMatrixD& parameters) { mParameters += parameters; }
88
89 Double_t px() const; // return px
90 Double_t py() const; // return py
91 Double_t pz() const; // return pz
92 Double_t p() const; // return total momentum
93
95 Bool_t hasCovariances() const { return (mCovariances) ? kTRUE : kFALSE; }
96
97 const TMatrixD& getCovariances() const;
98 void setCovariances(const TMatrixD& covariances);
99 void setCovariances(const Double_t covariances[15]);
100 void setVariances(const Double_t covariances[15]);
101 void deleteCovariances();
102
103 const TMatrixD& getPropagator() const;
104 void resetPropagator();
105 void updatePropagator(const TMatrixD& propagator);
106
107 const TMatrixD& getExtrapParameters() const;
108 void setExtrapParameters(const TMatrixD& parameters);
109
110 const TMatrixD& getExtrapCovariances() const;
111 void setExtrapCovariances(const TMatrixD& covariances);
112
113 const TMatrixD& getSmoothParameters() const;
114 void setSmoothParameters(const TMatrixD& parameters);
115
116 const TMatrixD& getSmoothCovariances() const;
117 void setSmoothCovariances(const TMatrixD& covariances);
118
120 const Cluster* getClusterPtr() const { return mClusterPtr; }
122 void setClusterPtr(const Cluster* cluster) { mClusterPtr = cluster; }
123
125 Bool_t isRemovable() const { return mRemovable; }
127 void setRemovable(Bool_t removable) { mRemovable = removable; }
128
130 Double_t getTrackChi2() const { return mTrackChi2; }
132 void setTrackChi2(Double_t chi2) { mTrackChi2 = chi2; }
134 Double_t getLocalChi2() const { return mLocalChi2; }
136 void setLocalChi2(Double_t chi2) { mLocalChi2 = chi2; }
137
139
140 Bool_t isCompatibleTrackParam(const TrackParam& trackParam, Double_t sigma2Cut, Double_t& normChi2) const;
141
142 void print() const;
143
144 void clear();
145
146 private:
147 Double_t mZ = 0.;
148
155 TMatrixD mParameters{5, 1};
156
163 mutable std::unique_ptr<TMatrixD> mCovariances{};
164
166 mutable std::unique_ptr<TMatrixD> mPropagator{};
168 mutable std::unique_ptr<TMatrixD> mExtrapParameters{};
170 mutable std::unique_ptr<TMatrixD> mExtrapCovariances{};
171
172 mutable std::unique_ptr<TMatrixD> mSmoothParameters{};
173 mutable std::unique_ptr<TMatrixD> mSmoothCovariances{};
174
175 const Cluster* mClusterPtr = nullptr;
176
177 Bool_t mRemovable = false;
178
179 Double_t mTrackChi2 = 0.;
180 Double_t mLocalChi2 = 0.;
181};
182
183} // namespace mch
184} // namespace o2
185
186#endif // O2_MCH_TRACKPARAM_H_
int16_t charge
Definition RawEventData.h:5
Definition of the MCH track parameters minimal structure.
HMPID cluster implementation.
Definition Cluster.h:27
track parameters for internal use
Definition TrackParam.h:34
Bool_t isRemovable() const
return true if the associated cluster can be removed from the track it belongs to
Definition TrackParam.h:125
const TMatrixD & getExtrapCovariances() const
const TMatrixD & getSmoothCovariances() const
Double_t getInverseBendingMomentum() const
return inverse bending momentum (GeV/c ** -1) times the charge (assumed forward motion)
Definition TrackParam.h:67
void setRemovable(Bool_t removable)
set the flag telling whether the associated cluster can be removed from the track it belongs to or no...
Definition TrackParam.h:127
void setZ(Double_t z)
set Z coordinate (cm)
Definition TrackParam.h:49
void setBendingSlope(Double_t bendingSlope)
set bending slope (cm ** -1)
Definition TrackParam.h:65
Double_t getLocalChi2() const
return the local chi2 of the associated cluster with respect to the track
Definition TrackParam.h:134
Bool_t hasCovariances() const
return kTRUE if the covariance matrix exist, kFALSE if not
Definition TrackParam.h:95
Double_t pz() const
TrackParam & operator=(const TrackParam &tp)
void setNonBendingSlope(Double_t nonBendingSlope)
set non bending slope (cm ** -1)
Definition TrackParam.h:57
Double_t getNonBendingCoor() const
return non bending coordinate (cm)
Definition TrackParam.h:51
void setTrackChi2(Double_t chi2)
set the chi2 of the track when the associated cluster was attached
Definition TrackParam.h:132
Double_t py() const
Double_t getTrackChi2() const
return the chi2 of the track when the associated cluster was attached
Definition TrackParam.h:130
Bool_t isCompatibleTrackParam(const TrackParam &trackParam, Double_t sigma2Cut, Double_t &normChi2) const
void setVariances(const Double_t covariances[15])
void setExtrapCovariances(const TMatrixD &covariances)
void setSmoothCovariances(const TMatrixD &covariances)
TrackParam & operator=(TrackParam &&)=delete
Double_t getZ() const
return Z coordinate (cm)
Definition TrackParam.h:47
void addParameters(const TMatrixD &parameters)
add track parameters
Definition TrackParam.h:87
const TMatrixD & getParameters() const
return track parameters
Definition TrackParam.h:81
void setInverseBendingMomentum(Double_t inverseBendingMomentum)
set inverse bending momentum (GeV/c ** -1) times the charge (assumed forward motion)
Definition TrackParam.h:69
Double_t getNonBendingSlope() const
return non bending slope (cm ** -1)
Definition TrackParam.h:55
void setCovariances(const TMatrixD &covariances)
void setCharge(Double_t charge)
set the charge (assumed forward motion)
Definition TrackParam.h:73
const TMatrixD & getPropagator() const
const TMatrixD & getCovariances() const
const TMatrixD & getExtrapParameters() const
void setBendingCoor(Double_t bendingCoor)
set bending coordinate (cm)
Definition TrackParam.h:61
void setLocalChi2(Double_t chi2)
set the local chi2 of the associated cluster with respect to the track
Definition TrackParam.h:136
Double_t getBendingCoor() const
return bending coordinate (cm)
Definition TrackParam.h:59
void setParameters(const Double_t parameters[5])
set track parameters from the array
Definition TrackParam.h:85
void setParameters(const TMatrixD &parameters)
set track parameters
Definition TrackParam.h:83
void setClusterPtr(const Cluster *cluster)
set pointer to associated cluster
Definition TrackParam.h:122
TrackParam(TrackParam &&)=delete
Double_t px() const
void updatePropagator(const TMatrixD &propagator)
Double_t p() const
Double_t getBendingSlope() const
return bending slope (cm ** -1)
Definition TrackParam.h:63
const TMatrixD & getSmoothParameters() const
TrackParamStruct getTrackParamStruct() const
void setSmoothParameters(const TMatrixD &parameters)
void setExtrapParameters(const TMatrixD &parameters)
const Cluster * getClusterPtr() const
get pointer to associated cluster
Definition TrackParam.h:120
Double_t getCharge() const
return the charge (assumed forward motion)
Definition TrackParam.h:71
void setNonBendingCoor(Double_t nonBendingCoor)
set non bending coordinate (cm)
Definition TrackParam.h:53
GLenum GLfloat param
Definition glcorearb.h:271
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
cluster minimal structure
Definition Cluster.h:31
track parameters minimal structure
Definition TrackBlock.h:28