Viewing contents of file '../idllib/contrib/icur/coadd.pro'
;**********************************************************************
PRO COADD,W,F,E,nbin,error=error,wave=wave,helpme=helpme 
     ;COADD DATA INTO COARSER BINS
common com1,h,IK,IFT,NSM,C,NDAT,IFSM,KBLO,H1,ipdv,ihcdev
npar=n_params(0)
if npar eq 0 then helpme=1
if npar eq 1 then begin
   if n_elements(w) le 2 then helpme=1
   endif
if keyword_set(helpme) then begin
   print,' '
   print,'* COADD - coadd bins together'
   print,'*    calling sequence: COADD,W,F,E,NBINS, or COADD,W,F,NBINS,'
   print,'*                      or COADD,W,NBINS, or COADD,W'
   print,'*       W,F,E : 1-3 variables. if 2 or 3 are passed, first is treated'
   print,'*               as a wavelength or a time'
   print,'*               a mean F is returned; E returns minimum of E'
   print,'*       NBINS: if the last parameter is an integer, it is the'
   print,'*              number of bins to coadd, otherwise input will be requested'
   print,'*'
   print,'* KEYWORDS:'
   print,'*    ERROR: if set, W is treated as errors and added in quadrature'
   print,'*    WAVE:  if set, W is treated as a wavelength vector'
   print,' '
   return
   endif
;
if n_elements(h) lt 33 then h33=0 else h33=h(33)
if n_params(0) lt 4 then nbin=-1 else nbin=abs(fix(nbin))>1
case 1 of
   npar eq 2: if n_elements(f) eq 1 then nbin=abs(fix(f))>1
   npar eq 3: if n_elements(e) eq 1 then nbin=abs(fix(e))>1
   else:
   endcase
if nbin ne -1 then nvars=npar-1 else nvars=npar     ;number of variables passed
;
if nbin eq -1 then begin
   PRINT,' '
   READ,' HOW MANY BINS TO COADD? ',NBIN
   endif
IF NBIN LE 1 THEN RETURN
;
np=n_elements(w)
if np le 1 then np=n_elements(f)
S=np/NBIN
tw=w
;
case 1 of
   keyword_set(error): begin       ;vector is SNR vector
      w=fltarr(s)
      ii=nbin*indgen(s)
      for i=0,nbin-1 do w=w+tw(ii+i)*tw(ii+i)
      w=sqrt(w)/float(nbin)
      end
;
   keyword_set(wave): begin     ;wavelength or time vector
      i=indgen(s)*nbin
      w=tw(i)
      end
;
   nvars eq 1: begin    ;only one vector passed
      w=fltarr(s)
      ii=nbin*indgen(s)
      for i=0,nbin-1 do w=w+tw(ii+i)
      w=w/float(nbin)
      end
;
   (nvars gt 1) and (n_elements(w) gt 1): begin     ;wavelength or time vector
      i=indgen(s)*nbin
      w=tw(i)
      end
   nvars ge 2: begin
      tf=f
      F=FLTARR(S)
      ii=nbin*indgen(s)
      for i=0,nbin-1 do f=f+tf(ii+i)
      f=f/float(nbin)
      end
   (nvars eq 3) and (n_elements(e) gt 1): begin
      if (h33 eq 30) or (h33 eq 40) then te=e*e else te=e
      e=FLTARR(S)
      ii=nbin*indgen(s)
      for i=0,nbin-1 do e=e+te(ii+i)
      case 1 of
         h33 eq 30: e=sqrt(e)           ;add S/N vectors
         h33 eq 40: e=sqrt(e)/float(nbin)
         else:
         endcase
      end
   endcase
;
if n_elements(h) gt 52 then h(53)=nbin
RETURN
END