Viewing contents of file '../idllib/ghrs/pro/calhrs_mer.pro'
pro calhrs_mer,ih,d,eps,err,first,nbins,nf,nmerge,iho,d_o,epso,erro,log
;
;+
;				calhrs_mer
;
; procedure to merge substep bins
;
; CALLING SEQUENCE:
;   calhrs_mer,ih,d,eps,err,first,nbins,nf,nmerge,iho,d_o,epso,erro,log
;
; INPUTS:
;	ih - header array (128 x n)
;	d - data array (512 x n)
;	eps - epsilon array (512 x n)
;	err - propagated statistical error array
;	first - vector giving locations of the first bin for
;		each readout
;	nbins - number of bins in the substep pattern
;	nf - number of bins found for each readout
;	nmerge - number of bins to merge (if 0, no merging done)
; OUTPUTS:
;	iho,d_o,epso,erro - merged data arrays
;
; OPTIONAL INPUT/OUTPUT:
;	log - reduction log (string array)
;
; HISTORY:
;	version 1  D. Lindler  March 1989
;-
;-------------------------------------------------------------------------
;
; defaults
;
	VERSION = 1.0	;software version number
	fill = 32767	;epsilon value for missing data
	if n_elements(err) gt 1 then errflag=1 else errflag=0 ;propate errors?
;
; if nmerge is 0 just copy input to output and strip off special diodes
;
	if nmerge eq 0 then begin
		iho=ih
		d_o = d(6:505,*)
		epso = eps(6:505,*)
		if errflag then erro=err(6:505,*) else erro=0
		return
	end
;
; update processing log
;
	hist='CALHRS_MER version '+string(version,'(f5.2)')+':'+ $
		' Merging data from first'+string(nmerge,'(i2)')+' bins'
	if n_params(0) gt 12 then sxaddhist,hist,log
	if !dump gt 0 then printf,!textunit,hist
;
; set up output arrays
;
	nout = n_elements(first)	;number of output spectra
	nsout = 500 * nmerge		;length of output spectra
	iho = intarr(128,nout)
	d_o = fltarr(nsout,nout)
	epso = intarr(nsout,nout)
	if errflag then begin
		erro=fltarr(nsout,nout)
		err1=fltarr(500,nmerge)	;data to merge for one readout
	   end else erro=0
	eps1 = intarr(500,nmerge)	;data to merge for one readout
	d1 = fltarr(500,nmerge)
;
; loop on readouts
;
	for iout=0,nout-1 do begin
		pos1 = first(iout)		;location of readout
		pos2 = pos1+nf(iout)-1
		bins = ih(0,pos1:pos2) mod 10	;bin numbers
		iho(0,iout)=ih(*,pos1)		;use header from first bin
		iho(0,iout)=9			;flag type as merged
		deltas=float(ih(72:73,pos1),0,1)	;pixel step size
		iho(72,iout)=fix(deltas/nmerge,0,2)	;new step size
;
; loop on bins to merge
;
		for i=0,nmerge-1 do begin
		    pos=where(bins eq (i+1))
		    if !err gt 0 then begin			;found?
			pos=pos(0)+pos1
			eps1(0,i) = eps(6:505,pos)
			d1(0,i) = d(6:505,pos)
			if errflag then err1(0,i)=err(6:505,pos)
		      end else begin			;not found
			eps1(*,i)=fill			; use fill
			d1(*,i) = 0
			if errflag then err1(*,i)=0
			hist='  Bin'+string(i+1,'(i2)')+' missing from '+ $
			     'readout'+string(iout+1,'(i5)')+': fill used'
			if n_params(0) gt 12 then sxaddhist,hist,log
			if !dump gt 0 then printf,!textunit,hist $
				      else print,hist
		   end
		endfor
;
; merge data and place into the output array
;
		d1t = transpose(d1) & d_o(0,iout)=d1t(0:nsout-1)
		eps1t = transpose(eps1) & epso(0,iout)=eps1t(0:nsout-1)
		if errflag then begin
			err1t = transpose(err1)
			erro(0,iout) = err1t(0:nsout-1)
		endif
	endfor; loop on readouts
	return
	end