All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Protected Member Functions | Protected Attributes | Friends
QGpCompatibility::CompatMultiModalCurves Class Reference

#include <CompatMultiModalCurves.h>

Inheritance diagram for QGpCompatibility::CompatMultiModalCurves:
QGpCompatibility::CompatMultiModalFrequency QGpCompatibility::CompatDispersion QGpCompatibility::CompatEllipticity QGpCompatibility::CompatHodoChrone QGpCompatibility::CompatDispersionData QGpCompatibility::CompatEllipticityData QGpCompatibility::CompatHodoChroneData

List of all members.

Public Member Functions

void clear (double invalid_value)
void clearRefines ()
 CompatMultiModalCurves ()
 Default constructor.
 CompatMultiModalCurves (int modesCount, int omegasCount)
 Constructor.
 CompatMultiModalCurves (const CompatMultiModalFrequency *o)
 Copy constructor.
 CompatMultiModalCurves (const CompatMultiModalFrequency *o, int modesCount)
 Copy constructor changing the number of modes.
 CompatMultiModalCurves (const CompatMultiModalCurves *o)
 Copy constructor.
 CompatMultiModalCurves (const CompatMultiModalCurves *o, int modesCount, double invalidValue)
 Copy constructor changing the number of modes.
uint rayleighModesCount ()
int refinesCount () const
void refineSort ()
void refinesToReport (QDataStream &s) const
void reportToOmega (QDataStream &s)
 Loads the _omega from the binary stream (usually the inversion_report) and allocate values.
void reportToRefines (QDataStream &s)
void reportToValues (QDataStream &s)
 Loads the _slowness from the binary stream (usually the inversion_report)
void setRayleighModesCount (int rm)
void setValue (int i, int mode, double val)
 Set values of mode and point i.
void setValues (CompatMultiModalCurves *o)
int toPointVector (int imode, Point2D *pointList, double invalid_value)
 Copy all point of imode into a point vector and return the number of valid points.
void toStream (FILE *f)
 Export curves to stream.
double value (int i, int mode) const
 Returns the ith slowness of mode m.
void valuesToReport (QDataStream &s) const
 Prints the _values to the binary stream (usually the inversion_report)
virtual ~CompatMultiModalCurves ()
 Destructor: get rid of all unused memory.

Protected Member Functions

void allocatesValues ()
 Allocates the storage for calculated slownesses.
void deleteValues ()
 Delete _values (called by destructor)

Protected Attributes

uint _rayleighModesCount
QList< Point2D_refines
 Refinement list.
double ** _values
 Storage for calculated values (wave slownesses, ellipticity, ...)

Friends

class CompatMultiModalData

Constructor & Destructor Documentation

Default constructor.

References _rayleighModesCount, _values, and TRACE.

QGpCompatibility::CompatMultiModalCurves::CompatMultiModalCurves ( int  modesCount,
int  omegasCount 
)

Copy constructor.

References QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _rayleighModesCount, _values, allocatesValues(), and TRACE.

                                                                               :
    CompatMultiModalFrequency(o) 
{
  TRACE;
  _values=0;
  _rayleighModesCount=_modesCount;
  allocatesValues();
  int iMode;
  for(iMode=0;iMode<_modesCount;iMode++) {
    double * values=_values[iMode];
    double * o_values=o->_values[iMode];
    for(int i=0;i<_omegasCount;i++) values[i]=o_values[i];
  }
}
QGpCompatibility::CompatMultiModalCurves::CompatMultiModalCurves ( const CompatMultiModalCurves o,
int  modesCount,
double  invalidValue 
)

Copy constructor changing the number of modes.

References QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _rayleighModesCount, _values, allocatesValues(), QGpCompatibility::CompatMultiModalFrequency::modesCount(), and TRACE.

                                                                              :
CompatMultiModalFrequency(o, modesCount)
{
  TRACE;
  _values=0;
  _rayleighModesCount=modesCount;
  allocatesValues();
  int minModeCount=o->_modesCount;
  if(minModeCount>_modesCount) minModeCount=_modesCount;
  int iMode;
  for(iMode=0;iMode<minModeCount;iMode++) {
    double * values=_values[iMode];
    double * o_values=o->_values[iMode];
    for(int i=0;i<_omegasCount;i++) values[i]=o_values[i];
  }
  for(iMode=minModeCount;iMode<_modesCount;iMode++) {
    double * values=_values[iMode];
    for(int i=0;i<_omegasCount;i++) values[i]=invalidValue;
  }
}

