Public Slots | Signals | Public Member Functions
StatGridAnalyser Class Reference

#include <StatGridAnalyser.h>

List of all members.

Public Slots

void gridChanged ()
void on_freqScroll_valueChanged (int)
void on_rejectAllBut_clicked ()
void on_rejectBut_clicked ()
void on_undoAllBut_clicked ()
void on_undoBut_clicked ()
void setBand (double min, double max)

Signals

void newMean ()
void newMedian ()
void newMode ()
void reject (double frequency, double minVel, double maxVel)
void undo (double frequency)

Public Member Functions

void setGrid (IrregularGrid2DPlot *grid, Axis *valueAxis)
void setUnits (const QString &u)
 StatGridAnalyser (QWidget *parent=0, Qt::WFlags fl=0)
 ~StatGridAnalyser ()

Constructor & Destructor Documentation

StatGridAnalyser::StatGridAnalyser ( QWidget *  parent = 0,
Qt::WFlags  fl = 0 
)

References newMean(), newMedian(), newMode(), QGpCoreTools::tr(), and TRACE.

    : QWidget(parent, fl)
{
  TRACE;
  setupUi(this);

  setFocusPolicy(Qt::ClickFocus);
  _grid=0;
  _lastFreq=0;

  // Init the curve menu
  QMenu * m=new QMenu(this);
  m->setTitle(tr( "Curve"));
  m->setTearOffEnabled (true);
  curveBut->setMenu(m);

  QAction * a;
  a=new QAction(tr("&Mean"), this);
  curveBut->menu()->addAction(a);
  connect(a, SIGNAL(triggered()), this, SIGNAL(newMean()) );
  a=new QAction(tr("Medi&an"), this);
  curveBut->menu()->addAction(a);
  connect(a, SIGNAL(triggered()), this, SIGNAL(newMedian()) );
  a=new QAction(tr("Mo&de"), this);
  curveBut->menu()->addAction(a);
  connect(a, SIGNAL(triggered()), this, SIGNAL(newMode()) );

  new QShortcut(Qt::Key_Up, this, SLOT(nextFrequency()) );
  new QShortcut(Qt::Key_Up+Qt::SHIFT, this, SLOT(nextFrequencyReject()) );
  new QShortcut(Qt::Key_Down, this, SLOT(previousFrequency()) );
  new QShortcut(Qt::Key_Down+Qt::SHIFT, this, SLOT(previousFrequencyReject()) );
  new QShortcut(Qt::Key_Left, this, SLOT(decreaseLowLimit()) );
  new QShortcut(Qt::Key_Left+Qt::SHIFT, this, SLOT(decreaseHighLimit()) );
  new QShortcut(Qt::Key_Right, this, SLOT(increaseLowLimit()) );
  new QShortcut(Qt::Key_Right+Qt::SHIFT, this, SLOT(increaseHighLimit()) );

  _partitionBandLayer=0;
  _partitionCurveLayer=0;
  _densityBandLayer=0;
  _densityCurveLayer=0;
}

References TRACE.

{
  TRACE;
}

Member Function Documentation

References SciFigs::IrregularGrid2DPlot::grid(), QGpCoreTools::IrregularGrid2D::maximumValue(), QGpCoreTools::IrregularGrid2D::nx(), on_freqScroll_valueChanged(), SciFigs::Axis::setRange(), and TRACE.

Referenced by HistogramWidget::fillGrid().

{
  TRACE;
  const IrregularGrid2D& g=_grid->grid();
  if(g.nx()==0) {
    freqScroll->setMaximum(0);
  } else {
    freqScroll->setMaximum(g.nx() - 1);
    *probaDensity->xAxis()=*_valueAxis;
    static bool initialized=false;
    if(!initialized) probaDensity->yAxis()->setRange(0.0, g.maximumValue());
    initialized=true;
    *probaPartition->xAxis()=*_valueAxis;
    on_freqScroll_valueChanged(0);
  }
  _bands.resize(g.nx());
}
void StatGridAnalyser::newMean ( ) [signal]

Referenced by StatGridAnalyser().

void StatGridAnalyser::newMedian ( ) [signal]

Referenced by StatGridAnalyser().

void StatGridAnalyser::newMode ( ) [signal]

Referenced by StatGridAnalyser().

References SciFigs::ParallelBands::band(), QGpCoreTools::Curve< pointType >::count(), QGpCoreTools::IrregularGrid2D::crossSection(), SciFigs::PlotLine2D::curve(), SciFigs::IrregularGrid2DPlot::grid(), QGpCoreTools::IrregularGrid2D::height(), SciFigs::LineLayer::line(), SciFigs::GraphContentLayer::lockDelayPainting(), QGpCoreTools::IrregularGrid2D::log10(), SciFigs::ParallelBand::maximum(), QGpCoreTools::IrregularGrid2D::mean(), QGpCoreTools::IrregularGrid2D::median(), SciFigs::ParallelBand::minimum(), QGpCoreTools::IrregularGrid2D::mode(), QGpCoreTools::IrregularGrid2D::nx(), QGpCoreTools::GaussDistribution::part(), QGpCoreTools::GaussDistribution::rho(), SciFigs::Axis::scaleType, setBand(), SciFigs::PlotLine2D::setCurve(), QGpCoreTools::Point2D::setY(), QGpCoreTools::sqrt(), QGpCoreTools::tr(), TRACE, SciFigs::GraphContentLayer::unlock(), QGpCoreTools::IrregularGrid2D::variance(), QGpCoreTools::Point2D::x(), QGpCoreTools::IrregularGrid2D::x(), QGpCoreTools::Point2D::y(), and QGpCoreTools::YAxis.

