'use strict'; var Func = function() { }; Func.sum = function(a, b) { return a+b; } Func.sq = function(a, b) { return Math.sqrt(a*a + b*b); } Func.min = function(a, b) { return Math.min(a, b); } Func.max = function(a, b) { return Math.max(a, b); } Func.avg = function(arr) { return arr.reduce(Func.Sum, 0)/arr.length; } Func.stat = function(arr, func) { if (arr.length==0) return undefined; var sum = 0; var sq = 0; var cnt = 0; var min = arr[0]; var max = arr[0]; arr.forEach(function(val) { sum+=val; sq+=val*val; if (val>max) max=val; if (val8 && now.getHours()>16 || runs.time Connected dim.wait("MCP", "Idle", 3000); var nn = runs.data && runs.data[0]>0 ? runs.data[1].reduce(Func.max) : -1; if (nn>0) { console.out("Trying to restore last DRS calibration #"+nn+" ["+runs.time+"]"); var night = new Date(runs.time-1000*60*60*12); var yy = night.getUTCFullYear(); var mm = night.getUTCMonth()+1; var dd = night.getUTCDate(); var filefmt = "/loc_data/raw/%d/%02d/%02d/%4d%02d%02d_%03d.drs.fits"; // FIXME: Timeout var drs_counter = service_drs.get(0, false); dim.send("FAD_CONTROL/LOAD_DRS_CALIBRATION", filefmt.$(yy, mm, dd, yy, mm, dd, nn)); while (drs_counter == service_drs.get(0, false).counter) v8.sleep(); } //console.out(JSON.stringify(service_drs.get(0, false))); event = service_event.get(0, false); service_event.close(); var hist = Hist2D(16, -2048.5, 2048.5, 11, -10, 100); for (var i=0; i<1440; i++) hist.fill(event.data[0][i], isNaN(event.data[1][i])?-1:event.data[1][i]); //console.out(("%78s".$("")).replace(/ /g, "-")); hist.print(); //console.out(("%78s".$("")).replace(/ /g, "-")); // Could also be <512 var stat0 = Func.stat(event.data[0], function(val) { if (val<0) console.out(" VAL="+val); return val<0; }); var stat1 = Func.stat(event.data[1]); console.out("Avg[min]=%.1f".$(stat0.min)); console.out("Avg[avg]=%.1f +- %.1f".$(stat0.avg, stat0.rms)); console.out("Avg[max]=%.1f".$(+stat0.max)); console.out("Avg[cnt]="+stat0.count); console.out(""); console.out("Rms[min]=%.1f".$(stat1.min)); console.out("Rms[avg]=%.1f +- %.1f".$(stat1.avg, stat1.rms)); console.out("Rms[max]=%.1f".$(stat1.max)); console.out(("%78s\n".$("")).replace(/ /g, "=")); } service_drs.close();