Public Slots | Signals | Public Member Functions
LinearFKActiveResults Class Reference

Brief description of class still missing. More...

#include <LinearFKActiveResults.h>

Inheritance diagram for LinearFKActiveResults:
SciFigs::GraphicSheetMenu

List of all members.

Public Slots

void adjust (int ig, ModalCurve &curve, double min, double max, SamplingOptions options)
void autoPick ()
void exportCurves ()
void setPick (bool on)
void stackGrids ()

Signals

void newCurve (int iGraph)
void newPlot (LineLayer *curveLayer, QString caption)

Public Member Functions

void createObjects (const QList< LinearFKActiveArrayStations * > &arrays)
LineLayercurveLayer (int index) const
IrregularGrid2DPlotgridLayer (int index) const
 LinearFKActiveResults (QWidget *parent=0)
void setLimits ()
void setWaveLengthLimit (int ig, double wl)
void setXAxis (const SamplingParameters &s)
void setYAxis (Scale::Type t, double min, double max)
 ~LinearFKActiveResults ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References SciFigs::GraphicSheetMenu::addMenu(), autoPick(), exportCurves(), setPick(), stackGrids(), QGpCoreTools::tr(), and TRACE.

    : GraphicSheetMenu(parent)
{
  TRACE;
  Settings::getSize(this, "LinearFKActiveResults" );

  // Tools menu
  QMenu * m;
  QAction * a;

  m=addMenu(tr( "&Tools" ));

  a=new QAction(tr( "Stack selected plots" ), this);
  a->setStatusTip(tr( "Grids of selected plot are stacked and a new plot is added" ));
  connect(a, SIGNAL(triggered()), this, SLOT(stackGrids()) );
  m->addAction(a);

  m->addSeparator();

  a=new QAction(tr( "Pick curves" ), this);
  a->setStatusTip(tr( "Switch all selected graphs to pick mode (pick ordered)" ));
  a->setCheckable(true);
  connect(a, SIGNAL(toggled(bool)), this, SLOT(setPick(bool)) );
  m->addAction(a);

  a=new QAction(tr( "Auto pick curves" ), this);
  a->setStatusTip(tr( "Scan grids to find the absolute maximum and start picking from there" ));
  connect(a, SIGNAL(triggered()), this, SLOT(autoPick()) );
  m->addAction(a);

  a=new QAction(tr( "Export all curves" ), this);
  a->setStatusTip(tr( "Export al curves from all selected plots" ));
  connect(a, SIGNAL(triggered()), this, SLOT(exportCurves()) );
  m->addAction(a);
}

Description of destructor still missing

References TRACE.

{
  TRACE;
  Settings::setSize(this, "LinearFKActiveResults" );
}

Member Function Documentation

void LinearFKActiveResults::adjust ( int  ig,
ModalCurve curve,
double  min,
double  max,
SamplingOptions  options 
) [slot]

References QGpCoreTools::Function, QGpCoreTools::InversedScale, TRACE, and QGpCoreTools::Curve< pointType >::xInverse().

{
  TRACE;
  ASSERT(options & Function);
  // Transforms X scale according to options (log and inv)
  if(options & InversedScale) {
    curve.xInverse(options);
  }
  _gridLayers[ig]->grid().followMaximumX<ModalCurve, FactoryPoint>(curve, min, max);
  // Re-Transforms axis according options (log and inv)
  if(options & InversedScale)
    curve.xInverse(options);
}

References newCurve(), QGpCoreTools::tr(), and TRACE.

Referenced by LinearFKActiveResults().

{
  TRACE;
  if(!selectAll(tr("Automatic picking"))) return;
  int n=_gridLayers.count();
  for(int ig=0;ig < n;ig++ ) {
    if(_curveLayers[ ig ]->graph()->isSelected()) {
      ModalCurve& curve=static_cast<ModalLine *>(_curveLayers[ig]->addLine())->curve();
      curve=_gridLayers[ig]->grid().followMaximumX<ModalCurve, FactoryPoint>();
      _curveLayers[ig]->deepUpdate();
      emit newCurve(ig);
    }
  }
}

References SciFigs::GraphicSheetMenu::addGraph(), SciFigs::GraphicSheetMenu::addText(), geopsyGui, SciFigs::GraphicSheetMenu::setGraphGeometry(), SciFigs::GraphicSheet::setStatusBar(), SciFigs::TextEdit::setText(), SciFigs::GraphicSheetMenu::sheet(), TRACE, and w.

