Brief description of class still missing. More...
#include <SignalLayer.h>
Public Types | |
enum | Clip { NoClip, ClipOverlap, ClipValue, ClipPercentage } |
enum | Normalize { NormalizeAll, NormalizeOne, NormalizeVisibleAll, NormalizeVisibleOne, NormalizeValue } |
enum | Offset { NoOffset, GlobalOffset, VisibleOffset } |
enum | TimeRange { AvailableRange, AroundPickRange, CustomRange } |
enum | YAxis { ViewerIndex, Receiver, SignalName, Overlayed } |
Signals | |
void | propertiesChanged () |
Public Member Functions | |
virtual void | addProperties (PropertyProxy *pp) |
double | afterPickDelay () const |
const QString & | aroundPickName () const |
double | beforePickDelay () const |
virtual Rect | boundingRect () const |
void | clearSignalColors () |
Clip | clip () const |
double | clipPerc () const |
QString | clipString () const |
double | clipValue () const |
const TimeRangeParameters & | customTimeRange () const |
bool | grid () const |
virtual bool | hasProperties () |
void | highlightSignal (const GraphContentOptions &gc, QPainter &p, int w, int iSig, int isigmin, int isigmax) const |
void | minMaxY (double &min, double &max) const |
Normalize | normalize () const |
QString | normalizeString () const |
double | normalizeValue () const |
Offset | offset () const |
QString | offsetString () const |
double | overlap () const |
virtual void | properties (PropertyWidget *w) const |
virtual void | removeProperties (PropertyProxy *pp) |
void | setAfterPickDelay (double d) |
void | setAroundPickName (const QString &pn) |
void | setBeforePickDelay (double d) |
void | setClip (Clip c) |
void | setClip (QString c) |
void | setClipPerc (double v) |
void | setClipValue (double v) |
void | setCustomTimeRange (const TimeRangeParameters &ctr) |
void | setGrid (bool b) |
void | setNormalize (Normalize n) |
void | setNormalize (QString n) |
void | setNormalizeValue (double v) |
void | setOffset (Offset o) |
void | setOffset (QString n) |
void | setOverlap (double v) |
virtual void | setProperty (uint wid, int pid, QVariant val) |
void | setReceiverYAxis (bool rc) |
void | setSignalColor (const Signal *sig, const QColor &c) |
void | setTimeRange (TimeRange tr) |
void | setTimeRange (QString tr) |
void | setVariableArea (bool b) |
void | setWiggleTrace (bool b) |
void | setYAxis (YAxis a) |
void | setYAxis (QString a) |
int | signalAt (int yPos, double &baseDistance) const |
const QColor & | signalColor (const Signal *sig) const |
SignalLayer (AxisWindow *parent=0) | |
void | signalsUpdate () |
void | sigYBoundaries (int index, double overlap, QRect &bound) const |
const SubSignalPool * | subPool () const |
void | subPoolUpdate (SubSignalPool *subPool=0) |
TimeRange | timeRange () const |
QString | timeRangeString () const |
bool | variableArea () const |
bool | wiggleTrace () const |
virtual const QString & | xml_tagName () const |
YAxis | yAxis () const |
QString | yAxisString () const |
~SignalLayer () | |
Static Public Attributes | |
static const QString | xmlSignalLayerTag = "SignalLayer" |
Protected Member Functions | |
void | drawGaps (const GraphContentOptions &gc, QPainter &p, const Signal *sig, int iSig) const |
void | drawingAmplitude (const Signal *sig, int itmin, int itmax, double &valClip, double &affMax) const |
void | drawSignal (const GraphContentOptions &gc, QPainter &p, const Signal *sig, int iSig, int itmin, int itmax, double x0, double dx, bool allSamplesVisible, double affMax, int pixelWidth, bool variableArea, bool wiggleTrace) const |
virtual bool | keyPressEvent (QKeyEvent *e) |
double | maxAmplitude (const GraphContentOptions &gc) const |
virtual void | paintData (const LayerPainterRequest &lp, QPainter &p, double dotpercm) const |
void | setIsigMinMax (const GraphContentOptions &gc, int &isigmin, int &isigmax) const |
void | updateGrid () |
bool | visibleSamples (const GraphContentOptions &gc, const Signal *sig, int &itmin, int &itmax, double &x0, double &dx) const |
void | visibleSamples (const GraphContentOptions &gc, const Signal *sig, int &itmin, int &itmax) const |
virtual bool | wheelEvent (QWheelEvent *e) |
virtual XMLMember | xml_member (XML_MEMBER_ARGS) |
virtual void | xml_polish (XML_POLISH_ARGS) |
virtual void | xml_polishChild (XML_POLISHCHILD_ARGS) |
virtual bool | xml_setProperty (XML_SETPROPERTY_ARGS) |
virtual void | xml_writeChildren (XML_WRITECHILDREN_ARGS) const |
virtual void | xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const |
Protected Attributes | |
double | _afterPickDelay |
QString | _aroundPickName |
double | _beforePickDelay |
Clip | _clip |
double | _clipPerc |
double | _clipValue |
TimeRangeParameters | _customTimeRange |
Grid2D< double > * | _gridPlot |
Normalize | _normalize |
double | _normalizeValue |
Offset | _offset |
double | _overlap |
QMap< const Signal *, QColor > | _signalColors |
QMap< const Signal *, double > | _signalOverlaps |
QVector< double > | _signalY |
SubSignalPool * | _subPool |
bool | _subPoolOwner |
TimeRange | _timeRange |
bool | _variableArea |
bool | _wiggleTrace |
YAxis | _yAxis |
Static Protected Attributes | |
static uint | _tab = PropertyProxy::uniqueId() |
Properties | |
double | afterPickDelay |
QString | aroundPickName |
double | beforePickDelay |
QString | clip |
double | clipPerc |
double | clipValue |
bool | grid |
QString | norm |
QString | normalize |
double | normalizeValue |
double | normValue |
QString | offset |
double | overlap |
bool | smoothGrid |
QString | timeRange |
bool | useReceiverCoord |
bool | variableArea |
bool | wiggleTrace |
QString | yAxis |
Friends | |
class | PickLayer |
class | TimeWindowLayer |
Brief description of class still missing.
Full description of class still missing
GeopsyGui::SignalLayer::SignalLayer | ( | AxisWindow * | parent = 0 | ) |
References _afterPickDelay, _beforePickDelay, _clip, _clipPerc, _clipValue, _gridPlot, _normalize, _normalizeValue, _offset, _overlap, _subPool, _subPoolOwner, _timeRange, _variableArea, _wiggleTrace, _yAxis, AvailableRange, GeopsyCore::geopsyCore, NoClip, NoOffset, NormalizeAll, SciFigs::GridPlot::setLinearPalette(), TRACE, and ViewerIndex.
: GridPlot(parent) { TRACE; // Required for viewing the layer in figue (through geopsyfigs plugin) if(!geopsyCore) { CoreApplication::addGlobalObject(new GeopsyGuiEngine); } _subPool=0; _subPoolOwner=false; // Trace display options _wiggleTrace=true; _variableArea=true; _offset=NoOffset; _normalize=NormalizeAll; _normalizeValue=1.0; _clip=NoClip; _clipPerc=50.0; _clipValue=1.0; _overlap=1.0; // Grid plotting options _gridPlot=0; // Y axis type options _yAxis=ViewerIndex; // Time range options _timeRange=AvailableRange; _beforePickDelay=0.02; _afterPickDelay=0.02; // Palette options setLinearPalette( -_overlap * 0.5, _overlap * 0.5); }
References _gridPlot, _subPool, _subPoolOwner, and TRACE.
{ TRACE; delete _gridPlot; if(_subPoolOwner) { delete _subPool; } }
void GeopsyGui::SignalLayer::addProperties | ( | PropertyProxy * | pp | ) | [virtual] |
Setup property editor
Reimplemented from SciFigs::GridPlot.
References _subPool, _tab, QGpGuiTools::PropertyProxy::addReference(), QGpGuiTools::PropertyProxy::addTab(), QGpGuiTools::PropertyProxy::currentTabWidget(), GeopsyGui::SignalsProperties::setCurrentSubPool(), QGpGuiTools::PropertyProxy::setCurrentTab(), QGpCoreTools::tr(), TRACE, and w.
{ TRACE; if(pp->setCurrentTab(_tab)) { SignalsProperties * w=static_cast<SignalsProperties *>(pp->currentTabWidget()); w->setCurrentSubPool(_subPool); pp->addReference(this); } else { SignalsProperties * w=new SignalsProperties; w->setCurrentSubPool(_subPool); pp->addTab(_tab, tr("Signals"), w, this); } GridPlot::addProperties(pp); }
double GeopsyGui::SignalLayer::afterPickDelay | ( | ) | const [inline] |
{return _afterPickDelay;}
const QString& GeopsyGui::SignalLayer::aroundPickName | ( | ) | const [inline] |
{return _aroundPickName;}
double GeopsyGui::SignalLayer::beforePickDelay | ( | ) | const [inline] |
{return _beforePickDelay;}
Rect GeopsyGui::SignalLayer::boundingRect | ( | ) | const [virtual] |
Implements SciFigs::GraphContentLayer.
References _subPool, GeopsyCore::SubSignalPool::isEmpty(), minMaxY(), QGpCoreTools::Rect::setLimits(), GeopsyCore::TimeRange::setStart(), GeopsyCore::SubSignalPool::timeRange(), QGpCoreTools::tr(), and TRACE.
Referenced by GeopsyGui::PickLayer::boundingRect(), and GeopsyGui::TimeWindowLayer::boundingRect().
References _signalColors, and TRACE.
Referenced by MagnifierSignal::setSignal().
{ TRACE; LayerLocker ll(this); _signalColors.clear(); }
Clip GeopsyGui::SignalLayer::clip | ( | ) | const [inline] |
Referenced by clipString().
{return _clip;}
double GeopsyGui::SignalLayer::clipPerc | ( | ) | const [inline] |
{return _clipPerc;}
QString GeopsyGui::SignalLayer::clipString | ( | ) | const |
References clip(), ClipOverlap, ClipPercentage, ClipValue, and TRACE.
{ TRACE; switch (clip()) { case ClipOverlap: return "ClipOverlap"; case ClipPercentage: return "ClipPercentage"; case ClipValue: return "ClipValue"; default: return "NoClip"; }; }
double GeopsyGui::SignalLayer::clipValue | ( | ) | const [inline] |
{return _clipValue;}
const TimeRangeParameters& GeopsyGui::SignalLayer::customTimeRange | ( | ) | const [inline] |
{return _customTimeRange;}
void GeopsyGui::SignalLayer::drawGaps | ( | const GraphContentOptions & | gc, |
QPainter & | p, | ||
const Signal * | sig, | ||
int | iSig | ||
) | const [protected] |
References _signalY, GeopsyCore::SparseTimeRange::intersection(), GeopsyCore::SparseTimeRange::invert(), GeopsyCore::Signal::timeRange(), QGpCoreTools::tr(), SciFigs::GraphContentOptions::xr2s(), SciFigs::GraphContentOptions::xVisMax(), SciFigs::GraphContentOptions::xVisMin(), and SciFigs::GraphContentOptions::yr2s().
Referenced by paintData().
{ const SparseTimeRange& signalRange=sig->timeRange(); ::TimeRange gcLimits(gc.xVisMin(), gc.xVisMax()); SparseTimeRange gaps=signalRange.invert(false); gaps.intersection(gcLimits); const QVector< ::TimeRange >& g=gaps.ranges(); int n=g.count(); if(n==0) return; p.save(); int wtop=gc.yr2s(_signalY[ iSig ] - 0.375); int wheight=gc.yr2s(_signalY[ iSig ] + 0.375) - wtop; int * wleft=new int [ n ]; int * wwidth=new int [ n ]; p.setPen(QPen( Qt::NoPen) ); p.setBrush(QBrush( QColor(254, 156, 158, 128) )); for(int i=0; i<n; i++) { const ::TimeRange& tr=g.at(i); wleft[ i ]=gc.xr2s(tr.start()); wwidth[ i ]=gc.xr2s(tr.end()) - wleft[ i ]; p.drawRect(wleft[ i ], wtop, wwidth[ i ], wheight); } p.setPen(QPen( QColor(255, 75, 78), 1, Qt::SolidLine) ); p.setBrush(QBrush( Qt::NoBrush) ); for(int i=0; i<n; i++) { p.drawRect(wleft[ i ], wtop, wwidth[ i ], wheight); } delete [] wleft; delete [] wwidth; p.restore(); }
void GeopsyGui::SignalLayer::drawingAmplitude | ( | const Signal * | sig, |
int | itmin, | ||
int | itmax, | ||
double & | valClip, | ||
double & | affMax | ||
) | const [protected] |
affMax is the conversion factor from amplitude units to display units. For instance, when various signals are ploted in the same graph, the display unit for each signal vary from -0.5 to 0.5 at an overlap of 1. affMax is computed outside this function for all normalizations including all signals.
References _clip, _clipPerc, _clipValue, _normalize, _normalizeValue, _overlap, _signalOverlaps, _subPool, ClipOverlap, ClipPercentage, ClipValue, GeopsyCore::SubSignalPool::count(), GeopsyCore::Signal::maximumAmplitude(), NoClip, NormalizeAll, NormalizeOne, NormalizeValue, NormalizeVisibleAll, NormalizeVisibleOne, Overlayed, SAFE_UNINITIALIZED, TRACE, GeopsyCore::DoubleSignal::type(), and yAxis().
Referenced by drawSignal(), and updateGrid().
{ TRACE; double vmax; SAFE_UNINITIALIZED(vmax,0); if(_subPool->count() > 1 && yAxis()!=Overlayed) { switch (sig->type()) { case Signal::Waveform: switch (_normalize) { case NormalizeAll: vmax=sig->maximumAmplitude(); break; case NormalizeVisibleAll: vmax=sig->maximumAmplitude(itmin, itmax); break; case NormalizeOne: vmax=sig->maximumAmplitude(); if(vmax==0. ) vmax=1.; affMax=0.5/vmax; break; case NormalizeVisibleOne: vmax=sig->maximumAmplitude(itmin, itmax); if(vmax==0. ) vmax=1.; affMax=0.5/vmax; break; case NormalizeValue: vmax=sig->maximumAmplitude(); affMax=0.5/_normalizeValue; break; } break; case Signal::CAmpWaveform: case Signal::RealSpectrum: case Signal::Spectrum: switch (_normalize) { case NormalizeAll: vmax=sig->maximumAmplitude(); break; case NormalizeVisibleAll: vmax=sig->maximumAmplitude(itmin, itmax); break; case NormalizeOne: vmax=sig->maximumAmplitude(); if(vmax==0. ) vmax=1.; affMax=1.0/vmax; break; case NormalizeVisibleOne: vmax=sig->maximumAmplitude(itmin, itmax); if(vmax==0. ) vmax=1.; affMax=1.0/vmax; break; case NormalizeValue: vmax=sig->maximumAmplitude(); affMax=1.0/_normalizeValue; break; } break; case Signal::CPhaseWaveform: case Signal::Phase: affMax=0.5/M_PI * _overlap; valClip=M_PI; return; case Signal::ArrivalTime: case Signal::UndefinedSignalType: affMax=0.5 * _overlap; valClip=1.0; return; } affMax *= _overlap; QMap<const Signal *, double>::const_iterator it=_signalOverlaps.find(sig); if(it!=_signalOverlaps.end()) { affMax *= it.value(); } switch (_clip) { case NoClip: valClip=vmax; break; case ClipOverlap: valClip=0.9/affMax; break; case ClipValue: valClip=_clipValue; break; case ClipPercentage: valClip=vmax * _clipPerc * 0.01; } } else { affMax=1.0; switch (_normalize) { case NormalizeAll: case NormalizeOne: case NormalizeValue: switch (sig->type()) { case Signal::Waveform: case Signal::ArrivalTime: case Signal::UndefinedSignalType: case Signal::RealSpectrum: case Signal::CAmpWaveform: case Signal::Spectrum: vmax=sig->maximumAmplitude(); break; case Signal::CPhaseWaveform: case Signal::Phase: vmax=M_PI; break; } break; case NormalizeVisibleAll: case NormalizeVisibleOne: { double vmin; SAFE_UNINITIALIZED(vmin,0); vmax=sig->maximumAmplitude(itmin, itmax); switch (sig->type()) { case Signal::Waveform: case Signal::ArrivalTime: case Signal::UndefinedSignalType: vmin=-vmax; break; case Signal::RealSpectrum: case Signal::CAmpWaveform: case Signal::Spectrum: vmin=0; break; case Signal::CPhaseWaveform: case Signal::Phase: vmin=-M_PI; vmax=M_PI; break; } } break; } switch (_clip) { case NoClip: case ClipOverlap: valClip=vmax; break; case ClipValue: valClip=_clipValue; break; case ClipPercentage: valClip=vmax * _clipPerc * 0.01; } } }
void GeopsyGui::SignalLayer::drawSignal | ( | const GraphContentOptions & | gc, |
QPainter & | p, | ||
const Signal * | sig, | ||
int | iSig, | ||
int | itmin, | ||
int | itmax, | ||
double | x0, | ||
double | dx, | ||
bool | allSamplesVisible, | ||
double | affMax, | ||
int | pixelWidth, | ||
bool | variableArea, | ||
bool | wiggleTrace | ||
) | const [protected] |
References _normalize, _offset, _signalY, _subPool, GeopsyCore::DoubleSignal::amplitude(), GeopsyCore::Signal::averageAmplitude(), SciFigs::GraphContentOptions::ay(), CONST_LOCK_SAMPLES, GeopsyCore::SubSignalPool::count(), drawingAmplitude(), GlobalOffset, GeopsyCore::DoubleSignal::isSpectrum(), GeopsyCore::Signal::maximumAmplitude(), NoOffset, NormalizeAll, GeopsyCore::DoubleSignal::phase(), SciFigs::GraphContentOptions::r2s(), SAFE_UNINITIALIZED, TRACE, GeopsyCore::DoubleSignal::type(), UNLOCK_SAMPLES, VisibleOffset, SciFigs::GraphContentOptions::xr2s(), SciFigs::GraphContentOptions::xs2r(), and SciFigs::GraphContentOptions::yr2s().
Referenced by highlightSignal(), and paintData().
{ TRACE; if(itmin >= itmax) return; // Introduction : preparing display options // ---------------------------------------- double valClip; if(( _normalize & NormalizeAll) && (sig->type()==Signal::Spectrum || sig->type()==Signal::RealSpectrum) ) affMax *= 2; drawingAmplitude(sig, itmin, itmax, valClip, affMax); if(_subPool->count() > 1) { // Even if y axis is reversed keep positive signal up if(gc.ay() > 0) affMax=-affMax; } // Core Routine: drawing // --------------------- double y0; SAFE_UNINITIALIZED(y0,0); // Do not remove offset for spectra if(sig->isSpectrum()) { y0=_signalY[ iSig ]; } else { switch(_offset) { case NoOffset: y0=_signalY[ iSig ]; break; case GlobalOffset: y0=_signalY[ iSig ] - sig->averageAmplitude() * affMax;; break; case VisibleOffset: y0=_signalY[ iSig ] - sig->averageAmplitude(itmin, itmax) * affMax;; break; } } // For phase ploting max spectrum is required, not for other modes. // This is taken out of the general lock to avoid recursive locks of signal samples // Normalizeally ok but mix of write and read locks are not fully recursives (bug fixed in Qt 4.4.0) double globalMaxSpec; SAFE_UNINITIALIZED(globalMaxSpec,0); switch (sig->type()) { case Signal::CPhaseWaveform: case Signal::Phase: globalMaxSpec=sig->maximumAmplitude(); break; default: break; } CONST_LOCK_SAMPLES(double, samples, sig) // Plot a line at each sample from min to max observed in a pixel interval // Variable area just extend interval to 0 if min and max have the same sign if( !allSamplesVisible && (wiggleTrace || variableArea) ) { double val, minVal, maxVal; double x=x0, x_step; int i=itmin; int ix=gc.xr2s(x0); int iy1, iy2, iy1n, iy2n; switch (sig->type()) { case Signal::Waveform: case Signal::RealSpectrum: maxVal=samples[ i ]; if(maxVal > valClip) maxVal=valClip; else if(maxVal < -valClip) maxVal=-valClip; iy1=gc.yr2s(y0 + maxVal * affMax); iy2=iy1; for( ;ix < pixelWidth && i < itmax;ix++ ) { x_step=gc.xs2r(ix); minVal=samples[ i ]; maxVal=minVal; while(x < x_step && i < itmax) { val=samples[ i ]; if(val < minVal) minVal=val; else if(val > maxVal) maxVal=val; i++; x += dx; } if(maxVal > valClip) maxVal=valClip; else if(maxVal < -valClip) maxVal=-valClip; if(minVal > valClip) minVal=valClip; else if(minVal < -valClip) minVal=-valClip; if(variableArea && minVal > 0.0) minVal=0; iy1n=gc.yr2s(y0 + maxVal * affMax); iy2n=gc.yr2s(y0 + minVal * affMax); if(iy2<iy1n || iy1>iy2n) { p.drawLine(ix-1, iy2, ix, iy1n); } iy1=iy1n; iy2=iy2n; if(iy2==iy1) { p.drawPoint(ix, iy1); } else { p.drawLine(ix, iy2, ix, iy1); } } break; case Signal::CAmpWaveform: case Signal::Spectrum: maxVal=sig->amplitude(samples, i); if(maxVal > valClip) maxVal=valClip; iy1=gc.yr2s(y0 + maxVal * affMax); iy2=iy1; for( ;ix < pixelWidth && i < itmax;ix++ ) { x_step=gc.xs2r(ix); minVal=sig->amplitude(samples, i); maxVal=minVal; while(x < x_step && i < itmax) { val=sig->amplitude(samples, i); if(val < minVal) minVal=val; else if(val > maxVal) maxVal=val; i++; x += dx; } if(maxVal > valClip) { maxVal=valClip; if(minVal > valClip) minVal=valClip; } if(variableArea && minVal > 0.0) minVal=0; iy1n=gc.yr2s(y0 + maxVal * affMax); iy2n=gc.yr2s(y0 + minVal * affMax); if(iy2<iy1n || iy1>iy2n) { p.drawLine(ix-1, iy2, ix, iy1n); } iy1=iy1n; iy2=iy2n; if(iy2==iy1) { p.drawPoint(ix, iy1); } else { p.drawLine(ix, iy2, ix, iy1); } } break; case Signal::CPhaseWaveform: case Signal::Phase: { maxVal=sig->phase(samples, i); if(maxVal > valClip) maxVal=valClip; else if(maxVal < -valClip) maxVal=-valClip; iy1=gc.yr2s(y0 + maxVal * affMax); iy2=iy1; for( ;ix < pixelWidth && i < itmax;ix++ ) { x_step=gc.xs2r(ix); minVal=sig->phase(samples, i); maxVal=minVal; double maxSpec=0, valSpec; while(x < x_step && i < itmax) { val=sig->phase(samples, i); valSpec=sig->amplitude(samples, i); if(valSpec > maxSpec) maxSpec=valSpec; if(val < minVal) minVal=val; else if(val > maxVal) maxVal=val; i++; x += dx; } if(maxVal > valClip) maxVal=valClip; else if(maxVal < -valClip) maxVal=-valClip; if(minVal > valClip) minVal=valClip; else if(minVal < -valClip) minVal=-valClip; if(variableArea && minVal > 0) minVal=0; int specColor=(int) (255 * (1 - maxSpec/globalMaxSpec) ); p.setPen(QColor( specColor, specColor, specColor) ); iy1n=gc.yr2s(y0 + maxVal * affMax); iy2n=gc.yr2s(y0 + minVal * affMax); if(iy2<iy1n || iy1>iy2n) { p.drawLine(ix-1, iy2, ix, iy1n); } iy1=iy1n; iy2=iy2n; } } case Signal::ArrivalTime: case Signal::UndefinedSignalType: break; } } else { if(wiggleTrace) { switch (sig->type()) { case Signal::Waveform: case Signal::RealSpectrum: { double val=samples[ itmin ]; if(val > valClip) val=valClip; else if(val < -valClip) val=-valClip; double x=x0; QPoint p1=gc.r2s(x, y0 + val * affMax); x += dx; for(int i=itmin + 1; i <= itmax; i++, x += dx) { val=samples[ i ]; if(val > valClip) val=valClip; else if(val < -valClip) val=-valClip; QPoint p2=gc.r2s(x, y0 + val * affMax); p.drawLine(p1, p2); p1=p2; } } break; case Signal::CAmpWaveform: case Signal::Spectrum: { double val=sig->amplitude(samples, itmin); if(val > valClip) val=valClip; double x=x0; QPoint p1=gc.r2s(x, y0 + val * affMax); x += dx; for(int i=itmin + 1; i <= itmax; i++, x += dx) { val=sig->amplitude(samples, i); if(val > valClip) val=valClip; QPoint p2=gc.r2s(x, y0 + val * affMax); p.drawLine(p1, p2); p1=p2; } } break; case Signal::CPhaseWaveform: case Signal::Phase: { double val=sig->phase(samples, itmin); if(val > valClip) val=valClip; else if(val < -valClip) val=-valClip; double x=x0; QPoint p1=gc.r2s(x, y0 + val * affMax); x += dx; for(int i=itmin + 1; i <= itmax; i++, x += dx) { val=sig->phase(samples, i); if(val > valClip) val=valClip; else if(val < -valClip) val=-valClip; QPoint p2=gc.r2s(x, y0 + val * affMax); int specColor=(int) (255 * (1 - sig->amplitude(samples, i)/globalMaxSpec) ); p.setPen(QColor( specColor, specColor, specColor) ); p.drawLine(p1, p2); p1=p2; } } case Signal::ArrivalTime: case Signal::UndefinedSignalType: break; } } if(variableArea) { const int NPTS=500; QPoint pSeq[ NPTS + 5 ]; int n; double val; switch (sig->type()) { case Signal::Waveform: case Signal::RealSpectrum: { n=0; double x=x0; for(int i=itmin; i <= itmax; i++, x += dx) { val=samples[ i ]; if(val > valClip) val=valClip; else if(val < -valClip) val=-valClip; if(val >= 0. ) { if( !n) { if(i==itmin) { pSeq[ n ]=gc.r2s(x, y0); n++; } else { double inter=samples[ i ]/(samples[ i ] - samples[ i - 1 ] ); pSeq[ n ]=gc.r2s(x - inter * dx, y0); n++; } } pSeq[ n ]=gc.r2s(x, y0 + val * affMax); n++; if(n >= NPTS) { pSeq[ n ]=gc.r2s(x, y0); n++; p.drawPolygon(pSeq, n); pSeq[ 0 ]=pSeq[ n - 1 ]; pSeq[ 1 ]=pSeq[ n - 2 ]; n=2; } } else { if(n) { double inter=samples[ i ]/(samples[ i - 1 ] - samples[ i ] ); pSeq[ n ]=gc.r2s(x + inter * dx, y0); n++; p.drawPolygon(pSeq, n); n=0; } } } if(n) { pSeq[ n ]=gc.r2s(x - dx, y0); n++; p.drawPolygon(pSeq, n); n=0; } } break; case Signal::CAmpWaveform: case Signal::Spectrum: { double x=x0; pSeq[ 0 ]=gc.r2s(x, y0); n=1; for(int i=itmin; i <= itmax; i++, x += dx) { val=sig->amplitude(samples, i); if(val > valClip) val=valClip; pSeq[ n ]=gc.r2s(x, y0 + val * affMax); n++; if(n >= NPTS || pSeq[ n - 1 ].y()==pSeq[ 0 ].y()) { pSeq[ n ]=gc.r2s(x, y0); n++; p.drawPolygon(pSeq, n); pSeq[ 0 ]=pSeq[ n - 1 ]; pSeq[ 1 ]=pSeq[ n - 2 ]; n=2; } } if(n) { pSeq[ n ]=gc.r2s(x - dx, y0); n++; p.drawPolygon(pSeq, n); n=0; } } break; case Signal::CPhaseWaveform: case Signal::Phase: { n=0; double x=x0; for(int i=itmin; i <= itmax; i++, x += dx) { int specColor=(int) (255 * (1 - sig->amplitude(samples, i)/globalMaxSpec) ); p.setPen(QColor( specColor, specColor, specColor) ); val=sig->phase(samples, i); if(val > valClip) val=valClip; else if(val < -valClip) val=-valClip; if(val >= 0. ) { if( !n) { if(i==itmin) { pSeq[ n ]=gc.r2s(x, y0); n++; } else { val=sig->phase(samples, i); // unclipped only double inter=val/(val - sig->phase(samples, i - 1) ); pSeq[ n ]=gc.r2s(x - inter * dx, y0); n++; } } pSeq[ n ]=gc.r2s(x, y0 + val * affMax); n++; if(n >= NPTS) { pSeq[ n ]=gc.r2s(x, y0); n++; p.drawPolygon(pSeq, n); pSeq[ 0 ]=pSeq[ n - 1 ]; pSeq[ 1 ]=pSeq[ n - 2 ]; n=2; } } else { if(n) { val=sig->phase(samples, i); // unclipped only double inter=val/(sig->phase(samples, i - 1) - val); pSeq[ n ]=gc.r2s(x + inter * dx, y0); n++; p.drawPolygon(pSeq, n); n=0; } } } if(n) { pSeq[ n ]=gc.r2s(x - dx, y0); n++; p.drawPolygon(pSeq, n); n=0; } } case Signal::ArrivalTime: case Signal::UndefinedSignalType: break; } } } UNLOCK_SAMPLES(sig); }
bool GeopsyGui::SignalLayer::grid | ( | ) | const [inline] |
{return _gridPlot;}
virtual bool GeopsyGui::SignalLayer::hasProperties | ( | ) | [inline, virtual] |
Reimplemented from SciFigs::GridPlot.
{return true;}
void GeopsyGui::SignalLayer::highlightSignal | ( | const GraphContentOptions & | gc, |
QPainter & | p, | ||
int | w, | ||
int | iSig, | ||
int | isigmin, | ||
int | isigmax | ||
) | const |
References _subPool, GeopsyCore::SubSignalPool::at(), drawSignal(), maxAmplitude(), TRACE, GeopsyCore::DoubleSignal::type(), and visibleSamples().
Referenced by GeopsyGui::PickLayer::paintData().
{ TRACE; if(iSig < isigmin) return ; if(iSig >= isigmax) return ; Signal * sig=_subPool->at(iSig); p.setPen(QPen(Qt::red, 1)); int itmin, itmax; double x0, dx; // Useful only for NormalizeAll and NormalizeVisibleAll double affMax=0.5/maxAmplitude(gc); if(sig->type()==Signal::Spectrum || sig->type()==Signal::RealSpectrum) affMax *= 2; bool allSamplesVisible=visibleSamples(gc, sig, itmin, itmax, x0, dx); drawSignal(gc, p, sig, iSig, itmin, itmax, x0, dx, allSamplesVisible, affMax, w, false, true); }
bool GeopsyGui::SignalLayer::keyPressEvent | ( | QKeyEvent * | e | ) | [protected, virtual] |
Reimplemented from SciFigs::GraphContentLayer.
{ if(e->modifiers() & Qt::ShiftModifier) { e->accept(); switch (e->key()) { case Qt::Key_Up: spinOverlap(1, false, 0); break; case Qt::Key_Down: spinOverlap( -1, false, 0); break; } return false; } return true; }
double GeopsyGui::SignalLayer::maxAmplitude | ( | const GraphContentOptions & | gc | ) | const [protected] |
Find the maximum amplitude across all traces of current subpool. Returns 0 if normalize() is not NormalizeAll or NormalizeVisibleAll
References _normalize, _subPool, GeopsyCore::SubSignalPool::at(), GeopsyCore::SubSignalPool::count(), GeopsyCore::geopsyCore, GeopsyCore::Signal::maximumAmplitude(), NormalizeAll, NormalizeOne, NormalizeValue, NormalizeVisibleAll, NormalizeVisibleOne, GeopsyCore::GeopsyCoreEngine::setProgressMaximum(), GeopsyCore::GeopsyCoreEngine::setProgressValue(), TRACE, and visibleSamples().
Referenced by highlightSignal(), paintData(), and updateGrid().
{ TRACE; double vmax=0.0; int n=_subPool->count(); geopsyCore->setProgressMaximum (n-1); switch(_normalize) { case NormalizeAll: for(int i=0;i < n;i++ ) { const Signal * sig=_subPool->at(i); double val=sig->maximumAmplitude(); if(val > vmax) vmax=val; geopsyCore->setProgressValue (i); } break; case NormalizeVisibleAll: int iMin, iMax; for(int i=0;i < n;i++ ) { const Signal * sig=_subPool->at(i); visibleSamples(gc, sig, iMin, iMax); double val=sig->maximumAmplitude(iMin, iMax); if(val > vmax) vmax=val; geopsyCore->setProgressValue (i); } break; case NormalizeOne: case NormalizeValue: case NormalizeVisibleOne: break; } return vmax; }
void GeopsyGui::SignalLayer::minMaxY | ( | double & | min, |
double & | max | ||
) | const |
Gives the min and max for Y to show all signals
References _signalY, _subPool, _yAxis, GeopsyCore::SubSignalPool::at(), GeopsyCore::SubSignalPool::count(), GeopsyCore::SubSignalPool::first(), GeopsyCore::Signal::maximumAmplitude(), Overlayed, Receiver, SignalName, TRACE, GeopsyCore::DoubleSignal::type(), and ViewerIndex.
Referenced by boundingRect(), ManualPick::init(), GraphicWindow::setLimits(), SignalViewer::setSignals(), and GraphicWindow::signalsUpdate().
{ TRACE; int n=_subPool->count(); if(n<=0) return ; if(n==1) { Signal * sig=_subPool->first(); max=sig->maximumAmplitude(); switch (sig->type()) { case Signal::Waveform: min=-max; break; case Signal::RealSpectrum: case Signal::CAmpWaveform: case Signal::Spectrum: min=0; break; case Signal::CPhaseWaveform: case Signal::Phase: min=-M_PI; max=M_PI; case Signal::ArrivalTime: case Signal::UndefinedSignalType: break; } return ; } // find min and max of base line of signals switch(_yAxis) { case Receiver: { min=1e99;max=-1e99; for(int i=0;i < n;i++ ) { if(_signalY[ i ] < min) { min=_signalY[ i ]; } if(_signalY[ i ] > max) { max=_signalY[ i ]; } } double delta=0.5*(max - min)/n; min-= delta; max+= delta; } break; case SignalName: min=n; max=0; for(int i=0;i < n;i++ ) { if(_signalY[ i ] < min) { min=_signalY[ i ]; } if(_signalY[ i ] > max) { max=_signalY[ i ]; } } min -= 0.5; max += 0.5; break; case ViewerIndex: min=0.5; max=n + 0.5; break; case Overlayed: { min=1e99;max=-1e99; double mini, maxi; for(int i=0;i < n;i++ ) { Signal * sig=_subPool->at(i); maxi=sig->maximumAmplitude(); switch (sig->type()) { case Signal::ArrivalTime: case Signal::UndefinedSignalType: case Signal::Waveform: mini=-maxi; break; case Signal::RealSpectrum: case Signal::CAmpWaveform: case Signal::Spectrum: mini=0; break; case Signal::CPhaseWaveform: case Signal::Phase: mini=-M_PI; maxi=M_PI; break; } if(mini<min) min=mini; if(maxi>max) max=maxi; } } break; } }
Normalize GeopsyGui::SignalLayer::normalize | ( | ) | const [inline] |
Referenced by normalizeString().
{return _normalize;}
QString GeopsyGui::SignalLayer::normalizeString | ( | ) | const |
References normalize(), NormalizeOne, NormalizeValue, NormalizeVisibleAll, NormalizeVisibleOne, and TRACE.
{ TRACE; switch (normalize()) { case NormalizeOne: return "NormalizeOne"; case NormalizeVisibleAll: return "NormalizeVisisibleAll"; case NormalizeVisibleOne: return "NormalizeVisisibleOne"; case NormalizeValue: return "NormalizeValue"; default: return "NormalizeAll"; }; }
double GeopsyGui::SignalLayer::normalizeValue | ( | ) | const [inline] |
{return _normalizeValue;}
Offset GeopsyGui::SignalLayer::offset | ( | ) | const [inline] |
Referenced by offsetString().
{return _offset;}
QString GeopsyGui::SignalLayer::offsetString | ( | ) | const |
References GlobalOffset, offset(), TRACE, and VisibleOffset.
{ TRACE; switch (offset()) { case GlobalOffset: return "GlobalOffset"; case VisibleOffset: return "VisibleOffset"; default: return "NoOffset"; }; }
double GeopsyGui::SignalLayer::overlap | ( | ) | const [inline] |
Referenced by sigYBoundaries().
{return _overlap;}
void GeopsyGui::SignalLayer::paintData | ( | const LayerPainterRequest & | lp, |
QPainter & | p, | ||
double | dotpercm | ||
) | const [protected, virtual] |
Implements SciFigs::GraphContentLayer.
References _gridPlot, _subPool, _variableArea, _wiggleTrace, QGpCoreTools::CacheProcess::add(), GeopsyCore::SubSignalPool::at(), drawGaps(), SciFigs::GridPlot::drawGrid2DBlock(), SciFigs::GridPlot::drawGrid2DYSmooth(), drawSignal(), SciFigs::LayerPainterRequest::graphContent(), maxAmplitude(), QGpCoreTools::CacheProcess::next(), SciFigs::LayerPainterRequest::options(), SciFigs::GridPlot::palette(), SAFE_UNINITIALIZED, setIsigMinMax(), SciFigs::GraphContent::setProgressMaximum(), SciFigs::GraphContent::setProgressValue(), signalColor(), SciFigs::LayerPainterRequest::size(), SciFigs::GridPlot::smooth(), SciFigs::LayerPainterRequest::terminated(), TRACE, visibleSamples(), and w.
{ TRACE; if( !_subPool) return ; const GraphContentOptions& gc=lp.options(); int w=lp.size().width(); // Useful only for NormalizeAll and NormalizeVisibleAll double affMax=0.5/maxAmplitude(gc); int isigmin, isigmax; SAFE_UNINITIALIZED(isigmin, 0); SAFE_UNINITIALIZED(isigmax, 0); setIsigMinMax(gc, isigmin, isigmax); if(_gridPlot) { if(smooth()) drawGrid2DYSmooth( *_gridPlot, palette(), lp, p); else drawGrid2DBlock( *_gridPlot, palette(), lp, p); return ; } lp.graphContent()->setProgressMaximum (isigmax - isigmin - 1); int itmin, itmax; double x0, dx; CacheProcess cp; for(int iSig=isigmin; iSig < isigmax; ++iSig) { const Signal * sig=_subPool->at(iSig); visibleSamples(gc, sig, itmin, itmax, x0, dx); cp.add(_subPool->at(iSig)); } // Really draw signals for(int iSig=isigmin; iSig < isigmax; ++iSig) { if(lp.terminated()) { return; } const Signal * sig=_subPool->at(iSig); lp.graphContent()->setProgressValue(iSig - isigmin); bool allSamplesVisible=visibleSamples(gc, sig, itmin, itmax, x0, dx); const QColor& c=signalColor(sig); p.setPen(c); p.setBrush(c); drawSignal(gc, p, sig, iSig, itmin, itmax, x0, dx, allSamplesVisible, affMax, w, _variableArea, _wiggleTrace); // Paint gaps if any drawGaps(gc, p, sig, iSig); cp.next(); } }
void GeopsyGui::SignalLayer::properties | ( | PropertyWidget * | w | ) | const [virtual] |
Reimplemented from SciFigs::GridPlot.
References _afterPickDelay, _aroundPickName, _beforePickDelay, _clip, _clipPerc, _clipValue, _customTimeRange, _gridPlot, _normalize, _normalizeValue, _offset, _overlap, _subPool, _tab, _timeRange, _variableArea, _wiggleTrace, _yAxis, GeopsyGui::SignalsProperties::AfterPickDelay, GeopsyGui::SignalsProperties::AroundPickName, GeopsyGui::SignalsProperties::BeforePickDelay, GeopsyGui::SignalsProperties::clip2item(), GeopsyGui::SignalsProperties::ClipMode, ClipPercentage, GeopsyGui::SignalsProperties::ClipValue, GeopsyGui::SignalsProperties::Colors, GeopsyGui::SignalsProperties::CustomRange, GeopsyCore::SubSignalPool::first(), QGpGuiTools::PropertyWidget::id(), GeopsyCore::SubSignalPool::isEmpty(), GeopsyGui::SignalsProperties::IsSpectrum, GeopsyCore::DoubleSignal::isSpectrum(), GeopsyGui::SignalsProperties::Normalize, GeopsyGui::SignalsProperties::normalize2item(), GeopsyGui::SignalsProperties::NormalizeValue, GeopsyGui::SignalsProperties::Offset, GeopsyGui::SignalsProperties::offset2item(), GeopsyGui::SignalsProperties::Overlap, QGpGuiTools::PropertyWidget::setValue(), GeopsyGui::SignalsProperties::TimeRange, GeopsyGui::SignalsProperties::timeRange2item(), TRACE, GeopsyGui::SignalsProperties::VariableArea, GeopsyGui::SignalsProperties::Wiggle, GeopsyGui::SignalsProperties::YAxis, and GeopsyGui::SignalsProperties::yAxis2item().
{ TRACE; if(w->id()==_tab) { w->setValue(SignalsProperties::Colors, (bool)_gridPlot); if(_subPool && !_subPool->isEmpty()) w->setValue(SignalsProperties::IsSpectrum, _subPool->first()->isSpectrum()); w->setValue(SignalsProperties::Wiggle, _wiggleTrace); w->setValue(SignalsProperties::VariableArea, _variableArea); w->setValue(SignalsProperties::Normalize, SignalsProperties::normalize2item(_normalize)); w->setValue(SignalsProperties::NormalizeValue, _normalizeValue); w->setValue(SignalsProperties::ClipMode, SignalsProperties::clip2item(_clip)); if(_clip==ClipPercentage) w->setValue(SignalsProperties::ClipValue, _clipPerc); else w->setValue(SignalsProperties::ClipValue, _clipValue); w->setValue(SignalsProperties::Overlap, _overlap); w->setValue(SignalsProperties::Offset, SignalsProperties::offset2item(_offset)); w->setValue(SignalsProperties::YAxis, SignalsProperties::yAxis2item(_yAxis)); w->setValue(SignalsProperties::TimeRange, SignalsProperties::timeRange2item(_timeRange)); w->setValue(SignalsProperties::AroundPickName, _aroundPickName); w->setValue(SignalsProperties::BeforePickDelay, _beforePickDelay); w->setValue(SignalsProperties::AfterPickDelay, _afterPickDelay); w->setValue(SignalsProperties::CustomRange, QVariant::fromValue(_customTimeRange)); } else { GridPlot::properties(w); } }
void GeopsyGui::SignalLayer::propertiesChanged | ( | ) | [signal] |
Referenced by setProperty().
void GeopsyGui::SignalLayer::removeProperties | ( | PropertyProxy * | pp | ) | [virtual] |
Clean property editor
Reimplemented from SciFigs::GridPlot.
References _tab, and QGpGuiTools::PropertyProxy::removeTab().
{ pp->removeTab(_tab, this); GridPlot::removeProperties(pp); }
void GeopsyGui::SignalLayer::setAfterPickDelay | ( | double | d | ) | [inline] |
{_afterPickDelay=d;}
void GeopsyGui::SignalLayer::setAroundPickName | ( | const QString & | pn | ) | [inline] |
{_aroundPickName=pn;}
void GeopsyGui::SignalLayer::setBeforePickDelay | ( | double | d | ) | [inline] |
{_beforePickDelay=d;}
void GeopsyGui::SignalLayer::setClip | ( | Clip | c | ) | [inline] |
Referenced by ManualPick::ManualPick(), setClip(), and SignalViewer::SignalViewer().
{_clip=c;}
void GeopsyGui::SignalLayer::setClip | ( | QString | c | ) |
References ClipOverlap, ClipPercentage, ClipValue, NoClip, setClip(), and TRACE.
{ TRACE; if(c.count()<5) return; switch(c[4].unicode()) { case 'i': setClip(NoClip); break; case 'O': setClip(ClipOverlap); break; case 'V': setClip(ClipValue); break; case 'P': setClip(ClipPercentage); break; default: break; } }
void GeopsyGui::SignalLayer::setClipPerc | ( | double | v | ) | [inline] |
{_clipPerc=v;}
void GeopsyGui::SignalLayer::setClipValue | ( | double | v | ) | [inline] |
{_clipValue=v;}
void GeopsyGui::SignalLayer::setCustomTimeRange | ( | const TimeRangeParameters & | ctr | ) | [inline] |
{_customTimeRange=ctr;}
void GeopsyGui::SignalLayer::setGrid | ( | bool | b | ) |
void GeopsyGui::SignalLayer::setIsigMinMax | ( | const GraphContentOptions & | gc, |
int & | isigmin, | ||
int & | isigmax | ||
) | const [inline, protected] |
Estimate the visible signals
References _subPool, _yAxis, GeopsyCore::SubSignalPool::count(), Overlayed, Receiver, SignalName, TRACE, ViewerIndex, SciFigs::GraphContentOptions::yVisMax(), and SciFigs::GraphContentOptions::yVisMin().
Referenced by GeopsyGui::PickLayer::paintData(), and paintData().
{ TRACE; int n=_subPool->count(); switch(_yAxis) { case ViewerIndex: if(n > 1) { if(gc.yVisMin() > 1) isigmin=(int) floor(gc.yVisMin()) - 1; else isigmin=0; isigmax=(int) ceil(gc.yVisMax()) - 1; if(isigmax > n) isigmax=n; } else { isigmin=0; isigmax=n; } break; case Receiver: // TODO something better isigmin=0; isigmax=n; break; case SignalName: // TODO something better isigmin=0; isigmax=n; break; case Overlayed: isigmin=0; isigmax=n; break; } }
void GeopsyGui::SignalLayer::setNormalize | ( | Normalize | n | ) | [inline] |
Referenced by MagnifierSignal::MagnifierSignal(), setNormalize(), and SignalViewer::SignalViewer().
{_normalize=n;}
void GeopsyGui::SignalLayer::setNormalize | ( | QString | n | ) |
References NormalizeAll, NormalizeOne, NormalizeValue, NormalizeVisibleAll, NormalizeVisibleOne, setNormalize(), and TRACE.
{ TRACE; if(n.count()>=11) { switch (n[10].unicode()) { case 'n': if(n=="NormalizeOne" ) setNormalize(NormalizeOne); break; case 'l': if(n=="NormalizeAll" ) setNormalize(NormalizeAll); // Compatibility else if(n=="NormAutoAll" ) setNormalize(NormalizeAll); break; case 'i': if(n=="NormalizeVisibleAll" ) setNormalize(NormalizeVisibleAll); else if(n=="NormalizeVisibleOne" ) setNormalize(NormalizeVisibleOne); break; case 'a': if(n=="NormalizeValue" ) setNormalize(NormalizeValue); break; case 'e': // Compatibility if(n=="NormAutoOne" ) setNormalize(NormalizeOne); break; case 'o': // Compatibility if(n=="NormVisAutoAll" ) setNormalize(NormalizeVisibleOne); else if(n=="NormVisAutoOne" ) setNormalize(NormalizeVisibleAll); break; default: break; } // Compatibility } else if(n=="NormValue" ) setNormalize(NormalizeValue); }
void GeopsyGui::SignalLayer::setNormalizeValue | ( | double | v | ) | [inline] |
{_normalizeValue=v;}
void GeopsyGui::SignalLayer::setOffset | ( | Offset | o | ) | [inline] |
Referenced by setOffset(), SignalViewer::SignalViewer(), and WaveformConsole::stalta().
{_offset=o;}
void GeopsyGui::SignalLayer::setOffset | ( | QString | n | ) |
References GlobalOffset, NoOffset, setOffset(), TRACE, and VisibleOffset.
{ TRACE; if(o.count()<5) return; switch(o[0].unicode()) { case 'N': setOffset(NoOffset); break; case 'G': setOffset(GlobalOffset); break; case 'V': setOffset(VisibleOffset); break; default: break; } }
void GeopsyGui::SignalLayer::setOverlap | ( | double | v | ) | [inline] |
Referenced by setProperty().
{_overlap=v; _signalOverlaps.clear();}
void GeopsyGui::SignalLayer::setProperty | ( | uint | wid, |
int | pid, | ||
QVariant | val | ||
) | [virtual] |
Reimplemented from SciFigs::GridPlot.
Reimplemented in SignalDisplay.
References _afterPickDelay, _aroundPickName, _beforePickDelay, _clip, _clipPerc, _clipValue, _customTimeRange, _gridPlot, _normalize, _normalizeValue, _offset, _tab, _timeRange, _variableArea, _wiggleTrace, _yAxis, GeopsyGui::SignalsProperties::AfterPickDelay, GeopsyGui::SignalsProperties::AroundPickName, GeopsyGui::SignalsProperties::BeforePickDelay, GeopsyGui::SignalsProperties::ClipMode, ClipPercentage, GeopsyGui::SignalsProperties::ClipValue, GeopsyGui::SignalsProperties::Colors, GeopsyGui::SignalsProperties::CustomRange, SciFigs::GraphContent::deepUpdate(), SciFigs::GraphContentLayer::graphContent(), GeopsyGui::SignalsProperties::item2clip(), GeopsyGui::SignalsProperties::item2normalize(), GeopsyGui::SignalsProperties::item2offset(), GeopsyGui::SignalsProperties::item2timeRange(), GeopsyGui::SignalsProperties::item2yAxis(), GeopsyGui::SignalsProperties::Normalize, GeopsyGui::SignalsProperties::NormalizeValue, GeopsyGui::SignalsProperties::Offset, GeopsyGui::SignalsProperties::Overlap, propertiesChanged(), setOverlap(), subPoolUpdate(), GeopsyGui::SignalsProperties::TimeRange, TRACE, updateGrid(), GeopsyGui::SignalsProperties::VariableArea, GeopsyGui::SignalsProperties::Wiggle, and GeopsyGui::SignalsProperties::YAxis.
{ TRACE; LayerLocker ll(this); if(wid==_tab) { switch(pid) { case SignalsProperties::Colors: if(val.toBool()) { if( !_gridPlot) updateGrid(); } else { delete _gridPlot; _gridPlot=0; } break; case SignalsProperties::Wiggle: _wiggleTrace=val.toBool(); break; case SignalsProperties::VariableArea: _variableArea=val.toBool(); break; case SignalsProperties::Normalize: _normalize=SignalsProperties::item2normalize(val.toInt()); break; case SignalsProperties::NormalizeValue: _normalizeValue=val.toDouble(); break; case SignalsProperties::ClipMode: _clip=SignalsProperties::item2clip(val.toInt()); break; case SignalsProperties::ClipValue: if(_clip==ClipPercentage) { _clipPerc=val.toDouble(); } else { _clipValue=val.toDouble(); } break; case SignalsProperties::Overlap: setOverlap(val.toDouble()); break; case SignalsProperties::Offset: _offset=SignalsProperties::item2offset(val.toInt()); break; case SignalsProperties::YAxis: _yAxis=SignalsProperties::item2yAxis(val.toInt()); subPoolUpdate(); break; case SignalsProperties::TimeRange: _timeRange=SignalsProperties::item2timeRange(val.toInt()); break; case SignalsProperties::AroundPickName: _aroundPickName=val.toString(); break; case SignalsProperties::BeforePickDelay: _beforePickDelay=val.toDouble(); break; case SignalsProperties::AfterPickDelay: _afterPickDelay=val.toDouble(); break; case SignalsProperties::CustomRange: _customTimeRange=val.value<TimeRangeParameters>(); break; default: break; } } else { GridPlot::setProperty(wid, pid, val); } emit propertiesChanged(); graphContent()->deepUpdate(); }
void GeopsyGui::SignalLayer::setReceiverYAxis | ( | bool | rc | ) | [inline] |
{_yAxis=rc ? Receiver : ViewerIndex;}
void GeopsyGui::SignalLayer::setSignalColor | ( | const Signal * | sig, |
const QColor & | c | ||
) |
Set color for signal sig. The color of a signal is defined in a map. If c is black, then the entry for sig is removed from the map.
References _signalColors, and TRACE.
Referenced by ToolNR::highlightShot(), MagnifierSignal::setSignal(), and xml_setProperty().
{ TRACE; LayerLocker ll(this); QMap<const Signal *, QColor>::iterator it=_signalColors.find(sig); if(c==Qt::black) { if(it!=_signalColors.end()) { _signalColors.remove(sig); } } else { if(it!=_signalColors.end()) { _signalColors[sig]=c; } else { _signalColors.insert(sig,c); } } }
void GeopsyGui::SignalLayer::setTimeRange | ( | TimeRange | tr | ) | [inline] |
void GeopsyGui::SignalLayer::setTimeRange | ( | QString | tr | ) |
References AroundPickRange, AvailableRange, CustomRange, setTimeRange(), and TRACE.
{ TRACE; if(tr.count()<2) return; switch(tr[1].unicode()) { case 'v': setTimeRange(AvailableRange); break; case 'r': setTimeRange(AroundPickRange); break; case 'u': setTimeRange(CustomRange); break; default: break; } }
void GeopsyGui::SignalLayer::setVariableArea | ( | bool | b | ) | [inline] |
Referenced by ManualPick::ManualPick(), and SignalViewer::SignalViewer().
{_variableArea=b;}
void GeopsyGui::SignalLayer::setWiggleTrace | ( | bool | b | ) | [inline] |
{_wiggleTrace=b;}
void GeopsyGui::SignalLayer::setYAxis | ( | YAxis | a | ) | [inline] |
Referenced by setYAxis().
{_yAxis=a;}
void GeopsyGui::SignalLayer::setYAxis | ( | QString | a | ) |
References Overlayed, Receiver, setYAxis(), SignalName, TRACE, and ViewerIndex.
{ TRACE; if(a.isEmpty()) return; switch(a[0].unicode()) { case 'O': setYAxis(Overlayed); break; case 'R': setYAxis(Receiver); break; case 'S': setYAxis(SignalName); break; case 'V': setYAxis(ViewerIndex); break; default: break; } }
int GeopsyGui::SignalLayer::signalAt | ( | int | yPos, |
double & | baseDistance | ||
) | const |
Return the index of signal at position Y yPos. Return -1 is subPool is empty. baseDistance is set to the ditance between yPos and the base line of returned signal.
References _signalY, _subPool, GeopsyCore::SubSignalPool::count(), SciFigs::GraphContentLayer::graphContent(), SciFigs::GraphContent::options(), TRACE, and SciFigs::GraphContentOptions::ys2r().
Referenced by GeopsyGui::PickLayer::mouseMoveEvent(), and GeopsyGui::PickLayer::mousePressEvent().
{ TRACE; int n=_subPool->count(); if(n < 1) return -1; double yd=graphContent()->options().ys2r(yPos); // Find which signal has the closest base line to yd int iSig=0; double d=fabs(_signalY[ 0 ] - yd); baseDistance=d; for(int i=1;i < n;i++ ) { d=fabs(_signalY[ i ] - yd); if(d < baseDistance) { baseDistance=d; iSig=i; } } return iSig; }
const QColor & GeopsyGui::SignalLayer::signalColor | ( | const Signal * | sig | ) | const |
Return color for signal sig. The color of a signal is defined in a map.
References _signalColors.
Referenced by paintData().
{ QMap<const Signal *, QColor>::const_iterator it=_signalColors.find(sig); if(it!=_signalColors.end()) { return it.value(); } else { static const QColor black=Qt::black; return black; } }
References _gridPlot, SciFigs::GraphContent::deepUpdate(), SciFigs::GraphContentLayer::graphContent(), TRACE, and updateGrid().
Referenced by GraphicWindow::signalsUpdate().
{ TRACE; if(_gridPlot) { LayerLocker ll(this); updateGrid(); } graphContent()->deepUpdate(); }
void GeopsyGui::SignalLayer::sigYBoundaries | ( | int | index, |
double | overlap, | ||
QRect & | bound | ||
) | const |
Set the Y limits of the rectangle to include signal with index
References _signalY, SciFigs::GraphContentLayer::graphContent(), overlap(), and TRACE.
Referenced by GeopsyGui::PickLayer::mousePressEvent().
{ TRACE; double h=0.5 * overlap; bound.setTop(graphContent()->options().yr2s(_signalY[ index ] + h) ); bound.setBottom(graphContent()->options().yr2s(_signalY[ index ] - h) ); }
const SubSignalPool* GeopsyGui::SignalLayer::subPool | ( | ) | const [inline] |
void GeopsyGui::SignalLayer::subPoolUpdate | ( | SubSignalPool * | subPool = 0 | ) |
References _gridPlot, _signalY, _subPool, _subPoolOwner, _yAxis, GeopsyCore::SubSignalPool::at(), GeopsyCore::SubSignalPool::begin(), GeopsyCore::SubSignalPool::count(), GeopsyCore::SubSignalPool::end(), GeopsyCore::Signal::nameComponent(), Overlayed, QGpCoreTools::Curve< pointType >::project(), Receiver, GeopsyCore::SubSignalPool::receivers(), SignalName, subPool(), TRACE, updateGrid(), and ViewerIndex.
Referenced by ManualPick::init(), SignalDisplay::setProperty(), setProperty(), SignalViewer::setSignals(), GraphicWindow::subPoolUpdate(), and xml_polish().
{ TRACE; LayerLocker ll(this); if(subPool) { _subPool=subPool; _subPoolOwner=false; } if( !_subPool) { return; } // Y axis type options _signalY.resize(_subPool->count()); if(_subPool->count()==1) { _signalY[ 0 ]=0.0; } else { switch(_yAxis) { case Receiver: _signalY=_subPool->receivers().project(); break; case ViewerIndex: for(int i=0;i < _subPool->count();i++ ) { _signalY[ i ]=i + 1; } break; case SignalName: { QMap<QString,int> names; for(SubSignalPool::iterator it=_subPool->begin(); it!=_subPool->end(); it++ ) { names.insert((*it)->nameComponent(), 0); } int i=0; for(QMap<QString,int>::iterator it=names.begin();it!=names.end();it++) { it.value()=i++; } int n= _subPool->count(); for(int i=0;i < n;i++ ) { _signalY[ i ]=names[ _subPool->at(i)->nameComponent() ]+1; } } break; case Overlayed: for(int i=0;i < _subPool->count();i++ ) { _signalY[ i ]=0.0; } break; } } if(_gridPlot) updateGrid(); }
TimeRange GeopsyGui::SignalLayer::timeRange | ( | ) | const [inline] |
Referenced by timeRangeString().
{return _timeRange;}
QString GeopsyGui::SignalLayer::timeRangeString | ( | ) | const |
References AroundPickRange, AvailableRange, CustomRange, timeRange(), and TRACE.
{ TRACE; switch (timeRange()) { case CustomRange: break; case AroundPickRange: return "AroundPickRange"; case AvailableRange: return "AvailableRange"; }; return "CustomRange"; }
void GeopsyGui::SignalLayer::updateGrid | ( | ) | [protected] |
References _gridPlot, _normalize, _subPool, GeopsyCore::DoubleSignal::amplitude(), GeopsyCore::SubSignalPool::begin(), CONST_LOCK_SAMPLES, GeopsyCore::SubSignalPool::count(), GeopsyCore::DoubleSignal::deltaF(), GeopsyCore::DoubleSignal::deltaT(), drawingAmplitude(), GeopsyCore::SubSignalPool::end(), SciFigs::GraphContentLayer::graphContent(), GeopsyCore::SubSignalPool::isEmpty(), maxAmplitude(), MSG_ID, NormalizeAll, GeopsyCore::SignalTemplate< sampleType >::nSamples(), GeopsyCore::DoubleSignal::phase(), SAFE_UNINITIALIZED, QGpCoreTools::Grid2D< ValueType >::setDeltaX(), QGpCoreTools::Grid2D< ValueType >::setOrigin(), GeopsyCore::Signal::t0(), TRACE, GeopsyCore::DoubleSignal::type(), UNLOCK_SAMPLES, QGpCoreTools::Grid2D< ValueType >::valuePointer(), and visibleSamples().
Referenced by setProperty(), signalsUpdate(), and subPoolUpdate().
{ TRACE; if(!_subPool || _subPool->isEmpty()) return; // delete previously created grid delete _gridPlot; // Get time limits and sampling step double t0, deltaT; int n=-1, nSamples2; DoubleSignal::SignalType sType; SAFE_UNINITIALIZED(sType,DoubleSignal::UndefinedSignalType); SAFE_UNINITIALIZED(deltaT,0); SAFE_UNINITIALIZED(t0,0); SAFE_UNINITIALIZED(nSamples2,0); // Useful only for NormalizeAll and NormalizeVisibleAll double affMax0=0.5/maxAmplitude(graphContent()->options()); SubSignalPool::iterator it; // Check if uniform t0 and dt for(it=_subPool->begin(); it!=_subPool->end(); ++it) { Signal * sig=*it; double it0, ideltaT; int in=sig->nSamples(); DoubleSignal::SignalType isType=sig->type(); switch (sig->type()) { case Signal::Waveform: ideltaT=sig->deltaT(); it0=sig->t0(); break; case Signal::RealSpectrum: ideltaT=sig->deltaF(); it0=0; break; case Signal::Spectrum: { double fNyquist=0.5/sig->deltaT(); ideltaT=2 * fNyquist/(double) in; it0=0; } default: Message::warning(MSG_ID, "Building signal grid", "Only Waveform and spectra can be used to build a colored grid", Message::cancel()); _gridPlot=0; return; } if(n==-1) { sType=isType; t0=it0; n=in; deltaT=ideltaT; nSamples2=in/2; } else if(it0!=t0 || in!=n || ideltaT!=deltaT) { Message::warning(MSG_ID, "Building signal grid", "To build a colored grid all the signals must have the same deltaT and T0", Message::cancel()); _gridPlot=0; return ; } } // Re-allocate a new grid switch (sType) { case Signal::Waveform: case Signal::RealSpectrum: _gridPlot=new Grid2D<double>(n, _subPool->count()); break; case Signal::Spectrum: _gridPlot=new Grid2D<double>(nSamples2 + 1, _subPool->count()); break; default: break; } _gridPlot->setOrigin(Point2D( t0, 1) ); _gridPlot->setDeltaX(deltaT); // fill in the grid with signals double * cells=_gridPlot->valuePointer(0, 0); double valClip, affMax; int imin, imax; for(it=_subPool->begin(); it!=_subPool->end(); ++it) { const Signal * sig=*it; CONST_LOCK_SAMPLES(double, samples, sig) visibleSamples(graphContent()->options(), sig, imin, imax); switch (sig->type()) { case Signal::Waveform: case Signal::RealSpectrum: { if(_normalize & NormalizeAll) affMax=affMax0; drawingAmplitude(sig, imin, imax, valClip, affMax); for(int i=0; i < n; i++, cells++ ) { double val=samples[ i ]; if(val > valClip) val=valClip; *cells=val * affMax; } } break; case Signal::CAmpWaveform: case Signal::Spectrum: { if(_normalize & NormalizeAll) affMax=2 * affMax0; drawingAmplitude(sig, imin, imax, valClip, affMax); for(int i=0; i <= nSamples2; i++, cells++ ) { double val=sig->amplitude(samples, i); if(val > valClip) val=valClip; *cells=val * affMax; } } break; case Signal::CPhaseWaveform: case Signal::Phase: { if(_normalize & NormalizeAll) affMax=affMax0; drawingAmplitude(sig, imin, imax, valClip, affMax); for(int i=0; i <= nSamples2; i++, cells++ ) { double val=sig->phase(samples, i); if(val > valClip) val=valClip; *cells=val * affMax; } } case Signal::ArrivalTime: case Signal::UndefinedSignalType: break; } } UNLOCK_SAMPLES(sig) }
bool GeopsyGui::SignalLayer::variableArea | ( | ) | const [inline] |
{return _variableArea;}
bool GeopsyGui::SignalLayer::visibleSamples | ( | const GraphContentOptions & | gc, |
const Signal * | sig, | ||
int & | itmin, | ||
int & | itmax, | ||
double & | x0, | ||
double & | dx | ||
) | const [protected] |
Set itmin and itmax (sample index) for visible range for signal sig Return true is all samples are visible (1 samples > 1 pixel) x0 is the time or the frequency of the first sample dx is the frequency step or the time step between samples
References _afterPickDelay, _aroundPickName, _beforePickDelay, _customTimeRange, _timeRange, GeopsyCore::TimeRangeParameters::absoluteRange(), AroundPickRange, AvailableRange, SciFigs::GraphContentOptions::ax(), CustomRange, GeopsyCore::DoubleSignal::deltaF(), GeopsyCore::DoubleSignal::deltaT(), GeopsyCore::DoubleSignal::duration(), GeopsyCore::SignalTemplate< sampleType >::nSamples(), GeopsyCore::Signal::t0(), GeopsyCore::Signal::timePick(), TRACE, GeopsyCore::DoubleSignal::type(), SciFigs::GraphContentOptions::xVisMax(), and SciFigs::GraphContentOptions::xVisMin().
Referenced by highlightSignal(), maxAmplitude(), paintData(), updateGrid(), and visibleSamples().
{ TRACE; switch (sig->type()) { case Signal::Waveform: { dx=sig->deltaT(); ::TimeRange tw; switch(_timeRange) { case AvailableRange: tw.setStart(gc.xVisMin()); tw.setEnd(gc.xVisMax()); break; case AroundPickRange: { double t=sig->timePick(_aroundPickName); tw.setStart(t - _beforePickDelay); tw.setEnd(t + _afterPickDelay); } break; case CustomRange: tw=_customTimeRange.absoluteRange(sig); break; } itmin=(int) floor(( tw.start() - sig->t0())/dx) - 1; itmax=(int) ceil(( tw.end() - sig->t0())/dx) + 1; if(itmin < 0) itmin=0; if(itmax > sig->nSamples() - 1) itmax=sig->nSamples() - 1; x0=sig->t0() + itmin * dx; if(fabs( gc.ax() * dx) < 1.0) return false; else return true; } case Signal::RealSpectrum: dx=sig->deltaF(); itmin=(int) floor(gc.xVisMin()/dx) - 1; if(itmin < 0) itmin=0; itmax=(int) ceil(gc.xVisMax()/dx) + 1; if(itmax > sig->nSamples() - 1) itmax=sig->nSamples() - 1; x0=itmin * dx; if(fabs( gc.ax() * dx) < 1.0) return false; else return true; case Signal::CAmpWaveform: case Signal::CPhaseWaveform: case Signal::Spectrum: case Signal::Phase: { int nSamples2=sig->nSamples()/2; dx=1.0/sig->duration(); itmin=(int) floor(gc.xVisMin()/dx) - 1; if(itmin < 1) itmin=1; /* don't plot 0 Hz as we are supposed to plot it in log scale */ itmax=(int) ceil(gc.xVisMax()/dx) + 1; if(itmax > nSamples2) itmax=nSamples2; x0=itmin * dx; if(fabs( gc.ax() * dx) < 1.0) return false; else return true; } case Signal::UndefinedSignalType: case Signal::ArrivalTime: return false; } return false; }
void GeopsyGui::SignalLayer::visibleSamples | ( | const GraphContentOptions & | gc, |
const Signal * | sig, | ||
int & | itmin, | ||
int & | itmax | ||
) | const [inline, protected] |
References TRACE, and visibleSamples().
{ TRACE; double x0, dx; visibleSamples(gc, sig, itmin, itmax, x0, dx); }
bool GeopsyGui::SignalLayer::wheelEvent | ( | QWheelEvent * | e | ) | [protected, virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References TRACE.
{ TRACE; if(e->modifiers() & Qt::ShiftModifier) { e->accept(); spinOverlap(e->delta()/120, e->modifiers() & Qt::ControlModifier, e->y()); return false; // do not process this event for other layers } return true; // Continue scanning other layers with this event }
bool GeopsyGui::SignalLayer::wiggleTrace | ( | ) | const [inline] |
{return _wiggleTrace;}
XMLMember GeopsyGui::SignalLayer::xml_member | ( | XML_MEMBER_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore (children and properties) support to your class.
From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:
Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):
static const QString tmp("childrenName"); XMLRestoreAttributeIterator it=map.find(tmp); if(it!=map.end()) { // found attribute "childrenName" }
If the map of attributes is not used:
Q_UNUSED(attributes); if(tag=="x1") return XMLMember(0); else if(tag=="y1") return XMLMember(1); else if(tag=="x2") return XMLMember(2); else if(tag=="y2") return XMLMember(3); else return XMLMember(XMLMember::Unknown);
Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.
if(tag=="anInteger") return XMLMember(0); else if(tag=="aString") return XMLMember(1); else if(tag=="aDouble") return XMLMember(2); return AbstractLine::xml_member(tag, attributes, context)+3;
For the arguments of this function use Macro XML_MEMBER_ARGS.
Reimplemented from SciFigs::GridPlot.
References SciFigs::XMLSciFigs::data(), SciFigs::XMLSciFigs::makeUp(), and TRACE.
{ TRACE; XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context); if(scifigsContext->data()) { if(tag==XMLSubSignalPool::xmlSubSignalPoolTag) { return XMLMember(new XMLSubSignalPool, true); } else if(tag==XMLSignal::xmlSignalTag) { // For compatibility return XMLMember(new XMLSignal, true); } } if(scifigsContext->makeUp()) { if(tag==signalColorTag) { return XMLMember(0); } else if(tag==signalOverlapTag) { return XMLMember(1); } else if(tag==TimeRangeParameters::xmlTimeRangeParametersTag) { return XMLMember(2); } } return GridPlot::xml_member(tag, attributes, context)+3; }
void GeopsyGui::SignalLayer::xml_polish | ( | XML_POLISH_ARGS | ) | [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References subPoolUpdate(), and TRACE.
{ TRACE; Q_UNUSED(context); subPoolUpdate(); }
void GeopsyGui::SignalLayer::xml_polishChild | ( | XML_POLISHCHILD_ARGS | ) | [protected, virtual] |
Reimplemented from SciFigs::GridPlot.
References _subPool, _subPoolOwner, GeopsyCore::SubSignalPool::addSignal(), GeopsyCore::XMLSignal::signal(), GeopsyCore::XMLSubSignalPool::subPool(), subPool(), and TRACE.
{ TRACE; Q_UNUSED(context); if(child->xml_tagName()==XMLSubSignalPool::xmlSubSignalPoolTag) { XMLSubSignalPool * subPool=static_cast<XMLSubSignalPool *>(child); if(_subPoolOwner) delete _subPool; _subPool=subPool->subPool(); _subPoolOwner=true; } else if(child->xml_tagName()==XMLSignal::xmlSignalTag) { // For compatibility XMLSignal * sig=static_cast<XMLSignal *>(child); if(!_subPool) { _subPool=new SubSignalPool; _subPoolOwner=true; } _subPool->addSignal(sig->signal()); } }
bool GeopsyGui::SignalLayer::xml_setProperty | ( | XML_SETPROPERTY_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore properties support to your class.
From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).
For a general case:
Q_UNUSED(attributes); double val=content.toDouble(); switch (memberID) { case 0: _x1=val; return true; case 1: _y1=val; return true; case 2: _x2=val; return true; case 3: _y2=val; return true; default: return false; }
For classes inheriting other classes (see also xml_member())
switch (memberID) { case 0: _anInteger=content.toString(); return true; case 1: _aString=content.toInt(); return true; case 2: _aDouble=content.toDouble(); return true; default: return AbstractLine::xml_setProperty(memberID-3, map, content);
For the arguments of this function use Macro XML_SETPROPERTY_ARGS.
Reimplemented from SciFigs::GraphContentLayer.
References _customTimeRange, _signalOverlaps, _subPool, GeopsyCore::SubSignalPool::at(), QGpCoreTools::endl(), setSignalColor(), QGpCoreTools::tr(), TRACE, and GeopsyCore::TimeRangeParameters::xml_setAttributes().
{ TRACE; switch (memberID) { case 0: { XMLRestoreAttributeIterator it=attributes.find(indexTag); if(it!=attributes.end()) { int index=it.value().toInt(); if(index >= 0 && _subPool && index < _subPool->count()) { setSignalColor(_subPool->at(index), QColor(content.toString()) ); } else { App::stream() << tr("Index '%1' out of range for 'signalColor' property.").arg(index) << endl; } } else { App::stream() << tr("No 'index' for 'signalColor' property.") << endl; } } return true; case 1: { XMLRestoreAttributeIterator it=attributes.find(indexTag); if(it!=attributes.end()) { int index=it.value().toInt(); if(index >= 0 && _subPool && index < _subPool->count()) { Signal * sig=_subPool->at(index); _signalOverlaps.insert(sig, content.toDouble()); } else { App::stream() << tr("Index '%1' out of range for 'signalOverlap' property.").arg(index) << endl; } } else { App::stream() << tr("No 'index' for 'signalOverlap' property.") << endl; } } return true; case 2: return _customTimeRange.xml_setAttributes(attributes, context); default: return GridPlot::xml_setProperty(memberID-3, tag, attributes, content, context); } }
virtual const QString& GeopsyGui::SignalLayer::xml_tagName | ( | ) | const [inline, virtual] |
Reimplemented from SciFigs::GridPlot.
{return xmlSignalLayerTag;}
void GeopsyGui::SignalLayer::xml_writeChildren | ( | XML_WRITECHILDREN_ARGS | ) | const [protected, virtual] |
Reimplemented from SciFigs::GridPlot.
References _subPool, SciFigs::XMLSciFigs::data(), subPool(), TRACE, and QGpCoreTools::XMLClass::xml_save().
{ TRACE; XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context); if(scifigsContext->data()) { XMLSubSignalPool subPool(*_subPool); subPool.xml_save(s, context); } GridPlot::xml_writeChildren(s, context); }
void GeopsyGui::SignalLayer::xml_writeProperties | ( | XML_WRITEPROPERTIES_ARGS | ) | const [protected, virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References _customTimeRange, _signalColors, _signalOverlaps, _subPool, QGpCoreTools::XMLSaveAttributes::add(), QGpCoreTools::XMLSaveAttributes::clear(), GeopsyCore::SubSignalPool::indexOf(), SciFigs::XMLSciFigs::makeUp(), TRACE, QGpCoreTools::XMLSaveAttributes::value(), QGpCoreTools::XMLClass::writeProperty(), and GeopsyCore::TimeRangeParameters::xml_attributes().
{ TRACE; GridPlot::xml_writeProperties(s, context); XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context); if(scifigsContext->makeUp()) { XMLSaveAttributes att; QString& value=att.add(indexTag); for(QMap<const Signal *,QColor>::const_iterator it=_signalColors.begin(); it!=_signalColors.end(); it++ ) { value=QString::number(_subPool->indexOf(it.key()) ); writeProperty(s, signalColorTag, att, it.value().name()); } for(QMap<const Signal *,double>::const_iterator it=_signalOverlaps.begin(); it!=_signalOverlaps.end(); it++ ) { value=QString::number(_subPool->indexOf(it.key()) ); writeProperty(s, signalOverlapTag, att, it.value()); } att.clear(); _customTimeRange.xml_attributes(att, context); writeProperty(s, TimeRangeParameters::xmlTimeRangeParametersTag, att); } }
YAxis GeopsyGui::SignalLayer::yAxis | ( | ) | const [inline] |
Referenced by drawingAmplitude(), and yAxisString().
{return _yAxis;}
QString GeopsyGui::SignalLayer::yAxisString | ( | ) | const |
References Overlayed, Receiver, SignalName, TRACE, ViewerIndex, and yAxis().
{ TRACE; switch (yAxis()) { case ViewerIndex: break; case Receiver: return "ReceiverCoordinate"; case SignalName: return "SignalName"; case Overlayed: return "Overlayed"; }; return "ViewerIndex"; }
friend class PickLayer [friend] |
friend class TimeWindowLayer [friend] |
double GeopsyGui::SignalLayer::_afterPickDelay [protected] |
Referenced by properties(), setProperty(), SignalLayer(), and visibleSamples().
QString GeopsyGui::SignalLayer::_aroundPickName [protected] |
Referenced by properties(), setProperty(), and visibleSamples().
double GeopsyGui::SignalLayer::_beforePickDelay [protected] |
Referenced by properties(), setProperty(), SignalLayer(), and visibleSamples().
Clip GeopsyGui::SignalLayer::_clip [protected] |
Referenced by drawingAmplitude(), properties(), setProperty(), and SignalLayer().
double GeopsyGui::SignalLayer::_clipPerc [protected] |
Referenced by drawingAmplitude(), properties(), setProperty(), and SignalLayer().
double GeopsyGui::SignalLayer::_clipValue [protected] |
Referenced by drawingAmplitude(), properties(), setProperty(), and SignalLayer().
Referenced by properties(), setProperty(), visibleSamples(), xml_setProperty(), and xml_writeProperties().
Grid2D<double>* GeopsyGui::SignalLayer::_gridPlot [protected] |
Referenced by paintData(), properties(), setGrid(), setProperty(), SignalLayer(), signalsUpdate(), subPoolUpdate(), updateGrid(), and ~SignalLayer().
Normalize GeopsyGui::SignalLayer::_normalize [protected] |
Referenced by drawingAmplitude(), drawSignal(), maxAmplitude(), properties(), setProperty(), SignalLayer(), and updateGrid().
double GeopsyGui::SignalLayer::_normalizeValue [protected] |
Referenced by drawingAmplitude(), properties(), setProperty(), and SignalLayer().
Offset GeopsyGui::SignalLayer::_offset [protected] |
Referenced by drawSignal(), properties(), setProperty(), and SignalLayer().
double GeopsyGui::SignalLayer::_overlap [protected] |
Referenced by drawingAmplitude(), properties(), and SignalLayer().
QMap<const Signal *, QColor> GeopsyGui::SignalLayer::_signalColors [protected] |
Referenced by clearSignalColors(), setSignalColor(), signalColor(), and xml_writeProperties().
QMap<const Signal *, double> GeopsyGui::SignalLayer::_signalOverlaps [protected] |
Referenced by drawingAmplitude(), xml_setProperty(), and xml_writeProperties().
QVector<double> GeopsyGui::SignalLayer::_signalY [protected] |
Referenced by drawGaps(), drawSignal(), minMaxY(), GeopsyGui::PickLayer::paintData(), signalAt(), sigYBoundaries(), and subPoolUpdate().
SubSignalPool* GeopsyGui::SignalLayer::_subPool [protected] |
Referenced by addProperties(), boundingRect(), drawingAmplitude(), drawSignal(), highlightSignal(), GeopsyGui::PickLayer::keyPressEvent(), maxAmplitude(), minMaxY(), GeopsyGui::PickLayer::mouseMoveEvent(), GeopsyGui::PickLayer::mousePressEvent(), GeopsyGui::PickLayer::paintData(), paintData(), properties(), setIsigMinMax(), GeopsyGui::PickLayer::setPick(), SignalDisplay::setProperty(), signalAt(), SignalLayer(), subPoolUpdate(), updateGrid(), xml_polishChild(), xml_setProperty(), xml_writeChildren(), xml_writeProperties(), and ~SignalLayer().
bool GeopsyGui::SignalLayer::_subPoolOwner [protected] |
Referenced by SignalLayer(), subPoolUpdate(), xml_polishChild(), and ~SignalLayer().
uint GeopsyGui::SignalLayer::_tab = PropertyProxy::uniqueId() [static, protected] |
Referenced by addProperties(), properties(), removeProperties(), SignalDisplay::setProperty(), and setProperty().
TimeRange GeopsyGui::SignalLayer::_timeRange [protected] |
Referenced by properties(), setProperty(), SignalLayer(), and visibleSamples().
bool GeopsyGui::SignalLayer::_variableArea [protected] |
Referenced by paintData(), properties(), setProperty(), and SignalLayer().
bool GeopsyGui::SignalLayer::_wiggleTrace [protected] |
Referenced by paintData(), properties(), setProperty(), and SignalLayer().
YAxis GeopsyGui::SignalLayer::_yAxis [protected] |
Referenced by minMaxY(), properties(), setIsigMinMax(), SignalDisplay::setProperty(), setProperty(), SignalLayer(), and subPoolUpdate().
const QString GeopsyGui::SignalLayer::xmlSignalLayerTag = "SignalLayer" [static] |
Referenced by GeopsyGui::TimeWindowLayer::xml_layerPolish().
double GeopsyGui::SignalLayer::afterPickDelay [read, write] |
QString GeopsyGui::SignalLayer::aroundPickName [read, write] |
double GeopsyGui::SignalLayer::beforePickDelay [read, write] |
QString GeopsyGui::SignalLayer::clip [read, write] |
double GeopsyGui::SignalLayer::clipPerc [read, write] |
double GeopsyGui::SignalLayer::clipValue [read, write] |
bool GeopsyGui::SignalLayer::grid [read, write] |
QString GeopsyGui::SignalLayer::norm [read, write] |
QString GeopsyGui::SignalLayer::normalize [read, write] |
double GeopsyGui::SignalLayer::normalizeValue [read, write] |
double GeopsyGui::SignalLayer::normValue [read, write] |
QString GeopsyGui::SignalLayer::offset [read, write] |
double GeopsyGui::SignalLayer::overlap [read, write] |
bool GeopsyGui::SignalLayer::smoothGrid [read, write] |
QString GeopsyGui::SignalLayer::timeRange [read, write] |
bool GeopsyGui::SignalLayer::useReceiverCoord [read, write] |
bool GeopsyGui::SignalLayer::variableArea [read, write] |
bool GeopsyGui::SignalLayer::wiggleTrace [read, write] |
QString GeopsyGui::SignalLayer::yAxis [read, write] |
Referenced by GraphicWindow::updateLabels().