// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "../common/print_license.h" #include "../common/Logger.h" #include "../detector_control/DectrisSimplonClient.h" #include "../preview/JFJochTIFF.h" int main(int argc, char **argv) { print_license("jfjoch_simplon_test"); Logger logger("jfjoch_simplon_test"); logger.Verbose(true); if ((argc != 2) && (argc != 3)) { std::cout << "Usage: ./jfjoch_simplon_test {}" << std::endl; exit(EXIT_FAILURE); } uint16_t port = 80; if (argc == 3) port = atoi(argv[2]); DetectorSetup setup = DetDECTRIS(1,1,"Detector1", argv[1]); DectrisSimplonClient cli(argv[1], port); DiffractionExperiment experiment(setup); try { cli.ReadDetectorConfig(setup); } catch (const JFJochException &e) { logger.ErrorException(e); exit(EXIT_FAILURE); } logger.Info("State {}", to_string(cli.GetState())); logger.Info("Serial number {}", setup.GetSerialNumber() ); logger.Info("Width {:8d} pxl", setup.GetGeometry().GetWidth(true)); logger.Info("Height {:8d} pxl", setup.GetGeometry().GetHeight(true)); logger.Info("Sensor material {}", setup.GetSensorMaterial() ); logger.Info("Sensor thickness {:8.1f} um", setup.GetSensorThickness_um()); logger.Info("Pixel size {:8.1f} um", setup.GetPixelSize_mm() * 1e3f); logger.Info("Readout time {:8d} ", setup.GetReadOutTime().count()); logger.Info("Min count time {:8d}", setup.GetMinCountTime().count()); logger.Info("Min frame time {:8d}", setup.GetMinFrameTime().count()); logger.Info("Min threshold {:8.2f} keV", setup.GetMinThreshold_keV()); auto mask = cli.GetPixelMask(); logger.Info("Pixel mask size {:8d}", mask.size()); CompressedImage image(mask, setup.GetGeometry().GetWidth(true), setup.GetGeometry().GetHeight(true)); WriteTIFFToFile("det_mask.tiff", image); if (setup.GetBitDepthReadout()) logger.Info("Bit depth readout {:8d}", setup.GetBitDepthReadout().value()); if (setup.GetBitDepthImage()) logger.Info("Bit depth image {:8d}", setup.GetBitDepthImage().value()); experiment.FrameTime(std::chrono::milliseconds(100), std::chrono::milliseconds(10)) .IncidentEnergy_keV(8.0) .NumTriggers(5).ImagesPerTrigger(2).BeamX_pxl(234).BeamY_pxl(345).DetectorDistance_mm(100.0); experiment.ImportDetectorSettings(experiment.GetDetectorSettings().EigerThreshold_keV(3.2)); try { cli.ConfigureDetector(experiment); } catch (const JFJochException &e) { logger.ErrorException(e); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }