// Copyright (2019-2023) Paul Scherrer Institute #include "JFModulePedestal.h" JFModulePedestal::JFModulePedestal() : JFModulePedestal(0) {} JFModulePedestal::JFModulePedestal(uint16_t default_value) : pedestal(RAW_MODULE_SIZE), pedestal_mask(RAW_MODULE_SIZE) { for (auto & i : pedestal) i = default_value; for (auto & i : pedestal_mask) i = (default_value > 16383) ? 2 : 0; collection_time = 0; frames = -1; } JFModulePedestal::JFModulePedestal(int default_value) : JFModulePedestal(static_cast(default_value)){} double JFModulePedestal::Mean() const { uint64_t ret = 0; for (auto & i : pedestal) ret += i; return static_cast(ret) / static_cast(RAW_MODULE_SIZE); } size_t JFModulePedestal::CountMaskedPixels() const { size_t ret = 0; for (auto i : pedestal_mask) { if (i != 0) ret++; } return ret; } void JFModulePedestal::SetCollectionTime(time_t input) { collection_time = input; } time_t JFModulePedestal::GetCollectionTime() const { return collection_time; } void JFModulePedestal::SetFrameCount(int64_t input) { frames = input; } int64_t JFModulePedestal::GetFrameCount() const { return frames; } const uint16_t *JFModulePedestal::GetPedestal() const { return pedestal.data(); } const uint8_t *JFModulePedestal::GetPedestalMask() const { return pedestal_mask.data(); } uint16_t *JFModulePedestal::GetPedestal() { return pedestal.data(); } uint8_t *JFModulePedestal::GetPedestalMask() { return pedestal_mask.data(); } void JFModulePedestal::ImportFPGAPedestal(const DeviceOutput *output) { auto pedestal_array = (const uint16_t*) output->pixels; for (int i = 0; i < RAW_MODULE_SIZE; i++) { pedestal[i] = pedestal_array[i]; if (pedestal[i] >= 16383) pedestal_mask[i] = 2; else pedestal_mask[i] = 0; } frames = output->module_statistics.packet_count; }