#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().