// Copyright (2019-2023) Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-or-later #include "DetectorSetup.h" #include "JFJochException.h" DetectorSetup::DetectorSetup(const DetectorGeometry &in_geometry) : DetectorSetup(in_geometry, "Detector", std::vector()) {} DetectorSetup::DetectorSetup(const DetectorGeometry &in_geometry, const std::string &in_description, const std::vector &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 &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 &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); } const std::vector &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()); for (const auto& iter: det_modules_hostname) ret.add_module_hostname(iter); *ret.mutable_geometry() = geometry; ret.set_type(JFJochProtoBuf::DetectorType::JUNGFRAU); return ret; }