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