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