void BaselineInfoPage::setDisplayData(const PowerSpectrumData& data) { const int channelCount = data.channelCount(); if (channelCount > 0) { const int records = data.recordCount(); if (records > 0) { preparePlot(CHANNEL, records, data); } else { qDebug() << "Number of rows is not valid: " << records << "!"; } } else { qDebug() << "Data does not contain any needed information!"; } }
/** * @brief SpectrogramScopeConfig::loadConfiguration loads the plot configuration into the scope gadget widget * @param scopeGadgetWidget */ void SpectrogramScopeConfig::loadConfiguration(ScopeGadgetWidget *scopeGadgetWidget) { preparePlot(scopeGadgetWidget); scopeGadgetWidget->setScope(this); scopeGadgetWidget->startTimer(m_refreshInterval); //There should be only one spectrogram per plot //TODO: Upgrade this to handle multiple spectrograms on a single axis if ( m_spectrogramSourceConfigs.length() != 1) return; Plot3dCurveConfiguration* spectrogramSourceConfigs = m_spectrogramSourceConfigs.front(); QString uavObjectName = spectrogramSourceConfigs->uavObjectName; QString uavFieldName = spectrogramSourceConfigs->uavFieldName; // Get and store the units units = getUavObjectFieldUnits(uavObjectName, uavFieldName); SpectrogramData* spectrogramData = new SpectrogramData(uavObjectName, uavFieldName, samplingFrequency, windowWidth, timeHorizon); spectrogramData->setXMinimum(0); spectrogramData->setXMaximum(samplingFrequency/2); spectrogramData->setYMinimum(0); spectrogramData->setYMaximum(timeHorizon); spectrogramData->setZMaximum(zMaximum); spectrogramData->setScalePower(spectrogramSourceConfigs->yScalePower); spectrogramData->setMeanSamples(spectrogramSourceConfigs->yMeanSamples); spectrogramData->setMathFunction(spectrogramSourceConfigs->mathFunction); //Generate the waterfall name QString waterfallName = (spectrogramData->getUavoName()) + "." + (spectrogramData->getUavoFieldName()); if(spectrogramData->getHaveSubFieldFlag()) waterfallName = waterfallName.append("." + spectrogramData->getUavoSubFieldName()); //Get the uav object ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *objManager = pm->getObject<UAVObjectManager>(); UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject((spectrogramData->getUavoName()))); if(!obj) { qDebug() << "Object " << spectrogramData->getUavoName() << " is missing"; return; } //Get the units QString units = getUavObjectFieldUnits(spectrogramData->getUavoName(), spectrogramData->getUavoFieldName()); //Generate name with scaling factor appeneded QString waterfallNameScaled; if(spectrogramSourceConfigs->yScalePower == 0) waterfallNameScaled = waterfallName + "(" + units + ")"; else waterfallNameScaled = waterfallName + "(x10^" + QString::number(spectrogramSourceConfigs->yScalePower) + " " + units + ")"; //Create the waterfall plot QwtPlotSpectrogram* plotSpectrogram = new QwtPlotSpectrogram(waterfallNameScaled); plotSpectrogram->setRenderThreadCount( 0 ); // use system specific thread count plotSpectrogram->setRenderHint(QwtPlotItem::RenderAntialiased); plotSpectrogram->setColorMap(new ColorMap(colorMapType) ); // Initial raster data QDateTime NOW = QDateTime::currentDateTime(); //TODO: Upgrade this to show UAVO time and not system time for ( uint i = 0; i < timeHorizon; i++ ){ spectrogramData->timeDataHistory->append(NOW.toTime_t() + NOW.time().msec() / 1000.0 + i); } if (((double) windowWidth) * timeHorizon < (double) 10000000.0 * sizeof(spectrogramData->zDataHistory->front())){ //Don't exceed 10MB for memory for ( uint i = 0; i < windowWidth*timeHorizon; i++ ){ spectrogramData->zDataHistory->append(0); } } else{ qDebug() << "For some reason, we're trying to allocate a gigantic spectrogram. This probably represents a problem in the configuration file. TimeHorizion: "<< timeHorizon << ", windowWidth: "<< windowWidth; Q_ASSERT(0); return; } //Set up colorbar on right axis spectrogramData->rightAxis = scopeGadgetWidget->axisWidget( QwtPlot::yRight ); spectrogramData->rightAxis->setTitle( "Intensity" ); spectrogramData->rightAxis->setColorBarEnabled( true ); spectrogramData->rightAxis->setColorMap( QwtInterval(0, zMaximum), new ColorMap(colorMapType)); scopeGadgetWidget->setAxisScale( QwtPlot::yRight, 0, zMaximum); scopeGadgetWidget->enableAxis( QwtPlot::yRight ); plotSpectrogram->setData(spectrogramData->getRasterData()); plotSpectrogram->attach(scopeGadgetWidget); spectrogramData->setSpectrogram(plotSpectrogram); //Keep the curve details for later scopeGadgetWidget->insertDataSources(waterfallNameScaled, spectrogramData); // Connect the UAVO scopeGadgetWidget->connectUAVO(obj); mutex.lock(); scopeGadgetWidget->replot(); mutex.unlock(); }
/** * @brief Scatterplot2dScopeConfig::loadConfiguration loads the plot configuration into the scope gadget widget * @param scopeGadgetWidget */ void Scatterplot2dScopeConfig::loadConfiguration(ScopeGadgetWidget *scopeGadgetWidget) { preparePlot(scopeGadgetWidget); scopeGadgetWidget->setScope(this); scopeGadgetWidget->startTimer(m_refreshInterval); // Configure each data source foreach (Plot2dCurveConfiguration* plotCurveConfig, m_scatterplotSourceConfigs) { QString uavObjectName = plotCurveConfig->uavObjectName; QString uavFieldName = plotCurveConfig->uavFieldName; QRgb color = plotCurveConfig->color; ScatterplotData* scatterplotData; switch(scatterplot2dType){ case SERIES2D: scatterplotData = new SeriesPlotData(uavObjectName, uavFieldName); break; case TIMESERIES2D: scatterplotData = new TimeSeriesPlotData(uavObjectName, uavFieldName); break; } scatterplotData->setXWindowSize(timeHorizon); scatterplotData->setScalePower(plotCurveConfig->yScalePower); scatterplotData->setMeanSamples(plotCurveConfig->yMeanSamples); scatterplotData->setMathFunction(plotCurveConfig->mathFunction); //Generate the curve name QString curveName = (scatterplotData->getUavoName()) + "." + (scatterplotData->getUavoFieldName()); if(scatterplotData->getHaveSubFieldFlag()) curveName = curveName.append("." + scatterplotData->getUavoSubFieldName()); //Get the uav object ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *objManager = pm->getObject<UAVObjectManager>(); UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject((scatterplotData->getUavoName()))); if(!obj) { qDebug() << "Object " << scatterplotData->getUavoName() << " is missing"; return; } //Get the units QString units = getUavObjectFieldUnits(scatterplotData->getUavoName(), scatterplotData->getUavoFieldName()); //Generate name with scaling factor appeneded QString curveNameScaled; if(plotCurveConfig->yScalePower == 0) curveNameScaled = curveName + "(" + units + ")"; else curveNameScaled = curveName + "(x10^" + QString::number(plotCurveConfig->yScalePower) + " " + units + ")"; QString curveNameScaledMath; if (plotCurveConfig->mathFunction == "None") curveNameScaledMath = curveNameScaled; else if (plotCurveConfig->mathFunction == "Boxcar average"){ curveNameScaledMath = curveNameScaled + " (avg)"; } else if (plotCurveConfig->mathFunction == "Standard deviation"){ curveNameScaledMath = curveNameScaled + " (std)"; } else { //Shouldn't be able to get here. Perhaps a new math function was added without // updating this list? Q_ASSERT(0); } while(scopeGadgetWidget->getDataSources().keys().contains(curveNameScaledMath)) curveNameScaledMath=curveNameScaledMath+"*"; //Create the curve plot QwtPlotCurve* plotCurve = new QwtPlotCurve(curveNameScaledMath); plotCurve->setPen(QPen(QBrush(QColor(color), Qt::SolidPattern), (qreal)1, Qt::SolidLine, Qt::SquareCap, Qt::BevelJoin)); plotCurve->setSamples(*(scatterplotData->getXData()), *(scatterplotData->getYData())); plotCurve->attach(scopeGadgetWidget); scatterplotData->setCurve(plotCurve); //Keep the curve details for later scopeGadgetWidget->insertDataSources(curveNameScaledMath, scatterplotData); // Connect the UAVO scopeGadgetWidget->connectUAVO(obj); }