15#include <fmt/format.h>
36 mNumberOfADCs(mADCMax - mADCMin + 1),
41 mCalDets[
"Pedestals"] =
CalPad(
"Pedestals");
42 mCalDets[
"Noise"] =
CalPad(
"Noise");
50 mFirstTimeBin =
param.FirstTimeBin;
51 mLastTimeBin =
param.LastTimeBin;
52 mADCMin =
param.ADCMin;
53 mADCMax =
param.ADCMax;
54 mNumberOfADCs = mADCMax - mADCMin + 1;
55 mStatisticsType =
param.StatType;
60 const Int_t timeBin,
const Float_t signal)
62 Int_t adcValue = Int_t(signal);
63 if (timeBin < mFirstTimeBin || timeBin > mLastTimeBin) {
66 if (adcValue < mADCMin || adcValue > mADCMax) {
71 Int_t bin = padInROC * mNumberOfADCs + (adcValue - mADCMin);
91 vec->resize(numberOfPads * mNumberOfADCs);
93 mADCdata[
roc] = std::unique_ptr<vectorType>(
vec);
103 std::vector<float> fitValues;
105 for (
auto& vecPtr : mADCdata) {
106 auto vec = vecPtr.get();
112 CalROC& calROCPedestal = mCalDets[
"Pedestals"].getCalArray(
roc);
113 CalROC& calROCNoise = mCalDets[
"Noise"].getCalArray(
roc);
122 TF1 fg(
"fg",
"gaus");
123 fg.SetRange(mADCMin - 0.5f, mADCMax + 1.5f);
125 for (Int_t ichannel = 0; ichannel < numberOfPads; ++ichannel) {
126 size_t offset = ichannel * mNumberOfADCs;
128 fit(mNumberOfADCs,
array +
offset,
float(mADCMin) - 0.5f,
float(mADCMax + 1) - 0.5f, fg);
129 pedestal = fg.GetParameter(1);
130 noise = fg.GetParameter(2);
132 fitGaus(mNumberOfADCs,
array +
offset,
float(mADCMin) - 0.5f,
float(mADCMax + 1) - 0.5f, fitValues);
133 pedestal = fitValues[1];
134 noise = fitValues[2];
137 pedestal =
data.mCOG;
138 noise =
data.mStdDev;
140 noise = std::abs(noise);
142 calROCPedestal.
setValue(ichannel, pedestal);
143 calROCNoise.
setValue(ichannel, noise);
155 for (
auto& vecPtr : mADCdata) {
156 auto vec = vecPtr.get();
167 auto f = std::unique_ptr<TFile>(TFile::Open(
filename.c_str(),
"recreate"));
169 f->WriteObject(&mCalDets[
"Pedestals"],
"Pedestals");
170 f->WriteObject(&mCalDets[
"Noise"],
"Noise");
172 }
else if (
type == 1) {
173 f->WriteObject(
this,
"CalibPedestal");
180 auto*
data = mADCdata[
roc.getRoc()]->data();
183 TH2F* h2 =
new TH2F(fmt::format(
"hADCValues_ROC{:02}",
roc.getRoc()).data(), fmt::format(
"ADC values of ROC {:02}",
roc.getRoc()).data(), numberOfPads, 0, numberOfPads, mNumberOfADCs, mADCMin, mADCMax);
184 h2->SetDirectory(
nullptr);
185 for (
int ichannel = 0; ichannel < numberOfPads; ++ichannel) {
186 size_t offset = ichannel * mNumberOfADCs;
188 for (
int iADC = 0; iADC < mNumberOfADCs; ++iADC) {
189 h2->Fill(ichannel, mADCMin + iADC, (
data +
offset)[iADC]);
static const CalibPedestalParam & Instance()
void setValue(const size_t channel, const T &value)
TH2 * createControlHistogram(ROC roc)
generate a control histogram
void resetData()
Reset pedestal data.
CalibPedestal(PadSubset padSubset=PadSubset::ROC)
default constructor
Int_t updateROC(const Int_t roc, const Int_t row, const Int_t pad, const Int_t timeBin, const Float_t signal) final
void init()
initialize the clusterer from CalibPedestalParam
void dumpToFile(const std::string filename, uint32_t type=0) final
Dump the relevant data to file.
std::vector< float > vectorType
void analyse()
Analyse the buffered adc values and calculate noise and pedestal.
Base class for raw data calibrations.
const Mapper & mMapper
TPC mapper.
static constexpr unsigned short getPadsInIROC()
static constexpr unsigned short getPadsInOROC()
GlobalPadNumber getPadNumberInROC(const PadROCPos &rocPadPosition) const
Pad and row inside a ROC.
GLint GLint GLsizei GLint GLenum GLenum type
TFitResultPtr fit(const size_t nBins, const T *arr, const T xMin, const T xMax, TF1 &func, std::string_view option="")
StatisticsData getStatisticsData(const T *arr, const size_t nBins, const double xMin, const double xMax)
Double_t fitGaus(const size_t nBins, const T *arr, const T xMin, const T xMax, std::vector< T > ¶m)
Global TPC definitions and constants.
StatisticsType
Statistics type.
@ GausFitFast
Use fast gaus fit (less accurate error treatment)
@ MeanStdDev
Use mean and standard deviation.
@ GausFit
Use slow gaus fit (better fit stability)
PadSubset
Definition of the different pad subsets.
unsigned short GlobalPadNumber
global pad number
std::vector< o2::ctf::BufferType > vec