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().