Public Member Functions | Protected Member Functions
Forward Class Reference

Brief description of class still missing. More...

#include <Forward.h>

Inheritance diagram for Forward:
DinverCore::AbstractForward DinverCore::AbstractForward DinverCore::AbstractForward

List of all members.

Public Member Functions

virtual AbstractForwardclone () const
virtual AbstractForwardclone () const
virtual AbstractForwardclone () const
 Forward ()
 Forward ()
 Forward ()
virtual bool isFussyOk (const Parameter *p)
virtual int maximumThreadCount () const
virtual int maximumThreadCount () const
virtual double misfit (bool &ok)
virtual double misfit (bool &ok)
virtual double misfit (bool &ok)
ParamSpaceScript * parameters () const
ParamSpaceScriptparameters () const
ParamGroundModelparamGroundModel () const
bool setParam (ParamSpaceScript *param)
bool setParam (ParamSpaceScript *param)
bool setParamSpace (ParamGroundModel *gm)
bool setTarget (ExtTarget *target)
bool setTarget (MatlabTarget *target, bool skipTest)
void setTargets (TargetList *tl)
virtual void sleep ()
ExtTargettarget () const
MatlabTargettarget () const
TargetListtargetList () const
virtual void valueChanged (const Parameter *p=0)
virtual bool wake ()
virtual void writeReport (ReportWriter *report)
virtual XMLMember xml_member (XML_MEMBER_ARGS)
virtual XMLMember xml_member (XML_MEMBER_ARGS)
virtual void xml_polish (XML_POLISH_ARGS)
virtual void xml_polish (XML_POLISH_ARGS)
virtual void xml_writeChildren (XML_WRITECHILDREN_ARGS) const
virtual void xml_writeChildren (XML_WRITECHILDREN_ARGS) const
 ~Forward ()
 ~Forward ()
 ~Forward ()

Protected Member Functions

virtual XMLMember xml_member (XML_MEMBER_ARGS)
virtual void xml_polish (XML_POLISH_ARGS)
virtual void xml_writeChildren (XML_WRITECHILDREN_ARGS) const

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

Default constructor: initialize parameters

References TRACE.

Referenced by clone().

{
  TRACE;
  _targets=0;
  _paramModel=0;
}

Description of destructor still missing

Destructor

References TRACE.

{
  TRACE;
  delete _paramModel;
  delete _targets;
}

Member Function Documentation

AbstractForward * Forward::clone ( ) const [virtual]

Implements DinverCore::AbstractForward.

References Forward(), setParamSpace(), setTargets(), and TRACE.

{
  TRACE;
  Forward * forward=new Forward;
  forward->setTargets(new TargetList(*_targets));
  // Returned value assumed to be true (was true for this)
  forward->setParamSpace(new ParamGroundModel(*_paramModel));
  return forward;
}
virtual AbstractForward* Forward::clone ( ) const [virtual]
virtual AbstractForward* Forward::clone ( ) const [virtual]
bool Forward::isFussyOk ( const Parameter p) [inline, virtual]

Reimplemented from DinverCore::AbstractForward.

References DinverDCCore::TargetList::isGroundModelParameter(), and DinverDCCore::TargetList::isPoissonRatioOk().

{
  if(_targets->isGroundModelParameter(p)) {
    return _targets->isPoissonRatioOk(static_cast<const GroundParameter *>(p));
  } else {
    return false;
  }
}
virtual int Forward::maximumThreadCount ( ) const [inline, virtual]

Reimplemented from DinverCore::AbstractForward.

{return RAND_MAX;}
virtual int Forward::maximumThreadCount ( ) const [inline, virtual]

Reimplemented from DinverCore::AbstractForward.

{return RAND_MAX;}
double Forward::misfit ( bool &  ok) [inline, virtual]

This is the heart of the problem, enter here the forward and the misfit computation.

You can set ok to false if the input model contains unconsistent information. By default it is set to true.

Reimplemented from DinverCore::AbstractForward.

References DinverDCCore::TargetList::misfit(), DinverCore::AbstractForward::parameterSpace(), and TRACE.

{
  TRACE;
  return _targets->misfit(parameterSpace().variableParameterCount(), ok);
}
virtual double Forward::misfit ( bool &  ok) [virtual]

Provided for convenience, it calls misfit(double *, bool) to compute misfit from a vector of parameter values. Reimplement this function if you do not need values under this format (direct access to parameter space).

