Public Member Functions | Protected Member Functions
SignalReader Class Reference

Brief description of class still missing. More...

#include <SignalReader.h>

Inheritance diagram for SignalReader:
QGpCoreTools::ArgumentStdinReader

List of all members.

Public Member Functions

void exec ()
bool setOptions (int &argc, char **argv)
 SignalReader ()
 ~SignalReader ()

Protected Member Functions

virtual bool parse (QTextStream &s)

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References TRACE.

    : ArgumentStdinReader()
{
  TRACE;
  _nSamples=0;
  _samples=0;
  //_commonFrequency=-1.0;
  _deltaT=0.01;
  _timeLength=600.0; // 10 minutes
  //_uniqueFrequency=true;
  _square=false;
}

References TRACE.

{
  TRACE;
  delete [] _samples;
}

Member Function Documentation

References Wavelet::amplitude, QGpCoreTools::cos(), QGpCoreTools::flush(), Wavelet::frequency, Wavelet::phase, and sOut().

Referenced by main().

{
  int nWavelets=_wavelets.count();
  double t;
  if(_square) {
    for(int i=0;i<_nSamples;i++) {
      _samples[i]=0.0;
      t=(double)i*_deltaT;
      for(int iw=0; iw<nWavelets; iw++) {
        Wavelet& w=_wavelets[iw];
        double a=w.amplitude*cos(2.0*M_PI*w.frequency*t-w.phase);
        if(a<=0.0) {
          a=0.0;
        } else {
          a=1.0;
        }
        _samples[i]+=a;
      }
    }
  } else {
    for(int i=0;i<_nSamples;i++) {
      _samples[i]=0.0;
      t=(double)i*_deltaT;
      for(int iw=0; iw<nWavelets; iw++) {
        Wavelet& w=_wavelets[iw];
        _samples[i]+=w.amplitude*cos(2.0*M_PI*w.frequency*t-w.phase);
      }
    }
  }
  QTextStream sOut(stdout);
  for(int i=0;i<_nSamples;i++) sOut << _samples[i] << "\n";
  sOut << flush;
}
bool SignalReader::parse ( QTextStream &  s) [protected, virtual]

Implements QGpCoreTools::ArgumentStdinReader.

References QGpCoreTools::Point2D::azimuthTo(), QGpCoreTools::cos(), QGpCoreTools::Point::distanceTo(), and TRACE.

{
  TRACE;
  QString buf;
  buf=s.readLine();
  if(!buf.isEmpty() && buf[0]!='\n' && buf[0]!='#') {
    bool ok;
    if(_velocities.isEmpty()) {
      ok=addWavelet(buf, 0.0);
    } else {
      int n=_velocities.count();
      for(int i=0; i<n; i++) {
        // Math angle for station position relative to origin
        double angle=Point(0,0).azimuthTo(_stationCoord);
        angle-=Angle::geographicToMath(_azimuths.at(i));
        double propagationDelay=Point(0,0).distanceTo(_stationCoord)*cos(angle)/_velocities.at(i);
        ok=addWavelet(buf, propagationDelay);
      }
    }
    return ok;
  }
  return true;
}
bool SignalReader::setOptions ( int &  argc,
char **  argv 
)

References QGpCoreTools::endl(), QGpCoreTools::Point2D::setX(), QGpCoreTools::Point2D::setY(), QGpCoreTools::tr(), and TRACE.

Referenced by main().

{
  TRACE;
  // Check arguments
  int i, j=1;
  for(i=1; i<argc; i++) {
    QByteArray arg=argv[i];
    if(arg[0]=='-') {
      if(arg=="-f") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _deltaT=1.0/atof(argv[i] );
      } else if(arg=="-t") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _timeLength=atof(argv[i] );
      } else if(arg=="-x") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _stationCoord.setX(atof( argv[i] ));
      } else if(arg=="-y") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _stationCoord.setY(  atof(argv[i] ));
      } else if(arg=="-a") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _azimuths.append(atof(argv[i]));
      } else if(arg=="-v") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _velocities.append(atof(argv[i]));
      } else if(arg=="-square") {
        _square=true;
      } else {
        App::stream() << tr("gpsignal: bad option %1, see -help").arg(argv[i]) << endl;
        return false;
      }
    } else {
      argv[j++]=argv[i];
    }
  }
  if(j < argc) {
    argv[j]=0;
    argc=j;
  }
  if(_velocities.count()!=_azimuths.count()) {
    App::stream() << tr("gpsignal: number of -v and -a options must be the same.") << endl;
    return false;
  }
  _nSamples=(int) floor(_timeLength/_deltaT +0.5);
  _samples=new double [_nSamples];
  return true;
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines