;+ ; NAME: ; mk_nuwgt_low ; PURPOSE: (one line) ; make a list of inverse cm (and optionally, weights) (lowlevel) ; DESCRIPTION: ; pick nu's appropriate for the temperature ; CATEGORY: ; Spectra ; CALLING SEQUENCE: ; nuarr = mk_nuwgt_low(nu0arr, dopwarr, nx, ndopw, s, ng, dnuarr) ; INPUTS: ; nu0arr - array of line centers (may be scalar) ; dopwarr - array of doppler widths (same length as nu0arr) ; nx - number of points in all other grids ; ndopw - number of doppler widths in the core ; s - scale of spacing between grids (must be >1 ) ; ng - number of grids ; OPTIONAL INPUT PARAMETERS: ; none ; KEYWORD INPUT PARAMETERS: ; none ; KEYWORD OUTPUT PARAMETERS: ; none ; OUTPUTS: ; nu - array of wavenumbers (inverse cm) ; dnuarr - if present, array of wavenumber weights (inverse cm) ; COMMON BLOCKS: ; None ; SIDE EFFECTS: ; RESTRICTIONS: ; None ; PROCEDURE: ; MODIFICATION HISTORY: ; Written 2001 May, by Leslie Young, SwRI ; Modified 2004 Jun 27, LAY, based on Meadows&Crisp 1996 ;- function drop1, a return, a[1:n_elements(a)-1] end function drop1rev, a return, reverse(a[1:n_elements(a)-1]) end ; muwgt1234 xmin <= xl and xu <= xmax function muwgt1234, xl, xu, nx, d x = xl + (findgen(nx)+0.5)*d return, x end ; muwgt1243 xmin <= xl and xmax < xu function muwgt1243, xl, max, nx, d n = floor( (xmax-xl)/d + 0.5) if n le 0 then begin x = [xmax] endif else begin x = xl + (findgen(n)+0.5)*d if x[n-1] lt xmax then begin x = [x, xmax] end endelse return, x end ; muwgt2134 xl < xmin and xu <= xmax function muwgt2134, xmin, xu, nx, d n = floor( (xu-xmin)/d + 0.5) if n le 0 then begin x = [xmin] endif else begin x = xu - (n - 0.5 - findgen(n))*d if x[0] gt xmin then begin x = [xmin, x] end endelse return, x end ; muwgt2143 xl < xmin and xmax < xu function muwgt2134, xl, xmin,xmax, xu, nx, d i0 = ceil( (xmin-xl)/d + 0.5) n = floor( (max-xl)/d + 0.5) if n le 0 then begin if xmin eq xmax then begin x = [xmin] endif else begin x = [xmin, xmax] endelse endif else begin x = xl + (findgen(n) + i0 + 0.5)*d if x[n-1] lt xmax then begin x = [x, xmax] end if x[0] gt xmin then begin x = [xmin, x] end endelse return, x end ; shortward of the first line, ; numin < nu0b function mk_nuwgt_low1, nu0b, dopwb, nx, ndopw, s, numin db = 2*(ndopw*dopwb)/nx nub = nu0b-db/2. xb = nu0b + [0.] nubnext = nub - db * nx while nubnext ge numin do begin xb = [xb, nub - (findgen(nx)+0.5)*db] nub = nubnext db = db * s nubnext = nub - db * nx endwhile nb = floor((nub-numin)/db+0.5) if nb gt 0 then begin xb = [xb, nub - (findgen(nb)+0.5)*db] endif if (nub - (nb-0.5)*db) gt numin then $ xb = [xb, numin] nuarr = drop1rev(xb) return, nuarr end pro mk_nuwgt_low1TEST nu0b=0. dopwb=1. nx = 10. ndopw = 1. s = 2. numin = -0.1 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -0.2 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -0.3 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -0.7 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -0.8 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -0.9 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -2.1 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -2.3 print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) numin = -4. print, 'numin=',numin print, mk_nuwgt_low1(nu0b, dopwb, nx, ndopw, s, numin) end