Files
Jungfraujoch/jungfrau/JFModulePedestal.cpp
2023-12-09 12:08:39 +01:00

78 lines
1.9 KiB
C++

// 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 = 0;
collection_time = 0;
frames = -1;
}
JFModulePedestal::JFModulePedestal(int default_value)
: JFModulePedestal(static_cast<uint16_t>(default_value)){}
double JFModulePedestal::Mean() const {
uint64_t ret = 0;
for (auto & i : pedestal)
ret += i;
return static_cast<double>(ret) / static_cast<double>(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] + 2) / 4;
if (pedestal_array[i] >= 65534)
pedestal_mask[i] = 2;
else
pedestal_mask[i] = 0;
}
frames = output->module_statistics.packet_count;
}