File: timeSeries.cpp

package info (click to toggle)
groops 0%2Bgit20250907%2Bds-1
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 11,140 kB
  • sloc: cpp: 135,607; fortran: 1,603; makefile: 20
file content (127 lines) | stat: -rw-r--r-- 5,116 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/***********************************************/
/**
* @file timeSeries.cpp
*
* @brief Generates time series.
*
* @author Torsten Mayer-Guerr
* @date 2007-03-02
*
*/
/***********************************************/

#define DOCSTRING_TimeSeries

#include "base/import.h"
#include "config/configRegister.h"
#include "classes/timeSeries/timeSeries.h"
#include "classes/timeSeries/timeSeriesUniformSampling.h"
#include "classes/timeSeries/timeSeriesUniformInterval.h"
#include "classes/timeSeries/timeSeriesIrregular.h"
#include "classes/timeSeries/timeSeriesMonthly.h"
#include "classes/timeSeries/timeSeriesYearly.h"
#include "classes/timeSeries/timeSeriesEveryMonth.h"
#include "classes/timeSeries/timeSeriesEveryYear.h"
#include "classes/timeSeries/timeSeriesInstrument.h"
#include "classes/timeSeries/timeSeriesInstrumentArcIntervals.h"
#include "classes/timeSeries/timeSeriesOrbitRevolutions.h"
#include "classes/timeSeries/timeSeriesExclude.h"
#include "classes/timeSeries/timeSeriesConditional.h"
#include "classes/timeSeries/timeSeriesInterpolate.h"

/***********************************************/

GROOPS_REGISTER_CLASS(TimeSeries, "timeSeriesType",
                      TimeSeriesUniformSampling,
                      TimeSeriesUniformInterval,
                      TimeSeriesIrregular,
                      TimeSeriesMonthly,
                      TimeSeriesYearly,
                      TimeSeriesEveryMonth,
                      TimeSeriesEveryYear,
                      TimeSeriesInstrument,
                      TimeSeriesInstrumentArcIntervals,
                      TimeSeriesOrbitRevolutions,
                      TimeSeriesExclude,
                      TimeSeriesConditional,
                      TimeSeriesInterpolate)

GROOPS_READCONFIG_UNBOUNDED_CLASS(TimeSeries, "timeSeriesType")

/***********************************************/

TimeSeries::TimeSeries(Config &config, const std::string &name)
{
  try
  {
    std::string type;
    while(readConfigChoice(config, name, type, Config::OPTIONAL, "", "Generates time series"))
    {
      std::vector<Time> times;
      if(readConfigChoiceElement(config, "uniformSampling",        type, "uniform series with given sampling"))
        base.push_back(new TimeSeriesUniformSampling(config));
      if(readConfigChoiceElement(config, "uniformInterval",        type, "uniform series with given interval count"))
        base.push_back(new TimeSeriesUniformInterval(config));
      if(readConfigChoiceElement(config, "irregular",              type, "every single point in time is given"))
        base.push_back(new TimeSeriesIrregular(config));
      if(readConfigChoiceElement(config, "monthly",                type, "time series based on months"))
        base.push_back(new TimeSeriesMonthly(config));
      if(readConfigChoiceElement(config, "yearly",                 type, "time series based on years"))
        base.push_back(new TimeSeriesYearly(config));
      if(readConfigChoiceElement(config, "everyMonth",             type, "time series based on months"))
        base.push_back(new TimeSeriesEveryMonth(config));
      if(readConfigChoiceElement(config, "everyYear",              type, "time series based on years"))
        base.push_back(new TimeSeriesEveryYear(config));
      if(readConfigChoiceElement(config, "instrument",             type, "read time series from an instrument file"))
        base.push_back(new TimeSeriesInstrument(config));
      if(readConfigChoiceElement(config, "instrumentArcIntervals", type, "try to reproduce arc interval time series from an instrument file"))
        base.push_back(new TimeSeriesInstrumentArcIntervals(config));
      if(readConfigChoiceElement(config, "revolutions",            type, "create time series from orbit file (revolutions)"))
        base.push_back(new TimeSeriesOrbitRevolutions(config));
      if(readConfigChoiceElement(config, "exclude",                type, "exclude times from a given time series"))
        base.push_back(new TimeSeriesExclude(config));
      if(readConfigChoiceElement(config, "conditional",            type, "time series based depending on conditions"))
        base.push_back(new TimeSeriesConditional(config));
      if(readConfigChoiceElement(config, "interpolate",            type, "interpolate between created times"))
        base.push_back(new TimeSeriesInterpolate(config));
      endChoice(config);
      if(isCreateSchema(config))
        return;
    };
  }
  catch(std::exception &e)
  {
    GROOPS_RETHROW(e)
  }
}

/***********************************************/

TimeSeries::~TimeSeries()
{
  for(UInt i=0; i<base.size(); i++)
    delete base.at(i);
}

/***********************************************/

std::vector<Time> TimeSeries::times() const
{
  try
  {
    std::vector<Time> times;
    for(UInt i=0; i<base.size(); i++)
    {
      auto times2 = base.at(i)->times();
      times.insert(times.end(), times2.begin(), times2.end());
    }
    std::sort(times.begin(), times.end());
    return times;
  }
  catch(std::exception &e)
  {
    GROOPS_RETHROW(e)
  }
}

/***********************************************/