Public Slots | Public Member Functions | Protected Member Functions
ToolNR Class Reference

Brief description of class still missing. More...

#include <ToolNR.h>

Inheritance diagram for ToolNR:
GeopsyGui::ToolBase

List of all members.

Public Slots

void highlightShot (int shotIndex)
void newGraphicViewer ()
void optimizeStack ()
void t0Apply ()
void t0Revert ()
void uniformStack ()

Public Member Functions

 ToolNR (QWidget *parent)
 ~ToolNR ()

Protected Member Functions

virtual bool initStations (SubSignalPool *subPool)
virtual void updateAllFields ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

ToolNR::ToolNR ( QWidget *  parent)

Description of constructor still missing

References highlightShot(), newGraphicViewer(), optimizeStack(), t0Apply(), t0Revert(), QGpCoreTools::tr(), TRACE, and uniformStack().

    : ToolBase(parent, 0)
{
  TRACE;
  setWindowIcon(QIcon( ":/images/nr-22x22.png" ));
  setObjectName("ToolNR");

  QVBoxLayout * baseLayout=new QVBoxLayout(this);
  _d=new ToolNRd(this);
  baseLayout->addWidget(_d);
  _d->highlightShot->addItem(tr("None"));

  connect(_d->t0Apply, SIGNAL(clicked()), this, SLOT(t0Apply()) );
  connect(_d->t0Revert, SIGNAL(clicked()), this, SLOT(t0Revert()) );
  connect(_d->uniformStack, SIGNAL(clicked()), this, SLOT(uniformStack()) );
  connect(_d->optimizeStack, SIGNAL(clicked()), this, SLOT(optimizeStack()) );
  connect(_d->highlightShot, SIGNAL(activated(int)), this, SLOT(highlightShot(int)) );
  connect(_d->stackGraphic, SIGNAL(clicked()), this, SLOT(newGraphicViewer()) );
}

Description of destructor still missing

References TRACE.

{
  TRACE;
  qDeleteAll(_shots);
}

Member Function Documentation

void ToolNR::highlightShot ( int  shotIndex) [slot]

References GeopsyCore::SubSignalPool::at(), SciFigs::GraphContentLayer::deepUpdate(), ShotRecord::nReceivers(), GeopsyGui::SignalLayer::setSignalColor(), GeopsyGui::ToolBase::signalLayer(), and TRACE.

Referenced by ToolNR().

{
  TRACE;
  int nShots=_shots.count();
  SignalLayer * l=signalLayer();
  if(l) {
    for(int i=0; i<nShots; i++ ) {
      ShotRecord& shot=*_shots.at(i);
      int nReceivers=shot.nReceivers();
      QColor c=(shotIndex-1==i) ? Qt::green : Qt::black;
      for(int j=0; j<nReceivers; j++) {
        l->setSignalColor(shot.at(j), c);
      }
    }
  }
  l->deepUpdate();
}
bool ToolNR::initStations ( SubSignalPool subPool) [protected, virtual]

Reimplemented from GeopsyGui::ToolBase.

References GeopsyGui::ToolBase::_subPool, GeopsyCore::SubSignalPool::count(), GeopsyCore::geopsyCore, ShotRecord::isSameReceiverSet(), MSG_ID, GeopsyCore::SubSignalPool::name(), ShotRecord::organizeSubPool(), GeopsyCore::GeopsyCoreEngine::setProgressMaximum(), GeopsyCore::GeopsyCoreEngine::setProgressValue(), ShotRecord::setSignals(), GeopsyGui::ToolBase::setWindowTitle(), str, QGpCoreTools::tr(), TRACE, and GeopsyGui::ToolBase::updateSubPool().

{
  TRACE;
  _subPool=subPool;
  if(!ShotRecord::organizeSubPool(_subPool)) return false;

  int nSignals=_subPool->count();
  QString str=tr("NR toolbox - ") + _subPool->name();
  setWindowTitle(str);
  geopsyCore->setProgressMaximum(nSignals);
  for(int i=0;i < nSignals; ) {
    geopsyCore->setProgressValue(i);
    ShotRecord * shot=new ShotRecord;
    shot->setSignals( *subPool, i);
    if( !_shots.isEmpty() && !shot->isSameReceiverSet( *_shots.last()) ) {
      Message::warning(MSG_ID, tr("Gathering shots"),
                            tr( "Shots recorded at %1 and %2 have not the same set or receivers." ).
                            arg(_shots.last()->name()).arg(shot->name()),
                            Message::cancel());
      delete shot;
      return false;
    }
    _shots.append(shot);
    _d->highlightShot->addItem(shot->name());
  }
  _d->t0TimeLimits->setPicks(_subPool);
  _d->stackGlobalTimeLimits->setPicks(_subPool);
  _d->stackSignalTimeLimits->setPicks(_subPool);
  emit updateSubPool();
  return true;
}
void ToolNR::newGraphicViewer ( ) [slot]

References geopsyGui, GeopsyCore::SubSignalPool::isEmpty(), TRACE, and uniformStack().

Referenced by ToolNR().

{
  TRACE;
  if(_stack.isEmpty()) {
    uniformStack();
  }
  geopsyGui->newGraphicWindow(_stack);
}
void ToolNR::optimizeStack ( ) [slot]

References DinverCore::Neighborhood::bestModelIndex(), QGpCoreTools::endl(), GeopsyCore::geopsyCore, GeopsyCore::SubSignalPool::isEmpty(), DinverCore::Neighborhood::misfit(), DinverCore::Neighborhood::model(), DinverCore::Neighborhood::setForward(), StackWeights::setGlobalTimeLimits(), StackWeights::setReceiverIndex(), StackWeights::setSignalTimeLimits(), StackWeights::setWeights(), GeopsyCore::GeopsyCoreEngine::showMessage(), StackWeights::stack(), DinverCore::Neighborhood::start(), QGpCoreTools::tr(), TRACE, and GeopsyGui::ToolBase::updateSubPool().

