moving_average_filter.cpp
Go to the documentation of this file.
2 #include "ui_moving_average_filter.h"
3 #include <numeric>
4 #include <QCheckBox>
5 
7  ui(new Ui::MovingAverageFilter),
8  _widget(new QWidget()),
9  _ring_view( _buffer.begin(), _buffer.end() )
10 {
11  ui->setupUi(_widget);
12 
13  connect(ui->spinBoxSamples, qOverload<int>(&QSpinBox::valueChanged),
14  this, [=](int){ emit parametersChanged(); } );
15 
16  connect(ui->checkBoxTimeOffset, &QCheckBox::toggled,
17  this, [=](){ emit parametersChanged(); } );
18 }
19 
21 {
22  delete ui;
23  delete _widget;
24 }
25 
27 {
28  _buffer.clear();
29  TimeSeriesTransform::init();
30 }
31 
34 {
35  size_t buffer_size = std::min( int(ui->spinBoxSamples->value()), int(dataSource()->size()));
36  if( buffer_size != _buffer.size() ) {
37  _buffer.resize( buffer_size );
38  _ring_view = nonstd::ring_span<PlotData::Point>(_buffer.begin(), _buffer.end());
39  }
40 
41  const auto& p = dataSource()->at(index);
43 
44  while( _ring_view.size() < buffer_size )
45  {
47  }
48 
49  double total = 0;
50 
51  for(size_t i=0; i < buffer_size; i++)
52  {
53  total += _ring_view[i].y;
54  }
55 
56  double time = p.x;
57  if( ui->checkBoxTimeOffset->isChecked())
58  {
59  time = (_ring_view.back().x + _ring_view.front().x) / 2.0;
60  }
61 
62  PlotData::Point out = {time, total / _ring_view.size() };
63  return out;
64 }
65 
67 {
68  return _widget;
69 }
70 
71 bool MovingAverageFilter::xmlSaveState(QDomDocument &doc, QDomElement &parent_element) const
72 {
73  QDomElement widget_el = doc.createElement("options");
74  widget_el.setAttribute("value", ui->spinBoxSamples->value());
75  widget_el.setAttribute("compensate_offset", ui->checkBoxTimeOffset->isChecked() ? "true" : "false");
76  parent_element.appendChild( widget_el );
77  return true;
78 }
79 
80 bool MovingAverageFilter::xmlLoadState(const QDomElement &parent_element)
81 {
82  QDomElement widget_el = parent_element.firstChildElement("options");
83  ui->spinBoxSamples->setValue( widget_el.attribute("value").toInt() );
84  bool checked = widget_el.attribute("compensate_offset") == "true";
85  ui->checkBoxTimeOffset->setChecked( checked );
86  return true;
87 }
bool xmlSaveState(QDomDocument &doc, QDomElement &parent_element) const override
const Point & at(size_t index) const
Definition: plotdata.h:97
bool xmlLoadState(const QDomElement &parent_element) override
QWidget * optionsWidget() override
Ui::MovingAverageFilter * ui
std::vector< PlotData::Point > _buffer
#define min(A, B)
Definition: Log.c:64
reference back() nsrs_noexcept
Definition: ring_span.hpp:502
virtual size_t size() const
Definition: plotdata.h:92
const PlotData * dataSource() const
nonstd::optional< PlotData::Point > calculateNextPoint(size_t index) override
float time
Definition: mqtt_test.py:17
size_type size() const nsrs_noexcept
Definition: ring_span.hpp:468
nonstd::ring_span_lite::ring_span< PlotData::Point > _ring_view
reference front() nsrs_noexcept
Definition: ring_span.hpp:492
typename PlotDataBase< Value >::Point Point
Definition: plotdata.h:290
void push_back(value_type const &value)
Definition: ring_span.hpp:605


plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Dec 6 2020 03:48:09