Brief description of class still missing. More...
#include <ModalCurve.h>
Public Member Functions | |
| void | addLog (QString s) |
| void | addMode (const Mode &m) |
| void | clear () |
| double | determinantMisfit (const Seismic1DModel *m) const |
| bool | hasMode (const Mode &m) const |
| int | indexOf (int factoryIndex) const |
| void | linkX (const QVector< double > &x) |
| QString | log () const |
| double | misfit (int &nValues, int &nData, const ModalFactory &f, MisfitType type, double minMisfit) const |
| ModalCurve () | |
| ModalCurve (const ModalCurve &o) | |
| ModalCurve (int n) | |
| ModalCurve (const Curve< RealStatisticalPoint > &o) | |
| const QList< Mode > & | modes () const |
| QList< Mode > & | modes () |
| QString | name () const |
| void | operator= (const Curve< RealStatisticalPoint > &o) |
| bool | operator== (const ModalCurve &o) const |
| void | removeMode (int index) |
| void | setName (QString n) |
| void | sort () |
| virtual const QString & | xml_tagName () const |
| virtual | ~ModalCurve () |
Static Public Attributes | |
| static const QString | xmlModalCurveTag = "ModalCurve" |
Protected Member Functions | |
| XMLMember | xml_member (XML_MEMBER_ARGS) |
| bool | xml_setProperty (XML_SETPROPERTY_ARGS) |
| void | xml_writeChildren (XML_WRITECHILDREN_ARGS) const |
| void | xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const |
Brief description of class still missing.
Full description of class still missing
| QGpCoreWave::ModalCurve::ModalCurve | ( | ) | [inline] |
Construct an empty curve
{}
| QGpCoreWave::ModalCurve::ModalCurve | ( | const ModalCurve & | p | ) | [inline] |
Copy constructor
References TRACE.
: Curve<FactoryPoint>(o), XMLClass() { TRACE; _name=o._name; _modes=o._modes; _log=o._log; }
| QGpCoreWave::ModalCurve::ModalCurve | ( | int | n | ) | [inline] |
Construct a curve with n points.
: Curve<FactoryPoint>(n) {}
| QGpCoreWave::ModalCurve::ModalCurve | ( | const Curve< RealStatisticalPoint > & | o | ) | [inline] |
References TRACE.
: Curve<FactoryPoint>(), XMLClass() { TRACE; *this=o; }
| QGpCoreWave::ModalCurve::~ModalCurve | ( | ) | [virtual] |
| void QGpCoreWave::ModalCurve::addLog | ( | QString | s | ) | [inline] |
Referenced by QGpGuiWave::ModalProxy::addLog(), and SpacSelector::selectSamples().
{_log+=s;}
| void QGpCoreWave::ModalCurve::addMode | ( | const Mode & | m | ) |
References TRACE.
Referenced by QGpCoreWave::AutocorrCurves::dispersionCurve(), and DinverDCCore::TargetList::xml_polishChild().
{
TRACE;
_modes.append(m);
}
| void QGpCoreWave::ModalCurve::clear | ( | ) |
Reimplemented from QGpCoreTools::Curve< FactoryPoint >.
References TRACE.
Referenced by QGpGuiWave::DispersionProxy::parse(), QGpGuiWave::EllipticityProxy::parse(), and QGpGuiWave::AutocorrProxy::parse().
{
TRACE;
Curve<FactoryPoint>::clear();
_modes.clear();
_log.clear();
_name.clear();
}
| double QGpCoreWave::ModalCurve::determinantMisfit | ( | const Seismic1DModel * | m | ) | const |
Calculates the misfit based on determinant value.
References QGpCoreTools::Curve< FactoryPoint >::at(), QGpCoreTools::Curve< FactoryPoint >::count(), QGpCoreTools::StatisticalValue< numberType >::isValid(), QGpCoreWave::Love::setOmega(), QGpCoreWave::RayleighTemplate< RealType >::setOmega(), TRACE, QGpCoreTools::StatisticalPoint< numberType >::x(), QGpCoreWave::Love::y(), QGpCoreWave::RayleighTemplate< RealType >::y(), and QGpCoreTools::RealStatisticalPoint::y().
{
TRACE;
double res=0.0;
int nx=count();
if(_modes.at(0).polarisation()==Mode::Rayleigh) {
Rayleigh rayleigh(m);
for(int i=0; i<nx; i++ ) {
const FactoryPoint& p=at(i);
if(!p.isValid()) continue;
double f=p.x();
rayleigh.setOmega(2.0*M_PI*f);
double factor=1.0/(f*f);
res+=fabs(rayleigh.y(p.y())*factor);
}
} else {
Love love(m);
for(int i=0; i<nx; i++ ) {
const FactoryPoint& p=at(i);
if(!p.isValid()) continue;
double f=p.x();
love.setOmega(2.0*M_PI*f);
double factor=1.0/(f*f);
res+=fabs(love.y(p.y())*factor);
}
}
return res;
}
| bool QGpCoreWave::ModalCurve::hasMode | ( | const Mode & | m | ) | const |
| int QGpCoreWave::ModalCurve::indexOf | ( | int | factoryIndex | ) | const |
| void QGpCoreWave::ModalCurve::linkX | ( | const QVector< double > & | x | ) |
Set the index in vector x of each sample of the curve. Each sample of the curve must have its corresponding value in vector x.
References QGpCoreTools::Curve< FactoryPoint >::at(), QGpCoreTools::Curve< FactoryPoint >::count(), and TRACE.
Referenced by QGpCoreWave::ModalFactory::linkX().
| QString QGpCoreWave::ModalCurve::log | ( | ) | const [inline] |
Referenced by QGpGuiWave::ModalProxy::log().
{return _log;}
| double QGpCoreWave::ModalCurve::misfit | ( | int & | nValues, |
| int & | nData, | ||
| const ModalFactory & | f, | ||
| MisfitType | type, | ||
| double | minMisfit | ||
| ) | const |
Calculates the squared misfit
nValues is incremented by the number of valid values where the comparison was possible. nData is incremented by the number of valid data where the comparison is possible. In all cases, nData >= nValues and for the best matching case, nValues==nData.
minMisfit is the square of the minimum misfit value that can be reached for each sample individualy.
References QGpCoreTools::Curve< FactoryPoint >::at(), QGpCoreTools::Curve< FactoryPoint >::count(), QGpCoreWave::FactoryPoint::index(), QGpCoreTools::StatisticalValue< numberType >::isValid(), QGpCoreTools::StatisticalValue< numberType >::misfit(), QGpCoreWave::ModalFactory::mode(), and TRACE.
{
TRACE;
double res=0.0;
int nx=count();
int nm=_modes.count();
if(nm==1) {
const RealValue * values=f.mode(_modes.first());
for(int i=0;i<nx;i++) {
const FactoryPoint& p=at(i);
double pointMisfit=p.misfit(nValues, nData, values[ p.index() ], type, minMisfit);
if(pointMisfit>0.0) {
res+=pointMisfit;
}
}
} else if(nm > 1) {
for(int i=0; i<nx; i++ ) {
const FactoryPoint& p=at(i);
if( !p.isValid()) continue;
nData++;
double modalMisfit,minModalMisfit=1e99;
int localNData=0, localNValues=0;
for(int im=0;im<nm;im++) {
const RealValue * values=f.mode(_modes.at(im));
localNValues=0;
modalMisfit=p.misfit(localNValues, localNData, values[ p.index() ], type, minMisfit);
if(localNValues==1 && modalMisfit>0.0 && modalMisfit<minModalMisfit) {
minModalMisfit=modalMisfit;
}
}
if(minModalMisfit!=1e99) {
res+=minModalMisfit;
nValues++;
}
}
}
return res;
}
| const QList<Mode>& QGpCoreWave::ModalCurve::modes | ( | ) | const [inline] |
Referenced by QGpCoreWave::AutocorrCurves::add(), QGpGuiWave::ModeItem::data(), QGpCoreWave::AutocorrCurves::dispersionCurve(), TargetExtract::execute(), QGpGuiWave::ModeItem::index(), main(), Spac3CForward::misfit(), QGpCoreWave::AutocorrCurves::ringCurves(), QGpGuiWave::ModeItem::rowCount(), QGpGuiWave::ModeItem::setData(), and QGpCoreWave::ModalFactory::setModes().
{return _modes;}
| QList<Mode>& QGpCoreWave::ModalCurve::modes | ( | ) | [inline] |
{return _modes;}
| QString QGpCoreWave::ModalCurve::name | ( | ) | const [inline] |
Referenced by QGpCoreWave::AutocorrCurves::add(), and QGpCoreWave::AutocorrCurves::addCurve().
{return _name;}
| void QGpCoreWave::ModalCurve::operator= | ( | const Curve< RealStatisticalPoint > & | o | ) |
| bool QGpCoreWave::ModalCurve::operator== | ( | const ModalCurve & | o | ) | const [inline] |
{
return _name==o._name &&
_modes==o._modes &&
_log==o._log &&
Curve<FactoryPoint>::operator==(o);
}
| void QGpCoreWave::ModalCurve::removeMode | ( | int | index | ) |
| void QGpCoreWave::ModalCurve::setName | ( | QString | n | ) | [inline] |
{_name=n;}
| void QGpCoreWave::ModalCurve::sort | ( | ) | [inline] |
Sort all samples by increasing X. Necessary for entering into a ModalFactory
{setFunction();}
| XMLMember QGpCoreWave::ModalCurve::xml_member | ( | XML_MEMBER_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore (children and properties) support to your class.
From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:
Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):
static const QString tmp("childrenName"); XMLRestoreAttributeIterator it=map.find(tmp); if(it!=map.end()) { // found attribute "childrenName" }
If the map of attributes is not used:
Q_UNUSED(attributes);
if(tag=="x1") return XMLMember(0);
else if(tag=="y1") return XMLMember(1);
else if(tag=="x2") return XMLMember(2);
else if(tag=="y2") return XMLMember(3);
else return XMLMember(XMLMember::Unknown);
Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.
if(tag=="anInteger") return XMLMember(0); else if(tag=="aString") return XMLMember(1); else if(tag=="aDouble") return XMLMember(2); return AbstractLine::xml_member(tag, attributes, context)+3;
For the arguments of this function use Macro XML_MEMBER_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreTools::Curve< FactoryPoint >::append(), QGpCoreTools::Curve< FactoryPoint >::last(), and TRACE.
{
TRACE;
Q_UNUSED(attributes)
Q_UNUSED(context);
if(tag=="RealStatisticalPoint" || tag=="StatPoint") { // StatPoint kept for compatibility
append(FactoryPoint());
return XMLMember(&last());
} else if(tag=="Mode") {
_modes.append(Mode());
return XMLMember(&_modes.last());
} else if(tag=="name") return XMLMember(0);
else if(tag=="log") return XMLMember(1);
else return XMLMember(XMLMember::Unknown);
}
| bool QGpCoreWave::ModalCurve::xml_setProperty | ( | XML_SETPROPERTY_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore properties support to your class.
From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).
For a general case:
Q_UNUSED(attributes); double val=content.toDouble(); switch (memberID) { case 0: _x1=val; return true; case 1: _y1=val; return true; case 2: _x2=val; return true; case 3: _y2=val; return true; default: return false; }
For classes inheriting other classes (see also xml_member())
switch (memberID) { case 0: _anInteger=content.toString(); return true; case 1: _aString=content.toInt(); return true; case 2: _aDouble=content.toDouble(); return true; default: return AbstractLine::xml_setProperty(memberID-3, map, content);
For the arguments of this function use Macro XML_SETPROPERTY_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References TRACE.
{
TRACE;
Q_UNUSED(tag);
Q_UNUSED(attributes)
Q_UNUSED(context);
switch (memberID) {
case 0: _name=content.toString(); return true;
case 1: _log=content.toString(); return true;
default: return false;
}
}
| virtual const QString& QGpCoreWave::ModalCurve::xml_tagName | ( | ) | const [inline, virtual] |
Implements QGpCoreTools::XMLClass.
{return xmlModalCurveTag;}
| void QGpCoreWave::ModalCurve::xml_writeChildren | ( | XML_WRITECHILDREN_ARGS | ) | const [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreTools::Curve< FactoryPoint >::begin(), QGpCoreTools::Curve< FactoryPoint >::end(), and TRACE.
{
TRACE;
for(QList<Mode>::ConstIterator it=_modes.begin(); it!=_modes.end(); it++ ) {
it->xml_save(s, context);
}
const_iterator it;
for(it=begin(); it!=end(); ++it) {
it->xml_save(s, context);
}
}
| void QGpCoreWave::ModalCurve::xml_writeProperties | ( | XML_WRITEPROPERTIES_ARGS | ) | const [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References TRACE, and QGpCoreTools::XMLClass::writeProperty().
{
TRACE;
Q_UNUSED(context);
writeProperty(s,"name",_name);
writeProperty(s,"log",_log);
}
const QString QGpCoreWave::ModalCurve::xmlModalCurveTag = "ModalCurve" [static] |