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