pro bcs_bpc2c,bpc_data,chan,specrange
;+
; NAME:			bcs_bpc2c.pro
;
; PURPOSE:		fix missing two component fits
;
; CALLING SEQUENCE:  	bcs_bpc2c,data,chan,specrange
;
; INPUTS:		data - bpc_structure 
;			chan - 0,3 bcs channel
;			specrange - array of subscripts
;
; OPTIONAL INPUTS:	none
;
; OUTPUTS:		none
;
; OPTIONAL OUTPUTS:	none
;
; RESTRICTIONS:		nearest neighbour method. see bcs_bpcfs for details
;
; PROCEDURE:		if missing 2 component find closest spectrum that
;			has one - transfer + scale intensities
;
; MODIFICATION HISTORY: atp 1993 from hacked version of do_2_comp.pro
;
;-
;
; make all 2 component
;
debug = 0
;
exdata_mask = where (bpc_data(chan-1,specrange).quality(1) eq 2,edc)
nodata_mask = where (bpc_data(chan-1,specrange).quality(1) le 1,ndc)

if (ndc eq 0) then return
if (edc eq 0) then return

if debug eq 1 then print,'fixing ',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 for this component
    bpc_data(chan-1,specrange(nodata_mask(uu))).quality(1,*) = bpc_data(chan-1,specrange(closest)).quality(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).intensity(1,*) = bpc_data(chan-1,specrange(closest)).intensity(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).ierr(1,*) = bpc_data(chan-1,specrange(closest)).ierr(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).width(1,*) = bpc_data(chan-1,specrange(closest)).width(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).werr(1,*) = bpc_data(chan-1,specrange(closest)).werr(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).position(1,*) = bpc_data(chan-1,specrange(closest)).position(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).perr(1,*) = bpc_data(chan-1,specrange(closest)).perr(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).back1(1,*) = bpc_data(chan-1,specrange(closest)).back1(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).back1err(1,*) = bpc_data(chan-1,specrange(closest)).back1err(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).back2(1,*) = bpc_data(chan-1,specrange(closest)).back2(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).back2err(1,*) = bpc_data(chan-1,specrange(closest)).back2err(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).binst(1,*) = bpc_data(chan-1,specrange(closest)).binst(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).binend(1,*) = bpc_data(chan-1,specrange(closest)).binend(1,*)   
stop
    bpc_data(chan-1,specrange(nodata_mask(uu))).options(1,*) = bpc_data(chan-1,specrange(closest)).options(1,*)   
    bpc_data(chan-1,specrange(nodata_mask(uu))).nopt_used = bpc_data(chan-1,specrange(closest)).nopt_used   
    bpc_data(chan-1,specrange(nodata_mask(uu))).nlines(1) = bpc_data(chan-1,specrange(closest)).nlines(1)   
    ;
    ; alter intensities
    ;
    target_i = bpc_data(chan-1,specrange(nodata_mask(uu))).intensity(0,0)
    r_component = bpc_data(chan-1,specrange(nodata_mask(uu))).intensity(1,0)
    v_component = bpc_data(chan-1,specrange(nodata_mask(uu))).intensity(1,1)
    r_fract = r_component*1.0/(r_component+v_component)
    v_fract = v_component*1.0/(r_component+v_component)
    bpc_data(chan-1,specrange(nodata_mask(uu))).intensity(1,0) = r_fract*target_i
    bpc_data(chan-1,specrange(nodata_mask(uu))).intensity(1,1) = v_fract*target_i


if debug eq 1 then print,'Fill c - ',chan,'s - ',specrange(nodata_mask(uu))+1
   endfor   
end

