Brief description of class still missing. More...
#include <SparseKeepSignal.h>
Public Member Functions | |
void | copySamplesFrom (const SparseKeepSignal &o) |
void | initValues (int value, double start=-1e99, double end=1e99) |
SparseKeepSignal * | intersection (const TimeRange &r) const |
QVector< KeepSignal * > | keeps (const TimeRange &r) const |
const QVector< KeepSignal * > & | keeps () const |
void | printDebug () const |
void | remove (const TimeRange &r) |
bool | setSampling (const TimeRange &r, double deltaT) |
SparseKeepSignal () | |
SparseKeepSignal (const SparseTimeRange &r) | |
SparseKeepSignal (const SparseKeepSignal &o) | |
SparseTimeRange | timeRange () const |
~SparseKeepSignal () |
Brief description of class still missing.
Full description of class still missing
Description of constructor still missing
References GeopsyCore::SparseTimeRange::ranges(), and TRACE.
: SparseTimeRange(r) { TRACE; const QVector<TimeRange>& rs=ranges(); int n=rs.count(); _keeps.resize(n); for(int i=0; i<n; i++) { _keeps[i]=0; } }
Copy properties of keep signals, not their values. You must call initValues() or copySamplesFrom()
References TRACE.
: SparseTimeRange(o) { TRACE; int n=o._keeps.count(); _keeps.resize(n); for(int i=0; i<n; i++) { _keeps[i]=new KeepSignal(*o._keeps[i]); } }
void GeopsyCore::SparseKeepSignal::copySamplesFrom | ( | const SparseKeepSignal & | o | ) |
References TRACE.
Referenced by GeopsyCore::TimeRangeList::addBlanks().
{ TRACE; int n=_keeps.count(); ASSERT(n==o._keeps.count()); for(int i=0; i<n; i++) { _keeps[i]->copySamplesFrom(o._keeps[i]); } }
void GeopsyCore::SparseKeepSignal::initValues | ( | int | value, |
double | start = -1e99 , |
||
double | end = 1e99 |
||
) |
References GeopsyCore::KeepSignal::deltaT(), GeopsyCore::SignalTemplate< sampleType >::initValues(), GeopsyCore::SignalTemplate< sampleType >::nSamples(), GeopsyCore::KeepSignal::t0(), and TRACE.
Referenced by RealTimeArrayManager::createTasks(), GeopsyCore::TimeRangeList::inverse(), and MonoStation::AbstractStation::keep().
{ TRACE; int n=_keeps.count(); for(int i=0;i<n;i++) { KeepSignal * keep=_keeps[i]; double invDeltaT=1.0/keep->deltaT(); int iStart; if(start<keep->t0()) iStart=0; else { iStart=(int)round((start-keep->t0())*invDeltaT); if(iStart>=keep->nSamples()) continue; } int iEnd; if(end>keep->t0()+keep->nSamples()*keep->deltaT()) iEnd=keep->nSamples()-1; else { iEnd=(int)round((end-keep->t0())*invDeltaT); if(iEnd<0) continue; } keep->initValues(value,iStart,iEnd-iStart+1); } }
SparseKeepSignal * GeopsyCore::SparseKeepSignal::intersection | ( | const TimeRange & | r | ) | const |
Reimplemented from GeopsyCore::SparseTimeRange.
References GeopsyCore::TimeRange::end(), GeopsyCore::KeepSignal::endTime(), GeopsyCore::SparseTimeRange::index(), GeopsyCore::SparseTimeRange::intersection(), SparseKeepSignal(), GeopsyCore::TimeRange::start(), GeopsyCore::KeepSignal::t0(), and TRACE.
{ TRACE; int iFirst=index(r.start()); SparseKeepSignal * res=new SparseKeepSignal(SparseTimeRange::intersection(iFirst, r)); int n=res->ranges().count(); res->_keeps.resize(n); if(n>0) { for(int i=n-2; i>0; i--) { res->_keeps[i]=new KeepSignal(*_keeps.at(iFirst+i)); } const KeepSignal * kStart=_keeps.at(iFirst+n-1); if(r.start()>kStart->t0()) { res->_keeps[0]=cutStart(kStart, r.start()); } else { res->_keeps[0]=new KeepSignal(*kStart); } const KeepSignal * kEnd=_keeps.at(iFirst+n-1); if(r.end()<kEnd->endTime()) { res->_keeps[n-1]=cutEnd(kEnd, r.end());; } else { res->_keeps[n-1]=new KeepSignal(*kEnd); } } return res; }
QVector< KeepSignal * > GeopsyCore::SparseKeepSignal::keeps | ( | const TimeRange & | r | ) | const |
Returns all keeps hit by r
References GeopsyCore::TimeRange::end(), GeopsyCore::SparseTimeRange::index(), GeopsyCore::SparseTimeRange::isNull(), GeopsyCore::SparseTimeRange::ranges(), GeopsyCore::TimeRange::start(), and TRACE.
Referenced by GeopsyCore::TimeRangeList::add(), and GeopsyCore::StationSignals::setKeep().
{ TRACE; QVector<KeepSignal *> res; if(isNull()) return res; int i=index(r.start()); const QVector<TimeRange>& rs=ranges(); int n=rs.count(); for(;i<n && rs.at(i).end()<r.end();i++) { res.append(_keeps.at(i)); } // Add the last block that had its end after r.end() but can have a start() before. if(i<n && rs.at(i).start()<r.end()) { res.append(_keeps.at(i)); } return res; }
const QVector<KeepSignal *>& GeopsyCore::SparseKeepSignal::keeps | ( | ) | const [inline] |
{return _keeps;}
void GeopsyCore::SparseKeepSignal::printDebug | ( | ) | const [inline] |
Reimplemented from GeopsyCore::SparseTimeRange.
References GeopsyCore::SparseTimeRange::printDebug().
void GeopsyCore::SparseKeepSignal::remove | ( | const TimeRange & | r | ) |
Removes all ranges that overlap with r
Reimplemented from GeopsyCore::SparseTimeRange.
References GeopsyCore::TimeRange::end(), GeopsyCore::KeepSignal::endTime(), GeopsyCore::SparseTimeRange::index(), GeopsyCore::SparseTimeRange::ranges(), GeopsyCore::TimeRange::start(), GeopsyCore::KeepSignal::t0(), and TRACE.
Referenced by GeopsyCore::StationSignals::setSampling().
{ TRACE; int iFirst=index(r.start()); KeepSignal * kStart=_keeps.at(iFirst); if(r.start()>kStart->t0() && r.start()<kStart->endTime()) { _keeps[iFirst]=cutEnd(kStart, r.start()); delete kStart; } int nRemoved=SparseTimeRange::remove(iFirst, r); for(int i=nRemoved-1; i>=0; i--) { delete _keeps[iFirst+i]; } _keeps.remove(iFirst, nRemoved); if(iFirst<ranges().count()) { KeepSignal * kEnd=_keeps.at(iFirst); if(r.end()>kEnd->t0() && r.end()<kEnd->endTime()) { _keeps[iFirst]=cutStart(kEnd, r.end()); delete kEnd; } } }
bool GeopsyCore::SparseKeepSignal::setSampling | ( | const TimeRange & | r, |
double | deltaT | ||
) |
Set T0 and deltaT for all continuous blocks hit by r. T0 is set to match r with a multiple of deltaT(). The samples are not affected by this function.
Returns false if T0 is already set but not compatible with r. Tests also deltaT.
References GeopsyCore::KeepSignal::deltaT(), GeopsyCore::TimeRange::end(), GeopsyCore::SparseTimeRange::index(), GeopsyCore::SparseTimeRange::ranges(), GeopsyCore::KeepSignal::setDeltaT(), GeopsyCore::KeepSignal::setT0(), GeopsyCore::TimeRange::start(), GeopsyCore::KeepSignal::t0(), and TRACE.
Referenced by GeopsyCore::StationSignals::setSampling().
{ TRACE; if(_keeps.isEmpty()) return true; double t=r.start(); int i=index(t); double invDeltaT=1.0/deltaT; const QVector<TimeRange>& rs=ranges(); for(;i<rs.count();i++) { KeepSignal * k=_keeps[i]; const TimeRange& r=rs.at(i); if(rs.at(i).start()>=r.end()) break; if(k) { if(k->deltaT()!=deltaT) return false; double dt=fabs(k->t0()-t); int nSamples=(int)round(fabs((k->t0()-t)*invDeltaT)); if(fabs(nSamples*deltaT-dt)*invDeltaT>0.001) { // 1/1000 sampling period return false; } } else { //printf("Arbitrary limits %lf to %lf\n",r.start(), r.end()); double t0=t-floor((t-r.start())*invDeltaT)*deltaT; // +1 is there because the time end cuts the last time step which beginning // is still inside time range KeepSignal * k=new KeepSignal((int)floor((r.end()-t0)*invDeltaT)+1); k->setDeltaT(deltaT); k->setT0(t0); _keeps[i]=k; } } return true; }
SparseTimeRange GeopsyCore::SparseKeepSignal::timeRange | ( | ) | const [inline] |
Referenced by ArrayCore::ArrayProcess::setFrequency().
{return *this;}