[pktools] 128/375: corrected errors in FileReaderAscii
Bas Couwenberg
sebastic at xs4all.nl
Wed Dec 3 21:54:06 UTC 2014
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 <kempenep at 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
More information about the Pkg-grass-devel
mailing list