SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
timeseriesrunlayer.h
Go to the documentation of this file.
1
9#pragma once
10#include "plot/irunlayer.h"
12#include <QObject>
13#include <QHash>
14#include <QTimer>
15#include <deque>
16#include <memory>
17#include <thread>
18
19namespace openswmmvis::plot
20{
26class TimeSeriesRunLayer final : public QObject, public IRunLayer
27{
28 Q_OBJECT
29public:
31 explicit TimeSeriesRunLayer(std::shared_ptr<const OpenSWMM::TimeSeries::TimeSeriesDataset> dataset);
33 ~TimeSeriesRunLayer() override;
35 QString scenarioName() const override;
37 UnitSystem unitSystem() const override { return UnitSystem::SI; }
39 double startDateJulian() const override;
41 int periodCount() const override;
43 int reportStepSeconds() const override { return 0; }
45 QString persistenceKey() const override;
47 bool supportsAttribute(PlotAttribute) const override { return false; }
50 void getSeriesAt(const ObjectRef &, PlotAttribute, SeriesData &out) const override;
55 void getSeriesAt(const ObjectRef &ref, const ResultDescriptor &descriptor, SeriesData &out) const override;
60 void requestWindow(const QStringList &ids, QDateTime from = {}, QDateTime to = {});
64 void setModelClockOffset(int seconds);
66 bool hasModelClockMapping() const { return m_modelClockOffset.has_value(); }
69 ResultDescriptor descriptorFor(const QString &id) const;
72 const OpenSWMM::TimeSeries::SeriesInfo *series(const QString &id) const;
74 auto dataset() const { return m_dataset; }
83 const QString &id, QDateTime from, QDateTime to,
84 std::atomic_bool *cancel = nullptr);
91 static bool exportCsv(const QVector<QPair<std::shared_ptr<const OpenSWMM::TimeSeries::TimeSeriesDataset>, QString>> &sources,
92 const QString &path, QString *error, std::atomic_bool *cancel = nullptr);
93signals:
95 void dataReady();
96private:
97 struct Work;
99 struct Request {
100 QString id;
101 QDateTime from;
102 QDateTime to;
103 int clockOffset = 0;
104 };
106 void startNext();
108 void poll();
109 std::shared_ptr<const OpenSWMM::TimeSeries::TimeSeriesDataset> m_dataset;
110 QHash<QString, SeriesData> m_cache;
111 std::optional<int> m_modelClockOffset;
112 QHash<QString, QPair<QDateTime, QDateTime>> m_ranges;
113 std::deque<Request> m_pending;
114 std::shared_ptr<Work> m_work;
115 std::thread m_thread;
116 QTimer m_timer;
117};
118}
Per-project flow-units state + label helpers.
Definition unitsystem.h:31
Abstract source backing one comparison-plot run.
Definition irunlayer.h:297
Immutable dataset adapter; GUI calls never perform observation database reads.
Definition timeseriesrunlayer.h:27
QString persistenceKey() const override
Definition timeseriesrunlayer.cpp:81
QString scenarioName() const override
Definition timeseriesrunlayer.cpp:80
~TimeSeriesRunLayer() override
Cancel queued work and join the current bounded-reader worker.
Definition timeseriesrunlayer.cpp:75
auto dataset() const
Definition timeseriesrunlayer.h:74
static SeriesData readWindow(const OpenSWMM::TimeSeries::TimeSeriesDataset &dataset, const QString &id, QDateTime from, QDateTime to, std::atomic_bool *cancel=nullptr)
Build one worker-owned display window; also used by deterministic tests.
Definition timeseriesrunlayer.cpp:191
void requestWindow(const QStringList &ids, QDateTime from={}, QDateTime to={})
Request a bounded display window for selected series.
Definition timeseriesrunlayer.cpp:141
int reportStepSeconds() const override
Definition timeseriesrunlayer.h:43
bool hasModelClockMapping() const
Definition timeseriesrunlayer.h:66
bool supportsAttribute(PlotAttribute) const override
Definition timeseriesrunlayer.h:47
static bool exportCsv(const QVector< QPair< std::shared_ptr< const OpenSWMM::TimeSeries::TimeSeriesDataset >, QString > > &sources, const QString &path, QString *error, std::atomic_bool *cancel=nullptr)
Stream full-resolution observations to a new CSV; no display buffers are used.
Definition timeseriesrunlayer.cpp:276
UnitSystem unitSystem() const override
Definition timeseriesrunlayer.h:37
ResultDescriptor descriptorFor(const QString &id) const
Definition timeseriesrunlayer.cpp:99
void setModelClockOffset(int seconds)
Explicitly map UTC observation instants to a fixed-offset model wall clock.
Definition timeseriesrunlayer.cpp:134
void getSeriesAt(const ObjectRef &, PlotAttribute, SeriesData &out) const override
Fixed attributes are deliberately unsupported for native observations.
Definition timeseriesrunlayer.cpp:115
double startDateJulian() const override
Definition timeseriesrunlayer.cpp:87
void dataReady()
A display/statistics cache was published on the GUI thread; refresh views.
int periodCount() const override
Definition timeseriesrunlayer.cpp:93
const OpenSWMM::TimeSeries::SeriesInfo * series(const QString &id) const
Definition timeseriesrunlayer.cpp:85
QString path
Populated by the worker only after its own successful atomic creation.
Definition extensiontimeseriesaccess.cpp:32
Slice BL — abstract "data-source" that the ComparisonPlotModel reads timeseries from.
hid_t id
Definition mesh2dh5reader.cpp:54
std::function< bool()> cancel
Definition meshassignmentsampling.cpp:32
Definition chartproperties.h:37
PlotAttribute
What a series plots. One row per attribute in the Nx2 grid.
Definition plotattribute.h:41
@ SI
m, m/s, m³/s, m³
QString from
Definition raingageassignment.cpp:301
QString to
Definition raingageassignment.cpp:301
One homogeneous source series; all identifiers retain leading zeros.
Definition timeseriesdataset.h:34
Immutable collection metadata; reading it does not load observation rows.
Definition timeseriesdataset.h:67
Identifies what object a series is about. Kind is the discriminator; the active union member is impli...
Definition irunlayer.h:44
One plottable result: a fixed attribute, a species by name, OR a 2D face variable from the source's o...
Definition resultdescriptor.h:46
Result of one series resolution. Times are SWMM DateTime doubles (OLE-Automation epoch,...
Definition irunlayer.h:262
Shared worker state; done publishes all result writes with release/acquire ordering.
Definition timeseriesrunlayer.cpp:63
double error
Definition terrainerrorfield.cpp:42
Owning metadata and bounded sample values for native observation datasets.