;+ ; Replace spectral channels by interpolation, or with zero values ; ; @param bchan {in}{optional}{type=float} Starting channel ; @param echan {in}{optional}{type=float} Ending channel ; @keyword zero {in}{optional}{type=boolean} Compute stats for full spectrum? ; ; @examples ;
; getrec,1 ; chan ; set the X-axis to channels ; replace,1023,1025 ; replace the channel range 1023-1025 ; freq ; set the X-axis to GHz ; replace ; prompt user for ranges and replace the values ; replace,15,/zero ; set the data value at channel 15 to 0.0 ;; ; @version $Id: replace.pro,v 1.3 2005/05/30 04:03:43 bgarwood Exp $ ;- pro replace,bchan,echan,zero=zero compile_opt idl2 common gbtplot_common,mystate,xarray if not !g.line then begin print,'replace is not yet supported for Continuum mode.' return end if n_elements(bchan) eq 0 and n_elements(echan) eq 0 then begin if (data_valid(getplotterdc()) le 0) then begin message,'The plotter is empty',/info return endif done = 0 print,'Select regions for data replacement.' print,'' print,'Left click to mark a region boundary.' print,'Right click when finished.' print,'Middle click to abort and replace nothing.' count = 0 chanlist = make_array(100,/int) while not done do begin a = click() if a.button eq 4 then done = 1 $ else if a.button eq 2 then begin print,'replace aborted.' show return end else begin gbtoplot,[a.x,a.x],mystate.yrange,color=!white chanlist[count] = round(a.chan) count += 1 end endwhile sortlist = chanlist[sort(chanlist[0:(count-1)])] for i=0,count-1,2 do begin replace_chans,sortlist[i],sortlist[i+1],zero=zero endfor endif else if n_elements(echan) eq 0 then $ replace_chans,bchan,bchan,zero=zero $ else replace_chans,bchan,echan,zero=zero if not !g.frozen then show end ;+ ; @private ;- pro replace_chans,bchan,echan,zero=zero compile_opt idl2 data = getdata() numchans = n_elements(data) if bchan gt echan then begin tmp = bchan & bchan = echan & echan = tmp end if bchan gt (numchans-1) or echan lt 0 then begin message,"Nothing to flag.",/info return end if n_elements(zero) ne 0 then begin data[bchan:echan] = 0.0 *!g.s[0].data_ptr = data return end if bchan eq echan then begin if bchan eq 0 then data[0] = data[1] $ else if bchan eq numchans-1 then data[numchans-1] = data[numchans-2] $ else data[bchan] = (data[bchan-1] + data[bchan+1])/2.0 *!g.s[0].data_ptr = data return end if bchan le 0 then begin bchan = 1 data[0] = data[echan+1] end if echan ge (numchans-1) then begin echan = numchans-2 data[numchans-1] = data[bchan-1] end data[(bchan-1):(echan+1)] = interpol([data[bchan-1],data[echan+1]],echan-bchan+3) *!g.s[0].data_ptr = data end