Project
Loading...
Searching...
No Matches
GPUTRDTrack.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 GPUTRDTRACK_H
16#define GPUTRDTRACK_H
17
18#include "GPUTRDDef.h"
19#include "GPUCommonDef.h"
20#include "GPUCommonRtypes.h"
21
23class AliHLTExternalTrackParam;
24
25namespace o2::tpc
26{
27class TrackTPC;
28} // namespace o2::tpc
29namespace o2::dataformats
30{
31class TrackTPCITS;
32class GlobalTrackID;
33} // namespace o2::dataformats
34
35//_____________________________________________________________________________
37
38namespace o2::gpu
39{
40
41template <typename T>
42class GPUTRDTrack_t : public T
43{
44 public:
50
52 GPUTRDTrack_t(const typename T::baseClass& t) = delete;
54 GPUd() GPUTRDTrack_t(const AliHLTExternalTrackParam& t);
55 GPUd() GPUTRDTrack_t(const o2::dataformats::TrackTPCITS& t);
56 GPUd() GPUTRDTrack_t(const o2::tpc::TrackTPC& t);
57 GPUd() GPUTRDTrack_t(const T& t);
58 GPUd() GPUTRDTrack_t& operator=(const GPUTRDTrack_t& t);
59
60 // attach a tracklet to this track; this overwrites the mFlags flag to true for this layer
61 GPUd() void addTracklet(int32_t iLayer, int32_t idx) { mAttachedTracklets[iLayer] = idx; }
62
63 // getters
64 GPUd() int32_t getNlayersFindable() const;
65 GPUd() int32_t getTrackletIndex(int32_t iLayer) const { return mAttachedTracklets[iLayer]; }
66 GPUd() uint32_t getRefGlobalTrackIdRaw() const { return mRefGlobalTrackId; }
67 // This method is only defined in TrackTRD.h and is intended to be used only with that TRD track type
68 GPUd() o2::dataformats::GlobalTrackID getRefGlobalTrackId() const;
69 GPUd() int16_t getCollisionId() const { return mCollisionId; }
70 GPUd() int32_t getNtracklets() const
71 {
72 // returns number of tracklets attached to this track
73 int32_t retVal = 0;
74 for (int32_t iLy = 0; iLy < kNLayers; ++iLy) {
75 if (mAttachedTracklets[iLy] >= 0) {
76 ++retVal;
77 }
78 }
79 return retVal;
80 }
81
82 GPUd() float getChi2() const { return mChi2; }
83 GPUd() float getSignal() const { return mSignal; }
84 GPUd() uint8_t getIsCrossingNeighbor() const { return mIsCrossingNeighbor; }
85 GPUd() bool getIsCrossingNeighbor(int32_t iLayer) const { return mIsCrossingNeighbor & (1 << iLayer); }
86 GPUd() bool getHasNeighbor() const { return mIsCrossingNeighbor & (1 << 6); }
87 GPUd() bool getHasPadrowCrossing() const { return mIsCrossingNeighbor & (1 << 7); }
88 GPUd() float getReducedChi2() const { return getNlayersFindable() == 0 ? mChi2 : mChi2 / getNlayersFindable(); }
89 GPUd() bool getIsStopped() const { return (mFlags >> kStopFlag) & 0x1; }
90 GPUd() bool getIsAmbiguous() const { return (mFlags >> kAmbiguousFlag) & 0x1; }
91 GPUd() bool getIsFindable(int32_t iLayer) const { return (mFlags >> iLayer) & 0x1; }
92 GPUd() int32_t getNmissingConsecLayers(int32_t iLayer) const;
93 GPUd() int32_t getIsPenaltyAdded(int32_t iLayer) const { return getIsFindable(iLayer) && getTrackletIndex(iLayer) < 0; }
94
95 // setters
96 GPUd() void setRefGlobalTrackIdRaw(uint32_t id) { mRefGlobalTrackId = id; }
97 // This method is only defined in TrackTRD.h and is intended to be used only with that TRD track type
98 GPUd() void setRefGlobalTrackId(o2::dataformats::GlobalTrackID id);
99 GPUd() void setCollisionId(int16_t id) { mCollisionId = id; }
100 GPUd() void setIsFindable(int32_t iLayer) { mFlags |= (1U << iLayer); }
101 GPUd() void setIsStopped() { mFlags |= (1U << kStopFlag); }
102 GPUd() void setIsAmbiguous() { mFlags |= (1U << kAmbiguousFlag); }
103 GPUd() void setChi2(float chi2) { mChi2 = chi2; }
104 GPUd() void setSignal(float signal) { mSignal = signal; }
105 GPUd() void setIsCrossingNeighbor(int32_t iLayer) { mIsCrossingNeighbor |= (1U << iLayer); }
106 GPUd() void setHasNeighbor() { mIsCrossingNeighbor |= (1U << 6); }
107 GPUd() void setHasPadrowCrossing() { mIsCrossingNeighbor |= (1U << 7); }
108
109 protected:
110 float mChi2; // total chi2.
111 float mSignal{-1.f}; // electron Likelihood for track
112 uint32_t mRefGlobalTrackId; // raw GlobalTrackID of the seeding track (either ITS-TPC or TPC)
113 int32_t mAttachedTracklets[kNLayers]; // indices of the tracklets attached to this track; -1 means no tracklet in that layer
114 int16_t mCollisionId; // the collision ID of the tracklets attached to this track; is used to retrieve the BC information for this track after the tracking is done
115 uint8_t mFlags; // bits 0 to 5 indicate whether track is findable in layer 0 to 5, bit 6 indicates an ambiguous track and bit 7 flags if the track is stopped in the TRD
116 uint8_t mIsCrossingNeighbor; // bits 0 to 5 indicate if a tracklet was either a neighboring tracklet (e.g. a potential split tracklet) or crossed a padrow, bit 6 indicates that a neighbor in any layer has been found and bit 7 if a padrow was crossed
117
118 private:
119 GPUd() void initialize();
120#if !defined(GPUCA_STANDALONE)
121 ClassDefNV(GPUTRDTrack_t, 4);
122#endif
123};
124
125} // namespace o2::gpu
126
127#endif // GPUTRDTRACK_H
int32_t retVal
GPUd() bool getIsStopped() const
Definition GPUTRDTrack.h:89
GPUd() bool getIsFindable(int32_t iLayer) const
Definition GPUTRDTrack.h:91
GPUd() float getChi2() const
Definition GPUTRDTrack.h:82
GPUd() void setIsCrossingNeighbor(int32_t iLayer)
GPUd() void setRefGlobalTrackIdRaw(uint32_t id)
Definition GPUTRDTrack.h:96
GPUd() void setHasNeighbor()
GPUd() void setHasPadrowCrossing()
GPUd() bool getIsAmbiguous() const
Definition GPUTRDTrack.h:90
GPUd() void setIsStopped()
int32_t mAttachedTracklets[kNLayers]
GPUd() bool getHasPadrowCrossing() const
Definition GPUTRDTrack.h:87
GPUd() float getSignal() const
Definition GPUTRDTrack.h:83
GPUd() void setSignal(float signal)
GPUd() uint32_t getRefGlobalTrackIdRaw() const
Definition GPUTRDTrack.h:66
GPUd() bool getIsCrossingNeighbor(int32_t iLayer) const
Definition GPUTRDTrack.h:85
GPUd() void setIsFindable(int32_t iLayer)
GPUd() float getReducedChi2() const
Definition GPUTRDTrack.h:88
GPUd() void setIsAmbiguous()
GPUd() int32_t getNmissingConsecLayers(int32_t iLayer) const
GPUd() uint8_t getIsCrossingNeighbor() const
Definition GPUTRDTrack.h:84
GPUd() int32_t getNlayersFindable() const
GPUd() bool getHasNeighbor() const
Definition GPUTRDTrack.h:86
GPUd() GPUTRDTrack_t()
GPUd() void setChi2(float chi2)
GPUd() int32_t getNtracklets() const
Definition GPUTRDTrack.h:70
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint id
Definition glcorearb.h:650
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
Global TPC definitions and constants.
Definition SimTraits.h:167
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...