All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions
DinverCore::ImportanceSampling Class Reference

Brief description of class still missing. More...

#include <ImportanceSampling.h>

List of all members.

Public Member Functions

void generate (int ns=5000, int nw=2)
 ImportanceSampling ()
bool importModels (QString fileName, bool strict=true)
bool openReport (const QString &fileName)
void setForward (AbstractForward *forward)
void setSeed (int seed)
 ~ImportanceSampling ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References TRACE.

{
  TRACE;
  _forward=0;
  _models=0;
  _randomGenerator=new UniqueRandom(0);
  _report=0;
  _parameterSpaceChecksum=0;
}

Description of destructor still missing

References TRACE.

{
  TRACE;
  delete _models;
  delete _report;
  delete _randomGenerator;
  delete _forward;
}

Member Function Documentation

void DinverCore::ImportanceSampling::generate ( int  ns = 5000,
int  nw = 2 
)

References DinverCore::ReportWriter::addModel(), QGpCoreTools::ConsoleProgress::begin(), DinverCore::ModelSet::count(), DinverCore::VoronoiNavigator::currentAxis(), QGpCoreTools::ConsoleProgress::end(), DinverCore::Parameter::getGridLimits(), DinverCore::VoronoiNavigator::incrementAxis(), DinverCore::VoronoiNavigator::intersections(), DinverCore::Parameter::isFussy(), DinverCore::AbstractForward::isFussyOk(), DinverCore::ModelSet::model(), DinverCore::AbstractForward::parameterSpace(), DinverCore::PdfCurve::randomValue(), SAFE_UNINITIALIZED, QGpCoreTools::ConsoleProgress::setCaption(), DinverCore::VoronoiNavigator::setCurrentAxis(), DinverCore::VoronoiNavigator::setCurrentCell(), DinverCore::VoronoiNavigator::setCurrentPoint(), DinverCore::Parameter::setGridValue(), QGpCoreTools::AbstractProgress::setValue(), DinverCore::VoronoiNavigator::setValue(), sOut(), QGpCoreTools::tr(), DinverCore::UniqueRandom::uniform(), DinverCore::AbstractForward::valueChanged(), DinverCore::RealSpace::variableParameter(), DinverCore::RealSpace::variableParameterCount(), and DinverCore::AbstractForward::writeReport().

Referenced by DinverCore::BatchRun::importanceSampling().

{
  RealSpace& parameterSpace=_forward->parameterSpace();
  int ndVar=parameterSpace.variableParameterCount();
  ScaledModels scaledModels(_models, scales());
  VoronoiNavigator nav(&scaledModels);

  // Start sampling from any random model
  int modelIndex=_randomGenerator->uniform(0, _models->count()-1);
  nav.setCurrentPoint(modelIndex);
  const int * m=_models->model(modelIndex);
  for(int i=0; i < ndVar; i++) {
    parameterSpace.variableParameter(i)->setGridValue(m[i]);
  }
  _forward->valueChanged();

  ConsoleProgress progress;
  progress.setCaption(tr("Generating models"));
  progress.begin();
  int nStep=ndVar * nw;
  double xMin, xMax;
  SAFE_UNINITIALIZED(xMin,0);
  SAFE_UNINITIALIZED(xMax,0);
  int cellIndex;
  double v;
  PdfCurve pdf;
  QTextStream sOut(stdout);
  for(int is=0;is<ns;is++) {
    progress.setValue(is);
    nav.setCurrentAxis(ndVar-1);
    for(int iStep=0;iStep < nStep;iStep++ ) {
      //nav.printCurrentPoint();
      //nav.checkCurrentPoint();
      nav.incrementAxis();
      Parameter * p=parameterSpace.variableParameter(nav.currentAxis());
      p->getGridLimits(xMin, xMax);
      //if(iStep==14 || iStep==31) {
        //sOut << "#" << xMin << " " << xMax << " " << p->gridValue(1480) << " " << p->gridValue(1540) << endl;
      //}
      pdf=nav.intersections(xMin, xMax);
      //if(iStep==14 || iStep==31) {
        //sOut << "#" << p->name() << endl;
        //pdf.printCumulative(*_models, *p);
        //pdf.toStream(sOut, *_models);
      //}
      if(p->isFussy()) {     // Parameters tagged as fussy need a validation of the random value
        do {
          v=pdf.randomValue(*_randomGenerator, *_models, cellIndex);
          p->setGridValue(v);
          // Some parametrizations may need some updates before proceeding
          _forward->valueChanged(p);
        } while( !_forward->isFussyOk(p));
        nav.setValue(v);
      } else {
        v=pdf.randomValue(*_randomGenerator, *_models, cellIndex);
        nav.setValue(v);
        p->setGridValue(v);
        _forward->valueChanged(p);  // Some parametrizations may need some updates before proceeding
      }
      nav.setCurrentCell(cellIndex);
    }
    _report->addModel(0.0, _parameterSpaceChecksum, parameterSpace);
    _forward->writeReport(_report);
  }
  progress.end(ns);
}
bool DinverCore::ImportanceSampling::importModels ( QString  fileName,
bool  strict = true 
)
bool DinverCore::ImportanceSampling::openReport ( const QString &  fileName)

Initialize report. Can be called at any time.

References QGpCoreTools::endl(), DinverCore::ReportWriter::open(), and QGpCoreTools::tr().

Referenced by DinverCore::BatchRun::importanceSampling().

{
  if( !fileName.isEmpty()) {
    delete _report;
    _report=new ReportWriter(fileName);
    if( !_report->open()) {
      App::stream() << tr("Cannot open report %1 for writing").arg(fileName) << endl;
      delete _report;
      _report=0;
      return false;
    }
  }
  return true;
}

References DinverCore::RealSpace::checksum(), DinverCore::AbstractForward::parameterSpace(), and DinverCore::RealSpace::variableParameterCount().

Referenced by DinverCore::BatchRun::importanceSampling().

{
  ASSERT(!_forward);
  _forward=forward;
  RealSpace& parameterSpace=_forward->parameterSpace();
  _parameterSpaceChecksum=parameterSpace.checksum();
  // With importance sampling, misfit is never computed, used the smallest misfit vector: 1
  _models=new ModelSet(parameterSpace.variableParameterCount(), 1);
}

Referenced by DinverCore::BatchRun::importanceSampling().

{
  delete _randomGenerator;
  _randomGenerator=new UniqueRandom(seed);
}

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