Public Types | Public Member Functions | Protected Member Functions
HistogramReader Class Reference

Brief description of class still missing. More...

#include <HistogramReader.h>

Inheritance diagram for HistogramReader:
QGpCoreTools::ArgumentStdinReader

List of all members.

Public Types

enum  Action {
  Gui, Mean, Median, Mode,
  Grid
}
enum  ManualLimit {
  NoManualLimits = 0x00, MinimumX = 0x01, MaximumX = 0x02, MinimumY = 0x04,
  MaximumY = 0x08, AllManualLimits = 0x0F
}

Public Member Functions

Action action () const
Histogram2Dhistogram () const
 HistogramReader ()
bool setDefaultLimits ()
bool setOptions (int &argc, char **argv)

Protected Member Functions

virtual bool parse (QTextStream &s)

Detailed Description

Brief description of class still missing.

Full description of class still missing


Member Enumeration Documentation

Enumerator:
Gui 
Mean 
Median 
Mode 
Grid 
Enumerator:
NoManualLimits 
MinimumX 
MaximumX 
MinimumY 
MaximumY 
AllManualLimits 
{NoManualLimits=0x00, MinimumX=0x01, MaximumX=0x02, MinimumY=0x04, MaximumY=0x08, AllManualLimits=0x0F};

Constructor & Destructor Documentation

Description of constructor still missing

References Gui, QGpCoreTools::LinearScale, NoManualLimits, and TRACE.

    : ArgumentStdinReader()
{
  TRACE;
  _action=Gui;
  _xSamplingType=LinearScale;
  _xMin=0.0;
  _xMax=0.0;
  _xCount=100;
  _ySamplingType=LinearScale;
  _yMin=0.0;
  _yMax=0.0;
  _yCount=100;
  _manualLimits=NoManualLimits;
}

Member Function Documentation

Action HistogramReader::action ( ) const [inline]

Referenced by main().

{return _action;}

References QGpCoreTools::endl(), Histogram2D::setSamples(), Histogram2D::setXSampling(), Histogram2D::setYSampling(), QGpCoreTools::tr(), and TRACE.

Referenced by main().

{
  TRACE;
  Histogram2D * h=new Histogram2D(_xCount, _yCount);
  App::stream() << tr("X axis from %1 to %2 with %3 bins").arg(_xMin).arg(_xMax).arg(_xCount) << endl;
  h->setXSampling(_xMin, _xMax, _xSamplingType);
  App::stream() << tr("Y axis from %1 to %2 with %3 bins").arg(_yMin).arg(_yMax).arg(_yCount) << endl;
  h->setYSampling(_yMin, _yMax, _ySamplingType);
  h->setSamples(_samples);
  return h;
}
bool HistogramReader::parse ( QTextStream &  s) [protected, virtual]

Implements QGpCoreTools::ArgumentStdinReader.

References QGpCoreTools::ConsoleProgress::begin(), QGpCoreTools::ConsoleProgress::end(), Sample::read(), QGpCoreTools::ConsoleProgress::setCaption(), QGpCoreTools::AbstractProgress::setValue(), and TRACE.

{
  TRACE;
  ConsoleProgress progress;
  progress.setCaption("Loading...  ");
  progress.begin();
  Sample sample;
  while(true) {
    if(sample.read(s)) {
      _samples.append(sample);
    } else {
      break;
    }
    progress.setValue(_samples.count());
  }
  progress.end(_samples.count());
  return true;
}

Computes default limits from samples

References AllManualLimits, QGpCoreTools::endl(), MaximumX, MaximumY, MinimumX, MinimumY, QGpCoreTools::tr(), and TRACE.

Referenced by main().

