#include <SpacSelector.h>
Public Slots | |
| void | inverse () |
| void | inverseAt () |
| void | radiusScroll_valueChanged () |
| void | saveSelection () |
| void | selectSamples () |
| void | setK () |
Public Member Functions | |
| bool | createObjects (AutocorrCurves *autocorr) |
| void | setMaximumSolutionCount (int c) |
| SpacSelector (QWidget *parent=0) | |
| ~SpacSelector () | |
Public Attributes | |
| CurveBrowser * | curves |
| Spac2DispOptions * | options |
Protected Member Functions | |
| virtual void | closeEvent (QCloseEvent *) |
| SpacSelector::SpacSelector | ( | QWidget * | parent = 0 | ) |
References SciFigs::GraphicSheetMenu::_childLayout, SciFigs::GraphicSheetMenu::_sheet, SciFigs::LineLayer::addLine(), curves, SciFigs::CurveBrowser::initLayer(), inverse(), inverseAt(), options, radiusScroll_valueChanged(), saveSelection(), selectSamples(), SciFigs::CurveBrowser::setCurrentLayer(), setK(), SciFigs::AbstractLine::setPen(), SciFigs::CurveBrowser::setProxy(), SciFigs::LineLayer::setReferenceLine(), SciFigs::AbstractLine::setSymbol(), and TRACE.
:
GraphicSheetMenu(parent, Qt::Window)
{
TRACE;
_lastCurRing=0;
_selAutocorr=0;
_autocorr=0;
_maxSolutionCount=5;
_childLayout->removeWidget(&_sheet);
QSplitter * hSplitter=new QSplitter(this);
hSplitter->setOrientation(Qt::Horizontal);
QSplitter * vSplitter=new QSplitter(hSplitter);
vSplitter->setOrientation(Qt::Vertical);
curves=new CurveBrowser(vSplitter);
curves->setProxy(new DispersionProxy);
AxisWindow * graph=new AxisWindow(vSplitter);
_gridLayer=new IrregularGrid2DPlot(graph);
LineLayer * dispLayer=new LineLayer(graph);
ModalLine * line=new ModalLine;
line->setPen(Pen( QColor(145,145,145), 0.6, Qt::SolidLine) );
line->setSymbol(Symbol(Symbol::Circle,1.2, Pen(QColor(222,222,222)), Brush(QColor(101,101,101), Qt::SolidPattern) ));
dispLayer->setReferenceLine(line);
curves->initLayer(dispLayer);
curves->setCurrentLayer(dispLayer);
_limitsSolutionsLayer=new LineLayer(graph);
_limitsSolutionsLayer->setReferenceLine(new PlotLine2D);
_limitsSolutionsLayer->setObjectName("SPAC Limits & Solutions");
_limitsSolutionsLayer->addLine(Pen(Qt::NoPen),Symbol(Symbol::Circle,1.2, Pen(Qt::black), Brush(Qt::black, Qt::SolidPattern)));
_limitsSolutionsLayer->addLine(Pen(Qt::black,0.6,Qt::SolidLine),Symbol());
_limitsSolutionsLayer->addLine(Pen(Qt::black,0.6,Qt::DotLine),Symbol());
hSplitter->addWidget(&_sheet);
hSplitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
_childLayout->addWidget(hSplitter);
options=new Spac2DispOptions(this);
_childLayout->addWidget(options);
Settings::getWidget(this, "SpacSelector");
connect(options->kmin,SIGNAL(valueChanged(double)), this,SLOT(setK()));
connect(options->kmax,SIGNAL(valueChanged(double)), this,SLOT(setK()));
connect(options->vmin,SIGNAL(valueChanged(double)), this,SLOT(inverse()));
connect(options->vmax,SIGNAL(valueChanged(double)), this,SLOT(inverse()));
connect(options->nCells,SIGNAL(valueChanged(int)),
this,SLOT(inverse()));
connect(options->radiusScroll,SIGNAL(valueChanged(int)),
this,SLOT(radiusScroll_valueChanged()));
connect(options->frequencyScroll,SIGNAL(valueChanged(int)),
this,SLOT(inverseAt()));
connect(options->selectBut,SIGNAL(clicked()),
this,SLOT(selectSamples()));
connect(options->saveBut,SIGNAL(clicked()),
this,SLOT(saveSelection()));
}
| void SpacSelector::closeEvent | ( | QCloseEvent * | e | ) | [protected, virtual] |
| bool SpacSelector::createObjects | ( | AutocorrCurves * | autocorr | ) |
References SciFigs::GraphicSheetMenu::addGraph(), SciFigs::GraphicSheetMenu::addText(), QGpCoreTools::Curve< pointType >::append(), QGpGuiWave::ModalLine::curve(), QGpCoreWave::AutocorrCurves::curves(), SciFigs::GraphContentLayer::graph(), inverse(), QGpCoreWave::AutocorrRing::maxRadius(), QGpCoreWave::AutocorrRing::minRadius(), MSG_ID, options, radiusScroll_valueChanged(), QGpCoreWave::AutocorrCurves::ring(), QGpCoreWave::AutocorrCurves::ringCurves(), QGpCoreWave::AutocorrCurves::rings(), SciFigs::GraphicSheetMenu::setFrequencyTitles(), SciFigs::GraphicSheetMenu::setGraphGeometry(), setK(), SciFigs::GraphicObject::setObjectName(), SciFigs::AbstractLine::setPen(), SciFigs::Axis::setRange(), SciFigs::AbstractLine::setSymbol(), SciFigs::TextEdit::setText(), QGpCoreTools::Curve< pointType >::setValid(), QGpCoreWave::ModalFactory::setX(), QGpCoreTools::Point2D::setX(), QGpCoreTools::tr(), TRACE, w, QGpCoreTools::Rect::x1(), QGpCoreTools::Rect::x2(), SciFigs::AxisWindow::xAxis(), and SciFigs::AxisWindow::yAxis().
Referenced by main().
{
TRACE;
_autocorr=autocorr;
// Check that all ring has only one curve and is not empty
int ringCount=_autocorr->rings()->count();
for(int iRing=0; iRing<ringCount; iRing++) {
if(_autocorr->ringCurves(iRing).count()!=1) {
const AutocorrRing& ring=_autocorr->ring(iRing);
Message::critical(MSG_ID, tr("Loading Dinver target/project ..."),
tr("Ring %1 (from %2 to %3 m) contains %4 curves. Check your "
"target files with dinver so that each ring has only one curve.\n\n"
"Tip:\nStart from an empty environment, load all your target files, edit the curves "
"and choose 'Export targets' from 'File' menu.")
.arg(iRing).arg(ring.minRadius())
.arg(ring.maxRadius())
.arg(_autocorr->ringCurves(iRing).count()), Message::cancel());
return false;
}
}
AutocorrFactory autocorrFactory(_autocorr->rings());
autocorrFactory.setX(_autocorr->curves());
int omegaCount=autocorrFactory.x()->count();
if(omegaCount<2) {
Message::critical(MSG_ID, tr( "Loading Dinver target/project ..." ),
tr("No frequency samples found in target."));
return false;
}
options->radiusScroll->setMaximum(ringCount-1);
options->frequencyScroll->setMaximum(omegaCount-1);
Curve<Point2D>& resol=limitsSolutionsCurve(1);
Curve<Point2D>& aliasing=limitsSolutionsCurve(2);
Point2D fcurve;
for(int i=0;i<omegaCount;i++) {
fcurve.setX(autocorrFactory.x()->at(i));
resol.append(fcurve);
aliasing.append(fcurve);
}
double orX=0.5;
double orY=0.5;
AxisWindow * w;
Rect r;
static const QString caption(tr("Ring %1 from %2 m to %3 m"));
_spacLayers.resize(ringCount);
for(int ig=0;ig<ringCount;ig++) {
w=addGraph();
_spacLayers[ig]=new LineLayer(w);
ModalLine * line=new ModalLine;
line->setPen(Pen(Qt::NoPen));
line->setSymbol(Symbol( Symbol::Circle,1.2, Pen(Qt::gray),
Brush(Qt::gray,Qt::SolidPattern)) );
_spacLayers[ig]->setReferenceLine(line);
line=static_cast<ModalLine *>(_spacLayers[ig]->addLine());
line->curve()=_autocorr->ringCurves(ig).first();
_spacLayers[ig]->setReferenceSymbol(Symbol( Symbol::Circle, 1.2,
Pen(Qt::black),
Brush(Qt::black,Qt::SolidPattern) ));
line=static_cast<ModalLine *>(_spacLayers[ig]->addLine());
line->curve()=_autocorr->ringCurves(ig).first();
line->curve().setValid(false);
_spacLayers[ig]->setReferenceSymbol(Symbol( Symbol::Circle, 2.75,
Pen(Qt::black,0.6)) );
_spacLayers[ig]->addLine();
w->setObjectName(QString("AutocorrGraph_%1").arg(ig));
setFrequencyTitles(w,tr("Autocorr ratio"), "",Number::Fixed);
setGraphGeometry(w,orX, 9, orY+0.5, 6);
r=_spacLayers[ig]->boundingRect();
w->xAxis()->setRange(r.x1()*0.95, r.x2()*1.05);
w->yAxis()->setRange(-1.05, 1.05);
TextEdit * c=addText(orX, orY, 9, 1);
const AutocorrRing& r=_autocorr->ring(ig);
c->setText(caption.arg(ig+1).arg(r.minRadius()).arg(r.maxRadius()));
if(orX==0.5) orX=9.5; else {orX=0.5;orY+=6.5;}
}
_gridLayer->graph()->xAxis()->setRange(autocorrFactory.x()->first()*0.95, autocorrFactory.x()->last()*1.05);
// TODO: fix bug if vmin is left to 0, infinite loop after
radiusScroll_valueChanged();
inverse();
setK();
return true;
}
| void SpacSelector::inverse | ( | ) | [slot] |
References QGpCoreTools::Curve< pointType >::at(), QGpCoreWave::AutocorrCurves::curves(), SciFigs::AxisWindow::deepUpdate(), QGpGuiTools::ColorPalette::defaultColors(), QGpCoreWave::AutocorrDispersion::dispersion(), QGpCoreTools::Curve< pointType >::first(), SciFigs::GraphContentLayer::graph(), QGpCoreTools::IrregularGrid2D::indexOfY(), QGpCoreTools::IrregularGrid2D::init(), QGpCoreTools::StatisticalValue< numberType >::isValid(), QGpCoreTools::IrregularGrid2D::maximumValue(), QGpCoreTools::IrregularGrid2D::ny(), options, SciFigs::GridPlot::palette(), QGpCoreWave::AutocorrCurves::ring(), QGpCoreWave::AutocorrCurves::ringCurves(), QGpCoreWave::AutocorrCurves::rings(), QGpGuiTools::ColorPalette::setColor(), SciFigs::IrregularGrid2DPlot::setGrid(), QGpCoreTools::IrregularGrid2D::setLinear(), SciFigs::GridPlot::setPalette(), SciFigs::Axis::setRange(), QGpCoreWave::AutocorrDispersion::setRing(), QGpGuiTools::ColorPalette::setVLinear(), QGpCoreWave::ModalFactory::setX(), QGpCoreTools::IrregularGrid2D::setX(), TRACE, QGpCoreTools::IrregularGrid2D::value(), QGpCoreTools::IrregularGrid2D::valuePointer(), QGpCoreTools::StatisticalPoint< numberType >::x(), QGpCoreTools::RealStatisticalPoint::y(), QGpCoreTools::YAxis, and SciFigs::AxisWindow::yAxis().
Referenced by createObjects(), and SpacSelector().
{
TRACE;
AutocorrFactory autocorrFactory(_autocorr->rings());
autocorrFactory.setX(_autocorr->curves());
autocorrFactory.linkX(_autocorr->curves());
int ringCount=_autocorr->rings()->count();
int omegaCount=autocorrFactory.x()->count();
double smin=1.0/options->vmax->text().toDouble();
double smax=1.0/options->vmin->text().toDouble();
if(smin>=smax || smin<=0.0 || smax<=0.0) {
return;
}
int nCells=options->nCells->value();
// Get grids ready
IrregularGrid2D grid(omegaCount,nCells);
for(int i=0;i<omegaCount;i++)
grid.setX(i, autocorrFactory.x()->at(i));
grid.setLinear(YAxis,smin,smax);
grid.init(0.0);
IrregularGrid2D ringGrid;
AutocorrDispersion eng;
// Uncoupled inversion of all points
for(int ir=0;ir<ringCount;ir++) {
eng.setRing(_autocorr->ring(ir));
ringGrid.init(omegaCount,nCells,0.0);
QList<ModalCurve> ringCurves=_autocorr->ringCurves(ir);
ModalCurve& curve=ringCurves.first();
for(int iw=0;iw<omegaCount;iw++) {
double x=autocorrFactory.x()->at(iw);
FactoryPoint p=curve.at(x);
if(p.isValid() && fabs(p.y())>0.025) {
double omega=2*M_PI*autocorrFactory.x()->at(iw);
QVector<double> solutions=eng.dispersion(p, omega*smin, omega*smax);
for(int i=0; i<solutions.count() && i<_maxSolutionCount; i++) {
double s=solutions.at(i);
int is=grid.indexOfY(s);
//printf("sol @ ring %i, %lf Hz %lf --> cell %i\n", ir, autocorrFactory.x()->at(iw), 1/solutions.at(i), is);
if(s>smin && s<smax && is>-1 && is<grid.ny()) {
if(ringGrid.value(iw,is)==0) *ringGrid.valuePointer(iw,is)=1;
}
}
}
}
grid += ringGrid;
}
// Ajust palette
int maxCount=(int)grid.maximumValue();
ColorPalette pal=_gridLayer->palette();
pal.defaultColors(maxCount+2);
pal.setColor(0, Qt::white);
pal.setVLinear(0.5,maxCount+0.5);
_gridLayer->setPalette(pal);
// Set grid values
_gridLayer->setGrid (grid);
_gridLayer->graph()->yAxis()->setRange(smin*0.95,smax*1.05);
_gridLayer->graph()->deepUpdate();
}
| void SpacSelector::inverseAt | ( | ) | [slot] |
References QGpCoreTools::Curve< pointType >::append(), QGpCoreTools::Curve< pointType >::at(), SciFigs::AbstractLine::clear(), QGpCoreTools::Curve< pointType >::clear(), QGpCoreWave::AutocorrCurves::curves(), SciFigs::GraphContent::deepUpdate(), QGpCoreWave::AutocorrDispersion::dispersion(), QGpCoreTools::Curve< pointType >::first(), SciFigs::GraphContentLayer::graph(), SciFigs::AxisWindow::graphContent(), QGpCoreWave::ModalCurve::indexOf(), SciFigs::LineLayer::line(), options, QGpCoreWave::AutocorrCurves::ring(), QGpCoreWave::AutocorrCurves::ringCurves(), QGpCoreWave::AutocorrCurves::rings(), QGpCoreWave::AutocorrDispersion::setRing(), QGpCoreTools::StatisticalValue< numberType >::setStddev(), QGpCoreWave::ModalFactory::setX(), TRACE, w, and QGpCoreTools::StatisticalPoint< numberType >::x().
Referenced by radiusScroll_valueChanged(), and SpacSelector().
{
TRACE;
AutocorrFactory autocorrFactory(_autocorr->rings());
autocorrFactory.setX(_autocorr->curves());
autocorrFactory.linkX(_autocorr->curves());
int ringCount=_autocorr->rings()->count();
int omegaCount=autocorrFactory.x()->count();
double smin=1.0/options->vmax->value();
double smax=1.0/options->vmin->value();
if(smin>smax) return;
int iRing=options->radiusScroll->value();
if(iRing>ringCount-1) return;
int iFreq=options->frequencyScroll->value();
if(iFreq>omegaCount-1) return;
LineLayer * plot=_spacLayers[iRing];
AxisWindow * w=plot->graph();
LayerLocker ll(plot);
QList<ModalCurve> ringCurves=_autocorr->ringCurves(iRing);
ModalCurve& curve=ringCurves.first();
int index=curve.indexOf(iFreq); // iFreq is considered as a factory index, hence it returns -1
// if iFreq does not exist for that curve
AutocorrDispersion eng;
if(index>-1) {
FactoryPoint p=curve.at(index);
p.setStddev(0.0);
plot->line(2)->clear();
static_cast<ModalLine *>(plot->line(2))->curve().append(p);
// Inversion itself
eng.setRing(_autocorr->ring(iRing));
double omega=2*M_PI*autocorrFactory.x()->at(iFreq);
QVector<double> solutions=eng.dispersion(p, omega*smin, omega*smax);
// Plot solutions
LayerLocker ll(_limitsSolutionsLayer);
Curve<Point2D>& invRes=limitsSolutionsCurve(0);
invRes.clear();
for(int i=0; i<solutions.count() && i<_maxSolutionCount; i++) {
//printf("sol @ ring %i, %lf Hz %lf\n", iRing, autocorrFactory.x()->at(iFreq), 1/solutions.at(i));
invRes.append(Point2D( p.x(), solutions.at(i)) );
}
_gridLayer->graph()->graphContent()->deepUpdate();
w->graphContent()->deepUpdate();
}
}
| void SpacSelector::radiusScroll_valueChanged | ( | ) | [slot] |
References inverseAt(), QGpCoreWave::AutocorrRing::maxRadius(), QGpCoreWave::AutocorrRing::minRadius(), options, QGpCoreWave::AutocorrCurves::ring(), QGpCoreWave::AutocorrCurves::rings(), and TRACE.
Referenced by createObjects(), and SpacSelector().
{
TRACE;
int iRadius=options->radiusScroll->value();
if(iRadius>(int)_autocorr->rings()->count()-1) return;
// Remove marker from last ring plot
_spacLayers[_lastCurRing]->line(2)->clear();
_spacLayers[_lastCurRing]->graphContent()->deepUpdate();
options->radiusMin->setText(QString::number(_autocorr->ring(iRadius).minRadius()));
options->radiusMax->setText(QString::number(_autocorr->ring(iRadius).maxRadius()));
_lastCurRing=iRadius;
inverseAt();
}
| void SpacSelector::saveSelection | ( | ) | [slot] |
References DinverDCCore::TargetList::autocorrTarget(), fileName, MSG_ID, selectSamples(), DinverDCCore::AutocorrTarget::setCurves(), QGpCoreTools::tr(), TRACE, and QGpCoreTools::XMLHeader::xml_saveFile().
Referenced by SpacSelector().
{
TRACE;
if(!_selAutocorr) selectSamples();
if(!_selAutocorr) {
Message::warning(MSG_ID,tr("Searching dispersion limits"),
tr("You must pick 2 curves to define the dispersion\n"
"limits and to select samples."), Message::cancel());
return;
}
QString fileName=Message::getSaveFileName(tr("Save SPAC selection"),
tr("Dinver targets (*.target)"));
if(fileName.length()==0) return;
TargetList tl;
tl.autocorrTarget().setCurves( *_selAutocorr);
XMLVirtualPlugin plugin(&tl, "DispersionCurve");
XMLDinverHeader hdr(&plugin);
hdr.xml_saveFile(fileName);
}
| void SpacSelector::selectSamples | ( | ) | [slot] |
References QGpCoreWave::AutocorrCurves::addCurve(), QGpCoreWave::ModalCurve::addLog(), QGpCoreWave::AutocorrCurves::addRing(), QGpCoreTools::Curve< pointType >::append(), QGpCoreTools::Curve< pointType >::at(), SciFigs::CurveBrowser::count(), SciFigs::CurveBrowser::currentLayer(), curves, QGpCoreWave::AutocorrCurves::curves(), SciFigs::GraphContent::deepUpdate(), QGpCoreWave::AutocorrDispersion::dispersion(), QGpCoreTools::Curve< pointType >::first(), QGpCoreTools::Function, SciFigs::GraphContentLayer::graph(), SciFigs::AxisWindow::graphContent(), QGpCoreWave::ModalCurve::indexOf(), QGpCoreTools::Interpole, SciFigs::AbstractLine::isVisible(), QGpCoreTools::Curve< pointType >::last(), SciFigs::LineLayer::line(), QGpCoreTools::log(), MSG_ID, options, QGpCoreTools::Curve< pointType >::resample(), QGpCoreWave::AutocorrCurves::ring(), QGpCoreWave::AutocorrCurves::ringCurves(), QGpCoreWave::AutocorrCurves::rings(), QGpCoreTools::Curve< pointType >::setFunction(), QGpCoreWave::AutocorrDispersion::setRing(), QGpCoreTools::Curve< pointType >::setValid(), QGpCoreWave::ModalFactory::setX(), str, QGpCoreTools::tr(), TRACE, w, QGpCoreTools::StatisticalPoint< numberType >::x(), and QGpCoreTools::RealStatisticalPoint::y().
Referenced by saveSelection(), and SpacSelector().
{
TRACE;
AutocorrFactory autocorrFactory(_autocorr->rings());
autocorrFactory.setX(_autocorr->curves());
autocorrFactory.linkX(_autocorr->curves());
int ringCount=_autocorr->rings()->count();
int omegaCount=autocorrFactory.x()->count();
double kmin=options->kmin->value();
double kmax=options->kmax->value();
if(kmin>kmax) {
Message::warning(MSG_ID, tr("Selecting samples"),
tr("kmin is greater than kmax."),
Message::cancel());
return;
}
if(kmin<1e-5) {
Message::warning(MSG_ID, tr("Selecting samples"),
tr("kmin is less than 1e-5."),
Message::cancel());
return;
}
double smin=1.0/options->vmax->value();
double smax=1.0/options->vmin->value();
if(smin>smax) {
Message::warning(MSG_ID, tr("Selecting samples"),
tr("Min velocity is greater than max velocity."),
Message::cancel());
return;
}
int nCells=options->nCells->value();
int nCurves=curves->count();
// Check that only two curve are visible
const QVector<double>& freq=*autocorrFactory.x();
ModalCurve limits[2];
int nLimits=0;
for(int i=0;i<nCurves;i++) {
if(curves->currentLayer()->line(i)->isVisible()) {
if(nLimits<2) {
ModalCurve& f=static_cast<ModalLine *>(curves->currentLayer()->line(i))->curve();
// Extrapole to cover the whole frequency range
if(f.at(0).x()>freq[0]) {
f.append(FactoryPoint( freq[0], f.at(0).y()) );
f.setFunction();
}
if(f.last().x()<freq.last()) {
f.append(FactoryPoint( freq.last(), f.last().y()) );
f.setFunction();
}
limits[nLimits]=f;
nLimits++;
} else {
Message::warning(MSG_ID, tr("Selecting samples"),
tr("More than 2 curves are visible, only the first two are taken to define the slowness "
"range. Other are ignored."), Message::ok());
break;
}
}
}
if(nLimits<2) {
Message::warning(MSG_ID, tr("Selecting samples"),
tr("Less than 2 curves are visible, cannot define the slowness range. Pick at least two curves to define "
"the minimum and maximum range for dispersion curves."),
Message::cancel());
return;
}
limits[0].resample(freq, Function | Interpole);
limits[1].resample(freq, Function | Interpole);
Curve<FactoryPoint>& minS=limits[0];
Curve<FactoryPoint>& maxS=limits[1];
// Make sure that minS is always less than maxS
int iw;
for(iw=0;iw<omegaCount;iw++) {
if(minS[iw].y()>maxS[iw].y()) {
double tmp=maxS[iw].y();
maxS[iw].setY(minS[iw].y());
minS[iw].setY(tmp);
}
}
if(_selAutocorr) delete _selAutocorr;
_selAutocorr=new AutocorrCurves;
AutocorrDispersion eng;
for(int ir=0; ir<ringCount; ir++ ) {
const AutocorrRing& ring=_autocorr->ring(ir);
eng.setRing(ring);
_selAutocorr->addRing(ring);
LineLayer * plot=_spacLayers[ir];
AxisWindow * w=plot->graph();
LayerLocker ll(plot);
ModalCurve& selCurve=static_cast<ModalLine *>(plot->line(1))->curve();
selCurve.setValid(false);
QList<ModalCurve> curves=_autocorr->ringCurves(ir);
ModalCurve& curve=curves.first();
for(int iw=0;iw<omegaCount;iw++) {
int index=curve.indexOf(iw);
if(index>-1) {
const FactoryPoint& p=curve.at(index);
double omega=2*M_PI*autocorrFactory.x()->at(iw);
QVector<double> solutions=eng.dispersion(p, omega*smin, omega*smax);
for(int i=0; i<solutions.count() && i<_maxSolutionCount; i++) {
double s=solutions.at(i);
//printf("sol @ ring %i, %lf Hz %lf\n", ir, autocorrFactory.x()->at(iw), 1/s);
if(s>minS[iw].y() && s<maxS[iw].y() &&
s>smin && s<smax &&
omega*s>kmin && omega*s<kmax) {
selCurve[index].setValid(true);
break;
}
}
}
}
QString log=tr("---------------------------------------------\n"
"Samples selected using spac2disp\n\n"
"Wave number: [ %1 , %2 ] (rad/m)\n"
"Velocity: [ %3 , %4 ] (m/s)\n"
"Number of slowness cells: %5\n"
"Dispersion curve searched between:\n");
log=log.arg(kmin).arg(kmax).arg(1.0/smax).arg(1.0/smin).arg(nCells);
QString str("%1 Hz\t%2 m/s\t%3 m/s\n");
for(int iw=0;iw<omegaCount;iw++)
log+=str.arg(freq[iw]).arg(minS[iw].y()).arg(maxS[iw].y());
selCurve.addLog(log);
_selAutocorr->addCurve(selCurve);
w->graphContent()->deepUpdate();
}
//curves->curvesChanged();
}
| void SpacSelector::setK | ( | ) | [slot] |
References QGpCoreTools::Curve< pointType >::count(), SciFigs::GraphContent::deepUpdate(), SciFigs::GraphContentLayer::graph(), SciFigs::AxisWindow::graphContent(), options, and TRACE.
Referenced by createObjects(), and SpacSelector().
{
TRACE;
double kmin=options->kmin->value();
double kmax=options->kmax->value();
LayerLocker ll(_limitsSolutionsLayer);
double invWLmin=kmin/(2*M_PI);
double invWLmax=kmax/(2*M_PI);
Curve<Point2D>& resol=limitsSolutionsCurve(1);
Curve<Point2D>& aliasing=limitsSolutionsCurve(2);
for(int i=0;i<resol.count();i++) {
resol[i].setY(invWLmin/resol[i].x());
aliasing[i].setY(invWLmax/aliasing[i].x());
}
_gridLayer->graph()->graphContent()->deepUpdate();
}
| void SpacSelector::setMaximumSolutionCount | ( | int | c | ) | [inline] |
Referenced by main().
{_maxSolutionCount=c;}
Referenced by selectSamples(), and SpacSelector().
Referenced by createObjects(), inverse(), inverseAt(), radiusScroll_valueChanged(), selectSamples(), setK(), and SpacSelector().