1
0
mirror of https://github.com/aportelli/LatAnalyze.git synced 2024-11-14 01:45:35 +00:00

Readme update

This commit is contained in:
Antonin Portelli 2024-02-10 18:40:55 +01:00
parent a0c654003d
commit f5b3e33fc8

View File

@ -3,19 +3,19 @@
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![DOI](https://zenodo.org/badge/10201777.svg)](https://zenodo.org/badge/latestdoi/10201777) [![Build Ubuntu](https://github.com/aportelli/LatAnalyze/actions/workflows/build-ubuntu.yml/badge.svg)](https://github.com/aportelli/LatAnalyze/actions/workflows/build-ubuntu.yml) [![Build macOS](https://github.com/aportelli/LatAnalyze/actions/workflows/build-macos.yml/badge.svg)](https://github.com/aportelli/LatAnalyze/actions/workflows/build-macos.yml) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![DOI](https://zenodo.org/badge/10201777.svg)](https://zenodo.org/badge/latestdoi/10201777) [![Build Ubuntu](https://github.com/aportelli/LatAnalyze/actions/workflows/build-ubuntu.yml/badge.svg)](https://github.com/aportelli/LatAnalyze/actions/workflows/build-ubuntu.yml) [![Build macOS](https://github.com/aportelli/LatAnalyze/actions/workflows/build-macos.yml/badge.svg)](https://github.com/aportelli/LatAnalyze/actions/workflows/build-macos.yml)
## Description ## Description
LatAnalyze is a C++11 library for statistical data analysis based on bootstrap LatAnalyze is a C++14 library for statistical data analysis based on bootstrap
resampling. It has been written with lattice QCD data analysis in mind (hence resampling. It has been written with lattice QCD data analysis in mind (hence
the name), but its features are not lattice specific and can be used more general statistical context. the name), but its features are not lattice specific and can be used more general statistical context.
Sadly a proper documentation was never written, but some comprehensive examples covering most features can be found in the `examples` directory. Sadly a proper documentation was never written, but some comprehensive examples covering several key features can be found in the `examples` directory.
The main features are the following: The main features are the following:
* Array and matrix types with fast arithmetic operations based on [Eigen](http://eigen.tuxfamily.org). * Array and matrix types with fast arithmetic operations based on [Eigen](http://eigen.tuxfamily.org).
* High-level types for bootstrap sample manipulation (including various statistical estimators and histogramming). * High-level types for bootstrap sample manipulation (including various statistical estimators and histogramming).
* Mathematical expression parser for runtime defined functions. * Mathematical expression parser for runtime defined functions.
* Data I/O in ASCII and HDF5 (optional). * Data I/O in ASCII, XML, and HDF5.
* High-level wrappers to minimisation routines from the [GSL](http://www.gnu.org/software/gsl/), [Minuit](http://seal.web.cern.ch/seal/snapshot/work-packages/mathlibs/minuit/) (optional) and [NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt). * High-level wrappers to minimisation routines from the [GSL](http://www.gnu.org/software/gsl/), [Minuit 2](https://github.com/root-project/root/tree/master/math/minuit2) (optional) and [NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt).
* Non-linear regression with error on independent variables (through total least squares). * Non-linear regression with error on independent variables (through total least squares).
* High-level wrappers to numerical integrator and non-linear solver from the [GSL](http://www.gnu.org/software/gsl/). * High-level wrappers to numerical integrator and non-linear solver from the [GSL](http://www.gnu.org/software/gsl/).
* High-level functional types for function of model. General functions can be defined from C pointers, C++ objects, strings of mathematical expressions or tabulated data. * High-level functional types for function of model. General functions can be defined from C pointers, C++ objects, strings of mathematical expressions or tabulated data.
@ -24,14 +24,14 @@ The main features are the following:
## Installation ## Installation
The head of the `master` branch always points to the latest stable release. The `develop` branch is the main unstable branch of LatAnalyze. The head of the `master` branch always points to the latest stable release. The `develop` branch is the main unstable branch of LatAnalyze.
LatAnalyze is written in C++11 and requires a rather recent C++ compiler to be built. It has been successfully built on various Linux and OS X platforms using clang (from 3.7), GCC (from 4.9) and the Intel C++ compiler (2016). LatAnalyze is written in C++14. It has been successfully built on various Unix platform using reasonably recent versions of Clang or GCC.
The only strict dependencies is the [GSL](http://www.gnu.org/software/gsl/). The only strict dependencies are the [GSL](http://www.gnu.org/software/gsl/) and [HDF5](https://www.hdfgroup.org/HDF5/) (built with C++ support).
Additionally, autoconf, automake (from 1.11), libtool, bison (from 3.0) and flex are necessary to build the library. Unless you use a very exotic system, these tools are standard on any Unix platform and should be already present or easy to install through a package manager. Additionally, cmake (from 3.11), bison (from 3.0) and flex are necessary to build the library. Unless you use a very exotic system, these tools are standard on any Unix platform and should be already present or easy to install through a package manager.
Optional dependencies are [HDF5](https://www.hdfgroup.org/HDF5/) (built with C++ support), [Minuit](http://seal.web.cern.ch/seal/snapshot/work-packages/mathlibs/minuit/) and [NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt). Optional dependencies are [Minuit 2](https://github.com/root-project/root/tree/master/math/minuit2) and [NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt).
Below are instructions for a quick installation. For a more customised installation, one first needs to generate the build system by running `./bootstrap.sh` in the root directory. Then the library can be built and installed through the usual GNU mantra `./configure <options> && make && make install`. Use `./configure --help` to obtain a list of possible options for `./configure`. Because Eigen expressions rely a lot on inlining and compiler optimisations it is strongly recommended to set the `CXXFLAGS` variable to `-O3 -march=native -mtune=native`. LatAnalyze is built through CMake. Below are example instructions for compiling and installing LatAnalyze.
### General quick installation ### Portable quick installation
For a quick installation with all possible extensions execute: For a quick installation with all possible extensions execute:
``` ```
./install-latan.sh <prefix> ./install-latan.sh <prefix>
@ -43,19 +43,53 @@ All the dependencies of LatAnalyze can be installed through the [Homebrew](https
``` ```
brew install automake autoconf libtool bison flex gsl minuit2 nlopt hdf5 brew install automake autoconf libtool bison flex gsl minuit2 nlopt hdf5
``` ```
Then generate the build system in LatAnalyze main directory by running the `./bootstrap.sh` script. Finally, build the library Then build the library with `cmake`
``` ```
mkdir build mkdir build
cd build cd build
../configure --prefix=<prefix> --with-minuit=/usr/local --with-nlopt=/usr/local \ cmake -DCMAKE_INSTALL_PREFIX=<prefix> -DCMAKE_BUILD_TYPE=Release ..
--with-hdf5=/usr/local --with-gsl=/usr/local \
CXXFLAGS='-g -O3 -march=native -mtune=native'
make -j <n> make -j <n>
make install make install
``` ```
where `<prefix>` should be replaced by the desired prefix for LatAnalyze installation, and `<n>` is the number of parallel build processes (typically twice your number of cores). where `<prefix>` should be replaced by the desired prefix for LatAnalyze installation, and `<n>` is the number of parallel build processes.
### Dependencies through Homebrew/Linuxbrew
If you use Homebrew/Linuxbrew to manage packages, the following command can install all the dependencies of LatAnalyze (including optional ones)
## Using LatAnalyze in CMake projects
When LatAnalyze is installed, the necessary CMake module configuration files to link against the library are available in the installation prefix.
To link against LatAnalyze in a downstream CMake project, simply use
```cmake
find_package(LatAnalyze)
target_link_libraries(<my_app> LatAnalyze::LatAnalyze)
```
where `<my_app>` is a CMake target. If LatAnalyze was installed in a non-standard prefix, you might have to set `CMAKE_PREFIX_PATH` accordingly for `find_package` to be successful.
You can additionally modify the `find_package` to ensure specific components are supported
```cmake
find_package(LatAnalyze REQUIRED COMPONENTS <...>)
```
where `<...>` is a space separated list of components. Currently available components are
- `MINUIT2`: Minuit 2 minimisers
- `NLOPT`: NLopt minimisers
## History ## History
#### v3.6
Build system:
* automake build discontinued, now using CMake
* CI through GitHub Actions
Additions:
* Discrete wavelet transform
* Thread pools
* Correlation dynamic range (CDR) calculation
* Data filtering and CDR optimisation
Changes:
* Significant optimisation of covariance matrix calculation
* Covariance matrix available for any `StatArray` (not only resampled arrays)
#### v3.5.1 #### v3.5.1
Various fixes and cleaning of outdated code. Various fixes and cleaning of outdated code.