Brief description of class still missing. More...
#include <T0Correlation.h>
Public Member Functions | |
| void | setReceiverRange (int minRecIndex, int maxRecIndex) |
| void | setTimeLimits (const TimeRangeParameters &timeLimits) |
| T0Correlation (ShotRecord *refShot, ShotRecord *shot) | |
| virtual double | value (double x, double, int) const |
| virtual double | value (double x, double) const |
Protected Member Functions | |
| double | correlationInterpolate (double t0) |
Brief description of class still missing.
Full description of class still missing
| T0Correlation::T0Correlation | ( | ShotRecord * | refShot, |
| ShotRecord * | shot | ||
| ) |
Description of constructor still missing
References ShotRecord::nReceivers(), and TRACE.
{
TRACE;
_refShot=refShot;
_shot=shot;
_minRecIndex=0;
_maxRecIndex=_refShot->nReceivers()-1;
}
| double T0Correlation::correlationInterpolate | ( | double | t0 | ) | [protected] |
| void T0Correlation::setReceiverRange | ( | int | minRecIndex, |
| int | maxRecIndex | ||
| ) |
References ShotRecord::nReceivers(), and TRACE.
Referenced by ToolNR::t0Apply().
{
TRACE;
int nReceivers=_refShot->nReceivers();
_minRecIndex=minRecIndex;
if(_minRecIndex<0) _minRecIndex=0;
else if(_minRecIndex>=nReceivers) _minRecIndex=nReceivers-1;
_maxRecIndex=maxRecIndex;
if(_maxRecIndex<0) _maxRecIndex=0;
else if(_maxRecIndex>=nReceivers) _maxRecIndex=nReceivers-1;
if(_minRecIndex > _maxRecIndex) {
int tmp=_minRecIndex;
_minRecIndex=_maxRecIndex;
_maxRecIndex=tmp;
}
}
| void T0Correlation::setTimeLimits | ( | const TimeRangeParameters & | timeLimits | ) | [inline] |
Referenced by ToolNR::t0Apply().
{_timeLimits=timeLimits;}
| double T0Correlation::value | ( | double | x, |
| double | , | ||
| int | |||
| ) | const [virtual] |
Fast but imprecise shift: shift only multiples of deltaT
Reimplemented from QGpCoreTools::AbstractFunction2.
References GeopsyCore::TimeRangeParameters::absoluteRange(), GeopsyCore::SubSignalPool::at(), GeopsyCore::Signal::correlation(), GeopsyCore::Signal::maximumAmplitude(), GeopsyCore::Signal::setT0(), GeopsyCore::Signal::t0(), and TRACE.
{
TRACE;
double globalCorr=0.0;
for(int i=_minRecIndex; i<=_maxRecIndex; i++) {
Signal * shotSig=_shot->at(i);
const Signal * refShotSig=_refShot->at(i);
double saveT0=shotSig->t0();
shotSig->setT0(x);
TimeRange tw=_timeLimits.absoluteRange(shotSig);
double norm=1.0/refShotSig->maximumAmplitude();
globalCorr += shotSig->correlation(refShotSig, tw)*norm*norm;
shotSig->setT0(saveT0);
}
return globalCorr;
}
| double T0Correlation::value | ( | double | x, |
| double | |||
| ) | const [virtual] |
Slow but precise shift: shift by arbitrary time
Implements QGpCoreTools::AbstractFunction2.
References GeopsyCore::TimeRangeParameters::absoluteRange(), GeopsyCore::SubSignalPool::at(), GeopsyCore::DoubleSignal::copySamplesFrom(), GeopsyCore::DoubleSignal::correlation(), GeopsyCore::TimeRange::lengthSeconds(), GeopsyCore::Signal::maximumAmplitude(), GeopsyCore::DoubleSignal::shift(), GeopsyCore::TimeRange::start(), GeopsyCore::Signal::t0(), and TRACE.
{
TRACE;
double globalCorr=0.0;
for(int i=_minRecIndex; i<=_maxRecIndex; i++) {
const Signal * refShotSig=_refShot->at(i);
const Signal * shotSig=_shot->at(i);
DoubleSignal * shiftShotSig=new DoubleSignal(*shotSig);
shiftShotSig->copySamplesFrom(shotSig);
shiftShotSig->shift(shotSig->t0() - x);
TimeRange tw=_timeLimits.absoluteRange(shotSig);
double norm=1.0/refShotSig->maximumAmplitude();
globalCorr += shiftShotSig->correlation(refShotSig, tw.start()-refShotSig->t0(),
tw.start()-shotSig->t0(),
tw.lengthSeconds())*norm*norm;
delete shiftShotSig;
}
return globalCorr;
}