source: XIOS/dev/dev_olga/src/filter/temporal_filter.hpp @ 1654

Last change on this file since 1654 was 1653, checked in by oabramkina, 5 years ago

Developments for visualization of XIOS workflow.

Branch is spawned from trunk r1649.

Boost library is used for producing Graphviz DOT files. Current results: a DOT file representing a static workflow. For a complete proof of concept, DOT files for each timestamp should be generated. The necessary information has been collected by XIOS, it only requires rearranging the information for graphing (changes in classes CWorkflowGraph and CGraphviz).

File size: 3.6 KB
Line 
1#ifndef __XIOS_CTemporalFilter__
2#define __XIOS_CTemporalFilter__
3
4#include "filter.hpp"
5#include <boost/smart_ptr/scoped_ptr.hpp>
6#include "functor.hpp"
7#include "array_new.hpp"
8
9namespace xios
10{
11  /*!
12   * A generic temporal filter with one input slot wrapping any type of temporal operation.
13   */
14  class CTemporalFilter : public CFilter, public IFilterEngine
15  {
16    public:
17      /*!
18       * Constructs a temporal filter wrapping the specified temporal operation.
19       *
20       * \param gc the associated garbage collector
21       * \param opId the string identifying the temporal operation
22       * \param initDate the origin of time
23       * \param samplingFreq the sampling frequency, i.e. the frequency at which the input data will be used
24       * \param samplingOffset the sampling offset, i.e. the offset after which the input data will be used
25       * \param opFreq the operation frequency, i.e. the frequency at which the output data will be computed
26       * \param ignoreMissingValue true if and only if the missing value must be ignored
27                                   when doing the operation
28       */
29      CTemporalFilter(CGarbageCollector& gc, const std::string& opId,
30                      const CDate& initDate, const CDuration samplingFreq, const CDuration samplingOffset, const CDuration opFreq,
31                      bool ignoreMissingValue = false, bool buildWorkflowGraph = false);
32
33      inline StdString GetName(void) {return StdString("Temporal filter");};
34
35      /*!
36       * Applies the temporal operation to the input data and returns the result when it is ready.
37       *
38       * \param data a vector of packets corresponding to each slot (one in this case)
39       * \return the result of the temporal operation or null if it is not ready yet
40       */
41      CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
42
43      /*!
44       * Tests if the filter must auto-trigger.
45       *
46       * \return true if the filter must auto-trigger
47       */
48      bool virtual mustAutoTrigger() const;
49
50      /*!
51       * Tests whether data is expected for the specified date.
52       *
53       * \param date the date associated to the data
54       */
55      bool virtual isDataExpected(const CDate& date) const;
56
57    private:
58      // Warning the declaration order matters here, double-check the constructor before changing it
59      CArray<double, 1> tmpData; //!< The array of data used for temporary storage
60      const boost::scoped_ptr<func::CFunctor> functor; //!< The functor corresponding to the temporal operation
61      const bool isOnceOperation; //!< True if the operation should be computed just once
62      const bool isInstantOperation; //!< True if the operation is instant
63      const CDuration samplingFreq; //!< The sampling frequency, i.e. the frequency at which the input data will be used
64      const CDuration samplingOffset; //!< The sampling offset, i.e. the offset after which the input data will be used
65      const CDuration opFreq; //!< The operation frequency, i.e. the frequency at which the output data will be computed
66      const CDuration offsetMonth; //!< The month duration of samplingOffset
67      CDuration offsetAllButMonth; //!< All but the month duration of samplingOffset
68      const CDate initDate;
69      CDate nextSamplingDate; //!< The date of the next sampling
70      int nbOperationDates; //!< The number of times an operation is performed
71      int nbSamplingDates;
72//      CDate nextOperationDate; //!< The date of the next operation
73      bool isFirstOperation; //!< True before the first operation was been computed
74  }; // class CTemporalFilter
75} // namespace xios
76
77#endif //__XIOS_CTemporalFilter__
Note: See TracBrowser for help on using the repository browser.