triskele/include/TreeStats.hpp
2018-08-04 11:12:26 +02:00

97 lines
2.7 KiB
C++

#ifndef _OTB_TRISKELE_TREE_STATS_HPP
#define _OTB_TRISKELE_TREE_STATS_HPP
#include <iostream>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/sum.hpp>
#include <boost/accumulators/statistics/count.hpp>
#include <boost/accumulators/statistics/min.hpp>
#include <boost/accumulators/statistics/max.hpp>
#include <boost/accumulators/statistics/mean.hpp>
#include "triskeleDebug.hpp"
#include "ArrayTree/triskeleArrayTreeBase.hpp"
namespace otb {
namespace triskele {
using namespace otb::triskele::arrayTree;
using namespace std;
namespace ba = boost::accumulators;
typedef ba::accumulator_set<DimImg, ba::stats<ba::tag::count,
ba::tag::mean,
ba::tag::min,
ba::tag::max> > TreeStatsDim;
typedef ba::accumulator_set<double, ba::stats<ba::tag::sum,
ba::tag::count,
ba::tag::mean,
ba::tag::min,
ba::tag::max> > TreeStatsDouble;
enum TimeType {
buildTreeStats,
buildSetupStats,
buildToTilesStats,
buildEdgesStats,
buildParentsStats,
buildFromTilesStats,
buildMergeStats,
buildForestStats,
buildIndexStats,
buildCompressStats,
buildChildrenStats,
setAPStats,
areaStats,
averageStats,
xyStats,
moiStats,
sdStats,
filteringStats,
copyImageStats,
readStats,
writeStats,
allStats,
TimeTypeCard
};
class TreeStats {
public :
void reset ();
inline void addDim (const TreeType &treeType, const DimImg& leafCount, const DimImg& compCount);
inline void addTime (const TimeType &timeType, const double &duration);
inline const TreeStatsDouble &getTimeStats (const TimeType &timeType);
// nice ostream
struct CPrintDim {
const TreeStats &treeStats;
CPrintDim (const TreeStats &treeStats);
ostream &print (ostream &out) const;
ostream &print (ostream &out, const TreeStatsDim stats[], const string &msg) const;
};
CPrintDim printDim () const;
friend ostream &operator << (ostream& out, const CPrintDim &cpd) { return cpd.print (out); }
struct CPrintTime {
const TreeStats &treeStats;
CPrintTime (const TreeStats &treeStats);
ostream &print (ostream &out) const;
};
CPrintTime printTime () const;
friend ostream &operator << (ostream& out, const CPrintTime &cpt) { return cpt.print (out); }
private :
TreeStatsDim leavesStats[TreeTypeCard], compStats[TreeTypeCard];
TreeStatsDouble timeStats[TimeTypeCard];
};
static TreeStats globalTreeStats;
#include "TreeStats.tpp"
} // triskele
} // otb
#endif // _OTB_TRISKELE_TREE_HPP