diff --git a/speccy.html b/speccy.html index efee12c1e9a1a8af8621dca8ee69a4df6b9b890e..ab4afdef91f75bf1c657b72acc4b1c4d04cf280a 100644 --- a/speccy.html +++ b/speccy.html @@ -204,6 +204,8 @@ <span style="color: #aaaaaa;">Noise</span></label> <label><input type="checkbox" onclick="plotData();" value="ToggleModel" id="ToggleModel" checked> <span style="color: #dd0000;">Model</span></label> + <label><input type="checkbox" onclick="plotData();" value="ToggleResidual" id="ToggleResidual"> + <span style="color: #ff8c00;">Residual</span></label> <br> <label><input type="checkbox" onclick="plotData();" value="ToggleLines" id="ToggleLines" checked> <span style="color: #008800;">Lines</span></label> diff --git a/speccy.js b/speccy.js index b4b3abe9062a01381f89ddebf74c646ae238fdc4..8a271d358462823fdaa07e854610d7e3d076dc1a 100644 --- a/speccy.js +++ b/speccy.js @@ -40,7 +40,9 @@ var fluxArray = []; var fluxerrArray= []; var skyArray = []; var modelArray = []; +var residualArray = []; var smoothedArray = []; +var smoothedresidualArray = []; var templatelambdaArray = []; var templatefluxArray = []; var templateLength = 0; @@ -310,6 +312,7 @@ function readSpecFileASCII() fluxerrArray[j] = Number(data[2]); skyArray[j] = Number(data[3]); modelArray[j] = Number(data[4]); + residualArray[j] = Number(fluxArray[j] - modelArray[j]); if ( modelArray[j] > 1.0 * fluxerrArray[j] ) { // the numeric value is the number of sigmas to accept if ( fluxArray[j] < y0 ) y0 = fluxArray[j]; @@ -357,7 +360,8 @@ function readSpecFileASCII() //calc the smoothed flux array var boxsize = $("input[type='radio'][name='smoothing']:checked").val(); - smoothArray(fluxArray, smoothedArray, boxsize) + smoothArray(fluxArray, smoothedArray, boxsize); + smoothArray(residualArray, smoothedresidualArray, boxsize); plotData(); writePipeInfo(); @@ -749,6 +753,25 @@ function plotData() { ctx.closePath(); } + //draw the residual flux curve + if ( document.getElementById("ToggleResidual").checked ) + { + ctx.strokeStyle = "#ff8c00"; + ctx.beginPath(); + for(var i=0;i<lambdaArray.length;i++){ + var x = padx1 + (lambdaArray[i]-x0)*dx_inv; + if ( x >= padx1 && x <= xsize-padx2 ) + { + var y = ysize - pady - (smoothedresidualArray[i]-y0)*dy_inv; + var clip_y = Math.max(Math.min(y,ysize-pady),pady); + if ( i>=1) { ctx.lineTo(x,clip_y);} + else { ctx.moveTo(x,clip_y);} + } + } + ctx.stroke(); + ctx.closePath(); + } + //draw the model curve if ( document.getElementById("ToggleModel").checked ) { @@ -850,6 +873,7 @@ function updateSmoothing(){ //re-calc the smoothed flux array var boxsize = $("input[type='radio'][name='smoothing']:checked").val(); smoothArray(fluxArray, smoothedArray, boxsize); + smoothArray(residualArray, smoothedresidualArray, boxsize); plotData(); }