forked from plotly/plotly.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompute_error.js
More file actions
94 lines (86 loc) · 2.55 KB
/
compute_error.js
File metadata and controls
94 lines (86 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
* Copyright 2012-2017, Plotly, Inc.
* All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
/**
* Error bar computing function generator
*
* N.B. The generated function does not clean the dataPt entries. Non-numeric
* entries result in undefined error magnitudes.
*
* @param {object} opts error bar attributes
*
* @return {function} :
* @param {numeric} dataPt data point from where to compute the error magnitude
* @param {number} index index of dataPt in its corresponding data array
* @return {array}
* - error[0] : error magnitude in the negative direction
* - error[1] : " " " " positive "
*/
module.exports = function makeComputeError(opts) {
var type = opts.type,
symmetric = opts.symmetric;
if(type === 'data') {
var array = opts.array,
arrayminus = opts.arrayminus;
if(symmetric || arrayminus === undefined) {
return function computeError(dataPt, index) {
var val = +(array[index]);
return [val, val];
};
}
else {
return function computeError(dataPt, index) {
return [+arrayminus[index], +array[index]];
};
}
}
else {
var computeErrorValue = makeComputeErrorValue(type, opts.value),
computeErrorValueMinus = makeComputeErrorValue(type, opts.valueminus);
if(symmetric || opts.valueminus === undefined) {
return function computeError(dataPt) {
var val = computeErrorValue(dataPt);
return [val, val];
};
}
else {
return function computeError(dataPt) {
return [
computeErrorValueMinus(dataPt),
computeErrorValue(dataPt)
];
};
}
}
};
/**
* Compute error bar magnitude (for all types except data)
*
* @param {string} type error bar type
* @param {numeric} value error bar value
*
* @return {function} :
* @param {numeric} dataPt
*/
function makeComputeErrorValue(type, value) {
if(type === 'percent') {
return function(dataPt) {
return Math.abs(dataPt * value / 100);
};
}
if(type === 'constant') {
return function() {
return Math.abs(value);
};
}
if(type === 'sqrt') {
return function(dataPt) {
return Math.sqrt(Math.abs(dataPt));
};
}
}