Files
Jungfraujoch/jungfrau/JFModulePedestal.h

58 lines
1.7 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_JFMODULEPEDESTAL_H
#define JUNGFRAUJOCH_JFMODULEPEDESTAL_H
#include <vector>
#include <cstdint>
#include <ctime>
#include <cmath>
#include <memory>
#include <jfjoch.pb.h>
#include "../common/Definitions.h"
struct JFModulePedestalData {
uint16_t pedestal[RAW_MODULE_SIZE];
uint8_t pedestal_mask[RAW_MODULE_SIZE];
time_t collection_time;
int64_t frames;
};
class JFModulePedestal {
std::unique_ptr<JFModulePedestalData> data;
public:
JFModulePedestal();
explicit JFModulePedestal(uint16_t default_value);
explicit JFModulePedestal(int default_value);
JFModulePedestal(const JFModulePedestal& other);
explicit JFModulePedestal(const JFModulePedestalData *other);
JFModulePedestal& operator=(const JFModulePedestal& other);
[[nodiscard]] const JFModulePedestalData* Serialized() const;
JFModulePedestal(const JFJochProtoBuf::JFPedestal& pedestal); // deserialize
[[nodiscard]] operator JFJochProtoBuf::JFPedestal() const; // serialize
[[nodiscard]] double Mean() const;
template<class T> void LoadPedestal(const std::vector<T> &vector) {
for (int i = 0; i < RAW_MODULE_SIZE; i++) {
data->pedestal[i] = std::lround(vector[i]);
}
}
[[nodiscard]] const uint16_t* GetPedestal() const;
[[nodiscard]] const uint8_t* GetPedestalMask() const;
[[nodiscard]] uint16_t* GetPedestal();
[[nodiscard]] uint8_t* GetPedestalMask();
[[nodiscard]] size_t CountMaskedPixels() const;
void SetCollectionTime(time_t input);
[[nodiscard]] time_t GetCollectionTime() const;
void SetFrameCount(int64_t input);
[[nodiscard]] int64_t GetFrameCount() const;
};
#endif //JUNGFRAUJOCH_JFMODULEPEDESTAL_H