#include <CompatMultiModalCurves.h>
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 |
Default constructor.
References _rayleighModesCount, _values, and TRACE.
: CompatMultiModalFrequency() { TRACE; _values=0; _rayleighModesCount=0; }
QGpCompatibility::CompatMultiModalCurves::CompatMultiModalCurves | ( | int | modesCount, |
int | omegasCount | ||
) |
Constructor.
References _rayleighModesCount, _values, allocatesValues(), QGpCompatibility::CompatMultiModalFrequency::modesCount(), and TRACE.
QGpCompatibility::CompatMultiModalCurves::CompatMultiModalCurves | ( | const CompatMultiModalFrequency * | o | ) |
Copy constructor.
References QGpCompatibility::CompatMultiModalFrequency::_modesCount, _rayleighModesCount, _values, allocatesValues(), and TRACE.
: CompatMultiModalFrequency(o) { TRACE; _values=0; _rayleighModesCount=_modesCount; allocatesValues(); }
QGpCompatibility::CompatMultiModalCurves::CompatMultiModalCurves | ( | const CompatMultiModalFrequency * | o, |
int | modesCount | ||
) |
Copy constructor changing the number of modes.
References QGpCompatibility::CompatMultiModalFrequency::_modesCount, _rayleighModesCount, _values, allocatesValues(), and TRACE.
: CompatMultiModalFrequency(o,modesCount) { TRACE; _values=0; _rayleighModesCount=_modesCount; allocatesValues(); }
QGpCompatibility::CompatMultiModalCurves::CompatMultiModalCurves | ( | const CompatMultiModalCurves * | o | ) |
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.
{ TRACE; deleteValues(); }
void QGpCompatibility::CompatMultiModalCurves::allocatesValues | ( | ) | [protected] |
Allocates the storage for calculated slownesses.
References QGpCompatibility::CompatMultiModalFrequency::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, _values, deleteValues(), mode, and TRACE.
Referenced by CompatMultiModalCurves(), and reportToOmega().
{ TRACE; deleteValues(); _values=new double*[_modesCount]; for(int mode=0; mode<_modesCount;mode++) _values[mode]=new double[_omegasCount]; }
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().
void QGpCompatibility::CompatMultiModalCurves::deleteValues | ( | ) | [protected] |
Delete _values (called by destructor)
References QGpCompatibility::CompatMultiModalFrequency::_modesCount, _values, clearRefines(), mode, and TRACE.
Referenced by allocatesValues(), reportToOmega(), and ~CompatMultiModalCurves().
uint QGpCompatibility::CompatMultiModalCurves::rayleighModesCount | ( | ) | [inline] |
int QGpCompatibility::CompatMultiModalCurves::refinesCount | ( | ) | const [inline] |
Referenced by QGpCompatibility::CompatAutocorrReport::addModel(), and QGpCompatibility::CompatInversionReport::addModel().
{return _refines.count();}
void QGpCompatibility::CompatMultiModalCurves::refineSort | ( | ) | [inline] |
{qSort(_refines);}
void QGpCompatibility::CompatMultiModalCurves::refinesToReport | ( | QDataStream & | s | ) | const |
References _refines, TRACE, QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().
Referenced by QGpCompatibility::CompatAutocorrReport::addModel(), and QGpCompatibility::CompatInversionReport::addModel().
void QGpCompatibility::CompatMultiModalCurves::reportToOmega | ( | QDataStream & | s | ) |
Loads the _omega from the binary stream (usually the inversion_report) and allocate values.
Reimplemented from QGpCompatibility::CompatMultiModalFrequency.
References allocatesValues(), deleteValues(), and TRACE.
Referenced by QGpCompatibility::CompatRefraReport::initCurrentDispersion(), QGpCompatibility::CompatInversionReport::initCurrentDispersion(), QGpCompatibility::CompatInversionReport::initCurrentEllipticity(), QGpCompatibility::CompatInversionReport::loadDispersion(), and QGpCompatibility::CompatRefraReport::loadRefra().
{ TRACE; deleteValues(); CompatMultiModalFrequency::reportToOmega(s); allocatesValues(); }
void QGpCompatibility::CompatMultiModalCurves::reportToRefines | ( | QDataStream & | s | ) |
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)); } }
void QGpCompatibility::CompatMultiModalCurves::reportToValues | ( | QDataStream & | s | ) |
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::setRayleighModesCount | ( | int | rm | ) | [inline] |
void QGpCompatibility::CompatMultiModalCurves::setValue | ( | int | i, |
int | mode, | ||
double | val | ||
) | [inline] |
Set values of mode and point i.
References mode.
Referenced by EllipticityPeakTargetWidget::loadReport(), QGpCompatibility::CompatModalEllipticity::oldStyle(), and QGpCompatibility::CompatModalDispersion::oldStyle().
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; }
void QGpCompatibility::CompatMultiModalCurves::toStream | ( | FILE * | f | ) |
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] |
Returns the ith slowness of mode m.
References mode.
Referenced by QGpCompatibility::CompatAutocorrCurves::calculate(), QGpCompatibility::CompatHodoChroneData::calculate(), and QGpCompatibility::CompatInversionReport::statDispersion().
void QGpCompatibility::CompatMultiModalCurves::valuesToReport | ( | QDataStream & | s | ) | const |
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; } } }
friend class CompatMultiModalData [friend] |
Reimplemented from QGpCompatibility::CompatMultiModalFrequency.
uint QGpCompatibility::CompatMultiModalCurves::_rayleighModesCount [protected] |
Referenced by CompatMultiModalCurves().
QList<Point2D> QGpCompatibility::CompatMultiModalCurves::_refines [protected] |
Refinement list.
Referenced by clearRefines(), refinesToReport(), reportToRefines(), toPointVector(), and toStream().
double** QGpCompatibility::CompatMultiModalCurves::_values [protected] |
Storage for calculated values (wave slownesses, ellipticity, ...)
Referenced by allocatesValues(), QGpCompatibility::CompatHodoChroneData::calculate(), QGpCompatibility::CompatDispersion::checkSlopes(), clear(), QGpCompatibility::CompatDispersionData::closestModeMisfit(), CompatMultiModalCurves(), QGpCompatibility::CompatMultiModalData::CompatMultiModalData(), deleteValues(), QGpCompatibility::CompatDispersionData::misfit(), QGpCompatibility::CompatDispersion::omegasCount(), reportToValues(), QGpCompatibility::CompatEllipticity::resetValues(), QGpCompatibility::CompatDispersion::resetValues(), setValues(), toPointVector(), toStream(), QGpCompatibility::CompatMultiModalData::valuesToData(), and valuesToReport().