#include SpectrogramSeries::SpectrogramSeries(std::vector xAxisData, std::vector yAxisData, std::vector valuesData, const Unit &xAxisUnit, const Unit &yAxisUnit, const Unit &valuesUnit, double resolution) : SpectrogramSeries{ std::make_shared >(std::move(xAxisData)), xAxisUnit, std::make_shared >(std::move(valuesData), yAxisData.size()), valuesUnit, OptionalAxis{std::make_shared >(std::move(yAxisData)), yAxisUnit}, resolution} { } SpectrogramSeries::SpectrogramSeries(std::shared_ptr > xAxisData, const Unit &xAxisUnit, std::shared_ptr > valuesData, const Unit &valuesUnit, OptionalAxis yAxis, double resolution) : DataSeries{std::move(xAxisData), xAxisUnit, std::move(valuesData), valuesUnit, std::move(yAxis)}, m_XResolution{resolution} { } std::unique_ptr SpectrogramSeries::clone() const { return std::make_unique(*this); } std::shared_ptr SpectrogramSeries::subDataSeries(const SqpRange &range) { auto subXAxisData = std::vector(); auto subValuesData = QVector(); // Uses QVector to append easily values to it this->lockRead(); auto bounds = xAxisRange(range.m_TStart, range.m_TEnd); for (auto it = bounds.first; it != bounds.second; ++it) { subXAxisData.push_back(it->x()); subValuesData.append(it->values()); } auto yAxis = this->yAxis(); this->unlock(); return std::make_shared( std::make_shared >(std::move(subXAxisData)), this->xAxisUnit(), std::make_shared >(subValuesData.toStdVector(), yAxis.size()), this->valuesUnit(), std::move(yAxis)); }