triskele/include/TreeStats.hpp
Git Merciol 952f2ddea5 modifié : include/ArrayTree/ArrayTreeBuilder.tpp
modifié :         include/TreeStats.hpp
	modifié :         src/Appli/Option.cpp
	modifié :         src/TreeStats.cpp
2018-03-16 14:11:36 +01:00

92 lines
2.6 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 "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,
buildParentsStats,
buildMergeStats,
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