v1.0.0-rc.81

This commit is contained in:
2025-09-21 19:27:51 +02:00
parent 3ded4cd3ce
commit 5d9d2de4a4
243 changed files with 3401 additions and 935 deletions
+18
View File
@@ -52,6 +52,7 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) {
try {
auto dataset = std::make_shared<JFJochReaderDataset>();
master_file = std::make_unique<HDF5ReadOnlyFile>(filename);
dataset->experiment.DetectIceRings(true);
std::filesystem::path fsPath(filename);
dataset->experiment.FilePrefix(dataset_name(filename));
@@ -171,6 +172,10 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) {
dataset->experiment.IndexingAlgorithm(IndexingAlgorithmEnum::FFBIDX);
}
auto ring_current_A = master_file->GetOptFloat("/entry/source/current");
if (ring_current_A) dataset->experiment.RingCurrent_mA(ring_current_A.value() * 1000.0);
dataset->experiment.DetectIceRings(master_file->GetOptBool("/entry/instrument/detector/detectorSpecific/detect_ice_rings").value_or(false));
dataset->experiment.PoniRot1_rad(master_file->GetOptFloat("/entry/instrument/detector/transformations/rot1").value_or(0.0));
dataset->experiment.PoniRot2_rad(master_file->GetOptFloat("/entry/instrument/detector/transformations/rot2").value_or(0.0));
dataset->experiment.PoniRot3_rad(master_file->GetOptFloat("/entry/instrument/detector/transformations/rot3").value_or(0.0));
@@ -254,6 +259,14 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) {
}
}
// Read fluorescence spectrum if present
if (master_file->Exists("/entry/instrument/fluorescence")) {
auto energy = master_file->ReadOptVector<float>("/entry/instrument/fluorescence/energy");
auto data = master_file->ReadOptVector<float>("/entry/instrument/fluorescence/data");
if (!energy.empty() && energy.size() == data.size())
dataset->experiment.FluorescenceSpectrum(XrayFluorescenceSpectrum(energy, data));
}
auto detector_name = master_file->GetString("/entry/instrument/detector/description");
DetectorSetup detector = DetDECTRIS(image_size_x, image_size_y, detector_name, {});
@@ -431,6 +444,11 @@ bool JFJochHDF5Reader::LoadImage_i(std::shared_ptr<JFJochReaderDataset> &dataset
s.ice_ring = (spot_ice.at(i) != 0);
message.spots.emplace_back(s);
}
message.spot_count = source_file->ReadElement<uint32_t>("/entry/MX/peakCountUnfiltered", image_id);
message.spot_count_ice_rings = source_file->ReadElement<uint32_t>("/entry/MX/peakCountIceRingRes", image_id);
message.spot_count_low_res = source_file->ReadElement<uint32_t>("/entry/MX/peakCountLowRes", image_id);
message.spot_count_indexed = source_file->ReadElement<uint32_t>("/entry/MX/peakCountIndexed", image_id);
}
if (!dataset->az_int_bin_to_q.empty()) {
+2
View File
@@ -57,6 +57,7 @@ std::shared_ptr<JFJochReaderDataset> JFJochHttpReader::UpdateDataset_i() {
return {};
auto dataset = std::make_shared<JFJochReaderDataset>();
dataset->experiment.DetectIceRings(true);
// JFJochReader is always using int32_t
dataset->experiment.BitDepthImage(32);
@@ -65,6 +66,7 @@ std::shared_ptr<JFJochReaderDataset> JFJochHttpReader::UpdateDataset_i() {
dataset->experiment.BeamX_pxl(msg->start_message->beam_center_x);
dataset->experiment.BeamY_pxl(msg->start_message->beam_center_y);
dataset->experiment.DetectorDistance_mm(msg->start_message->detector_distance * 1000.0);
dataset->experiment.DetectIceRings(msg->start_message->detect_ice_rings.value_or(false));
dataset->az_int_bin_to_q = msg->start_message->az_int_bin_to_q;
dataset->az_int_bin_to_phi = msg->start_message->az_int_bin_to_phi;
dataset->q_bins = msg->start_message->az_int_q_bin_count.value_or(0);
+5 -1
View File
@@ -72,6 +72,8 @@ void JFJochReader::UpdateGeomMetadata(const DiffractionExperiment &experiment) {
return;
auto new_dataset = std::make_shared<JFJochReaderDataset>(*dataset);
// At the moment subset of options is limited to safe ones...need to change it in the future
new_dataset->experiment.BeamX_pxl(experiment.GetBeamX_pxl());
new_dataset->experiment.BeamY_pxl(experiment.GetBeamY_pxl());
new_dataset->experiment.DetectorDistance_mm(experiment.GetDetectorDistance_mm());
@@ -80,7 +82,9 @@ void JFJochReader::UpdateGeomMetadata(const DiffractionExperiment &experiment) {
new_dataset->experiment.PoniRot2_rad(experiment.GetDatasetSettings().GetPoniRot2_rad());
new_dataset->experiment.PoniRot3_rad(experiment.GetDatasetSettings().GetPoniRot3_rad());
new_dataset->experiment.SetUnitCell(experiment.GetUnitCell());
new_dataset->experiment.ImportIndexingSettings(experiment.GetIndexingSettings());
new_dataset->experiment.ImportBraggIntegrationSettings(experiment.GetBraggIntegrationSettings());
new_dataset->experiment.DetectIceRings(experiment.IsDetectIceRings());
dataset = new_dataset;
}
+6
View File
@@ -241,3 +241,9 @@ std::vector<float> JFJochReaderImage::GetAzInt1D_BinToQ() const {
} else
return {};
}
std::shared_ptr<JFJochReaderDataset> JFJochReaderImage::CreateMutableDataset() {
std::shared_ptr<JFJochReaderDataset> new_dataset = std::make_shared<JFJochReaderDataset>(*dataset);
dataset = new_dataset;
return new_dataset;
}
+3 -1
View File
@@ -17,7 +17,7 @@ constexpr static int32_t ERROR_PXL_VALUE = INT32_MIN;
constexpr static int32_t SATURATED_PXL_VALUE = INT32_MAX;
class JFJochReaderImage {
const std::shared_ptr<const JFJochReaderDataset> dataset;
std::shared_ptr<const JFJochReaderDataset> dataset;
std::vector<int32_t> image; // Image in the reader must be 32-bit signed, uncompressed
DataMessage message;
@@ -51,6 +51,8 @@ public:
// Functions that change the content
void CalcROI(const ROIElement *input);
std::shared_ptr<JFJochReaderDataset> CreateMutableDataset();
};
#endif //JFJOCH_JFJOCHREADERIMAGE_H