Referenced by gridChanged().

{
  TRACE;
  IrregularGrid2D grid=_grid->grid();
  if(grid.nx()==0) return ;
  bool logScale=_valueAxis->scaleType()==Scale::Log;

  int iFreq=freqScroll->value();
  freqEdit->setText(QString( "%1 Hz" ).arg(grid.x(iFreq) ));

  PlotLine2D * gridDensityLine=static_cast<PlotLine2D *>(_densityCurveLayer->line(0));
  PlotLine2D * gaussDensityLine=static_cast<PlotLine2D *>(_densityCurveLayer->line(1));
  PlotLine2D * gridPartitionLine=static_cast<PlotLine2D *>(_partitionCurveLayer->line(0));
  PlotLine2D * gaussPartitionLine=static_cast<PlotLine2D *>(_partitionCurveLayer->line(1));

  _densityCurveLayer->lockDelayPainting();
  _partitionCurveLayer->lockDelayPainting();

  gridDensityLine->setCurve(grid.crossSection(YAxis, iFreq) );
  gaussDensityLine->setCurve(gridDensityLine->curve());
  gridPartitionLine->setCurve(gridDensityLine->curve());
  gaussPartitionLine->setCurve(gridDensityLine->curve());

  if(logScale) {
    grid.log10(YAxis);
  }

  double mean=grid.mean(YAxis, iFreq);
  double stddev=sqrt(grid.variance(YAxis, iFreq) );
  double med=grid.median(YAxis, iFreq);
  double meddev=sqrt(grid.variance(YAxis, iFreq, med) );
  double mod=grid.mode(YAxis, iFreq);
  double moddev=sqrt(grid.variance(YAxis, iFreq, mod) );

  int n=gridDensityLine->curve().count();
  double sum=0;
  for(int i=0;i < n;i++ ) {
    Point2D& p=gridPartitionLine->curve()[i];
    sum += p.y();
    p.setY(sum * grid.height(i) );
  }

  GaussDistribution gd(mean, stddev);
  for(int i=0;i < n;i++ ) {
    Point2D& p=gaussDensityLine->curve()[i];
    if(logScale)
      p.setY(gd.rho(log10( p.x()) ));
    else
      p.setY(gd.rho(p.x()) );
  }
  for(int i=0;i < n;i++ ) {
    Point2D& p=gaussPartitionLine->curve()[i];
    if(logScale)
      p.setY(gd.part(log10( p.x()) ));
    else
      p.setY(gd.part(p.x()) );
  }

  if(_lastFreq<_bands.count()) {
    const ParallelBand& b=_densityBandLayer->band(0);
    _bands[_lastFreq].first=b.minimum();
    _bands[_lastFreq].second=b.maximum();
  }
  if(iFreq<_bands.count()) {
    if(_bands[iFreq].first!=0.0 || _bands[iFreq].second!=0.0) {
      setBand(_bands[iFreq].first, _bands[iFreq].second);
    }
    _lastFreq=iFreq;
  }

  _densityCurveLayer->unlock();
  _partitionCurveLayer->unlock();

  if(logScale) {
    mean=pow(10.0, mean);
    stddev=pow(10.0, stddev);
    med=pow(10.0, med);
    meddev=pow(10.0, meddev);
    mod=pow(10.0, mod);
    moddev=pow(10.0, moddev);
  }
  statValuesLabel->setText(tr( "Average %1 %7 - Stddev %2 %7\n"
                                "Median %3 %7 - Meddev %4 %7\n"
                                "Mode %5 %7 - Moddev %6 %7" ).
                            arg(mean, 0, 'g', 3).arg(stddev, 0, 'g', 3).
                            arg(med, 0, 'g', 3).arg(meddev, 0, 'g', 3).
                            arg(mod, 0, 'g', 3).arg(moddev, 0, 'g', 3).arg(_units));

  probaDensity->graphContent() ->deepUpdate();
  probaPartition->graphContent() ->deepUpdate();
}

References SciFigs::IrregularGrid2DPlot::grid(), QGpCoreTools::IrregularGrid2D::nx(), reject(), TRACE, and QGpCoreTools::IrregularGrid2D::x().

{
  TRACE;
  const IrregularGrid2D& g=_grid->grid();
  for(int i=g.nx()-1; i>=0; i-- ) {
    emit reject(g.x(i), _bands[i].first, _bands[i].second);
  }
}

Reject all samples outside the band. If SHIFT key is pressed, the current frequency is incremented. If the band for next frequency does not exist, a new one is created from the current one plus a translation calculated on the median difference before the rejection at the current frequency.

