/* histogram.h Mark Woolrich, FMRIB Image Analysis Group Copyright (C) 1999-2000 University of Oxford */ /* CCOPYRIGHT */ #if !defined(__histogram_h) #define __histogram_h #define WANT_STREAM #define WANT_MATH #include "newmat/newmatap.h" #include "newmat/newmatio.h" #include "miscmaths.h" using namespace NEWMAT; namespace MISCMATHS { class Histogram { public: Histogram(const ColumnVector& psourceData, int numBins) : sourceData(psourceData), calcRange(true), bins(numBins){} Histogram(const ColumnVector& psourceData, float phistMin, float phistMax, int numBins) : sourceData(psourceData), calcRange(false), histMin(phistMin), histMax(phistMax), bins(numBins){} void generate(); float getHistMin() const {return histMin;} float getHistMax() const {return histMax;} void setHistMax(float phistMax) {histMax = phistMax;} void setHistMin(float phistMin) {histMin = phistMin;} int integrateAll() {return sourceData.Nrows();} const ColumnVector& getData() {return histogram;} int integrateToInf(float value) const { return integrate(value, histMax); } int integrateFromInf(float value) const { return integrate(histMin, value); } int integrate(float value1, float value2) const; float mode() const; int getBin(float value) const; float getValue(int bin) const; protected: private: Histogram(); const Histogram& operator=(Histogram&); Histogram(Histogram&); const ColumnVector& sourceData; ColumnVector histogram; bool calcRange; float histMin; float histMax; int bins; // number of bins in histogram }; inline int Histogram::getBin(float value) const { return Max(1, Min((int)((((float)bins)*((float)(value-histMin)))/((float)(histMax-histMin))),bins)); } inline float Histogram::getValue(int bin) const { return (bin*(histMax-histMin))/(float)bins + histMin; } } #endif