// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JUNGFRAUJOCH_DATASETSETTINGS_H #define JUNGFRAUJOCH_DATASETSETTINGS_H #include #include #include #include "UnitCell.h" #include "Coord.h" #include "../compression/CompressionAlgorithmEnum.h" #include "JFJochMessages.h" #include "XrayFluorescenceSpectrum.h" class DatasetSettings { int64_t images_per_trigger; int64_t ntrigger; float beam_x_pxl; float beam_y_pxl; float detector_distance_mm; float photon_energy_keV; std::string file_prefix; int64_t images_per_file; CompressionAlgorithm compression; std::string sample_name; std::optional unit_cell; std::optional space_group_number; std::optional total_flux; std::optional attenuator_transmission; std::optional ring_current_mA; std::optional goniometer; std::optional grid_scan; std::optional sample_temperature_K; nlohmann::json image_appendix; nlohmann::json header_appendix; float data_reduction_factor_serialmx; std::optional image_time; std::optional run_number; std::optional run_name; std::string group; std::optional compression_poisson_factor; std::optional pixel_value_low_threshold; std::optional pixel_value_high_threshold; std::optional save_calibration; bool write_nxmx_hdf5_master; std::optional polarization_factor; float poni_rot_1_rad; float poni_rot_2_rad; float poni_rot_3_rad; bool spot_finding_enable; int64_t max_spot_count; bool detect_ice_rings; // Enable special handling of ice rings XrayFluorescenceSpectrum fluorescence_spectrum; public: DatasetSettings(); DatasetSettings& ImagesPerTrigger(int64_t input); DatasetSettings& NumTriggers(int64_t triggers); DatasetSettings& PhotonEnergy_keV(float input); DatasetSettings& BeamX_pxl(float input); DatasetSettings& BeamY_pxl(float input); DatasetSettings& DetectorDistance_mm(float input); DatasetSettings& FilePrefix(std::string input); DatasetSettings& Compression(CompressionAlgorithm input); DatasetSettings& SetUnitCell(const std::optional &cell); DatasetSettings& SpaceGroupNumber(std::optional input); DatasetSettings& SampleName(std::string input); DatasetSettings& AttenuatorTransmission(const std::optional &input); DatasetSettings& TotalFlux(const std::optional &input); DatasetSettings& Goniometer(const std::optional& input); DatasetSettings& GridScan(const std::optional& input); DatasetSettings& HeaderAppendix(const nlohmann::json& input); DatasetSettings& ImageAppendix(const nlohmann::json& input); DatasetSettings& ImagesPerFile(int64_t input); DatasetSettings& RunNumber(const std::optional &run_number); DatasetSettings& RunName(const std::optional &input); DatasetSettings& ExperimentGroup(const std::string &group); DatasetSettings& ImageTime(const std::optional &input); DatasetSettings& LossyCompressionSerialMX(float input); DatasetSettings& LossyCompressionPoisson(std::optional input); DatasetSettings& WriteNXmxHDF5Master(bool input); DatasetSettings& SaveCalibration(std::optional input); DatasetSettings& PixelValueLowThreshold(const std::optional &input); DatasetSettings& PixelValueHighThreshold(const std::optional &input); DatasetSettings& PolarizationFactor(const std::optional &input); DatasetSettings& PoniRot1_rad(float input); DatasetSettings& PoniRot2_rad(float input); DatasetSettings& PoniRot3_rad(float input); DatasetSettings& RingCurrent_mA(const std::optional &input); DatasetSettings& SampleTemperature_K(const std::optional &input); DatasetSettings& SpotFindingEnable(bool input); DatasetSettings& MaxSpotCount(int64_t input); DatasetSettings& DetectIceRings(bool input); DatasetSettings& FluorescenceSpectrum(const XrayFluorescenceSpectrum& input); std::optional GetAttenuatorTransmission() const; std::optional GetTotalFlux() const; std::optional &Goniometer(); std::optional &GridScan(); const std::optional &GetGoniometer() const; const std::optional &GetGridScan() const; const nlohmann::json& GetHeaderAppendix() const; const nlohmann::json& GetImageAppendix() const; std::optional GetUnitCell() const; std::optional GetSpaceGroupNumber() const; std::string GetSampleName() const; float GetPhotonEnergy_keV() const; float GetBeamX_pxl() const; float GetBeamY_pxl() const; float GetDetectorDistance_mm() const; Coord GetScatteringVector() const; std::string GetFilePrefix() const; CompressionAlgorithm GetCompressionAlgorithm() const; int64_t GetNumTriggers() const; int64_t GetImageNumPerTrigger() const; int64_t GetImagesPerFile() const; std::optional GetRunNumber() const; std::optional GetRunName() const; std::string GetExperimentGroup() const; std::optional GetImageTime() const; float GetLossyCompressionSerialMX() const; std::optional GetLossyCompressionPoisson() const; std::optional GetPixelValueLowThreshold() const; std::optional GetPixelValueHighThreshold() const; bool IsWriteNXmxHDF5Master() const; std::optional IsSaveCalibration() const; std::optional GetPolarizationFactor() const; float GetPoniRot1_rad() const; float GetPoniRot2_rad() const; float GetPoniRot3_rad() const; std::optional GetRingCurrent_mA() const; std::optional GetSampleTemperature_K() const; bool IsSpotFindingEnabled() const; int64_t GetMaxSpotCount() const; bool IsDetectIceRings() const; const XrayFluorescenceSpectrum &GetFluorescenceSpectrum() const; }; #endif //JUNGFRAUJOCH_DATASETSETTINGS_H