Py4CAtS --- Python for Computational ATmospheric Spectroscopy

What's new?

March 21 --- Summer21 --- Fall 21 --- Winter 21/22 --- Summer 22

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 for easier conversions of physical quantities
Improved 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, acPlot (in module, and odPlot (in module 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 wavenumber shift implemented in fts function
Atmospheric data sets: trace gas profiles saved in separate file
December 2016
Setup script 'generalized' for Windows (pathname construction!)
Line mixing added (first order, Voigt and Lorentz, "brute force" only)
read_line_file in the script now works recursively
atlas now also allows to plot voigtLines new function triSpec for convolution with triangular 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
January 2018
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
Identification / location of path to source files reorganized
(Unix/Linux/...) shell interface adjusted to acArray implementation (and,,
Pressure-induced line shift implemented
June 2018 --- function atlas: recoded to ensure common wavenumber axis for splitted plots functions merge_atmos1D and regrid updated

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

October 2018 --- a new option cpT to specify the pressure and temperature columns in the pT file,, --- 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) renamed to consistent with the main function of this module
December 2018 --- 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 new function dPlanck_Wavenumber_dT
Module new method strong for subclassed numpy array lineArray
Module info on spectral response added to legend produced by riPlot
Module new method convolve for subclassed numpy array wfArray
March 2019
Module 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 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,, xSection: old regrid methods removed
Module FoV loop in function ac2wf corrected to wfArray
Module function cmr with new (second) optional argument what; misc changes in functions atmRead, atmPlot
Module function lbl2xs terminates with non-positive pressure or temperature
Module function show_lambda more wavenumbers in NIR added
Module class Interval division corrected Python 2 __(r)div__ to Python 3 __(r)truediv__
Module new special method kelvin in class riArray to return equ. brightness temperature
Module function wfPlot: contour levels can be set explicitely, axis labels can be suppressed
Cosmetic changes in module,,
September 2019 -- January 2020
Module 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 function Rautian now calling hum2wei32 (old: hum1wei24)
Module function show_lambda with new arguments frmt, yShift, nanometer
Module import show_lambda added;
Module functions oDepth_altitudes, oDepth_pressures optionally return altitudes or pressures in km, mb, ....
Module function xsSave: third and fourth arguments swapped (interpolate <--> commentChar)
function xsRead: now can be called recursively
July 2020
Module functions convolveBox, convolveTriangle, convolveGauss: the number of grid points for the new wGrid is now evaluated as int()
Module new module with some extra settings
Module last section with matplotlib settings removed (now in new file

March 2021
Source code now reorganized as a package
Source files are now distributed over three subdirectories
  • lbl: modules related to lbl computations incl. Hitran/Geisa database access, Voigt routines etc.;
  • art: modules related to atmospheric radiative transfer;
  • aux: auxiliary modules that should/could be useful in any context, e.g. input/output routines.
The setup module is not required anymore, import of the Py4CAtS modules is now organized by the files, in the (I)Python shell simply say
from py4cats import *

Spring - Summer 2021
  Plot functions
atmPlot, acPlot, odPlot, riPlot, xsPlot functions have an additional argument **kwArgs (passed thru to MatPlotLib's functions)
acPlot, odPlot, xsPlot with an additional argument xUnit (instead of flag mue or nm)
  Module art/
column density now saved as an additional entry in the odArray instance
  Module aux/
new module for aerosol optical depth using simple power law (Angstrom coefficient)
  Module lbl/
improved/extended support of "beyond Voigt" line parameters in SEOM database
  Module aux/ir.ry
added radiusEarth, radiusSun, radiusJupiter, massEarth, massSun, massJupiter
  Module lbl/
functions lbl_2grids, lbl_3grids: defaults changed to gridRatio=8, lagrange=2;
function lbl_brute: handling/selection of "beyond Voigt" line shapes changed;
function lbl2xs: initial check of `lineshape` modified;
new function init_xSection: setup wavenumber grid (old,original function wavenumber2xs) and zero xs array
  Module lbl/
lineArray class info with better support of "beyond Voigt" parameters;
function xVoigt_parameters with support for "beyond Voigt" parameters (extended version of old `voigt_parameters`);
new function llInfo
  Module lbl/
function argument `S` replaced by `strength`;
function Voigt: call hum1wei32 for tiny y (otherwise hum1wei24);
function Rautian: call hum1wei32 (original hum1wei24);
speed-dependent profiles: now calling sdv and sdr functions (in new module sdr)
  Module art/
new module for limb (occultation) transmission and effective height
  Module lbl/
new molecules (hitran20, geisa19/20) added
  Module art/
class odArray with new attribute column density;
convolve method with default Gauss;
new function odConvolve (calls class method for a list/dictionary of optical depths);
function odSave with new flag transmission to optionally save exp(-od);
functions oDepth_altitudes, oDepth_pressures can return data in non-cgs units (e.g. km or mb)
  Module art/
completely rewritten with added support for surface reflection etc
  Module aux/
new function hum1wei24w;
NOTE: all function except for zpf16p use two real arguments (x,y); zpf16p(z) is used by the sdr module/functions only!
  Module art/
new module for Rayleigh extinction
  Module art/
class riArray with new method noise;
convolve method with default Gauss;
new function riConvolve (calls class method for a list/dictionary of radiances);
function riRead now returns a dictionary of riArray's if all entries of the pickle file have a `key`;
function riSave: if called with a dictionary of riArray's, save each as dictionary with an extra `key`
  Module lbl/
new module for speed-dependent Voigt and Rautian functions
  Module aux/
function HyperGauss: bug fix of sqrtLn2**3 ---> sqrtLn2**(1/3); function UltraGauss added
  Module aux/
new functions strucArrayChangeName and strucArrayUpdate
  Module art/
function wfPeakHeight now returns altitudes in cm

Fall 2021

  Modules art/ and art/
acArray attribute molec now saves a dictionary of molecules vs. number densities (old: only (absorbing) molecule names);
this dictionary is set by the xs2ac function and the densities are required by the cia(.py) module/function.
  Module lbl/
three new options for function lbl2od to add cia, Rayleigh, and aerosol extinction to absorption coefficient(s) and optical depth(s)
  Module art/
new module for collision-induced absorption

Winter 2021/22

  Module art/
The function atmPlot can plot all molecular profiles simultaneously with a call atmPlot(atmosData, what='*')
Function _atmosData2cgs: mass density is now removed from atmospheric data.
  Module art/
new class method dict for odArray
function _odSave_pickled: redundant code cleaned up by call of odArray.dict class method
function odInfo: now also accepting dictionary of odArrays
  Module art/
new class methods dict and append for riArray
function _riSave_pickled: redundant code cleaned up by call of riArray.dict class method
function _riRead_pickled: redundant code cleaned up using call to new function dict2riArray
function riConvolve and class method convolve: new wavenumber grid can be set
new function riConcatenate (calling class method riArray.append repeatedly)
  Modules lbl/ and lbl/
In the corresponding functions a consistency test of atmospheric vs line data has been implemented: stop if line data are given, but no corresponding concentrations
  Module aux/
new function dict_items2groups
  Module aux/
new function strucArrayDef
  Module aux/
new class method dict for the three pair classes
Interval initialization more flexible: now also accepts lists, dictionaries (with two elements), and pairs
  Numerous modules:
raise SystemExit replaced by more specific raise ValueError etc.
  html documentation updated

Spring/Summer 2022

  Module art/
new function odSum: alternative implementation of dod2tod
WARNING: slightly different total optical depth (see source file for discussion)
  Module aux/
convolveBox, convolveTriangle with new option wGrid
convolveGauss with arguments rearranged
  Module aux/
new response function gaussBox
  Module aux/
new function gridStep
  Module aux/
new function dict_items2groups
  html documentation updated
subdirectories art, aux, lbl corresponding to the package structure