#include <PtMotionResults.h>
Public Member Functions | |
void | createObjects (SubSignalPool *subPool) |
PtMotionResults (QWidget *parent=0) | |
void | setLimits () |
void | updateSignals (SubSignalPool *subPool, TimeRangeParameters &tlParam, bool doFilter, const FilterParameters &fparam, bool verticalPlane, double direction) |
~PtMotionResults () |
PtMotionResults::PtMotionResults | ( | QWidget * | parent = 0 | ) |
References TRACE.
: GraphicSheetMenu(parent) { TRACE; Settings::getSize(this, "PtMotionResults" ); }
void PtMotionResults::createObjects | ( | SubSignalPool * | subPool | ) |
References SciFigs::GraphicSheetMenu::addGraph(), GeopsyCore::SubSignalPool::begin(), GeopsyCore::SubSignalPool::count(), geopsyGui, SciFigs::GraphicSheetMenu::setGraphGeometry(), SciFigs::GraphicSheet::setStatusBar(), SciFigs::GraphicSheetMenu::sheet(), TRACE, and w.
{ TRACE; ASSERT(subPool->count() % 3==0); sheet()->setStatusBar(geopsyGui->statusBar()); int n=subPool->count()/3; _curveLayers.resize(n); SubSignalPool::iterator it=subPool->begin(); double x=0.5, y=0.5; Signal *sigZ, *sigN, *sigE; for(int ig=0;ig < n;ig++, ++it) { sigZ=*it; sigN=*( ++it); sigE=*( ++it); AxisWindow * w=addGraph(); setGraphGeometry(w, x, 7, y, 7, Axis::AxisSize); x += 9; if(x==18.5) {x=0.5;y += 9;} _curveLayers[ig]=new XUniqueYColorLines(w); _curveLayers[ig]->setLineWeight(0.01); } }
void PtMotionResults::setLimits | ( | ) |
References SciFigs::AxisWindow::deepUpdate(), QGpCoreTools::Rect::enlarge(), QGpCoreTools::LinearScale, SciFigs::Axis::setRange(), QGpCoreTools::Rect::square(), TRACE, w, QGpCoreTools::Rect::x1(), QGpCoreTools::Rect::x2(), SciFigs::AxisWindow::xAxis(), QGpCoreTools::Rect::y1(), QGpCoreTools::Rect::y2(), and SciFigs::AxisWindow::yAxis().
{ TRACE; Rect r; int n=_curveLayers.count(); for(int ig=0;ig < n;ig++ ) { AxisWindow * w=_curveLayers[ ig ]->graph(); // Adjust axis limits r=_curveLayers[ig]->boundingRect(); r.enlarge(0.05, LinearScale, LinearScale); r.square(); w->xAxis()->setRange(r.x1(), r.x2()); w->yAxis()->setRange(r.y1(), r.y2()); w->deepUpdate(); } }
void PtMotionResults::updateSignals | ( | SubSignalPool * | subPool, |
TimeRangeParameters & | tlParam, | ||
bool | doFilter, | ||
const FilterParameters & | fparam, | ||
bool | verticalPlane, | ||
double | direction | ||
) |
References GeopsyCore::TimeRangeParameters::absoluteRange(), GeopsyCore::SubSignalPool::begin(), SciFigs::XUniqueYColorLines::clear(), CONST_LOCK_SAMPLES, QGpCoreTools::Angle::cos(), GeopsyCore::SubSignalPool::count(), SciFigs::AxisWindow::deepUpdate(), QGpCoreTools::Angle::degrees(), GeopsyCore::DoubleSignal::deltaT(), GeopsyCore::TimeRange::end(), geopsyGui, SciFigs::GraphContentLayer::graph(), GeopsyCore::Signal::name(), QGpCoreTools::Angle::normalize(), GeopsyCore::SignalTemplate< sampleType >::nSamples(), GeopsyCore::DoubleSignal::restoreType(), GeopsyCore::DoubleSignal::saveType(), QGpCoreTools::Angle::setDegrees(), SciFigs::XUniqueYColorLines::setPointCount(), SciFigs::Axis::setTitle(), SciFigs::Axis::setTitleInversedScale(), QGpCoreTools::Angle::sin(), GeopsyCore::TimeRange::start(), GeopsyCore::Signal::t0(), SciFigs::Axis::title, QGpCoreTools::tr(), TRACE, UNLOCK_SAMPLES, w, SciFigs::XUniqueYColorLines::x(), SciFigs::AxisWindow::xAxis(), SciFigs::XUniqueYColorLines::y(), and SciFigs::AxisWindow::yAxis().
{ TRACE; ASSERT(subPool->count()>=_curveLayers.count()); SubSignalPool::iterator it=subPool->begin(); Angle proj; proj.setDegrees(direction); QString xSuffix, ySuffix; if(verticalPlane) { proj.normalize(); xSuffix=tr(" - dir %1" ).arg(proj.degrees(), 0, 'f', 1); ySuffix=tr(" - Vertical"); setWindowTitle(tr("Vertical particle motion%1").arg(xSuffix)); } else { xSuffix=tr(" - East"); ySuffix=tr(" - North"); setWindowTitle(tr("Horizontal particle motion")); } geopsyGui->updateWindowTitle(this); const Signal *sigZ, *sigN, *sigE; const DoubleSignal *sigZp, *sigNp, *sigEp; Rect r; int n=_curveLayers.count(); for(int ig=0; ig<n; ig++, ++it) { sigZ=*it; sigN=*(++it); sigE=*(++it); if(doFilter) { sigZp=filtered(sigZ, fparam); sigNp=filtered(sigN, fparam); sigEp=filtered(sigE, fparam); } else { sigZp=sigZ->saveType(DoubleSignal::Waveform); sigNp=sigN->saveType(DoubleSignal::Waveform); sigEp=sigE->saveType(DoubleSignal::Waveform); } TimeRange tw=tlParam.absoluteRange(sigZ); XUniqueYColorLines * plot=_curveLayers[ig]; AxisWindow * w=plot->graph(); w->xAxis()->setTitle(sigZ->name()+xSuffix); w->xAxis()->setTitleInversedScale(w->xAxis()->title()); w->yAxis()->setTitle(sigZ->name()+ySuffix); w->yAxis()->setTitleInversedScale(w->yAxis()->title()); double invdt=1.0/sigZ->deltaT(); int startIndex=(int)round((tw.start()-sigZ->t0())*invdt); if(startIndex<0) startIndex=0; if(startIndex>sigZ->nSamples()) startIndex=sigZ->nSamples(); int endIndex=(int) floor((tw.end()-sigZ->t0())*invdt+0.5); if(endIndex<0) endIndex=0; if(endIndex>sigZ->nSamples()) endIndex=sigZ->nSamples(); plot->clear(); plot->setPointCount(1, endIndex-startIndex); CONST_LOCK_SAMPLES(double, sampZ, sigZp) CONST_LOCK_SAMPLES(double, sampN, sigNp) CONST_LOCK_SAMPLES(double, sampE, sigEp) double * x=plot->x(); double * y=plot->y(); LayerLocker ll(plot); if(verticalPlane) { for(int i=startIndex; i<endIndex; i++) { int ip=i-startIndex; x[ip]=sampE[i]*proj.cos()+sampN[i]*proj.sin(); y[ip]=sampZ[i]; } } else { for(int i=startIndex; i<endIndex; i++) { int ip=i-startIndex; x[ip]=sampE[i]; y[ip]=sampN[i]; } } UNLOCK_SAMPLES(sigEp) UNLOCK_SAMPLES(sigNp) UNLOCK_SAMPLES(sigZp) if(doFilter) { delete sigZp; delete sigNp; delete sigEp; } else { sigZ->restoreType(sigZp); sigN->restoreType(sigNp); sigE->restoreType(sigEp); } w->deepUpdate(); } }