diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/addstatisticsaction.h b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/addstatisticsaction.h index d1e4ceac65a1aac9572b216e0f412673555247ad..5fe36add565815cebf23957d4189da06e316936d 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/addstatisticsaction.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/actions/addstatisticsaction.h @@ -36,18 +36,30 @@ namespace rfiStrategy { class AddStatisticsAction : public Action { public: - AddStatisticsAction() : _comparison(false), _separateBaselineStatistics(false), _performClassification(true) + AddStatisticsAction() : _comparison(false), _separateBaselineStatistics(false), _performClassification(true), _writeImmediately(false) { } + + virtual ~AddStatisticsAction() + { + Sync(); + } virtual std::string Description() { return "Add to statistics"; } + + virtual void Sync() + { + statistics.Save(); + } + virtual void Perform(class ArtifactSet &artifacts, class ProgressListener &) { statistics.SetSeparateBaselineStatistics(_separateBaselineStatistics); statistics.SetPerformClassification(_performClassification); + statistics.SetWriteImmediately(_writeImmediately); if(_comparison) statistics.Add(artifacts.ContaminatedData(), artifacts.MetaData(), artifacts.OriginalData().GetSingleMask()); else @@ -72,11 +84,18 @@ namespace rfiStrategy { { _performClassification = performClassification; } -private: + + bool WriteImmediately() const { return _writeImmediately; } + void SetWriteImmediately(bool writeImmediately) + { + _writeImmediately = writeImmediately; + } + private: RFIStatistics statistics; bool _comparison; bool _separateBaselineStatistics; bool _performClassification; + bool _writeImmediately; }; } diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/rfistatistics.h b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/rfistatistics.h index 1d4ebd5dd79007043d81372f4bc5a0188a581f8f..1ca31724ca7c368b24ad1f35787030e602bf95c8 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/rfistatistics.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/rfistatistics.h @@ -220,7 +220,7 @@ class RFIStatistics { RFIStatistics *baselineStatistics; }; - RFIStatistics() : _separateBaselineStatistics(false), _compareFlags(false), _filePrefix(""), _channelCountPerSubband(256), _ignoreFirstChannel(true), _performClassification(true) { } + RFIStatistics() : _separateBaselineStatistics(false), _compareFlags(false), _filePrefix(""), _channelCountPerSubband(256), _ignoreFirstChannel(true), _performClassification(true), _writeImmediately(false) { } ~RFIStatistics() { } void Add(const TimeFrequencyData &data, TimeFrequencyMetaDataCPtr metaData); @@ -310,6 +310,9 @@ class RFIStatistics { bool IgnoreFirstChannel() const { return _ignoreFirstChannel; } void SetIgnoreFirstChannel(bool value) { _ignoreFirstChannel = value; } + + bool WriteImmediately() const { return _writeImmediately; } + void SetWriteImmediately(bool value) { _writeImmediately = value; } private: struct FeatureInfo { long double amplitudeSum; @@ -347,6 +350,7 @@ class RFIStatistics { std::string _filePrefix; unsigned _channelCountPerSubband; bool _ignoreFirstChannel, _performClassification; + bool _writeImmediately; void addEverything(const TimeFrequencyData &data, TimeFrequencyMetaDataCPtr metaData, Image2DCPtr image, Mask2DCPtr mask, SegmentedImagePtr segmentedMask, SegmentedImagePtr classifiedMask); void addSingleBaseline(const TimeFrequencyData &data, TimeFrequencyMetaDataCPtr metaData, Image2DCPtr image, Mask2DCPtr mask, SegmentedImagePtr segmentedMask, SegmentedImagePtr classifiedMask, bool save); diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/control/types.h b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/control/types.h index c43c3d963b7709b6c28a388986096aeb6c43ddf1..e1a39773af24e6a3bae2de73a892ae3e9b9a22fd 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/control/types.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/control/types.h @@ -76,6 +76,7 @@ class Observatorium; // hence version renamed to: // 3.0 : as 2.10 // 3.1 : added the CollectNoiseStatisticsAction. +// 3.2 : added parameter "write-immediately" to the Add Statistics Action. #define STRATEGY_FILE_FORMAT_VERSION 3.1 // The earliest format version which can be read by this version of the software diff --git a/CEP/DP3/AOFlagger/src/strategy/algorithms/rfistatistics.cpp b/CEP/DP3/AOFlagger/src/strategy/algorithms/rfistatistics.cpp index bed2ba6a1ca6411138e2d0a668633706eb97b6c1..5c4386ed341f70a275ff5ab1404dd0b3f1965d95 100644 --- a/CEP/DP3/AOFlagger/src/strategy/algorithms/rfistatistics.cpp +++ b/CEP/DP3/AOFlagger/src/strategy/algorithms/rfistatistics.cpp @@ -57,11 +57,14 @@ void RFIStatistics::Add(const TimeFrequencyData &data, TimeFrequencyMetaDataCPtr void RFIStatistics::addEverything(const TimeFrequencyData &data, TimeFrequencyMetaDataCPtr metaData, Image2DCPtr image, Mask2DCPtr mask, SegmentedImagePtr segmentedMask, SegmentedImagePtr classifiedMask) { - addSingleBaseline(data, metaData, image, mask, segmentedMask, classifiedMask, true); + addSingleBaseline(data, metaData, image, mask, segmentedMask, classifiedMask, _writeImmediately); addBaselines(data, metaData, image, mask, segmentedMask, classifiedMask); - saveBaselines(_filePrefix + "counts-baselines.txt"); - saveBaselineTimeInfo(_filePrefix + "counts-baseltime.txt"); - saveBaselineFrequencyInfo(_filePrefix + "counts-baselfreq.txt"); + if(_writeImmediately) + { + saveBaselines(_filePrefix + "counts-baselines.txt"); + saveBaselineTimeInfo(_filePrefix + "counts-baseltime.txt"); + saveBaselineFrequencyInfo(_filePrefix + "counts-baselfreq.txt"); + } } void RFIStatistics::addSingleBaseline(const TimeFrequencyData &data, TimeFrequencyMetaDataCPtr metaData, Image2DCPtr image, Mask2DCPtr mask, SegmentedImagePtr segmentedMask, SegmentedImagePtr classifiedMask, bool save) diff --git a/CEP/DP3/AOFlagger/src/strategy/control/strategyreader.cpp b/CEP/DP3/AOFlagger/src/strategy/control/strategyreader.cpp index 3aa0465ffe33a805fe7e6186ed48d0fafd160511..bc79f7b499ae6ba1486ac24fc298dfe91f4cf831 100644 --- a/CEP/DP3/AOFlagger/src/strategy/control/strategyreader.cpp +++ b/CEP/DP3/AOFlagger/src/strategy/control/strategyreader.cpp @@ -317,6 +317,7 @@ Action *StrategyReader::parseAddStatistics(xmlNode *node) newAction->SetCompareOriginalAndAlternative(getBool(node, "compare-original-and-alternative")); newAction->SetSeparateBaselineStatistics(getBool(node, "separate-baseline-statistics")); newAction->SetPerformClassification(getBool(node, "perform-classification")); + newAction->SetWriteImmediately(getBool(node, "write-immediately")); return newAction; } diff --git a/CEP/DP3/AOFlagger/src/strategy/control/strategywriter.cpp b/CEP/DP3/AOFlagger/src/strategy/control/strategywriter.cpp index 4b3951a277a2598ffa12908041442955ab1f787c..0f55fd924fef75a6360dbbca5a48e6a0dec8f6ba 100644 --- a/CEP/DP3/AOFlagger/src/strategy/control/strategywriter.cpp +++ b/CEP/DP3/AOFlagger/src/strategy/control/strategywriter.cpp @@ -218,6 +218,7 @@ namespace rfiStrategy { Write("compare-original-and-alternative", action.CompareOriginalAndAlternative()); Write("separate-baseline-statistics", action.SeparateBaselineStatistics()); Write("perform-classification", action.PerformClassification()); + Write("write-immediately", action.WriteImmediately()); } void StrategyWriter::writeBaselineSelectionAction(const class BaselineSelectionAction &action)