{
  TRACE;
  if(_manualLimits==AllManualLimits) return true;
  QVector<Sample>::iterator it=_samples.begin();
  if(it==_samples.end()) {
    App::stream() << tr("No samples available") << endl;
    return false;
  }
  if(!(_manualLimits & MinimumX)) {
    _xMin=it->x();
    for(it++; it!=_samples.end(); it++) {
      if(it->x()<_xMin) _xMin=it->x();
    }
  }
  if(!(_manualLimits & MaximumX)) {
    it=_samples.begin();
    _xMax=it->x();
    for(it++; it!=_samples.end(); it++) {
      if(it->x()>_xMax) _xMax=it->x();
    }
  }
  if(!(_manualLimits & MinimumY)) {
    it=_samples.begin();
    _yMin=it->y();
    for(it++; it!=_samples.end(); it++) {
      if(it->y()<_yMin) _yMin=it->y();
    }
  }
  if(!(_manualLimits & MaximumY)) {
    it=_samples.begin();
    _yMax=it->y();
    for(it++; it!=_samples.end(); it++) {
      if(it->y()>_yMax) _yMax=it->y();
    }
  }
  return true;
}
bool HistogramReader::setOptions ( int &  argc,
char **  argv 
)

References QGpCoreTools::endl(), Grid, QGpCoreTools::InversedScale, QGpCoreTools::LinearScale, QGpCoreTools::LogScale, MaximumX, MaximumY, Mean, Median, MinimumX, MinimumY, Mode, QGpCoreTools::tr(), and TRACE.

Referenced by main().

{
  TRACE;
  // Check arguments
  int i, j=1;
  for(i=1; i<argc; i++) {
    QByteArray arg=argv[i];
    if(arg[0]=='-') {
      if(arg=="-x-sampling") {
        CoreApplication::checkOptionArg(i, argc, argv);
        if(strcmp(argv[i],"inversed")==0) {
          _xSamplingType=InversedScale;
        } else if(strcmp(argv[i],"log")==0) {
          _xSamplingType=LogScale;
        } else {
          _xSamplingType=LinearScale;
        }
      } else if(arg=="-x-min") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _xMin=atof(argv[i]);
        _manualLimits|=MinimumX;
      } else if(arg=="-x-max") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _xMax=atof(argv[i]);
        _manualLimits|=MaximumX;
      } else if(arg=="-x-count") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _xCount=atoi(argv[i]);
        if(_xCount<=0) {
          App::stream() << tr("gphistogram: negative or null number of X samples (option -x-count)") << endl;
          return false;
        }
      } else if(arg=="-y-sampling") {
        CoreApplication::checkOptionArg(i, argc, argv);
        if(strcmp(argv[i],"inversed")==0) {
          _ySamplingType=InversedScale;
        } else if(strcmp(argv[i],"log")==0) {
          _ySamplingType=LogScale;
        } else {
          _ySamplingType=LinearScale;
        }
      } else if(arg=="-y-min") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _yMin=atof(argv[i]);
        _manualLimits|=MinimumY;
      } else if(arg=="-y-max") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _yMax=atof(argv[i]);
        _manualLimits|=MaximumY;
      } else if(arg=="-y-count") {
        CoreApplication::checkOptionArg(i, argc, argv);
        _yCount=atoi(argv[i]);
        if(_yCount<=0) {
          App::stream() << tr("gphistogram: negative or null number of Y samples (option -y-count)") << endl;
          return false;
        }
      } else if(arg=="-grid") {
        _action=Grid;
      } else if(arg=="-mean") {
        _action=Mean;
      } else if(arg=="-median") {
        _action=Median;
      } else if(arg=="-mode") {
        _action=Mode;
      } else {
        App::stream() << tr("gphistogram: bad option %1, see -help").arg(argv[i]) << endl;
        return false;
      }
    } else {
      argv[j++]=argv[i];
    }
  }
  if(j < argc) {
    argv[j]=0;
    argc=j;
  }
  switch(_xSamplingType) {
  case LogScale:
  case InversedScale:
    if(_xMin<=0.0 || _xMax<=0.0) {
      App::stream() << tr("gphistogram: null or negative values not allowed for log and inversed scales (X axis)") << endl;
      return false;
    }
    break;
  default:
    break;
  }
  switch(_ySamplingType) {
  case LogScale:
  case InversedScale:
    if(_yMin<=0.0 || _yMax<=0.0) {
      App::stream() << tr("gphistogram: null or negative values not allowed for log and inversed scales (Y axis)") << endl;
      return false;
    }
    break;
  default:
    break;
  }
  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