Public Slots | Public Member Functions | Protected Member Functions | Protected Attributes | Friends
ToolRefra Class Reference

#include <ToolRefra.h>

Inheritance diagram for ToolRefra:
GeopsyGui::ToolBase

List of all members.

Public Slots

void startInversion ()

Public Member Functions

virtual bool initStations (SubSignalPool *)
 ToolRefra (QWidget *parent)
 ~ToolRefra ()

Protected Member Functions

virtual void updateAllFields ()

Protected Attributes

ToolRefrad_d
QList< double > _distances
QMap< double, Signal * > * _distSigMaps
int _nSrc
QList< double > _srcDist

Friends

class ToolRefraInt

Constructor & Destructor Documentation

ToolRefra::ToolRefra ( QWidget *  parent)

References _d, _distSigMaps, GeopsyGui::ToolBase::setWindowTitle(), startInversion(), QGpCoreTools::tr(), and TRACE.

                                     :
  ToolBase(parent, 0)
{
  TRACE;
  setWindowIcon(QIcon(":/images/refra-22x22.png"));
  QVBoxLayout * baseLayout=new QVBoxLayout(this);
  _d=new ToolRefrad(this);
  baseLayout->addWidget(_d);
  setWindowTitle(tr("Refraction NA toolbox"));
  setObjectName("ToolRefra");

  connect(_d->startBut,SIGNAL(clicked()), this,SLOT(startInversion()));
  _distSigMaps=0;
}

References _distSigMaps, and TRACE.

{
  TRACE;
  delete [] _distSigMaps;
}

Member Function Documentation

bool ToolRefra::initStations ( SubSignalPool subPool) [virtual]

Reimplemented from GeopsyGui::ToolBase.

References _d, _distances, _distSigMaps, _srcDist, GeopsyGui::ToolBase::_subPool, QGpCoreTools::Curve< pointType >::at(), GeopsyCore::SubSignalPool::azimuth(), QGpCoreTools::Point2D::azimuthTo(), GeopsyCore::SubSignalPool::begin(), QGpCoreTools::Curve< pointType >::count(), QGpCoreTools::Point::distanceTo(), GeopsyCore::SubSignalPool::end(), QGpCoreTools::Curve< pointType >::first(), GeopsyCore::SubSignalPool::maximumTimePickCount(), ToolRefrad::setPickCount(), GeopsyCore::Signal::sourceReceiverAzimuth(), GeopsyCore::Signal::sourceReceiverDistance(), GeopsyCore::SubSignalPool::sources(), TRACE, QGpCoreTools::Curve< pointType >::unique(), and QGpCoreTools::unique().

{
  TRACE;
  _subPool=subPool;
  // No test are performed on station names or component, all is accepted
  // Azimuth interval that define the negative abcsissae
  double azimuth=_subPool->azimuth();
  double azimuthMin=azimuth+0.5*M_PI; // between 0 and pi
  double azimuthMax=azimuthMin+M_PI; // between pi and 2*pi
  Curve<Point> srcList=_subPool->sources();
  srcList.unique();
  int nSrc=srcList.count();
  // Azimuth is sorting the subpool by source and receiver
  SubSignalPool::iterator it=_subPool->begin();
  // List of all distances % at first source taken as reference
  Point pRef=srcList.first();
  for(int iSrc=0;iSrc<nSrc;iSrc++) {
    const Point& psrc=srcList.at(iSrc);
    double az=pRef.azimuthTo(psrc);
    if(az>azimuthMin && az<azimuthMax)
      _distances.push_back(-pRef.distanceTo(psrc));
    else
      _distances.push_back(pRef.distanceTo(psrc));
    double srcAbsc=_distances.back();
    for(;it!=subPool->end() && (*it)->source()==psrc;++it) {
      Signal * sig=*it;
      az=sig->sourceReceiverAzimuth();
      if(az>azimuthMin && az<azimuthMax)
        _distances.push_back(srcAbsc-sig->sourceReceiverDistance());
      else
        _distances.push_back(srcAbsc+sig->sourceReceiverDistance());
    }
  }
  // Set number of available picks
  _d->setPickCount(subPool->maximumTimePickCount());
  // Adjust distances arround zero
  double mean=0;
  for(QList<double>::iterator it=_distances.begin();it!=_distances.end();++it) {
    mean+=*it;
  }
  mean/=_distances.count();
  for(QList<double>::iterator it=_distances.begin();it!=_distances.end();++it) {
    *it-=mean;
  }
  // Map sources and rec to sig
  _distSigMaps=new QMap<double, Signal *>[nSrc];
  int iNode=0;
  it=subPool->begin();
  for(int iSrc=0;iSrc<nSrc;iSrc++) {
    const Point& psrc=srcList.at(iSrc);
    _srcDist.push_back(_distances[iNode]);
    iNode++;
    for(;it!=subPool->end() && (*it)->source()==psrc;++it, iNode++) {
      _distSigMaps[iSrc].insert(_distances[iNode],*it);
    }
  }
  // Remove duplicates
  qSort(_distances);
  unique(_distances);
  _d->infoLabel->setText(_d->infoLabel->text().arg(azimuth).
                         arg(_distances.count()).arg(nSrc));
  return true;
}
void ToolRefra::startInversion ( ) [slot]

