Py4CAtS --- Python for Computational ATmospheric Spectroscopy

What's new?

July 2015
The 'main' scripts (e.g. lbl2od) can now be used as functions inside the (I)Python interpreter.
October 2015
Sources thoroughly checked with Pep8, PyFlakes, and PyChecker
Script od2ri with function dod2ri added to compute radiation intensity
March 2016
A new function cgs in module cgsUnits.py for easier conversions of physical quantities
Improved ac2wf.py and od2ri functions/modules.
July 2016
Further source code checks with Pylint
Absorption coefficients and optical depths are now stored in subclassed numpy arrays acArray and odArray (similar to xsArray before)
September 2016
Atmospheric data: corrected "CH3CL" -> "CH3Cl"
Functions atlas (in module lines.py), acPlot (in module absCo.py), and odPlot (in module oDepth.py) rewritten (to exploit recursive calls)
October 2016
xs2ac corrected to allow single level atmosphere and cross sections
November 2016
od2ri corrected to allow atmospheric data starting at ToA
Some further checks of 'important' function arguments implemented
srf.py: wavenumber shift implemented in fts function
Atmospheric data sets: trace gas profiles saved in separate file
December 2016
Setup script py4cats.py 'generalized' for Windows (pathname construction!)
Line mixing added (first order, Voigt and Lorentz, "brute force" only)
read_line_file in the lines.py script now works recursively
atlas now also allows to plot voigtLines
misc.py: new function triSpec for convolution with triangular
moreFun.py: new function erfcx for exponentially scaled complementary error function
May 2017
Function atmPlot now can plot volume mixing ratios (instead of densities), too.
radiance2radiance clean-up
November 2017
New subclassed numpy array for radiance/intensity (i.e. the radiance array along with its attributes): single return variable of function dod2ri.
New function riPlot and updated/adjusted function riSave to plot and save radiance.
New function truncate in module misc.py
January 2018
atmos1D.py:
New function readVMR to read (trace) gas concentration data (i.e. without pressure and temperature);
Function merge_atmos1D can use pure VMR data as second input.
Atmospheric data sets clean-up, reorganized, ...
March 2018
py4cats.py:
Identification / location of path to source files reorganized
wgtFct.py:
(Unix/Linux/...) shell interface adjusted to acArray implementation
lbl2xs.py (and extract.py, hitran.py, geisa.py):
Pressure-induced line shift implemented
June 2018
lines.py --- function atlas: recoded to ensure common wavenumber axis for splitted plots
atmos1D.py: functions merge_atmos1D and regrid updated

Summer 2018
Code ported to Python 3 (the Python 2 code is frozen now!)

October 2018
lbl2xs.py --- a new option cpT to specify the pressure and temperature columns in the pT file
xs2ac.py, ac2od.py, xs2od.py --- new executable scripts to do these steps from the command line (i.e. "wrappers" for the corresponding functions to be called from the command line / (unix) terminal)
extract.py renamed to higstract.py consistent with the main function of this module
December 2018
radInt.py --- new module defining a subclassed array riArray for radiation-intensity, including functions for read, save, and plot
February 2019
Failed matplotlib imports: raise SystemExit errors replaced by print warnings
Module planck.py: new function dPlanck_Wavenumber_dT
Module higstract.py: new method strong for subclassed numpy array lineArray
Module radInt.py: info on spectral response added to legend produced by riPlot
Module wgtFct.py: new method convolve for subclassed numpy array wfArray
March 2019
Module radInt.py: inconsistencies of header comment lines between riSave and riRead removed
Python 2 sources (in directory src2) removed from tarball
April 2019
Broken/incorrect links from bin directory to ../src directory repaired (incorrectly to ../src3)
Module srf.py: function Triangle corrected
Demo file corrected: mls=atmos1D(...) ---> mls=atmRead(...)

May 2019
Py4CAtS paper published in Atmosphere 10(5), pp. 262, 2019

May-July 2019
Modules absCo.py, oDepth.py, xSection: old regrid methods removed
Module ac2wf.py: FoV loop in function ac2wf corrected to wfArray
Module atmos1D.py: function cmr with new (second) optional argument what; misc changes in functions atmRead, atmPlot
Module lbl2xs.py: function lbl2xs terminates with non-positive pressure or temperature
Module misc.py: function show_lambda more wavenumbers in NIR added
Module pairTypes.py: class Interval division corrected Python 2 __(r)div__ to Python 3 __(r)truediv__
Module radInt.py: new special method kelvin in class riArray to return equ. brightness temperature
Module wgtFct.py: function wfPlot: contour levels can be set explicitely, axis labels can be suppressed
Cosmetic changes in module ac2wf.py, aeiou.py, srf.py
September 2019 -- January 2020
Module aeiou.py: function loadxyy with new optional argument xLimits
Module cgsUnits: lengthsUnits: ly, pc added; functions lambda2nu, nu2lambda: first argument (wavelengths or wavenumbers) are variable list arguments
Module lineshapes.py: function Rautian now calling hum2wei32 (old: hum1wei24)
Module misc.py: function show_lambda with new arguments frmt, yShift, nanometer
Module py4cats.py: import show_lambda added;
Module oDepth.py: functions oDepth_altitudes, oDepth_pressures optionally return altitudes or pressures in km, mb, ....
Module xSection.py: function xsSave: third and fourth arguments swapped (interpolate <--> commentChar)
function xsRead: now can be called recursively
July 2020
Module convolution.py: functions convolveBox, convolveTriangle, convolveGauss: the number of grid points for the new wGrid is now evaluated as int()
Module myMatPlotLib.py: new module with some extra settings
Module py4cats.py: last section with matplotlib settings removed (now in new file myMatPlotLib.py)