;#> irsfringe.dc1
; Identifier irsfringe
;
; Purpose remove fringes from IRS data
;
; Synopsis struct = irsfringe( struct [, order = order $
; , modules = modules $
; , bcd = bcd $
; , slitpos = slitpos $
; , fmask = fmask $
; , wrange = wrange $
; , lowpass = lowpass $
; , suppress = suppress $
; , supwid = supwid $
; , status = status $
; , plot = plot $
; , /noplot $
; , /clearplots $
; MODFLAT specifics (when FLAT is provided)
; , /modflat
; , nbin = nbin $
; , edge = edge $
; , method = method $
; , noshift = noshift $
; , nosmooth = nosmooth $
; , fitorder = fitorder $
; , /sinefit $
; SINE defringing specifics
; , cycle = cycle $
; , ncycle = ncycle $
; , cystep = cystep $
; , /auto $
; , nfringes = nfringes $
; , tol = tol $
; , /weight $
; , fringelist = fringelist $
; , /apply_fringelist
; , evidence = evidence $
; , /gui ] )
;
;
; Arguments Name I/O Type: Description:
; ------------------------------------------------------------
; struct I struct IRS 1-D spectra
;
; data selection
; ---------------
; order I intarr list of IRS orders to be processed
; -1 : combine all orders in a module
; -(list) : combine selected orders
; NB in V 1.x this does not yet
; give optimum results
; see Comments
; [ default: all separate ]
;
; modules I intarr data from IRS modules to process
; 0 ... 5 --> SL-ap1, SL-ap2,
; LL-ap1, LL-ap2, SH, LH
; NB. - it is possible to process
; SL and LL data. However we do
; not yet know if it makes sense
; to do so,
; - for LH the defaults have not been
; verified for lack of testdata
; Any feedback is useful
; [ default: all ]
;
; bcd I intarr bcd's
; -1 : combine all bcd's
; -(list) : combine selected bcd's
; [ default: separate ]
;
; slitpos I intarr slit positions ( 0 .. 30 )
; -1 : combine all slit positions
; -(list) : combine selected sl.pos
; [ default: separate ]
;
; fmask I long select only data with
; ( flag AND fmask ) EQ 0
; [ default: '40000000'XL (== 2L^30)
; == BAD data ]
;
; wrange I fltarr[2] limit operations to wavelengths
; within wrange.
; [ default: defined by module and order ]
;
; lowpass I keyword only apply a lowpass filter for the
; fringe isolation. By default a bandpass
; with the high frequency at the
; sampling frequency (or 1/4 of the
; lower cutoff) is applied.
; [ default: bandpass ]
;
; suppress I fltarr set of wavelengths to disregard during
; continuum and fringe fitting
; (eg. at emission lines where the
; automatic masking fails)
;
; supwid I fltarr width of the suppression
; for each "suppress" wavelength or
; one for all
; [ default : instrumental fwhm ]
; general
; -------
; plot I int -1 : no plotting (== /noplot)
; 0 : plot the data and result
; 1-3: various plotting options
; see irsfringe_modflat and
; irsfringe_sine for details
; [ default: 0 ]
;
; noplot I keyword no plotting (same as plot=-1)
;
; clearplots I keyword remove plot windows on exit
;
; status O int exit status
; 0: successfully processed
; 1: error, input struct is returned
;
; MODFLAT specifics (not yet available, requires improved extraction tools)
; -----------------
; /modflat I -- Use the MODFLAT option, in this
; case no sine defringing is done
; unless /SINEFIT is set.
; nbin I int Number of wavelength regions into which
; to split each order for derivation of
; shift and smooth/enhance parameters.
; Give INTARR(1) if nbin same for all
; orders, or INTARR(nord) for each
; order separately.
; [default: 1]
;
; edge I flt What fraction of wavelength coverage
; of each order (in %) should be masked
; on the edges in shift/smooth/enhance
; determination because of, for example,
; weak signal at order edges or some
; edge anomaly.
; [default: 15% of wavelength range
; per order at each edge]
;
; method I str Method with which to determine shift
; and smooth/enhance factors.
; Possibilities are:
; 'LIN' : minimum chi square for
; linear range of parameters
; 'AMO' : amoeba minimization method,
; which has an elegant way of
; searching parameter space
; and is probably also faster
; than 'LIN'.
; Give STRARR(1) if method same for all
; orders, or STRARR(nord) for each order
; separately.
; [default: 'AMO' for all orders]
;
; noshift I intarr Do not determine nor apply phase shift
; correction to fringes in flat field
; spectrum. Either give 1 if you don't
; want shifting for any order, or an
; array with 1's and 0's for each
; echelle order.
; [default: 0, determine shift]
;
; nosmooth I intarr Do not determine nor apply amplitude
; smoothing or enhancing correction to
; fringes in flat field spectrum.
; Either give 1 if you don't want
; smoothing for any order, or an array
; with 1's and 0's for each Eachelle order.
; [default: 0, determine smooth factors]
;
; fitorder I int Fit the smooth/enhance and/or shift
; factors with a smooth polynomial as a
; function of order (as plotted)?
; -1: No, just apply the smooth/enhance
; and shift values derived for each
; order without doing polynomial fit.
; 0: Interactively go through the
; various options.
; 1: Use polynomial fit of smooth/enhance
; factors as function of order.
; Do NOT rederive shifts.
; 2: Use polynomial fit of smooth/enhance
; factors as function of order.
; Do rederive shifts with this.
; 3: Use polynomial fit of shifts as
; function of order.
; Do NOT rederive smooth/enhance
; factors.
; 4: Use polynomial fit of shifts as
; function of order.
; Do rederive smooth/enhance factors.
; 5: Use polynomial fits of shifts AND
; smooth/enhance factors as function
; of order.
; ORDER = -1 (combining all orders)
; implies FITORDER=5 unless FITORDER
; is also specified, in which case
; the specified fitorder is used.
; [default: fitorder=-1]
;
; noshift I int Do not determine nor apply phase
; shift correction to fringes in
; flat field spectrum. Either
; give 1 if you don't want shifting
; for any order, or an array with 1's
; and 0's for each echelle order.
; [default: 0, determine shift
; for each order]
;
; nosmooth I int Do not determine nor apply amplitude
; smoothing or enhancing correction
; to fringes in flat field spectrum.
; Either give 1 if you don't want
; smoothing for any order, or an array
; with 1's and 0's for each echelle order.
; [default: 0, determine smooth/enhance
; factors for each order]
;
; /iter I -- If method='LIN' then it may be
; necessary in some cases to iterate
; over shift and smooth/enhance
; determination to get the best solution.
; [default: do not iterate]
;
; filename I string File into which the fit parameters
; will be saved. If the filename is
; without extension it will get the
; default extension .xdr
; [default: modflat_params.xdr]
;
; /sinefit I -- When /MODFLAT is epcified an extra
; SINE defringing run is done
;
;
; SINE defringing specifics
; -------------------------
; cycle I real cycle of the fringe component
; searched for
; [ default SL : TBI
; LL : 650
; SH : [3500,8500]
; LH : [3000,8000] ]
;
; ncycle I int search window in cycles
; [ default SL : TBI
; LL : 600
; SH : 2000
; LH : 2500 ]
;
; cystep I real step in the cycles
; ( only useful when computer
; resources are too limited )
; [ default = 1 ]
;
; /auto I keyword automatic defringing.
;
; nfringes I int maximum number of fringes removed
; Specifying NFRINGES=-1 will
; not give any sine defringing.
; [ default: determined automatically ]
;
; tol I real remove fringes until the reduction
; in chisq is less than tol
; ( 0.01 == 1 percent )
; [ default: 0 == disabled ]
;
; weight I keyword set all weights to 1
; [ default: less weights to outliers ]
;
; fringelist O struct cumulative!! list of extracted fringes
;
; { module int IRS module
; order int order
; bcd int bcd number
; slitpos int slit position
; frin_nr int fringe number
; cycle float fringe cycle
; cosamp float amplitude of cosine component
; sinamp float amplitude of sine component
; chisq float chisq
; chi_red } float accumulative chisq reduction
;
; apply_fringelist I -- apply the input fringelist to the data
;
; evidence O flt(arr) evidence == log( probability)
; (undefined if not auto)
;
; /gui I -- Start a graphical user interface.
; First one 'default' run through
; IRSFRINGE is done after which the
; gui starts.
;
;
; Returns defringed data
;
; Description IRSFRINGE employs two methods to reduce the effect
; of fringes in IRS data. The first method is MODFLAT
; which tries to minimize the fringe residuals by
; matching the science data with the flatfield by
; shifting and smoothing the flatfield.
; The second method fits robust sine functions (which
; is the first order approximation of the formal
; optical interference function).
;
; Both methods can be used independently or together.
;
; Modifying flatfield
; -------------------
;
; Defringes the data using the correlation method, similar
; to the procedure resp_inter for ISO/SWS. The fringe phase
; is a function of source position in the slit, while the
; spectral resolution depends on the filling factor of
; the source in the slit. Straight division of observation
; and flat is thus expected to give quite strong residual
; fringes.
;
; To minimize fringe residuals, MODFLAT uses the isolated
; fringes from the astronomical observation and flat field.
; It shifts the fringe phase (i.e. wavelength scale) and
; matches the flat field spectral resolution to that of
; the observation by smoothing or artificially enhancing
; the fringe amplitudes. The modified flat field fringe
; spectrum is then multiplied back into the flat field
; 'continuum'.
;
; The astronomical spectrum is subsequently divided
; through the final modified flat field, giving a spectrum
; hopefully free of fringes and full of reliable exciting
; astronomical features.
;
; Resolved spectral features like emission lines or glitches
; are automatically detected and masked and subsequently given
; a weight zero. When there are still points that should
; not be taken along in the calculations SUPPRESS and SUPWID
; can be used to exclude these.
;
;
; Robust SINE fitting
; -------------------
;
; The sine fitting used in IRSFRINGE is the first order
; approximation of the full optical interference model.
;
; T^2 I
; It = ------- * -----------------------------
; (1-R)^2 1+(4R/(1-R)^2) * sin^2(wD!PI)
;
; where T is the transmission, R the reflectance,
; w the wavelength in wavenumbers and D the optical
; thickness of the interfering layer. For small amplitudes
; of the reflectance R this approximates to:
;
; It = A * cos(2!PIwD+a)
;
; which can be rewritten in the computationally more handy
; form used in irsfringe:
;
; It = A cos(2!PIwD) + B sin(2!PIwD)
;
; Fringes are detected in wavenumber (1/micron) space, where
; they have a constant `wavelength', in cycles per wavenumber
; (C/Wn [==micron]).
;
; To find fringes we fit a cosine function to the data
; f(n) = alfa.cos( p.n + phi ) == A.cos(p.n) + B.sin(p.n)
; A, B and p are parameters to be estimated. p the 'wavelength'
; of the fringe.
; For SH the main fringe is located at app. 3500
; cycle/wavenumber and for LH at app. 3000. A second
; component at app. 8000 is sometimes seen in very good
; S/N data.
; For a given p f(n) is a linear function which can easily
; be fitted to the data. So we search all wavelengths for
; e.g. SH from CYCLE (=2500) to CYCLE+NCYCLE*CYSTEP (=4500),
; fit A and B and find the minimum in chi-sq.
;
; In automatic mode we calculate the Bayesian evidence including
; every new fringe. We keep the fringe if this evidence is
; larger than the evidence carried by the previous set of
; fringes. The process of identifying new fringes continues
; as long as the evidence increases with each new fringe. For
; all fringes the amplitudes are determined and the total
; fringe-set is divided out.
;
; In non-automatic mode fringes are extracted until the reduction
; in chi-sq is less than TOL or the number of identified
; fringes is larger than NFRINGES. If the chi-sq increases
; the proccess stops even if the number of found fringes
; is less than NFRINGES.
;
; Before the fitting is started the fringes are isolated
; from the data using a bandpass filter for the main component
; and a lowpass filter for the high frequency component.
; It is possible to use a lowpass filter in all cases by
; using the /LOWPASS option.
;
; Resolved spectral features like emission lines or glitches
; are automatically detected and masked and subsequently given
; a weight zero. Large unmasked outliers in the background
; subtracted data are given less weight unless /WEIGHT is set.
; When there are still points that should not be taken along
; in the calculations SUPPRESS and SUPWID can be used to
; exclude these.
;
; Depending on the value of PLOT several sets of plots pop up.
; -1. (or /NOPLOT) no plotting.
; 0. The result of the fringe removal is plotted. Original data
; in white, smoothed background in red. The defringed data
; are displayed in green, offset somewhat for clarity.
; In the lower panel the background-removed data are plotted
; in white (wgt=1), red (wgt=0) or yellow (0