PRO ucles_norm,w,f,a,r,s,nw,no,sig,pord,sig2 ; Procedure to merge orders from a 2d echelle frame ; into a single spectrum. ; Input ; w nw x no wavelengths ; f nw x no fluxes ; Output ; r nw x no continuum function ; s nw x no blaze function ; a nw x no normalized spectrum ; Input ; nw n wavelentghts / order ; no n orders ; sig ; pord ; sig2 ; Example ; flux_norm,w,f,a,r,s,1448,36,40,7,1.2e3,.05 ; remove gross trends ; collect data from order centre colors=GetColor(/Load) ordmax = fltarr(no) ordcen = fltarr(no) nwc = nw/2 nwd = nw/sig wcen = w(nwc,no/2) FOR j = 0,no-1 DO BEGIN av = moment( f(nwc-nwd:nwc+nwd,j ) ) ordmax(j) = av(0) ordcen(j) = w(nwc,j) ENDFOR ymax = max ( ordmax ) window,1 plot, ordcen,ordmax,yrange=[0,1.2*ymax] ; IF ( ABS(ordmax(j)-approx(j)) GT sig2 ) THEN ordmax(j) = approx(j) ; ENDFOR ordmax = median(ordmax,5) oplot, ordcen,ordmax,color=colors.yellow ; identify outliers pn = poly_fit(ordcen-wcen,ordmax,pord,yfit=approx) oplot, ordcen,approx,color=colors.red FOR j = 1,no-2 DO BEGIN IF ( ABS(ordmax(j)-approx(j)) GT sig2*ymax ) THEN ordmax(j) = 0.333 * ( approx(j)+ ordmax(j-1) + ordmax (j+1) ) ENDFOR oplot, ordcen,ordmax window,2 plot, ordcen,ordmax,yrange=[0,1.2*ymax] ; identify outliers pn = poly_fit(ordcen-wcen,ordmax,pord,yfit=appr2) oplot, ordcen,appr2,color=colors.red FOR j = 1,no-2 DO BEGIN IF ( ABS(ordmax(j)-approx(j)) GT sig2*ymax/2. ) THEN ordmax(j) = 0.333 * ( approx(j)+ ordmax(j-1) + ordmax (j+1) ) ENDFOR oplot, ordcen,ordmax,color=colors.blue window,2 plot, ordcen,ordmax,yrange=[0,1.2*ymax] ; identify outliers pn = poly_fit(ordcen-wcen,ordmax,pord,yfit=appr2) oplot, ordcen,appr2,color=colors.green window,0 plot, ordcen,ordmax,yrange=[0,1.2*ymax] r = fltarr(nw,no) r = r + pn(0) FOR n = 1,pord DO BEGIN r = r + double( pn(n)*(w-wcen)^n ) ENDFOR r = r oplot,w,r,color=colors.red a = f / r ; create envelope s = median(a,5) s = smooth(s,5) ; tidy ends FOR i = 0,4 DO BEGIN s(*,i) = median(s(*,i),8) s(*,i) = smooth(s(*,i),8) ENDFOR FOR i = no-4,no-1 DO BEGIN s(*,i) = median(s(*,i),8) s(*,i) = smooth(s(*,i),8) ENDFOR ; fit polynomials bl_ord=9 FOR i = 0,no-1 DO BEGIN bf = poly_fit(w(*,i)-ordcen(i),s(*,i),bl_ord,yfit=sapp) s(*,i) = sapp ENDFOR a = a / s END