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

Brief description of class still missing. More...

#include <BatchRun.h>

List of all members.

Public Member Functions

 BatchRun (QObject *parent=0)
bool importanceSampling (int ns, int seed, QString baseFileName, QString fileName, ReportWriter::Action reportAction)
bool neighborhoodOptimization (int ns0, int ns, int nr, int expectedBestModelCount, double maximumSavedMisfit, QString fileName, ReportWriter::Action reportAction)
bool setParameters (const QString &paramFile)
bool setTargets (const QString &targetFile)
bool snoopOptimization (int seed, QString fileName, ReportWriter::Action reportAction)
 ~BatchRun ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

DinverCore::BatchRun::BatchRun ( QObject *  parent = 0)

Description of constructor still missing

References TRACE.

    : QObject(parent)
{
  TRACE;
}

Description of destructor still missing

References TRACE.

{
  TRACE;
}

Member Function Documentation

bool DinverCore::BatchRun::importanceSampling ( int  ns,
int  seed,
QString  baseFileName,
QString  fileName,
ReportWriter::Action  reportAction 
)

References QGpCoreTools::endl(), DinverCore::ImportanceSampling::generate(), DinverCore::ImportanceSampling::importModels(), DinverCore::ReportWriter::initReport(), DinverCore::ImportanceSampling::openReport(), DinverCore::ImportanceSampling::setForward(), DinverCore::ImportanceSampling::setSeed(), QGpCoreTools::tr(), and TRACE.

Referenced by modeImportanceSampling().

{
  TRACE;
  AbstractForward * forward=createForward();
  if(!forward) return false;

  ImportanceSampling is;
  is.setForward(forward);
  is.setSeed(seed);
  if(!ReportWriter::initReport(fileName, tr("Starting inversion run"), reportAction)) {
    App::stream() << tr("Run not started") << endl;
    return false;
  }
  if(!is.openReport(fileName)) {
    App::stream() << tr("Error opening output report %1").arg(fileName) << endl;
    return false;
  }
  if(!is.importModels(baseFileName)) {
    App::stream() << tr("Error opening output report %1").arg(fileName) << endl;
    return false;
  }
  is.generate(ns);
  return true;
}
bool DinverCore::BatchRun::neighborhoodOptimization ( int  ns0,
int  ns,
int  nr,
int  expectedBestModelCount,
double  maximumSavedMisfit,
QString  fileName,
ReportWriter::Action  reportAction 
)

References DinverCore::ReportWriter::Append, DinverCore::RealSpace::checksum(), QGpCoreTools::endl(), DinverCore::ModelRepository::importModels(), DinverCore::ReportWriter::initReport(), LOCAL_POINTER, DinverCore::Generator::MonteCarlo, DinverCore::Generator::Neighborhood, DinverCore::ModelRepository::openReport(), DinverCore::AbstractForward::parameterSpace(), DinverCore::ModelRepository::printActiveModels(), DinverCore::ModelRepository::setForward(), DinverCore::ModelRepository::setMaximumBestModelCount(), DinverCore::ModelRepository::setMaximumModelCount(), DinverCore::ModelRepository::setMaximumQueueLength(), DinverCore::ModelRepository::setMaximumSavedMisfit(), DinverCore::ModelRepository::setStorage(), DinverCore::ModelRepository::start(), QGpCoreTools::tr(), TRACE, DinverCore::ModelRepository::validModelCount(), DinverCore::RealSpace::variableParameterCount(), and DinverCore::ModelRepository::wait().

Referenced by modeNeighborhoodOptimization().

{
  TRACE;
  AbstractForward * forward=createForward();
  LOCAL_POINTER(AbstractForward, forward);
  if(!forward) return false;

  ModelRepository rep;
  rep.setForward(forward);
  rep.setStorage();
  rep.setMaximumSavedMisfit(maximumSavedMisfit);
  rep.setMaximumBestModelCount(expectedBestModelCount);
  rep.setMaximumQueueLength(100);

  if(!ReportWriter::initReport(fileName, tr("Starting inversion run"), reportAction)) {
    App::stream() << tr("Run not started") << endl;
    return false;
  }
  if(reportAction==ReportWriter::Append) {
    rep.importModels(fileName, true);
  }
  if(!rep.openReport(fileName)) {
    App::stream() << tr("Error opening output report %1").arg(fileName) << endl;
    return false;
  }

  App::stream() << tr("\n---------------------- Starting at ")
                << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") << "\n\n"
                << tr(" Num samples Monte-Carlo             =%1\n").arg(ns0)
                << tr(" Num samples Neighborhood            =%1\n").arg(ns)
                << tr(" Num cells to resample               =%1\n").arg(nr)
                << tr(" Num cells to resample               =%1\n").arg(nr)
                << tr(" Num of walks before accepting model =%1\n").arg(2)
                << tr(" Max reject ratio before cell give up=%1\n").arg(0.9)
                << tr(" Dimension of parameter space        =%1\n").arg(forward->parameterSpace().variableParameterCount())
                << tr(" Parameterization checksum           =%1\n").arg(forward->parameterSpace().checksum())
                << tr(" Total number of models              =%1\n").arg(rep.validModelCount()+ns0+ns)
                << tr(" Model file                          =%1\n").arg(fileName) << endl;

  QTime chrono;
  chrono.start();
  rep.setMaximumModelCount(ns0);
  if(!rep.start(Thread::idealThreadCount(), Generator::MonteCarlo)) {
    App::stream() << tr("Error in initialization of first model (Monte-Carlo)") << endl;
    return false;
  }
  rep.wait();
  int monteCarloTime=chrono.elapsed();

  rep.setMaximumModelCount(ns);
  if(!rep.start(Thread::idealThreadCount(), Generator::Neighborhood)) {
    App::stream() << tr("Error in initialization of first model (Neighborhood)") << endl;
    return false;
  }
  rep.wait();
  int neighborhoodTime=chrono.elapsed()-monteCarloTime;
  // Time report:
  App::stream() << tr("\nGlobal timing report\n"
                "--------------\n") << endl;
  App::stream() << tr("Monte-Carlo generation: %1 ms (%2 models/s)").arg(monteCarloTime).arg(1000.0*ns0/monteCarloTime) << endl;
  App::stream() << tr("Neighborhood generation: %1 ms (%2 models/s)").arg(neighborhoodTime).arg(1000.0*ns/neighborhoodTime) << endl;
  rep.printActiveModels();
  return true;
}
bool DinverCore::BatchRun::setParameters ( const QString &  paramFile)

