nickjillings@1939: /* nickjillings@1939: * Analysis script for WAET nickjillings@1939: */ nickjillings@1939: nickjillings@1939: var chartContext; nickjillings@1939: window.onload = function() { nickjillings@1939: // Load the Visualization API and the corechart package. nickjillings@1939: google.charts.load('current', {'packages':['corechart']}); nickjillings@1939: chartContext = new Chart(); nickjillings@1939: } nickjillings@1939: nickjillings@1939: function arrayMean(values) { nickjillings@1939: var mean = 0; nickjillings@1939: for (var value of values) { nickjillings@1939: mean += value; nickjillings@1939: } nickjillings@1939: mean /= values.length; nickjillings@1939: return mean; nickjillings@1939: } nickjillings@1939: nickjillings@1939: function percentile(values, n) { nickjillings@1939: values.sort( function(a,b) {return a - b;} ); nickjillings@1939: // get ordinal rank nickjillings@1939: var rank = Math.min(Math.floor(values.length*n/100), values.length-1); nickjillings@1939: return values[rank]; nickjillings@1939: } nickjillings@1939: nickjillings@1939: function arrayMin(array) { nickjillings@1939: // Return the minimum value of an array nickjillings@1939: var min = array[0]; nickjillings@1939: for (var value of array) { nickjillings@1939: if (value < min) { nickjillings@1939: min = value; nickjillings@1939: } nickjillings@1939: } nickjillings@1939: return min; nickjillings@1939: } nickjillings@1939: nickjillings@1939: function arrayMax(array) { nickjillings@1939: // Return the minimum value of an array nickjillings@1939: var max = array[0]; nickjillings@1939: for (var value of array) { nickjillings@1939: if (value > max) { nickjillings@1939: max = value; nickjillings@1939: } nickjillings@1939: } nickjillings@1939: return max; nickjillings@1939: } nickjillings@1939: nickjillings@1939: function arrayHistogram(values,steps,min,max) { nickjillings@1939: if (steps == undefined) { nickjillings@1939: steps = 0.25; nickjillings@1939: console.log("Warning: arrayHistogram called without steps size set, default to 0.25"); nickjillings@1939: } nickjillings@1939: if (min == undefined) {min = arrayMin(values);} nickjillings@1939: if (max == undefined) {max = arrayMax(values);} nickjillings@1939: var histogram = []; nickjillings@1939: var index = min; nickjillings@1939: while(index < max) { nickjillings@1939: histogram.push({ nickjillings@1939: marker: index, nickjillings@1939: lt: index, nickjillings@1939: rt: index+steps, nickjillings@1939: count: 0 nickjillings@1939: }); nickjillings@1939: index += steps; nickjillings@1939: } nickjillings@1939: for (var value of values) { nickjillings@1939: for (var entry of histogram) { nickjillings@1939: if (value >= entry.lt && value <= entry.rt) { nickjillings@1939: entry.count++; nickjillings@1939: break; nickjillings@1939: } nickjillings@1939: } nickjillings@1939: } nickjillings@1939: return histogram; nickjillings@1939: } nickjillings@1939: nickjillings@1939: function Chart() { nickjillings@1939: this.valueData = null; nickjillings@1939: this.commentData = null; nickjillings@1939: this.loadStatus = 0; nickjillings@1939: this.charts = []; nickjillings@1939: nickjillings@1939: var XMLHttp = new XMLHttpRequest(); nickjillings@1939: XMLHttp.parent = this; nickjillings@1939: XMLHttp.open("GET","../scripts/score_parser.php?format=JSON",true); nickjillings@1939: XMLHttp.onload = function() { nickjillings@1939: // Now we have the JSON data, extract nickjillings@1939: this.parent.valueData = JSON.parse(this.responseText); nickjillings@1939: this.parent.loadStatus++; nickjillings@1939: } nickjillings@1939: XMLHttp.send(); nickjillings@1939: var XMLHttp2 = new XMLHttpRequest(); nickjillings@1939: XMLHttp2.parent = this; nickjillings@1939: XMLHttp2.open("GET","../scripts/comment_parser.php?format=JSON",true); nickjillings@1939: XMLHttp2.onload = function() { nickjillings@1939: // Now we have the JSON data, extract nickjillings@1939: this.parent.commentData = JSON.parse(this.responseText); nickjillings@1939: this.parent.loadStatus++; nickjillings@1939: } nickjillings@1939: XMLHttp2.send(); nickjillings@1939: nickjillings@1939: this.chartObject = function(name) { nickjillings@1939: // Create the charting object nickjillings@1939: this.name = name; nickjillings@1939: this.root = document.createElement("div"); nickjillings@1939: this.root.className = "chart-holder"; nickjillings@1939: this.root.setAttribute("name",name); nickjillings@1939: this.chartDOM = document.createElement("div"); nickjillings@1939: this.tableDOM = document.createElement("div"); nickjillings@1939: this.latexDOM = document.createElement("div"); nickjillings@1939: this.downloadDOM = document.createElement("div"); nickjillings@1939: this.chart = undefined; nickjillings@1939: this.data = new google.visualization.DataTable(); nickjillings@1939: this.options = {}; nickjillings@1939: this.print = document.createElement("button"); nickjillings@1939: this.sortDataButton = document.createElement("button"); nickjillings@1939: this.sortDataButton.textContent = "Sort by Data"; nickjillings@1939: this.sortDataButton.addEventListener("click",this); nickjillings@1939: this.sortDataButton.setAttribute("name","sort-data"); nickjillings@1939: this.sortNameButton = document.createElement("button"); nickjillings@1939: this.sortNameButton.textContent = "Sort by Name"; nickjillings@1939: this.sortNameButton.addEventListener("click",this); nickjillings@1939: this.sortNameButton.setAttribute("name","sort-name"); nickjillings@1939: this.draw = function() { nickjillings@1939: if (this.chart == undefined) {return;} nickjillings@1939: this.tableDOM.innerHTML = null; nickjillings@1939: this.latexDOM.innerHTML = null; nickjillings@1939: this.buildTable(); nickjillings@1939: this.writeLatex(); nickjillings@1939: this.chart.draw(this.data,this.options); nickjillings@1939: } nickjillings@1939: this.sortData = function() { nickjillings@1939: nickjillings@1939: var map = this.data.Jf.map(function(el,i){ nickjillings@1939: return {index: i, value: el.c[1].v}; nickjillings@1939: }); nickjillings@1939: nickjillings@1939: map.sort(function(a,b){ nickjillings@1939: if (a.value > b.value) {return -1;} nickjillings@1939: if (a.value < b.value) {return 1;} nickjillings@1939: return 0; nickjillings@1939: }) nickjillings@1939: nickjillings@1939: var Jf = []; nickjillings@1939: var cc = []; nickjillings@1939: for (var i=0; i b.value) {return 1;} nickjillings@1939: return 0; nickjillings@1939: }) nickjillings@1939: nickjillings@1939: var Jf = []; nickjillings@1939: var cc = []; nickjillings@1939: for (var i=0; i