{
  TRACE;
  sheet()->setStatusBar(geopsyGui->statusBar());
  int n=arrays.count();
  double x=0.5, y=0.5;
  _gridLayers.resize(n);
  _curveLayers.resize(n);
  _limitLayers.resize(n);
  for(int ig=0;ig < n;ig++ ) {
    AxisWindow * w=addGraph();
    setGraphGeometry(w, x, 9, y+1, 9);
    TextEdit * c=addText(x, y, 9, 1);
    c->setText(arrays.at(ig)->name());
    x += 9;
    if(x==18.5) {x=0.5;y += 10;}
    _gridLayers[ig]=new IrregularGrid2DPlot(w);
    _curveLayers[ig]=new LineLayer(w);
    _limitLayers[ig]=new DispersionLimitLayer(w);
    _curveLayers[ig]->setReferenceLine(createReferenceLine());
    _limitLayers[ig]->addLine();
  }
}
LineLayer* LinearFKActiveResults::curveLayer ( int  index) const [inline]

Referenced by exportCurves(), and stackGrids().

{return _curveLayers[index];}

References SciFigs::LineLayer::count(), curveLayer(), QGpCoreTools::endl(), fileName, SciFigs::GraphContentLayer::graph(), SciFigs::GraphicObject::isSelected(), SciFigs::LineLayer::line(), MSG_ID, SciFigs::CurveBrowserProxy::save(), SciFigs::CurveBrowserProxy::setLine(), QGpCoreTools::tr(), and TRACE.

Referenced by LinearFKActiveResults().

{
  TRACE;
  if(!selectAll(tr("Export all curves"))) return;
  QString fileName=Message::getSaveFileName(tr("Export all curves"), tr("4 columns file(*)"));
  if(!fileName.isEmpty()) {
    QFile f(fileName);
    if(!f.open(QIODevice::WriteOnly) ) {
      Message::warning(MSG_ID, tr("Export all curves"),
                       tr("Cannot to write to file %1").arg(fileName), Message::cancel());
      return ;
    }
    QTextStream s(&f);
    int n=_gridLayers.count();
    DispersionProxy proxy;
    for(int ig=0;ig < n;ig++ ) {
      LineLayer * curveLayer=_curveLayers[ig];
      if(curveLayer->graph()->isSelected()) {
        int n=curveLayer->count();
        s << "# Shot " << ig << endl;
        for(int i=0;i<n;i++ ) {
          proxy.setLine(curveLayer->line(i));
          proxy.save(s);
        }
      }
    }
  }
}
IrregularGrid2DPlot* LinearFKActiveResults::gridLayer ( int  index) const [inline]

Referenced by stackGrids().

{return _gridLayers[index];}
void LinearFKActiveResults::newCurve ( int  iGraph) [signal]

Referenced by autoPick().

void LinearFKActiveResults::newPlot ( LineLayer curveLayer,
QString  caption 
) [signal]

Referenced by stackGrids().

void LinearFKActiveResults::setPick ( bool  on) [slot]

References TRACE.

Referenced by LinearFKActiveResults().

{
  TRACE;
  int n=_gridLayers.count();
  for(int ig=0;ig < n;ig++ ) {
    if(_curveLayers[ ig ]->graph()->isSelected()) {
      _curveLayers[ig]->setTrackingAction(LineLayer::PickOrdered, on);
    }
  }
}
void LinearFKActiveResults::setWaveLengthLimit ( int  ig,
double  wl 
)

References TRACE.

{
  TRACE;
  _limitLayers[ig]->setConstantWaveNumber(0, 2.0*M_PI/wl);
  _limitLayers[ig]->graph()->deepUpdate();
}

References SciFigs::AxisWindow::deepUpdate(), QGpCoreTools::SamplingParameters::maximum(), QGpCoreTools::SamplingParameters::minimum(), SciFigs::Axis::setRange(), SciFigs::Axis::setScaleType(), TRACE, QGpCoreTools::SamplingParameters::type(), SciFigs::AxisWindow::updateInternalGeometry(), w, and SciFigs::AxisWindow::xAxis().

