Fixes after MAX IV experiment

This commit is contained in:
2024-02-05 17:18:16 +01:00
parent 91a0960303
commit babb1a5c8d
151 changed files with 4395 additions and 1477 deletions

View File

@@ -115,12 +115,18 @@ void DetectorWrapper::Start(const DiffractionExperiment& experiment) {
}
}
auto tx_delay = experiment.GetDetectorSetup().GetTxDelay();
if (tx_delay.size() == experiment.GetModulesNum()) {
for (int i = 0 ; i < tx_delay.size(); i++)
det.setTransmissionDelayFrame(tx_delay[i], {i});
}
if (experiment.IsUsingGainHG0())
det.setSettings(slsDetectorDefs::HIGHGAIN0);
else
det.setSettings(slsDetectorDefs::GAIN0);
det.setDelayAfterTrigger(experiment.GetDetectorDelay());
det.setNextFrameNumber(1);
if (experiment.GetNumTriggers() == 1) {
@@ -220,19 +226,24 @@ void DetectorWrapper::Trigger() {
logger.Info(" ... done");
}
DetectorWrapper::DetectorState DetectorWrapper::GetState() const {
DetectorState DetectorWrapper::GetState() const {
try {
bool is_idle = true;
for (auto & i : det.getDetectorStatus()) {
bool is_waiting = true;
for (const auto & i : det.getDetectorStatus()) {
if (i == slsDetectorDefs::runStatus::ERROR)
return DetectorState::ERROR;
if ((i != slsDetectorDefs::runStatus::IDLE) &&
(i != slsDetectorDefs::runStatus::STOPPED) &&
(i != slsDetectorDefs::runStatus::RUN_FINISHED))
is_idle = false;
if (i != slsDetectorDefs::WAITING)
is_waiting = false;
}
if (is_idle)
return DetectorState::IDLE;
else if (is_waiting)
return DetectorState::WAITING;
else
return DetectorState::BUSY;
} catch (std::exception &e) {
@@ -240,7 +251,30 @@ DetectorWrapper::DetectorState DetectorWrapper::GetState() const {
}
}
int64_t DetectorWrapper::GetFirmwareVersion() {
int64_t DetectorWrapper::GetNumberOfTriggersLeft() const {
int64_t ret = 0;
for (const auto & i : det.getNumberOfTriggersLeft()) {
if (i > ret)
ret = i;
}
return ret;
}
DetectorPowerState DetectorWrapper::GetPowerState() const {
uint64_t count_on = 0;
for (const auto &i : det.getPowerChip()) {
if (i) count_on++;
}
if (count_on == 0)
return DetectorPowerState::OFF;
else if (count_on == det.size())
return DetectorPowerState::ON;
else
return DetectorPowerState::PARTIAL;
}
int64_t DetectorWrapper::GetFirmwareVersion() const {
try {
auto result = det.getFirmwareVersion();
return result.squash(0x0);
@@ -249,11 +283,33 @@ int64_t DetectorWrapper::GetFirmwareVersion() {
}
}
std::string DetectorWrapper::GetDetectorServerVersion() {
std::string DetectorWrapper::GetDetectorServerVersion() const {
try {
auto result = det.getDetectorServerVersion();
return result.squash("");
return result.squash("mixed");
} catch (std::exception &e) {
throw JFJochException(JFJochExceptionCategory::Detector, e.what());
}
}
std::vector<int64_t> DetectorWrapper::GetFPGATemperatures() const {
try {
auto result = det.getTemperature(slsDetectorDefs::TEMPERATURE_FPGA);
std::vector<int64_t> ret;
for (int i = 0; i < result.size(); i++)
ret.push_back(result[i]);
return ret;
} catch (std::exception &e) {
throw JFJochException(JFJochExceptionCategory::Detector, e.what());
}
}
DetectorStatus DetectorWrapper::GetStatus() const {
DetectorStatus status;
status.detector_server_version = GetDetectorServerVersion();
status.detector_state = GetState();
status.power_state = GetPowerState();
status.remaining_triggers = GetNumberOfTriggersLeft();
status.temperature_fpga_degC = GetFPGATemperatures();
return status;
}