dokester / BayesicFitting

Bayesian fitting package
GNU General Public License v3.0
51 stars 8 forks source link
bayesian calibration-toolbox data-analysis evidence exercise fitters history hope java jupyter-notebook modeling nested-sampling pypi test-harness


 

Readme.

BayesicFitting is a package for model fitting and Bayesian evidence calculation.

In case you are wondering what that is about take a quick look at the examples in the side bars.

We have a paper out in "Astronomy and Computing" about BayesicFitting. Kester and Mueller (2021).

Citation index for the BayesicFitting package: DOI: 10.5281/zenodo.2597200

What's new.

1. History

The BayesicFitting package is a python version of the the fitter classes in Herschel Common Science System (HCSS). HCSS was the all encompassing software system for the operations and analysis of the ESA satelite Herschel. The HCSS version of the fitting software was written in JAVA, mostly by me. I encoded features and classes that were requested by my Herschel colleagues or that I remembered having used myself during my lifelong career as data analyst for earlier satellites as IRAS, ISO and AKARI. So most of the stuff in here was needed and used at a certain moment in time. Later, the package was developing in directions that were needed by my work for the James Webb Space Telescope (JWST).

The HCSS system is in the public domain under GPL3. It was used by the 3 instrument groups of the Herschel satellite to write calibration and analysis software. Since the end of the mission HCSS is not being maintained

I used a customized version of java2python (j2py on github) to translate the JAVA classes to python. However, the actual code needed serious pythonization. Every line has been inspected. Every construct has been revised.

The documentation got most profit from the automated conversion. Also the structure into classes, the inheritance, methods and dependencies are largely the same as in the original HCSS.

2. Setup

The package is written in python3 although I am not aware of using any specific python3 features. It uses numpy (>= 1.9) for its array structure, scipy (>=1.0) for linear algebra and other stuff and astropy (>=2.0) for units. Matplotlib (>=2.0) is used for plotting.

Download and unpack the BayesicFitting zip file from github. Move into the BayesicFitting-master directory and run:

python setup.py install

where python is python3. Or install it as :

pip install BayesicFitting

3. Structure

source

The BayesicFitting package consists of over 100 classes, each class in its own file. These classes can be divided into 3 broad categories: models, fitters and nested sampling. About 50 models, 10 fitters and the remainder is needed to run the nested sampling algorithm. All these classes are in a directory BayesicFitting/source. A special type of functions are found in BayesicFitting/source/kernels. They can be used to construct a model.

examples

In BayesicFitting/examples a number of scripts can be found to exercise the classes. They are in the form of jupyter notebooks. Some are using real data; others have synthetic data specially constructed to make some point.

All examples can be inspected by clicking on them. They will fold out in the browser.

To actually exercise the examples and maybe adapt then, start a jupyter notebook in your examples directory.

jupyter notebook

The program will open a list in your webbrowser where you can select a notebook file (.ipynb), which can be run.

documentation

In the documenation directory a number of documents can be found.

test

Almost all classes have a test harness. These are located in BayesicFitting/test. They can be execised as:

python -m unittest <file>

where python refers to python3 and file refers to one of the files in BayesicFitting/test.
As most functionality is tested in a test harness, examples on how to use the classes can be found there too.

4. Status

A package like this is never finished. Always more classes and/or functionalities can be added. I present it now as it is in the hope it will be usefull and it will generate feedback.

According to Wikipedia -> "Software release life cycle" it is called "Perpetual Beta". It continues to be in a beta-release because new classes and features can be added.

Some of the newer additions will be indicated as having and "Alpha" status and keep that until they matured somewhat further. These classes are more prone to change in their interfaces, methods etc.

More work needs to be done in:

5. Versions