Destructor: get rid of all unused memory.

References deleteValues(), and TRACE.


Member Function Documentation

void QGpCompatibility::CompatMultiModalCurves::clear ( double  invalid_value)

References QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _values, and TRACE.

{
  TRACE;
  for(int iMode=0;iMode<_modesCount;iMode++) {
    double * values=_values[iMode];
    for(int i=0;i<_omegasCount;i++) values[i]=invalidValue;
  }
}

References _refines, and TRACE.

Referenced by deleteValues(), and reportToRefines().

{
  TRACE;
  _refines.clear();
}

Delete _values (called by destructor)

References QGpCompatibility::CompatMultiModalFrequency::_modesCount, _values, clearRefines(), mode, and TRACE.

Referenced by allocatesValues(), reportToOmega(), and ~CompatMultiModalCurves().

{
  TRACE;
  if(_values) {
    for(int mode=0; mode<_modesCount;mode++)
      delete [] _values[mode];
    delete [] _values;
    _values=0;
  } 
  clearRefines();
}
{qSort(_refines);}

References _refines, TRACE, QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().

Referenced by QGpCompatibility::CompatAutocorrReport::addModel(), and QGpCompatibility::CompatInversionReport::addModel().

{
  TRACE;
  //cout << _refines.count() << endl;
  s << _refines.count();
  QList<Point2D>::const_iterator it;
  for(it=_refines.begin();it!=_refines.end();++it) {
    //cout << p->x << " " << p->y << endl;
    const Point2D& p=*it;
    s << p.x() << p.y();
  }
}

References _refines, clearRefines(), and TRACE.

Referenced by QGpCompatibility::CompatAutocorrReport::loadAutocorr(), QGpCompatibility::CompatInversionReport::loadDispersion(), and QGpCompatibility::CompatRefraReport::loadRefra().

{
  TRACE;
  clearRefines();
  int n;
  double x,y;
  s >> n;
  //cout << n << endl;
  for(int i=0;i<n;i++) {
    s >> x >> y;
    //cout << x << " " << y << endl;
    _refines.append(Point2D(x,y));
  }
}

Loads the _slowness from the binary stream (usually the inversion_report)

References QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _values, mode, and TRACE.

Referenced by QGpCompatibility::CompatAutocorrReport::loadAutocorr(), QGpCompatibility::CompatInversionReport::loadDispersion(), and QGpCompatibility::CompatRefraReport::loadRefra().

{
  TRACE;
  ASSERT(_values);
  //cout << "Report to Values" << _modesCount << " " << _omegasCount << endl;
  for(int mode=0; mode<_modesCount;mode++) {
    //s.readRawData((char *)_values[mode],_omegasCount*sizeof(double));
    double *values=_values[mode];
    for(long i=0;i<_omegasCount;i++) {
      s >> values[i];
      //cout << twopi/_omegas[i] << " " << values[i] << endl;
    }
  }
}
void QGpCompatibility::CompatMultiModalCurves::setValue ( int  i,
int  mode,
double  val 
) [inline]

Set values of all modes and points from another object Better if the set of omegas is the same (not tested) If modesCount is different only lower modes are transfered

References QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _values, and TRACE.

{
  TRACE;
  int minModesCount=_modesCount;
  if(o->_modesCount<minModesCount) minModesCount=_modesCount;
  int minOmegasCount=_omegasCount;
  if(o->_omegasCount<minOmegasCount) minOmegasCount=_omegasCount;
  for(int iMode=0; iMode<minModesCount;iMode++) {
    double * values=_values[iMode];
    double * o_values=o->_values[iMode];
    for(int i=0;i<minOmegasCount;i++) values[i]=o_values[i];
  }
}
int QGpCompatibility::CompatMultiModalCurves::toPointVector ( int  imode,
Point2D pointList,
double  invalid_value 
)

Copy all point of imode into a point vector and return the number of valid points.

References QGpCompatibility::CompatMultiModalFrequency::_freq2omega, QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegas, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _refines, _values, TRACE, and QGpCoreTools::Point2D::x().