References _d, _distances, fileName, ToolRefrad::on_outputFileBrowse_clicked(), and TRACE.

Referenced by ToolRefra().

{
  TRACE;
  if(_d->outputFile->text().isEmpty()) {
    _d->on_outputFileBrowse_clicked();
    if(_d->outputFile->text().isEmpty()) return;
  }
  int pick=_d->averagePick->currentIndex();
  int dpick=_d->stddevPick->currentIndex()-1;
  int nNodes=_distances.count();
  QString fileName=_d->outputFile->text();
  QFileInfo fi(fileName);
  if(fi.suffix()=="dvt") { // next generation inversion tools
//    RefractionSurvey * hodo=new RefractionSurvey;
//    hodo->setNSrc(_nSrc);
//    
//    delete hodo;
  }
  else {// old generation inversion tools (na_viewer)
    /*HodoChroneData * hodo=
        new HodoChroneData (_srcDist.count(), _distList.count());
    // Set omegas to distList values
    int iNode=0;
    for(double * dist=_distList.first();dist;dist=_distList.next(),iNode++) {
      hodo->setFrequency(iNode,*dist);
      //printf("%i %lg\n",iNode,*dist);
    }
    // Set measurement  times
    int nSrc=_srcDist.count();
    for(int iSrc=0;iSrc<nSrc;iSrc++) {
      double srcNode=_srcDist[iSrc];
      //printf("Src distance %i %lg\n",iSrc, srcNode);
      for(int iRec=0;iRec<nNodes;iRec++) {
        //printf("Rec distance %i %lg\n",iRec, hodo->omega(iRec));
        if(srcNode==hodo->omega(iRec)) {
          //printf("Time src\n");
          hodo->setMean(iRec,iSrc,0.0);
          hodo->setStddev(iRec,iSrc,0.0);
        }
        else if(_distSigMaps[iSrc].contains(hodo->omega(iRec))) {
          Signal * sig=_distSigMaps[iSrc][hodo->omega(iRec)];
          if(sig->time(pick)>=0.0) {
            hodo->setMean(iRec,iSrc,sig->time(pick));
            if(dpick>=0)
              hodo->setStddev(iRec,iSrc,fabs(sig->time(dpick)-sig->time(pick)));
            else hodo->setStddev(iRec,iSrc,0.0);
          }
          else {
            hodo->setMean(iRec,iSrc,HODOCHRONE_INVALID_VALUE);
            hodo->setStddev(iRec,iSrc,0.0);                  
          }
        }
        else {
          hodo->setMean(iRec,iSrc,HODOCHRONE_INVALID_VALUE);
          hodo->setStddev(iRec,iSrc,0.0);        
        }
      }
    }
    RefraReport * report=new RefraReport(true,fileName,0,1);
    report->addParameter(InversionReport::Vs,0);
    report->addParameter(InversionReport::Vp,0);
    report->addOmegas(hodo);
    report->addRefraGoal(hodo);
    delete report;
    
    QStringList argProcess;
    argProcess.push_back("na_viewer");
    argProcess.push_back("-g");
    argProcess.push_back(fileName);
    QProcess process(argProcess);
    process.start();

    delete hodo;*/
  }
}
void ToolRefra::updateAllFields ( ) [protected, virtual]

Reimplemented from GeopsyGui::ToolBase.

References TRACE.

{
  TRACE;
}

Friends And Related Function Documentation

friend class ToolRefraInt [friend]

Member Data Documentation

ToolRefrad* ToolRefra::_d [protected]
QList<double> ToolRefra::_distances [protected]

Referenced by initStations(), and startInversion().

QMap<double, Signal *>* ToolRefra::_distSigMaps [protected]

Referenced by initStations(), ToolRefra(), and ~ToolRefra().

int ToolRefra::_nSrc [protected]
QList<double> ToolRefra::_srcDist [protected]

Referenced by initStations().


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