Reimplemented from DinverCore::AbstractForward.

virtual double Forward::misfit ( bool &  ok) [virtual]

Provided for convenience, it calls misfit(double *, bool) to compute misfit from a vector of parameter values. Reimplement this function if you do not need values under this format (direct access to parameter space).

Reimplemented from DinverCore::AbstractForward.

ParamSpaceScript* Forward::parameters ( ) const [inline]
{return _param;}

Referenced by DCPlugin::setCurrentForward().

{return _paramModel;}
bool Forward::setParam ( ParamSpaceScript *  param)

References DinverCore::ParamSpaceScript::apply(), DinverCore::AbstractForward::parameterSpace(), and TRACE.

{
  TRACE;
  delete _param;
  _param=param;
  return _param->apply(&parameterSpace());
}

References DinverDCCore::ParamProfile::addLayer(), DinverDCCore::ParamGroundModel::addProfile(), DinverCore::RealSpace::clearParameters(), DinverDCCore::ParamGroundModel::find(), DinverDCCore::ParamGroundModel::initFinalProfiles(), DinverCore::AbstractForward::parameterSpace(), DinverDCCore::ParamGroundModel::removeProfile(), DinverDCCore::TargetList::setParamProfiles(), DinverDCCore::ParamGroundModel::toParameters(), QGpCoreTools::tr(), TRACE, and DinverDCCore::ParamProfile::type().

Referenced by clone(), DCPlugin::initForward(), and xml_polish().

{
  TRACE;
  _paramModel=gm;
  /*
     Compatibility with older parameterizations without Poisson profile and
     with older parameterizations with Poisson profile but without type specification
  */
  ParamProfile * nu=_paramModel->find("Nu");
  if(nu && nu->type()!=ParamProfile::Condition) {
    _paramModel->removeProfile(nu);
    nu=0;
  }
  if(!nu) {
    ParamProfile * p=new ParamProfile( "Nu", tr("Poisson's Ratio"), tr(""), 0.2, 0.5,
                                               ParamProfile::Condition, SimpleCondition::GreaterThan);
    p->addLayer(new ParamLayer(p, 0, 0.2, 0.5, 0.0, 0.0) );
    _paramModel->addProfile(p);
  }

  _paramModel->initFinalProfiles();
  parameterSpace().clearParameters();
  if( !_paramModel->toParameters(parameterSpace()) ) return false;
  //_targets->setAlpha(addParam( "alpha", "", 0.0, 1.0) );
  _targets->setParamProfiles(_paramModel, parameterSpace());
  return true;
}
bool Forward::setTarget ( ExtTarget target)

References ExtTarget::isOk(), DinverCore::AbstractForward::parameterSpace(), target(), and TRACE.

Referenced by MatlabPlugin::initForward(), and ExtPlugin::initForward().

{
  TRACE;
  if(target!=_target) {
    delete _target;
    _target=target;
  }
  return _target->isOk(parameterSpace().allParameterCount());
}
bool Forward::setTarget ( MatlabTarget target,
bool  skipTest 
)

References QGpCoreTools::endl(), ExtTarget::isOk(), DinverCore::AbstractForward::parameterSpace(), target(), QGpCoreTools::tr(), and TRACE.

{
  TRACE;
  if(target!=_target) {
    delete _target;
    _target=target;
  }
  if(_target->isEmpty()) {
    App::stream() << tr("Empty target, skipping matlab testing") << endl;
    return true;
  }
  if(!skipTest) {
    return _target->isOk(parameterSpace().allParameterCount());
  }
  return true;
}
void Forward::setTargets ( TargetList tl) [inline]

Referenced by clone(), and DCPlugin::initForward().

{_targets=tl;}
void Forward::sleep ( ) [virtual]

Reimplemented from DinverCore::AbstractForward.

References TRACE.

{
  TRACE;
#ifdef GP_MATLAB_LIBS
  if(_matlab) {
    engClose(_matlab);
    _matlab=0;
  }
#endif
  AbstractForward::sleep();
}
ExtTarget* Forward::target ( ) const [inline]
MatlabTarget* Forward::target ( ) const [inline]
{return _target;}
TargetList* Forward::targetList ( ) const [inline]

Referenced by DCPlugin::setCurrentForward().

{return _targets;}
void Forward::valueChanged ( const Parameter p = 0) [inline, virtual]

