39 DataTHisto hist(nBins, xmin, xmax, useUnderflow, useOverflow);
40 for (
auto& calArray : mPadHistosDet->getData()) {
41 for (
auto& tHist : calArray.getData()) {
49 TFile
f(fileName,
"RECREATE");
50 f.WriteObject(mGainMap.get(),
"GainMap");
53void CalibPadGainTracksBase::drawExtractedGainMapHelper(
const bool type,
const int typeMap,
const Sector sector,
const std::string
filename,
const float minZ,
const float maxZ,
const bool norm)
const
56 std::string zAxisTitle;
58 map = *mGainMap.get();
59 zAxisTitle =
"rel. gain";
60 }
else if (typeMap == 1) {
61 map = *mSigmaMap.get();
62 zAxisTitle = norm ?
"sigma / rel. gain" :
"sigma";
63 }
else if (typeMap == 2) {
65 zAxisTitle =
"n cluster";
74 std::function<
float(
const unsigned int,
const unsigned int,
const unsigned int,
const unsigned int)> idcFunc = [mapTmp = map](
const unsigned int sector,
const unsigned int region,
const unsigned int lrow,
const unsigned int pad) {
80 type ?
IDCDrawHelper::drawSide(drawFun, sector.side(), zAxisTitle,
filename,
minZ,
maxZ) :
IDCDrawHelper::drawSector(drawFun, 0,
Mapper::NREGIONS, sector, zAxisTitle,
filename,
minZ,
maxZ);
86 LOGP(error,
"Map not set. Returning");
94 dump.add(mSigmaMap.get());
101 TFile
f(inpFile,
"READ");
103 f.GetObject(mapName, gainMap);
106 LOGP(info,
"GainMap {} not found returning", mapName);
110 *mGainMap /= *gainMap;
116 TFile
f(inpFile,
"READ");
118 f.GetObject(mapName, gainMap);
121 LOGP(info,
"GainMap {} not found returning", mapName);
125 mGainMap = std::make_unique<CalPad>(*gainMap);
136 for (
auto& calArray : mPadHistosDet->getData()) {
137 for (
auto& tHist : calArray.getData()) {
145 TFile fOut(outFileName,
"RECREATE");
146 fOut.WriteObject(
this, outName);
152 for (
const auto& caldet : caldets) {
159 unsigned int totEntries = 0;
161 for (
auto& calArray : mPadHistosDet->getData()) {
162 for (
auto& tHist : calArray.getData()) {
163 const auto entries = tHist.getEntries();
164 totEntries += entries;
165 if (entries < minEntries || minEntries == -1) {
166 minEntries = entries;
170 LOGP(info,
"Total number of entries: {}", totEntries);
171 LOGP(info,
"Minimum number of entries: {}", minEntries);
176 if (minEntries == 0) {
180 unsigned long totalEntries = 0;
181 for (
auto& calArray : mPadHistosDet->getData()) {
182 for (
auto& tHist : calArray.getData()) {
183 const auto entries = tHist.getEntries();
184 totalEntries += entries;
211 for (
int pad = 0; pad < padsInRoc; ++pad) {
212 const auto& histo = mPadHistosDet->getCalArray(
roc).getData()[pad];
213 unsigned int entries = histo.getEntries();
214 const auto stat = histo.getStatisticsData(low, high);
215 const auto cog =
static_cast<float>(stat.mCOG);
218 if (histo.isUnderflowSet()) {
219 entries -= histo.getBinContent(0);
222 if (histo.isOverflowSet()) {
223 const unsigned int binOverflow = histo.getNBins() + histo.isUnderflowSet();
224 entries -= histo.getBinContent(binOverflow);
227 mNClMap->getCalArray(
roc).getData()[pad] = entries;
228 if ((entries >= minEntries) && (stat.mStdDev > minStDev)) {
229 mGainMap->getCalArray(
roc).getData()[pad] = mLogTransformQ ? (std::exp(cog) - 1) : cog;
230 mSigmaMap->getCalArray(
roc).getData()[pad] = mLogTransformQ ? (std::exp(stat.mStdDev) - 1) : stat.mStdDev;
232 mGainMap->getCalArray(
roc).getData()[pad] = 1;
233 mSigmaMap->getCalArray(
roc).getData()[pad] = 0;
237 normalizeGain(*mGainMap.get());
242 for (
int pad = 0; pad < padsInRoc; ++pad) {
243 mGainMap->getCalArray(
roc).getData()[pad] = std::clamp(mGainMap->getCalArray(
roc).getData()[pad], minRelgain, maxRelgain);
248void CalibPadGainTracksBase::normalizeGain(
CalPad& calPad)
251 const bool isIROC =
data.getPadSubsetNumber() < 36;
252 normalize(
data.getData(), getNPadsForNormalization(isIROC));
256std::vector<int> CalibPadGainTracksBase::getNPadsForNormalization(
const bool iroc)
const
267 return std::vector<int>();
271void CalibPadGainTracksBase::normalize(std::vector<float>&
data,
const std::vector<int>& nPads)
274 for (
const auto pads : nPads) {
275 auto median = TMath::Median(pads,
data.data() + padStart);
276 std::for_each(
data.data() + padStart,
data.data() + padStart + pads, [median](
auto&
val) { val /= ((val > 0) && (val != 1)) ? median : 1; });
helper class for drawing IDCs per region/side
void initCalPadMemory()
initializing CalPad object for gainmap
void resetHistos()
resetting the histograms which are used for extraction of the gain map
CalibPadGainTracksBase(const bool initCalPad=true)
void dumpGainMap(const char *fileName="GainMap.root") const
void dumpToFile(const char *outFileName="calPadGainTracksBase.root", const char *outName="calPadGain") const
TCanvas * drawExtractedGainMapPainter() const
draw gain map using painter functionality
void divideGainMap(const char *inpFile, const char *mapName)
void initCalPadStdDevMemory()
initializing CalPad object for std dev map
void fill(const gsl::span< const DataTHistos > &caldets)
void initCalPadStat()
initializing CalPad object for std dev map
@ region
normalization per region
@ stack
normalization per GEM stack
void dumpToTree(const std::string filename="map_debug.root") const
void print() const
Print the total number of entries and minimum number of entries (ToDo add some more informations whic...
void finalize(const int minEntries=10, const float minRelgain=0.1f, const float maxRelgain=2.f, const float low=0.05f, const float high=0.6f, const float minStDev=0.01)
bool hasEnoughData(const int minEntries) const
void setGainMap(const char *inpFile, const char *mapName)
void init(const unsigned int nBins, const float xmin, const float xmax, const bool useUnderflow, const bool useOverflow)
DataTHisto getHistogram(const int sector, const int region, const int lrow, const int pad) const
class to dump calibration data to a ttree for simple visualisation
void add(CalDet< T > *calDet)
Add CalDet object.
templated 1D-histogram class.
static void drawSide(const IDCDraw &idc, const o2::tpc::Side side, const std::string zAxisTitle, const std::string filename, const float minZ=0, const float maxZ=-1)
static constexpr unsigned short getPadsInOROC3()
static GlobalPadNumber getGlobalPadNumber(const unsigned int lrow, const unsigned int pad, const unsigned int region)
static constexpr unsigned int GLOBALPADOFFSET[NREGIONS]
offset of number of pads for region
static constexpr unsigned short getPadsInOROC1()
static constexpr unsigned short getPadsInIROC()
static constexpr unsigned short getPadsInOROC()
static constexpr int getNumberOfPadsPerSide()
static constexpr unsigned short getPadsInOROC2()
static constexpr unsigned int PADSPERREGION[NREGIONS]
number of pads per CRU
static constexpr unsigned int OFFSETCRUGLOBAL[PADROWS]
row offset in cru for given global pad row
static constexpr unsigned REGION[PADROWS]
region for global pad row
bool isIROC() const
If roc is an IROC.
void dump(const std::string what, DPMAP m, int verbose)
GLint GLint GLsizei GLint GLenum GLenum type
GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat maxZ
R median(std::vector< T > v)
Global TPC definitions and constants.
Defining DataPointCompositeObject explicitly as copiable.
std::function< float(const unsigned int, const unsigned int, const unsigned int, const unsigned int)> mIDCFunc
function returning the value which will be drawn for sector, region, row, pad
static TCanvas * draw(const CalDet< T > &calDet, int nbins1D=300, float xMin1D=0, float xMax1D=0, TCanvas *outputCanvas=nullptr)