Public Member Functions | Protected Slots | Protected Attributes
FKTimeWindows Class Reference

#include <FKTimeWindows.h>

Inheritance diagram for FKTimeWindows:
HRFKTimeWindows

List of all members.

Public Member Functions

 FKTimeWindows (QWidget *parent=0)
virtual void setArray (const ArrayStations &array)
void setGrid (FKParameters *param)
bool setParameters (double frequency, FKParameters *param, bool doNSampleWarning=true)
void setTimeWindowLayer (TimeWindowLayer *twLayer)
TimeWindowListtimeWindowList () const
 ~FKTimeWindows ()

Protected Slots

void currentVelocitySlowness (QPoint mousePos)
void on_component_currentIndexChanged (int index)
void on_direction_valueChanged (double value)
void on_kEdit_valueChanged (const QString &)
void on_vEdit_valueChanged (const QString &)
virtual void setComponent ()
virtual void setCurrentWindow ()

Protected Attributes

int _currentWindow
CircleViewer_fkCircleLayer
FKMeshLayer_fkMeshLayer
LiveGridLayer_gridLayer
FKArrayProcess_process
TimeWindowLayer_timeWindowLayer

Constructor & Destructor Documentation

FKTimeWindows::FKTimeWindows ( QWidget *  parent = 0)

References _currentWindow, _fkCircleLayer, _fkMeshLayer, _gridLayer, _process, _timeWindowLayer, currentVelocitySlowness(), SciFigs::GraphContentLayer::graphContent(), SciFigs::CircleViewer::resize(), setComponent(), setCurrentWindow(), SciFigs::GraphContent::setGridLines(), SciFigs::LiveGridLayer::setSampling(), and TRACE.

    : QWidget(parent)
{
  TRACE;
  setupUi(this);
  _currentWindow=-1;
  _timeWindowLayer=0;
  /*
    setup graph properties
  */
  waveNumGrid->graphContent()->setGridLines(false);
  _gridLayer=new LiveGridLayer(waveNumGrid);
  _gridLayer->setSampling(3);
  _fkMeshLayer=new FKMeshLayer (waveNumGrid);
  _fkMeshLayer->setObjectName( "fkMesh" );
  _fkCircleLayer=new CircleViewer(waveNumGrid);
  _fkCircleLayer->setObjectName( "userSlowness" );
  _fkCircleLayer->resize(1);
  connect(waveNumGrid->graphContent(), SIGNAL(mouseMoved( QPoint, Qt::MouseButtons, Qt::KeyboardModifiers) ),
           this, SLOT(currentVelocitySlowness( QPoint) ));
  /*
   Set axis
  */
  waveNumGrid->xAxis()->setTitle( "Wave number X (rad/m)" );
  waveNumGrid->xAxis()->setTitleInversedScale( "Wave length X/(2*pi) (m/rad)" );
  waveNumGrid->xAxis()->setSizeType(Axis::Scaled);
  waveNumGrid->yAxis()->setTitle( "Wave number Y (rad/m)" );
  waveNumGrid->yAxis()->setTitleInversedScale( "Wave length Y/(2*pi) (m/rad)" );
  waveNumGrid->yAxis()->setSizeType(Axis::Scaled);

  connect(component, SIGNAL(activated(int)), this, SLOT(setComponent()) );
  connect(winScroll, SIGNAL(valueChanged(int)), this, SLOT(setCurrentWindow()) );

  _process=0;
}

References _process, and TRACE.

{
  TRACE;
  delete _process;
}

Member Function Documentation

void FKTimeWindows::currentVelocitySlowness ( QPoint  mousePos) [protected, slot]

References _process, QGpCoreTools::Point2D::azimuthTo(), ArrayCore::FrequencyBand::center(), QGpCoreTools::Point2D::distanceTo(), ArrayCore::ArrayProcess::frequency(), QGpCoreTools::tr(), and TRACE.

Referenced by FKTimeWindows().

{
  TRACE;
  Point2D p=waveNumGrid->graphContent()->options().s2r(mousePos);
  Point2D origin(0, 0);
  double kr=p.distanceTo(origin);
  double az=Angle::mathToGeographic(origin.azimuthTo(p));
  double sr=kr/(2.0*M_PI*_process->frequency().center());
  velSlowLabel->setText(tr( "Propagation towards %1 counted from North\nat k=%2 rad/m, v=%3 m/s or s=%4 s/km" ).
                         arg(az, 0, 'f', 4).arg(kr, 0, 'g', 3).
                         arg(1.0/sr, 0, 'f', 0).arg(sr*1000.0, 0, 'g', 5) );;
}
void FKTimeWindows::on_component_currentIndexChanged ( int  index) [protected, slot]

