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 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)
- 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 py4cats.py is not required anymore, import of the Py4CAtS modules is now organized by the __init__.py 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/ac2od.py:
- column density now saved as an additional entry in the odArray instance
- Module aux/aerosol.py
- new module for aerosol optical depth using simple power law (Angstrom coefficient)
- Module lbl/higstract.py
- improved/extended support of "beyond Voigt" line parameters in SEOM database
- Module aux/ir.ry
- added radiusEarth, radiusSun, radiusJupiter, massEarth, massSun, massJupiter
- Module lbl/lbl.py
- 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/lines.py
- 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/lineshapes.py
- 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/limb.py:
- new module for limb (occultation) transmission and effective height
- Module lbl/molecules.py
- new molecules (hitran20, geisa19/20) added
- Module art/oDepth.py
- 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/od2ri.py
- completely rewritten with added support for surface reflection etc
- Module aux/racef.py
- 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/rayleigh.py
- new module for Rayleigh extinction
- Module art/radInt.py
- 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/sdr.py
- new module for speed-dependent Voigt and Rautian functions
- Module aux/srf.py
- function HyperGauss: bug fix of sqrtLn2**3 ---> sqrtLn2**(1/3);
function UltraGauss added
- Module aux/struc_array.py
- new functions strucArrayChangeName and strucArrayUpdate
- Module art/wgtFct.py
- function wfPeakHeight now returns altitudes in cm
- Fall 2021
- Modules art/absCo.py and art/xs2ac.py
- 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/lbl2od.py
- three new options for function lbl2od to add cia, Rayleigh, and aerosol extinction to absorption coefficient(s) and optical depth(s)
- Module art/cia.py
- new module for collision-induced absorption
- Winter 2021/22
- Module art/atmos1D.py
- 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/oDepth.py
- 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/radInt.py
- 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/lbl2ac.py and lbl/lbl2od.py
- 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/misc.py
- new function dict_items2groups
- Module aux/struc_array.py
- new function strucArrayDef
- Module aux/pairTypes.py
- 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/oDepth.py
- new function odSum: alternative implementation of dod2tod
WARNING: slightly different total optical depth (see source file for discussion)
- Module aux/convolution.py
- convolveBox, convolveTriangle with new option wGrid
- convolveGauss with arguments rearranged
- Module aux/srf.py
- new response function gaussBox
- Module aux/euGrid.py
- new function gridStep
- Module aux/misc.py
- new function dict_items2groups
- html documentation updated
- subdirectories art, aux, lbl corresponding to the package structure