Project
Loading...
Searching...
No Matches
IDCAverageGroupHelper.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
15
16#ifndef ALICEO2_IDCAVERAGEGROUPHELPER_H_
17#define ALICEO2_IDCAVERAGEGROUPHELPER_H_
18
19#include <vector>
20#include "TPCBase/Mapper.h"
24
25// forward declaration
26class TH2Poly;
27
28namespace o2::tpc
29{
30
31// forward declaration of some classes
32class RobustAverage;
33class IDCAverageGroupDraw;
34class IDCAverageGroupCRU;
35class IDCAverageGroupTPC;
36class PadRegionInfo;
37
38template <typename DataT>
39struct IDCDelta;
40
41template <class Type>
42class IDCAverageGroupHelper;
43
45template <>
46class IDCAverageGroupHelper<IDCAverageGroupCRU>
47{
48 public:
50 IDCAverageGroupHelper(IDCGroup& idcsGrouped, const std::vector<float>& weightsPad, const std::vector<float>& weightsRow, const std::vector<float>& idcsUngrouped, std::vector<RobustAverage>& robustAverage, const unsigned int cru) : mIDCsGrouped{idcsGrouped}, mWeightsPad{weightsPad}, mWeightsRow{weightsRow}, mIDCsUngrouped{idcsUngrouped}, mRobustAverage{robustAverage}, mCRU{cru} {};
51
53 unsigned int getRegion() const { return mIDCsGrouped.getRegion(); }
54
56 auto getCRU() const { return mCRU; }
57
59 int getGroupRows() const { return static_cast<int>(mIDCsGrouped.getGroupRows()); }
60
62 int getGroupPads() const { return static_cast<int>(mIDCsGrouped.getGroupPads()); }
63
65 int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow) const { return mIDCsGrouped.getOffsetForEdgePad(upad, ulrow); }
66
68 unsigned int getTotalGroupPadsSectorEdges() const { return mIDCsGrouped.getTotalGroupPadsSectorEdges(); }
69
71 int getLastRow() const { return static_cast<int>(mIDCsGrouped.getLastRow()); }
72
75 unsigned int getPadsPerRow(const unsigned int glrow) const { return mIDCsGrouped.getPadsPerRow(glrow); }
76
79 unsigned int getLastPad(const unsigned int ulrow) const { return mIDCsGrouped.getLastPad(ulrow); }
80
83 float getWeightPad(const unsigned int relPosPad) const { return mWeightsPad[relPosPad]; }
84
87 float getWeightRow(const unsigned int relPosRow) const { return mWeightsRow[relPosRow]; }
88
92 float getWeight(const unsigned int relPosRow, const unsigned int relPosPad) const { return (relPosRow > relPosPad) ? getWeightRow(relPosRow) : getWeightPad(relPosPad); }
93
96 float getUngroupedIDCVal(const unsigned int padInRegion) const { return mIDCsUngrouped[mOffsetUngrouped + padInRegion]; }
97
101 float getGroupedIDCValGlobal(unsigned int ugrow, unsigned int upad) const { return mIDCsGrouped.getValUngroupedGlobal(ugrow, upad, mIntegrationInterval); }
102
106 void addValue(const unsigned int padInRegion, const float weight);
107
110 void addValue(const unsigned int padInRegion);
111
115 void setGroupedIDC(const unsigned int rowGrouped, const unsigned int padGrouped, const bool withweights) { mIDCsGrouped(rowGrouped, padGrouped, mIntegrationInterval) = getGroupedIDC(withweights); }
116
118 float getGroupedIDC(const bool withweights) const;
119
123 void set(const unsigned int threadNum, const unsigned int integrationInterval);
124
126 unsigned int getIntegrationInterval() const { return mIntegrationInterval; }
127
130
135 void setSectorEdgeIDC(const unsigned int ulrow, const unsigned int upad) { mIDCsGrouped.setValUngrouped(ulrow, upad, mIntegrationInterval, getGroupedIDC(false)); }
136
138 EdgePadGroupingMethod getEdgePadGroupingType() const { return mIDCsGrouped.getEdgePadGroupingType(); }
139
141 unsigned int getGroupedPadsSectorEdges() const { return mIDCsGrouped.getGroupedPadsSectorEdges(); }
142
145 unsigned int getPadsInGroupSectorEdges(const unsigned indexGroup) const { return mIDCsGrouped.getPadsInGroupSectorEdges(indexGroup); }
146
147 private:
148 IDCGroup& mIDCsGrouped;
149 const std::vector<float>& mWeightsPad{};
150 const std::vector<float>& mWeightsRow{};
151 const std::vector<float>& mIDCsUngrouped{};
152 std::vector<RobustAverage>& mRobustAverage;
153 const unsigned int mCRU{};
154 unsigned int mThreadNum{};
155 unsigned int mIntegrationInterval{};
156 unsigned int mOffsetUngrouped{};
157};
158
159template <>
160class IDCAverageGroupHelper<IDCAverageGroupTPC>
161{
162 public:
163 IDCAverageGroupHelper(IDCDelta<float>& idcsGrouped, const std::array<std::vector<float>, Mapper::NREGIONS>& weightsPad, const std::array<std::vector<float>, Mapper::NREGIONS>& weightsRow, const IDCDelta<float>& idcsUngrouped, std::vector<RobustAverage>& robustAverage, const IDCGroupHelperSector& idcGroupHelperSector) : mIDCsGrouped{idcsGrouped}, mWeightsPad{weightsPad}, mWeightsRow{weightsRow}, mIDCsUngrouped{idcsUngrouped}, mRobustAverage{robustAverage}, mIDCGroupHelperSector{idcGroupHelperSector} {};
164
166 unsigned int getRegion() const { return mCRU.region(); }
167
169 auto getCRU() const { return mCRU; }
170
172 Sector getSector() const { return mCRU.sector(); }
173
175 Side getSide() const { return mCRU.side(); }
176
178 int getGroupRows() const { return static_cast<int>(mIDCGroupHelperSector.getGroupingParameter().getGroupRows(getRegion())); }
179
181 int getGroupPads() const { return static_cast<int>(mIDCGroupHelperSector.getGroupingParameter().getGroupPads(getRegion())); }
182
184 int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow) const { return mIDCGroupHelperSector.getOffsetForEdgePad(upad, ulrow, getRegion()); }
185
187 unsigned int getTotalGroupPadsSectorEdges() const { return mIDCGroupHelperSector.getGroupingParameter().getTotalGroupPadsSectorEdges(); }
188
190 int getLastRow() const { return static_cast<int>(mIDCGroupHelperSector.getLastRow(getRegion())); }
191
194 unsigned int getPadsPerRow(const unsigned int glrow) const { return mIDCGroupHelperSector.getPadsPerRow(getRegion(), glrow); }
195
198 unsigned int getLastPad(const unsigned int ulrow) const { return mIDCGroupHelperSector.getLastPad(getRegion(), ulrow); }
199
202 float getWeightPad(const unsigned int relPosPad) const { return mWeightsPad[getRegion()][relPosPad]; }
203
206 float getWeightRow(const unsigned int relPosRow) const { return mWeightsRow[getRegion()][relPosRow]; }
207
211 float getWeight(const unsigned int relPosRow, const unsigned int relPosPad) const { return (relPosRow > relPosPad) ? getWeightRow(relPosRow) : getWeightPad(relPosPad); }
212
216 float getGroupedIDCValGlobal(unsigned int urow, unsigned int upad) const;
217
219 float getUngroupedIDCVal(const unsigned int padInRegion) const;
220
222 unsigned int getIntegrationInterval() const { return mIntegrationInterval; }
223
227 void addValue(const unsigned int padInRegion, const float weight);
228
231 void addValue(const unsigned int padInRegion);
232
236 void setGroupedIDC(const unsigned int rowGrouped, const unsigned int padGrouped, const bool withweights) { setGroupedIDC(rowGrouped, padGrouped, getGroupedIDC(withweights)); }
237
239 float getGroupedIDC(const bool withweights) const;
240
242 void setThreadNum(const unsigned int threadNum) { mThreadNum = threadNum; }
243
245 void setIntegrationInterval(const unsigned int integrationInterval);
246
248 void setCRU(const CRU cru) { mCRU = cru; }
249
252
257 void setSectorEdgeIDC(const unsigned int ulrow, const unsigned int upad);
258
260 EdgePadGroupingMethod getEdgePadGroupingType() const { return mIDCGroupHelperSector.getGroupingParameter().getEdgePadGroupingType(); }
261
262 unsigned int getGroupedPadsSectorEdges() const { return mIDCGroupHelperSector.getGroupingParameter().getGroupedPadsSectorEdges(); }
263
266 unsigned int getPadsInGroupSectorEdges(const unsigned indexGroup) const { return mIDCGroupHelperSector.getGroupingParameter().getPadsInGroupSectorEdges(indexGroup); }
267
268 private:
269 IDCDelta<float>& mIDCsGrouped;
270 const std::array<std::vector<float>, Mapper::NREGIONS>& mWeightsPad{};
271 const std::array<std::vector<float>, Mapper::NREGIONS>& mWeightsRow{};
272 const IDCDelta<float>& mIDCsUngrouped;
273 std::vector<RobustAverage>& mRobustAverage;
274 const IDCGroupHelperSector& mIDCGroupHelperSector;
275 CRU mCRU{};
276 unsigned int mThreadNum{};
277 unsigned int mIntegrationInterval{};
278 unsigned int mOffsetUngrouped{};
279 unsigned int mOffsetGrouped{};
280
285 void setGroupedIDC(const unsigned int glrow, const unsigned int padGrouped, const float val);
286};
287
289template <>
290class IDCAverageGroupHelper<IDCAverageGroupDraw> : public IDCGroupHelperRegion
291{
292 public:
293 IDCAverageGroupHelper(const unsigned char groupPads, const unsigned char groupRows, const unsigned char groupLastRowsThreshold, const unsigned char groupLastPadsThreshold, const unsigned int groupNotnPadsSectorEdges, const unsigned int region, const unsigned int nPads, const PadRegionInfo& padInf, TH2Poly& poly)
294 : IDCGroupHelperRegion{groupPads, groupRows, groupLastRowsThreshold, groupLastPadsThreshold, groupNotnPadsSectorEdges, region}, mCountDraw(nPads), mPadInf{padInf}, mPoly{poly} {};
295
296 std::vector<int> mCountDraw;
298 TH2Poly& mPoly;
299 int mGroupCounter = 0;
300 int mCol = 0;
301 const std::array<int, 4> mColors{1, 2, 3, 4};
302};
303
304} // namespace o2::tpc
305
306#endif
helper class for grouping of pads and rows for one region
helper class for grouping of pads and rows for one sector
class for storing grouped IDCs
float getWeight(const unsigned int relPosRow, const unsigned int relPosPad) const
int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow) const
unsigned int getPadsPerRow(const unsigned int glrow) const
void set(const unsigned int threadNum, const unsigned int integrationInterval)
unsigned int getPadsInGroupSectorEdges(const unsigned indexGroup) const
IDCAverageGroupHelper(IDCGroup &idcsGrouped, const std::vector< float > &weightsPad, const std::vector< float > &weightsRow, const std::vector< float > &idcsUngrouped, std::vector< RobustAverage > &robustAverage, const unsigned int cru)
constructor
float getGroupedIDC(const bool withweights) const
float getGroupedIDCValGlobal(unsigned int ugrow, unsigned int upad) const
unsigned int getLastPad(const unsigned int ulrow) const
void addValue(const unsigned int padInRegion)
float getWeightPad(const unsigned int relPosPad) const
float getWeightRow(const unsigned int relPosRow) const
void setSectorEdgeIDC(const unsigned int ulrow, const unsigned int upad)
void setGroupedIDC(const unsigned int rowGrouped, const unsigned int padGrouped, const bool withweights)
float getUngroupedIDCVal(const unsigned int padInRegion) const
void clearRobustAverage()
clearing the object for averaging
void addValue(const unsigned int padInRegion, const float weight)
IDCAverageGroupHelper(const unsigned char groupPads, const unsigned char groupRows, const unsigned char groupLastRowsThreshold, const unsigned char groupLastPadsThreshold, const unsigned int groupNotnPadsSectorEdges, const unsigned int region, const unsigned int nPads, const PadRegionInfo &padInf, TH2Poly &poly)
std::vector< int > mCountDraw
counter to keep track of the already drawn pads
const PadRegionInfo & mPadInf
object for storing pad region information
TH2Poly & mPoly
TH2Poly which will be used/filled for drawing.
IDCAverageGroupHelper(IDCDelta< float > &idcsGrouped, const std::array< std::vector< float >, Mapper::NREGIONS > &weightsPad, const std::array< std::vector< float >, Mapper::NREGIONS > &weightsRow, const IDCDelta< float > &idcsUngrouped, std::vector< RobustAverage > &robustAverage, const IDCGroupHelperSector &idcGroupHelperSector)
void setIntegrationInterval(const unsigned int integrationInterval)
set integration interval for current processed region
void setGroupedIDC(const unsigned int rowGrouped, const unsigned int padGrouped, const bool withweights)
float getGroupedIDCValGlobal(unsigned int urow, unsigned int upad) const
unsigned int getPadsInGroupSectorEdges(const unsigned indexGroup) const
float getGroupedIDC(const bool withweights) const
void clearRobustAverage()
clearing the object for averaging
float getWeight(const unsigned int relPosRow, const unsigned int relPosPad) const
unsigned int getPadsPerRow(const unsigned int glrow) const
unsigned int getLastPad(const unsigned int ulrow) const
void setSectorEdgeIDC(const unsigned int ulrow, const unsigned int upad)
float getWeightRow(const unsigned int relPosRow) const
int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow) const
float getUngroupedIDCVal(const unsigned int padInRegion) const
void addValue(const unsigned int padInRegion)
void addValue(const unsigned int padInRegion, const float weight)
void setCRU(const CRU cru)
set current processed CRU
float getWeightPad(const unsigned int relPosPad) const
Helper class for accessing grouped pads for one region.
Helper class for accessing grouped pads for one sector.
Class to hold grouped IDC values for one CRU for one TF.
Definition IDCGroup.h:35
static constexpr unsigned int NREGIONS
total number of regions in one sector
Definition Mapper.h:527
GLuint GLuint GLfloat weight
Definition glcorearb.h:5477
GLuint GLfloat * val
Definition glcorearb.h:1582
Global TPC definitions and constants.
Definition SimTraits.h:167
@ IDCDelta
IDCDelta: \Delta I(r,\phi,t) = I(r,\phi,t) / ( I_0(r,\phi) * I_1(t) )
Side
TPC readout sidE.
Definition Defs.h:35
struct to access and set Delta IDCs