Files
Jungfraujoch/jungfrau/JFModulePedestal.cpp

102 lines
2.7 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#include "JFModulePedestal.h"
#include <bitshuffle/bitshuffle.h>
#include "../common/JFJochException.h"
JFModulePedestal::JFModulePedestal()
: JFModulePedestal(0) {}
JFModulePedestal::JFModulePedestal(uint16_t default_value) {
data = std::make_unique<JFModulePedestalData>();
for (auto & i : data->pedestal)
i = default_value;
for (auto & i : data->pedestal_mask)
i = 0;
data->collection_time = 0;
data->frames = -1;
}
JFModulePedestal::JFModulePedestal(int default_value)
: JFModulePedestal(static_cast<uint16_t>(default_value)){}
JFModulePedestal::JFModulePedestal(const JFModulePedestal &other) {
data = std::make_unique<JFModulePedestalData>();
*data = *other.data;
}
JFModulePedestal& JFModulePedestal::operator=(const JFModulePedestal& other) {
*data = *other.data;
return *this;
}
double JFModulePedestal::Mean() const {
uint64_t ret = 0;
for (auto & i : data->pedestal)
ret += i;
return static_cast<double>(ret) / static_cast<double>(RAW_MODULE_SIZE);
}
JFModulePedestal::operator JFJochProtoBuf::JFPedestal() const {
JFJochProtoBuf::JFPedestal serialized;
serialized.set_pedestal(data.get(), sizeof(JFModulePedestalData));
return serialized;
}
JFModulePedestal::JFModulePedestal(const JFJochProtoBuf::JFPedestal &serialized) : JFModulePedestal() {
if (serialized.pedestal().size() != sizeof(JFModulePedestalData))
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Mismatch in serialized pedestal size");
memcpy(data.get(), serialized.pedestal().data(), sizeof(JFModulePedestalData));
}
size_t JFModulePedestal::CountMaskedPixels() const {
size_t ret = 0;
for (auto i : data->pedestal_mask) {
if (i != 0) ret++;
}
return ret;
}
void JFModulePedestal::SetCollectionTime(time_t input) {
data->collection_time = input;
}
time_t JFModulePedestal::GetCollectionTime() const {
return data->collection_time;
}
void JFModulePedestal::SetFrameCount(int64_t input) {
data->frames = input;
}
int64_t JFModulePedestal::GetFrameCount() const {
return data->frames;
}
const uint16_t *JFModulePedestal::GetPedestal() const {
return data->pedestal;
}
const uint8_t *JFModulePedestal::GetPedestalMask() const {
return data->pedestal_mask;
}
uint16_t *JFModulePedestal::GetPedestal() {
return data->pedestal;
}
uint8_t *JFModulePedestal::GetPedestalMask() {
return data->pedestal_mask;
}
JFModulePedestal::JFModulePedestal(const JFModulePedestalData *other) {
*data = *other;
}
const JFModulePedestalData *JFModulePedestal::Serialized() const {
return data.get();
}