Reimplemented from DinverCore::AbstractForward.

References DinverDCCore::TargetList::isGroundModelParameter(), and DinverDCCore::ParamGroundModel::updateFinalProfiles().

{
  if(!p || _targets->isGroundModelParameter(p)) {
    _paramModel->updateFinalProfiles(static_cast<const GroundParameter *>(p));
  }
}
bool Forward::wake ( ) [virtual]

Reimplemented from DinverCore::AbstractForward.

References QGpCoreTools::endl(), MATLAB_OUTPUT_BUFFER_SIZE, QGpCoreTools::tr(), and TRACE.

{
  TRACE;
#ifdef GP_MATLAB_LIBS
  App::stream() << tr("Initialize Matlab engine...") << endl;
  App::setStreamPrefix("[Init] ");
  _matlab=engOpen(_target->startup().toAscii().data());
  if(_matlab) {
    char buffer[MATLAB_OUTPUT_BUFFER_SIZE];
    buffer[MATLAB_OUTPUT_BUFFER_SIZE-1]='\0';
    engOutputBuffer(_matlab, buffer, MATLAB_OUTPUT_BUFFER_SIZE);
    if(!_target->scriptPath().isEmpty()) {
      QString cmd="addpath('" + _target->scriptPath() + "');";
      App::stream() << cmd << endl;
      if(engEvalString( _matlab, cmd.toAscii().data())!=0) {
        if(buffer[0]!='\0') App::stream() << buffer+4 << endl;
        App::setStreamPrefix("");
        engClose(_matlab);
        _matlab=0;
        return false;
      }
      if(buffer[0]!='\0') App::stream() << buffer+4 << endl;
    }
    App::stream() << _target->initScript() << endl;
    if(engEvalString( _matlab, _target->initScript().toAscii().data())!=0) {
      if(buffer[0]!='\0') App::stream() << buffer+4 << endl;
      App::setStreamPrefix("");
      engClose(_matlab);
      _matlab=0;
      return false;
    }
    if(buffer[0]!='\0') App::stream() << buffer+4 << endl;
    App::setStreamPrefix("");
    return AbstractForward::wake();
  } else
#endif
  {
    return false;
  }
}
void Forward::writeReport ( ReportWriter report) [inline, virtual]

Reimplemented from DinverCore::AbstractForward.

References DinverDCCore::TargetList::writeReport().

{
  _targets->writeReport(report);
}
virtual XMLMember Forward::xml_member ( XML_MEMBER_ARGS  ) [virtual]

Reimplemented from DinverCore::AbstractForward.

XMLMember Forward::xml_member ( XML_MEMBER_ARGS  ) [protected, virtual]

Reimplemented from DinverCore::AbstractForward.

References TRACE.

{
  TRACE;
  Q_UNUSED(attributes)
  Q_UNUSED(context);
  if(tag=="TargetList" ) {
    if(_targets) delete _targets;
    _targets=new TargetList;
    return XMLMember(_targets);
  }
  else if(tag=="ParamGroundModel" ) {
    if(_paramModel) delete _paramModel;
    _paramModel=new ParamGroundModel;
    return XMLMember(_paramModel);
  }
  else return XMLMember(XMLMember::Unknown);
}

Reimplemented from DinverCore::AbstractForward.

virtual void Forward::xml_polish ( XML_POLISH_ARGS  ) [virtual]

Reimplemented from DinverCore::AbstractForward.

void Forward::xml_polish ( XML_POLISH_ARGS  ) [protected, virtual]
virtual void Forward::xml_polish ( XML_POLISH_ARGS  ) [virtual]

Reimplemented from DinverCore::AbstractForward.

virtual void Forward::xml_writeChildren ( XML_WRITECHILDREN_ARGS  ) const [virtual]

Reimplemented from DinverCore::AbstractForward.

void Forward::xml_writeChildren ( XML_WRITECHILDREN_ARGS  ) const [protected, virtual]

Reimplemented from DinverCore::AbstractForward.

References TRACE, and QGpCoreTools::XMLClass::xml_save().

{
  TRACE;
  _targets->xml_save(s, context);
  _paramModel->xml_save(s, context);
}
virtual void Forward::xml_writeChildren ( XML_WRITECHILDREN_ARGS  ) const [virtual]

Reimplemented from DinverCore::AbstractForward.


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