Project
Loading...
Searching...
No Matches
IDCGroupHelperRegion.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_TPC_IDCGROUPHELPERREGION_H_
17#define ALICEO2_TPC_IDCGROUPHELPERREGION_H_
18
19#include <vector>
20#include "Rtypes.h"
21
22namespace o2::tpc
23{
24
25enum class EdgePadGroupingMethod : char;
26
29{
30 public:
38 IDCGroupHelperRegion(const unsigned char groupPads, const unsigned char groupRows, const unsigned char groupLastRowsThreshold, const unsigned char groupLastPadsThreshold, const unsigned int groupNotnPadsSectorEdges, const unsigned int region)
39 : mGroupPads{groupPads}, mGroupRows{groupRows}, mGroupLastRowsThreshold{groupLastRowsThreshold}, mGroupLastPadsThreshold{groupLastPadsThreshold}, mGroupPadsSectorEdges{groupNotnPadsSectorEdges}, mRegion{region}
40 {
42 }
43
46
48 unsigned int getNRows() const { return mRows; }
49
52 unsigned int getPadsPerRow(const unsigned int glrow) const { return mPadsPerRow[glrow]; }
53
55 const std::vector<unsigned int>& getPadsPerRow() const { return mPadsPerRow; }
56
58 const std::vector<unsigned int>& getRowOffset() const { return mOffsRow; }
59
61 unsigned int getGroupPads() const { return mGroupPads; }
62
64 unsigned int getGroupRows() const { return mGroupRows; }
65
67 unsigned int getGroupLastRowsThreshold() const { return mGroupLastRowsThreshold; }
68
70 unsigned int getGroupLastPadsThreshold() const { return mGroupLastPadsThreshold; }
71
73 unsigned int getGroupPadsSectorEdges() const { return mGroupPadsSectorEdges; }
74
76 unsigned int getRegion() const { return mRegion; }
77
79 unsigned int getNIDCsPerIntegrationInterval() const { return mNIDCsPerCRU; }
80
85 static unsigned int getGroupedRow(const unsigned int ulrow, const unsigned int groupRows, const unsigned int groupedrows);
86
89 unsigned int getGroupedRow(const unsigned int ulrow) const { return getGroupedRow(ulrow, mGroupRows, mRows); }
90
99 static unsigned int getGroupedPad(const unsigned int upad, const unsigned int ulrow, const unsigned int region, const unsigned int groupPads, const unsigned int groupRows, const unsigned int groupedrows, const unsigned int groupPadsSectorEdges, const std::vector<unsigned int>& padsPerRow);
100
104 unsigned int getGroupedPad(const unsigned int pad, const unsigned int ulrow) const { return getGroupedPad(pad, ulrow, mRegion, mGroupPads, mGroupRows, mRows, mGroupPadsSectorEdges, mPadsPerRow); };
105
110 unsigned int getIndex(const unsigned int glrow, const unsigned int pad, unsigned int integrationInterval) const { return mNIDCsPerCRU * integrationInterval + mOffsRow[glrow] + pad; }
111
116 unsigned int getIndexUngrouped(const unsigned int ulrow, const unsigned int upad, unsigned int integrationInterval) const { return getIndex(getGroupedRow(ulrow), getGroupedPad(upad, ulrow), integrationInterval) + getOffsetForEdgePad(upad, ulrow); }
117
126 static int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow, const unsigned int groupRows, const unsigned int groupPadsSectorEdges, const unsigned int region, const int lastRow);
127
132 int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow) const { return (isSectorEdgePad(upad, ulrow, mRegion, mGroupPadsSectorEdges)) ? getOffsetForEdgePad(upad, ulrow, mGroupRows, mGroupPadsSectorEdges, mRegion, getLastRow()) : 0; }
133
139 static bool isSectorEdgePad(const unsigned int upad, const unsigned int ulrow, const unsigned int region, const unsigned int groupPadsSectorEdges);
140
145 unsigned int getIndexUngroupedGlob(const unsigned int ugrow, const unsigned int upad, unsigned int integrationInterval) const;
146
150 unsigned int getGlobalPadNumber(const unsigned int ulrow, const unsigned int pad) const;
151
153 unsigned int getLastRow() const;
154
157 unsigned int getLastPad(const unsigned int ulrow) const { return getLastPad(ulrow, mRegion, mGroupPads, mGroupLastPadsThreshold, mGroupPadsSectorEdges); }
158
165 static unsigned int getLastPad(const unsigned int ulrow, const unsigned int region, const unsigned char groupPads, const unsigned char groupLastPadsThreshold, const unsigned int groupPadsSectorEdges);
166
170 void dumpToFile(const char* outFileName = "IDCGroupHelperRegion.root", const char* outName = "IDCGroupHelperRegion") const;
171
173 unsigned int getGroupedPadsSectorEdges() const;
174
176 unsigned int getTotalGroupPadsSectorEdges() const;
177
181 static unsigned int getIndexGroupPadsSectorEdges(const unsigned int groupPadsSectorEdges, const unsigned int urelpad);
182
185
188 unsigned int getPadsInGroupSectorEdges(const unsigned indexGroup) const;
189
190 protected:
191 const unsigned char mGroupPads{};
192 const unsigned char mGroupRows{};
193 const unsigned char mGroupLastRowsThreshold{};
194 const unsigned char mGroupLastPadsThreshold{};
195 const unsigned int mGroupPadsSectorEdges{};
196 const unsigned int mRegion{};
197 unsigned int mNIDCsPerCRU{};
198 unsigned int mRows{};
199 std::vector<unsigned int> mPadsPerRow{};
200 std::vector<unsigned int> mOffsRow{};
201
203 void setRows(const unsigned int nRows);
204
207
210 unsigned int getIndexGroupPadsSectorEdges(const unsigned int urelpad);
211
213 static unsigned int getIndexGroupPadsSectorEdges(const unsigned int groupPadsSectorEdges, const unsigned int urelpad, const unsigned int count);
214
215 ClassDefNV(IDCGroupHelperRegion, 1)
216};
217
218} // namespace o2::tpc
219
220#endif
Helper class for accessing grouped pads for one region.
static unsigned int getGroupedPad(const unsigned int upad, const unsigned int ulrow, const unsigned int region, const unsigned int groupPads, const unsigned int groupRows, const unsigned int groupedrows, const unsigned int groupPadsSectorEdges, const std::vector< unsigned int > &padsPerRow)
const unsigned char mGroupLastPadsThreshold
if the last group (sector edges) consists in pad direction less then mGroupLastPadsThreshold pads the...
unsigned int getIndex(const unsigned int glrow, const unsigned int pad, unsigned int integrationInterval) const
unsigned int getGroupedPadsSectorEdges() const
void dumpToFile(const char *outFileName="IDCGroupHelperRegion.root", const char *outName="IDCGroupHelperRegion") const
unsigned int getLastPad(const unsigned int ulrow) const
IDCGroupHelperRegion(const unsigned char groupPads, const unsigned char groupRows, const unsigned char groupLastRowsThreshold, const unsigned char groupLastPadsThreshold, const unsigned int groupNotnPadsSectorEdges, const unsigned int region)
unsigned int getNIDCsPerIntegrationInterval() const
int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow) const
unsigned int getPadsPerRow(const unsigned int glrow) const
void setRows(const unsigned int nRows)
set number of grouped rows
const unsigned char mGroupLastRowsThreshold
if the last group (region edges) consists in row direction less then mGroupLastRowsThreshold pads the...
static unsigned int getGroupedRow(const unsigned int ulrow, const unsigned int groupRows, const unsigned int groupedrows)
unsigned int getTotalGroupPadsSectorEdges() const
const unsigned int mGroupPadsSectorEdges
decoded number of pads at the sector edges which are grouped differently (example: 0: no pads are gro...
static bool isSectorEdgePad(const unsigned int upad, const unsigned int ulrow, const unsigned int region, const unsigned int groupPadsSectorEdges)
std::vector< unsigned int > mOffsRow
offset to calculate the index in the data from grouped row and grouped pad
unsigned int getGroupLastRowsThreshold() const
const std::vector< unsigned int > & getPadsPerRow() const
unsigned int getIndexUngroupedGlob(const unsigned int ugrow, const unsigned int upad, unsigned int integrationInterval) const
EdgePadGroupingMethod getEdgePadGroupingType() const
unsigned int getIndexUngrouped(const unsigned int ulrow, const unsigned int upad, unsigned int integrationInterval) const
std::vector< unsigned int > mPadsPerRow
number of grouped pads per grouped row
IDCGroupHelperRegion()=default
default constructor for ROOT I/O
unsigned int getGroupedRow(const unsigned int ulrow) const
unsigned int getGroupPadsSectorEdges() const
static int getOffsetForEdgePad(const unsigned int upad, const unsigned int ulrow, const unsigned int groupRows, const unsigned int groupPadsSectorEdges, const unsigned int region, const int lastRow)
void initIDCGroupHelperRegion()
initialize members
const unsigned char mGroupRows
grouping parameter in pad direction (how many pads in pad direction are grouped)
unsigned int mRows
number of grouped rows
const unsigned int mRegion
region of input IDCs
unsigned int getPadsInGroupSectorEdges(const unsigned indexGroup) const
unsigned int getGroupLastPadsThreshold() const
static unsigned int getIndexGroupPadsSectorEdges(const unsigned int groupPadsSectorEdges, const unsigned int urelpad)
unsigned int getGlobalPadNumber(const unsigned int ulrow, const unsigned int pad) const
const unsigned char mGroupPads
grouping parameter in pad direction (how many pads in pad direction are grouped)
unsigned int mNIDCsPerCRU
total number of IDCs per CRU per integration interval
unsigned int getGroupedPad(const unsigned int pad, const unsigned int ulrow) const
const std::vector< unsigned int > & getRowOffset() const
GLint GLsizei count
Definition glcorearb.h:399
Global TPC definitions and constants.
Definition SimTraits.h:167