| 1 | /* |
| 2 | * vector_dist_performance_util.cpp |
| 3 | * |
| 4 | * Created on: Feb 14, 2018 |
| 5 | * Author: i-bird |
| 6 | */ |
| 7 | |
| 8 | ///////////////////////////// CONSTRUCT GRAPH ////////////////////////////// |
| 9 | |
| 10 | #include "vector_dist_performance_util.hpp" |
| 11 | #include "Plot/GoogleChart.hpp" |
| 12 | #include <boost/property_tree/xml_parser.hpp> |
| 13 | #include <boost/foreach.hpp> |
| 14 | #include "util/performance/performance_util.hpp" |
| 15 | |
| 16 | |
| 17 | /*! \brief Draw a standard performance graph |
| 18 | * |
| 19 | * \param file_mean |
| 20 | * |
| 21 | * |
| 22 | */ |
| 23 | void StandardPerformanceGraph(std::string file_mean, |
| 24 | std::string file_var, |
| 25 | std::string file_mean_save, |
| 26 | std::string file_var_save, |
| 27 | GoogleChart & cg, |
| 28 | openfpm::vector<size_t> & xp, |
| 29 | openfpm::vector<openfpm::vector<openfpm::vector<double>>> & yp_mean, |
| 30 | openfpm::vector<openfpm::vector<openfpm::vector<double>>> & yp_dev, |
| 31 | openfpm::vector<std::string> & names, |
| 32 | openfpm::vector<std::string> & gnames, |
| 33 | std::string x_string, |
| 34 | std::string y_string, |
| 35 | bool use_log) |
| 36 | { |
| 37 | openfpm::vector<openfpm::vector<openfpm::vector<double>>> y_ref_mean; |
| 38 | openfpm::vector<openfpm::vector<openfpm::vector<double>>> y_ref_dev; |
| 39 | y_ref_mean.load(file_mean); |
| 40 | y_ref_dev.load(file_var); |
| 41 | |
| 42 | // warning level |
| 43 | openfpm::vector<int> warning_vlevel; |
| 44 | |
| 45 | // Calculation time graphs data |
| 46 | |
| 47 | openfpm::vector<size_t> x; |
| 48 | openfpm::vector<openfpm::vector<openfpm::vector<double>>> y2; |
| 49 | openfpm::vector<openfpm::vector<openfpm::vector<double>>> y2_dev; |
| 50 | openfpm::vector<std::string> yn2; |
| 51 | |
| 52 | if (names.size() == 0) |
| 53 | return; |
| 54 | |
| 55 | for (size_t i = 0 ; i < names.size() ; i++) |
| 56 | yn2.add(names.get(i)); |
| 57 | |
| 58 | for (size_t i = 0; i < xp.size() ; i++) |
| 59 | x.add(xp.get(i)); |
| 60 | |
| 61 | yp_mean.save(file_mean_save); |
| 62 | yp_dev.save(file_var_save); |
| 63 | |
| 64 | if (y_ref_mean.size() != 0 && yp_mean.size() != 0 && yp_mean.get(0).size() != 0) |
| 65 | { |
| 66 | // We reconstruct y and yn |
| 67 | |
| 68 | y2.clear(); |
| 69 | yn2.clear(); |
| 70 | |
| 71 | for (size_t i = 0 ; i < yp_mean.get(0).get(0).size() ; i++) |
| 72 | { |
| 73 | yn2.add(names.get(i)); |
| 74 | yn2.add("interval" ); |
| 75 | yn2.add("interval" ); |
| 76 | } |
| 77 | |
| 78 | y2.resize(yp_mean.size()); |
| 79 | for (size_t r = 0; r < yp_mean.size(); r++) |
| 80 | { |
| 81 | int warning_level = -1; |
| 82 | |
| 83 | y2.get(r).resize(yp_mean.get(r).size()); |
| 84 | for (size_t k = 0; k < yp_mean.get(r).size(); k++) |
| 85 | { |
| 86 | |
| 87 | // Number of graph points |
| 88 | for (size_t g = 0 ; g < yp_mean.get(r).get(k).size() ; g++) |
| 89 | { |
| 90 | // Time for construction hilbert and random |
| 91 | y2.get(r).get(k).add(yp_mean.get(r).get(k).get(g)); |
| 92 | y2.get(r).get(k).add(y_ref_mean.get(r).get(k).get(g) - 3.0*y_ref_dev.get(r).get(k).get(g)); |
| 93 | y2.get(r).get(k).add(y_ref_mean.get(r).get(k).get(g) + 3.0*y_ref_dev.get(r).get(k).get(g)); |
| 94 | |
| 95 | warning_set(warning_level,yp_mean.get(r).get(k).get(g),y_ref_mean.get(r).get(k).get(g),y_ref_dev.get(r).get(k).get(g)); |
| 96 | } |
| 97 | } |
| 98 | |
| 99 | warning_vlevel.add(warning_level); |
| 100 | } |
| 101 | } |
| 102 | else |
| 103 | { |
| 104 | return; |
| 105 | } |
| 106 | |
| 107 | // Calculation time graphs report |
| 108 | |
| 109 | // Google charts options |
| 110 | GCoptions options2; |
| 111 | |
| 112 | options2.yAxis = std::string(y_string); |
| 113 | options2.xAxis = std::string(x_string); |
| 114 | options2.lineWidth = 4; |
| 115 | |
| 116 | for (size_t i = 0; i < y2.size() ; i++) |
| 117 | { |
| 118 | std::string chart_area; |
| 119 | if (warning_vlevel.size() != 0) |
| 120 | addchartarea(chart_area,warning_vlevel.get(i)); |
| 121 | |
| 122 | if (use_log == true) |
| 123 | {options2.more = GC_Y_LOG + "," + GC_ZOOM + chart_area;} |
| 124 | else |
| 125 | {options2.more = GC_ZOOM + chart_area;} |
| 126 | |
| 127 | options2.title = gnames.get(i); |
| 128 | cg.AddLinesGraph(x,y2.get(i),yn2,options2); |
| 129 | } |
| 130 | } |
| 131 | |
| 132 | |
| 133 | |