pro bcs_bpcfs,bpc_data,chan,specrange ; ; fill in the gaps in a range of spectra ; debug = 0 ; ; exdata_mask = where (bpc_data(chan-1,specrange).quality(0) ne 0,edc) nodata_mask = where (bpc_data(chan-1,specrange).quality(0) eq 0,ndc) ; if (ndc eq 0) then return if (edc eq 0) then return print,'filling',ndc,'spectra' for uu = 0,ndc-1 do begin ; find closest real with bias towards upper end of flare closest = 0 close_up = where(exdata_mask gt nodata_mask(uu),cuc) close_lo = where(exdata_mask lt nodata_mask(uu),clc) if (cuc eq 0) and (clc eq 0) then begin print,'fil_spec: problem accessing closest neighbour' stop endif if (cuc eq 0) then begin closest = exdata_mask(close_lo(clc-1)) endif if (clc eq 0) then begin closest = exdata_mask(close_up(0)) endif if (closest eq 0) then begin close_up = exdata_mask(close_up(0)) close_lo = exdata_mask(close_lo(clc-1)) if (abs(close_up-nodata_mask(uu)) ge abs(close_lo-nodata_mask(uu))) then begin closest = close_up endif else begin closest = close_lo endelse endif ; now have closest copy all across bpc_data(chan-1,specrange(nodata_mask(uu))) = bpc_data(chan-1,specrange(closest)) ; rationalise times hope sdgi was not changed here. diff = specrange(nodata_mask(uu))-specrange(closest) diff = diff * bpc_data(chan-1,specrange(closest)).sdgi realextime = lonarr(7) realextime = [bpc_data(chan-1,specrange(closest)).time(0:2),0,bpc_data(chan-1,specrange(closest)).time(3:5)] realextime(6) = realextime(6) - 1900 ex2int,realextime,msod,ds79 msod=msod+(diff*1000.) int2ex,msod,ds79,difftime reftime = [difftime(0:2),difftime(4:6)] reftime(5) = reftime(5) + 1900 if debug eq 1 then begin print,'Fill c - ',chan,'s - ',nodata_mask(uu)+1 print,'t0 ',realextime,' t1 ',reftime endif bpc_data(chan-1,specrange(nodata_mask(uu))).time = reftime ;stop endfor end