Project
Loading...
Searching...
No Matches
ClusterLines.cxx
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
12#include <cmath>
13#include <algorithm>
15
16namespace o2
17{
18namespace its
19{
20
21Line::Line(std::array<float, 3> firstPoint, std::array<float, 3> secondPoint)
22{
23 for (int index{0}; index < 3; ++index) {
24 originPoint[index] = firstPoint.data()[index];
25 cosinesDirector[index] = secondPoint[index] - firstPoint[index];
26 }
27
28 float inverseNorm{1.f / o2::gpu::CAMath::Sqrt(cosinesDirector[0] * cosinesDirector[0] + cosinesDirector[1] * cosinesDirector[1] +
30 for (int index{0}; index < 3; ++index) {
31 cosinesDirector[index] *= inverseNorm;
32 }
33}
34
35bool Line::areParallel(const Line& firstLine, const Line& secondLine, const float precision)
36{
37 float crossProdX{firstLine.cosinesDirector[1] * secondLine.cosinesDirector[2] -
38 firstLine.cosinesDirector[2] * secondLine.cosinesDirector[1]};
39 float module{std::abs(firstLine.cosinesDirector[1] * secondLine.cosinesDirector[2]) +
40 std::abs(firstLine.cosinesDirector[2] * secondLine.cosinesDirector[1])};
41 if (std::abs(crossProdX) > precision * module) {
42 return false;
43 }
44
45 float crossProdY{-firstLine.cosinesDirector[0] * secondLine.cosinesDirector[2] +
46 firstLine.cosinesDirector[2] * secondLine.cosinesDirector[0]};
47 module = std::abs(firstLine.cosinesDirector[0] * secondLine.cosinesDirector[2]) +
48 std::abs(firstLine.cosinesDirector[2] * secondLine.cosinesDirector[0]);
49 if (std::abs(crossProdY) > precision * module) {
50 return false;
51 }
52
53 float crossProdZ = firstLine.cosinesDirector[0] * secondLine.cosinesDirector[1] -
54 firstLine.cosinesDirector[1] * secondLine.cosinesDirector[0];
55 module = std::abs(firstLine.cosinesDirector[0] * secondLine.cosinesDirector[1]) +
56 std::abs(firstLine.cosinesDirector[1] * secondLine.cosinesDirector[0]);
57 if (std::abs(crossProdZ) > precision * module) {
58 return false;
59 }
60
61 return true;
62}
63
64std::array<float, 6> Line::getDCAComponents(const Line& line, const std::array<float, 3> point)
65{
66 std::array<float, 6> components{0., 0., 0., 0., 0., 0.};
67 float cdelta{0.};
68 for (int i{0}; i < 3; ++i) {
69 cdelta -= line.cosinesDirector[i] * (line.originPoint[i] - point[i]);
70 }
71
72 components[0] = line.originPoint[0] - point[0] + line.cosinesDirector[0] * cdelta;
73 components[3] = line.originPoint[1] - point[1] + line.cosinesDirector[1] * cdelta;
74 components[5] = line.originPoint[2] - point[2] + line.cosinesDirector[2] * cdelta;
75 components[1] = o2::gpu::CAMath::Sqrt(components[0] * components[0] + components[3] * components[3]);
76 components[2] = o2::gpu::CAMath::Sqrt(components[0] * components[0] + components[5] * components[5]);
77 components[4] = o2::gpu::CAMath::Sqrt(components[3] * components[3] + components[5] * components[5]);
78
79 return components;
80}
81
82ClusterLines::ClusterLines(const int firstLabel, const Line& firstLine, const int secondLabel, const Line& secondLine,
83 const bool weight)
84
85{
86 updateROFPoll(firstLine);
87 updateROFPoll(secondLine);
88
89 mLabels.push_back(firstLabel);
90 if (secondLabel > 0) {
91 mLabels.push_back(secondLabel); // don't add info in case of beamline used
92 }
93
94 std::array<float, 3> covarianceFirst{1., 1., 1.};
95 std::array<float, 3> covarianceSecond{1., 1., 1.};
96
97 // for (int i{0}; i < 6; ++i) {
98 // mWeightMatrix[i] = firstLine.weightMatrix[i] + secondLine.weightMatrix[i];
99 // }
100
101 float determinantFirst =
102 firstLine.cosinesDirector[2] * firstLine.cosinesDirector[2] * covarianceFirst[0] * covarianceFirst[1] +
103 firstLine.cosinesDirector[1] * firstLine.cosinesDirector[1] * covarianceFirst[0] * covarianceFirst[2] +
104 firstLine.cosinesDirector[0] * firstLine.cosinesDirector[0] * covarianceFirst[1] * covarianceFirst[2];
105 float determinantSecond =
106 secondLine.cosinesDirector[2] * secondLine.cosinesDirector[2] * covarianceSecond[0] * covarianceSecond[1] +
107 secondLine.cosinesDirector[1] * secondLine.cosinesDirector[1] * covarianceSecond[0] * covarianceSecond[2] +
108 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[0] * covarianceSecond[1] * covarianceSecond[2];
109
110 mAMatrix[0] = (firstLine.cosinesDirector[2] * firstLine.cosinesDirector[2] * covarianceFirst[1] +
111 firstLine.cosinesDirector[1] * firstLine.cosinesDirector[1] * covarianceFirst[2]) /
112 determinantFirst +
113 (secondLine.cosinesDirector[2] * secondLine.cosinesDirector[2] * covarianceSecond[1] +
114 secondLine.cosinesDirector[1] * secondLine.cosinesDirector[1] * covarianceSecond[2]) /
115 determinantSecond;
116
117 mAMatrix[1] = -firstLine.cosinesDirector[0] * firstLine.cosinesDirector[1] * covarianceFirst[2] / determinantFirst -
118 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[1] * covarianceSecond[2] / determinantSecond;
119
120 mAMatrix[2] = -firstLine.cosinesDirector[0] * firstLine.cosinesDirector[2] * covarianceFirst[1] / determinantFirst -
121 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[2] * covarianceSecond[1] / determinantSecond;
122
123 mAMatrix[3] = (firstLine.cosinesDirector[2] * firstLine.cosinesDirector[2] * covarianceFirst[0] +
124 firstLine.cosinesDirector[0] * firstLine.cosinesDirector[0] * covarianceFirst[2]) /
125 determinantFirst +
126 (secondLine.cosinesDirector[2] * secondLine.cosinesDirector[2] * covarianceSecond[0] +
127 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[0] * covarianceSecond[2]) /
128 determinantSecond;
129
130 mAMatrix[4] = -firstLine.cosinesDirector[1] * firstLine.cosinesDirector[2] * covarianceFirst[0] / determinantFirst -
131 secondLine.cosinesDirector[1] * secondLine.cosinesDirector[2] * covarianceSecond[0] / determinantSecond;
132
133 mAMatrix[5] = (firstLine.cosinesDirector[1] * firstLine.cosinesDirector[1] * covarianceFirst[0] +
134 firstLine.cosinesDirector[0] * firstLine.cosinesDirector[0] * covarianceFirst[1]) /
135 determinantFirst +
136 (secondLine.cosinesDirector[1] * secondLine.cosinesDirector[1] * covarianceSecond[0] +
137 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[0] * covarianceSecond[1]) /
138 determinantSecond;
139
140 mBMatrix[0] =
141 (firstLine.cosinesDirector[1] * covarianceFirst[2] * (-firstLine.cosinesDirector[1] * firstLine.originPoint[0] + firstLine.cosinesDirector[0] * firstLine.originPoint[1]) +
142 firstLine.cosinesDirector[2] * covarianceFirst[1] * (-firstLine.cosinesDirector[2] * firstLine.originPoint[0] + firstLine.cosinesDirector[0] * firstLine.originPoint[2])) /
143 determinantFirst;
144
145 mBMatrix[0] +=
146 (secondLine.cosinesDirector[1] * covarianceSecond[2] * (-secondLine.cosinesDirector[1] * secondLine.originPoint[0] + secondLine.cosinesDirector[0] * secondLine.originPoint[1]) +
147 secondLine.cosinesDirector[2] * covarianceSecond[1] *
148 (-secondLine.cosinesDirector[2] * secondLine.originPoint[0] +
149 secondLine.cosinesDirector[0] * secondLine.originPoint[2])) /
150 determinantSecond;
151
152 mBMatrix[1] =
153 (firstLine.cosinesDirector[0] * covarianceFirst[2] * (-firstLine.cosinesDirector[0] * firstLine.originPoint[1] + firstLine.cosinesDirector[1] * firstLine.originPoint[0]) +
154 firstLine.cosinesDirector[2] * covarianceFirst[0] * (-firstLine.cosinesDirector[2] * firstLine.originPoint[1] + firstLine.cosinesDirector[1] * firstLine.originPoint[2])) /
155 determinantFirst;
156
157 mBMatrix[1] +=
158 (secondLine.cosinesDirector[0] * covarianceSecond[2] * (-secondLine.cosinesDirector[0] * secondLine.originPoint[1] + secondLine.cosinesDirector[1] * secondLine.originPoint[0]) +
159 secondLine.cosinesDirector[2] * covarianceSecond[0] *
160 (-secondLine.cosinesDirector[2] * secondLine.originPoint[1] +
161 secondLine.cosinesDirector[1] * secondLine.originPoint[2])) /
162 determinantSecond;
163
164 mBMatrix[2] =
165 (firstLine.cosinesDirector[0] * covarianceFirst[1] * (-firstLine.cosinesDirector[0] * firstLine.originPoint[2] + firstLine.cosinesDirector[2] * firstLine.originPoint[0]) +
166 firstLine.cosinesDirector[1] * covarianceFirst[0] * (-firstLine.cosinesDirector[1] * firstLine.originPoint[2] + firstLine.cosinesDirector[2] * firstLine.originPoint[1])) /
167 determinantFirst;
168
169 mBMatrix[2] +=
170 (secondLine.cosinesDirector[0] * covarianceSecond[1] * (-secondLine.cosinesDirector[0] * secondLine.originPoint[2] + secondLine.cosinesDirector[2] * secondLine.originPoint[0]) +
171 secondLine.cosinesDirector[1] * covarianceSecond[0] *
172 (-secondLine.cosinesDirector[1] * secondLine.originPoint[2] +
173 secondLine.cosinesDirector[2] * secondLine.originPoint[1])) /
174 determinantSecond;
175
176 computeClusterCentroid();
177
178 // RMS2
179 mRMS2 = Line::getDCAComponents(firstLine, mVertex);
180 const std::array<float, 6> tmpRMS2Line2 = Line::getDCAComponents(secondLine, mVertex);
181 std::transform(mRMS2.begin(), mRMS2.end(), tmpRMS2Line2.begin(), mRMS2.begin(), [&](const float a, const float b) { return a + (b - a) / mLabels.size(); });
182
183 // AvgDistance2
184 mAvgDistance2 = std::move(Line::getDistanceFromPoint(firstLine, mVertex) * Line::getDistanceFromPoint(firstLine, mVertex));
185 mAvgDistance2 += (Line::getDistanceFromPoint(secondLine, mVertex) * Line::getDistanceFromPoint(secondLine, mVertex) - mAvgDistance2) / mLabels.size();
186}
187
188ClusterLines::ClusterLines(const Line& firstLine, const Line& secondLine)
189{
190
191 std::array<float, 3> covarianceFirst{1., 1., 1.};
192 std::array<float, 3> covarianceSecond{1., 1., 1.};
193 updateROFPoll(firstLine);
194 updateROFPoll(secondLine);
195 // for (int i{0}; i < 6; ++i) {
196 // mWeightMatrix[i] = firstLine.weightMatrix[i] + secondLine.weightMatrix[i];
197 // }
198
199 float determinantFirst =
200 firstLine.cosinesDirector[2] * firstLine.cosinesDirector[2] * covarianceFirst[0] * covarianceFirst[1] +
201 firstLine.cosinesDirector[1] * firstLine.cosinesDirector[1] * covarianceFirst[0] * covarianceFirst[2] +
202 firstLine.cosinesDirector[0] * firstLine.cosinesDirector[0] * covarianceFirst[1] * covarianceFirst[2];
203 float determinantSecond =
204 secondLine.cosinesDirector[2] * secondLine.cosinesDirector[2] * covarianceSecond[0] * covarianceSecond[1] +
205 secondLine.cosinesDirector[1] * secondLine.cosinesDirector[1] * covarianceSecond[0] * covarianceSecond[2] +
206 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[0] * covarianceSecond[1] * covarianceSecond[2];
207
208 mAMatrix[0] = (firstLine.cosinesDirector[2] * firstLine.cosinesDirector[2] * covarianceFirst[1] +
209 firstLine.cosinesDirector[1] * firstLine.cosinesDirector[1] * covarianceFirst[2]) /
210 determinantFirst +
211 (secondLine.cosinesDirector[2] * secondLine.cosinesDirector[2] * covarianceSecond[1] +
212 secondLine.cosinesDirector[1] * secondLine.cosinesDirector[1] * covarianceSecond[2]) /
213 determinantSecond;
214
215 mAMatrix[1] = -firstLine.cosinesDirector[0] * firstLine.cosinesDirector[1] * covarianceFirst[2] / determinantFirst -
216 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[1] * covarianceSecond[2] / determinantSecond;
217
218 mAMatrix[2] = -firstLine.cosinesDirector[0] * firstLine.cosinesDirector[2] * covarianceFirst[1] / determinantFirst -
219 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[2] * covarianceSecond[1] / determinantSecond;
220
221 mAMatrix[3] = (firstLine.cosinesDirector[2] * firstLine.cosinesDirector[2] * covarianceFirst[0] +
222 firstLine.cosinesDirector[0] * firstLine.cosinesDirector[0] * covarianceFirst[2]) /
223 determinantFirst +
224 (secondLine.cosinesDirector[2] * secondLine.cosinesDirector[2] * covarianceSecond[0] +
225 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[0] * covarianceSecond[2]) /
226 determinantSecond;
227
228 mAMatrix[4] = -firstLine.cosinesDirector[1] * firstLine.cosinesDirector[2] * covarianceFirst[0] / determinantFirst -
229 secondLine.cosinesDirector[1] * secondLine.cosinesDirector[2] * covarianceSecond[0] / determinantSecond;
230
231 mAMatrix[5] = (firstLine.cosinesDirector[1] * firstLine.cosinesDirector[1] * covarianceFirst[0] +
232 firstLine.cosinesDirector[0] * firstLine.cosinesDirector[0] * covarianceFirst[1]) /
233 determinantFirst +
234 (secondLine.cosinesDirector[1] * secondLine.cosinesDirector[1] * covarianceSecond[0] +
235 secondLine.cosinesDirector[0] * secondLine.cosinesDirector[0] * covarianceSecond[1]) /
236 determinantSecond;
237
238 mBMatrix[0] =
239 (firstLine.cosinesDirector[1] * covarianceFirst[2] * (-firstLine.cosinesDirector[1] * firstLine.originPoint[0] + firstLine.cosinesDirector[0] * firstLine.originPoint[1]) +
240 firstLine.cosinesDirector[2] * covarianceFirst[1] * (-firstLine.cosinesDirector[2] * firstLine.originPoint[0] + firstLine.cosinesDirector[0] * firstLine.originPoint[2])) /
241 determinantFirst;
242
243 mBMatrix[0] +=
244 (secondLine.cosinesDirector[1] * covarianceSecond[2] * (-secondLine.cosinesDirector[1] * secondLine.originPoint[0] + secondLine.cosinesDirector[0] * secondLine.originPoint[1]) +
245 secondLine.cosinesDirector[2] * covarianceSecond[1] *
246 (-secondLine.cosinesDirector[2] * secondLine.originPoint[0] +
247 secondLine.cosinesDirector[0] * secondLine.originPoint[2])) /
248 determinantSecond;
249
250 mBMatrix[1] =
251 (firstLine.cosinesDirector[0] * covarianceFirst[2] * (-firstLine.cosinesDirector[0] * firstLine.originPoint[1] + firstLine.cosinesDirector[1] * firstLine.originPoint[0]) +
252 firstLine.cosinesDirector[2] * covarianceFirst[0] * (-firstLine.cosinesDirector[2] * firstLine.originPoint[1] + firstLine.cosinesDirector[1] * firstLine.originPoint[2])) /
253 determinantFirst;
254
255 mBMatrix[1] +=
256 (secondLine.cosinesDirector[0] * covarianceSecond[2] * (-secondLine.cosinesDirector[0] * secondLine.originPoint[1] + secondLine.cosinesDirector[1] * secondLine.originPoint[0]) +
257 secondLine.cosinesDirector[2] * covarianceSecond[0] *
258 (-secondLine.cosinesDirector[2] * secondLine.originPoint[1] +
259 secondLine.cosinesDirector[1] * secondLine.originPoint[2])) /
260 determinantSecond;
261
262 mBMatrix[2] =
263 (firstLine.cosinesDirector[0] * covarianceFirst[1] * (-firstLine.cosinesDirector[0] * firstLine.originPoint[2] + firstLine.cosinesDirector[2] * firstLine.originPoint[0]) +
264 firstLine.cosinesDirector[1] * covarianceFirst[0] * (-firstLine.cosinesDirector[1] * firstLine.originPoint[2] + firstLine.cosinesDirector[2] * firstLine.originPoint[1])) /
265 determinantFirst;
266
267 mBMatrix[2] +=
268 (secondLine.cosinesDirector[0] * covarianceSecond[1] * (-secondLine.cosinesDirector[0] * secondLine.originPoint[2] + secondLine.cosinesDirector[2] * secondLine.originPoint[0]) +
269 secondLine.cosinesDirector[1] * covarianceSecond[0] *
270 (-secondLine.cosinesDirector[1] * secondLine.originPoint[2] +
271 secondLine.cosinesDirector[2] * secondLine.originPoint[1])) /
272 determinantSecond;
273
274 computeClusterCentroid();
275}
276
277void ClusterLines::add(const int& lineLabel, const Line& line, const bool& weight)
278{
279 mLabels.push_back(lineLabel);
280 updateROFPoll(line);
281 std::array<float, 3> covariance{1., 1., 1.};
282
283 // for (int i{0}; i < 6; ++i) {
284 // mWeightMatrix[i] += line.weightMatrix[i];
285 // }
286 // if(weight) line->GetSigma2P0(covariance);
287
288 double determinant{line.cosinesDirector[2] * line.cosinesDirector[2] * covariance[0] * covariance[1] +
289 line.cosinesDirector[1] * line.cosinesDirector[1] * covariance[0] * covariance[2] +
290 line.cosinesDirector[0] * line.cosinesDirector[0] * covariance[1] * covariance[2]};
291
292 mAMatrix[0] += (line.cosinesDirector[2] * line.cosinesDirector[2] * covariance[1] +
293 line.cosinesDirector[1] * line.cosinesDirector[1] * covariance[2]) /
294 determinant;
295 mAMatrix[1] += -line.cosinesDirector[0] * line.cosinesDirector[1] * covariance[2] / determinant;
296 mAMatrix[2] += -line.cosinesDirector[0] * line.cosinesDirector[2] * covariance[1] / determinant;
297 mAMatrix[3] += (line.cosinesDirector[2] * line.cosinesDirector[2] * covariance[0] +
298 line.cosinesDirector[0] * line.cosinesDirector[0] * covariance[2]) /
299 determinant;
300 mAMatrix[4] += -line.cosinesDirector[1] * line.cosinesDirector[2] * covariance[0] / determinant;
301 mAMatrix[5] += (line.cosinesDirector[1] * line.cosinesDirector[1] * covariance[0] +
302 line.cosinesDirector[0] * line.cosinesDirector[0] * covariance[1]) /
303 determinant;
304
305 mBMatrix[0] += (line.cosinesDirector[1] * covariance[2] *
306 (-line.cosinesDirector[1] * line.originPoint[0] + line.cosinesDirector[0] * line.originPoint[1]) +
307 line.cosinesDirector[2] * covariance[1] *
308 (-line.cosinesDirector[2] * line.originPoint[0] + line.cosinesDirector[0] * line.originPoint[2])) /
309 determinant;
310 mBMatrix[1] += (line.cosinesDirector[0] * covariance[2] *
311 (-line.cosinesDirector[0] * line.originPoint[1] + line.cosinesDirector[1] * line.originPoint[0]) +
312 line.cosinesDirector[2] * covariance[0] *
313 (-line.cosinesDirector[2] * line.originPoint[1] + line.cosinesDirector[1] * line.originPoint[2])) /
314 determinant;
315 mBMatrix[2] += (line.cosinesDirector[0] * covariance[1] *
316 (-line.cosinesDirector[0] * line.originPoint[2] + line.cosinesDirector[2] * line.originPoint[0]) +
317 line.cosinesDirector[1] * covariance[0] *
318 (-line.cosinesDirector[1] * line.originPoint[2] + line.cosinesDirector[2] * line.originPoint[1])) /
319 determinant;
320
321 computeClusterCentroid();
322 mAvgDistance2 += (Line::getDistanceFromPoint(line, mVertex) * Line::getDistanceFromPoint(line, mVertex) - mAvgDistance2) / mLabels.size();
323}
324
325void ClusterLines::computeClusterCentroid()
326{
327
328 double determinant{mAMatrix[0] * (mAMatrix[3] * mAMatrix[5] - mAMatrix[4] * mAMatrix[4]) -
329 mAMatrix[1] * (mAMatrix[1] * mAMatrix[5] - mAMatrix[4] * mAMatrix[2]) +
330 mAMatrix[2] * (mAMatrix[1] * mAMatrix[4] - mAMatrix[2] * mAMatrix[3])};
331
332 if (determinant == 0) {
333 return;
334 }
335
336 mVertex[0] = -(mBMatrix[0] * (mAMatrix[3] * mAMatrix[5] - mAMatrix[4] * mAMatrix[4]) -
337 mAMatrix[1] * (mBMatrix[1] * mAMatrix[5] - mAMatrix[4] * mBMatrix[2]) +
338 mAMatrix[2] * (mBMatrix[1] * mAMatrix[4] - mBMatrix[2] * mAMatrix[3])) /
339 determinant;
340 mVertex[1] = -(mAMatrix[0] * (mBMatrix[1] * mAMatrix[5] - mBMatrix[2] * mAMatrix[4]) -
341 mBMatrix[0] * (mAMatrix[1] * mAMatrix[5] - mAMatrix[4] * mAMatrix[2]) +
342 mAMatrix[2] * (mAMatrix[1] * mBMatrix[2] - mAMatrix[2] * mBMatrix[1])) /
343 determinant;
344 mVertex[2] = -(mAMatrix[0] * (mAMatrix[3] * mBMatrix[2] - mBMatrix[1] * mAMatrix[4]) -
345 mAMatrix[1] * (mAMatrix[1] * mBMatrix[2] - mBMatrix[1] * mAMatrix[2]) +
346 mBMatrix[0] * (mAMatrix[1] * mAMatrix[4] - mAMatrix[2] * mAMatrix[3])) /
347 determinant;
348}
349
350bool ClusterLines::operator==(const ClusterLines& rhs) const
351{
352 bool retval{true};
353 for (auto i{0}; i < 6; ++i) {
354 retval &= this->mRMS2[i] == rhs.mRMS2[i];
355 }
356 for (auto i{0}; i < 3; ++i) {
357 retval &= this->mVertex[i] == rhs.mVertex[i];
358 }
359 if (this->mLabels.size() != rhs.mLabels.size()) {
360 retval = false;
361 } else {
362 for (size_t i{0}; i < this->mLabels.size(); ++i) {
363 retval &= this->mLabels[i] == rhs.mLabels[i];
364 }
365 }
366 return retval && this->mAvgDistance2 == rhs.mAvgDistance2;
367}
368
369GPUhdi() void ClusterLines::updateROFPoll(const Line& line)
370{
371 // option 1: Boyer-Moore voting for rof label
372 if (mROFWeight == 0) {
373 mROF = line.getMinROF();
374 mROFWeight = 1;
375 } else {
376 if (mROF == line.getMinROF()) {
377 mROFWeight++;
378 } else {
379 mROFWeight--;
380 }
381 }
382
383 // option 2
384 // if (mROF == -1) {
385 // mROF = line.getMinROF();
386 // } else {
387 // if (line.getMinROF() < mROF) {
388 // mROF = line.getMinROF();
389 // }
390 // }
391}
392
393} // namespace its
394} // namespace o2
int32_t i
GLuint index
Definition glcorearb.h:781
GLuint GLuint GLfloat weight
Definition glcorearb.h:5477
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLint GLenum GLint components
Definition glcorearb.h:5520
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
GLenum GLint GLint * precision
Definition glcorearb.h:1899
int32_t const char int32_t line
GPUhdi() Line
D const SVectorGPU< T, D > & rhs
Definition SMatrixGPU.h:193
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
float cosinesDirector[3]
static std::array< float, 6 > getDCAComponents(const Line &line, const std::array< float, 3 > point)
Line(std::array< float, 3 > firstPoint, std::array< float, 3 > secondPoint)
const float point[3]
const Cluster const Cluster *static float getDistanceFromPoint(const Line &line, const std::array< float, 3 > &point)
float originPoint[3]
static bool areParallel(const Line &, const Line &, const float precision=constants::Tolerance)