Referenced by ToolNR().

{
  TRACE;
  int nReceivers=_shots[0]->nReceivers();
  bool firstTime=_stack.isEmpty();
  TimeRangeParameters globalTimeLimits, signalTimeLimits;
  _d->stackGlobalTimeLimits->getParameters(globalTimeLimits);
  _d->stackSignalTimeLimits->getParameters(signalTimeLimits);
  for(int i=0; i<nReceivers; i++ ) {
    geopsyCore->showMessage(tr("Optimizing weights for receiver %1").arg(i));
    StackWeights forward(_shots);
    forward.setReceiverIndex(i);
    forward.setGlobalTimeLimits(globalTimeLimits);
    forward.setSignalTimeLimits(signalTimeLimits);
    Neighborhood na;
    na.setForward(&forward);
    na.start(50, 50, 50, 10);
    int bestIndex=na.bestModelIndex();
    forward.setWeights(na.model(bestIndex) );
    forward.stack(_stack);
    App::stream() << tr("Noise level [%1]=%2").arg(i).arg(na.misfit(bestIndex) ) << endl;
  }
  if(firstTime) showStackResults();
  emit updateSubPool();
}
void ToolNR::t0Apply ( ) [slot]

References T0GridSearch::bestT0(), QGpCoreTools::endl(), T0GridSearch::function(), GeopsyCore::geopsyCore, QGpCoreTools::GridSearch::globalMax(), T0GridSearch::setFunction(), T0GridSearch::setGrid(), T0Correlation::setReceiverRange(), T0Correlation::setTimeLimits(), GeopsyCore::GeopsyCoreEngine::showMessage(), QGpCoreTools::tr(), and TRACE.

Referenced by ToolNR().

{
  TRACE;
  int nShots=_shots.count();
  int minRecIndex=_shots[0]->receiverIndex(_d->t0MinDistance->value())+1;
  int maxRecIndex=_shots[0]->receiverIndex(_d->t0MaxDistance->value());
  TimeRangeParameters timeLimits;
  _d->t0TimeLimits->getParameters(timeLimits);
  double t0s[nShots];
  t0s[0]=_shots[0]->t0();
  for(int i=1; i<nShots; i++ ) {
    geopsyCore->showMessage(tr("Adjusting phase shifts for shot %1 (%2/%3) ...").arg(_shots[i]->name()).arg(i).arg(nShots-1));
    T0GridSearch grid;
    grid.setFunction(new T0Correlation(_shots[0], _shots[i]));
    grid.setGrid(_shots[0]->deltaT(), _shots[i]->t0());
    grid.function()->setTimeLimits(timeLimits);
    grid.function()->setReceiverRange(minRecIndex, maxRecIndex);
    grid.globalMax();
    t0s[i]=grid.bestT0();
  }
  // Caluclate the average T0
  double averageT0=0.0;
  for(int i=0; i<nShots; i++ ) {
    averageT0+=t0s[i];
  }
  averageT0/=nShots;
  // Shift shots
  double baseShift=averageT0-t0s[0];
  for(int i=0; i<nShots; i++ ) {
    double t0=t0s[i]-baseShift;
    App::stream() << tr("Shifted T0 for shot[%1]=%2").arg(i).arg(t0) << endl;
    _shots[i]->setT0(t0);
  }
  shotsToSubPool();
}
void ToolNR::t0Revert ( ) [slot]

References TRACE.

Referenced by ToolNR().

{
  TRACE;
  int nShots=_shots.count();
  for(int i=0; i<nShots; i++ ) {
    _shots.at(i)->revert();
  }
  shotsToSubPool();
}
void ToolNR::uniformStack ( ) [slot]

References QGpCoreTools::endl(), GeopsyCore::SubSignalPool::isEmpty(), StackWeights::misfit(), StackWeights::setGlobalTimeLimits(), StackWeights::setReceiverIndex(), StackWeights::setSignalTimeLimits(), StackWeights::setUniformWeights(), StackWeights::stack(), QGpCoreTools::tr(), TRACE, and GeopsyGui::ToolBase::updateSubPool().

Referenced by newGraphicViewer(), and ToolNR().

{
  TRACE;
  int nReceivers=_shots[0]->nReceivers();
  bool firstTime=_stack.isEmpty();
  TimeRangeParameters globalTimeLimits, signalTimeLimits;
  _d->stackGlobalTimeLimits->getParameters(globalTimeLimits);
  _d->stackSignalTimeLimits->getParameters(signalTimeLimits);
  for(int i=0; i<nReceivers; i++ ) {
    StackWeights forward(_shots);
    forward.setGlobalTimeLimits(globalTimeLimits);
    forward.setSignalTimeLimits(signalTimeLimits);
    forward.setReceiverIndex(i);
    forward.setUniformWeights();
    forward.stack(_stack);
    bool ok;
    App::stream() << tr("Noise level [%1]=%2").arg(i).arg(forward.misfit(ok)) << endl;
  }
  if(firstTime) showStackResults();
  emit updateSubPool();
}
void ToolNR::updateAllFields ( ) [protected, virtual]

Reimplemented from GeopsyGui::ToolBase.

References TRACE.

{
  TRACE;
  _d->t0TimeLimits->updateAllFields();
  _d->stackGlobalTimeLimits->updateAllFields();
  _d->stackSignalTimeLimits->updateAllFields();
}

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