# HG changeset patch # User Nicholas Jillings # Date 1456318988 0 # Node ID 9691be359d6adb4fe96b78ffff729751f567b8c6 # Parent a12f1720c3218822d5c970533f28968b73ea5ea4 Created mean test/page plots, element histogram plots. Latex and tables included. Can download charts as PNG diff -r a12f1720c321 -r 9691be359d6a analysis/analysis.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/analysis/analysis.css Wed Feb 24 13:03:08 2016 +0000 @@ -0,0 +1,10 @@ +div.chart-holder { + border: 1px black solid; + margin: 10px 0px; +} +div.code { + margin: 5px; + padding-left: 15px; + background-color: rgb(200,200,200); + border: 2px dashed black; +} \ No newline at end of file diff -r a12f1720c321 -r 9691be359d6a analysis/analysis.js --- a/analysis/analysis.js Tue Feb 23 19:35:18 2016 +0000 +++ b/analysis/analysis.js Wed Feb 24 13:03:08 2016 +0000 @@ -9,10 +9,78 @@ chartContext = new Chart(); } +function arrayMean(values) { + var mean = 0; + for (var value of values) { + mean += value; + } + mean /= values.length; + return mean; +} + +function percentile(values, n) { + values.sort( function(a,b) {return a - b;} ); + // get ordinal rank + var rank = Math.min(Math.floor(values.length*n/100), values.length-1); + return values[rank]; +} + +function arrayMin(array) { + // Return the minimum value of an array + var min = array[0]; + for (var value of array) { + if (value < min) { + min = value; + } + } + return min; +} + +function arrayMax(array) { + // Return the minimum value of an array + var max = array[0]; + for (var value of array) { + if (value > max) { + max = value; + } + } + return max; +} + +function arrayHistogram(values,steps,min,max) { + if (steps == undefined) { + steps = 0.25; + console.log("Warning: arrayHistogram called without steps size set, default to 0.25"); + } + if (min == undefined) {min = arrayMin(values);} + if (max == undefined) {max = arrayMax(values);} + var histogram = []; + var index = min; + while(index < max) { + histogram.push({ + marker: index, + lt: index, + rt: index+steps, + count: 0 + }); + index += steps; + } + for (var value of values) { + for (var entry of histogram) { + if (value >= entry.lt && value <= entry.rt) { + entry.count++; + break; + } + } + } + return histogram; +} + function Chart() { this.valueData = null; this.commentData = null; this.loadStatus = 0; + this.charts = []; var XMLHttp = new XMLHttpRequest(); XMLHttp.parent = this; @@ -33,7 +101,134 @@ } XMLHttp2.send(); - this.drawMean = function() { + this.chartObject = function(name) { + // Create the charting object + this.name = name; + this.root = document.createElement("div"); + this.root.className = "chart-holder"; + this.root.setAttribute("name",name); + this.chartDOM = document.createElement("div"); + this.tableDOM = document.createElement("div"); + this.latexDOM = document.createElement("div"); + this.downloadDOM = document.createElement("div"); + this.chart = undefined; + this.data = new google.visualization.DataTable(); + this.options = {}; + this.print = document.createElement("button"); + this.handleEvent = function() { + // Only used to handle the chart.event.addListener(this,'ready') callback + this.downloadDOM.innerHTML = 'Download'; + } + + this.root.appendChild(this.chartDOM); + this.root.appendChild(this.tableDOM); + this.root.appendChild(this.latexDOM); + this.root.appendChild(this.print); + this.print.textContent = "Download"; + this.print.addEventListener("click",this); + this.root.appendChild(this.downloadDOM); + this.buildTable = function() { + var table = document.createElement("table"); + table.border = "1"; + for (var rowIndex=0; rowIndex +

Web Audio Evaluation Toolbox: Analysis

- + +
+

Charts per test

+ +
+
+

Charts per test page

+ +
+
+

Charts per element

+ +
+
\ No newline at end of file