Project
Loading...
Searching...
No Matches
TrackCA.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.
15
16#ifndef O2_MFT_TRACKCA_H_
17#define O2_MFT_TRACKCA_H_
18
19#include <array>
23#include "MFTTracking/Cluster.h"
24#include <fairlogger/Logger.h>
25
26namespace o2
27{
28namespace mft
29{
30
31class TrackLTF : public TrackMFTExt
32{
33 public:
34 TrackLTF() = default;
35 TrackLTF(const bool isCA) { setCA(isCA); }
36
37 TrackLTF(const TrackLTF& t) = default;
38 ~TrackLTF() = default;
39
40 const std::array<Float_t, constants::mft::LayersNumber>& getXCoordinates() const { return mX; }
41 const std::array<Float_t, constants::mft::LayersNumber>& getYCoordinates() const { return mY; }
42 const std::array<Float_t, constants::mft::LayersNumber>& getZCoordinates() const { return mZ; }
43 const std::array<Float_t, constants::mft::LayersNumber>& getSigmasX2() const { return mSigmaX2; }
44 const std::array<Float_t, constants::mft::LayersNumber>& getSigmasY2() const { return mSigmaY2; }
45 const std::array<Int_t, constants::mft::LayersNumber>& getLayers() const { return mLayer; }
46 const std::array<Int_t, constants::mft::LayersNumber>& getClustersId() const { return mClusterId; }
47 const std::array<MCCompLabel, constants::mft::LayersNumber>& getMCCompLabels() const { return mMCCompLabels; }
48 void setPoint(const Cluster& cl, const Int_t layer, const Int_t clusterId, const MCCompLabel label, const Int_t extClsIndex, const Int_t clsSize);
49
50 void sort();
51
52 private:
53 std::array<Float_t, constants::mft::LayersNumber> mX = {-25., -25., -25., -25., -25., -25., -25., -25., -25., -25.};
54 std::array<Float_t, constants::mft::LayersNumber> mY = {-25., -25., -25., -25., -25., -25., -25., -25., -25., -25.};
55 std::array<Float_t, constants::mft::LayersNumber> mZ = {-120., -120., -120., -120., -120., -120., -120., -120., -120., -120.};
56 std::array<Float_t, constants::mft::LayersNumber> mSigmaX2 = {0};
57 std::array<Float_t, constants::mft::LayersNumber> mSigmaY2 = {0};
58 std::array<Int_t, constants::mft::LayersNumber> mLayer;
59 std::array<Int_t, constants::mft::LayersNumber> mClusterId;
60 std::array<MCCompLabel, constants::mft::LayersNumber> mMCCompLabels;
61
62 ClassDefNV(TrackLTF, 11);
63};
64
65//_________________________________________________________________________________________________
66class TrackLTFL : public TrackLTF // A track model for B=0
67{
69
70 public:
71 TrackLTFL() = default;
72 TrackLTFL(const bool isCA) { setCA(isCA); }
73 TrackLTFL(const TrackLTFL& t) = default;
74 ~TrackLTFL() = default;
75
76 private:
82 SMatrix44Sym mCovariances{};
83 ClassDefNV(TrackLTFL, 0);
84};
85
86//_________________________________________________________________________________________________
87inline void TrackLTF::setPoint(const Cluster& cl, const Int_t layer, const Int_t clusterId, const MCCompLabel label, const Int_t extClsIndex, const Int_t clsSize)
88{
89 auto nPoints = getNumberOfPoints();
90 if (nPoints > 0) {
91 if (mZ[nPoints - 1] == cl.getZ()) {
92 LOG(warn) << "MFT TrackLTF: skipping setPoint (1 cluster per layer!)";
93 return;
94 }
95 }
96 if (nPoints > constants::mft::LayersNumber) {
97 LOG(warn) << "MFT TrackLTF Overflow";
98 return;
99 }
100 mX[nPoints] = cl.getX();
101 mY[nPoints] = cl.getY();
102 mZ[nPoints] = cl.getZ();
103 mSigmaX2[nPoints] = cl.sigmaX2;
104 mSigmaY2[nPoints] = cl.sigmaY2;
105 mLayer[nPoints] = layer;
106 mClusterId[nPoints] = clusterId;
107 mMCCompLabels[nPoints] = label;
108 setExternalClusterIndex(nPoints, extClsIndex);
109 setExternalClusterSize(nPoints, clsSize);
111 setNumberOfPoints(nPoints + 1);
112}
113
114//_________________________________________________________________________________________________
115inline void TrackLTF::sort()
116{
117 // Orders elements along z position
118 struct ClusterData {
119 Float_t x;
120 Float_t y;
121 Float_t z;
122 Float_t sigmaX2;
123 Float_t sigmaY2;
124 Int_t layer;
125 Int_t clusterId;
127 Int_t extClsIndex;
128 };
129 std::vector<ClusterData> points;
130
131 // Loading cluster data
132 for (Int_t point = 0; point < getNumberOfPoints(); ++point) {
133 auto& somepoint = points.emplace_back();
134 somepoint.x = mX[point];
135 somepoint.y = mY[point];
136 somepoint.z = mZ[point];
137 somepoint.sigmaX2 = mSigmaX2[point];
138 somepoint.sigmaY2 = mSigmaY2[point];
139 somepoint.layer = mLayer[point];
140 somepoint.clusterId = mClusterId[point];
141 somepoint.label = mMCCompLabels[point];
142 somepoint.extClsIndex = mExtClsIndex[point];
143 }
144
145 // Sorting cluster data
146 std::sort(points.begin(), points.end(), [](ClusterData a, ClusterData b) { return a.z > b.z; });
147
148 // Storing sorted cluster data
149 for (Int_t point = 0; point < getNumberOfPoints(); ++point) {
150 mX[point] = points[point].x;
151 mY[point] = points[point].y;
152 mZ[point] = points[point].z;
153 mSigmaX2[point] = points[point].sigmaX2;
154 mSigmaY2[point] = points[point].sigmaY2;
155 mLayer[point] = points[point].layer;
156 mClusterId[point] = points[point].clusterId;
157 mMCCompLabels[point] = points[point].label;
158 mExtClsIndex[point] = points[point].extClsIndex;
159 }
160}
161
162} // namespace mft
163
164namespace framework
165{
166
167template <typename T>
168struct is_messageable;
169template <>
170struct is_messageable<o2::mft::TrackLTF> : std::true_type {
171};
172
173template <typename T>
174struct is_messageable;
175template <>
176struct is_messageable<o2::mft::TrackLTFL> : std::true_type {
177};
178
179} // namespace framework
180} // namespace o2
181#endif /* O2_MFT_TRACKCA_H_ */
A simple structure for the MFT cluster, used by the standalone track finder.
Some constants, fixed parameters and look-up-table functions.
T getX() const
Definition BaseCluster.h:62
T getY() const
Definition BaseCluster.h:63
T getZ() const
Definition BaseCluster.h:64
TrackLTFL(const TrackLTFL &t)=default
TrackLTFL(const bool isCA)
Definition TrackCA.h:72
~TrackLTFL()=default
void setPoint(const Cluster &cl, const Int_t layer, const Int_t clusterId, const MCCompLabel label, const Int_t extClsIndex, const Int_t clsSize)
Definition TrackCA.h:87
~TrackLTF()=default
const std::array< Float_t, constants::mft::LayersNumber > & getXCoordinates() const
Definition TrackCA.h:40
const std::array< MCCompLabel, constants::mft::LayersNumber > & getMCCompLabels() const
Definition TrackCA.h:47
const std::array< Float_t, constants::mft::LayersNumber > & getSigmasY2() const
Definition TrackCA.h:44
TrackLTF(const bool isCA)
Definition TrackCA.h:35
const std::array< Float_t, constants::mft::LayersNumber > & getZCoordinates() const
Definition TrackCA.h:42
const std::array< Float_t, constants::mft::LayersNumber > & getSigmasX2() const
Definition TrackCA.h:43
const std::array< Int_t, constants::mft::LayersNumber > & getClustersId() const
Definition TrackCA.h:46
TrackLTF(const TrackLTF &t)=default
const std::array< Float_t, constants::mft::LayersNumber > & getYCoordinates() const
Definition TrackCA.h:41
TrackLTF()=default
const std::array< Int_t, constants::mft::LayersNumber > & getLayers() const
Definition TrackCA.h:45
std::array< int, MaxClusters > mExtClsIndex
External indices of associated clusters.
Definition TrackMFT.h:135
void setExternalClusterIndex(int np, int idx)
Definition TrackMFT.h:119
void setExternalClusterLayer(int np, int clsLayer)
Definition TrackMFT.h:129
void setExternalClusterSize(int np, int clsSize)
Definition TrackMFT.h:124
void setCA(Bool_t method=true)
Definition TrackMFT.h:43
const int getNumberOfPoints() const
Definition TrackMFT.h:55
const Bool_t isCA() const
Track found by CA algorithm.
Definition TrackMFT.h:44
void setNumberOfPoints(int n)
Set number of clusters.
Definition TrackMFT.h:61
GLint GLenum GLint x
Definition glcorearb.h:403
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLint y
Definition glcorearb.h:270
GLuint GLsizei const GLchar * label
Definition glcorearb.h:2519
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
constexpr Int_t LayersNumber
Definition Constants.h:37
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Float_t sigmaX2
Definition Cluster.h:48
Float_t sigmaY2
Definition Cluster.h:49
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"