jfjoch_writer: Reserve all metadata vectors when opening file
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 12m30s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 13m30s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 14m10s
Build Packages / Generate python client (push) Successful in 12s
Build Packages / build:rpm (rocky8) (push) Successful in 14m14s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m23s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 14m56s
Build Packages / Build documentation (push) Successful in 39s
Build Packages / build:rpm (rocky9) (push) Successful in 14m58s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 15m12s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 7m29s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 8m44s
Build Packages / Unit tests (push) Failing after 3h12m6s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 12m30s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 13m30s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 14m10s
Build Packages / Generate python client (push) Successful in 12s
Build Packages / build:rpm (rocky8) (push) Successful in 14m14s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m23s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 14m56s
Build Packages / Build documentation (push) Successful in 39s
Build Packages / build:rpm (rocky9) (push) Successful in 14m58s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 15m12s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 7m29s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 8m44s
Build Packages / Unit tests (push) Failing after 3h12m6s
This commit is contained in:
@@ -139,7 +139,7 @@ void HDF5DataFile::CreateFile(const DataMessage& msg) {
|
||||
data_set = std::make_unique<HDF5DataSet>(*data_file, "/entry/data/data", data_type, data_space, dcpl);
|
||||
data_set->SetExtent({images_per_file, ypixel, xpixel});
|
||||
for (auto &p: plugins)
|
||||
p->OpenFile(*data_file, msg);
|
||||
p->OpenFile(*data_file, msg, images_per_file);
|
||||
}
|
||||
|
||||
void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
|
||||
@@ -11,7 +11,7 @@ class HDF5DataFilePlugin {
|
||||
protected:
|
||||
size_t max_image_number = 0;
|
||||
public:
|
||||
virtual void OpenFile(HDF5File &data_file, const DataMessage& msg) = 0;
|
||||
virtual void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) = 0;
|
||||
virtual void Write(const DataMessage& msg, uint64_t image_number) = 0;
|
||||
virtual void WriteFinal(HDF5File &data_file) = 0;
|
||||
virtual ~HDF5DataFilePlugin() = default;
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
|
||||
#include "HDF5DataFilePluginAzInt.h"
|
||||
|
||||
#define RESERVE_IMAGES 10000
|
||||
|
||||
HDF5DataFilePluginAzInt::HDF5DataFilePluginAzInt(const StartMessage &message) :
|
||||
az_int_bin_to_q(message.az_int_bin_to_q),
|
||||
az_int_bin_to_two_theta(message.az_int_bin_to_two_theta),
|
||||
@@ -13,7 +11,7 @@ azimuthal_bins(message.az_int_phi_bin_count.value_or(1)),
|
||||
q_bins(message.az_int_q_bin_count.value_or(1)){
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginAzInt::OpenFile(HDF5File &data_file, const DataMessage &msg) {
|
||||
void HDF5DataFilePluginAzInt::OpenFile(HDF5File &data_file, const DataMessage &msg, size_t images_per_file) {
|
||||
if (az_int_bin_to_q.empty() || q_bins <= 0 || azimuthal_bins <= 0)
|
||||
return;
|
||||
|
||||
@@ -26,7 +24,7 @@ void HDF5DataFilePluginAzInt::OpenFile(HDF5File &data_file, const DataMessage &m
|
||||
if (!az_int_bin_to_phi.empty())
|
||||
data_file.SaveVector("/entry/azint/bin_to_phi", az_int_bin_to_phi, dim);
|
||||
|
||||
az_int_image.reserve(RESERVE_IMAGES * azimuthal_bins * q_bins);
|
||||
az_int_image.reserve(images_per_file * azimuthal_bins * q_bins);
|
||||
az_int_image.resize(msg.number * azimuthal_bins * q_bins);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class HDF5DataFilePluginAzInt : public HDF5DataFilePlugin {
|
||||
// std::unique_ptr<HDF5DataSet> dataset;
|
||||
public:
|
||||
explicit HDF5DataFilePluginAzInt(const StartMessage &start);
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg) override;
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;
|
||||
void Write(const DataMessage& msg, uint64_t image_number) override;
|
||||
void WriteFinal(HDF5File &data_file) override;
|
||||
};
|
||||
|
||||
@@ -3,7 +3,17 @@
|
||||
|
||||
#include "HDF5DataFilePluginDetector.h"
|
||||
|
||||
void HDF5DataFilePluginDetector::OpenFile(HDF5File &in_data_file, const DataMessage &msg) {}
|
||||
void HDF5DataFilePluginDetector::OpenFile(HDF5File &in_data_file, const DataMessage &msg, size_t images_per_file) {
|
||||
jf_info.reserve(images_per_file);
|
||||
storage_cell.reserve(images_per_file);
|
||||
receiver_aq_dev_delay.reserve(images_per_file);
|
||||
receiver_free_buffers.reserve(images_per_file);
|
||||
efficiency.reserve(images_per_file);
|
||||
packets_received.reserve(images_per_file);
|
||||
packets_expected.reserve(images_per_file);
|
||||
pixel_sum.reserve(images_per_file);
|
||||
processing_time.reserve(images_per_file);
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginDetector::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
if (msg.jf_info.has_value())
|
||||
|
||||
@@ -18,7 +18,7 @@ class HDF5DataFilePluginDetector : public HDF5DataFilePlugin {
|
||||
AutoIncrVector<int64_t> pixel_sum;
|
||||
AutoIncrVector<float> processing_time;
|
||||
public:
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg) override;
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;
|
||||
void Write(const DataMessage& msg, uint64_t image_number) override;
|
||||
void WriteFinal(HDF5File &data_file) override;
|
||||
};
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
#include "HDF5DataFilePluginImageStats.h"
|
||||
#define RESERVE_IMAGES 1000
|
||||
|
||||
void HDF5DataFilePluginImageStats::OpenFile(HDF5File &data_file, const DataMessage &msg) {
|
||||
max_value.reserve(RESERVE_IMAGES);
|
||||
void HDF5DataFilePluginImageStats::OpenFile(HDF5File &data_file, const DataMessage &msg, size_t images_per_file) {
|
||||
max_value.reserve(images_per_file);
|
||||
min_value.reserve(images_per_file);
|
||||
error_pixels.reserve(images_per_file);
|
||||
saturated_pixels.reserve(images_per_file);
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginImageStats::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
@@ -23,7 +25,7 @@ void HDF5DataFilePluginImageStats::WriteFinal(HDF5File &data_file) {
|
||||
HDF5Group(data_file, "/entry/image").NXClass("NXcollection");
|
||||
if (!max_value.empty())
|
||||
data_file.SaveVector("/entry/image/max_value", max_value.vec());
|
||||
if (!max_value.empty())
|
||||
if (!min_value.empty())
|
||||
data_file.SaveVector("/entry/image/min_value", min_value.vec());
|
||||
if (!error_pixels.empty())
|
||||
data_file.SaveVector("/entry/image/error_pixels", error_pixels.vec());
|
||||
|
||||
@@ -14,12 +14,11 @@ class HDF5DataFilePluginImageStats : public HDF5DataFilePlugin {
|
||||
AutoIncrVector<int64_t> error_pixels;
|
||||
AutoIncrVector<int64_t> saturated_pixels;
|
||||
public:
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg) override;
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;
|
||||
void Write(const DataMessage& msg, uint64_t image_number) override;
|
||||
void WriteFinal(HDF5File &data_file) override;
|
||||
|
||||
~HDF5DataFilePluginImageStats() override = default;
|
||||
};
|
||||
|
||||
|
||||
#endif //JFJOCH_HDF5DATAFILEPLUGINIMAGESTATS_H
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
#include "HDF5DataFilePluginMX.h"
|
||||
#define RESERVE_IMAGES 1000
|
||||
|
||||
inline std::string to_bravais_code(const std::optional<LatticeMessage> &lm_opt) {
|
||||
if (!lm_opt.has_value()) return "";
|
||||
@@ -50,38 +49,50 @@ HDF5DataFilePluginMX::HDF5DataFilePluginMX(const StartMessage &msg)
|
||||
: max_spots(msg.max_spot_count), indexing(msg.indexing_algorithm != IndexingAlgorithmEnum::None) {
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginMX::OpenFile(HDF5File &data_file, const DataMessage &msg) {
|
||||
bkg_estimate.reserve(RESERVE_IMAGES);
|
||||
void HDF5DataFilePluginMX::OpenFile(HDF5File &data_file, const DataMessage &msg, size_t images_per_file) {
|
||||
bkg_estimate.reserve(images_per_file);
|
||||
|
||||
if (max_spots == 0)
|
||||
return;
|
||||
|
||||
spot_x.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_y.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_int.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_indexed.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_ice_ring.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_h.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_k.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_l.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_dist_ewald.reserve(max_spots * RESERVE_IMAGES);
|
||||
spot_x.reserve(max_spots * images_per_file);
|
||||
spot_y.reserve(max_spots * images_per_file);
|
||||
spot_int.reserve(max_spots * images_per_file);
|
||||
spot_indexed.reserve(max_spots * images_per_file);
|
||||
spot_ice_ring.reserve(max_spots * images_per_file);
|
||||
spot_h.reserve(max_spots * images_per_file);
|
||||
spot_k.reserve(max_spots * images_per_file);
|
||||
spot_l.reserve(max_spots * images_per_file);
|
||||
spot_dist_ewald.reserve(max_spots * images_per_file);
|
||||
|
||||
beam_corr_x.reserve(RESERVE_IMAGES);
|
||||
beam_corr_y.reserve(RESERVE_IMAGES);
|
||||
spot_x.reserve(max_spots * images_per_file);
|
||||
spot_y.reserve(max_spots * images_per_file);
|
||||
spot_int.reserve(max_spots * images_per_file);
|
||||
spot_ice_ring.reserve(max_spots * images_per_file);
|
||||
spot_h.reserve(max_spots * images_per_file);
|
||||
spot_k.reserve(max_spots * images_per_file);
|
||||
spot_l.reserve(max_spots * images_per_file);
|
||||
spot_dist_ewald.reserve(max_spots * images_per_file);
|
||||
if (indexing)
|
||||
spot_indexed.reserve(max_spots * images_per_file);
|
||||
if (indexing)
|
||||
indexed_lattice.reserve(images_per_file * 9);
|
||||
|
||||
npeaks.reserve(RESERVE_IMAGES);
|
||||
strong_pixel_count.reserve(RESERVE_IMAGES);
|
||||
indexed.reserve(RESERVE_IMAGES);
|
||||
profile_radius.reserve(RESERVE_IMAGES);
|
||||
mosaicity_deg.reserve(RESERVE_IMAGES);
|
||||
b_factor.reserve(RESERVE_IMAGES);
|
||||
indexed_lattice.reserve(9 * RESERVE_IMAGES);
|
||||
resolution_estimate.reserve(RESERVE_IMAGES);
|
||||
beam_corr_x.reserve(images_per_file);
|
||||
beam_corr_y.reserve(images_per_file);
|
||||
|
||||
spot_count_total.reserve(RESERVE_IMAGES);
|
||||
spot_count_ice.reserve(RESERVE_IMAGES);
|
||||
spot_count_indexed.reserve(RESERVE_IMAGES);
|
||||
spot_count_low_res.reserve(RESERVE_IMAGES);
|
||||
npeaks.reserve(images_per_file);
|
||||
strong_pixel_count.reserve(images_per_file);
|
||||
indexed.reserve(images_per_file);
|
||||
profile_radius.reserve(images_per_file);
|
||||
mosaicity_deg.reserve(images_per_file);
|
||||
b_factor.reserve(images_per_file);
|
||||
resolution_estimate.reserve(images_per_file);
|
||||
|
||||
spot_count_total.reserve(images_per_file);
|
||||
spot_count_ice.reserve(images_per_file);
|
||||
spot_count_indexed.reserve(images_per_file);
|
||||
spot_count_low_res.reserve(images_per_file);
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginMX::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
|
||||
@@ -51,7 +51,7 @@ class HDF5DataFilePluginMX : public HDF5DataFilePlugin {
|
||||
AutoIncrVector<std::string> bravais_lattice;
|
||||
public:
|
||||
explicit HDF5DataFilePluginMX(const StartMessage& msg);
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg) override;
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;
|
||||
void Write(const DataMessage& msg, uint64_t image_number) override;
|
||||
void WriteFinal(HDF5File &data_file) override;
|
||||
};
|
||||
|
||||
@@ -3,20 +3,31 @@
|
||||
|
||||
#include "HDF5DataFilePluginROI.h"
|
||||
|
||||
#define RESERVE_IMAGES 1000
|
||||
void HDF5DataFilePluginROI::OpenFile(HDF5File &data_file, const DataMessage &msg, size_t in_images_per_file) {
|
||||
images_per_file = in_images_per_file;
|
||||
|
||||
void HDF5DataFilePluginROI::OpenFile(HDF5File &data_file, const DataMessage &msg) {}
|
||||
for (const auto &r: msg.roi) {
|
||||
auto &entry = roi_data[r.first];
|
||||
entry.max.reserve(images_per_file);
|
||||
entry.sum.reserve(images_per_file);
|
||||
entry.sum_sq.reserve(images_per_file);
|
||||
entry.npixel.reserve(images_per_file);
|
||||
entry.x.reserve(images_per_file);
|
||||
entry.y.reserve(images_per_file);
|
||||
}
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginROI::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
for (const auto &r: msg.roi) {
|
||||
if (!roi_data.contains(r.first)) {
|
||||
roi_data[r.first].max.reserve(RESERVE_IMAGES);
|
||||
roi_data[r.first].sum.reserve(RESERVE_IMAGES);
|
||||
roi_data[r.first].sum_sq.reserve(RESERVE_IMAGES);
|
||||
roi_data[r.first].npixel.reserve(RESERVE_IMAGES);
|
||||
roi_data[r.first].x.reserve(RESERVE_IMAGES);
|
||||
roi_data[r.first].y.reserve(RESERVE_IMAGES);
|
||||
roi_data[r.first].max.reserve(images_per_file);
|
||||
roi_data[r.first].sum.reserve(images_per_file);
|
||||
roi_data[r.first].sum_sq.reserve(images_per_file);
|
||||
roi_data[r.first].npixel.reserve(images_per_file);
|
||||
roi_data[r.first].x.reserve(images_per_file);
|
||||
roi_data[r.first].y.reserve(images_per_file);
|
||||
}
|
||||
|
||||
roi_data[r.first].max[image_number] = r.second.max_count;
|
||||
roi_data[r.first].sum[image_number] = r.second.sum;
|
||||
roi_data[r.first].npixel[image_number] = r.second.pixels;
|
||||
|
||||
@@ -19,8 +19,9 @@ struct ROIData {
|
||||
|
||||
class HDF5DataFilePluginROI : public HDF5DataFilePlugin {
|
||||
std::map<std::string, ROIData> roi_data;
|
||||
size_t images_per_file = 1;
|
||||
public:
|
||||
void OpenFile(HDF5File &data_file, const DataMessage &msg) override;
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;
|
||||
void Write(const DataMessage &msg, uint64_t image_number) override;
|
||||
void WriteFinal(HDF5File &data_file) override;
|
||||
};
|
||||
|
||||
@@ -5,10 +5,9 @@
|
||||
#include "../include/spdlog/fmt/fmt.h"
|
||||
#include "../common/Reflection.h"
|
||||
|
||||
void HDF5DataFilePluginReflection::OpenFile(HDF5File &data_file, const DataMessage &msg) {
|
||||
void HDF5DataFilePluginReflection::OpenFile(HDF5File &data_file, const DataMessage &msg, size_t images_per_file) {
|
||||
reflection_group = std::make_unique<HDF5Group>(data_file, "/entry/reflections");
|
||||
reflection_group->NXClass("NXcollection");
|
||||
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginReflection::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
@@ -19,6 +18,21 @@ void HDF5DataFilePluginReflection::Write(const DataMessage &msg, uint64_t image_
|
||||
std::vector<float> I, sigma, d, lp;
|
||||
std::vector<float> image, phi, pred_x, pred_y, bkg, partiality, zeta;
|
||||
|
||||
h.reserve(msg.reflections.size());
|
||||
k.reserve(msg.reflections.size());
|
||||
l.reserve(msg.reflections.size());
|
||||
I.reserve(msg.reflections.size());
|
||||
sigma.reserve(msg.reflections.size());
|
||||
d.reserve(msg.reflections.size());
|
||||
pred_x.reserve(msg.reflections.size());
|
||||
pred_y.reserve(msg.reflections.size());
|
||||
bkg.reserve(msg.reflections.size());
|
||||
lp.reserve(msg.reflections.size());
|
||||
partiality.reserve(msg.reflections.size());
|
||||
image.reserve(msg.reflections.size());
|
||||
phi.reserve(msg.reflections.size());
|
||||
zeta.reserve(msg.reflections.size());
|
||||
|
||||
for (const auto &refl : msg.reflections) {
|
||||
image.emplace_back(refl.image_number);
|
||||
h.emplace_back(refl.h);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
class HDF5DataFilePluginReflection : public HDF5DataFilePlugin {
|
||||
std::unique_ptr<HDF5Group> reflection_group;
|
||||
public:
|
||||
void OpenFile(HDF5File &data_file, const DataMessage &msg) override;
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;
|
||||
void Write(const DataMessage &msg, uint64_t image_number) override;
|
||||
void WriteFinal(HDF5File &data_file) override;
|
||||
~HDF5DataFilePluginReflection() override = default;
|
||||
|
||||
@@ -3,7 +3,13 @@
|
||||
|
||||
#include "HDF5DataFilePluginXFEL.h"
|
||||
|
||||
void HDF5DataFilePluginXFEL::OpenFile(HDF5File &data_file, const DataMessage &msg) {}
|
||||
void HDF5DataFilePluginXFEL::OpenFile(HDF5File &data_file, const DataMessage &msg, size_t images_per_file) {
|
||||
if (msg.xfel_pulse_id.has_value()
|
||||
&& msg.xfel_event_code.has_value()) {
|
||||
pulseid.reserve(images_per_file);
|
||||
event_code.reserve(images_per_file);
|
||||
}
|
||||
}
|
||||
|
||||
void HDF5DataFilePluginXFEL::Write(const DataMessage &msg, uint64_t image_number) {
|
||||
if (!msg.xfel_pulse_id.has_value()
|
||||
|
||||
@@ -11,7 +11,7 @@ class HDF5DataFilePluginXFEL : public HDF5DataFilePlugin {
|
||||
AutoIncrVector<uint64_t> pulseid;
|
||||
AutoIncrVector<uint32_t> event_code;
|
||||
public:
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg) override;
|
||||
void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;
|
||||
void Write(const DataMessage& msg, uint64_t image_number) override;
|
||||
void WriteFinal(HDF5File &data_file) override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user