// Copyright (2019-2023) Paul Scherrer Institute #include "JFModulePedestal.h" #include #include "../common/JFJochException.h" JFModulePedestal::JFModulePedestal() : JFModulePedestal(0) {} JFModulePedestal::JFModulePedestal(uint16_t default_value) { data = std::make_unique(); 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(default_value)){} JFModulePedestal::JFModulePedestal(const JFModulePedestal &other) { data = std::make_unique(); *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(ret) / static_cast(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(); }