Project
Loading...
Searching...
No Matches
PedestalCalibrator.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
12#ifndef CPV_PEDESTAL_CALIBRATIOR_H_
13#define CPV_PEDESTAL_CALIBRATIOR_H_
14
19#include "CCDB/CcdbObjectInfo.h"
20//#include "TString.h"
21
22namespace o2
23{
24namespace cpv
25{
26using Digit = o2::cpv::Digit;
27
28//===================================================================
30{
31 public:
32 PedestalSpectrum(uint16_t toleratedGapWidth = 5, float nSigmasZS = 3., float suspiciousPedestalRMS = 20.);
33 ~PedestalSpectrum() = default;
35 void fill(uint16_t amplitude);
36 uint16_t getNPeaks();
37 float getPeakMean(uint16_t iPeak); // return mean value of i-th peak
38 float getPeakRMS(uint16_t iPeak); // return RMS value of i-th peak
39 float getPedestalValue(); // return final decision for pedestal value
40 float getPedestalRMS(); // return final decision for pedestal RMS
41 uint32_t getNEntries() { return mNEntries; }
42
43 private:
44 void analyze();
45 uint32_t mNEntries = 0;
46 uint16_t mNPeaks = 0;
47 bool mIsAnalyzed = false;
48 uint16_t mToleratedGapWidth;
49 float mZSnSigmas;
50 float mSuspiciousPedestalRMS;
51 float mPedestalValue;
52 float mPedestalRMS;
53 std::vector<float> mMeanOfPeaks, mRMSOfPeaks;
54 std::vector<uint32_t> mPeakCounts;
55 std::map<uint16_t, uint32_t> mSpectrumContainer;
56}; // end PedestalSpectrum
57
58//===================================================================
60 int mNEvents = 0;
61 std::vector<PedestalSpectrum> mPedestalSpectra;
62
63 PedestalCalibData(uint16_t toleratedGapWidth = 5, float nSigmasZS = 3., float suspiciousPedestalRMS = 20.);
64 ~PedestalCalibData() = default;
65
66 void fill(const gsl::span<const o2::cpv::Digit> data);
67 void merge(const PedestalCalibData* prev);
68 void print();
69
70}; // end PedestalCalibData
71
73//===================================================================
74class PedestalCalibrator final : public o2::calibration::TimeSlotCalibration<o2::cpv::PedestalCalibData>
75{
76 public:
78 ~PedestalCalibrator() final = default;
79 std::vector<o2::ccdb::CcdbObjectInfo>& getCcdbInfoPedestalsVector() { return mCcdbInfoPedestalsVec; }
80 const std::vector<o2::cpv::Pedestals>& getPedestalsVector() const { return mPedestalsVec; }
81 std::vector<o2::ccdb::CcdbObjectInfo>& getCcdbInfoThresholdsFEEVector() { return mCcdbInfoThresholdsFEEVec; }
82 const std::vector<std::vector<int>>& getThresholdsFEEVector() const { return mThresholdsFEEVec; }
83 std::vector<o2::ccdb::CcdbObjectInfo>& getCcdbInfoDeadChannelsVector() { return mCcdbInfoDeadChannelsVec; }
84 const std::vector<std::vector<int>>& getDeadChannelsVector() const { return mDeadChannelsVec; }
85 std::vector<o2::ccdb::CcdbObjectInfo>& getCcdbInfoHighPedChannelsVector() { return mCcdbInfoHighPedChannelsVec; }
86 const std::vector<std::vector<int>>& getHighPedChannelsVector() const { return mHighPedChannelsVec; }
87 std::vector<o2::ccdb::CcdbObjectInfo>& getCcdbInfoEfficienciesVector() { return mCcdbInfoPedEfficienciesVec; }
88 const std::vector<std::vector<float>>& getEfficienciesVector() const { return mPedEfficienciesVec; }
89
90 bool hasEnoughData(const PedestalTimeSlot& slot) const final
91 {
92 LOG(info) << "hasEnoughData() is being called";
93 return slot.getContainer()->mNEvents >= mMinEvents;
94 }
95 void initOutput() final;
96 void finalizeSlot(PedestalTimeSlot& slot) final;
97 PedestalTimeSlot& emplaceNewSlot(bool front, TFType tstart, TFType tend) final;
98 void configParameters();
99
100 private:
101 uint32_t mMinEvents = 100;
102 float mZSnSigmas = 3.;
103 uint16_t mToleratedGapWidth = 5;
104 float mSuspiciousPedestalRMS = 20.;
105 std::vector<o2::ccdb::CcdbObjectInfo> mCcdbInfoPedestalsVec;
106 std::vector<o2::cpv::Pedestals> mPedestalsVec;
107 std::vector<o2::ccdb::CcdbObjectInfo> mCcdbInfoThresholdsFEEVec;
108 std::vector<std::vector<int>> mThresholdsFEEVec;
109 std::vector<o2::ccdb::CcdbObjectInfo> mCcdbInfoDeadChannelsVec;
110 std::vector<std::vector<int>> mDeadChannelsVec;
111 std::vector<o2::ccdb::CcdbObjectInfo> mCcdbInfoHighPedChannelsVec;
112 std::vector<std::vector<int>> mHighPedChannelsVec;
113 std::vector<o2::ccdb::CcdbObjectInfo> mCcdbInfoPedEfficienciesVec;
114 std::vector<std::vector<float>> mPedEfficienciesVec;
115};
116} // end namespace cpv
117} // end namespace o2
118
119#endif /* CPV_PEDESTAL_CALIBRATIOR_H_ */
uint64_t TFType
const std::vector< o2::cpv::Pedestals > & getPedestalsVector() const
PedestalTimeSlot & emplaceNewSlot(bool front, TFType tstart, TFType tend) final
bool hasEnoughData(const PedestalTimeSlot &slot) const final
~PedestalCalibrator() final=default
void finalizeSlot(PedestalTimeSlot &slot) final
std::vector< o2::ccdb::CcdbObjectInfo > & getCcdbInfoEfficienciesVector()
const std::vector< std::vector< int > > & getThresholdsFEEVector() const
std::vector< o2::ccdb::CcdbObjectInfo > & getCcdbInfoThresholdsFEEVector()
std::vector< o2::ccdb::CcdbObjectInfo > & getCcdbInfoPedestalsVector()
const std::vector< std::vector< int > > & getHighPedChannelsVector() const
const std::vector< std::vector< int > > & getDeadChannelsVector() const
const std::vector< std::vector< float > > & getEfficienciesVector() const
std::vector< o2::ccdb::CcdbObjectInfo > & getCcdbInfoHighPedChannelsVector()
std::vector< o2::ccdb::CcdbObjectInfo > & getCcdbInfoDeadChannelsVector()
void fill(uint16_t amplitude)
PedestalSpectrum & operator+=(const PedestalSpectrum &rhs)
float getPeakMean(uint16_t iPeak)
float getPeakRMS(uint16_t iPeak)
GLboolean * data
Definition glcorearb.h:298
o2::cpv::Digit Digit
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
void fill(const gsl::span< const o2::cpv::Digit > data)
std::vector< PedestalSpectrum > mPedestalSpectra
void merge(const PedestalCalibData *prev)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"