]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Base/Mori.h
...
[FrontAlgorithms.git] / lib / fpa / Base / Mori.h
index d9277845fd365a80541769d891c7bbceda872aa0..d1774d708dcc3da8aca409fd4018666d691b6fbf 100644 (file)
@@ -3,13 +3,19 @@
 // @email florez-l@javeriana.edu.co
 // =========================================================================
 
+// https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data
+
+
 #ifndef __fpa__Base__Mori__h__
 #define __fpa__Base__Mori__h__
 
 #include <deque>
 #include <set>
+#include <vector>
 #include <itkConceptChecking.h>
 #include <itkFunctionBase.h>
+
+#include <fpa/Generic/PeakDetector.h>
 #include <fpa/Base/Functors/RegionGrow/BinaryThreshold.h>
 
 namespace fpa
@@ -37,6 +43,10 @@ namespace fpa
 
       typedef std::deque< TNode >     TQueue;
       typedef std::set< TInputValue > TThresholds;
+      typedef std::pair< TInputValue, unsigned long > TSignalData;
+      typedef std::vector< TSignalData >              TSignal;
+
+      typedef fpa::Generic::PeakDetector TPeakDetector;
       typedef fpa::Base::Functors::RegionGrow::BinaryThreshold< TInputValue > TPredicate;
 
     public:
@@ -46,7 +56,19 @@ namespace fpa
         );
 
       itkGetConstMacro( InsideValue, TOutputValue );
+      itkGetConstMacro( MinimumThreshold, TInputValue );
+
       itkSetMacro( InsideValue, TOutputValue );
+      itkSetMacro( MinimumThreshold, TInputValue );
+
+      itkGetConstReferenceMacro( Signal, TSignal );
+      itkGetConstMacro( SignalLag, unsigned long );
+      itkGetConstMacro( SignalThreshold, double );
+      itkGetConstMacro( SignalInfluence, double );
+
+      itkSetMacro( SignalLag, unsigned long );
+      itkSetMacro( SignalThreshold, double );
+      itkSetMacro( SignalInfluence, double );
 
     public:
       virtual itk::ModifiedTimeType GetMTime( ) const override;
@@ -59,16 +81,19 @@ namespace fpa
       void SetThresholds(
         const TInputValue& init,
         const TInputValue& end,
-        unsigned long number_of_thresholds
+        const TInputValue& delta
         );
+      unsigned long GetNumberOfEvaluatedThresholds( ) const;
+      TInputValue GetOptimumThreshold( ) const;
 
     protected:
       Mori( );
       virtual ~Mori( );
 
       virtual void _BeforeGenerateData( ) override;
-      virtual void _AfterGenerateData( ) override;
-      virtual TOutputValue _ComputeOutputValue( const TNode& n ) override;
+      virtual void _FinishOneLoop( ) override;
+      virtual void _ComputeOutputValue( TNode& n ) override;
+      virtual void _UpdateOutputValue( TNode& n ) override;
       virtual void _QueueClear( ) override;
       virtual TNode _QueuePop( ) override;
       virtual void _QueuePush( const TNode& node ) override;
@@ -83,9 +108,25 @@ namespace fpa
     protected:
       typename TPredicate::Pointer m_Predicate;
       TThresholds m_Thresholds;
+      typename TThresholds::const_iterator m_CurrentThreshold;
       TQueue m_Queues[ 2 ];
       unsigned int m_CurrentQueue;
-
+      unsigned long m_Count;
+
+      TPeakDetector m_PeakDetector;
+
+      TSignal m_Signal;
+      unsigned long m_SignalLag;
+      double m_SignalThreshold;
+      double m_SignalInfluence;
+      std::vector< double > m_FilteredSignal;
+      std::vector< double > m_SignalAverages;
+      std::vector< double > m_SignalDeviations;
+      std::vector< short >  m_SignalPeaks;
+      double m_CurrentAverage;
+      double m_CurrentVariance;
+
+      TInputValue  m_MinimumThreshold;
       TOutputValue m_InsideValue;
     };