DetectorSetup: Added class that describes detector (geometry, calibration, hostname, etc.) => in the future this should be abstract class
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
// 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<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);
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
for (const auto& iter: det_modules_hostname)
|
||||
ret.add_module_hostname(iter);
|
||||
|
||||
*ret.mutable_geometry() = geometry;
|
||||
ret.set_type(JFJochProtoBuf::DetectorType::JUNGFRAU);
|
||||
return ret;
|
||||
}
|
||||
Reference in New Issue
Block a user