Brief description of class still missing. More...
#include <Spac3CForward.h>
Public Member Functions | |
virtual AbstractForward * | clone () const |
virtual double | misfit (double *model, bool &ok) |
double | omega (int i) const |
int | omegasCount () const |
double | radial (int ringIndex) const |
void | setCurves (const AutocorrCurves &autocorr) |
void | setFrequency (int i) |
void | setModel (const double *model) |
Spac3CForward () | |
double | transverse (int ringIndex) const |
double | vertical (int ringIndex) const |
~Spac3CForward () |
Brief description of class still missing.
Full description of class still missing
{ delete _dispFactory; delete _autocorrFactory; }
AbstractForward * Spac3CForward::clone | ( | ) | const [virtual] |
Implements DinverCore::AbstractForward.
References DinverCore::RealSpace::addParameter(), DinverCore::AbstractForward::parameterSpace(), setCurves(), Spac3CForward(), and TRACE.
{ TRACE; Spac3CForward * f=new Spac3CForward; f->setCurves(_curves); f->parameterSpace().addParameter( "Sr", "m/s", 0.0002, 0.007, ParameterGrid::Linear, 0.000025); f->parameterSpace().addParameter( "Sl", "m/s", 0.0002, 0.007, ParameterGrid::Linear, 0.000025); f->parameterSpace().addParameter( "Alpha", "", 0.0, 1.0, ParameterGrid::Linear, 0.01); return f; }
double Spac3CForward::misfit | ( | double * | model, |
bool & | ok | ||
) | [virtual] |
Reimplemented from DinverCore::AbstractForward.
References QGpCoreTools::Curve< pointType >::at(), QGpCoreTools::L2, QGpCoreTools::StatisticalValue< numberType >::misfit(), QGpCoreWave::AutocorrFactory::mode(), QGpCoreWave::ModalCurve::modes(), setModel(), QGpCoreTools::sqrt(), and TRACE.
{ TRACE; setModel(model); double rms_val=0.0; int nValues=0; int nData=0; for(int i=_curveList.count()-1;i>=0;i-- ) { int index=_curveIndexes.at(i); if(index>-1) { const ModalCurve& c=_curveList.at(i); const FactoryPoint& p=c.at(index); //printf("%i %lg\n",i,_autocorrFactory.mode(c.modes().first())[ _iOmega ].value()); rms_val += p.misfit(nValues, nData, _autocorrFactory->mode(c.modes().first())[ _iOmega ], L2, 0.0); } } if(nValues>0) rms_val=sqrt(rms_val/nValues)*(1+nData-nValues); else if(nData==0) rms_val=0.0; // Case where data curve contains only invalid values else { rms_val=-1; ok=false; } return rms_val; }
double Spac3CForward::omega | ( | int | i | ) | const [inline] |
References QGpCoreWave::AutocorrFactory::vertical(), and QGpCoreWave::ModalStorage::x().
Referenced by main().
int Spac3CForward::omegasCount | ( | ) | const [inline] |
References QGpCoreWave::ModalFactory::x().
Referenced by main().
{return _autocorrFactory->x()->count();}
double Spac3CForward::radial | ( | int | ringIndex | ) | const |
References QGpCoreWave::ModalStorage::mode(), QGpCoreWave::AutocorrFactory::radial(), and QGpCoreTools::Value< numberType >::value().
Referenced by main().
void Spac3CForward::setCurves | ( | const AutocorrCurves & | autocorr | ) |
References QGpCoreWave::AutocorrCurves::curves(), QGpCoreWave::AutocorrFactory::init(), QGpCoreWave::ModalFactory::linkX(), QGpCoreWave::AutocorrCurves::rings(), QGpCoreWave::ModalFactory::setAngularFrequency(), QGpCoreWave::ModalFactory::setModes(), QGpCoreWave::ModalFactory::setX(), TRACE, and QGpCoreWave::DispersionFactory::validate().
Referenced by clone(), and main().
{ TRACE; _curves=autocorr; _curveList=_curves.curves(); delete _dispFactory; delete _autocorrFactory; _dispFactory=new DispersionFactory; _autocorrFactory=new AutocorrFactory(_curves.rings()); _autocorrFactory->setX(_curveList); _autocorrFactory->linkX(_curveList); _autocorrFactory->setModes(_curveList); _dispFactory->setX(*_autocorrFactory); _dispFactory->validate(0, _autocorrFactory); _dispFactory->setAngularFrequency(); _autocorrFactory->setAngularFrequency(); _autocorrFactory->init(); }
void Spac3CForward::setFrequency | ( | int | i | ) |
void Spac3CForward::setModel | ( | const double * | model | ) |
References QGpCoreWave::AutocorrFactory::calculateHorizontal(), QGpCoreWave::AutocorrFactory::calculateVertical(), QGpCoreWave::ModalStorage::mode(), QGpCoreWave::DispersionFactory::phaseLove(), QGpCoreWave::DispersionFactory::phaseRayleigh(), and QGpCoreTools::Value< numberType >::setValue().
Referenced by main(), and misfit().
{ _dispFactory->phaseRayleigh()->mode(0)[_iOmega].setValue(model[0]); _dispFactory->phaseLove()->mode(0)[_iOmega].setValue(model[1]); _autocorrFactory->calculateVertical(_dispFactory); _autocorrFactory->calculateHorizontal(_iOmega, model[2], _dispFactory); }
double Spac3CForward::transverse | ( | int | ringIndex | ) | const |
References QGpCoreWave::ModalStorage::mode(), QGpCoreWave::AutocorrFactory::transverse(), and QGpCoreTools::Value< numberType >::value().
Referenced by main().
{ return _autocorrFactory->transverse(ringIndex).mode(0)[_iOmega].value(); }
double Spac3CForward::vertical | ( | int | ringIndex | ) | const |
References QGpCoreWave::ModalStorage::mode(), QGpCoreTools::Value< numberType >::value(), and QGpCoreWave::AutocorrFactory::vertical().
Referenced by main().