Files
Jungfraujoch/common/DetectorSetup.cpp

74 lines
2.6 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#include "DetectorSetup.h"
#include "JFJochException.h"
DetectorSetup::DetectorSetup(const DetectorGeometry &in_geometry)
: DetectorSetup(in_geometry, "Detector", std::vector<std::string>()) {}
DetectorSetup::DetectorSetup(const DetectorGeometry &in_geometry,
const std::string &in_description,
const std::vector<std::string> &in_det_modules_hostname) :
geometry(in_geometry), description(in_description), det_modules_hostname(in_det_modules_hostname) {
if (!det_modules_hostname.empty() && (geometry.GetModulesNum() != det_modules_hostname.size()))
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Mismatch between number of modules in detector geometry and hostname");
}
const DetectorGeometry &DetectorSetup::GetGeometry() const {
return geometry;
}
const std::vector<std::string> &DetectorSetup::GetDetectorModuleHostname() const {
return det_modules_hostname;
}
uint64_t DetectorSetup::GetModulesNum() const {
return geometry.GetModulesNum();
}
std::string DetectorSetup::GetDescription() const {
return description;
}
JFJochProtoBuf::DetectorType DetectorSetup::GetDetectorType() const {
return JFJochProtoBuf::DetectorType::JUNGFRAU;
}
float DetectorSetup::GetPixelSize_mm() const {
return PIXEL_SIZE_IN_MM;
}
void DetectorSetup::LoadGain(const std::vector<std::string> &filenames) {
if (filenames.size() != GetModulesNum())
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Mismatch in number of gain calibration files");
for (const auto& i: filenames)
gain_calibration.emplace_back(i);
}
DetectorSetup &DetectorSetup::UDPInterfaceCount(int64_t input) {
if ((input != 1) && (input != 2))
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Only 1 and 2 are supported as UDP interface count");
udp_interface_count = input;
return *this;
}
const std::vector<JFModuleGainCalibration> &DetectorSetup::GetGainCalibration() const {
return gain_calibration;
}
DetectorSetup::operator JFJochProtoBuf::Detector() const {
JFJochProtoBuf::Detector ret;
ret.set_nmodules(GetModulesNum());
ret.set_description(GetDescription());
ret.set_pixel_size_mm(GetPixelSize_mm());
ret.set_udp_interface_count(udp_interface_count);
for (const auto& iter: det_modules_hostname)
ret.add_module_hostname(iter);
*ret.mutable_geometry() = geometry;
ret.set_type(JFJochProtoBuf::DetectorType::JUNGFRAU);
return ret;
}