Fixes after MAX IV experiment
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user