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"
20#include "TPCBase/Sector.h"
21#include "Rtypes.h"
22
23#include <fmt/format.h>
24class TCanvas;
25
26namespace o2::tpc
27{
28
29class IDCGroupHelperSector;
30struct IDCZero;
31struct IDCOne;
32struct FourierCoeff;
33template <typename DataT>
34struct IDCDelta;
35enum class PadFlags : unsigned short;
36
37template <class T>
38class CalDet;
39
40/*
41 Usage
42 o2::tpc::IDCCCDBHelper<unsigned short> helper;
43 // setting the IDC members manually
44 helper.setIDCDelta(IDCDelta<DataT>* idcDelta);
45 helper.setIDCZero(IDCZero* idcZero);
46 helper.setIDCOne(IDCOne* idcOne);
47 helper.setGroupingParameter(IDCGroupHelperSector* helperSector);
48 // draw or access the IDCs
49 const unsigned int sector = 10;
50 const unsigned int integrationInterval = 0;
51 helper.drawIDCZeroSide(o2::tpc::Side::A);
52 helper.drawIDCDeltaSector(sector, integrationInterval);
53 helper.drawIDCDeltaSide(o2::tpc::Side::A, integrationInterval);
54 helper.drawIDCSide(o2::tpc::Side::A, integrationInterval);
55 TODO add drawing of 1D-distributions
56*/
57
59template <typename DataT = unsigned short>
61{
62 public:
64 IDCCCDBHelper() = default;
65
67 void setIDCDelta(IDCDelta<DataT>* idcDelta, const Side side = Side::A) { mIDCDelta[side] = idcDelta; }
68
70 void setIDCZero(IDCZero* idcZero, const Side side = Side::A) { mIDCZero[side] = idcZero; }
71
73 void setIDCOne(IDCOne* idcOne, const Side side = Side::A) { mIDCOne[side] = idcOne; }
74
76 void setFourierCoeffs(FourierCoeff* fourier, const Side side = Side::A) { mFourierCoeff[side] = fourier; }
77
80 void setIDCZeroScale(const bool rejectOutlier = true);
81
83 void setGroupingParameter(IDCGroupHelperSector* helperSector, const Side side = Side::A) { mHelperSector[side] = helperSector; }
84
86 unsigned int getNIntegrationIntervalsIDCDelta(const o2::tpc::Side side) const;
87
89 unsigned int getNIntegrationIntervalsIDCOne(const o2::tpc::Side side) const;
90
96 float getIDCZeroVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad) const;
97
104 float getIDCDeltaVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval) const;
105
109 float getIDCOneVal(const o2::tpc::Side side, const unsigned int integrationInterval) const;
110
112 void createOutlierMap();
113
120 float getIDCVal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval) const;
121
125 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); }
126
131 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); }
132
137 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); }
138
142 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); }
143
148 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); }
149
154 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); }
155
160 void drawPadStatusFlagsMapSector(const unsigned int sector, const PadFlags flag, const std::string filename = "PadStatusFlags_Sector.pdf") const { drawPadFlagMap(false, Sector(sector), filename, flag); }
161
166 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); }
167
168 TCanvas* drawIDCZeroCanvas(TCanvas* outputCanvas, std::string_view type, int nbins1D, float xMin1D, float xMax1D, int integrationInterval = -1) const;
169
170 TCanvas* drawIDCZeroScale(TCanvas* outputCanvas, const bool rejectOutlier = true) const;
171
172 TCanvas* drawIDCZeroRadialProfile(TCanvas* outputCanvas, int nbinsY, float yMin, float yMax) const;
173
174 TCanvas* drawIDCZeroStackCanvas(TCanvas* outputCanvas, Side side, std::string_view type, int nbins1D, float xMin1D, float xMax1D, int integrationInterval = -1) const;
175
176 TCanvas* drawIDCOneCanvas(TCanvas* outputCanvas, int nbins1D, float xMin1D, float xMax1D, int integrationIntervals = -1) const;
177
178 TCanvas* drawFourierCoeff(TCanvas* outputCanvas, Side side, int nbins1D, float xMin1D, float xMax1D) const;
179
183 void dumpToTree(const Side side, const char* outFileName = "IDCCCDBTree.root") const;
184
187 void dumpToFourierCoeffToTree(const char* outFileName = "FourierCCDBTree.root") const;
188
192 void dumpToTreeIDCDelta(const Side side, const char* outFileName = "IDCCCDBTreeDeltaIDC.root") const;
193
197
200 std::vector<CalDet<float>> getIDCDeltaCalDet() const;
201
203 CalDet<PadFlags>* getPadStatusMap() const { return mPadFlagsMap.get(); }
204
206 void setPadStatusMap(const CalDet<PadFlags>& outliermap) { mPadFlagsMap = std::make_unique<CalDet<PadFlags>>(outliermap); }
207
211 void scaleIDC0(const float factor, const Side side);
212
217 static float getMeanIDC0(const Side side, const IDCZero& idcZero, const CalDet<PadFlags>* outlierMap);
218
220 std::pair<int, int> getNOutliers() const;
221
226 static float getStackMedian(const IDCZero& idczero, const Sector sector, const GEMstack stack);
227
231 static std::array<float, o2::tpc::GEMSTACKSPERSECTOR * o2::tpc::SECTORSPERSIDE> getStackMedian(const IDCZero& idczero, const Side side);
232
233 private:
235 float mScaleIDC0Aside = 1.0;
236 float mScaleIDC0Cside = 1.0;
237
238 std::array<IDCZero*, SIDES> mIDCZero = {nullptr, nullptr};
239 std::array<IDCDelta<DataT>*, SIDES> mIDCDelta = {nullptr, nullptr};
240 std::array<IDCOne*, SIDES> mIDCOne = {nullptr, nullptr};
241 std::array<IDCGroupHelperSector*, SIDES> mHelperSector = {nullptr, nullptr};
242 std::array<FourierCoeff*, SIDES> mFourierCoeff = {nullptr, nullptr};
243 std::unique_ptr<CalDet<PadFlags>> mPadFlagsMap;
244
248 void drawIDCZeroHelper(const bool type, const Sector sector, const std::string filename, const float minZ, const float maxZ) const;
249
254 void drawIDCDeltaHelper(const bool type, const Sector sector, const unsigned int integrationInterval, const std::string filename, const float minZ, const float maxZ) const;
255
260 void drawIDCHelper(const bool type, const Sector sector, const unsigned int integrationInterval, const std::string filename, const float minZ, const float maxZ) const;
261
263 void drawPadFlagMap(const bool type, const Sector sector, const std::string filename, const PadFlags flag) const;
264
271 static unsigned int getUngroupedIndexGlobal(const unsigned int sector, const unsigned int region, unsigned int urow, unsigned int upad, unsigned int integrationInterval);
272
273 ClassDefNV(IDCCCDBHelper, 3)
274};
275
276} // namespace o2::tpc
277
278#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:167
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
PadFlags
Definition Defs.h:100
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)