*/
function average_data(data, n) {
var ret = new Array();
- var rem = data.length % n;
var y;
- for (y=0; y<data.length-rem; y++) {
- var y2 = Math.round((y/n)-0.5);
+ var counts = new Array();
+ for (y=0; y<data.length; y++) {
var t = round_time(data[y][0], n);
- if (ret[y2] == undefined) {
- ret[y2] = data[y];
- for (var x=1; x<ret[y2].length; x++) {
- ret[y2][x] /= n;
+ var y2 = ret.length;
+ if (ret.length > 0 && t == ret[ret.length-1][0]) {
+ y2 = ret.length-1;
+ counts[y2]++;
+ for (var x=1; x<data[y].length; x++) {
+ ret[y2][x] += data[y][x];
}
} else {
- for (var x=1; x<ret[y2].length; x++) {
- ret[y2][x] += data[y][x]/n;
- }
+ counts[y2] = 1;
+ ret[y2] = data[y];
+ ret[y2][0] = t;
}
- ret[y2][0] = t;
}
- for (; y<data.length; y++) {
- var y2 = ret.length;
- var t = round_time(data[y][0], 1);
- ret[y2] = data[y];
- ret[y2][0] = t;
+ for (y2=0; y2<ret.length; y2++) {
+ for (var x=1; x<ret[y2].length; x++) {
+ ret[y2][x] /= counts[y2];
+ }
}
return ret;
}
}
if (auto_averaging) {
if (d2.data != null && (d2.data.length/defaultAttrs.averaging) > max_points) {
- set_averaging(Math.round(0.5+(d2.data.length / max_points)));
+ var averaging_times = [ 1, 2, 5, 10, 15, 20, 30, 60, 120 ];
+ var tdiff = 1;
+ for (var y=d2.data.length-1; y>1; y--) {
+ if (d2.data[y][0] != undefined && d2.data[y-1][0] != undefined) {
+ tdiff = (d2.data[y][0] - d2.data[y-1][0])/(60*1000);
+ }
+ }
+ for (var i=0; i<averaging_times.length-1; i++) {
+ if (d2.data.length/(averaging_times[i]*tdiff) <= max_points) {
+ break;
+ }
+ }
+ set_averaging(averaging_times[i]);
}
}