This code will fit the telluric absorption spectrum in data, using LBLRTM. More details can be found in the documentation and examples, but the installation and run procedure are outlined below. If you use this code, please cite my paper.
New for 2021: Python 3 support!
As of version v1.4.0 TelFit now only runs on Python 3. Python 2 support has been dropped, though it is technically still possible to install old Python 2 versions pre-v1.4.0. The code has been tested on Python 3.7, and may work with other minor versions. Code installation requires the following packages:
- matplotlib
- numpy v1.6 or greater
- scipy v0.13 or greater
- astropy v0.2 or greater
- lockfile
- pysynphot v0.7 or greater
- fortranformat
- cython
- requests
The bolded entries are required before installation, so make sure you get them from pip, apt-get/yum, or conda (depending on your OS and python distribution). The setup script will attempt to install the rest if you don't have them, but I suggest doing it yourself just to make sure nothing goes wrong. Once you have the dependencies, simply type
pip install TelFit
to install TelFit. It may take a while, as it needs to build the LBLRTM code and some of its standard input files.
To run TelFit, you should create a script like in the examples. The key parts of the script are the inputs to the TelluricFitter class. You should:
- Initialize fitter: fitter = TelluricFitter()
- Define variables to fit: must provide a dictionary where the key is the name of the variable, and the value is the initial guess value for that variable. Example: fitter.FitVariable({“ch4”: 1.6, “h2o”: 45.0})
- Edit values of constant parameters: similar to FitVariable, but the variables given here will not be fit. Useful for settings things like the telescope pointing angle, temperature, and pressure, which will be very well-known. Example: fitter.AdjustValue({“angle”: 50.6})
- Set bounds on fitted variables (fitter.SetBounds): Give a dictionary where the key is the name of the variable, and the value is a list of size 2 of the form [lower_bound, upper_bound]
- Import data (fitter.ImportData): Copy data as a class variable. Must be given as a DataStructures.xypoint instance
- Perform the fit: (fitter.Fit): Returns a DataStructures.xypoint instance of the model. The x-values in the returned array are the same as the data.