Project
Loading...
Searching...
No Matches
IDCCCDBHelper.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_IDCCCDBHELPER_H_
17#define ALICEO2_TPC_IDCCCDBHELPER_H_
18#include <Framework/Logger.h>
19#include "DataFormatsTPC/Defs.h"
21#include "TPCBase/Sector.h"
22#include "Rtypes.h"
23
24#include <fmt/format.h>
25class TCanvas;
26
27namespace o2::tpc
28{
29
30class IDCGroupHelperSector;
31struct IDCZero;
32struct IDCOne;
33struct FourierCoeff;
34template <typename DataT>
35struct IDCDelta;
36enum class PadFlags : unsigned short;
37
38template <class T>
39class CalDet;
40
41/*
42 Usage
43 o2::tpc::IDCCCDBHelper<unsigned short> helper;
44 // setting the IDC members manually
45 helper.setIDCDelta(IDCDelta<DataT>* idcDelta);
46 helper.setIDCZero(IDCZero* idcZero);
47 helper.setIDCOne(IDCOne* idcOne);
48 helper.setGroupingParameter(IDCGroupHelperSector* helperSector);
49 // draw or access the IDCs
50 const unsigned int sector = 10;
51 const unsigned int integrationInterval = 0;
52 helper.drawIDCZeroSide(o2::tpc::Side::A);
53 helper.drawIDCDeltaSector(sector, integrationInterval);
54 helper.drawIDCDeltaSide(o2::tpc::Side::A, integrationInterval);
55 helper.drawIDCSide(o2::tpc::Side::A, integrationInterval);
56 TODO add drawing of 1D-distributions
57*/
58
60template <typename DataT = unsigned short>
62{
63 public:
65 IDCCCDBHelper() = default;
66
68 void setIDCDelta(IDCDelta<DataT>* idcDelta, const Side side = Side::A) { mIDCDelta[side] = idcDelta; }
69
71 void setIDCZero(IDCZero* idcZero, const Side side = Side::A) { mIDCZero[side] = idcZero; }
72
74 void setIDCOne(IDCOne* idcOne, const Side side = Side::A) { mIDCOne[side] = idcOne; }
75
77 void setFourierCoeffs(FourierCoeff* fourier, const Side side = Side::A) { mFourierCoeff[side] = fourier; }
78
81 void setIDCZeroScale(const bool rejectOutlier = true);
82
84 void setGroupingParameter(IDCGroupHelperSector* helperSector, const Side side = Side::A) { mHelperSector[side] = helperSector; }
85
87 unsigned int getNIntegrationIntervalsIDCDelta(const o2::tpc::Side side) const;
88
90 unsigned int getNIntegrationIntervalsIDCOne(const o2::tpc::Side side) const;
91
97 float getIDCZeroVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad) const;
98
105 float getIDCDeltaVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval) const;
106
110 float getIDCOneVal(const o2::tpc::Side side, const unsigned int integrationInterval) const;
111
113 void createOutlierMap();
114
121 float getIDCVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval) const;
122
126 void drawIDCZeroSide(const o2::tpc::Side side, const std::string filename = "IDCZeroSide.pdf", const float minZ = 0, const float maxZ = -1) const { drawIDCZeroHelper(true, side == Side::A ? Sector(0) : Sector(Sector::MAXSECTOR - 1), filename, minZ, maxZ); }
127
132 void drawIDCDeltaSide(const o2::tpc::Side side, const unsigned int integrationInterval, const std::string filename = "IDCDeltaSide.pdf", const float minZ = 0, const float maxZ = -1) const { drawIDCDeltaHelper(true, side == Side::A ? Sector(0) : Sector(Sector::MAXSECTOR - 1), integrationInterval, filename, minZ, maxZ); }
133
138 void drawIDCSide(const o2::tpc::Side side, const unsigned int integrationInterval, const std::string filename = "IDCSide.pdf", const float minZ = 0, const float maxZ = -1) const { drawIDCHelper(true, side == Side::A ? Sector(0) : Sector(Sector::MAXSECTOR - 1), integrationInterval, filename, minZ, maxZ); }
139
143 void drawIDCZeroSector(const unsigned int sector, const std::string filename = "IDCZeroSector.pdf", const float minZ = 0, const float maxZ = -1) const { drawIDCZeroHelper(false, Sector(sector), filename, minZ, maxZ); }
144
149 void drawIDCDeltaSector(const unsigned int sector, const unsigned int integrationInterval, const std::string filename = "IDCDeltaSector.pdf", const float minZ = 0, const float maxZ = -1) const { drawIDCDeltaHelper(false, Sector(sector), integrationInterval, filename, minZ, maxZ); }
150
155 void drawIDCSector(const unsigned int sector, const unsigned int integrationInterval, const std::string filename = "IDCSector.pdf", const float minZ = 0, const float maxZ = -1) const { drawIDCHelper(false, Sector(sector), integrationInterval, filename, minZ, maxZ); }
156
161 void drawPadStatusFlagsMapSector(const unsigned int sector, const PadFlags flag, const std::string filename = "PadStatusFlags_Sector.pdf") const { drawPadFlagMap(false, Sector(sector), filename, flag); }
162
167 void drawPadStatusFlagsMapSide(const o2::tpc::Side side, const PadFlags flag, const std::string filename = "PadStatusFlags_Side.pdf") const { drawPadFlagMap(true, side == Side::A ? Sector(0) : Sector(Sector::MAXSECTOR - 1), filename, flag); }
168
169 TCanvas* drawIDCZeroCanvas(TCanvas* outputCanvas, std::string_view type, int nbins1D, float xMin1D, float xMax1D, int integrationInterval = -1) const;
170
171 TCanvas* drawIDCZeroScale(TCanvas* outputCanvas, const bool rejectOutlier = true) const;
172
173 TCanvas* drawIDCZeroRadialProfile(TCanvas* outputCanvas, int nbinsY, float yMin, float yMax) const;
174
175 TCanvas* drawIDCZeroStackCanvas(TCanvas* outputCanvas, Side side, std::string_view type, int nbins1D, float xMin1D, float xMax1D, int integrationInterval = -1) const;
176
177 TCanvas* drawIDCOneCanvas(TCanvas* outputCanvas, int nbins1D, float xMin1D, float xMax1D, int integrationIntervals = -1) const;
178
179 TCanvas* drawFourierCoeff(TCanvas* outputCanvas, Side side, int nbins1D, float xMin1D, float xMax1D) const;
180
184 void dumpToTree(const Side side, const char* outFileName = "IDCCCDBTree.root") const;
185
188 void dumpToFourierCoeffToTree(const char* outFileName = "FourierCCDBTree.root") const;
189
193 void dumpToTreeIDCDelta(const Side side, const char* outFileName = "IDCCCDBTreeDeltaIDC.root") const;
194
198
201 std::vector<CalDet<float>> getIDCDeltaCalDet() const;
202
204 CalDet<PadFlags>* getPadStatusMap() const { return mPadFlagsMap.get(); }
205
207 void setPadStatusMap(const CalDet<PadFlags>& outliermap) { mPadFlagsMap = std::make_unique<CalDet<PadFlags>>(outliermap); }
208
212 void scaleIDC0(const float factor, const Side side);
213
218 static float getMeanIDC0(const Side side, const IDCZero& idcZero, const CalDet<PadFlags>* outlierMap);
219
221 std::pair<int, int> getNOutliers() const;
222
227 static float getStackMedian(const IDCZero& idczero, const Sector sector, const GEMstack stack);
228
232 static std::array<float, o2::tpc::GEMSTACKSPERSECTOR * o2::tpc::SECTORSPERSIDE> getStackMedian(const IDCZero& idczero, const Side side);
233
234 private:
236 float mScaleIDC0Aside = 1.0;
237 float mScaleIDC0Cside = 1.0;
238
239 std::array<IDCZero*, SIDES> mIDCZero = {nullptr, nullptr};
240 std::array<IDCDelta<DataT>*, SIDES> mIDCDelta = {nullptr, nullptr};
241 std::array<IDCOne*, SIDES> mIDCOne = {nullptr, nullptr};
242 std::array<IDCGroupHelperSector*, SIDES> mHelperSector = {nullptr, nullptr};
243 std::array<FourierCoeff*, SIDES> mFourierCoeff = {nullptr, nullptr};
244 std::unique_ptr<CalDet<PadFlags>> mPadFlagsMap;
245
249 void drawIDCZeroHelper(const bool type, const Sector sector, const std::string filename, const float minZ, const float maxZ) const;
250
255 void drawIDCDeltaHelper(const bool type, const Sector sector, const unsigned int integrationInterval, const std::string filename, const float minZ, const float maxZ) const;
256
261 void drawIDCHelper(const bool type, const Sector sector, const unsigned int integrationInterval, const std::string filename, const float minZ, const float maxZ) const;
262
264 void drawPadFlagMap(const bool type, const Sector sector, const std::string filename, const PadFlags flag) const;
265
272 static unsigned int getUngroupedIndexGlobal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval);
273
274 ClassDefNV(IDCCCDBHelper, 3)
275};
276
277} // namespace o2::tpc
278
279#endif
float & yMax
uint32_t side
Definition RawData.h:0
uint32_t stack
Definition RawData.h:1
CalDet< float > getIDCZeroCalDet() const
CalDet< PadFlags > * getPadStatusMap() const
TCanvas * drawIDCOneCanvas(TCanvas *outputCanvas, int nbins1D, float xMin1D, float xMax1D, int integrationIntervals=-1) const
void scaleIDC0(const float factor, const Side side)
void dumpToFourierCoeffToTree(const char *outFileName="FourierCCDBTree.root") const
float getIDCZeroVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad) const
IDCCCDBHelper()=default
constructor
void setIDCZero(IDCZero *idcZero, const Side side=Side::A)
setting the 0D-IDCs
void setIDCZeroScale(const bool rejectOutlier=true)
TCanvas * drawIDCZeroScale(TCanvas *outputCanvas, const bool rejectOutlier=true) const
void createOutlierMap()
create the outlier map with the set unscaled IDC0 map
std::vector< CalDet< float > > getIDCDeltaCalDet() const
void drawIDCZeroSide(const o2::tpc::Side side, const std::string filename="IDCZeroSide.pdf", const float minZ=0, const float maxZ=-1) const
TCanvas * drawIDCZeroCanvas(TCanvas *outputCanvas, std::string_view type, int nbins1D, float xMin1D, float xMax1D, int integrationInterval=-1) const
TCanvas * drawFourierCoeff(TCanvas *outputCanvas, Side side, int nbins1D, float xMin1D, float xMax1D) const
void drawIDCSide(const o2::tpc::Side side, const unsigned int integrationInterval, const std::string filename="IDCSide.pdf", const float minZ=0, const float maxZ=-1) const
void drawPadStatusFlagsMapSector(const unsigned int sector, const PadFlags flag, const std::string filename="PadStatusFlags_Sector.pdf") const
void setIDCDelta(IDCDelta< DataT > *idcDelta, const Side side=Side::A)
setting the IDCDelta class member
void drawIDCZeroSector(const unsigned int sector, const std::string filename="IDCZeroSector.pdf", const float minZ=0, const float maxZ=-1) const
void setIDCOne(IDCOne *idcOne, const Side side=Side::A)
setting the 1D-IDCs
void drawIDCDeltaSide(const o2::tpc::Side side, const unsigned int integrationInterval, const std::string filename="IDCDeltaSide.pdf", const float minZ=0, const float maxZ=-1) const
std::pair< int, int > getNOutliers() const
float getIDCVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval) const
void drawIDCDeltaSector(const unsigned int sector, const unsigned int integrationInterval, const std::string filename="IDCDeltaSector.pdf", const float minZ=0, const float maxZ=-1) const
static float getMeanIDC0(const Side side, const IDCZero &idcZero, const CalDet< PadFlags > *outlierMap)
unsigned int getNIntegrationIntervalsIDCDelta(const o2::tpc::Side side) const
float getIDCOneVal(const o2::tpc::Side side, const unsigned int integrationInterval) const
void dumpToTree(const Side side, const char *outFileName="IDCCCDBTree.root") const
void setPadStatusMap(const CalDet< PadFlags > &outliermap)
static float getStackMedian(const IDCZero &idczero, const Sector sector, const GEMstack stack)
void drawIDCSector(const unsigned int sector, const unsigned int integrationInterval, const std::string filename="IDCSector.pdf", const float minZ=0, const float maxZ=-1) const
void setFourierCoeffs(FourierCoeff *fourier, const Side side=Side::A)
setting the fourier coefficients
unsigned int getNIntegrationIntervalsIDCOne(const o2::tpc::Side side) const
void drawPadStatusFlagsMapSide(const o2::tpc::Side side, const PadFlags flag, const std::string filename="PadStatusFlags_Side.pdf") const
TCanvas * drawIDCZeroStackCanvas(TCanvas *outputCanvas, Side side, std::string_view type, int nbins1D, float xMin1D, float xMax1D, int integrationInterval=-1) const
TCanvas * drawIDCZeroRadialProfile(TCanvas *outputCanvas, int nbinsY, float yMin, float yMax) const
float getIDCDeltaVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval) const
void setGroupingParameter(IDCGroupHelperSector *helperSector, const Side side=Side::A)
setting the grouping parameters
void dumpToTreeIDCDelta(const Side side, const char *outFileName="IDCCCDBTreeDeltaIDC.root") const
Helper class for accessing grouped pads for one sector.
static constexpr int MAXSECTOR
Definition Sector.h:44
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat maxZ
Definition glcorearb.h:2910
GLfloat GLfloat minZ
Definition glcorearb.h:2910
Global TPC definitions and constants.
Definition SimTraits.h:168
GEMstack
TPC GEM stack types.
Definition Defs.h:53
@ IDCOne
IDC1: I_1(t) = <I(r,\phi,t) / I_0(r,\phi)>_{r,\phi}.
@ IDCZero
IDC0: I_0(r,\phi) = <I(r,\phi,t)>_t.
@ IDCDelta
IDCDelta: \Delta I(r,\phi,t) = I(r,\phi,t) / ( I_0(r,\phi) * I_1(t) )
constexpr unsigned char SIDES
Definition Defs.h:41
Side
TPC readout sidE.
Definition Defs.h:35
@ A
Definition Defs.h:35
std::string filename()
struct containing the fourier coefficients calculated from IDC0 for n timeframes
struct to access and set Delta IDCs
struct containing the ITPC0 values (integrated TPC clusters)