References DinverCore::dinverCore, QGpCoreTools::endl(), DinverCore::DinverInterface::isValid(), DinverCore::XMLDinverContext::Parameters, DinverCore::DinverCoreObject::plugin(), QGpCoreTools::tr(), TRACE, QGpCoreTools::XMLHeader::xml_restoreFile(), and DinverCore::DinverInterface::xmlSupport().

Referenced by modeImportanceSampling(), modeNeighborhoodOptimization(), and modeSnoopOptimization().

{
  TRACE;
  if(!dinverCore->plugin() || !dinverCore->plugin()->isValid()) {
    App::stream() << tr("No plugin selected or not a valid plugin (check versions)") << endl;
    return false;
  }
  if(!dinverCore->plugin()->xmlSupport()) {
    App::stream() << tr("Plugin does not support importation of parameters from XML") << endl;
    return false;
  }
  XMLDinverContext dinverContext(XMLDinverContext::Parameters);
  XMLDinver dinver;
  XMLDinverHeader hdr(&dinver);
  return hdr.xml_restoreFile(paramFile, &dinverContext)==XMLClass::NoError;
}
bool DinverCore::BatchRun::setTargets ( const QString &  targetFile)

References DinverCore::dinverCore, QGpCoreTools::endl(), DinverCore::DinverInterface::isValid(), DinverCore::DinverCoreObject::plugin(), DinverCore::XMLDinverContext::Targets, QGpCoreTools::tr(), TRACE, QGpCoreTools::XMLHeader::xml_restoreFile(), and DinverCore::DinverInterface::xmlSupport().

Referenced by modeNeighborhoodOptimization(), and modeSnoopOptimization().

{
  TRACE;
  if(!dinverCore->plugin() || !dinverCore->plugin()->isValid()) {
    App::stream() << tr("No plugin selected or not a valid plugin (check versions)") << endl;
    return false;
  }
  if(!dinverCore->plugin()->xmlSupport()) {
    App::stream() << tr("Plugin does not support importation of targets from XML") << endl;
    return false;
  }
  XMLDinverContext dinverContext(XMLDinverContext::Targets);
  XMLDinver dinver;
  XMLDinverHeader hdr(&dinver);
  return hdr.xml_restoreFile(targetFile, &dinverContext)==XMLClass::NoError;
}
bool DinverCore::BatchRun::snoopOptimization ( int  seed,
QString  fileName,
ReportWriter::Action  reportAction 
)

References DinverCore::GridSnoop::checksum(), QGpCoreTools::endl(), DinverCore::ReportWriter::initReport(), DinverCore::GridSnoop::openReport(), DinverCore::GridSnoop::optimization(), DinverCore::GridSnoop::setForward(), DinverCore::GridSnoop::setSeed(), DinverCore::GridSnoop::setThreadCount(), DinverCore::GridSnoop::sleep(), QGpCoreTools::tr(), TRACE, DinverCore::GridSnoop::variableParameterCount(), and DinverCore::GridSnoop::wake().

Referenced by modeSnoopOptimization().

{
  TRACE;
  AbstractForward * forward=createForward();
  if(!forward) return false;

  // Though random generator can generate its own seed from time if seed is null,
  // it's better to generate it here for proper reporting to user
  if(seed==0) {
    seed=rand();
  }

  GridSnoop gs;
  gs.setForward(forward);
  gs.setSeed(seed);
  gs.wake();

  if(!ReportWriter::initReport(fileName, tr("Starting inversion run"), reportAction)) {
    App::stream() << tr("Run not started") << endl;
    delete forward;
    return false;
  }
  //if(reportAction==ReportWriter::Append) {
  //  na.importModels(fileName, true);
  //}
  if(!gs.openReport(fileName)) {
    App::stream() << tr("Error opening output report %1").arg(fileName) << endl;
    delete forward;
    return false;
  }

  if(!gs.setThreadCount(Thread::idealThreadCount())) {
    App::stream() << tr("Error in initialization of first model") << endl;
    return false;
  }

  App::stream() << tr("\n---------------------- Starting at ")
                << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") << "\n\n"
                << tr(" Random seed                         =%1\n\n").arg(seed)
                << tr(" Dimension of parameter space        =%1\n").arg(gs.variableParameterCount())
                << tr(" Parameterization checksum           =%1\n").arg(gs.checksum())
                << tr(" Model file                          =%1\n").arg(fileName) << endl;

  if(! gs.optimization()) {
    return false;
  }
  //gs.timeReport();
  gs.sleep();
  return true;
}

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