CbmRoot
Loading...
Searching...
No Matches
CaGrid.cxx
Go to the documentation of this file.
1/* Copyright (C) 2017-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Maksym Zyzak [committer], Valentina Akishina */
4
7
8
9#include "CaGrid.h"
10
11#include "CaHit.h"
12
13#include <algorithm>
14#include <cstring>
15
16
17namespace cbm::algo::ca
18{
19 void Grid::BuildBins(fscal xMin, fscal xMax, fscal yMin, fscal yMax, fscal binWidthX, fscal binWidthY, fscal zRef)
20 {
21 fZref = zRef;
22
23 // make sure that min < max
24 // swap if necessary
25 // this allows to use the same configuration for different sectors
26 // where the axis orientation may be different
27
28 fMinX = std::min(xMin, xMax);
29 fMinY = std::min(yMin, yMax);
30
31 xMax = std::max(xMin, xMax);
32 yMax = std::max(yMin, yMax);
33
34 fBinWidthX = binWidthX;
35 fBinWidthY = binWidthY;
36
37 // some sanity checks
38 if (fBinWidthX < 0.001) {
39 fBinWidthX = 0.001;
40 }
41 if (fBinWidthY < 0.001) {
42 fBinWidthY = 0.001;
43 }
44
47
48 fNx = static_cast<int>(std::ceil((xMax - fMinX) / fBinWidthX));
49 fNy = static_cast<int>(std::ceil((yMax - fMinY) / fBinWidthY));
50
51 // some sanity checks
52 if (fNx < 1) fNx = 1;
53 if (fNy < 1) fNy = 1;
54
55 fN = fNx * fNy;
56
57 fEntries.clear();
58 fFirstBinEntryIndex.reset(fN + 1, 0);
59 fNofBinEntries.reset(fN + 1, 0);
60
61 fMaxRangeX = 0.;
62 fMaxRangeY = 0.;
63 fMaxRangeT = 0.;
64 fMinZ = fZref;
65 fMaxZ = fZref;
66 }
67
68
70 const Vector<unsigned char>& hitKeyFlags)
71 {
72 fFirstBinEntryIndex.reset(fN + 1, 0);
73 fNofBinEntries.reset(fN + 1, 0);
74
75 int nEntries = 0;
76 for (ca::HitIndex_t ih = 0; ih < nHits; ih++) {
77 const ca::Hit& hit = hits[hitStartIndex + ih];
78 if (!(hitKeyFlags[hit.FrontKey()] || hitKeyFlags[hit.BackKey()])) {
79 fNofBinEntries[GetBin(hit.X(), hit.Y())]++;
80 nEntries++;
81 }
82 }
83
84 fEntries.reset(nEntries);
85
86 for (int bin = 0; bin < fN; bin++) {
88 fNofBinEntries[bin] = 0;
89 }
90 fNofBinEntries[fN] = 0;
91
92 fMaxRangeX = 0.;
93 fMaxRangeY = 0.;
94 fMaxRangeT = 0.;
95 fMinZ = fZref;
96 fMaxZ = fZref;
97
98 for (ca::HitIndex_t ih = 0; ih < nHits; ih++) {
99 const ca::Hit& hit = hits[hitStartIndex + ih];
100 if (!(hitKeyFlags[hit.FrontKey()] || hitKeyFlags[hit.BackKey()])) {
101 int bin = GetBin(hit.X(), hit.Y());
102 fEntries[fFirstBinEntryIndex[bin] + fNofBinEntries[bin]].Set(hit, hitStartIndex + ih);
103 fNofBinEntries[bin]++;
104 fMaxRangeX = std::max(fMaxRangeX, hit.RangeX());
105 fMaxRangeY = std::max(fMaxRangeY, hit.RangeY());
106 fMaxRangeT = std::max(fMaxRangeT, hit.RangeT());
107 fMinZ = std::min(fMinZ, hit.Z());
108 fMaxZ = std::max(fMaxZ, hit.Z());
109 }
110 }
111 }
112
114 {
115 int nEntries = 0;
116 fMaxRangeX = 0.;
117 fMaxRangeY = 0.;
118 fMaxRangeT = 0.;
119 fMinZ = fZref;
120 fMaxZ = fZref;
121
122 for (int bin = 0; bin < fN; bin++) {
123 ca::HitIndex_t firstEntryOld = fFirstBinEntryIndex[bin];
124 fFirstBinEntryIndex[bin] = nEntries;
125 fNofBinEntries[bin] = 0;
126 for (ca::HitIndex_t i = firstEntryOld; i < fFirstBinEntryIndex[bin + 1]; i++) {
127 auto entry = fEntries[i];
128 const ca::Hit& hit = hits[entry.GetObjectId()];
129
130 if (!(hitKeyFlags[hit.FrontKey()] || hitKeyFlags[hit.BackKey()])) {
131 fEntries[nEntries] = entry;
132 nEntries++;
133 fNofBinEntries[bin]++;
134 fMaxRangeX = std::max(fMaxRangeX, entry.RangeX());
135 fMaxRangeY = std::max(fMaxRangeY, entry.RangeY());
136 fMaxRangeT = std::max(fMaxRangeT, entry.RangeT());
137 fMinZ = std::min(fMinZ, hit.Z());
138 fMaxZ = std::max(fMaxZ, hit.Z());
139 }
140 }
141 }
142 fFirstBinEntryIndex[fN] = nEntries;
143 fNofBinEntries[fN] = 0;
144 fEntries.shrink(nEntries);
145 }
146} // namespace cbm::algo::ca
A class to store hit information in a backet-sorted way on 2D grid.
A generic hit for the CA tracker (header)
static vector< vector< QAHit > > hits
fscal fMinZ
minimal Z value of the stored hits
Definition CaGrid.h:156
void StoreHits(const ca::Vector< ca::Hit > &hits, ca::HitIndex_t hitStartIndex, ca::HitIndex_t nHits, const ca::Vector< unsigned char > &hitKeyFlags)
Store objects in the grid.
Definition CaGrid.cxx:69
fscal fMinY
minimal Y value
Definition CaGrid.h:146
int fNx
N bins in X.
Definition CaGrid.h:142
ca::Vector< ca::GridEntry > fEntries
grid entries with references to the hit index in fWindowHits
Definition CaGrid.h:164
void RemoveUsedHits(const ca::Vector< ca::Hit > &hits, const ca::Vector< unsigned char > &hitKeyFlags)
Remove grid entries that correspond to the used hits.
Definition CaGrid.cxx:113
fscal fMaxZ
maximal Z value of the stored hits
Definition CaGrid.h:157
int GetBin(fscal X, fscal Y) const
Get bin index for (X,Y) point with boundary check.
Definition CaGrid.h:170
fscal fZref
reference Z value for the stored hits
Definition CaGrid.h:151
fscal fMaxRangeT
maximal entry range in T
Definition CaGrid.h:155
fscal fBinWidthX
bin width in X
Definition CaGrid.h:147
int fNy
N bins in Y.
Definition CaGrid.h:143
fscal fMaxRangeX
maximal entry range in X
Definition CaGrid.h:153
int fN
— Data members —
Definition CaGrid.h:141
fscal fBinWidthYinv
inverse bin width in Y
Definition CaGrid.h:150
fscal fMaxRangeY
maximal entry range in Y
Definition CaGrid.h:154
fscal fBinWidthY
bin width in Y
Definition CaGrid.h:148
void BuildBins(fscal xMin, fscal xMax, fscal yMin, fscal yMax, fscal binWidthX, fscal binWidthY, fscal zRef)
Build the grid.
Definition CaGrid.cxx:19
ca::Vector< ca::HitIndex_t > fNofBinEntries
number of hits in the bin
Definition CaGrid.h:162
ca::Vector< ca::HitIndex_t > fFirstBinEntryIndex
index of the first entry in the bin
Definition CaGrid.h:159
fscal fMinX
minimal X value
Definition CaGrid.h:145
fscal fBinWidthXinv
inverse bin width in X
Definition CaGrid.h:149
ca::Hit class describes a generic hit for the CA tracker
Definition CaHit.h:32
fscal Z() const
Get the Z coordinate.
Definition CaHit.h:108
HitKeyIndex_t BackKey() const
Get the back key index.
Definition CaHit.h:99
fscal RangeX() const
Get the +/- range of uncertainty of X coordinate.
Definition CaHit.h:126
fscal Y() const
Get the Y coordinate.
Definition CaHit.h:105
fscal RangeY() const
Get the +/- range of uncertainty of Y coordinate.
Definition CaHit.h:129
fscal RangeT() const
Get the +/- range of uncertainty of time.
Definition CaHit.h:132
HitKeyIndex_t FrontKey() const
Get the front key index.
Definition CaHit.h:96
fscal X() const
Get the X coordinate.
Definition CaHit.h:102
TODO: SZh 8.11.2022: add selection of parameterisation.
Definition CaBranch.h:14
kf::fscal fscal
Definition CaSimd.h:14
unsigned int HitIndex_t
Index of ca::Hit.
Definition CaHit.h:27