Project
Loading...
Searching...
No Matches
GPUTPCGMSectorTrack.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
14
15#ifndef GPUTPCGMSECTORTRACK_H
16#define GPUTPCGMSECTORTRACK_H
17
18#include "GPUTPCTrack.h"
19#include "GPUTPCGMTrackParam.h"
20#include "GPUCommonMath.h"
21#include "GPUO2DataTypes.h"
22
23namespace o2::gpu
24{
30class GPUTPCGMMerger;
32{
33 public:
34 GPUd() float Alpha() const { return mAlpha; }
35 GPUd() uint8_t Sector() const { return mSector; }
36 GPUd() bool CSide() const { return mSector >= 18; }
37 GPUd() int32_t NClusters() const { return mNClusters; }
38 GPUd() int32_t PrevNeighbour() const { return mNeighbour[0]; }
39 GPUd() int32_t NextNeighbour() const { return mNeighbour[1]; }
40 GPUd() int32_t Neighbour(int32_t i) const { return mNeighbour[i]; }
41 GPUd() int32_t PrevSegmentNeighbour() const { return mSegmentNeighbour[0]; }
42 GPUd() int32_t NextSegmentNeighbour() const { return mSegmentNeighbour[1]; }
43 GPUd() int32_t SegmentNeighbour(int32_t i) const { return mSegmentNeighbour[i]; }
44 GPUd() int32_t AnyNeighbour(int32_t i) const
45 {
46 return (i < 2) ? mSegmentNeighbour[i] : mNeighbour[i - 2];
47 }
48 GPUd() const GPUTPCTrack* OrigTrack() const { return mOrigTrack; }
49 GPUd() float X() const { return mParam.mX; }
50 GPUd() float Y() const { return mParam.mY; }
51 GPUd() float Z() const { return mParam.mZ; }
52 GPUd() float SinPhi() const { return mParam.mSinPhi; }
53 GPUd() float CosPhi() const { return mParam.mCosPhi; }
54 GPUd() float SecPhi() const { return mParam.mSecPhi; }
55 GPUd() float DzDs() const { return mParam.mDzDs; }
56 GPUd() float QPt() const { return mParam.mQPt; }
57 GPUd() float TOffset() const { return mTOffset; }
58
59 GPUd() int32_t LocalTrackId() const { return mLocalTrackId; }
60 GPUd() void SetLocalTrackId(int32_t v) { mLocalTrackId = v; }
61 GPUd() int32_t ExtrapolatedTrackId(int32_t n) const { return mExtrapolatedTrackIds[n]; }
62 GPUd() void SetExtrapolatedTrackId(int32_t n, int32_t v) { mExtrapolatedTrackIds[n] = v; }
63 GPUd() int32_t* ExtrapolatedTrackIds() { return mExtrapolatedTrackIds; }
64
65 GPUd() float MaxClusterT() const { return CAMath::Max(mClusterT[0], mClusterT[1]); }
66 GPUd() float MinClusterT() const { return CAMath::Min(mClusterT[0], mClusterT[1]); }
67 GPUd() float ClusterT0() const { return mClusterT[0]; }
68 GPUd() float ClusterTN() const { return mClusterT[1]; }
69 GPUd() void SetClusterT(float v1, float v2)
70 {
71 mClusterT[0] = v1;
73 }
74
76 GPUd() void SetParam2(const GPUTPCGMTrackParam& trk);
77 GPUd() void Set(const GPUTPCGMMerger* merger, const GPUTPCTrack* sectorTr, float alpha, int32_t sector);
78 GPUd() void UseParam2() { mParam = mParam2; }
79 GPUd() void SetX2(float v) { mParam2.mX = v; }
80 GPUd() float X2() const { return mParam2.mX; }
81
82 GPUd() void SetGlobalSectorTrackCov()
83 {
84 mParam.mC0 = 1;
85 mParam.mC2 = 1;
86 mParam.mC3 = 0;
87 mParam.mC5 = 1;
88 mParam.mC7 = 0;
89 mParam.mC9 = 1;
90 mParam.mC10 = 0;
91 mParam.mC12 = 0;
92 mParam.mC14 = 10;
93 }
94
95 GPUd() void SetNClusters(int32_t v) { mNClusters = v; }
96 GPUd() void SetPrevNeighbour(int32_t v) { mNeighbour[0] = v; }
97 GPUd() void SetNextNeighbour(int32_t v) { mNeighbour[1] = v; }
98 GPUd() void SetNeighbor(int32_t v, int32_t i) { mNeighbour[i] = v; }
99 GPUd() void SetPrevSegmentNeighbour(int32_t v) { mSegmentNeighbour[0] = v; }
100 GPUd() void SetNextSegmentNeighbour(int32_t v) { mSegmentNeighbour[1] = v; }
101
102 GPUd() void CopyParamFrom(const GPUTPCGMSectorTrack& t)
103 {
104 mParam.mX = t.mParam.mX;
105 mParam.mY = t.mParam.mY;
106 mParam.mZ = t.mParam.mZ;
107 mParam.mSinPhi = t.mParam.mSinPhi;
108 mParam.mDzDs = t.mParam.mDzDs;
109 mParam.mQPt = t.mParam.mQPt;
110 mParam.mCosPhi = t.mParam.mCosPhi;
111 mParam.mSecPhi = t.mParam.mSecPhi;
112 mAlpha = t.mAlpha;
113 }
114
115 GPUd() bool FilterErrors(const GPUTPCGMMerger* merger, int32_t iSector, float maxSinPhi = GPUCA_MAX_SIN_PHI, float sinPhiMargin = 0.f);
116 template <int I = 0>
117 GPUd() bool TransportToX(GPUTPCGMMerger* merger, float x, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi, bool doCov = true) const;
118 GPUd() bool TransportToXAlpha(GPUTPCGMMerger* merger, float x, float sinAlpha, float cosAlpha, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi) const;
119 GPUd() void CopyBaseTrackCov();
121 float mX, mY, mZ, mSinPhi, mDzDs, mQPt, mCosPhi, mSecPhi; // parameters
122 float mC0, mC2, mC3, mC5, mC7, mC9, mC10, mC12, mC14; // covariances
123 };
124
125 private:
126 const GPUTPCTrack* mOrigTrack; // pointer to original sector track
127 sectorTrackParam mParam; // Track parameters
128 sectorTrackParam mParam2; // Parameters at other side
129 float mTOffset; // Z offset with early transform, T offset otherwise
130 float mAlpha; // alpha angle
131 float mClusterT[2]; // Minimum maximum cluster T
132 int32_t mNClusters; // N clusters
133 int32_t mNeighbour[2]; //
134 int32_t mSegmentNeighbour[2]; //
135 int32_t mLocalTrackId; // Corrected local track id in terms of GMSectorTracks array for extrapolated tracks, UNDEFINED for local tracks!
136 int32_t mExtrapolatedTrackIds[2]; // IDs of associated extrapolated tracks
137 uint8_t mSector; // sector of this track segment
138
139 ClassDefNV(GPUTPCGMSectorTrack, 1);
140};
141} // namespace o2::gpu
142
143#endif
#define GPUCA_MAX_SIN_PHI
float float GPUTPCGMBorderTrack float bool doCov
GPUd() int32_t SegmentNeighbour(int32_t i) const
GPUd() float TOffset() const
GPUd() int32_t NClusters() const
GPUd() void SetPrevNeighbour(int32_t v)
GPUd() int32_t NextSegmentNeighbour() const
GPUd() int32_t PrevNeighbour() const
GPUd() int32_t *ExtrapolatedTrackIds()
GPUd() void SetExtrapolatedTrackId(int32_t n
GPUd() int32_t PrevSegmentNeighbour() const
GPUd() void SetNClusters(int32_t v)
GPUd() void SetClusterT(float v1
GPUd() int32_t LocalTrackId() const
float float float float GPUTPCGMBorderTrack float maxSinPhi const
GPUd() bool FilterErrors(const GPUTPCGMMerger *merger
GPUd() float MaxClusterT() const
GPUd() int32_t AnyNeighbour(int32_t i) const
GPUd() void SetNeighbor(int32_t v
GPUd() int32_t Neighbour(int32_t i) const
GPUd() void SetNextNeighbour(int32_t v)
GPUd() void SetPrevSegmentNeighbour(int32_t v)
GPUd() const GPUTPCTrack *OrigTrack() const
const GPUTPCTrack float int32_t sector
GPUd() uint8_t Sector() const
GPUd() int32_t ExtrapolatedTrackId(int32_t n) const
GPUd() int32_t NextNeighbour() const
GPUd() float ClusterTN() const
GPUd() void SetGlobalSectorTrackCov()
GPUd() void SetLocalTrackId(int32_t v)
GPUd() void SetNextSegmentNeighbour(int32_t v)
GPUd() float ClusterT0() const
GPUd() void CopyParamFrom(const GPUTPCGMSectorTrack &t)
GPUd() float MinClusterT() const
GLdouble n
Definition glcorearb.h:1982
GLfloat GLfloat GLfloat alpha
Definition glcorearb.h:279
GLint GLenum GLint x
Definition glcorearb.h:403
const GLdouble * v
Definition glcorearb.h:832
GLdouble f
Definition glcorearb.h:310
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLfloat GLfloat v1
Definition glcorearb.h:812
GLfloat GLfloat GLfloat v2
Definition glcorearb.h:813