Public Member Functions
Spac3CForward Class Reference

Brief description of class still missing. More...

#include <Spac3CForward.h>

Inheritance diagram for Spac3CForward:
DinverCore::AbstractForward

List of all members.

Public Member Functions

virtual AbstractForwardclone () 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 ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

References TRACE.

Referenced by clone().

{
  TRACE;
  _dispFactory=0;
  _autocorrFactory=0;
}
{
  delete _dispFactory;
  delete _autocorrFactory;
}

Member Function Documentation

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

{return _autocorrFactory->vertical(0).x(i);}
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().

{
  return _autocorrFactory->radial(ringIndex).mode(0)[_iOmega].value();
}
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)

References TRACE.

Referenced by main().

{
  TRACE;
  _iOmega=i;
  _curveIndexes.clear();
  for(QList<ModalCurve>::iterator it=_curveList.begin(); it!= _curveList.end(); it++ ) {
    _curveIndexes.append(it->indexOf(_iOmega) );
  }
}
void Spac3CForward::setModel ( const double *  model)
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().

{
  return _autocorrFactory->vertical(ringIndex).mode(0)[_iOmega].value();
}

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