| [27afbf] | 1 | /* | 
|---|
|  | 2 | * writeTable.hpp | 
|---|
|  | 3 | * | 
|---|
|  | 4 | *  Created on: Aug 3, 2012 | 
|---|
|  | 5 | *      Author: heber | 
|---|
|  | 6 | */ | 
|---|
|  | 7 |  | 
|---|
|  | 8 | #ifndef WRITETABLE_HPP_ | 
|---|
|  | 9 | #define WRITETABLE_HPP_ | 
|---|
|  | 10 |  | 
|---|
|  | 11 |  | 
|---|
|  | 12 | // include config.h | 
|---|
|  | 13 | #ifdef HAVE_CONFIG_H | 
|---|
|  | 14 | #include <config.h> | 
|---|
|  | 15 | #endif | 
|---|
|  | 16 |  | 
|---|
|  | 17 | #include <boost/mpl/for_each.hpp> | 
|---|
|  | 18 |  | 
|---|
|  | 19 | #include <string> | 
|---|
|  | 20 | #include <sstream> | 
|---|
|  | 21 | #include <vector> | 
|---|
|  | 22 |  | 
|---|
|  | 23 | #include "Fragmentation/Summation/HeaderPrinter.hpp" | 
|---|
|  | 24 | #include "Fragmentation/Summation/ValuePrinter.hpp" | 
|---|
|  | 25 |  | 
|---|
|  | 26 | /** Templated functor to write from a given vector of summed up results the | 
|---|
|  | 27 | * table with decent header line. | 
|---|
|  | 28 | * | 
|---|
|  | 29 | * @param results vector of results of MapType | 
|---|
|  | 30 | * @param MaxLevel print values up till this level | 
|---|
|  | 31 | * @return string of the resulting table | 
|---|
|  | 32 | */ | 
|---|
|  | 33 | template <typename MapType, typename VectorType, int numprecision=10> | 
|---|
|  | 34 | struct writeTable{ | 
|---|
|  | 35 | std::string operator()(const std::vector<MapType> &results, const size_t MaxLevel, const size_t StartLevel=1) | 
|---|
|  | 36 | { | 
|---|
|  | 37 | std::stringstream resultstream; | 
|---|
| [bf12d1] | 38 |  | 
|---|
|  | 39 | /// create header line for energy | 
|---|
| [47cee7] | 40 | resultstream << "level"; | 
|---|
|  | 41 | HeaderPrinter header; | 
|---|
| [27afbf] | 42 | boost::mpl::for_each<VectorType>(boost::ref(header)); | 
|---|
|  | 43 | resultstream << header.get() << std::endl; | 
|---|
|  | 44 |  | 
|---|
| [bf12d1] | 45 | /// print values per line | 
|---|
|  | 46 | if (MaxLevel >= StartLevel) { | 
|---|
|  | 47 | ASSERT( results.size() >= (MaxLevel-StartLevel), | 
|---|
|  | 48 | "writeTable<M,V>() - results has insufficient size."); | 
|---|
|  | 49 | for (size_t level = StartLevel; level <= MaxLevel; ++level) { | 
|---|
| [47cee7] | 50 | resultstream << level; | 
|---|
|  | 51 | ValuePrinter<MapType, numprecision> values(results[level-1]); | 
|---|
| [bf12d1] | 52 | boost::mpl::for_each<VectorType>(boost::ref(values)); | 
|---|
|  | 53 | resultstream << values.get() << std::endl; | 
|---|
|  | 54 | } | 
|---|
|  | 55 | } else { | 
|---|
|  | 56 | ELOG(2, "writeTable does not output as MaxLevel(" << MaxLevel | 
|---|
|  | 57 | << ") < StartLevel(" << StartLevel << "."); | 
|---|
| [27afbf] | 58 | } | 
|---|
|  | 59 | return resultstream.str(); | 
|---|
|  | 60 | } | 
|---|
|  | 61 | }; | 
|---|
|  | 62 |  | 
|---|
|  | 63 |  | 
|---|
|  | 64 | #endif /* WRITETABLE_HPP_ */ | 
|---|