References setComponent(), and QGpCoreTools::tr().

{
  if(component->currentText()==tr("Horizontal")) {
    direction->setEnabled(true);
  } else {
    direction->setEnabled(false);
  }
  setComponent();
}
void FKTimeWindows::on_direction_valueChanged ( double  value) [protected, slot]

References setComponent().

{
  setComponent();
}
void FKTimeWindows::on_kEdit_valueChanged ( const QString &  ) [protected, slot]

References _fkCircleLayer, _process, ArrayCore::FrequencyBand::center(), SciFigs::GraphContentLayer::deepUpdate(), ArrayCore::ArrayProcess::frequency(), SciFigs::CircleViewer::set(), and TRACE.

{
  TRACE;
  double val=kEdit->value();
  vEdit->blockSignals(true);
  vEdit->setValue(2 * M_PI * _process->frequency().center()/val);
  vEdit->blockSignals(false);
  _fkCircleLayer->set(0, 0, 0, val, val, 0.0, Qt::black);
  _fkCircleLayer->deepUpdate();
}
void FKTimeWindows::on_vEdit_valueChanged ( const QString &  ) [protected, slot]

References _fkCircleLayer, _process, ArrayCore::FrequencyBand::center(), SciFigs::GraphContentLayer::deepUpdate(), ArrayCore::ArrayProcess::frequency(), SciFigs::CircleViewer::set(), and TRACE.

Referenced by setParameters().

{
  TRACE;
  double val=vEdit->value();
  kEdit->blockSignals(true);
  kEdit->setValue(2 * M_PI * _process->frequency().center()/val);
  kEdit->blockSignals(false);
  double r=2 * M_PI * _process->frequency().center()/val;
  _fkCircleLayer->set(0, 0, 0, r, r, 0.0, Qt::black);
  _fkCircleLayer->deepUpdate();
}
void FKTimeWindows::setArray ( const ArrayStations array) [virtual]

Reimplemented in HRFKTimeWindows.

References _process, GeopsyCore::StationList::components(), ArrayCore::ArrayProcess::setTimeRangeList(), and QGpCoreTools::tr().

{
  // Check whether we are multi component
  StationSignals::Components c=array.components();
  if(c & StationSignals::VerticalComponent) {
    component->addItem(tr("Vertical"));
  }
  if(c & StationSignals::HorizontalComponent) {
    component->addItem(tr("Horizontal"));
    component->addItem(tr("Radial"));
    component->addItem(tr("Transverse"));
  }
  _process=new FKArrayProcess(array);
  _process->setTimeRangeList(new TimeWindowList);
}
void FKTimeWindows::setComponent ( ) [protected, virtual, slot]

Reimplemented in HRFKTimeWindows.

References _currentWindow, _gridLayer, _process, GeopsyCore::TimeRangeList::at(), ArrayCore::ArrayProcess::frequency(), ArrayCore::FKArrayProcess::function(), GeopsyCore::TimeRange::lengthSeconds(), ArrayCore::FK::setFrequencyBand(), SciFigs::LiveGridLayer::setFunction(), ArrayCore::ArrayProcess::setHorizontalDirection(), ArrayCore::FK::setMaximumSlowness(), ArrayCore::FK::setMaximumWavenumber(), ArrayCore::ArrayProcess::timeRangeList(), QGpCoreTools::tr(), and TRACE.

Referenced by FKTimeWindows(), on_component_currentIndexChanged(), on_direction_valueChanged(), and setParameters().

{
  TRACE;
  // Before changing anything to parameters, disable the grid plot
  _gridLayer->setFunction(0);
  if(_currentWindow<0) {
    return;
  }
  _process->setHorizontalDirection(direction->value());

  FK * fk;
  if(component->currentText()==tr("Radial")) {
    fk=_process->function(1);
  } else if(component->currentText()==tr("Transverse")) {
    fk=_process->function(2);
  } else if(component->currentText()==tr("Horizontal")) {
    fk=_process->function(3);
  } else {
    fk=_process->function(0);
  }
  fk->setMaximumWavenumber(1e99); // No limit for plot
  fk->setMaximumSlowness(1e99);
  double winLength=_process->timeRangeList()->at(_currentWindow).lengthSeconds();
  fk->setFrequencyBand(_process->frequency(), winLength);

  _gridLayer->setFunction(fk);
  waveNumGrid->deepUpdate();
}
void FKTimeWindows::setCurrentWindow ( ) [protected, virtual, slot]

