From 6c18c0a5cd9ddd091236b6effa6c313d8cef1569 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Mon, 15 May 2023 15:35:06 +0200 Subject: [PATCH] DiffractionExperiment: Pedestal with storage cells is based on external trigger --- common/DiffractionExperiment.cpp | 23 ++++++++++++++++++++++- common/DiffractionExperiment.h | 1 + tests/DiffractionExperimentTest.cpp | 7 ++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/common/DiffractionExperiment.cpp b/common/DiffractionExperiment.cpp index 0e6b26aa..5aca6d7b 100644 --- a/common/DiffractionExperiment.cpp +++ b/common/DiffractionExperiment.cpp @@ -370,15 +370,26 @@ DiffractionExperiment &DiffractionExperiment::SampleName(std::string input) { } // getter functions - int64_t DiffractionExperiment::GetNumTriggers() const { switch (GetDetectorMode()) { case DetectorMode::Conversion: case DetectorMode::Raw: return dataset.ntrigger(); case DetectorMode::PedestalG0: + if (GetPedestalWithExternalTrigger()) + return internal.pedestal_g0_frames(); + else + return 1; case DetectorMode::PedestalG1: + if (GetPedestalWithExternalTrigger()) + return internal.pedestal_g1_frames(); + else + return 1; case DetectorMode::PedestalG2: + if (GetPedestalWithExternalTrigger()) + return internal.pedestal_g2_frames(); + else + return 1; default: return 1; } @@ -478,10 +489,16 @@ int64_t DiffractionExperiment::GetFrameNumPerTrigger() const { else return dataset.images_per_trigger() * GetSummation(); case DetectorMode::PedestalG0: + if (GetPedestalWithExternalTrigger()) + return GetStorageCellNumber(); return internal.pedestal_g0_frames() * GetStorageCellNumber(); case DetectorMode::PedestalG1: + if (GetPedestalWithExternalTrigger()) + return GetStorageCellNumber(); return internal.pedestal_g1_frames() * GetStorageCellNumber(); case DetectorMode::PedestalG2: + if (GetPedestalWithExternalTrigger()) + return GetStorageCellNumber(); return internal.pedestal_g2_frames() * GetStorageCellNumber(); default: return 0; @@ -1197,3 +1214,7 @@ DiffractionExperiment &DiffractionExperiment::RadIntSolidAngleCorr(bool input) { return *this; } +bool DiffractionExperiment::GetPedestalWithExternalTrigger() const { + return (GetStorageCellNumber() > 1); +} + diff --git a/common/DiffractionExperiment.h b/common/DiffractionExperiment.h index cd78ab36..f1780abb 100644 --- a/common/DiffractionExperiment.h +++ b/common/DiffractionExperiment.h @@ -218,6 +218,7 @@ public: std::string GetDetectorDescription() const; void GetDetectorModuleHostname(std::vector& output) const; + bool GetPedestalWithExternalTrigger() const; }; inline int64_t CalculateStride(const std::chrono::microseconds &frame_time, const std::chrono::microseconds &preview_time) { diff --git a/tests/DiffractionExperimentTest.cpp b/tests/DiffractionExperimentTest.cpp index 4c9cb2d8..5a3ecc49 100644 --- a/tests/DiffractionExperimentTest.cpp +++ b/tests/DiffractionExperimentTest.cpp @@ -667,16 +667,21 @@ TEST_CASE("DiffractionExperiment_StorageCells_Pedestal","[DiffractionExperiment] x.Mode(DetectorMode::PedestalG0); REQUIRE(x.GetStorageCellNumber() == 16); + REQUIRE(x.GetNumTriggers() == 1456); + REQUIRE(x.GetFrameNumPerTrigger() == 16); REQUIRE(x.GetFrameNum() == 1456 * 16); x.Mode(DetectorMode::PedestalG1); REQUIRE(x.GetStorageCellNumber() == 2); + REQUIRE(x.GetNumTriggers() == 323); + REQUIRE(x.GetFrameNumPerTrigger() == 2); REQUIRE(x.GetFrameNum() == 323 * 2); x.StorageCells(8); x.Mode(DetectorMode::PedestalG2); REQUIRE(x.GetStorageCellNumber() == 2); - REQUIRE(x.GetFrameNum() == 456 * 2); + REQUIRE(x.GetNumTriggers() == 456); + REQUIRE(x.GetFrameNumPerTrigger() == 2); } TEST_CASE("DiffractionExperiment_DetectorInput_MultiTriggger","[DiffractionExperiment]") {