Stream receivers: efficiency counts a partial image as its fraction in every child
Lite summed the per-image image_collection_efficiency that FPGAImagePuller sets, the rugnux rotation and stills receivers counted images, so with live rugnux on the puller and lost packets they reported 100%. The sum moves into JFJochReceiver::CountImage and JFJochReceiverStream::GetEfficiency; Lite's own override goes. A DECTRIS stream carries no such key and counts each image as whole, as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HVeDQsU5a8AJUdJPgWevAK
This commit is contained in:
1 parent
8f47fb756b
commit
16f3b0270e
5 files changed
+3
-12
No files matched your search
@@ -188,6 +188,7 @@ bool JFJochReceiver::SerializeImageOrDrop(CBORStream2Serializer &serializer, Dat
|
||||
|
||||
void JFJochReceiver::CountImage(const DataMessage &message) {
|
||||
++images_collected;
|
||||
collection_efficiency_sum += message.image_collection_efficiency.value_or(1.0f);
|
||||
compressed_size += message.image.GetCompressedSize();
|
||||
uncompressed_size += message.image.GetUncompressedSize();
|
||||
UpdateMaxImageReceived(message.number);
|
||||
|
||||
@@ -41,6 +41,7 @@ protected:
|
||||
std::atomic<uint64_t> uncompressed_size{0};
|
||||
std::atomic<size_t> images_sent{0};
|
||||
std::atomic<size_t> images_collected{0};
|
||||
std::atomic<double> collection_efficiency_sum{0.0}; // a partial image counts as its fraction; a stream without the key counts each as whole
|
||||
std::atomic<size_t> images_skipped{0};
|
||||
|
||||
std::chrono::time_point<std::chrono::system_clock> start_time;
|
||||
|
||||
@@ -70,7 +70,6 @@ void JFJochReceiverLite::OnImage(uint32_t id, DataMessage &data_msg, std::chrono
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
|
||||
CountImage(data_msg);
|
||||
collection_efficiency_sum += data_msg.image_collection_efficiency.value_or(1.0f);
|
||||
|
||||
auto image_start_time = std::chrono::high_resolution_clock::now();
|
||||
|
||||
@@ -103,8 +102,3 @@ void JFJochReceiverLite::OnImage(uint32_t id, DataMessage &data_msg, std::chrono
|
||||
id, data_msg.number, duration_total.count(), image_duration.count());
|
||||
}
|
||||
|
||||
float JFJochReceiverLite::GetEfficiency() const {
|
||||
if (ExpectedImages() == 0)
|
||||
return 0;
|
||||
return static_cast<float>(collection_efficiency_sum / static_cast<double>(ExpectedImages()));
|
||||
}
|
||||
@@ -12,9 +12,6 @@
|
||||
class JFJochReceiverLite : public JFJochReceiverStream {
|
||||
std::vector<std::unique_ptr<MXAnalysisWithoutFPGA>> analysis; // per image thread
|
||||
|
||||
// Over the images received, as a detector stream without it counts each as whole
|
||||
std::atomic<double> collection_efficiency_sum{0.0};
|
||||
|
||||
void ImageThread(uint32_t id) override;
|
||||
void OnImage(uint32_t id, DataMessage &message, std::chrono::steady_clock::time_point received) override;
|
||||
public:
|
||||
@@ -31,6 +28,4 @@ public:
|
||||
ZMQMetadataSocket *zmq_metadata_socket = nullptr,
|
||||
IndexerThreadPool *indexing_thread_pool = nullptr);
|
||||
~JFJochReceiverLite() override;
|
||||
|
||||
float GetEfficiency() const override;
|
||||
};
|
||||
@@ -264,7 +264,7 @@ int64_t JFJochReceiverStream::ExpectedImages() const {
|
||||
float JFJochReceiverStream::GetEfficiency() const {
|
||||
if (ExpectedImages() == 0)
|
||||
return 0;
|
||||
return static_cast<float>(images_collected) / static_cast<float>(ExpectedImages());
|
||||
return static_cast<float>(collection_efficiency_sum / static_cast<double>(ExpectedImages()));
|
||||
}
|
||||
|
||||
float JFJochReceiverStream::GetProgress() const {
|
||||
|
||||
Reference in new issue
Block a user