SedSat3 1.1.6
Sediment Source Apportionment Tool - Advanced statistical methods for environmental pollution research
Loading...
Searching...
No Matches
cmbtimeseriesset.cpp
Go to the documentation of this file.
1#include "cmbtimeseriesset.h"
2#include <QJsonArray>
3#include <QFile>
4#include "Vector.h"
5
7{
8
9}
10
11CMBTimeSeriesSet::CMBTimeSeriesSet(const CMBTimeSeriesSet& mp):TimeSeriesSet<double>(mp)
12{
14 labels = mp.labels;
15}
16
17CMBTimeSeriesSet::CMBTimeSeriesSet(int n):TimeSeriesSet<double>(n), Interface()
18{
19 observed_value.resize(n);
20}
21
23{
24 TimeSeriesSet<double>::operator=(mp);
26 labels = mp.labels;
27 return *this;
28}
29
30CMBTimeSeriesSet& CMBTimeSeriesSet::operator=(const TimeSeriesSet<double> &mp)
31{
32 TimeSeriesSet<double>::operator=(mp);
33 observed_value.resize(size());
34 return *this;
35}
36CMBTimeSeriesSet::CMBTimeSeriesSet(const TimeSeriesSet<double>& mp):TimeSeriesSet<double>(mp)
37{
38 observed_value.resize(size());
39}
40
42{
43 QJsonObject out;
44 QJsonArray labels;
45 {
46 for (int j=0; j<maxnumpoints(); j++)
47 labels.append(QString::fromStdString(Label(j)));
48 }
49 out["labels"] = labels;
50 for (int i=0; i<size(); i++)
51 {
52 QJsonObject timeseries;
53 QJsonArray t_values;
54 QJsonArray C_values;
55 for (int j=0; j<at(i).size(); j++)
56 {
57 t_values.append(at(i).getTime(j));
58 C_values.append(at(i).getValue(j));
59
60 }
61 timeseries["time"] = t_values;
62 timeseries["value"] = C_values;
63 out[QString::fromStdString(getSeriesName(i))] = timeseries;
64 }
65 QJsonArray Jobserved_values;
66 for (unsigned int i=0; i<observed_value.size(); i++)
67 Jobserved_values.append(observed_value[i]);
68 out["Observed Values"] = Jobserved_values;
69 return out;
70}
71bool CMBTimeSeriesSet::ReadFromJsonObject(const QJsonObject &jsonobject)
72{
73 clear();
74 observed_value.clear();
75 for (QString key: jsonobject.keys())
76 {
77 if (key=="Observed Values")
78 {
79 QJsonArray observed_value_JArray = jsonobject[key].toArray();
80 for (int i=0; i<observed_value_JArray.count(); i++)
81 observed_value.push_back(observed_value_JArray[i].toDouble());
82 }
83 else if (key=="labels")
84 {
85 QJsonArray labels_JArray = jsonobject[key].toArray();
86 for (int i=0; i<labels_JArray.count(); i++)
87 labels.push_back(labels_JArray[i].toString().toStdString());
88 }
89 else
90 {
91 QString SeriesName = key;
92 QJsonArray TimeJArray = jsonobject[key].toObject()["time"].toArray();
93 QJsonArray ValueJArray = jsonobject[key].toObject()["value"].toArray();
94 TimeSeries<double> this_series;
95 for (unsigned int i=0; i<TimeJArray.count(); i++)
96 this_series.append(TimeJArray[i].toDouble(), ValueJArray[i].toDouble());
97 append(this_series,SeriesName.toStdString());
98 }
99 }
100 return true;
101
102}
103
104
106{
107
108 string out;
109 for (unsigned int i=0; i<size(); i++)
110 out += "\t" + getSeriesName(i);
111 out += "\n";
112 for (int j=0; j<maxnumpoints(); j++)
113 {
114 for (int i=0; i<size(); i++)
115 {
116 {
117 if (i>0)
118 out += ", ";
119 if (j<at(i).size())
120 out+= Label(j,i) + "," + QString::number(at(i).getValue(j)).toStdString();
121 else
122 out+= ", ";
123 }
124 }
125
126 out += "\n";
127 }
128 return out;
129}
130
132{
133 file->write(QString::fromStdString(ToString()).toUtf8());
134 return true;
135}
136
137void CMBTimeSeriesSet::AppendLastContribution(int colnumber, const string &name)
138{
140 TimeSeries<double> last_contribution;
141 for (int j=0; j<maxnumpoints(); j++)
142 {
143 double sum = 0;
144 for (int i=0; i<colnumber; i++)
145 {
146 sum+=at(i).getValue(j);
147 }
148 if (1.0-sum<0)
149 {
150 cout<<"Negative contribution!";
151 }
152 last_contribution.append(j,1.0-sum);
153 }
154 for (int i = 0; i<colnumber; i++)
155 {
156 out.append(at(i),getSeriesName(i));
157 }
158 out.append(last_contribution,name);
159 for (int i=colnumber; i<size(); i++)
160 {
161 out.append(at(i),getSeriesName(i));
162 }
163 *this = out;
164
165}
166
168{
169 QTableWidget *tablewidget = new QTableWidget();
170 tablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
172 {
173 tablewidget->setColumnCount(size());
174 }
175 else
176 {
177 tablewidget->setColumnCount(size()*2);
178 }
179 tablewidget->setRowCount(maxnumpoints());
180 QStringList headers;
181 QStringList rowlabels;
182
183 for (int j=0; j<size(); j++)
184 {
186 headers << QString::fromStdString(getSeriesName(j)) + GetOptions().Y_suffix;
187 else
188 headers << QString::fromStdString(getSeriesName(j)) + GetOptions().X_suffix << QString::fromStdString(getSeriesName(j))+ GetOptions().Y_suffix;
189 for (int i=0; i<at(j).size(); i++)
190 {
192 { if (j==0) rowlabels<<QString::number(i);
193 tablewidget->setItem(i,j*2, new QTableWidgetItem(QString::fromStdString(Label(i,j))));
194 tablewidget->setItem(i,j*2+1, new QTableWidgetItem(QString::number(at(j).getValue(i))));
195 }
196 else
197 { if (j==0) rowlabels<<QString::fromStdString(Label(i,j));
198 tablewidget->setItem(i,j, new QTableWidgetItem(QString::number(at(j).getValue(i))));
199 }
200 }
201 }
202
203 tablewidget->setHorizontalHeaderLabels(headers);
204 tablewidget->setVerticalHeaderLabels(rowlabels);
205 return tablewidget;
206}
Collection of time series with labels and observed values.
CMBTimeSeriesSet & operator=(const CMBTimeSeriesSet &mp)
Assignment operator from CMBTimeSeriesSet.
CMBTimeSeriesSet()
Default constructor - creates an empty time series set.
bool writetofile(QFile *) override
Writes time series set to file.
vector< string > labels
Custom labels for time points.
bool ReadFromJsonObject(const QJsonObject &jsonobject) override
Deserializes time series set from JSON format.
vector< double > observed_value
Observed values for comparison with modeled series.
QJsonObject toJsonObject() const override
Serializes time series set to JSON format.
string Label(unsigned int i) const
Gets label for time point (uses custom labels if set)
void AppendLastContribution(int colnumber, const string &name)
Appends a final contribution series calculated from existing series.
QTableWidget * ToTable() override
Creates a QTableWidget for displaying time series set data.
string ToString() const override
Converts time series set to CSV-formatted string.
Abstract base class providing common serialization and visualization interface.
Definition interface.h:65
options & GetOptions()
Get reference to the options structure.
Definition interface.h:275
bool Option(options_key opt)
Get the current value of a configuration option.
Definition interface.h:261
@ single_column_x
Enable single-column mode for X-axis data representation.
QString X_suffix
Suffix appended to X-axis field names in serialization.
Definition interface.h:33
QString Y_suffix
Suffix appended to Y-axis field names in serialization.
Definition interface.h:34