!!!Correction for EIS Line Centre Variations Due To Orbital Motion Using Instrument Temperatures

An empirical model has been developed to reproduce the drift of the EIS spectrum using instrumental house keeping temperatures and relative motion of the spacecraft, see S. Kamio et al (2010). 

(Click [here|http://folk.uio.no/tfredvik/astro/wavecorr/list.txt] to see a complete list of all new and modified SolarSoft routines)

The wavelength correction can be found using {{eis_wave_corr_hk.pro}}, the {{gethkwavecorr()}} method of the eis_data object or eis_prep.pro. All procedures use specially prepared house keeping data files that are distributed with SolarSoft in the directory {{$EIS_DATA/wave_corr}}. If the house keeping files that are needed for correcting a certain EIS raster are missing in your SolarSoft installation, the new routines will search for the files in {{$EIS_WAVE_CORR_HK_DATA}} (if this environment variable is set), and in the current working directory. If the files are not found, they will automatically be downloaded from the Oslo archive and saved in {{$EIS_WAVE_CORR_HK_DATA}} (if set) or to the current working directory (if not set). 

!!1. eis_wave_corr_hk.pro

This is simply a wrapper procedure calling the necessary methods of the {{eis_data}} object. It is called with the same parameters as the well known {{eis_wave_corr.pro}}:

{{{
  IDL> paths = '~/hinodedata/eis/mission/2007/12/11/eis_l0_20071211_162413.fits.gz' ; This file can be downloaded here
  IDL> eis_wave_corr_hk, paths, wvl_corr_hk, dw_tilt_hk, dw_t_hk  ; The two last parameters are optional
  IDL> plot, dw_t_hk,/xst,/yst
  IDL> eis_wave_corr, paths, wvl_corr, dw_tilt, dw_t ; The two last parameters are optional
  IDL> oplot, dw_t, line=2
}}}

In addition {{eis_wave_corr_hk}} takes two keywords:

* wvl_cube: If set to a named variable, wvl_cube will return a 3 dimensional wavelength cube in the format used by mk_analysis.pro of the Component Fitting System for IDL (cfit) package.
* lam: the underlying methods of eis_data calculates the wavelength correction in pixels, and we assume that the shift in pixels is the same for all lines formed at any location on the two detectors. However, when measured in Angstroms the line centre variation and the slit tilt will vary slightly with wavelength. As default, eis_wave_corr_hk assumes that the corrections are to be calculated for the Fe XII 195 Å line, but the lam keyword may be set to the wavelength of the line you want to investigate.

{{{
  IDL> eis_wave_corr_hk, paths, wvl_corr_hk2, dw_tilt_hk2, dw_t_hk2, wvl_cube=wvl_cube, lam=284.16
  IDL> help, wvl_cube
  IDL> loadct,12 & oplot, dw_t_hk2, color=170 ; The 284.16 plot is very similar to the 195.12 plot
}}}

Finally, eis_wave_corr_hk can take a level 0 or level 1 eis_data object reference as input instead of a file name:

{{{
  IDL> o = obj_new('eis_data',paths)
  IDL> eis_wave_corr_hk, o, wvl_corr
}}}

!!2. gethkwavecorr(), a new eis_data method

When creating an {{eis_data}} object, the aux_data will contain two new null pointers, {{hkpixcorrtilt}} and {{hkpixcorrtime}}:

{{{
  IDL> o = obj_new('eis_data',paths)
  IDL> help, o->getaux_data(),/str
}}}

The two pointers will become valid when the method {{gethkwavecorr()}} is called (i.e. when you try to access the contents of the pointers):

{{{
  IDL> corr = o->gethkwavecorr()
  IDL> help, corr,/str
  IDL> help, o->getaux_data(),/str
}}}

The {{gethkwavecorr()}} may be called with a wavelength as input parameter, or with the keyword {{wvl_cube}} set, to get the same functionality as for the {{eis_wave_corr_hk}} wrapper as explained above.

{{{
  IDL> corr = o->gethkwavecorr(/wvl_cube)
  IDL> help,corr,/str
  IDL> corr = o->gethkwavecorr(284.16)
  IDL> oplot,corr.time,color=0
}}}

!!3. eis_prep.pro, with hkwavecorr set

{{eis_prep.pro}} now accepts the keyword {{hkwavecorr}}. If set, the resulting level 1 file will contain the wavelength correction information.

{{{
  IDL> eis_prep,paths,outdir='~/',/hkwavecorr,/default,/quiet,/save
  IDL> o = obj_new('eis_data','~/eis_l1_20071211_162413.fits')
  IDL> help,o->getaux_data(),/str
  IDL> corr = o->gethkwavecorr()
  IDL> oplot,corr.time
}}}