Reimplemented in HRFKTimeWindows.

References _currentWindow, _gridLayer, _process, _timeWindowLayer, GeopsyGui::TimeWindowList::at(), GeopsyCore::TimeRangeList::count(), SciFigs::GraphContentLayer::deepUpdate(), QGpCoreTools::endl(), GeopsyCore::TimeRangeList::isEmpty(), ArrayCore::ArrayProcess::lockTimeWindow(), GeopsyGui::TimeWindowList::resetColors(), GeopsyGui::TimeWindow::setColor(), SciFigs::LiveGridLayer::setFunction(), SciFigs::LiveGridLayer::takeFunction(), ArrayCore::ArrayProcess::timeRangeList(), QGpCoreTools::tr(), and SciFigs::LayerLocker::unlock().

Referenced by FKTimeWindows(), and setParameters().

{
  // Before changing anything to parameters, disable the grid plot
  AbstractFunction2 * func=_gridLayer->takeFunction();
  /*
    Make sure _currentWin is valid and uncolor previous time window
    Set color for the new current time window 
  */
  LayerLocker ll(_timeWindowLayer);
  TimeWindowList& winList=*static_cast<TimeWindowList *>(_process->timeRangeList());
  if(winList.isEmpty()) {
    _currentWindow=-1;
    return ;
  }
  winList.resetColors();
  _currentWindow=winScroll->value();
  if(_currentWindow < 0 || _currentWindow >= winList.count()) {
    _currentWindow=0;
  }
  winList.at(_currentWindow).setColor(QColor(255, 166, 166));
  ll.unlock();

  if( !_process->lockTimeWindow(&winList.at(_currentWindow)) ) {
    App::stream() << tr("cannot allocate all signals, increase buffer size\n") << endl;
    return;
  }
  _gridLayer->setFunction(func);
  waveNumGrid->deepUpdate();
  if(_timeWindowLayer) _timeWindowLayer->deepUpdate();
}
bool FKTimeWindows::setParameters ( double  frequency,
FKParameters param,
bool  doNSampleWarning = true 
)

References _gridLayer, _process, _timeWindowLayer, SciFigs::GraphContentLayer::deepUpdate(), ArrayCore::FKParameters::maximumWaveNumber(), on_vEdit_valueChanged(), setComponent(), setCurrentWindow(), ArrayCore::ArrayProcess::setFrequency(), SciFigs::LiveGridLayer::setFunction(), setGrid(), ArrayCore::FKArrayProcess::setParameters(), timeWindowList(), TRACE, and SciFigs::LayerLocker::unlock().

{
  TRACE;
  // Before changing anything to parameters, disable the grid plot (setComponent will reset it
  _gridLayer->setFunction(0);

  if(!_process->setParameters(param, doNSampleWarning)) {
    return false;
  }
  LayerLocker ll(_timeWindowLayer);
  if(!_process->setFrequency(frequency)) {
    return false;
  }
  ll.unlock();

  winScroll->setMaximum(timeWindowList()->count() - 1);
  setCurrentWindow();
  setGrid(param);
  waveNumGrid->setMapScale(-param->maximumWaveNumber(), -param->maximumWaveNumber(),
                            param->maximumWaveNumber(),  param->maximumWaveNumber());
  setComponent();
  on_vEdit_valueChanged( "" );
  if(_timeWindowLayer) _timeWindowLayer->deepUpdate();
  return true;
}

References _timeWindowLayer, and GeopsyGui::TimeWindowLayer::setShowColors().

{
  if(twLayer) {
    twLayer->setShowColors(true);
    _timeWindowLayer=twLayer;
  }
}

References _process, and ArrayCore::ArrayProcess::timeRangeList().

Referenced by setParameters().

{return static_cast<TimeWindowList *>(_process->timeRangeList());}

Member Data Documentation

Referenced by FKTimeWindows(), and setGrid().


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