{
  TRACE;
  ASSERT(imode<_modesCount);
  //    cout << "Refines count=" << _refines.count() << endl;
  //    if(_refines.count()>0) {
  // QList<Point2D *>::iterator it(_refines);
  // Point2D * p;
  // for(;(p=it.current());++it) {
  //     cout << p->x << " " << p->y << endl;
  // }
  //    }
  double omega2freq=1.0/_freq2omega;
  double * values=_values[imode];
  int count=_omegasCount;
  if(imode>0) {
    for(int i=0;i<_omegasCount;i++) {
      double val=values[i];
      if(val!=invalid_value)
        *(pointList++)=Point2D(_omegas[i]*omega2freq,val);
      else count--;
    }
  }
  else {
    int i=0;
    double nextFixedX=_omegas[0], nextRefineX;
    QList<Point2D>::iterator it=_refines.begin();
    if(it==_refines.end()) {
      nextRefineX=1e99;
    } else {
      nextRefineX=(*it).x();
    }
    double val;
    while(i<_omegasCount || it!=_refines.end()) {
      while(nextFixedX<nextRefineX) {
        val=values[i];
        if(val!=invalid_value)
          *(pointList++)=Point2D(nextFixedX*omega2freq,val);
        else count--;
        i++;
        if(i<_omegasCount) nextFixedX=_omegas[i];
        else {
          nextFixedX=1e99;
          break;
        }
      }
      while(nextRefineX<nextFixedX) {
        val=(*it).y();
        if(val!=invalid_value) {
          *(pointList++)=Point2D(nextRefineX*omega2freq,val);
          count++;
        }
        ++it;
        if(it==_refines.end()) {
          nextRefineX=1e99;
          break;
        } else {
          nextRefineX=(*it).x();
        }
      }
    }
  }
  return count;
}

Export curves to stream.

References QGpCompatibility::CompatMultiModalFrequency::_freq2omega, QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegas, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _refines, _values, mode, and TRACE.

{
  TRACE;
  double omega2freq=1.0/_freq2omega;
  // Export first the fundamental together with the refines
  double * values=_values[0];
  int i=0;
  QList<Point2D>::iterator it=_refines.begin();
  double nextFixedX=_omegas[0],nextRefineX;
  if(it==_refines.end()) {
    nextRefineX=1e99;
  } else {
    nextRefineX=(*it).x();
  }
  while(i<_omegasCount || it!=_refines.end()) {
    while(nextFixedX<nextRefineX) {
      fprintf(f,"%lf %lf\n",nextFixedX*omega2freq,values[i]);
      i++;
      if(i<_omegasCount) nextFixedX=_omegas[i];
      else {
        nextFixedX=1e99;
        break;
      }
    }
    while(nextRefineX<nextFixedX) {
      fprintf(f,"%lf %lf\n",nextRefineX*omega2freq,(*it).y());
      ++it;
      if(it==_refines.end()) {
        nextRefineX=1e99;
         break;
     } else {
        nextRefineX=(*it).x();
      }
    }
  }  
  fprintf(f,">\n");
  for(int mode=1; mode<_modesCount;mode++) {
    double * values=_values[mode];
    for(int i=0;i<_omegasCount;i++)
      fprintf(f,"%lf %lf\n",_omegas[i]*omega2freq,values[i]);
    fprintf(f,">\n");
  }   
}
double QGpCompatibility::CompatMultiModalCurves::value ( int  i,
int  mode 
) const [inline]

Prints the _values to the binary stream (usually the inversion_report)

References QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _values, mode, and TRACE.

Referenced by QGpCompatibility::CompatAutocorrReport::addModel(), and QGpCompatibility::CompatInversionReport::addModel().

{
  TRACE;
  //cout << "Values to Report" << _modesCount << " " << _omegasCount << endl;
  for(int mode=0; mode<_modesCount;mode++) {
    //s.writeRawData((char *)_values[mode],_omegasCount*sizeof(double));
    double * values=_values[mode];
    for(int i=0;i<_omegasCount;i++) {
      s << values[i];
      //cout << twopi/_omegas[i] << " " << values[i] << endl;
    }
  }
}

Friends And Related Function Documentation

friend class CompatMultiModalData [friend]

Member Data Documentation

Referenced by CompatMultiModalCurves().


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