#include <ToolRefra.h>
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 |
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; }
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] |
friend class ToolRefraInt [friend] |
ToolRefrad* ToolRefra::_d [protected] |
Referenced by initStations(), startInversion(), and ToolRefra().
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().