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 */
23void 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