diff --git a/broker/JFJochStateMachine.cpp b/broker/JFJochStateMachine.cpp index 041c060d..1515d419 100644 --- a/broker/JFJochStateMachine.cpp +++ b/broker/JFJochStateMachine.cpp @@ -409,7 +409,7 @@ void JFJochStateMachine::MeasurementThread() { scan_result = tmp_output.receiver_output.scan_result; auto image_mean_time = tmp_output.receiver_output.processing_time; - logger.Info("Per-image processing time: (mean; microseconds): decompress {:.0f} preprocess {:.0f} azint {:.0f} spot finding {:.0f} indexing {:.0f} refinement {:.0f} prediction {:.0f} integration {:.0f} total {:.0f}", + logger.Info("Per-image processing time: (mean; microseconds): compression {:.0f} preprocess {:.0f} azint {:.0f} spot finding {:.0f} indexing {:.0f} refinement {:.0f} prediction {:.0f} integration {:.0f} total {:.0f}", image_mean_time.compression * 1e6, image_mean_time.preprocessing * 1e6, image_mean_time.azint * 1e6, diff --git a/common/AutoIncrVector.h b/common/AutoIncrVector.h index 771c2574..d551f48d 100644 --- a/common/AutoIncrVector.h +++ b/common/AutoIncrVector.h @@ -1,8 +1,7 @@ // SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only -#ifndef JFJOCH_AUTOINCRVECTOR_H -#define JFJOCH_AUTOINCRVECTOR_H +#pragma once #include #include "JFJochException.h" @@ -10,12 +9,16 @@ template class AutoIncrVector { std::vector v; + T fill_value{}; public: + AutoIncrVector() = default; + AutoIncrVector(T fill_value) : fill_value(fill_value) {} + T& operator[](int64_t pos ) { if (pos < 0) throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Negative vector pos"); if (pos >= v.size()) - v.resize(pos + 1); + v.resize(pos + 1, fill_value); return v[pos]; } @@ -50,4 +53,3 @@ public: } }; -#endif //JFJOCH_AUTOINCRVECTOR_H diff --git a/tests/AutoIncrVectorTest.cpp b/tests/AutoIncrVectorTest.cpp index 424df409..922816c7 100644 --- a/tests/AutoIncrVectorTest.cpp +++ b/tests/AutoIncrVectorTest.cpp @@ -22,4 +22,21 @@ TEST_CASE("AutoIncrVector","[AutoIncrVector]") { REQUIRE(ref[5] == 1); REQUIRE_THROWS(ref[6]); +} + +TEST_CASE("AutoIncrVector_Fill","[AutoIncrVector]") { + AutoIncrVector aiv_i{27}; + aiv_i[2] = 1; + REQUIRE(aiv_i.size() == 3); + REQUIRE(aiv_i[0] == 27); + REQUIRE(aiv_i[1] == 27); + REQUIRE(aiv_i[2] == 1); + + AutoIncrVector aiv_f{NAN}; + aiv_f[3] = 7; + REQUIRE(aiv_f.size() == 4); + REQUIRE(aiv_f[3] == 7); + REQUIRE(std::isnan(aiv_f[0])); + REQUIRE(std::isnan(aiv_f[1])); + REQUIRE(std::isnan(aiv_f[2])); } \ No newline at end of file diff --git a/writer/HDF5DataFilePluginDetector.cpp b/writer/HDF5DataFilePluginDetector.cpp index 56306ad4..a7ab1efc 100644 --- a/writer/HDF5DataFilePluginDetector.cpp +++ b/writer/HDF5DataFilePluginDetector.cpp @@ -40,9 +40,6 @@ void HDF5DataFilePluginDetector::Write(const DataMessage &msg, uint64_t image_nu efficiency[image_number] = msg.image_collection_efficiency.value(); else efficiency[image_number] = 1.0; - - if (msg.processing_time_s.has_value()) - processing_time[image_number] = msg.processing_time_s.value(); } void HDF5DataFilePluginDetector::WriteFinal(HDF5File &data_file) { @@ -62,8 +59,5 @@ void HDF5DataFilePluginDetector::WriteFinal(HDF5File &data_file) { data_file.SaveVector(prefix + "/packets_expected", packets_expected.vec()); if (!pixel_sum.empty()) data_file.SaveVector(prefix + "/pixel_sum", pixel_sum.vec()); - if (!processing_time.empty()) - data_file.SaveVector(prefix + "/processing_time", processing_time.vec())->Units("s"); - data_file.SaveVector(prefix + "/data_collection_efficiency_image", efficiency.vec()); } diff --git a/writer/HDF5DataFilePluginDetector.h b/writer/HDF5DataFilePluginDetector.h index d9662170..c61d7d51 100644 --- a/writer/HDF5DataFilePluginDetector.h +++ b/writer/HDF5DataFilePluginDetector.h @@ -17,7 +17,7 @@ class HDF5DataFilePluginDetector : public HDF5DataFilePlugin { AutoIncrVector packets_received; AutoIncrVector packets_expected; AutoIncrVector pixel_sum; - AutoIncrVector processing_time; + AutoIncrVector processing_time{NAN}; public: HDF5DataFilePluginDetector(const StartMessage& msg); void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override; diff --git a/writer/HDF5DataFilePluginMX.h b/writer/HDF5DataFilePluginMX.h index 6f3e4e6c..ecd9ac6f 100644 --- a/writer/HDF5DataFilePluginMX.h +++ b/writer/HDF5DataFilePluginMX.h @@ -21,8 +21,8 @@ class HDF5DataFilePluginMX : public HDF5DataFilePlugin { std::vector spot_l; std::vector spot_dist_ewald; - AutoIncrVector beam_corr_x; - AutoIncrVector beam_corr_y; + AutoIncrVector beam_corr_x{NAN}; + AutoIncrVector beam_corr_y{NAN}; AutoIncrVector npeaks; AutoIncrVector strong_pixel_count; @@ -37,28 +37,28 @@ class HDF5DataFilePluginMX : public HDF5DataFilePlugin { std::vector indexed_lattice; // crystal - AutoIncrVector profile_radius; - AutoIncrVector mosaicity_deg; - AutoIncrVector b_factor; + AutoIncrVector profile_radius{NAN}; + AutoIncrVector mosaicity_deg{NAN}; + AutoIncrVector b_factor{NAN}; // bkg_estimate - AutoIncrVector bkg_estimate; + AutoIncrVector bkg_estimate{NAN}; // resolution_estimation - AutoIncrVector resolution_estimate; + AutoIncrVector resolution_estimate{NAN}; AutoIncrVector niggli_class; AutoIncrVector bravais_lattice; - AutoIncrVector spot_finding_time; - AutoIncrVector indexing_time; - AutoIncrVector refinement_time; - AutoIncrVector integration_time; - AutoIncrVector processing_time; - AutoIncrVector bragg_prediction_time; - AutoIncrVector preprocessing_time; - AutoIncrVector compression_time; - AutoIncrVector azint_time; + AutoIncrVector spot_finding_time{NAN}; + AutoIncrVector indexing_time{NAN}; + AutoIncrVector refinement_time{NAN}; + AutoIncrVector integration_time{NAN}; + AutoIncrVector processing_time{NAN}; + AutoIncrVector bragg_prediction_time{NAN}; + AutoIncrVector preprocessing_time{NAN}; + AutoIncrVector compression_time{NAN}; + AutoIncrVector azint_time{NAN}; public: explicit HDF5DataFilePluginMX(const StartMessage& msg); void OpenFile(HDF5File &data_file, const DataMessage& msg, size_t images_per_file) override;