{
  TRACE;
  int n=_gridLayers.count();
  for(int ig=0;ig < n;ig++ ) {
    AxisWindow * w=_gridLayers[ ig ]->graph();
    if(s.type()==SamplingParameters::Linear) {
      w->xAxis()->setScaleType(Scale::Linear);
    } else {
      w->xAxis()->setScaleType(Scale::Log);
    }
    w->xAxis()->setRange(s.minimum(), s.maximum());
    _limitLayers[ig]->setFrequencySampling(s);
    w->updateInternalGeometry();
    w->deepUpdate();
  }
}
void LinearFKActiveResults::setYAxis ( Scale::Type  t,
double  min,
double  max 
)

References SciFigs::AxisWindow::deepUpdate(), SciFigs::Axis::setRange(), SciFigs::Axis::setScaleType(), TRACE, SciFigs::AxisWindow::updateInternalGeometry(), w, and SciFigs::AxisWindow::yAxis().

{
  TRACE;
  int n=_gridLayers.count();
  for(int ig=0;ig < n;ig++ ) {
    AxisWindow * w=_gridLayers[ ig ]->graph();
    w->yAxis()->setScaleType(t);
    w->yAxis()->setRange(min, max);
    w->updateInternalGeometry();
    w->deepUpdate();
  }
}

References SciFigs::GraphicSheetMenu::addGraph(), SciFigs::LineLayer::addLine(), SciFigs::GraphicSheetMenu::addText(), curveLayer(), SciFigs::GraphicObject::deepUpdate(), SciFigs::GraphContentLayer::graph(), SciFigs::IrregularGrid2DPlot::grid(), gridLayer(), SciFigs::GraphicObject::isSelected(), SciFigs::Axis::maximum(), SciFigs::Axis::minimum(), newPlot(), SciFigs::Axis::scaleType, SciFigs::GraphicSheetMenu::setGraphGeometry(), SciFigs::IrregularGrid2DPlot::setGrid(), SciFigs::IrregularGrid2DPlot::setLinearPalette(), SciFigs::Axis::setRange(), SciFigs::LineLayer::setReferenceLine(), SciFigs::Axis::setScaleType(), SciFigs::TextEdit::setText(), SciFigs::TextEdit::text, QGpCoreTools::tr(), TRACE, SciFigs::AxisWindow::updateInternalGeometry(), w, SciFigs::AxisWindow::xAxis(), and SciFigs::AxisWindow::yAxis().

Referenced by LinearFKActiveResults().

{
  TRACE;
  if(!selectAll(tr("Stack grids"))) return;
  IrregularGrid2D stackedGrid;
  int nStacks=0;
  int n=_gridLayers.count();
  for(int ig=0;ig < n;ig++ ) {
    IrregularGrid2DPlot * gridLayer=_gridLayers[ig];
    if(gridLayer->graph()->isSelected()) {
      if(nStacks==0) {
        stackedGrid=gridLayer->grid();
        nStacks++;
      } else {
        stackedGrid += gridLayer->grid();
        nStacks++;
      }
    }
  }
  // Add plot
  if(nStacks>0) {
    double x=0.5 + 9 * (n % 2), y=0.5 + (n/2) * 10;
    AxisWindow * w=addGraph();
    setGraphGeometry(w, x, 9, y+1, 9);
    IrregularGrid2DPlot * gridLayer=new IrregularGrid2DPlot(w);
    _gridLayers.append(gridLayer);
    LineLayer * curveLayer=new LineLayer(w);
    curveLayer->setReferenceLine(createReferenceLine());
    _curveLayers.append(curveLayer);
    gridLayer->setGrid(stackedGrid);
    gridLayer->setLinearPalette(0);
    DispersionLimitLayer * dispLimitLayer=new DispersionLimitLayer(w);
    dispLimitLayer->addLine();
    _limitLayers.append(dispLimitLayer);
    // Add text label
    TextEdit * c=addText(x, y, 9, 1);
    c->setText(tr("Stack of %1 grids").arg(nStacks));
    c->deepUpdate();
    // Copy axis range and scale from last plot
    AxisWindow * w1=_gridLayers[n-1]->graph();
    emit newPlot(curveLayer, c->text());
    w->xAxis()->setScaleType(w1->xAxis()->scaleType());
    w->yAxis()->setScaleType(w1->yAxis()->scaleType());
    w->xAxis()->setRange(w1->xAxis()->minimum(), w1->xAxis()->maximum());
    w->yAxis()->setRange(w1->yAxis()->minimum(), w1->yAxis()->maximum());
    w->updateInternalGeometry();
  }
}

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