References SciFigs::ParallelBands::band(), SciFigs::IrregularGrid2DPlot::grid(), SciFigs::ParallelBand::maximum(), SciFigs::ParallelBand::minimum(), reject(), TRACE, and QGpCoreTools::IrregularGrid2D::x().

{
  TRACE;
  const ParallelBand& b=_densityBandLayer->band(0);
  emit reject(_grid->grid().x(freqScroll->value()), b.minimum(), b.maximum());
}

References SciFigs::IrregularGrid2DPlot::grid(), QGpCoreTools::IrregularGrid2D::nx(), TRACE, undo(), and QGpCoreTools::IrregularGrid2D::x().

{
  TRACE;
  const IrregularGrid2D& g=_grid->grid();
  for(int i=g.nx()-1; i>=0; i-- ) {
    emit undo(g.x(i) );
  }
}

References SciFigs::IrregularGrid2DPlot::grid(), TRACE, undo(), and QGpCoreTools::IrregularGrid2D::x().

{
  TRACE;
  emit undo(_grid->grid().x(freqScroll->value()) );
}
void StatGridAnalyser::reject ( double  frequency,
double  minVel,
double  maxVel 
) [signal]
void StatGridAnalyser::setBand ( double  min,
double  max 
) [slot]

References SciFigs::ParallelBands::band(), SciFigs::ParallelBand::setMaximum(), SciFigs::ParallelBand::setMinimum(), and TRACE.

Referenced by on_freqScroll_valueChanged(), and setGrid().

{
  TRACE;
  ParallelBand& b1=_densityBandLayer->band(0);
  b1.setMinimum(min);
  b1.setMaximum(max);
  ParallelBand& b2=_partitionBandLayer->band(0);
  b2.setMinimum(min);
  b2.setMaximum(max);
  probaDensity->graphContent()->deepUpdate();
  probaPartition->graphContent()->deepUpdate();
}
void StatGridAnalyser::setGrid ( IrregularGrid2DPlot grid,
Axis valueAxis 
)

References SciFigs::ParallelBands::addBand(), SciFigs::LineLayer::addLine(), SciFigs::GraphContentLayer::addTrackingAction(), setBand(), SciFigs::GraphContentLayer::setOpacity(), SciFigs::LineLayer::setReferenceLine(), SciFigs::LineLayer::setReferencePen(), QGpCoreTools::tr(), and TRACE.

Referenced by HistogramWidget::HistogramWidget().

{
  TRACE;
  _grid=grid;
  _valueAxis=valueAxis;

  _densityBandLayer=new ParallelBands(probaDensity);
  _densityBandLayer->setObjectName( "FKStatSlowLimits" );
  _densityBandLayer->addTrackingAction(tr("Pick bands"), 0, tr("Define the frequency band to rejet."));
  _densityBandLayer->setOpacity(0.6);
  _densityBandLayer->addBand(0, 0, Brush(QColor( 205, 242, 255) ));
  connect(_densityBandLayer, SIGNAL(bandPicked(double, double)), this, SLOT(setBand( double, double) ));
  _densityCurveLayer=new LineLayer(probaDensity);
  _densityCurveLayer->setObjectName( "FKStatProba" );
  _densityCurveLayer->setReferenceLine(new PlotLine2D);
  _densityCurveLayer->setReferencePen(Pen( Qt::blue) );
  probaDensity->yAxis()->setNumberType(Number::Scientific);
  probaDensity->yAxis()->setNumberPrecision(1);
  probaDensity->yAxis()->setTitle( "Probability density" );
  _densityCurveLayer->addLine(Pen( Qt::blue), Symbol());
  _densityCurveLayer->addLine(Pen( Qt::red), Symbol());

  _partitionBandLayer=new ParallelBands(probaPartition);
  _partitionBandLayer->setObjectName( "FKStatSlowLimits" );
  _partitionBandLayer->addTrackingAction(tr("Pick bands"), 0, tr("Define the frequency band to rejet."));
  _partitionBandLayer->setOpacity(0.6);
  _partitionBandLayer->addBand(0, 0, Brush(QColor( 205, 242, 255) ));
  connect(_partitionBandLayer, SIGNAL(bandPicked(double, double)), this, SLOT(setBand( double, double) ));
  _partitionCurveLayer=new LineLayer(probaPartition);
  _partitionCurveLayer->setObjectName( "FKStatPartF" );
  _partitionCurveLayer->setReferenceLine(new PlotLine2D);
  _partitionCurveLayer->setReferencePen(Pen( Qt::blue) );
  probaPartition->yAxis()->setRange(0.0, 1.0);
  probaPartition->yAxis()->setNumberType(Number::Fixed);
  probaPartition->yAxis()->setNumberPrecision(1);
  probaPartition->yAxis()->setTitle( "Partition Function" );
  _partitionCurveLayer->addLine(Pen( Qt::blue), Symbol());
  _partitionCurveLayer->addLine(Pen( Qt::red), Symbol());
}
void StatGridAnalyser::setUnits ( const QString &  u) [inline]

Referenced by HistogramWidget::select().

{_units=u;}
void StatGridAnalyser::undo ( double  frequency) [signal]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines