16#ifndef ALICEO2_IDCAVERAGEGROUPHELPER_H_
17#define ALICEO2_IDCAVERAGEGROUPHELPER_H_
33class IDCAverageGroupDraw;
34class IDCAverageGroupCRU;
35class IDCAverageGroupTPC;
38template <
typename DataT>
42class IDCAverageGroupHelper;
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} {};
53 unsigned int getRegion()
const {
return mIDCsGrouped.getRegion(); }
59 int getGroupRows()
const {
return static_cast<int>(mIDCsGrouped.getGroupRows()); }
62 int getGroupPads()
const {
return static_cast<int>(mIDCsGrouped.getGroupPads()); }
65 int getOffsetForEdgePad(
const unsigned int upad,
const unsigned int ulrow)
const {
return mIDCsGrouped.getOffsetForEdgePad(upad, ulrow); }
71 int getLastRow()
const {
return static_cast<int>(mIDCsGrouped.getLastRow()); }
75 unsigned int getPadsPerRow(
const unsigned int glrow)
const {
return mIDCsGrouped.getPadsPerRow(glrow); }
79 unsigned int getLastPad(
const unsigned int ulrow)
const {
return mIDCsGrouped.getLastPad(ulrow); }
83 float getWeightPad(
const unsigned int relPosPad)
const {
return mWeightsPad[relPosPad]; }
87 float getWeightRow(
const unsigned int relPosRow)
const {
return mWeightsRow[relPosRow]; }
92 float getWeight(
const unsigned int relPosRow,
const unsigned int relPosPad)
const {
return (relPosRow > relPosPad) ? getWeightRow(relPosRow) : getWeightPad(relPosPad); }
96 float getUngroupedIDCVal(
const unsigned int padInRegion)
const {
return mIDCsUngrouped[mOffsetUngrouped + padInRegion]; }
101 float getGroupedIDCValGlobal(
unsigned int ugrow,
unsigned int upad)
const {
return mIDCsGrouped.getValUngroupedGlobal(ugrow, upad, mIntegrationInterval); }
115 void setGroupedIDC(
const unsigned int rowGrouped,
const unsigned int padGrouped,
const bool withweights) { mIDCsGrouped(rowGrouped, padGrouped, mIntegrationInterval) = getGroupedIDC(withweights); }
123 void set(
const unsigned int threadNum,
const unsigned int integrationInterval);
135 void setSectorEdgeIDC(
const unsigned int ulrow,
const unsigned int upad) { mIDCsGrouped.setValUngrouped(ulrow, upad, mIntegrationInterval, getGroupedIDC(
false)); }
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{};
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} {};
166 unsigned int getRegion()
const {
return mCRU.region(); }
178 int getGroupRows()
const {
return static_cast<int>(mIDCGroupHelperSector.getGroupingParameter().getGroupRows(getRegion())); }
181 int getGroupPads()
const {
return static_cast<int>(mIDCGroupHelperSector.getGroupingParameter().getGroupPads(getRegion())); }
184 int getOffsetForEdgePad(
const unsigned int upad,
const unsigned int ulrow)
const {
return mIDCGroupHelperSector.getOffsetForEdgePad(upad, ulrow, getRegion()); }
190 int getLastRow()
const {
return static_cast<int>(mIDCGroupHelperSector.getLastRow(getRegion())); }
194 unsigned int getPadsPerRow(
const unsigned int glrow)
const {
return mIDCGroupHelperSector.getPadsPerRow(getRegion(), glrow); }
198 unsigned int getLastPad(
const unsigned int ulrow)
const {
return mIDCGroupHelperSector.getLastPad(getRegion(), ulrow); }
202 float getWeightPad(
const unsigned int relPosPad)
const {
return mWeightsPad[getRegion()][relPosPad]; }
206 float getWeightRow(
const unsigned int relPosRow)
const {
return mWeightsRow[getRegion()][relPosRow]; }
211 float getWeight(
const unsigned int relPosRow,
const unsigned int relPosPad)
const {
return (relPosRow > relPosPad) ? getWeightRow(relPosRow) : getWeightPad(relPosPad); }
236 void setGroupedIDC(
const unsigned int rowGrouped,
const unsigned int padGrouped,
const bool withweights) {
setGroupedIDC(rowGrouped, padGrouped, getGroupedIDC(withweights)); }
242 void setThreadNum(
const unsigned int threadNum) { mThreadNum = threadNum; }
266 unsigned int getPadsInGroupSectorEdges(
const unsigned indexGroup)
const {
return mIDCGroupHelperSector.getGroupingParameter().getPadsInGroupSectorEdges(indexGroup); }
272 const IDCDelta<float>& mIDCsUngrouped;
273 std::vector<RobustAverage>& mRobustAverage;
274 const IDCGroupHelperSector& mIDCGroupHelperSector;
276 unsigned int mThreadNum{};
277 unsigned int mIntegrationInterval{};
278 unsigned int mOffsetUngrouped{};
279 unsigned int mOffsetGrouped{};
285 void setGroupedIDC(
const unsigned int glrow,
const unsigned int padGrouped,
const float val);
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} {};
299 int mGroupCounter = 0;
301 const std::array<int, 4> mColors{1, 2, 3, 4};
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 getRegion() 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
EdgePadGroupingMethod getEdgePadGroupingType() const
float getGroupedIDCValGlobal(unsigned int ugrow, unsigned int upad) const
unsigned int getLastPad(const unsigned int ulrow) const
unsigned int getTotalGroupPadsSectorEdges() const
void addValue(const unsigned int padInRegion)
float getWeightPad(const unsigned int relPosPad) const
unsigned int getIntegrationInterval() 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)
unsigned int getGroupedPadsSectorEdges() const
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)
EdgePadGroupingMethod getEdgePadGroupingType() const
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)
void setThreadNum(const unsigned int threadNum)
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
unsigned int getGroupedPadsSectorEdges() const
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
unsigned int getTotalGroupPadsSectorEdges() 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)
unsigned int getRegion() const
void setCRU(const CRU cru)
set current processed CRU
unsigned int getIntegrationInterval() const
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.
static constexpr unsigned int NREGIONS
total number of regions in one sector
GLuint GLuint GLfloat weight
Global TPC definitions and constants.
@ IDCDelta
IDCDelta: \Delta I(r,\phi,t) = I(r,\phi,t) / ( I_0(r,\phi) * I_1(t) )
struct to access and set Delta IDCs