FUNCTION Spect2, ast_spec, star_spec, ast_ext, star_ext, sig_list, order, thresh, Swater2, Awater2, Aoff2, bad2 WSet, 2 starout = StarP2(star_spec, star_ext, Water=Swater2) wave_short = ast_spec[0,60:186] arlen = 127 flags = Replicate(1,arlen) index = IndGen(arlen) wts = 1.0 / (sig_list)^3 x_arr = (IndGen(19) * 0.001) - 0.009 n_arr = FltArr(2,19) FOR j=0, 18 DO BEGIN astout = AstP2(ast_spec, ast_ext, x_arr[j]) divout = astout[1,*] / starout[1,*] b2 = svdfit(wave_short[*], divout[*], order, /DOUBLE, weights=wts, yfit=y_out) Plot, wave_short, divout, PSYM=4, /YNOZERO OPlot, wave_short, y_out chi2 = total(wts * (divout - y_out)^2) print, x_arr[j], chi2 n_arr[0,j] = x_arr[j] n_arr[1,j] = chi2 ENDFOR m_out = min(n_arr[1,*]) x_arr = (IndGen(11) * 0.0002) + (n_arr[0,!C] - 0.001) n_arr = FltArr(2,11) FOR j=0, 10 DO BEGIN astout = AstP2(ast_spec, ast_ext, x_arr[j]) divout = astout[1,*] / starout[1,*] b2 = svdfit(wave_short[*], divout[*], order, /DOUBLE, weights=wts, yfit=y_out) Plot, wave_short, divout, PSYM=4, /YNOZERO OPlot, wave_short, y_out chi2 = total(wts * (divout - y_out)^2) print, x_arr[j], chi2 n_arr[0,j] = x_arr[j] n_arr[1,j] = chi2 ENDFOR m_out = min(n_arr[1,*]) x_arr = (IndGen(5) * 0.0001) + (n_arr[0,!C] - 0.0002) n_arr = FltArr(2,5) FOR j=0, 4 DO BEGIN astout = AstP2(ast_spec, ast_ext, x_arr[j]) divout = astout[1,*] / starout[1,*] b2 = svdfit(wave_short[*], divout[*], order, /DOUBLE, weights=wts, yfit=y_out) Plot, wave_short, divout, PSYM=4, /YNOZERO OPlot, wave_short, y_out chi2 = total(wts * (divout - y_out)^2) print, x_arr[j], chi2 n_arr[0,j] = x_arr[j] n_arr[1,j] = chi2 ENDFOR m_out = min(n_arr[1,*]) Aoff2 = n_arr[0,!C] astout = AstP2(ast_spec, ast_ext, Aoff2, Water=Awater2) divout = astout[1,*] / starout[1,*] b2 = svdfit(wave_short[*], divout[*], order, /DOUBLE, weights=wts, yfit=y_out) diff1 = (divout - y_out) + (total(y_out) / arlen) sigma1 = stdev(diff1,mean) bad_list = where(abs(diff1 - mean) gt thresh*sigma1, bad_num) print, 'Number of bad points found in first iteration:', bad_num if bad_num gt 0 then begin flags[bad_list] = -1 good_list = where(flags gt 0) index1 = index[good_list] xx = wave_short[good_list] ee = wts[good_list] x_arr = (IndGen(11) * 0.0002) + (Aoff2 - 0.001) n_arr = FltArr(2,11) FOR j=0, 10 DO BEGIN astout = AstP2(ast_spec, ast_ext, x_arr[j]) divout = astout[1,*] / starout[1,*] divshort = divout[good_list] b2 = svdfit(xx[*], divshort[*], order, /DOUBLE, weights=ee, yfit=y_out) Plot, xx, divshort, PSYM=4, /YNOZERO OPlot, xx, y_out chi2 = total(ee * (divshort - y_out)^2) print, x_arr[j], chi2 n_arr[0,j] = x_arr[j] n_arr[1,j] = chi2 ENDFOR m_out = min(n_arr[1,*]) x_arr = (IndGen(5) * 0.0001) + (n_arr[0,!C] - 0.0002) n_arr = FltArr(2,5) FOR j=0, 4 DO BEGIN astout = AstP2(ast_spec, ast_ext, x_arr[j]) divout = astout[1,*] / starout[1,*] divshort = divout[good_list] b2 = svdfit(xx[*], divshort[*], order, /DOUBLE, weights=ee, yfit=y_out) Plot, xx, divshort, PSYM=4, /YNOZERO OPlot, xx, y_out chi2 = total(ee * (divshort - y_out)^2) print, x_arr[j], chi2 n_arr[0,j] = x_arr[j] n_arr[1,j] = chi2 ENDFOR m_out = min(n_arr[1,*]) Aoff2 = n_arr[0,!C] astout = AstP2(ast_spec, ast_ext, Aoff2, Water=Awater2) divout = astout[1,*] / starout[1,*] divshort = divout[good_list] b2 = svdfit(xx[*], divshort[*], order, /DOUBLE, weights=ee, yfit=y_out) diff = (divshort - y_out) + (total(y_out) / (arlen - bad_num)) sigma = stdev(diff,mean) bad_list = where(abs(diff - mean) gt thresh*sigma, bad_num) print, 'Number of bad points found in second iteration:', bad_num if bad_num gt 0 then begin bad = index1[bad_list] flags[bad] = -1 good_list = where(flags gt 0) index2 = index[good_list] xx = wave_short[good_list] ee = wts[good_list] x_arr = (IndGen(11) * 0.0002) + (Aoff2 - 0.001) n_arr = FltArr(2,11) FOR j=0, 10 DO BEGIN astout = AstP2(ast_spec, ast_ext, x_arr[j]) divout = astout[1,*] / starout[1,*] divshort = divout[good_list] b2 = svdfit(xx[*], divshort[*], order, /DOUBLE, weights=ee, yfit=y_out) Plot, xx, divshort, PSYM=4, /YNOZERO OPlot, xx, y_out chi2 = total(ee * (divshort - y_out)^2) print, x_arr[j], chi2 n_arr[0,j] = x_arr[j] n_arr[1,j] = chi2 ENDFOR m_out = min(n_arr[1,*]) x_arr = (IndGen(5) * 0.0001) + (n_arr[0,!C] - 0.0002) n_arr = FltArr(2,5) FOR j=0, 4 DO BEGIN astout = AstP2(ast_spec, ast_ext, x_arr[j]) divout = astout[1,*] / starout[1,*] divshort = divout[good_list] b2 = svdfit(xx[*], divshort[*], order, /DOUBLE, weights=ee, yfit=y_out) Plot, xx, divshort, PSYM=4, /YNOZERO OPlot, xx, y_out chi2 = total(ee * (divshort - y_out)^2) print, x_arr[j], chi2 n_arr[0,j] = x_arr[j] n_arr[1,j] = chi2 ENDFOR m_out = min(n_arr[1,*]) Aoff2 = n_arr[0,!C] astout = AstP2(ast_spec, ast_ext, Aoff2, Water=Awater2) divout = astout[1,*] / starout[1,*] divshort = divout[good_list] b2 = svdfit(xx[*], divshort[*], order, /DOUBLE, weights=ee, yfit=y_out) endif fit_out = Interpol(y_out, xx, wave_short, /SPLINE) y_out = fit_out diff = (divout - y_out) + (total(y_out) / arlen) fmean = mean(diff) bad_list = where(abs(diff - fmean) gt thresh*sigma, bad_num) print, 'Number of bad points found in final pass:', bad_num bad2 = bad_num flags = Replicate(1,arlen) flags[bad_list] = -1 endif print, n_arr[0,!C], n_arr[1,!C] fspec = FltArr(4,127) fspec[0,*] = wave_short fspec[1,*] = divout fspec[2,*] = sig_list fspec[3,*] = flags good_pts = where(flags gt 0) Plot, fspec[0,good_pts], fspec[1,good_pts], PSYM=4, /YNOZERO OPlot, fspec[0,*], y_out RETURN, fspec END