function BES_filter_func, lamb, fnum, ftilt ;OUTPUTS THE SHAPE AND MAGNITUDE OF THE FILTER BANDPASS ;fstages = # of cavities, fnref = refraction index, fnum = filter #, ftilt = tilt of filter ;Hafilter_cntrs[fnum-1] = untilted center of the bandpass ;lambdashifted = equivalent of shifting filter, x = coordinate change ;filter1 = percentage light passed vs. wavelength ;H-alpha FILTER CHARACTERISTICS Hafilter_cntrs = [6599.2,6599.73,6601.3,6601.14,6601.43,6600.42,6600.62,6599.46] Hafilter_wids = [1.909, 1.897, 1.796, 1.804, 1.791, 1.886, 1.799, 1.831]*10.0 Hafilter_trans = [58.0,55.0,56.5,56.5,55.0,57.5,58.25,59.5] Hafilter_nrefs = [1.699, 1.681, 1.594, 1.768, 1.775, 1.731, 1.651, 1.684] W0 = [18.95, 19.27, 18.09, 18.10, 17.71, 18.90, 18.01, 18.09] W35 = [19.09, 18.97, 17.96, 18.04, 17.91, 18.86, 17.99, 18.25] W60 = [19.74, 19.04, 18.92, 18.31, 18.00, 19.08, 18.52, 19.46] lamb0 = sindgen(5000) lambda = (float(lamb0)/50)+ 6540.0 fnref = Hafilter_nrefs[fnum-1] ftrans = Hafilter_trans[fnum-1] if (ftilt lt 35.0) then fwidth = W0[fnum-1] + ftilt*(W35[fnum-1] - W0[fnum-1])/35.0 if (ftilt ge 35.0) then fwidth=W35[fnum-1]+(ftilt-35.0)*(W60[fnum-1]-W35[fnum-1])/25.0 ;angle --> center equation fcenter = Hafilter_cntrs[fnum-1]*(1-(sin(ftilt*!pi/180/6.0)/fnref)^2)^.5 filter1 = make_array(5000,/float) ;p(8, 3, 4) = 4 FIT PARAMETERS FOR 3 TILTS (0,35,60 or 0,5.83,10) OF 8 FILTERS p = make_array(8, 3, 4, /float) p[0, 0, 0:3] = [722.774, 10.0870, 5.71391, 60.2572] p[1, 0, 0:3] = [562.075, 10.0951, 6.00748, 55.4124] p[2, 0, 0:3] = [627.123, 9.5994, 5.90471, 65.0555] p[3, 0, 0:3] = [588.73, 9.71293, 5.16767, 39.3293] p[4, 0, 0:3] = [782.659, 9.44699, 5.41629, 77.5436] p[5, 0, 0:3] = [494.387, 10.0936, 5.55458, 47.7090] p[6, 0, 0:3] = [452.635, 9.58031, 5.58961, 41.7668] p[7, 0, 0:3] = [672.593, 9.67061, 5.63308, 59.8410] p[0, 1, 0:3] = [784.737, 10.5125, 3.79619, 33.8688] p[1, 1, 0:3] = [519.789, 10.2199, 4.76090, 34.5525] p[2, 1, 0:3] = [627.815, 9.95207, 3.62939, 22.8534] p[3, 1, 0:3] = [696.84, 9.87879, 4.12277, 36.5503] p[4, 1, 0:3] = [846.238, 9.80463, 3.8918, 48.0376] p[5, 1, 0:3] = [438.209, 10.1657, 4.67930, 33.9192] p[6, 1, 0:3] = [775.216, 9.95806, 3.59966, 32.6077] p[7, 1, 0:3] = [1081.14, 9.98195, 4.0772, 34.6271] p[0, 2, 0:3] = [871.129, 11.4462, 2.52724, -23.0110] p[1, 2, 0:3] = [548.128, 10.4799, 3.77392, 23.1571] p[2, 2, 0:3] = [692.210, 10.9712, 2.52727, -25.1918] p[3, 2, 0:3] = [727.924, 10.3711, 2.9346, .482612] p[4, 2, 0:3] = [942.315, 10.3435, 2.66166, 6.68716] p[5, 2, 0:3] = [454.862, 10.5633, 3.56178, 16.9792] p[6, 2, 0:3] = [852.738, 10.6383, 2.64433, -.14945] p[7, 2, 0:3] = [1201.27, 11.3796, 2.28251, -50.1499] ;CONVERT TWO OF THE PARAMETERS TO TRANSMISSION UNITS for i = 0, 2 do begin convert_to_xmission = 1.0/(p[*, i, 0] + p[*, i, 3]) p[*, i, 3] = p[*, i, 3] * convert_to_xmission[*] p[*, i, 0] = p[*, i, 0] * convert_to_xmission[*] endfor ;DETERMINE THE FAR FALL OFFS fstages = 6 lambdashifted = lambda/Sqrt(1.0 - (sin(ftilt*!Pi/180/6.0)/fnref)^2) x = ((abs(lambdashifted - Hafilter_cntrs[fnum-1])*4.0) / (fwidth*1.16)) - 2.0 if (fstages eq 4) then begin a1 = .276634 & a2 = 3.53334 factor = 1.00692 endif if (fstages eq 5) then begin a1 = .648108 & a2 = 4.60355 factor = .9273724 endif if (fstages eq 6) then begin ;a1 = 1.15737 & a2 = 5.58668 a2_f = [2.85, 4.3, 5.5, 3.45, 2.9, 5.5, .85, 2.1] a1 = 1.15737 & a2 = a2_f[fnum-1] factor = .857883 endif for i = 0, 4999 do begin if (x[i] gt 0) then filter1[i] = a1 + a2*alog(factor*(x[i]+2.0)/2.0) if (x[i] le 0) then filter1[i] = 0 ;if (x[i] + 2 gt 0) then filter1[i] = a1 + a2*alog(factor*(x[i]+2.0)/2.0) ;if (x[i] + 2 le 0) then filter1[i] = 0 if (filter1[i] lt 0) then filter1[i] = 0 endfor filter1 = 1 / (10.0^filter1) ;DETERMINE THE NEAR FILTER SHAPE if (ftilt le 35.0) then begin p0 = ftilt*(p[fnum-1, 1, 0] - p[fnum-1, 0, 0])/35.0 + p[fnum-1, 0, 0] p2 = ftilt*(p[fnum-1, 1, 1] - p[fnum-1, 0, 1])/35.0 + p[fnum-1, 0, 1] p3 = ftilt*(p[fnum-1, 1, 2] - p[fnum-1, 0, 2])/35.0 + p[fnum-1, 0, 2] p4 = ftilt*(p[fnum-1, 1, 3] - p[fnum-1, 0, 3])/35.0 + p[fnum-1, 0, 3] endif if (ftilt gt 35.0) then begin p0 = (ftilt-35)*(p[fnum-1, 2, 0] - p[fnum-1, 1, 0])/25.0 + p[fnum-1, 1, 0] p2 = (ftilt-35)*(p[fnum-1, 2, 1] - p[fnum-1, 1, 1])/25.0 + p[fnum-1, 1, 1] p3 = (ftilt-35)*(p[fnum-1, 2, 2] - p[fnum-1, 1, 2])/25.0 + p[fnum-1, 1, 2] p4 = (ftilt-35)*(p[fnum-1, 2, 3] - p[fnum-1, 1, 3])/25.0 + p[fnum-1, 1, 3] endif n_blue = 0 & n_red = 0 for i = 0, 4999 do begin if (filter1(i) gt 1) then filter1(i) = 1.0 if (x(i) gt 8) then filter1(i) = 0.0 if (abs(lambda[i]-fcenter) le fwidth*1.16/2.0) then begin if (n_blue eq 0) then begin n_blue = i & n_red = i - 1 endif del = abs(lambda[i]-fcenter) filter1(i) = p0 * exp(-(del/p2)^p3) + p4 n_red = n_red + 1 endif endfor filter1=filter1*ftrans/100 ;BLEND THE TWO (NEAR SHAPE WITH FAR FALL-OFF) if (filter1[n_blue] le filter1[n_blue-1]) then begin for i = n_blue-1, n_blue-500, -1 do begin slope_BARR = (filter1[i] - filter1[i-1])/.02 if (slope_BARR*(n_blue-i)*.02 + filter1[i] lt filter1[n_blue]) then begin for j = i, n_blue-1 do filter1[j] = filter1[i] + slope_BARR*(j-i)*.02 for j = 1, n_blue - i do filter1[n_red+j] = filter1[n_blue-j] i = n_blue-500 endif endfor endif if (filter1[n_blue] gt filter1[n_blue-1]) then begin slope_2051_blue = (filter1[n_blue+1] - filter1[n_blue])/.02 for i = n_blue-1, n_blue-500, -1 do begin if (filter1[n_blue] - slope_2051_blue*(n_blue - i)*.02 le filter1[i]) then begin n_BARR_red = n_blue - 2*(n_blue - i) slope_BARR_red = (filter1[n_BARR_red] - filter1[n_BARR_red - 1])/.02 for j = n_BARR_red, n_blue-1 do begin filter1[j] = filter1[j-1] + .02*(slope_BARR_red + float(j - n_BARR_red)*(slope_2051_blue - slope_BARR_red)/(2.0*(n_blue - i))) endfor for j = 1, 2*(n_blue - i) do filter1[n_red+j] = filter1[n_blue-j] i = n_blue - 500 endif endfor endif filterfinal = ms_interpolate(lambda, filter1, lamb) return, filterfinal end