1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | "use strict";
|
14 |
|
15 | import BarsHandler from './bars';
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | var ErrorBarsHandler = function() {
|
22 | };
|
23 |
|
24 | ErrorBarsHandler.prototype = new BarsHandler();
|
25 |
|
26 |
|
27 | ErrorBarsHandler.prototype.extractSeries = function(rawData, i, options) {
|
28 |
|
29 | var series = [];
|
30 | var x, y, variance, point;
|
31 | const seriesLabel = options.get("labels")[i];
|
32 | const logScale = options.getForSeries("logscale", seriesLabel);
|
33 | const sigma = options.getForSeries("sigma", seriesLabel);
|
34 | for ( var j = 0; j < rawData.length; j++) {
|
35 | x = rawData[j][0];
|
36 | point = rawData[j][i];
|
37 | if (logScale && point !== null) {
|
38 |
|
39 |
|
40 | if (point[0] <= 0 || point[0] - sigma * point[1] <= 0) {
|
41 | point = null;
|
42 | }
|
43 | }
|
44 |
|
45 | if (point !== null) {
|
46 | y = point[0];
|
47 | if (y !== null && !isNaN(y)) {
|
48 | variance = sigma * point[1];
|
49 |
|
50 |
|
51 | series.push([ x, y, [ y - variance, y + variance, point[1] ] ]);
|
52 | } else {
|
53 | series.push([ x, y, [ y, y, y ] ]);
|
54 | }
|
55 | } else {
|
56 | series.push([ x, null, [ null, null, null ] ]);
|
57 | }
|
58 | }
|
59 | return series;
|
60 | };
|
61 |
|
62 |
|
63 | ErrorBarsHandler.prototype.rollingAverage =
|
64 | function(originalData, rollPeriod, options, i) {
|
65 | rollPeriod = Math.min(rollPeriod, originalData.length);
|
66 | var rollingData = [];
|
67 | const seriesLabel = options.get("labels")[i];
|
68 | const sigma = options.getForSeries("sigma", seriesLabel);
|
69 |
|
70 | var i, j, y, v, sum, num_ok, stddev, variance, value;
|
71 |
|
72 |
|
73 |
|
74 | for (i = 0; i < originalData.length; i++) {
|
75 | sum = 0;
|
76 | variance = 0;
|
77 | num_ok = 0;
|
78 | for (j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) {
|
79 | y = originalData[j][1];
|
80 | if (y === null || isNaN(y))
|
81 | continue;
|
82 | num_ok++;
|
83 | sum += y;
|
84 | variance += Math.pow(originalData[j][2][2], 2);
|
85 | }
|
86 | if (num_ok) {
|
87 | stddev = Math.sqrt(variance) / num_ok;
|
88 | value = sum / num_ok;
|
89 | rollingData[i] = [ originalData[i][0], value,
|
90 | [value - sigma * stddev, value + sigma * stddev] ];
|
91 | } else {
|
92 |
|
93 |
|
94 |
|
95 | v = (rollPeriod == 1) ? originalData[i][1] : null;
|
96 | rollingData[i] = [ originalData[i][0], v, [ v, v ] ];
|
97 | }
|
98 | }
|
99 |
|
100 | return rollingData;
|
101 | };
|
102 |
|
103 | export default ErrorBarsHandler;
|