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 | |