This is an automated email from the git hooks/post-receive script. sebastic-guest pushed a commit to branch upstream-master in repository pktools.
commit 5af0025e4c3a1d635390df24894c3b6997446c89 Author: Pieter Kempeneers <kempe...@gmail.com> Date: Mon Sep 9 17:47:22 2013 +0200 corrected errors in FileReaderAscii --- ChangeLog | 4 +++ src/apps/pkstat.cc | 13 +++++++-- src/apps/pkstatogr.cc | 56 +++++++++++++++++++++++++++----------- src/fileclasses/FileReaderAscii.cc | 2 +- src/fileclasses/FileReaderAscii.h | 12 ++++---- 5 files changed, 62 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index 19ccbe1..1745593 100755 --- a/ChangeLog +++ b/ChangeLog @@ -118,7 +118,11 @@ version 2.4.1 ordering of labels before training version 2.4.2 - clean up of using namespace std in header files + - FileReaderAscii + corrected error for constructor with fieldseparator argument - pkinfo bug fixed with -min and -max - pkfilter new methods for scrambling and shifting images + - pkstatogr + make histogram more similar to pkstat with support of relative option diff --git a/src/apps/pkstat.cc b/src/apps/pkstat.cc index bec8c1a..10caf0d 100644 --- a/src/apps/pkstat.cc +++ b/src/apps/pkstat.cc @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) Optionpk<double> min_opt("min","min","set minimum value",0); Optionpk<double> max_opt("max","max","set maximum value",0); Optionpk<bool> histogram_opt("hist","hist","calculate histogram",false); - Optionpk<short> nbin_opt("bin","bin","number of bins to calculate histogram",10); + Optionpk<short> nbin_opt("bin","bin","number of bins to calculate histogram",0); Optionpk<bool> relative_opt("rel","relative","use percentiles for histogram to calculate histogram",false); Optionpk<bool> correlation_opt("cor","correlation","calculate Pearson produc-moment correlation coefficient between two columns (defined by -c <col1> -c <col2>",false); Optionpk<bool> rmse_opt("e","rmse","calculate root mean square error between two columns (defined by -c <col1> -c <col2>",false); @@ -101,9 +101,17 @@ int main(int argc, char *argv[]) asciiReader.setMaxRow(range_opt[1]); asciiReader.readData(dataVector,col_opt); assert(dataVector.size()); + statfactory::StatFactory stat; double minValue=min_opt[0]; double maxValue=max_opt[0]; - statfactory::StatFactory stat; + if(histogram_opt[0]){ + if(nbin_opt[0]<1){ + std::cerr << "Warning: number of bins not defined, calculating bins from min and max value" << std::endl; + if(maxValue<=minValue) + stat.minmax(dataVector[0],dataVector[0].begin(),dataVector[0].end(),minValue,maxValue); + nbin_opt[0]=maxValue-minValue+1; + } + } for(int icol=0;icol<col_opt.size();++icol){ if(!dataVector[icol].size()){ std::cerr << "Warning: dataVector[" << icol << "] is empty" << std::endl; @@ -132,6 +140,7 @@ int main(int argc, char *argv[]) cout << "max value column " << col_opt[icol] << ": " << stat.max(dataVector[icol]) << endl; } if(histogram_opt[0]){ + assert(nbin_opt[0]); if(verbose_opt[0]) std::cout << "calculating histogram for col " << icol << std::endl; stat.distribution(dataVector[icol],dataVector[icol].begin(),dataVector[icol].end(),statVector[icol],nbin_opt[0],minValue,maxValue); diff --git a/src/apps/pkstatogr.cc b/src/apps/pkstatogr.cc index 076259f..871b2c5 100644 --- a/src/apps/pkstatogr.cc +++ b/src/apps/pkstatogr.cc @@ -29,9 +29,12 @@ int main(int argc, char *argv[]) { Optionpk<string> input_opt("i", "input", "Input shape file", ""); Optionpk<string> fieldname_opt("n", "fname", "fields on which to calculate statistics", ""); + Optionpk<bool> minmax_opt("mm","minmax","calculate minimum and maximum value",false); + Optionpk<double> min_opt("min","min","set minimum value",0); + Optionpk<double> max_opt("max","max","set maximum value",0); + Optionpk<bool> histogram_opt("hist","hist","calculate histogram",false); Optionpk<short> nbin_opt("nbin", "nbin", "number of bins", 0); - Optionpk<bool> min_opt("min","min","calculate minimum value",false); - Optionpk<bool> max_opt("max","max","calculate maximum value",false); + Optionpk<bool> relative_opt("rel","relative","use percentiles for histogram to calculate histogram",false); Optionpk<bool> mean_opt("mean","mean","calculate mean value",false); Optionpk<bool> median_opt("median","median","calculate median value",false); Optionpk<bool> stdev_opt("stdev","stdev","calculate standard deviation",false); @@ -42,9 +45,12 @@ int main(int argc, char *argv[]) try{ doProcess=input_opt.retrieveOption(argc,argv); fieldname_opt.retrieveOption(argc,argv); - nbin_opt.retrieveOption(argc,argv); + minmax_opt.retrieveOption(argc,argv); min_opt.retrieveOption(argc,argv); max_opt.retrieveOption(argc,argv); + histogram_opt.retrieveOption(argc,argv); + nbin_opt.retrieveOption(argc,argv); + relative_opt.retrieveOption(argc,argv); mean_opt.retrieveOption(argc,argv); median_opt.retrieveOption(argc,argv); stdev_opt.retrieveOption(argc,argv); @@ -79,12 +85,26 @@ int main(int argc, char *argv[]) theData.clear(); inputReader.readData(theData,OFTReal,fieldname_opt[ifield],0,verbose_opt[0]); vector<int> binData; - double minimum=0; - double maximum=0; - int nbin=(nbin_opt[0]>1)? nbin_opt[0] : 2; + double minValue=min_opt[0]; + double maxValue=max_opt[0]; + if(histogram_opt[0]){ + if(nbin_opt[0]<1){ + if(maxValue<=minValue) + stat.minmax(theData,theData.begin(),theData.end(),minValue,maxValue); + nbin_opt[0]=maxValue-minValue+1; + } + assert(nbin_opt[0]); + try{ + stat.distribution(theData,theData.begin(),theData.end(),binData,nbin_opt[0],minValue,maxValue); + } + catch(string theError){ + std::cerr << "Warning: all identical values in data" << std::endl; + exit(1); + } + } + // int nbin=(nbin_opt[0]>1)? nbin_opt[0] : 2; std::cout << " --fname " << fieldname_opt[ifield]; try{ - stat.distribution(theData,theData.begin(),theData.end(),binData,nbin,minimum,maximum); double theMean=0; double theVar=0; stat.meanVar(theData,theMean,theVar); @@ -92,18 +112,22 @@ int main(int argc, char *argv[]) std::cout << " --mean " << theMean; if(stdev_opt[0]) std::cout << " --stdev " << sqrt(theVar); - if(min_opt[0]) - cout << " -m " << minimum; - if(max_opt[0]) - cout << " -M " << maximum; + if(minmax_opt[0]){ + cout << " -min " << stat.min(theData); + cout << " -max " << stat.max(theData); + } if(median_opt[0]) std::cout << " -median " << stat.median(theData); if(size_opt[0]) std::cout << " -size " << theData.size(); std::cout << std::endl; - if(nbin_opt[0]>1){ - for(int bin=0;bin<nbin;++bin) - std::cout << (maximum-minimum)*bin/(nbin-1)+minimum << " " << static_cast<double>(binData[bin])/theData.size() << std::endl; + if(histogram_opt[0]){ + for(int bin=0;bin<nbin_opt[0];++bin){ + if(relative_opt[0]) + std::cout << (maxValue-minValue)*bin/(nbin_opt[0]-1)+minValue << " " << 100.0*static_cast<double>(binData[bin])/theData.size() << std::endl; + else + std::cout << (maxValue-minValue)*bin/(nbin_opt[0]-1)+minValue << " " << binData[bin] << std::endl; + } } } catch(string theError){ @@ -112,9 +136,9 @@ int main(int argc, char *argv[]) if(stdev_opt[0]) std::cout << " --stdev " << "0"; if(min_opt[0]) - cout << " -m " << theData.back(); + cout << " -min " << theData.back(); if(max_opt[0]) - cout << " -M " << theData.back(); + cout << " -max " << theData.back(); if(median_opt[0]) std::cout << " -median " << theData.back(); if(size_opt[0]) diff --git a/src/fileclasses/FileReaderAscii.cc b/src/fileclasses/FileReaderAscii.cc index 9a43672..dd110e8 100644 --- a/src/fileclasses/FileReaderAscii.cc +++ b/src/fileclasses/FileReaderAscii.cc @@ -31,7 +31,7 @@ FileReaderAscii::FileReaderAscii(const std::string& filename) } FileReaderAscii::FileReaderAscii(const std::string& filename, const char& fieldseparator) - : m_min(0),m_max(0),m_minRow(0),m_maxRow(0),m_fs(' '),m_comment(fieldseparator){ + : m_min(0),m_max(0),m_minRow(0),m_maxRow(0),m_fs(fieldseparator),m_comment('#'){ open(filename); } diff --git a/src/fileclasses/FileReaderAscii.h b/src/fileclasses/FileReaderAscii.h index e1e9e83..e407d1e 100644 --- a/src/fileclasses/FileReaderAscii.h +++ b/src/fileclasses/FileReaderAscii.h @@ -83,13 +83,13 @@ template<class T> unsigned int FileReaderAscii::readData(std::vector<T> &dataVec std::cout << item << " "; unsigned pos=item.find(m_comment); if(pos!=std::string::npos){ + isComment=true; if(pos>0) item=item.substr(0,pos-1); else break; if(verbose) std::cout << "comment found, string is " << item << std::endl; - isComment=true; } if(ncol==col){ T value=scale*string2type<T>(item)+offset; @@ -136,13 +136,13 @@ template<class T> unsigned int FileReaderAscii::readData(std::vector<T> &dataVec // std::istringstream itemStream(item); unsigned pos=item.find(m_comment); if(pos!=std::string::npos){ + isComment=true; if(pos>0) item=item.substr(0,pos-1); else break; if(verbose) std::cout << "comment found, string is " << item << std::endl; - isComment=true; } T value=scale*string2type<T>(item)+offset; // T value=string2type<T>(item); @@ -199,13 +199,13 @@ template<class T> unsigned int FileReaderAscii::readData(std::vector<std::vector std::cout << item << " "; unsigned pos=item.find(m_comment); if(pos!=std::string::npos){ + isComment=true; if(pos>0) item=item.substr(0,pos-1); else break; if(verbose) std::cout << "comment found, string is " << item << std::endl; - isComment=true; } for(int icol=0;icol<cols.size();++icol){ if(ncol==cols[icol]){ @@ -228,7 +228,7 @@ template<class T> unsigned int FileReaderAscii::readData(std::vector<std::vector // if(dataVector.back().size()) // assert(ncol>=cols[0]); } - if(transpose) + if(sampleVector.size()&&transpose) dataVector.push_back(sampleVector); ++nrow; } @@ -259,13 +259,13 @@ template<class T> unsigned int FileReaderAscii::readData(std::vector<std::vector // std::istringstream itemStream(item); unsigned pos=item.find(m_comment); if(pos!=std::string::npos){ + isComment=true; if(pos>0) item=item.substr(0,pos-1); else break; if(verbose) std::cout << "comment found, string is " << item << std::endl; - isComment=true; } T value=scale*string2type<T>(item)+offset; // T value=string2type<T>(item); @@ -290,7 +290,7 @@ template<class T> unsigned int FileReaderAscii::readData(std::vector<std::vector // if(dataVector.back().size()) // assert(ncol>=cols[0]); } - if(transpose) + if(sampleVector.size()&&transpose) dataVector.push_back(sampleVector); ++nrow; } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel