mirror of
https://github.com/aportelli/LatAnalyze.git
synced 2025-04-08 18:30:44 +01:00
Compare commits
No commits in common. "master" and "3.3" have entirely different histories.
5
.gitignore
vendored
5
.gitignore
vendored
@ -31,6 +31,11 @@ lib/eigen_files.mk
|
|||||||
# CI builds
|
# CI builds
|
||||||
ci-scripts/local/*
|
ci-scripts/local/*
|
||||||
|
|
||||||
|
# CLion stuff
|
||||||
|
.idea/*
|
||||||
|
CMakeLists.txt
|
||||||
|
cmake-build-debug/*
|
||||||
|
|
||||||
# VS Code Studio stuff
|
# VS Code Studio stuff
|
||||||
.vscode
|
.vscode
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
50
.travis.yml
50
.travis.yml
@ -1,4 +1,8 @@
|
|||||||
language: cpp
|
language: cpp
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
email: false
|
||||||
|
slack: ukqcd:mQLXCtz8D2cg89xT8j1a4wku
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
@ -8,32 +12,56 @@ cache:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: osx
|
- os: osx
|
||||||
osx_image: xcode10.1
|
osx_image: xcode7.2
|
||||||
compiler: clang
|
compiler: clang
|
||||||
- os: osx
|
- os: osx
|
||||||
osx_image: xcode10.1
|
osx_image: xcode7.2
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
env: VERSION=-7
|
env: VERSION=-5
|
||||||
- compiler: gcc
|
- compiler: gcc
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
packages:
|
packages:
|
||||||
- g++-7
|
- g++-4.9
|
||||||
|
- libgsl0-dev
|
||||||
- flex
|
- flex
|
||||||
- bison
|
- bison
|
||||||
env: VERSION=-7
|
env: VERSION=-4.9
|
||||||
|
- compiler: gcc
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-5
|
||||||
|
- libgsl0-dev
|
||||||
|
- flex
|
||||||
|
- bison
|
||||||
|
env: VERSION=-5
|
||||||
- compiler: clang
|
- compiler: clang
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
packages:
|
packages:
|
||||||
- g++-7
|
- g++-4.8
|
||||||
|
- libgsl0-dev
|
||||||
- flex
|
- flex
|
||||||
- bison
|
- bison
|
||||||
env: CLANG_LINK=http://releases.llvm.org/7.0.1/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz
|
env: CLANG_LINK=http://llvm.org/releases/3.6.0/clang+llvm-3.6.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz
|
||||||
|
- compiler: clang
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-4.8
|
||||||
|
- libgsl0-dev
|
||||||
|
- flex
|
||||||
|
- bison
|
||||||
|
env: CLANG_LINK=http://llvm.org/releases/3.7.0/clang+llvm-3.7.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- export LATDIR=`pwd`
|
- export LATDIR=`pwd`
|
||||||
@ -42,8 +70,9 @@ before_install:
|
|||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then export PATH="${LATDIR}/ci-scripts/clang/bin:${PATH}"; fi
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then export PATH="${LATDIR}/ci-scripts/clang/bin:${PATH}"; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then export LD_LIBRARY_PATH="${LATDIR}/ci-scripts/clang/lib:${LD_LIBRARY_PATH}"; fi
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then export LD_LIBRARY_PATH="${LATDIR}/ci-scripts/clang/lib:${LD_LIBRARY_PATH}"; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install bison flex cmake; export PATH="/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH"; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install gsl; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]] && [[ "$CC" == "gcc" ]]; then brew install gcc@${VERSION#-}; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install bison flex; export PATH="/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH"; fi
|
||||||
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]] && [[ "$CC" == "gcc" ]]; then brew install gcc5; fi
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- export CC=$CC$VERSION
|
- export CC=$CC$VERSION
|
||||||
@ -56,8 +85,7 @@ install:
|
|||||||
- ./install-deps.sh `pwd`/local
|
- ./install-deps.sh `pwd`/local
|
||||||
- cd ..
|
- cd ..
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export LD_LIBRARY_PATH=${LATDIR}/ci-scripts/local/lib:$LD_LIBRARY_PATH; fi
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export LD_LIBRARY_PATH=${LATDIR}/ci-scripts/local/lib:$LD_LIBRARY_PATH; fi
|
||||||
- if [[ "$CC" == "gcc-7" ]]; then export CXXFLAGS='-Wno-int-in-bool-context'; fi
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- cd ci-scripts
|
- cd ci-scripts
|
||||||
- ./install-latan.sh `pwd`/local
|
- ./install-latan.sh `pwd`/local $TRAVIS_OS_NAME
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
SUBDIRS = lib utils physics examples
|
SUBDIRS = lib utils physics examples
|
||||||
|
|
||||||
bin_SCRIPTS=latan-config
|
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I .buildutils/m4
|
ACLOCAL_AMFLAGS = -I .buildutils/m4
|
||||||
|
79
Readme.md
79
Readme.md
@ -1,6 +1,22 @@
|
|||||||
# LatAnalyze
|
# LatAnalyze
|
||||||
|
Contributors: Antonin Portelli, Matt Spraggs
|
||||||
|
|
||||||
[](https://www.gnu.org/licenses/gpl-3.0) [](https://zenodo.org/badge/latestdoi/10201777) [](https://github.com/aportelli/LatAnalyze/actions/workflows/build-ubuntu.yml) [](https://github.com/aportelli/LatAnalyze/actions/workflows/build-macos.yml)
|
License: GNU General Public License v3
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Last stable release</td>
|
||||||
|
<td><a href="https://travis-ci.org/aportelli/LatAnalyze">
|
||||||
|
<img src="https://travis-ci.org/aportelli/LatAnalyze.svg?branch=master"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Development branch</td>
|
||||||
|
<td><a href="https://travis-ci.org/aportelli/LatAnalyze">
|
||||||
|
<img src="https://travis-ci.org/aportelli/LatAnalyze.svg?branch=develop"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
LatAnalyze is a C++11 library for statistical data analysis based on bootstrap
|
LatAnalyze is a C++11 library for statistical data analysis based on bootstrap
|
||||||
@ -25,69 +41,20 @@ The main features are the following:
|
|||||||
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++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).
|
||||||
The only strict dependencies is the [GSL](http://www.gnu.org/software/gsl/).
|
The strict dependencies are the [GSL](http://www.gnu.org/software/gsl/) and [LatCore](https://github.com/aportelli/LatCore).
|
||||||
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, 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.
|
||||||
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 [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).
|
||||||
|
|
||||||
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`.
|
|
||||||
|
|
||||||
### General 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> {osx|linux}
|
||||||
```
|
```
|
||||||
in the `ci-scripts` directory where `<prefix>` is where you want LatAnalyze (and its dependencies) to be installed. This script will automatically download, build and install GSL, HDF5, Minuit, and NLopt.
|
in the `ci-scripts` directory where `<prefix>` is where you want LatAnalyze (and its dependencies) to be installed and `{osx|linux}` should be the name of your OS. This script will automatically download, build and install LatCore, HDF5, Minuit and NLopt. It is assumed that the GSL can be found in a standard location (_e.g._ it has been installed through a package manager for Linux and is present in `/usr/local` for OS X).
|
||||||
|
|
||||||
### Quick installation on macOS with dependencies through Homebrew
|
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`.
|
||||||
All the dependencies of LatAnalyze can be installed through the [Homebrew](https://brew.sh) package manager.
|
|
||||||
```
|
|
||||||
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
|
|
||||||
```
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
../configure --prefix=<prefix> --with-minuit=/usr/local --with-nlopt=/usr/local \
|
|
||||||
--with-hdf5=/usr/local --with-gsl=/usr/local \
|
|
||||||
CXXFLAGS='-g -O3 -march=native -mtune=native'
|
|
||||||
make -j <n>
|
|
||||||
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).
|
|
||||||
|
|
||||||
## History
|
## History
|
||||||
#### v3.5.1
|
|
||||||
Various fixes and cleaning of outdated code.
|
|
||||||
|
|
||||||
#### v3.5
|
|
||||||
Additions:
|
|
||||||
* 'Impulse' & line type plots
|
|
||||||
* Plot line width & dash modifiers
|
|
||||||
* Plot palettes (`category10` by default)
|
|
||||||
* Multivariate Gaussian RNG
|
|
||||||
* 2-pt fitter 'scan' mode over all possible fit ranges
|
|
||||||
* Command line utility for plotting data
|
|
||||||
|
|
||||||
Changes:
|
|
||||||
* Complete overhaul of the header structure
|
|
||||||
* Integration of LatCore in LatAnalyze
|
|
||||||
* p-value is now a 2-sided chi^2 test, 1-sided value kept as 'chi^2 CCDF'
|
|
||||||
|
|
||||||
Fixes:
|
|
||||||
* Matrix plot data now saving correctly
|
|
||||||
* Many compatibility fixes
|
|
||||||
|
|
||||||
#### v3.4
|
|
||||||
Additions:
|
|
||||||
* `latan-config` utility to easily compile LatAnalyze-based programs
|
|
||||||
* Linear and constant models to the 2-point fitter
|
|
||||||
|
|
||||||
Changes:
|
|
||||||
* HDF5 is now a compulsory dependency
|
|
||||||
|
|
||||||
Fixes:
|
|
||||||
* Variance matrix computation fix.
|
|
||||||
|
|
||||||
#### v3.3
|
#### v3.3
|
||||||
Additions:
|
Additions:
|
||||||
* Sample plot CL utility.
|
* Sample plot CL utility.
|
||||||
@ -111,7 +78,7 @@ Fixes:
|
|||||||
* Variance matrix computation fix.
|
* Variance matrix computation fix.
|
||||||
|
|
||||||
#### v3.2.1
|
#### v3.2.1
|
||||||
Fixes:
|
Fix:
|
||||||
* Wrong argument number check in `latan-resample`
|
* Wrong argument number check in `latan-resample`
|
||||||
|
|
||||||
#### v3.2 (needs LatCore 1.1)
|
#### v3.2 (needs LatCore 1.1)
|
||||||
@ -149,4 +116,4 @@ Fixes:
|
|||||||
#### v3.0
|
#### v3.0
|
||||||
Commit `7b4f2884a5e99bbfab4d4bd7623f609a55403c39`.
|
Commit `7b4f2884a5e99bbfab4d4bd7623f609a55403c39`.
|
||||||
First 'stable' version of LatAnalyze in C++. The v2.0 refers to the [C version](https://github.com/aportelli/LatAnalyze-legacy) and v1.0 to an old undistributed version.
|
First 'stable' version of LatAnalyze in C++. The v2.0 refers to the [C version](https://github.com/aportelli/LatAnalyze-legacy) and v1.0 to an old undistributed version.
|
||||||
**This version compiles fine on OS X with clang but does have many portability issues to other platforms/compilers, v3.1 is the first real release.**
|
**This version compiles fine on OS X with clang but does have many portability issues to other platforms/compilers, v3.1 is the first real release.**
|
@ -2,5 +2,4 @@
|
|||||||
|
|
||||||
rm -rf .buildutils
|
rm -rf .buildutils
|
||||||
mkdir -p .buildutils/m4
|
mkdir -p .buildutils/m4
|
||||||
./update_eigen.sh eigen-3.3.8.tar.bz2
|
|
||||||
autoreconf -fvi
|
autoreconf -fvi
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
if (( $# != 1 )); then
|
if (( $# != 1 )); then
|
||||||
echo "usage: `basename $0` <prefix>" 1>&2
|
echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
PREFIX=$1
|
PREFIX=$1
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
mkdir -p local/build
|
mkdir -p local/build
|
||||||
for d in gsl nlopt minuit hdf5; do
|
for d in nlopt minuit hdf5; do
|
||||||
if [ ! -e local/.built.${d} ]; then
|
if [ ! -e local/.built.${d} ]; then
|
||||||
./install-${d}.sh ${PREFIX}
|
./install-${d}.sh ${PREFIX}
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
./install-latcore.sh ${PREFIX}
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
NAME='gsl-2.6'
|
|
||||||
|
|
||||||
if (( $# != 1 )); then
|
|
||||||
echo "usage: `basename $0` <prefix>" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
PREFIX=$1
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
INITDIR=$(pwd -P)
|
|
||||||
mkdir -p ${PREFIX}
|
|
||||||
cd ${PREFIX}
|
|
||||||
PREFIX=$(pwd -P)
|
|
||||||
cd ${INITDIR}/local/build
|
|
||||||
wget http://ftpmirror.gnu.org/gsl/${NAME}.tar.gz
|
|
||||||
tar -xzvf ${NAME}.tar.gz
|
|
||||||
mkdir -p ${NAME}/build
|
|
||||||
cd ${NAME}/build
|
|
||||||
../configure --prefix=${PREFIX}
|
|
||||||
make -j4
|
|
||||||
make install
|
|
||||||
cd ${INITDIR}/local
|
|
||||||
touch .built.gsl
|
|
||||||
cd ${INITDIR}
|
|
@ -1,19 +1,16 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
NAME='hdf5-1.10.5'
|
NAME='hdf5-1.10.1'
|
||||||
|
|
||||||
if (( $# != 1 )); then
|
if (( $# != 1 )); then
|
||||||
echo "usage: `basename $0` <prefix>" 1>&2
|
echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
PREFIX=$1
|
PREFIX=$1
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
INITDIR=$(pwd -P)
|
INITDIR=`pwd`
|
||||||
mkdir -p ${PREFIX}
|
cd local/build
|
||||||
cd ${PREFIX}
|
|
||||||
PREFIX=$(pwd -P)
|
|
||||||
cd ${INITDIR}/local/build
|
|
||||||
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${NAME}/src/${NAME}.tar.gz
|
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${NAME}/src/${NAME}.tar.gz
|
||||||
tar -xzvf ${NAME}.tar.gz
|
tar -xzvf ${NAME}.tar.gz
|
||||||
mkdir ${NAME}/build
|
mkdir ${NAME}/build
|
||||||
|
@ -1,22 +1,19 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
if (( $# != 1 )); then
|
if (( $# != 2 )); then
|
||||||
echo "usage: `basename $0` <prefix>" 1>&2
|
echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
PREFIX=$1
|
PREFIX=$1
|
||||||
|
OS=$2
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
INITDIR=$(pwd -P)
|
|
||||||
mkdir -p ${PREFIX}
|
|
||||||
cd ${PREFIX}
|
|
||||||
PREFIX=$(pwd -P)
|
|
||||||
cd ${INITDIR}
|
|
||||||
./install-deps.sh ${PREFIX}
|
./install-deps.sh ${PREFIX}
|
||||||
cd ..
|
cd ..
|
||||||
./bootstrap.sh
|
./bootstrap.sh
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
cd build
|
cd build
|
||||||
../configure --prefix=${PREFIX} --with-minuit=${PREFIX} --with-nlopt=${PREFIX} --with-hdf5=${PREFIX} --with-gsl=${PREFIX} CXXFLAGS="${CXXFLAGS} -O3 -march=haswell -mtune=haswell"
|
if [[ "$OS" == "osx" ]]; then EXTRA_FLAGS='--with-gsl=/usr/local'; fi
|
||||||
|
../configure --prefix=$PREFIX --with-minuit=$PREFIX --with-nlopt=$PREFIX --with-latcore=$PREFIX --with-hdf5=$PREFIX $EXTRA_FLAGS CXXFLAGS='-O3 -march=native -mtune=native'
|
||||||
make -j4
|
make -j4
|
||||||
make install
|
make install
|
||||||
|
25
ci-scripts/install-latcore.sh
Executable file
25
ci-scripts/install-latcore.sh
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if (( $# != 1 )); then
|
||||||
|
echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
PREFIX=$1
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
INITDIR=`pwd`
|
||||||
|
cd local/build
|
||||||
|
if [ -d LatCore ]; then
|
||||||
|
cd LatCore
|
||||||
|
git pull origin master
|
||||||
|
else
|
||||||
|
git clone https://github.com/aportelli/LatCore.git
|
||||||
|
mkdir LatCore/build
|
||||||
|
cd LatCore
|
||||||
|
./bootstrap.sh
|
||||||
|
fi
|
||||||
|
cd build
|
||||||
|
../configure --prefix=${PREFIX}
|
||||||
|
make -j4
|
||||||
|
make install
|
||||||
|
cd ${INITDIR}
|
@ -3,17 +3,14 @@
|
|||||||
NAME='Minuit2-5.34.14'
|
NAME='Minuit2-5.34.14'
|
||||||
|
|
||||||
if (( $# != 1 )); then
|
if (( $# != 1 )); then
|
||||||
echo "usage: `basename $0` <prefix>" 1>&2
|
echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
PREFIX=$1
|
PREFIX=$1
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
INITDIR=$(pwd -P)
|
INITDIR=`pwd`
|
||||||
mkdir -p ${PREFIX}
|
cd local/build
|
||||||
cd ${PREFIX}
|
|
||||||
PREFIX=$(pwd -P)
|
|
||||||
cd ${INITDIR}/local/build
|
|
||||||
wget http://www.cern.ch/mathlibs/sw/5_34_14/Minuit2/${NAME}.tar.gz
|
wget http://www.cern.ch/mathlibs/sw/5_34_14/Minuit2/${NAME}.tar.gz
|
||||||
tar -xzvf ${NAME}.tar.gz
|
tar -xzvf ${NAME}.tar.gz
|
||||||
mkdir -p ${NAME}/build
|
mkdir -p ${NAME}/build
|
||||||
|
@ -1,25 +1,21 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
NAME='2.6.1'
|
NAME='nlopt-2.4.2'
|
||||||
|
|
||||||
if (( $# != 1 )); then
|
if (( $# != 1 )); then
|
||||||
echo "usage: `basename $0` <prefix>" 1>&2
|
echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
PREFIX=$1
|
PREFIX=$1
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
INITDIR=$(pwd -P)
|
INITDIR=`pwd`
|
||||||
mkdir -p ${PREFIX}
|
cd local/build
|
||||||
cd ${PREFIX}
|
wget http://ab-initio.mit.edu/nlopt/${NAME}.tar.gz
|
||||||
PREFIX=$(pwd -P)
|
tar -xzvf ${NAME}.tar.gz
|
||||||
cd ${INITDIR}/local/build
|
|
||||||
wget https://github.com/stevengj/nlopt/archive/v${NAME}.tar.gz
|
|
||||||
tar -xzvf v${NAME}.tar.gz
|
|
||||||
NAME=nlopt-${NAME}
|
|
||||||
mkdir -p ${NAME}/build
|
mkdir -p ${NAME}/build
|
||||||
cd ${NAME}/build
|
cd ${NAME}/build
|
||||||
cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=TRUE -DCMAKE_INSTALL_NAME_DIR="${PREFIX}/lib" ..
|
../configure --prefix=${PREFIX} --with-cxx --without-guile --without-python --without-octave --without-matlab --with-pic
|
||||||
make -j4
|
make -j4
|
||||||
make install
|
make install
|
||||||
cd ${INITDIR}/local
|
cd ${INITDIR}/local
|
||||||
|
71
configure.ac
71
configure.ac
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
# Initialization
|
# Initialization
|
||||||
AC_PREREQ([2.63])
|
AC_PREREQ([2.63])
|
||||||
AC_INIT([LatAnalyze],[3.5.1],[antonin.portelli@me.com],[LatAnalyze])
|
AC_INIT([LatAnalyze],[3.3],[antonin.portelli@me.com],[LatAnalyze])
|
||||||
AC_CONFIG_AUX_DIR([.buildutils])
|
AC_CONFIG_AUX_DIR([.buildutils])
|
||||||
AC_CONFIG_SRCDIR([lib/Global.cpp])
|
AC_CONFIG_SRCDIR([lib/Global.cpp])
|
||||||
AC_CONFIG_SRCDIR([utils/sample_read.cpp])
|
AC_CONFIG_SRCDIR([utils/sample_read.cpp])
|
||||||
AC_CONFIG_SRCDIR([examples/exMathInterpreter.cpp])
|
AC_CONFIG_SRCDIR([examples/exMathInterpreter.cpp])
|
||||||
AC_CONFIG_MACRO_DIR([.buildutils/m4])
|
AC_CONFIG_MACRO_DIR([.buildutils/m4])
|
||||||
AM_INIT_AUTOMAKE([1.11 -Wall -Werror foreign subdir-objects])
|
AM_INIT_AUTOMAKE([1.11 -Wall -Werror foreign])
|
||||||
AM_SILENT_RULES([yes])
|
AM_SILENT_RULES([yes])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AM_CONDITIONAL([HAVE_AM_MINOR_LE_11],
|
AM_CONDITIONAL([HAVE_AM_MINOR_LE_11],
|
||||||
@ -48,6 +48,14 @@ AC_ARG_WITH([hdf5],
|
|||||||
[try this for a non-standard install prefix of the HDF5 library])],
|
[try this for a non-standard install prefix of the HDF5 library])],
|
||||||
[AM_CXXFLAGS="$AM_CXXFLAGS -I$with_hdf5/include"]
|
[AM_CXXFLAGS="$AM_CXXFLAGS -I$with_hdf5/include"]
|
||||||
[AM_LDFLAGS="$AM_LDFLAGS -L$with_hdf5/lib"])
|
[AM_LDFLAGS="$AM_LDFLAGS -L$with_hdf5/lib"])
|
||||||
|
AC_ARG_WITH([latcore],
|
||||||
|
[AS_HELP_STRING([--with-latcore=prefix],
|
||||||
|
[use this option for a non-standard install prefix of the LatCore library])],
|
||||||
|
[AM_CXXFLAGS="$AM_CXXFLAGS -I$with_latcore/include"]
|
||||||
|
[AM_LDFLAGS="$AM_LDFLAGS -L$with_latcore/lib"])
|
||||||
|
CFLAGS="$AM_CFLAGS $CFLAGS"
|
||||||
|
CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
|
||||||
|
LDFLAGS="$AM_LDFLAGS $LDFLAGS"
|
||||||
|
|
||||||
# Get compilers informations
|
# Get compilers informations
|
||||||
AX_COMPILER_VENDOR
|
AX_COMPILER_VENDOR
|
||||||
@ -70,24 +78,24 @@ AC_DEFINE_UNQUOTED([GXX_VERSION],["$GXX_VERSION"],
|
|||||||
[version of g++ that will compile the code])
|
[version of g++ that will compile the code])
|
||||||
|
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
CXXFLAGS_CPY=$CXXFLAGS
|
|
||||||
LDFLAGS_CPY=$LDFLAGS
|
|
||||||
CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
|
|
||||||
LDFLAGS="$AM_LDFLAGS $LDFLAGS"
|
|
||||||
AC_CHECK_LIB([m],[cos],[],[AC_MSG_ERROR([libm library not found])])
|
AC_CHECK_LIB([m],[cos],[],[AC_MSG_ERROR([libm library not found])])
|
||||||
AC_CHECK_LIB([gslcblas],[cblas_dgemm],[],
|
AC_CHECK_LIB([gslcblas],[cblas_dgemm],[],
|
||||||
[AC_MSG_ERROR([GSL CBLAS library not found])])
|
[AC_MSG_ERROR([GSL CBLAS library not found])])
|
||||||
AC_CHECK_LIB([gsl],[gsl_blas_dgemm],[],[AC_MSG_ERROR([GSL library not found])])
|
AC_CHECK_LIB([gsl],[gsl_blas_dgemm],[],[AC_MSG_ERROR([GSL library not found])])
|
||||||
AC_CHECK_LIB([nlopt],[nlopt_create],
|
AC_CHECK_LIB([nlopt_cxx],[nlopt_create],
|
||||||
[AC_DEFINE([HAVE_NLOPT],
|
[AC_DEFINE([HAVE_NLOPT],
|
||||||
[1],
|
[1],
|
||||||
[Define to 1 if you have the `NLopt' library (-lnlopt).])]
|
[Define to 1 if you have the `NLopt' library (-lnlopt_cxx).])]
|
||||||
[have_nlopt=true]
|
[have_nlopt=true]
|
||||||
[LIBS="$LIBS -lnlopt"],[])
|
[LIBS="$LIBS -lnlopt_cxx"],[])
|
||||||
AM_CONDITIONAL([HAVE_NLOPT], [test x$have_nlopt = xtrue])
|
AM_CONDITIONAL([HAVE_NLOPT], [test x$have_nlopt = xtrue])
|
||||||
AC_CHECK_LIB([hdf5_cpp],[H5Fopen],
|
AC_CHECK_LIB([hdf5_cpp],[H5Fopen],
|
||||||
[LIBS="$LIBS -lhdf5_cpp -lhdf5"],
|
[AC_DEFINE([HAVE_HDF5],
|
||||||
[AC_MSG_ERROR([HDF5 library not found])], [-lhdf5])
|
[1],
|
||||||
|
[Define to 1 if you have the `HDF5' library (-lhdf5_cpp).])]
|
||||||
|
[have_hdf5=true]
|
||||||
|
[LIBS="$LIBS -lhdf5_cpp -lhdf5"],[],[-lhdf5])
|
||||||
|
AM_CONDITIONAL([HAVE_HDF5], [test x$have_hdf5 = xtrue])
|
||||||
SAVED_LDFLAGS=$LDFLAGS
|
SAVED_LDFLAGS=$LDFLAGS
|
||||||
LDFLAGS="$LDFLAGS -lMinuit2"
|
LDFLAGS="$LDFLAGS -lMinuit2"
|
||||||
AC_MSG_CHECKING([for ROOT::Minuit2::BasicMinimumError in -lMinuit2]);
|
AC_MSG_CHECKING([for ROOT::Minuit2::BasicMinimumError in -lMinuit2]);
|
||||||
@ -104,44 +112,35 @@ AC_LINK_IFELSE(
|
|||||||
[AC_MSG_RESULT([no])])
|
[AC_MSG_RESULT([no])])
|
||||||
AM_CONDITIONAL([HAVE_MINUIT], [test x$have_minuit = xtrue])
|
AM_CONDITIONAL([HAVE_MINUIT], [test x$have_minuit = xtrue])
|
||||||
LDFLAGS=$SAVED_LDFLAGS
|
LDFLAGS=$SAVED_LDFLAGS
|
||||||
CXXFLAGS=$CXXFLAGS_CPY
|
SAVED_LDFLAGS=$LDFLAGS
|
||||||
LDFLAGS=$LDFLAGS_CPY
|
LDFLAGS="$LDFLAGS -lLatCore"
|
||||||
|
AC_MSG_CHECKING([for LatCore::XmlReader in -lLatCore]);
|
||||||
|
AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([#include <LatCore/XmlReader.hpp>],
|
||||||
|
[LatCore::XmlReader dummy()])],
|
||||||
|
[LIBS="$LIBS -lLatCore"]
|
||||||
|
[AC_MSG_RESULT([yes])],
|
||||||
|
[AC_MSG_RESULT([no])]
|
||||||
|
[AC_MSG_ERROR([LatCore library not found])])
|
||||||
|
LDFLAGS=$SAVED_LDFLAGS
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
|
|
||||||
cwd=`pwd -P`; cd ${srcdir}; abs_srcdir=`pwd -P`; cd ${cwd}
|
|
||||||
LATAN_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
|
|
||||||
LATAN_LDFLAGS="$AM_LDFLAGS $LDFLAGS"
|
|
||||||
LATAN_LIBS=$LIBS
|
|
||||||
LATAN_SHORT_SHA=`git rev-parse --short HEAD`
|
|
||||||
LATAN_SHA=`git rev-parse HEAD`
|
|
||||||
LATAN_BRANCH=`git rev-parse --abbrev-ref HEAD`
|
|
||||||
AM_CXXFLAGS="-I${abs_srcdir}/lib $AM_CXXFLAGS"
|
|
||||||
AM_CFLAGS="-I${abs_srcdir}/lib $AM_CFLAGS"
|
|
||||||
CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
|
|
||||||
LDFLAGS="$AM_LDFLAGS $LDFLAGS"
|
|
||||||
AC_SUBST([LIBS])
|
AC_SUBST([LIBS])
|
||||||
AC_SUBST([AM_CXXFLAGS])
|
AC_SUBST([AM_CFLAGS])
|
||||||
AC_SUBST([AM_LDFLAGS])
|
AC_SUBST([AM_LDFLAGS])
|
||||||
AC_SUBST([LATAN_CXXFLAGS])
|
|
||||||
AC_SUBST([LATAN_LDFLAGS])
|
|
||||||
AC_SUBST([LATAN_LIBS])
|
|
||||||
AC_SUBST([LATAN_SHA])
|
|
||||||
AC_SUBST([LATAN_BRANCH])
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([latan-config], [chmod +x latan-config])
|
AC_CONFIG_FILES([Makefile lib/Makefile utils/Makefile physics/Makefile
|
||||||
AC_CONFIG_FILES([Makefile])
|
examples/Makefile])
|
||||||
AC_CONFIG_FILES([lib/Makefile])
|
|
||||||
AC_CONFIG_FILES([utils/Makefile])
|
|
||||||
AC_CONFIG_FILES([physics/Makefile])
|
|
||||||
AC_CONFIG_FILES([examples/Makefile])
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
echo "*********************************************"
|
echo "*********************************************"
|
||||||
echo "* ${PACKAGE_NAME} v${VERSION}" build options
|
echo "* ${PACKAGE_NAME} v${VERSION}" build options
|
||||||
echo "*********************************************"
|
echo "*********************************************"
|
||||||
echo "* C++ compiler : $CXX"
|
echo "* C++ compiler : $CXX"
|
||||||
|
echo "* HDF5 support : `test x$HAVE_HDF5_TRUE = 'x' && echo yes \
|
||||||
|
|| echo no`"
|
||||||
echo "* Minuit minimizers: `test x$HAVE_MINUIT_TRUE = 'x' && echo yes \
|
echo "* Minuit minimizers: `test x$HAVE_MINUIT_TRUE = 'x' && echo yes \
|
||||||
|| echo no`"
|
|| echo no`"
|
||||||
echo "* NLopt minimizers : `test x$HAVE_NLOPT_TRUE = 'x' && echo yes \
|
echo "* NLopt minimizers : `test x$HAVE_NLOPT_TRUE = 'x' && echo yes \
|
||||||
|
Binary file not shown.
@ -17,7 +17,6 @@ noinst_PROGRAMS = \
|
|||||||
exMathInterpreter \
|
exMathInterpreter \
|
||||||
exMin \
|
exMin \
|
||||||
exPlot \
|
exPlot \
|
||||||
exPValue \
|
|
||||||
exRand \
|
exRand \
|
||||||
exRootFinder
|
exRootFinder
|
||||||
|
|
||||||
@ -61,10 +60,6 @@ exPlot_SOURCES = exPlot.cpp
|
|||||||
exPlot_CXXFLAGS = $(COM_CXXFLAGS)
|
exPlot_CXXFLAGS = $(COM_CXXFLAGS)
|
||||||
exPlot_LDFLAGS = -L../lib/.libs -lLatAnalyze
|
exPlot_LDFLAGS = -L../lib/.libs -lLatAnalyze
|
||||||
|
|
||||||
exPValue_SOURCES = exPValue.cpp
|
|
||||||
exPValue_CXXFLAGS = $(COM_CXXFLAGS)
|
|
||||||
exPValue_LDFLAGS = -L../lib/.libs -lLatAnalyze
|
|
||||||
|
|
||||||
exRand_SOURCES = exRand.cpp
|
exRand_SOURCES = exRand.cpp
|
||||||
exRand_CXXFLAGS = $(COM_CXXFLAGS)
|
exRand_CXXFLAGS = $(COM_CXXFLAGS)
|
||||||
exRand_LDFLAGS = -L../lib/.libs -lLatAnalyze
|
exRand_LDFLAGS = -L../lib/.libs -lLatAnalyze
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include <LatAnalyze/Functional/CompiledFunction.hpp>
|
#include <LatAnalyze/CompiledFunction.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include <LatAnalyze/Numerical/Derivative.hpp>
|
#include <LatAnalyze/Derivative.hpp>
|
||||||
#include <LatAnalyze/Functional/CompiledFunction.hpp>
|
#include <LatAnalyze/CompiledFunction.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <LatAnalyze/Functional/CompiledModel.hpp>
|
#include <LatAnalyze/CompiledModel.hpp>
|
||||||
#include <LatAnalyze/Io/Io.hpp>
|
#include <LatAnalyze/Io.hpp>
|
||||||
#include <LatAnalyze/Numerical/GslMinimizer.hpp>
|
#include <LatAnalyze/GslMinimizer.hpp>
|
||||||
#include <LatAnalyze/Core/Plot.hpp>
|
#include <LatAnalyze/Plot.hpp>
|
||||||
#include <LatAnalyze/Statistics/XYStatData.hpp>
|
#include <LatAnalyze/XYStatData.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <LatAnalyze/Functional/CompiledModel.hpp>
|
#include <LatAnalyze/CompiledModel.hpp>
|
||||||
#include <LatAnalyze/Numerical/GslMinimizer.hpp>
|
#include <LatAnalyze/GslMinimizer.hpp>
|
||||||
#include <LatAnalyze/Core/Plot.hpp>
|
#include <LatAnalyze/Plot.hpp>
|
||||||
#include <LatAnalyze/Statistics/XYSampleData.hpp>
|
#include <LatAnalyze/XYSampleData.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <LatAnalyze/Functional/CompiledFunction.hpp>
|
#include <LatAnalyze/CompiledFunction.hpp>
|
||||||
#include <LatAnalyze/Numerical/GslQagsIntegrator.hpp>
|
#include <LatAnalyze/GslQagsIntegrator.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include <LatAnalyze/Functional/TabFunction.hpp>
|
#include <LatAnalyze/TabFunction.hpp>
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include <LatAnalyze/Io/Io.hpp>
|
#include <LatAnalyze/Io.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
#include <LatAnalyze/Core/MathInterpreter.hpp>
|
#include <LatAnalyze/MathInterpreter.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <LatAnalyze/Functional/CompiledFunction.hpp>
|
#include <LatAnalyze/CompiledFunction.hpp>
|
||||||
#include <LatAnalyze/Numerical/GslMinimizer.hpp>
|
#include <LatAnalyze/GslMinimizer.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
#include <LatAnalyze/Core/Math.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace Latan;
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
double chi2, ndof;
|
|
||||||
|
|
||||||
if (argc != 3)
|
|
||||||
{
|
|
||||||
cerr << "usage: " << argv[0] << " <chi^2> <ndof>" << endl;
|
|
||||||
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
chi2 = strTo<double>(argv[1]);
|
|
||||||
ndof = strTo<double>(argv[2]);
|
|
||||||
|
|
||||||
cout << "Two-sided p-value: " << Math::chi2PValue(chi2, ndof) << endl;
|
|
||||||
cout << "chi^2 CCDF : " << Math::chi2Ccdf(chi2, ndof) << endl;
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
#include <LatAnalyze/Functional/CompiledFunction.hpp>
|
#include <LatAnalyze/CompiledFunction.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
#include <LatAnalyze/Core/Plot.hpp>
|
#include <LatAnalyze/Plot.hpp>
|
||||||
#include <LatAnalyze/Functional/TabFunction.hpp>
|
#include <LatAnalyze/TabFunction.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
#include <LatAnalyze/Io/Io.hpp>
|
#include <LatAnalyze/Io.hpp>
|
||||||
#include <LatAnalyze/Functional/CompiledFunction.hpp>
|
#include <LatAnalyze/CompiledFunction.hpp>
|
||||||
#include <LatAnalyze/Core/Plot.hpp>
|
#include <LatAnalyze/Plot.hpp>
|
||||||
#include <LatAnalyze/Statistics/Random.hpp>
|
|
||||||
#include <LatAnalyze/Statistics/MatSample.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
|
||||||
constexpr Index size = 8;
|
|
||||||
constexpr Index nDraw = 20000;
|
constexpr Index nDraw = 20000;
|
||||||
constexpr Index nSample = 2000;
|
|
||||||
const string stateFileName = "exRand.seed";
|
const string stateFileName = "exRand.seed";
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
@ -40,24 +36,5 @@ int main(void)
|
|||||||
p << PlotFunction(compile("return exp(-x_0^2/2)/sqrt(2*pi);", 1), -5., 5.);
|
p << PlotFunction(compile("return exp(-x_0^2/2)/sqrt(2*pi);", 1), -5., 5.);
|
||||||
p.display();
|
p.display();
|
||||||
|
|
||||||
DMat var(size, size);
|
|
||||||
DVec mean(size);
|
|
||||||
DMatSample sample(nSample, size, 1);
|
|
||||||
|
|
||||||
cout << "-- generating " << nSample << " Gaussian random vectors..." << endl;
|
|
||||||
var = DMat::Random(size, size);
|
|
||||||
var *= var.adjoint();
|
|
||||||
mean = DVec::Random(size);
|
|
||||||
RandomNormal mgauss(mean, var, rd());
|
|
||||||
sample[central] = mgauss();
|
|
||||||
FOR_STAT_ARRAY(sample, s)
|
|
||||||
{
|
|
||||||
sample[s] = mgauss();
|
|
||||||
}
|
|
||||||
cout << "* original variance matrix:\n" << var << endl;
|
|
||||||
cout << "* measured variance matrix:\n" << sample.varianceMatrix() << endl;
|
|
||||||
cout << "* original mean:\n" << mean << endl;
|
|
||||||
cout << "* measured mean:\n" << sample.mean() << endl;
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Numerical/GslHybridRootFinder.hpp>
|
#include <LatAnalyze/GslHybridRootFinder.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
@ -7,8 +7,8 @@ using namespace Latan;
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
constexpr double a = 1., b = 10.;
|
constexpr double a = 1., b = 10.;
|
||||||
DoubleFunction f1([](const double *x){return a*(1.-x[0]);}, 2);
|
DoubleFunction f1([a](const double *x){return a*(1.-x[0]);}, 2);
|
||||||
DoubleFunction f2([](const double *x){return b*(x[1]-x[0]*x[0]);}, 2);
|
DoubleFunction f2([b](const double *x){return b*(x[1]-x[0]*x[0]);}, 2);
|
||||||
vector<DoubleFunction *> system = {&f1, &f2};
|
vector<DoubleFunction *> system = {&f1, &f2};
|
||||||
GslHybridRootFinder solve;
|
GslHybridRootFinder solve;
|
||||||
DVec init(2), x;
|
DVec init(2), x;
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
|
|
||||||
prefix=@prefix@
|
|
||||||
exec_prefix=@exec_prefix@
|
|
||||||
includedir=@includedir@
|
|
||||||
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
cat <<EOF
|
|
||||||
Usage: latan-config [OPTION]
|
|
||||||
|
|
||||||
Known values for OPTION are:
|
|
||||||
|
|
||||||
--prefix show LatAnalyze installation prefix
|
|
||||||
--cxxflags print pre-processor and compiler flags
|
|
||||||
--ldflags print library linking flags
|
|
||||||
--libs print library linking information
|
|
||||||
--help display this help and exit
|
|
||||||
--version output version information
|
|
||||||
--git print git revision
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
exit $1
|
|
||||||
}
|
|
||||||
|
|
||||||
if test $# -eq 0; then
|
|
||||||
usage 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cflags=false
|
|
||||||
libs=false
|
|
||||||
|
|
||||||
while test $# -gt 0; do
|
|
||||||
case "$1" in
|
|
||||||
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
|
|
||||||
*) optarg= ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
--prefix)
|
|
||||||
echo $prefix
|
|
||||||
;;
|
|
||||||
|
|
||||||
--version)
|
|
||||||
echo @VERSION@
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
--git)
|
|
||||||
echo "@LATAN_BRANCH@ @LATAN_SHA@"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
--help)
|
|
||||||
usage 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
--cxxflags)
|
|
||||||
echo @LATAN_CXXFLAGS@
|
|
||||||
;;
|
|
||||||
|
|
||||||
--ldflags)
|
|
||||||
echo @LATAN_LDFLAGS@
|
|
||||||
;;
|
|
||||||
|
|
||||||
--libs)
|
|
||||||
echo @LIBS@
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
usage
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 0
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* AsciiFile.cpp, part of LatAnalyze 3
|
* AsciiFile.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Io/AsciiFile.hpp>
|
#include <LatAnalyze/AsciiFile.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* AsciiFile.hpp, part of LatAnalyze 3
|
* AsciiFile.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,10 +21,10 @@
|
|||||||
#define Latan_AsciiFile_hpp_
|
#define Latan_AsciiFile_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Io/File.hpp>
|
#include <LatAnalyze/File.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Statistics/MatSample.hpp>
|
#include <LatAnalyze/MatSample.hpp>
|
||||||
#include <LatAnalyze/Core/ParserState.hpp>
|
#include <LatAnalyze/ParserState.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* AsciiLexer.lpp, part of LatAnalyze 3
|
* AsciiLexer.lpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -25,7 +25,7 @@
|
|||||||
%option yylineno
|
%option yylineno
|
||||||
|
|
||||||
%{
|
%{
|
||||||
#include <LatAnalyze/Io/AsciiFile.hpp>
|
#include <LatAnalyze/AsciiFile.hpp>
|
||||||
#include "AsciiParser.hpp"
|
#include "AsciiParser.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* AsciiParser.ypp, part of LatAnalyze 3
|
* AsciiParser.ypp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -19,9 +19,9 @@
|
|||||||
|
|
||||||
%{
|
%{
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Io/AsciiFile.hpp>
|
#include <LatAnalyze/AsciiFile.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Statistics/MatSample.hpp>
|
#include <LatAnalyze/MatSample.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* CompiledFunction.cpp, part of LatAnalyze 3
|
* CompiledFunction.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,8 +17,8 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Functional/CompiledFunction.hpp>
|
#include <LatAnalyze/CompiledFunction.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* CompiledFunction.hpp, part of LatAnalyze 3
|
* CompiledFunction.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_CompiledFunction_hpp_
|
#define Latan_CompiledFunction_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Core/MathInterpreter.hpp>
|
#include <LatAnalyze/MathInterpreter.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* CompiledModel.cpp, part of LatAnalyze 3
|
* CompiledModel.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,8 +17,8 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Functional/CompiledModel.hpp>
|
#include <LatAnalyze/CompiledModel.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* CompiledModel.hpp, part of LatAnalyze 3
|
* CompiledModel.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_CompiledModel_hpp_
|
#define Latan_CompiledModel_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Model.hpp>
|
#include <LatAnalyze/Model.hpp>
|
||||||
#include <LatAnalyze/Core/MathInterpreter.hpp>
|
#include <LatAnalyze/MathInterpreter.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Eigen.hpp, part of LatAnalyze 3
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze 3 is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Eigen inclusion
|
|
||||||
#define EIGEN_DONT_PARALLELIZE
|
|
||||||
#define EIGEN_MATRIXBASE_PLUGIN <LatAnalyze/Core/EigenPlugin.hpp>
|
|
||||||
#include <LatAnalyze/Eigen/Dense>
|
|
||||||
|
|
||||||
// copy/assignement from Eigen expression
|
|
||||||
#define EIGEN_EXPR_CTOR(ctorName, Class, Base, ExprType) \
|
|
||||||
template <typename Derived>\
|
|
||||||
ctorName(const ExprType<Derived> &m): Base(m) {}\
|
|
||||||
template<typename Derived>\
|
|
||||||
Class & operator=(const ExprType<Derived> &m)\
|
|
||||||
{\
|
|
||||||
this->Base::operator=(m);\
|
|
||||||
return *this;\
|
|
||||||
}
|
|
||||||
|
|
||||||
#define FOR_MAT(mat, i, j) \
|
|
||||||
for (Latan::Index j = 0; j < mat.cols(); ++j)\
|
|
||||||
for (Latan::Index i = 0; i < mat.rows(); ++i)
|
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
const int dynamic = Eigen::Dynamic;
|
|
||||||
|
|
||||||
// array types
|
|
||||||
template <typename Derived>
|
|
||||||
using ArrayExpr = Eigen::ArrayBase<Derived>;
|
|
||||||
|
|
||||||
template <typename T, int nRow = dynamic, int nCol = dynamic>
|
|
||||||
using Array = Eigen::Array<T, nRow, nCol>;
|
|
||||||
|
|
||||||
// matrix types
|
|
||||||
template <typename Derived>
|
|
||||||
using MatExpr = Eigen::MatrixBase<Derived>;
|
|
||||||
|
|
||||||
template <typename T, int nRow = dynamic, int nCol = dynamic>
|
|
||||||
using MatBase = Eigen::Matrix<T, nRow, nCol>;
|
|
||||||
|
|
||||||
template <int nRow, int nCol>
|
|
||||||
using SFMat = Eigen::Matrix<float, nRow, nCol>;
|
|
||||||
|
|
||||||
template <int nRow, int nCol>
|
|
||||||
using SDMat = Eigen::Matrix<double, nRow, nCol>;
|
|
||||||
|
|
||||||
template <int nRow, int nCol>
|
|
||||||
using SCMat = Eigen::Matrix<std::complex<double>, nRow, nCol>;
|
|
||||||
|
|
||||||
// vector types
|
|
||||||
template <typename T, int size = dynamic>
|
|
||||||
using Vec = MatBase<T, size, 1>;
|
|
||||||
|
|
||||||
template <int size>
|
|
||||||
using SIVec = Vec<int, size>;
|
|
||||||
|
|
||||||
template <int size>
|
|
||||||
using SUVec = Vec<unsigned int, size>;
|
|
||||||
|
|
||||||
template <int size>
|
|
||||||
using SFVec = Vec<float, size>;
|
|
||||||
|
|
||||||
template <int size>
|
|
||||||
using SDVec = Vec<double, size>;
|
|
||||||
|
|
||||||
template <int size>
|
|
||||||
using SCVec = Vec<std::complex<double>, size>;
|
|
||||||
|
|
||||||
typedef SIVec<dynamic> IVec;
|
|
||||||
typedef SUVec<dynamic> UVec;
|
|
||||||
typedef SDVec<dynamic> DVec;
|
|
||||||
typedef SCVec<dynamic> CVec;
|
|
||||||
|
|
||||||
// block types
|
|
||||||
template <typename Derived>
|
|
||||||
using Block = Eigen::Block<Derived>;
|
|
||||||
template <typename Derived>
|
|
||||||
using ConstBlock = const Eigen::Block<const Derived>;
|
|
||||||
|
|
||||||
template <typename Derived>
|
|
||||||
using Row = typename Derived::RowXpr;
|
|
||||||
template <typename Derived>
|
|
||||||
using ConstRow = typename Derived::ConstRowXpr;
|
|
||||||
|
|
||||||
template <typename Derived>
|
|
||||||
using Col = typename Derived::ColXpr;
|
|
||||||
template <typename Derived>
|
|
||||||
using ConstCol = typename Derived::ConstColXpr;
|
|
||||||
|
|
||||||
// map type
|
|
||||||
template <int stride>
|
|
||||||
using InnerStride = Eigen::InnerStride<stride>;
|
|
||||||
template <int rowStride, int colStride>
|
|
||||||
using Stride = Eigen::Stride<rowStride, colStride>;
|
|
||||||
template <typename Derived, typename StrideType = Stride<0, 0>>
|
|
||||||
using Map = Eigen::Map<Derived, Eigen::Unaligned, StrideType>;
|
|
||||||
template <typename Derived, typename StrideType = Stride<0, 0>>
|
|
||||||
using ConstMap = Eigen::Map<const Derived, Eigen::Unaligned, StrideType>;
|
|
||||||
|
|
||||||
// Index type //////////////////////////////////////////////////////////////////
|
|
||||||
typedef MatBase<int>::Index Index;
|
|
||||||
|
|
||||||
#define FOR_VEC(vec, i) for (Latan::Index i = 0; i < (vec).size(); ++i)
|
|
||||||
#define FOR_ARRAY(ar, i) FOR_VEC(ar, i)
|
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
|
@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* EigenPlugin.hpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2015 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
Derived pInverse(const double tolerance = 1.0e-10)
|
|
||||||
{
|
|
||||||
auto svd = jacobiSvd(Eigen::ComputeThinU|Eigen::ComputeThinV);
|
|
||||||
const auto u = svd.matrixU();
|
|
||||||
const auto v = svd.matrixV();
|
|
||||||
auto s = svd.singularValues();
|
|
||||||
double maxsv = 0.;
|
|
||||||
unsigned int elim = 0;
|
|
||||||
|
|
||||||
for (Index i = 0; i < s.rows(); ++i)
|
|
||||||
{
|
|
||||||
if (fabs(s(i)) > maxsv) maxsv = fabs(s(i));
|
|
||||||
}
|
|
||||||
for (Index i = 0; i < s.rows(); ++i)
|
|
||||||
{
|
|
||||||
if (fabs(s(i)) > maxsv*tolerance)
|
|
||||||
{
|
|
||||||
s(i) = 1./s(i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
elim++;
|
|
||||||
s(i) = 0.;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (elim)
|
|
||||||
{
|
|
||||||
std::cerr << "warning: pseudoinverse: " << elim << "/";
|
|
||||||
std::cerr << s.rows() << " singular value(s) eliminated (tolerance= ";
|
|
||||||
std::cerr << tolerance << ")" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
return v*s.asDiagonal()*u.transpose();
|
|
||||||
}
|
|
||||||
|
|
||||||
Derived singularValues(void)
|
|
||||||
{
|
|
||||||
auto svd = jacobiSvd();
|
|
||||||
|
|
||||||
return svd.singularValues();
|
|
||||||
}
|
|
@ -1,299 +0,0 @@
|
|||||||
/*
|
|
||||||
* OptParser.cpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2016 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <LatAnalyze/Core/OptParser.hpp>
|
|
||||||
#include <LatAnalyze/includes.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace Latan;
|
|
||||||
|
|
||||||
static char optRegex[] = "(-([a-zA-Z])(.+)?)|(--([a-zA-Z_-]+)=?(.+)?)";
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* OptParser implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
// regular expressions /////////////////////////////////////////////////////////
|
|
||||||
const regex OptParser::optRegex_(optRegex);
|
|
||||||
|
|
||||||
// access //////////////////////////////////////////////////////////////////////
|
|
||||||
void OptParser::addOption(const std::string shortName,
|
|
||||||
const std::string longName,
|
|
||||||
const OptType type, const bool optional,
|
|
||||||
const std::string helpMessage,
|
|
||||||
const std::string defaultVal)
|
|
||||||
{
|
|
||||||
OptPar par;
|
|
||||||
|
|
||||||
par.shortName = shortName;
|
|
||||||
par.longName = longName;
|
|
||||||
par.defaultVal = defaultVal;
|
|
||||||
par.helpMessage = helpMessage;
|
|
||||||
par.type = type;
|
|
||||||
par.optional = optional;
|
|
||||||
auto it = std::find_if(opt_.begin(), opt_.end(), [&par](const OptPar & p)
|
|
||||||
{
|
|
||||||
bool match = false;
|
|
||||||
|
|
||||||
match |= (par.shortName == p.shortName) and !par.shortName.empty();
|
|
||||||
match |= (par.longName == p.longName) and !par.longName.empty();
|
|
||||||
|
|
||||||
return match;
|
|
||||||
});
|
|
||||||
if (it != opt_.end())
|
|
||||||
{
|
|
||||||
string opt;
|
|
||||||
|
|
||||||
if (!it->shortName.empty())
|
|
||||||
{
|
|
||||||
opt += "-" + it->shortName;
|
|
||||||
}
|
|
||||||
if (!opt.empty())
|
|
||||||
{
|
|
||||||
opt += "/";
|
|
||||||
}
|
|
||||||
if (!it->longName.empty())
|
|
||||||
{
|
|
||||||
opt += "--" + it->longName;
|
|
||||||
}
|
|
||||||
throw(logic_error("duplicate option " + opt + " (in the code, not in the command line)"));
|
|
||||||
}
|
|
||||||
opt_.push_back(par);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OptParser::gotOption(const std::string name) const
|
|
||||||
{
|
|
||||||
int i = optIndex(name);
|
|
||||||
|
|
||||||
if (result_.size() != opt_.size())
|
|
||||||
{
|
|
||||||
throw(runtime_error("options not parsed"));
|
|
||||||
}
|
|
||||||
if (i >= 0)
|
|
||||||
{
|
|
||||||
return result_[i].present;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw(out_of_range("no option with name '" + name + "'"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const vector<string> & OptParser::getArgs(void) const
|
|
||||||
{
|
|
||||||
return arg_;
|
|
||||||
}
|
|
||||||
|
|
||||||
// parse ///////////////////////////////////////////////////////////////////////
|
|
||||||
bool OptParser::parse(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
smatch sm;
|
|
||||||
queue<string> arg;
|
|
||||||
int expectVal = -1;
|
|
||||||
bool isCorrect = true;
|
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i)
|
|
||||||
{
|
|
||||||
arg.push(argv[i]);
|
|
||||||
}
|
|
||||||
result_.clear();
|
|
||||||
result_.resize(opt_.size());
|
|
||||||
arg_.clear();
|
|
||||||
for (unsigned int i = 0; i < opt_.size(); ++i)
|
|
||||||
{
|
|
||||||
result_[i].value = opt_[i].defaultVal;
|
|
||||||
}
|
|
||||||
while (!arg.empty())
|
|
||||||
{
|
|
||||||
// option
|
|
||||||
if (regex_match(arg.front(), sm, optRegex_))
|
|
||||||
{
|
|
||||||
// should it be a value?
|
|
||||||
if (expectVal >= 0)
|
|
||||||
{
|
|
||||||
cerr << "warning: expected value for option ";
|
|
||||||
cerr << optName(opt_[expectVal]);
|
|
||||||
cerr << ", got option '" << arg.front() << "' instead" << endl;
|
|
||||||
expectVal = -1;
|
|
||||||
isCorrect = false;
|
|
||||||
}
|
|
||||||
// short option
|
|
||||||
if (sm[1].matched)
|
|
||||||
{
|
|
||||||
string optName = sm[2].str();
|
|
||||||
|
|
||||||
// find option
|
|
||||||
auto it = find_if(opt_.begin(), opt_.end(),
|
|
||||||
[&optName](const OptPar &p)
|
|
||||||
{
|
|
||||||
return (p.shortName == optName);
|
|
||||||
});
|
|
||||||
|
|
||||||
// parse if found
|
|
||||||
if (it != opt_.end())
|
|
||||||
{
|
|
||||||
unsigned int i = it - opt_.begin();
|
|
||||||
|
|
||||||
result_[i].present = true;
|
|
||||||
if (opt_[i].type == OptType::value)
|
|
||||||
{
|
|
||||||
if (sm[3].matched)
|
|
||||||
{
|
|
||||||
result_[i].value = sm[3].str();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
expectVal = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// warning if not found
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cerr << "warning: unknown option '" << arg.front() << "'";
|
|
||||||
cerr << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// long option
|
|
||||||
else if (sm[4].matched)
|
|
||||||
{
|
|
||||||
string optName = sm[5].str();
|
|
||||||
|
|
||||||
// find option
|
|
||||||
auto it = find_if(opt_.begin(), opt_.end(),
|
|
||||||
[&optName](const OptPar &p)
|
|
||||||
{
|
|
||||||
return (p.longName == optName);
|
|
||||||
});
|
|
||||||
|
|
||||||
// parse if found
|
|
||||||
if (it != opt_.end())
|
|
||||||
{
|
|
||||||
unsigned int i = it - opt_.begin();
|
|
||||||
|
|
||||||
result_[i].present = true;
|
|
||||||
if (opt_[i].type == OptType::value)
|
|
||||||
{
|
|
||||||
if (sm[6].matched)
|
|
||||||
{
|
|
||||||
result_[i].value = sm[6].str();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
expectVal = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// warning if not found
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cerr << "warning: unknown option '" << arg.front() << "'";
|
|
||||||
cerr << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (expectVal >= 0)
|
|
||||||
{
|
|
||||||
result_[expectVal].value = arg.front();
|
|
||||||
expectVal = -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
arg_.push_back(arg.front());
|
|
||||||
}
|
|
||||||
arg.pop();
|
|
||||||
}
|
|
||||||
if (expectVal >= 0)
|
|
||||||
{
|
|
||||||
cerr << "warning: expected value for option ";
|
|
||||||
cerr << optName(opt_[expectVal]) << endl;
|
|
||||||
expectVal = -1;
|
|
||||||
isCorrect = false;
|
|
||||||
}
|
|
||||||
for (unsigned int i = 0; i < opt_.size(); ++i)
|
|
||||||
{
|
|
||||||
if (!opt_[i].optional and !result_[i].present)
|
|
||||||
{
|
|
||||||
cerr << "warning: mandatory option " << optName(opt_[i]);
|
|
||||||
cerr << " is missing" << endl;
|
|
||||||
isCorrect = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return isCorrect;
|
|
||||||
}
|
|
||||||
|
|
||||||
// find option index ///////////////////////////////////////////////////////////
|
|
||||||
int OptParser::optIndex(const string name) const
|
|
||||||
{
|
|
||||||
auto it = find_if(opt_.begin(), opt_.end(), [&name](const OptPar &p)
|
|
||||||
{
|
|
||||||
return (p.shortName == name) or (p.longName == name);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (it != opt_.end())
|
|
||||||
{
|
|
||||||
return static_cast<int>(it - opt_.begin());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// option name for messages ////////////////////////////////////////////////////
|
|
||||||
std::string OptParser::optName(const OptPar &opt)
|
|
||||||
{
|
|
||||||
std::string res = "";
|
|
||||||
|
|
||||||
if (!opt.shortName.empty())
|
|
||||||
{
|
|
||||||
res += "-" + opt.shortName;
|
|
||||||
if (!opt.longName.empty())
|
|
||||||
{
|
|
||||||
res += "/";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!opt.longName.empty())
|
|
||||||
{
|
|
||||||
res += "--" + opt.longName;
|
|
||||||
if (opt.type == OptParser::OptType::value)
|
|
||||||
{
|
|
||||||
res += "=";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
// print option list ///////////////////////////////////////////////////////////
|
|
||||||
std::ostream & Latan::operator<<(std::ostream &out, const OptParser &parser)
|
|
||||||
{
|
|
||||||
for (auto &o: parser.opt_)
|
|
||||||
{
|
|
||||||
out << setw(20) << OptParser::optName(o);
|
|
||||||
out << ": " << o.helpMessage;
|
|
||||||
if (!o.defaultVal.empty())
|
|
||||||
{
|
|
||||||
out << " (default: " << o.defaultVal << ")";
|
|
||||||
}
|
|
||||||
out << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
@ -1,103 +0,0 @@
|
|||||||
/*
|
|
||||||
* OptParser.hpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2016 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LatAnalyze_OptParser_hpp_
|
|
||||||
#define LatAnalyze_OptParser_hpp_
|
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* command-line option parser *
|
|
||||||
******************************************************************************/
|
|
||||||
class OptParser
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum class OptType {value, trigger};
|
|
||||||
private:
|
|
||||||
struct OptPar
|
|
||||||
{
|
|
||||||
std::string shortName, longName, defaultVal, helpMessage;
|
|
||||||
OptType type;
|
|
||||||
bool optional;
|
|
||||||
};
|
|
||||||
struct OptRes
|
|
||||||
{
|
|
||||||
std::string value;
|
|
||||||
bool present;
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
// constructor
|
|
||||||
OptParser(void) = default;
|
|
||||||
// destructor
|
|
||||||
virtual ~OptParser(void) = default;
|
|
||||||
// access
|
|
||||||
void addOption(const std::string shortName, const std::string longName,
|
|
||||||
const OptType type, const bool optional = false,
|
|
||||||
const std::string helpMessage = "",
|
|
||||||
const std::string defaultVal = "");
|
|
||||||
bool gotOption(const std::string name) const;
|
|
||||||
template <typename T = std::string>
|
|
||||||
T optionValue(const std::string name) const;
|
|
||||||
const std::vector<std::string> & getArgs(void) const;
|
|
||||||
// parse
|
|
||||||
bool parse(int argc, char *argv[]);
|
|
||||||
// print option list
|
|
||||||
friend std::ostream & operator<<(std::ostream &out,
|
|
||||||
const OptParser &parser);
|
|
||||||
private:
|
|
||||||
// find option index
|
|
||||||
int optIndex(const std::string name) const;
|
|
||||||
// option name for messages
|
|
||||||
static std::string optName(const OptPar &opt);
|
|
||||||
private:
|
|
||||||
std::vector<OptPar> opt_;
|
|
||||||
std::vector<OptRes> result_;
|
|
||||||
std::vector<std::string> arg_;
|
|
||||||
static const std::regex optRegex_;
|
|
||||||
};
|
|
||||||
|
|
||||||
std::ostream & operator<<(std::ostream &out, const OptParser &parser);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* OptParser template implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
template <typename T>
|
|
||||||
T OptParser::optionValue(const std::string name) const
|
|
||||||
{
|
|
||||||
int i = optIndex(name);
|
|
||||||
|
|
||||||
if (result_.size() != opt_.size())
|
|
||||||
{
|
|
||||||
throw(std::runtime_error("options not parsed"));
|
|
||||||
}
|
|
||||||
if (i >= 0)
|
|
||||||
{
|
|
||||||
return strTo<T>(result_[i].value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw(std::out_of_range("no option with name '" + name + "'"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
#endif // LatAnalyze_OptParser_hpp_
|
|
@ -1,137 +0,0 @@
|
|||||||
/*
|
|
||||||
* Utilities.cpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <LatAnalyze/Core/Utilities.hpp>
|
|
||||||
#include <LatAnalyze/includes.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace Latan;
|
|
||||||
|
|
||||||
void Latan::testFunction(void)
|
|
||||||
{}
|
|
||||||
|
|
||||||
ostream & Latan::operator<<(ostream &out, const ProgressBar &&bar)
|
|
||||||
{
|
|
||||||
const Index nTick = bar.nCol_*bar.current_/bar.total_;
|
|
||||||
|
|
||||||
out << "[";
|
|
||||||
for (Index i = 0; i < nTick; ++i)
|
|
||||||
{
|
|
||||||
out << "=";
|
|
||||||
}
|
|
||||||
for (Index i = nTick; i < bar.nCol_; ++i)
|
|
||||||
{
|
|
||||||
out << " ";
|
|
||||||
}
|
|
||||||
out << "] " << bar.current_ << "/" << bar.total_;
|
|
||||||
out.flush();
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Latan::mkdir(const std::string dirName)
|
|
||||||
{
|
|
||||||
if (access(dirName.c_str(), R_OK|W_OK|X_OK))
|
|
||||||
{
|
|
||||||
mode_t mode755;
|
|
||||||
char tmp[MAX_PATH_LENGTH];
|
|
||||||
char *p = NULL;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
mode755 = S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH;
|
|
||||||
|
|
||||||
snprintf(tmp, sizeof(tmp), "%s", dirName.c_str());
|
|
||||||
len = strlen(tmp);
|
|
||||||
if(tmp[len - 1] == '/')
|
|
||||||
{
|
|
||||||
tmp[len - 1] = 0;
|
|
||||||
}
|
|
||||||
for(p = tmp + 1; *p; p++)
|
|
||||||
{
|
|
||||||
if(*p == '/')
|
|
||||||
{
|
|
||||||
*p = 0;
|
|
||||||
::mkdir(tmp, mode755);
|
|
||||||
*p = '/';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ::mkdir(tmp, mode755);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string Latan::basename(const string &s)
|
|
||||||
{
|
|
||||||
constexpr char sep = '/';
|
|
||||||
size_t i = s.rfind(sep, s.length());
|
|
||||||
|
|
||||||
if (i != string::npos)
|
|
||||||
{
|
|
||||||
return s.substr(i+1, s.length() - i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string Latan::dirname(const std::string &s)
|
|
||||||
{
|
|
||||||
constexpr char sep = '/';
|
|
||||||
size_t i = s.rfind(sep, s.length());
|
|
||||||
|
|
||||||
if (i != std::string::npos)
|
|
||||||
{
|
|
||||||
return s.substr(0, i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VarName::VarName(const string defName)
|
|
||||||
: defName_(defName)
|
|
||||||
{}
|
|
||||||
|
|
||||||
string VarName::getName(const Index i) const
|
|
||||||
{
|
|
||||||
if (hasName(i))
|
|
||||||
{
|
|
||||||
return name_.at(i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return defName_ + "_" + strFrom(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void VarName::setName(const Index i, const string name)
|
|
||||||
{
|
|
||||||
name_[i] = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VarName::hasName(const Index i) const
|
|
||||||
{
|
|
||||||
return (name_.find(i) != name_.end());
|
|
||||||
}
|
|
@ -1,250 +0,0 @@
|
|||||||
/*
|
|
||||||
* Utilities.hpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LatAnalyze_Utilities_hpp_
|
|
||||||
#define LatAnalyze_Utilities_hpp_
|
|
||||||
|
|
||||||
#ifndef LATAN_GLOBAL_HPP_
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
// Random seed type ////////////////////////////////////////////////////////////
|
|
||||||
typedef std::random_device::result_type SeedType;
|
|
||||||
|
|
||||||
// Type utilities //////////////////////////////////////////////////////////////
|
|
||||||
// pointer type test
|
|
||||||
template <typename Derived, typename Base>
|
|
||||||
inline bool isDerivedFrom(const Base *pt)
|
|
||||||
{
|
|
||||||
return (dynamic_cast<const Derived *>(pt) != nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static logical or
|
|
||||||
template <bool... b>
|
|
||||||
struct static_or;
|
|
||||||
|
|
||||||
template <bool... tail>
|
|
||||||
struct static_or<true, tail...> : static_or<tail...> {};
|
|
||||||
|
|
||||||
template <bool... tail>
|
|
||||||
struct static_or<false, tail...> : std::false_type {};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct static_or<> : std::true_type {};
|
|
||||||
|
|
||||||
// Environment /////////////////////////////////////////////////////////////////
|
|
||||||
void testFunction(void);
|
|
||||||
|
|
||||||
// String utilities ////////////////////////////////////////////////////////////
|
|
||||||
inline std::string extension(const std::string fileName)
|
|
||||||
{
|
|
||||||
return fileName.substr(fileName.find_last_of(".") + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline T strTo(const std::string &str)
|
|
||||||
{
|
|
||||||
T buf;
|
|
||||||
std::istringstream stream(str);
|
|
||||||
|
|
||||||
stream >> buf;
|
|
||||||
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
// optimized specializations
|
|
||||||
template <>
|
|
||||||
inline float strTo<float>(const std::string &str)
|
|
||||||
{
|
|
||||||
return strtof(str.c_str(), (char **)NULL);
|
|
||||||
}
|
|
||||||
template <>
|
|
||||||
inline double strTo<double>(const std::string &str)
|
|
||||||
{
|
|
||||||
return strtod(str.c_str(), (char **)NULL);
|
|
||||||
}
|
|
||||||
template <>
|
|
||||||
inline int strTo<int>(const std::string &str)
|
|
||||||
{
|
|
||||||
return (int)(strtol(str.c_str(), (char **)NULL, 10));
|
|
||||||
}
|
|
||||||
template <>
|
|
||||||
inline long strTo<long>(const std::string &str)
|
|
||||||
{
|
|
||||||
return strtol(str.c_str(), (char **)NULL, 10);
|
|
||||||
}
|
|
||||||
template <>
|
|
||||||
inline std::string strTo<std::string>(const std::string &str)
|
|
||||||
{
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline std::string strFrom(const T x)
|
|
||||||
{
|
|
||||||
std::ostringstream stream;
|
|
||||||
|
|
||||||
stream << x;
|
|
||||||
|
|
||||||
return stream.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
// specialization for vectors
|
|
||||||
template<>
|
|
||||||
inline DVec strTo<DVec>(const std::string &str)
|
|
||||||
{
|
|
||||||
DVec res;
|
|
||||||
std::vector<double> vbuf;
|
|
||||||
double buf;
|
|
||||||
std::istringstream stream(str);
|
|
||||||
|
|
||||||
while (!stream.eof())
|
|
||||||
{
|
|
||||||
stream >> buf;
|
|
||||||
vbuf.push_back(buf);
|
|
||||||
}
|
|
||||||
res = Map<DVec>(vbuf.data(), static_cast<Index>(vbuf.size()));
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
inline IVec strTo<IVec>(const std::string &str)
|
|
||||||
{
|
|
||||||
IVec res;
|
|
||||||
std::vector<int> vbuf;
|
|
||||||
int buf;
|
|
||||||
std::istringstream stream(str);
|
|
||||||
|
|
||||||
while (!stream.eof())
|
|
||||||
{
|
|
||||||
stream >> buf;
|
|
||||||
vbuf.push_back(buf);
|
|
||||||
}
|
|
||||||
res = Map<IVec>(vbuf.data(), static_cast<Index>(vbuf.size()));
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
inline UVec strTo<UVec>(const std::string &str)
|
|
||||||
{
|
|
||||||
UVec res;
|
|
||||||
std::vector<unsigned int> vbuf;
|
|
||||||
unsigned int buf;
|
|
||||||
std::istringstream stream(str);
|
|
||||||
|
|
||||||
while (!stream.eof())
|
|
||||||
{
|
|
||||||
stream >> buf;
|
|
||||||
vbuf.push_back(buf);
|
|
||||||
}
|
|
||||||
res = Map<UVec>(vbuf.data(), static_cast<Index>(vbuf.size()));
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void tokenReplace(std::string &str, const std::string token,
|
|
||||||
const T &x, const std::string mark = "@")
|
|
||||||
{
|
|
||||||
std::string fullToken = mark + token + mark;
|
|
||||||
|
|
||||||
auto pos = str.find(fullToken);
|
|
||||||
if (pos != std::string::npos)
|
|
||||||
{
|
|
||||||
str.replace(pos, fullToken.size(), strFrom(x));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Manifest file reader ////////////////////////////////////////////////////////
|
|
||||||
inline std::vector<std::string> readManifest(const std::string manFileName)
|
|
||||||
{
|
|
||||||
std::vector<std::string> list;
|
|
||||||
std::ifstream manFile;
|
|
||||||
char buf[MAX_PATH_LENGTH];
|
|
||||||
|
|
||||||
manFile.open(manFileName);
|
|
||||||
while (!manFile.eof())
|
|
||||||
{
|
|
||||||
manFile.getline(buf, MAX_PATH_LENGTH);
|
|
||||||
if (!std::string(buf).empty())
|
|
||||||
{
|
|
||||||
list.push_back(buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
manFile.close();
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Recursive directory creation ////////////////////////////////////////////////
|
|
||||||
int mkdir(const std::string dirName);
|
|
||||||
|
|
||||||
// C++ version of basename/dirname /////////////////////////////////////////////
|
|
||||||
std::string basename(const std::string& s);
|
|
||||||
std::string dirname(const std::string& s);
|
|
||||||
|
|
||||||
// Progress bar class //////////////////////////////////////////////////////////
|
|
||||||
class ProgressBar
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// constructor
|
|
||||||
template <typename A, typename B>
|
|
||||||
ProgressBar(const A current, const B total, const Index nCol = 60);
|
|
||||||
// IO
|
|
||||||
friend std::ostream & operator<<(std::ostream &out,
|
|
||||||
const ProgressBar &&bar);
|
|
||||||
private:
|
|
||||||
Index current_, total_, nCol_;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename A, typename B>
|
|
||||||
ProgressBar::ProgressBar(const A current, const B total, const Index nCol)
|
|
||||||
: current_(static_cast<Index>(current))
|
|
||||||
, total_(static_cast<Index>(total))
|
|
||||||
, nCol_(nCol)
|
|
||||||
{}
|
|
||||||
|
|
||||||
std::ostream & operator<<(std::ostream &out, const ProgressBar &&bar);
|
|
||||||
|
|
||||||
// named variable interface ////////////////////////////////////////////////////
|
|
||||||
// FIXME: check redundant names and variable number limit
|
|
||||||
class VarName
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// constructor
|
|
||||||
VarName(const std::string defName);
|
|
||||||
// destructor
|
|
||||||
virtual ~VarName(void) = default;
|
|
||||||
// access
|
|
||||||
std::string getName(const Index i) const;
|
|
||||||
void setName(const Index i, const std::string name);
|
|
||||||
// test
|
|
||||||
bool hasName(const Index i) const;
|
|
||||||
private:
|
|
||||||
std::string defName_;
|
|
||||||
std::unordered_map<Index, std::string> name_;
|
|
||||||
};
|
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
#endif // LatAnalyze_Utilities_hpp_
|
|
@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* stdincludes.hpp, part of LatAnalyze 3
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze 3 is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef Latan_stdincludes_hpp_
|
|
||||||
#define Latan_stdincludes_hpp_
|
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <array>
|
|
||||||
#include <chrono>
|
|
||||||
#include <complex>
|
|
||||||
#include <fstream>
|
|
||||||
#include <functional>
|
|
||||||
#include <iostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <iterator>
|
|
||||||
#include <limits>
|
|
||||||
#include <list>
|
|
||||||
#include <map>
|
|
||||||
#include <memory>
|
|
||||||
#include <queue>
|
|
||||||
#include <random>
|
|
||||||
#include <regex>
|
|
||||||
#include <set>
|
|
||||||
#include <stack>
|
|
||||||
#include <string>
|
|
||||||
#include <sstream>
|
|
||||||
#include <type_traits>
|
|
||||||
#include <unordered_map>
|
|
||||||
#include <utility>
|
|
||||||
#include <vector>
|
|
||||||
#include <cfloat>
|
|
||||||
#include <climits>
|
|
||||||
#include <cmath>
|
|
||||||
#include <cstdio>
|
|
||||||
#include <cstdlib>
|
|
||||||
#include <cstring>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#endif // Latan_stdincludes_hpp_
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Dataset.hpp, part of LatAnalyze 3
|
* Dataset.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_Dataset_hpp_
|
#define Latan_Dataset_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Io/File.hpp>
|
#include <LatAnalyze/File.hpp>
|
||||||
#include <LatAnalyze/Statistics/StatArray.hpp>
|
#include <LatAnalyze/StatArray.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Derivative.cpp, part of LatAnalyze 3
|
* Derivative.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/Derivative.hpp>
|
#include <LatAnalyze/Derivative.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Derivative.hpp, part of LatAnalyze 3
|
* Derivative.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#define Latan_Derivative_hpp_
|
#define Latan_Derivative_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Exceptions.cpp, part of LatAnalyze 3
|
* Exceptions.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Core/Exceptions.hpp>
|
#include <LatAnalyze/Exceptions.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
#ifndef ERR_SUFF
|
#ifndef ERR_SUFF
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Exceptions.hpp, part of LatAnalyze 3
|
* Exceptions.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* FFT.hpp, part of LatAnalyze
|
* FFT.hpp, part of LatAnalyze
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2017 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
* LatAnalyze is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* File.cpp, part of LatAnalyze 3
|
* File.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Io/File.hpp>
|
#include <LatAnalyze/File.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* File.hpp, part of LatAnalyze 3
|
* File.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,9 +21,9 @@
|
|||||||
#define Latan_File_hpp_
|
#define Latan_File_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Io/IoObject.hpp>
|
#include <LatAnalyze/IoObject.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Statistics/MatSample.hpp>
|
#include <LatAnalyze/MatSample.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* FitInterface.cpp, part of LatAnalyze 3
|
* FitInterface.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Statistics/FitInterface.hpp>
|
#include <LatAnalyze/FitInterface.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -200,7 +200,6 @@ double FitInterface::getSvdTolerance(void) const
|
|||||||
void FitInterface::setSvdTolerance(const double &tol)
|
void FitInterface::setSvdTolerance(const double &tol)
|
||||||
{
|
{
|
||||||
svdTol_ = tol;
|
svdTol_ = tol;
|
||||||
scheduleLayoutInit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VarName & FitInterface::xName(void)
|
VarName & FitInterface::xName(void)
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* FitInterface.hpp, part of LatAnalyze 3
|
* FitInterface.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#define Latan_FitInterface_hpp_
|
#define Latan_FitInterface_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Function.cpp, part of LatAnalyze 3
|
* Function.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -111,20 +111,6 @@ double DoubleFunction::operator()(void) const
|
|||||||
return (*this)(nullptr);
|
return (*this)(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<double, double> DoubleFunction::operator()(const std::map<double, double> &m) const
|
|
||||||
{
|
|
||||||
checkSize(1);
|
|
||||||
|
|
||||||
std::map<double, double> res;
|
|
||||||
|
|
||||||
for (auto &val: m)
|
|
||||||
{
|
|
||||||
res[val.first] = (*this)(val.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
// bind ////////////////////////////////////////////////////////////////////////
|
// bind ////////////////////////////////////////////////////////////////////////
|
||||||
DoubleFunction DoubleFunction::bind(const Index argIndex,
|
DoubleFunction DoubleFunction::bind(const Index argIndex,
|
||||||
const double val) const
|
const double val) const
|
||||||
@ -179,26 +165,6 @@ DoubleFunction DoubleFunction::bind(const Index argIndex,
|
|||||||
return bindFunc;
|
return bindFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
// sample //////////////////////////////////////////////////////////////////////
|
|
||||||
DVec DoubleFunction::sample(const DMat &x) const
|
|
||||||
{
|
|
||||||
if (x.cols() != getNArg())
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Size, "sampling point matrix and number of arguments "
|
|
||||||
"mismatch (matrix has " + strFrom(x.cols())
|
|
||||||
+ ", number of arguments is " + strFrom(getNArg()) + ")");
|
|
||||||
}
|
|
||||||
|
|
||||||
DVec res(x.rows());
|
|
||||||
|
|
||||||
for (Index i = 0; i < res.size(); ++i)
|
|
||||||
{
|
|
||||||
res(i) = (*this)(x.row(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
// arithmetic operators ////////////////////////////////////////////////////////
|
// arithmetic operators ////////////////////////////////////////////////////////
|
||||||
DoubleFunction DoubleFunction::operator-(void) const
|
DoubleFunction DoubleFunction::operator-(void) const
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Function.hpp, part of LatAnalyze 3
|
* Function.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_Function_hpp_
|
#define Latan_Function_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Statistics/MatSample.hpp>
|
#include <LatAnalyze/MatSample.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
||||||
@ -52,12 +52,9 @@ public:
|
|||||||
double operator()(void) const;
|
double operator()(void) const;
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
double operator()(const double arg0, const Ts... args) const;
|
double operator()(const double arg0, const Ts... args) const;
|
||||||
std::map<double, double> operator()(const std::map<double, double> &m) const;
|
|
||||||
// bind
|
// bind
|
||||||
DoubleFunction bind(const Index argIndex, const double val) const;
|
DoubleFunction bind(const Index argIndex, const double val) const;
|
||||||
DoubleFunction bind(const Index argIndex, const DVec &x) const;
|
DoubleFunction bind(const Index argIndex, const DVec &x) const;
|
||||||
// sample
|
|
||||||
DVec sample(const DMat &x) const;
|
|
||||||
// arithmetic operators
|
// arithmetic operators
|
||||||
DoubleFunction operator-(void) const;
|
DoubleFunction operator-(void) const;
|
||||||
DoubleFunction & operator+=(const DoubleFunction &f);
|
DoubleFunction & operator+=(const DoubleFunction &f);
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Global.cpp, part of LatAnalyze 3
|
* Global.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Global.hpp, part of LatAnalyze 3
|
* Global.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -20,27 +20,13 @@
|
|||||||
#ifndef Latan_Global_hpp_
|
#ifndef Latan_Global_hpp_
|
||||||
#define Latan_Global_hpp_
|
#define Latan_Global_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Core/stdincludes.hpp>
|
#include <LatCore/LatCore.hpp>
|
||||||
|
|
||||||
#define BEGIN_LATAN_NAMESPACE \
|
#define BEGIN_LATAN_NAMESPACE \
|
||||||
namespace Latan {
|
namespace Latan {\
|
||||||
|
using namespace LatCore;
|
||||||
#define END_LATAN_NAMESPACE }
|
#define END_LATAN_NAMESPACE }
|
||||||
|
|
||||||
// macro utilities
|
|
||||||
#define unique_arg(...) __VA_ARGS__
|
|
||||||
#define DEBUG_VAR(x) std::cout << #x << "= " << x << std::endl
|
|
||||||
#define DEBUG_MAT(m) std::cout << #m << "=\n" << m << std::endl
|
|
||||||
|
|
||||||
// attribute to switch off unused warnings with gcc
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#define __dumb __attribute__((unused))
|
|
||||||
#else
|
|
||||||
#define __dumb
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// max length for paths
|
|
||||||
#define MAX_PATH_LENGTH 512u
|
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
||||||
// Placeholder type ////////////////////////////////////////////////////////////
|
// Placeholder type ////////////////////////////////////////////////////////////
|
||||||
@ -61,8 +47,6 @@ namespace Env
|
|||||||
|
|
||||||
END_LATAN_NAMESPACE
|
END_LATAN_NAMESPACE
|
||||||
|
|
||||||
#include <LatAnalyze/Core/Eigen.hpp>
|
#include <LatAnalyze/Exceptions.hpp>
|
||||||
#include <LatAnalyze/Core/Exceptions.hpp>
|
|
||||||
#include <LatAnalyze/Core/Utilities.hpp>
|
|
||||||
|
|
||||||
#endif // Latan_Global_hpp_
|
#endif // Latan_Global_hpp_
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslFFT.cpp, part of LatAnalyze
|
* GslFFT.cpp, part of LatAnalyze
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2017 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
* LatAnalyze is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/GslFFT.hpp>
|
#include <LatAnalyze/GslFFT.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -43,7 +43,6 @@ void GslFFT::resize(const Index size)
|
|||||||
{
|
{
|
||||||
if (size_ != size)
|
if (size_ != size)
|
||||||
{
|
{
|
||||||
clear();
|
|
||||||
size_ = size;
|
size_ = size;
|
||||||
wavetable_ = gsl_fft_complex_wavetable_alloc(size_);
|
wavetable_ = gsl_fft_complex_wavetable_alloc(size_);
|
||||||
workspace_ = gsl_fft_complex_workspace_alloc(size_);
|
workspace_ = gsl_fft_complex_workspace_alloc(size_);
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslFFT.hpp, part of LatAnalyze
|
* GslFFT.hpp, part of LatAnalyze
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2017 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
* LatAnalyze is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_GslFFT_hpp_
|
#define Latan_GslFFT_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Numerical/FFT.hpp>
|
#include <LatAnalyze/FFT.hpp>
|
||||||
#include <gsl/gsl_fft_complex.h>
|
#include <gsl/gsl_fft_complex.h>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslHybridRootFinder.cpp, part of LatAnalyze 3
|
* GslHybridRootFinder.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/GslHybridRootFinder.hpp>
|
#include <LatAnalyze/GslHybridRootFinder.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <gsl/gsl_vector.h>
|
#include <gsl/gsl_vector.h>
|
||||||
#include <gsl/gsl_multiroots.h>
|
#include <gsl/gsl_multiroots.h>
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslHybridRootFinder.hpp, part of LatAnalyze 3
|
* GslHybridRootFinder.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#define Latan_GslHybridRootFinder_hpp_
|
#define Latan_GslHybridRootFinder_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Numerical/RootFinder.hpp>
|
#include <LatAnalyze/RootFinder.hpp>
|
||||||
#include <gsl/gsl_multiroots.h>
|
#include <gsl/gsl_multiroots.h>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslMinimizer.cpp, part of LatAnalyze
|
* GslMinimizer.cpp, part of LatAnalyze
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
* LatAnalyze is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/GslMinimizer.hpp>
|
#include <LatAnalyze/GslMinimizer.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
#include <gsl/gsl_multimin.h>
|
#include <gsl/gsl_multimin.h>
|
||||||
#include <gsl/gsl_blas.h>
|
#include <gsl/gsl_blas.h>
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslMinimizer.hpp, part of LatAnalyze
|
* GslMinimizer.hpp, part of LatAnalyze
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
* LatAnalyze is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,9 +21,9 @@
|
|||||||
#define Latan_GslMinimizer_hpp_
|
#define Latan_GslMinimizer_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Numerical/Derivative.hpp>
|
#include <LatAnalyze/Derivative.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Numerical/Minimizer.hpp>
|
#include <LatAnalyze/Minimizer.hpp>
|
||||||
#include <gsl/gsl_vector.h>
|
#include <gsl/gsl_vector.h>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslQagsIntegrator.cpp, part of LatAnalyze 3
|
* GslQagsIntegrator.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/GslQagsIntegrator.hpp>
|
#include <LatAnalyze/GslQagsIntegrator.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* GslQagsIntegrator.hpp, part of LatAnalyze 3
|
* GslQagsIntegrator.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_GslQagsIntegrator_hpp_
|
#define Latan_GslQagsIntegrator_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Numerical/Integrator.hpp>
|
#include <LatAnalyze/Integrator.hpp>
|
||||||
#include <gsl/gsl_integration.h>
|
#include <gsl/gsl_integration.h>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Hdf5File.cpp, part of LatAnalyze 3
|
* Hdf5File.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli, Matt Spraggs
|
* Copyright (C) 2013 - 2016 Antonin Portelli, Matt Spraggs
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,8 +17,8 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Io/Hdf5File.hpp>
|
#include <LatAnalyze/Hdf5File.hpp>
|
||||||
#include <LatAnalyze/Io/IoObject.hpp>
|
#include <LatAnalyze/IoObject.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Hdf5File.hpp, part of LatAnalyze 3
|
* Hdf5File.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli, Matt Spraggs
|
* Copyright (C) 2013 - 2016 Antonin Portelli, Matt Spraggs
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,9 +21,9 @@
|
|||||||
#define Latan_Hdf5File_hpp_
|
#define Latan_Hdf5File_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Io/File.hpp>
|
#include <LatAnalyze/File.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Statistics/MatSample.hpp>
|
#include <LatAnalyze/MatSample.hpp>
|
||||||
#include <H5Cpp.h>
|
#include <H5Cpp.h>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Histogram.cpp, part of LatAnalyze 3
|
* Histogram.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Statistics/Histogram.hpp>
|
#include <LatAnalyze/Histogram.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <gsl/gsl_histogram.h>
|
#include <gsl/gsl_histogram.h>
|
||||||
#include <gsl/gsl_sf.h>
|
#include <gsl/gsl_sf.h>
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Histogram.hpp, part of LatAnalyze 3
|
* Histogram.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#define Latan_Histogram_hpp_
|
#define Latan_Histogram_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Statistics/StatArray.hpp>
|
#include <LatAnalyze/StatArray.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Integrator.hpp, part of LatAnalyze 3
|
* Integrator.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#define Latan_Integrator_hpp_
|
#define Latan_Integrator_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Io.cpp, part of LatAnalyze 3
|
* Io.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,10 +17,12 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Io/Io.hpp>
|
#include <LatAnalyze/Io.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <LatAnalyze/Io/AsciiFile.hpp>
|
#include <LatAnalyze/AsciiFile.hpp>
|
||||||
#include <LatAnalyze/Io/Hdf5File.hpp>
|
#ifdef HAVE_HDF5
|
||||||
|
#include <LatAnalyze/Hdf5File.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
@ -40,10 +42,12 @@ unique_ptr<File> Io::open(const std::string &fileName, const unsigned int mode)
|
|||||||
{
|
{
|
||||||
return unique_ptr<File>(new AsciiFile(fileName, mode));
|
return unique_ptr<File>(new AsciiFile(fileName, mode));
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_HDF5
|
||||||
else if (ext == "h5")
|
else if (ext == "h5")
|
||||||
{
|
{
|
||||||
return unique_ptr<File>(new Hdf5File(fileName, mode));
|
return unique_ptr<File>(new Hdf5File(fileName, mode));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Io, "unknown file extension '" + ext + "'");
|
LATAN_ERROR(Io, "unknown file extension '" + ext + "'");
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Io.hpp, part of LatAnalyze 3
|
* Io.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#define Latan_Io_hpp_
|
#define Latan_Io_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Io/File.hpp>
|
#include <LatAnalyze/File.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
* BinReader.cpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2015 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <LatAnalyze/Io/BinReader.hpp>
|
|
||||||
#include <LatAnalyze/includes.hpp>
|
|
||||||
|
|
||||||
#if (defined __GNUC__)||(defined __clang__)
|
|
||||||
#pragma GCC diagnostic ignored "-Wunreachable-code"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace Latan;
|
|
||||||
|
|
||||||
BinIO::BinIO(string msg, string loc)
|
|
||||||
: runtime_error("Binary reader error: " + msg + " (" + loc + ")")
|
|
||||||
{}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* BinReader implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
// constructor /////////////////////////////////////////////////////////////////
|
|
||||||
BinReader::BinReader(const string fileName, const uint32_t endianness,
|
|
||||||
const bool isColMaj)
|
|
||||||
{
|
|
||||||
open(fileName, endianness, isColMaj);
|
|
||||||
}
|
|
||||||
|
|
||||||
// I/O /////////////////////////////////////////////////////////////////////////
|
|
||||||
void BinReader::open(const string fileName, const uint32_t endianness,
|
|
||||||
const bool isColMaj)
|
|
||||||
{
|
|
||||||
fileName_ = fileName;
|
|
||||||
endianness_ = endianness;
|
|
||||||
isColMaj_ = isColMaj;
|
|
||||||
file_.reset(new ifstream(fileName_, ios::in|ios::binary|ios::ate));
|
|
||||||
if (!file_->is_open())
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "impossible to open file '" + fileName_ + "'");
|
|
||||||
}
|
|
||||||
size_ = static_cast<size_t>(file_->tellg());
|
|
||||||
file_->seekg(0, ios::beg);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BinReader::close(void)
|
|
||||||
{
|
|
||||||
file_.reset(nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <>
|
|
||||||
std::string BinReader::read(void)
|
|
||||||
{
|
|
||||||
std::string s;
|
|
||||||
char c = 'a';
|
|
||||||
|
|
||||||
while (c != '\n')
|
|
||||||
{
|
|
||||||
c = read<char>();
|
|
||||||
if (c != '\n')
|
|
||||||
{
|
|
||||||
s.push_back(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
@ -1,196 +0,0 @@
|
|||||||
/*
|
|
||||||
* BinReader.hpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2015 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LatAnalyze_BinReader_hpp_
|
|
||||||
#define LatAnalyze_BinReader_hpp_
|
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
// I/O exception
|
|
||||||
class BinIO: public std::runtime_error
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
BinIO(std::string msg, std::string loc);
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* Byte manipulation utilities *
|
|
||||||
******************************************************************************/
|
|
||||||
class Endianness
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum: uint32_t
|
|
||||||
{
|
|
||||||
little = 0x00000001,
|
|
||||||
big = 0x01000000,
|
|
||||||
unknown = 0xffffffff
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class ByteManip
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static constexpr uint32_t getHostEndianness(void)
|
|
||||||
{
|
|
||||||
return ((0xffffffff & 1) == Endianness::little) ? Endianness::little
|
|
||||||
: (((0xffffffff & 1) == Endianness::big) ? Endianness::big
|
|
||||||
: Endianness::unknown);
|
|
||||||
}
|
|
||||||
template <typename T>
|
|
||||||
static T swapBytes(const T);
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* template implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
template <typename T>
|
|
||||||
T ByteManip::swapBytes(const T u)
|
|
||||||
{
|
|
||||||
static_assert (CHAR_BIT == 8, "CHAR_BIT != 8");
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
T u;
|
|
||||||
unsigned char u8[sizeof(T)];
|
|
||||||
} source, dest;
|
|
||||||
|
|
||||||
source.u = u;
|
|
||||||
for (size_t k = 0; k < sizeof(T); ++k)
|
|
||||||
{
|
|
||||||
dest.u8[k] = source.u8[sizeof(T) - k - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return dest.u;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* Utility to read binary files *
|
|
||||||
******************************************************************************/
|
|
||||||
class BinReader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// constructor
|
|
||||||
BinReader(void) = default;
|
|
||||||
BinReader(const std::string fileName,
|
|
||||||
const uint32_t endianness = ByteManip::getHostEndianness(),
|
|
||||||
const bool isColMaj = false);
|
|
||||||
// destructor
|
|
||||||
virtual ~BinReader(void) = default;
|
|
||||||
// I/O
|
|
||||||
void open(const std::string fileName,
|
|
||||||
const uint32_t endianness = ByteManip::getHostEndianness(),
|
|
||||||
const bool isColMaj = false);
|
|
||||||
void close(void);
|
|
||||||
template <typename T>
|
|
||||||
void read(T *pt, Index size);
|
|
||||||
template <typename T>
|
|
||||||
T read(void);
|
|
||||||
template <typename T>
|
|
||||||
MatBase<T> read(const Index nRow, const Index nCol);
|
|
||||||
private:
|
|
||||||
std::unique_ptr<std::ifstream> file_{nullptr};
|
|
||||||
std::string fileName_;
|
|
||||||
size_t size_;
|
|
||||||
uint32_t endianness_;
|
|
||||||
bool isColMaj_;
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* template implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
template <typename T>
|
|
||||||
void BinReader::read(T *pt, Index n)
|
|
||||||
{
|
|
||||||
if (file_ != nullptr)
|
|
||||||
{
|
|
||||||
file_->read(reinterpret_cast<char *>(pt),
|
|
||||||
static_cast<long>(sizeof(T))*n);
|
|
||||||
if (endianness_ != ByteManip::getHostEndianness())
|
|
||||||
{
|
|
||||||
for (Index i = 0; i < n; ++i)
|
|
||||||
{
|
|
||||||
pt[i] = ByteManip::swapBytes(pt[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "file is not opened");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
T BinReader::read(void)
|
|
||||||
{
|
|
||||||
T x;
|
|
||||||
|
|
||||||
if (file_ != nullptr)
|
|
||||||
{
|
|
||||||
read(&x, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "file is not opened");
|
|
||||||
}
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <>
|
|
||||||
std::string BinReader::read(void);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
MatBase<T> BinReader::read(const Index nRow, const Index nCol)
|
|
||||||
{
|
|
||||||
MatBase<T> m;
|
|
||||||
|
|
||||||
// Eigen matrices use column-major ordering
|
|
||||||
if (isColMaj_)
|
|
||||||
{
|
|
||||||
m.resize(nRow, nCol);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m.resize(nCol, nRow);
|
|
||||||
}
|
|
||||||
if (file_ != nullptr)
|
|
||||||
{
|
|
||||||
read(m.data(), nRow*nCol);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "file is not opened");
|
|
||||||
}
|
|
||||||
if (isColMaj_)
|
|
||||||
{
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return m.transpose();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
#endif // LatAnalyze_BinReader_hpp_
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,84 +0,0 @@
|
|||||||
/*
|
|
||||||
* XmlReader.cpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <LatAnalyze/Io/XmlReader.hpp>
|
|
||||||
#include <LatAnalyze/includes.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace Latan;
|
|
||||||
|
|
||||||
XmlParsing::XmlParsing(string msg, string loc)
|
|
||||||
: runtime_error("XML reader error: " + msg + " (" + loc + ")")
|
|
||||||
{}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* XmlReader implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
// constructor /////////////////////////////////////////////////////////////////
|
|
||||||
XmlReader::XmlReader(const string &fileName)
|
|
||||||
{
|
|
||||||
open(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// IO //////////////////////////////////////////////////////////////////////////
|
|
||||||
void XmlReader::open(const string &fileName)
|
|
||||||
{
|
|
||||||
name_ = fileName;
|
|
||||||
doc_.LoadFile(name_.c_str());
|
|
||||||
if (doc_.Error())
|
|
||||||
{
|
|
||||||
string errMsg;
|
|
||||||
|
|
||||||
if (doc_.ErrorStr())
|
|
||||||
{
|
|
||||||
errMsg = doc_.ErrorStr();
|
|
||||||
}
|
|
||||||
LATAN_ERROR(Io, "cannot open file " + fileName + " [tinyxml2 code "
|
|
||||||
+ strFrom(doc_.ErrorID()) + ": " + errMsg + "]");
|
|
||||||
}
|
|
||||||
root_ = doc_.RootElement();
|
|
||||||
}
|
|
||||||
|
|
||||||
// XML structure access ////////////////////////////////////////////////////////
|
|
||||||
const XmlNode * XmlReader::getNextNode(const XmlNode *node,
|
|
||||||
const string &nodeName)
|
|
||||||
{
|
|
||||||
const char *pt = (nodeName.empty()) ? nullptr : nodeName.c_str();
|
|
||||||
|
|
||||||
if (node)
|
|
||||||
{
|
|
||||||
return node->NextSiblingElement(pt);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const XmlNode * XmlReader::getNextSameNode(const XmlNode *node)
|
|
||||||
{
|
|
||||||
if (node)
|
|
||||||
{
|
|
||||||
return getNextNode(node, node->Name());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,235 +0,0 @@
|
|||||||
/*
|
|
||||||
* XmlReader.hpp, part of LatAnalyze
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LatAnalyze_XmlReader_hpp_
|
|
||||||
#define LatAnalyze_XmlReader_hpp_
|
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wsign-conversion"
|
|
||||||
#include <LatAnalyze/Io/Xml/tinyxml2.hpp>
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
// parsing exception
|
|
||||||
class XmlParsing: public std::runtime_error
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
XmlParsing(std::string msg, std::string loc);
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* XML parameter file reader *
|
|
||||||
******************************************************************************/
|
|
||||||
typedef tinyxml2::XMLElement XmlNode;
|
|
||||||
|
|
||||||
class XmlReader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// constructor
|
|
||||||
XmlReader(void) = default;
|
|
||||||
explicit XmlReader(const std::string &fileName);
|
|
||||||
// destructor
|
|
||||||
virtual ~XmlReader(void) = default;
|
|
||||||
// IO
|
|
||||||
void open(const std::string &fileName);
|
|
||||||
// XML structure access
|
|
||||||
template <typename... Strs>
|
|
||||||
static const XmlNode * getFirstNode(const XmlNode *startNode,
|
|
||||||
const std::string &nodeName,
|
|
||||||
Strs... nodeNames);
|
|
||||||
template <typename... Strs>
|
|
||||||
const XmlNode * getFirstNode(const std::string &nodeName,
|
|
||||||
Strs... nodeNames) const;
|
|
||||||
static const XmlNode * getNextNode(const XmlNode *node,
|
|
||||||
const std::string &nodeName = "");
|
|
||||||
static const XmlNode * getNextSameNode(const XmlNode *node);
|
|
||||||
template <typename T>
|
|
||||||
static T getValue(const XmlNode *node);
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
static T getFirstValue(const XmlNode *startNode,
|
|
||||||
const std::string &nodeName, Strs... nodeNames);
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
T getFirstValue(const std::string &nodeName, Strs... nodeNames) const;
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
static std::vector<T> getAllValues(const XmlNode *startNode,
|
|
||||||
const std::string &nodeName,
|
|
||||||
Strs... nodeNames);
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
std::vector<T> getAllValues(const std::string &nodeName,
|
|
||||||
Strs... nodeNames) const;
|
|
||||||
// XML structure test
|
|
||||||
template <typename... Strs>
|
|
||||||
static bool hasNode(const XmlNode *startNode, const std::string &nodeName,
|
|
||||||
Strs... nodeNames);
|
|
||||||
template <typename... Strs>
|
|
||||||
bool hasNode(const std::string &nodeName, Strs... nodeNames) const;
|
|
||||||
private:
|
|
||||||
std::string name_;
|
|
||||||
tinyxml2::XMLDocument doc_;
|
|
||||||
XmlNode *root_{nullptr};
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* XmlReader template implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
// XML structure access ////////////////////////////////////////////////////////
|
|
||||||
template <typename... Strs>
|
|
||||||
const XmlNode * XmlReader::getFirstNode(const XmlNode *startNode,
|
|
||||||
const std::string &nodeName,
|
|
||||||
Strs... nodeNames)
|
|
||||||
{
|
|
||||||
static_assert(static_or<std::is_assignable<std::string, Strs>::value...>::value,
|
|
||||||
"getFirstNode arguments are not compatible with std::string");
|
|
||||||
|
|
||||||
const unsigned int nName = sizeof...(nodeNames) + 1;
|
|
||||||
const std::string name[] = {nodeName, nodeNames...};
|
|
||||||
const XmlNode *node = startNode;
|
|
||||||
|
|
||||||
if (!node)
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "root node is null, no XML file opened");
|
|
||||||
}
|
|
||||||
for (unsigned int i = 0; i < nName; ++i)
|
|
||||||
{
|
|
||||||
node = node->FirstChildElement(name[i].c_str());
|
|
||||||
if (!node)
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "XML node " + name[i] + " not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename... Strs>
|
|
||||||
const XmlNode * XmlReader::getFirstNode(const std::string &nodeName,
|
|
||||||
Strs... nodeNames) const
|
|
||||||
{
|
|
||||||
if (!root_)
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "root node is null, no XML file opened");
|
|
||||||
}
|
|
||||||
|
|
||||||
return getFirstNode(root_, nodeName, nodeNames...);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
T XmlReader::getValue(const XmlNode *node)
|
|
||||||
{
|
|
||||||
if (node)
|
|
||||||
{
|
|
||||||
if (node->GetText())
|
|
||||||
{
|
|
||||||
return Latan::strTo<T>(node->GetText());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return T();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return T();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
T XmlReader::getFirstValue(const XmlNode *startNode,
|
|
||||||
const std::string &nodeName, Strs... nodeNames)
|
|
||||||
{
|
|
||||||
const XmlNode *node = getFirstNode(startNode, nodeName, nodeNames...);
|
|
||||||
|
|
||||||
return getValue<T>(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
T XmlReader::getFirstValue(const std::string &nodeName, Strs... nodeNames) const
|
|
||||||
{
|
|
||||||
return getFirstValue<T>(root_, nodeName, nodeNames...);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
std::vector<T> XmlReader::getAllValues(const XmlNode *startNode,
|
|
||||||
const std::string &nodeName,
|
|
||||||
Strs... nodeNames)
|
|
||||||
{
|
|
||||||
const XmlNode *node = getFirstNode(startNode, nodeName, nodeNames...);
|
|
||||||
std::vector<T> value;
|
|
||||||
|
|
||||||
while (node)
|
|
||||||
{
|
|
||||||
value.push_back(getValue<T>(node));
|
|
||||||
node = getNextSameNode(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, typename... Strs>
|
|
||||||
std::vector<T> XmlReader::getAllValues(const std::string &nodeName,
|
|
||||||
Strs... nodeNames) const
|
|
||||||
{
|
|
||||||
return getAllValues<T>(root_, nodeName, nodeNames...);
|
|
||||||
}
|
|
||||||
|
|
||||||
// XML structure test //////////////////////////////////////////////////////////
|
|
||||||
template <typename... Strs>
|
|
||||||
bool XmlReader::hasNode(const XmlNode *startNode, const std::string &nodeName,
|
|
||||||
Strs... nodeNames)
|
|
||||||
{
|
|
||||||
static_assert(static_or<std::is_assignable<std::string, Strs>::value...>::value,
|
|
||||||
"hasNode arguments are not compatible with std::string");
|
|
||||||
|
|
||||||
const unsigned int nName = sizeof...(nodeNames) + 1;
|
|
||||||
const std::string name[] = {nodeName, nodeNames...};
|
|
||||||
const XmlNode *node = startNode;
|
|
||||||
|
|
||||||
if (!node)
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "root node is null, no XML file opened");
|
|
||||||
}
|
|
||||||
for (unsigned int i = 0; i < nName; ++i)
|
|
||||||
{
|
|
||||||
node = node->FirstChildElement(name[i].c_str());
|
|
||||||
if (!node)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename... Strs>
|
|
||||||
bool XmlReader::hasNode(const std::string &nodeName, Strs... nodeNames) const
|
|
||||||
{
|
|
||||||
if (!root_)
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Io, "root node is null, no XML file opened");
|
|
||||||
}
|
|
||||||
|
|
||||||
return hasNode(root_, nodeName, nodeNames...);
|
|
||||||
}
|
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
|
||||||
|
|
||||||
#endif // LatAnalyze_XmlReader_hpp_
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* IoObject.hpp, part of LatAnalyze 3
|
* IoObject.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
194
lib/Makefile.am
194
lib/Makefile.am
@ -7,137 +7,117 @@ if CXX_INTEL
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include eigen_files.mk
|
|
||||||
|
|
||||||
AM_LFLAGS = -olex.yy.c
|
AM_LFLAGS = -olex.yy.c
|
||||||
AM_YFLAGS = -y -d -Wno-yacc -Wno-deprecated
|
AM_YFLAGS = -d
|
||||||
|
|
||||||
lib_LTLIBRARIES = libLatAnalyze.la
|
lib_LTLIBRARIES = libLatAnalyze.la
|
||||||
noinst_LTLIBRARIES = libLexers.la
|
noinst_LTLIBRARIES = libLexers.la
|
||||||
|
|
||||||
libLexers_la_SOURCES = Io/AsciiLexer.lpp Core/MathLexer.lpp
|
libLexers_la_SOURCES = AsciiLexer.lpp MathLexer.lpp
|
||||||
if CXX_GNU
|
if CXX_GNU
|
||||||
libLexers_la_CXXFLAGS = $(COM_CXXFLAGS) -Wno-unused-parameter -Wno-unused-function -Wno-deprecated-register
|
libLexers_la_CXXFLAGS = $(COM_CXXFLAGS) -Wno-unused-parameter -Wno-unused-function -Wno-deprecated-register
|
||||||
else
|
else
|
||||||
libLexers_la_CXXFLAGS = $(COM_CXXFLAGS)
|
libLexers_la_CXXFLAGS = $(COM_CXXFLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libLatAnalyze_la_SOURCES = \
|
libLatAnalyze_la_SOURCES = \
|
||||||
includes.hpp \
|
AsciiFile.cpp \
|
||||||
Global.cpp \
|
AsciiParser.ypp \
|
||||||
Core/Exceptions.cpp \
|
CompiledFunction.cpp \
|
||||||
Core/Mat.cpp \
|
CompiledModel.cpp \
|
||||||
Core/Math.cpp \
|
Derivative.cpp \
|
||||||
Core/MathInterpreter.cpp \
|
Exceptions.cpp \
|
||||||
Core/MathParser.ypp \
|
File.cpp \
|
||||||
Core/OptParser.cpp \
|
FitInterface.cpp \
|
||||||
Core/Plot.cpp \
|
Function.cpp \
|
||||||
Core/Utilities.cpp \
|
Global.cpp \
|
||||||
Functional/CompiledFunction.cpp \
|
GslFFT.cpp \
|
||||||
Functional/CompiledModel.cpp \
|
GslHybridRootFinder.cpp\
|
||||||
Functional/Function.cpp \
|
GslMinimizer.cpp \
|
||||||
Functional/Model.cpp \
|
GslQagsIntegrator.cpp \
|
||||||
Functional/TabFunction.cpp \
|
Histogram.cpp \
|
||||||
Io/AsciiFile.cpp \
|
includes.hpp \
|
||||||
Io/AsciiParser.ypp \
|
Io.cpp \
|
||||||
Io/BinReader.cpp \
|
Mat.cpp \
|
||||||
Io/File.cpp \
|
Math.cpp \
|
||||||
Io/Hdf5File.cpp \
|
MathInterpreter.cpp \
|
||||||
Io/Io.cpp \
|
MathParser.ypp \
|
||||||
Io/XmlReader.cpp \
|
Minimizer.cpp \
|
||||||
Io/Xml/tinyxml2.cpp \
|
Model.cpp \
|
||||||
Numerical/Derivative.cpp \
|
Plot.cpp \
|
||||||
Numerical/GslFFT.cpp \
|
RootFinder.cpp \
|
||||||
Numerical/GslHybridRootFinder.cpp\
|
Solver.cpp \
|
||||||
Numerical/GslMinimizer.cpp \
|
StatArray.cpp \
|
||||||
Numerical/GslQagsIntegrator.cpp \
|
TabFunction.cpp \
|
||||||
Numerical/Minimizer.cpp \
|
XYSampleData.cpp \
|
||||||
Numerical/RootFinder.cpp \
|
XYStatData.cpp \
|
||||||
Numerical/Solver.cpp \
|
|
||||||
Physics/CorrelatorFitter.cpp \
|
|
||||||
Physics/EffectiveMass.cpp \
|
|
||||||
Statistics/FitInterface.cpp \
|
|
||||||
Statistics/Histogram.cpp \
|
|
||||||
Statistics/Random.cpp \
|
|
||||||
Statistics/StatArray.cpp \
|
|
||||||
Statistics/XYSampleData.cpp \
|
|
||||||
Statistics/XYStatData.cpp \
|
|
||||||
../config.h
|
../config.h
|
||||||
libLatAnalyze_ladir = $(pkgincludedir)
|
libLatAnalyze_ladir = $(pkgincludedir)
|
||||||
HPPFILES = \
|
libLatAnalyze_la_HEADERS = \
|
||||||
Global.hpp \
|
AsciiFile.hpp \
|
||||||
Core/Eigen.hpp \
|
CompiledFunction.hpp \
|
||||||
Core/EigenPlugin.hpp \
|
CompiledModel.hpp \
|
||||||
Core/Exceptions.hpp \
|
Dataset.hpp \
|
||||||
Core/Mat.hpp \
|
Derivative.hpp \
|
||||||
Core/Math.hpp \
|
Exceptions.hpp \
|
||||||
Core/MathInterpreter.hpp \
|
FFT.hpp \
|
||||||
Core/OptParser.hpp \
|
Function.hpp \
|
||||||
Core/ParserState.hpp \
|
File.hpp \
|
||||||
Core/Plot.hpp \
|
FitInterface.hpp \
|
||||||
Core/stdincludes.hpp \
|
Global.hpp \
|
||||||
Core/Utilities.hpp \
|
GslFFT.hpp \
|
||||||
Functional/CompiledFunction.hpp \
|
GslHybridRootFinder.hpp\
|
||||||
Functional/CompiledModel.hpp \
|
GslMinimizer.hpp \
|
||||||
Functional/Function.hpp \
|
GslQagsIntegrator.hpp \
|
||||||
Functional/Model.hpp \
|
Histogram.hpp \
|
||||||
Functional/TabFunction.hpp \
|
Integrator.hpp \
|
||||||
Io/AsciiFile.hpp \
|
Io.hpp \
|
||||||
Io/BinReader.hpp \
|
IoObject.hpp \
|
||||||
Io/File.hpp \
|
Mat.hpp \
|
||||||
Io/Hdf5File.hpp \
|
Math.hpp \
|
||||||
Io/Io.hpp \
|
MathInterpreter.hpp \
|
||||||
Io/IoObject.hpp \
|
MatSample.hpp \
|
||||||
Io/XmlReader.hpp \
|
Minimizer.hpp \
|
||||||
Numerical/Derivative.hpp \
|
Model.hpp \
|
||||||
Numerical/FFT.hpp \
|
ParserState.hpp \
|
||||||
Numerical/GslFFT.hpp \
|
Plot.hpp \
|
||||||
Numerical/GslHybridRootFinder.hpp\
|
RootFinder.hpp \
|
||||||
Numerical/GslMinimizer.hpp \
|
TabFunction.hpp \
|
||||||
Numerical/GslQagsIntegrator.hpp \
|
Solver.hpp \
|
||||||
Numerical/Integrator.hpp \
|
StatArray.hpp \
|
||||||
Numerical/Minimizer.hpp \
|
XYSampleData.hpp \
|
||||||
Numerical/RootFinder.hpp \
|
XYStatData.hpp
|
||||||
Numerical/Solver.hpp \
|
if HAVE_HDF5
|
||||||
Physics/CorrelatorFitter.hpp \
|
libLatAnalyze_la_SOURCES += Hdf5File.cpp
|
||||||
Physics/EffectiveMass.hpp \
|
libLatAnalyze_la_HEADERS += Hdf5File.hpp
|
||||||
Statistics/Dataset.hpp \
|
endif
|
||||||
Statistics/FitInterface.hpp \
|
|
||||||
Statistics/Histogram.hpp \
|
|
||||||
Statistics/MatSample.hpp \
|
|
||||||
Statistics/Random.hpp \
|
|
||||||
Statistics/StatArray.hpp \
|
|
||||||
Statistics/XYSampleData.hpp \
|
|
||||||
Statistics/XYStatData.hpp
|
|
||||||
if HAVE_MINUIT
|
if HAVE_MINUIT
|
||||||
libLatAnalyze_la_SOURCES += Numerical/MinuitMinimizer.cpp
|
libLatAnalyze_la_SOURCES += MinuitMinimizer.cpp
|
||||||
HPPFILES += Numerical/MinuitMinimizer.hpp
|
libLatAnalyze_la_HEADERS += MinuitMinimizer.hpp
|
||||||
endif
|
endif
|
||||||
if HAVE_NLOPT
|
if HAVE_NLOPT
|
||||||
libLatAnalyze_la_SOURCES += Numerical/NloptMinimizer.cpp
|
libLatAnalyze_la_SOURCES += NloptMinimizer.cpp
|
||||||
HPPFILES += Numerical/NloptMinimizer.hpp
|
libLatAnalyze_la_HEADERS += NloptMinimizer.hpp
|
||||||
endif
|
endif
|
||||||
libLatAnalyze_la_CXXFLAGS = $(COM_CXXFLAGS)
|
libLatAnalyze_la_CXXFLAGS = $(COM_CXXFLAGS)
|
||||||
libLatAnalyze_la_LIBADD = libLexers.la
|
libLatAnalyze_la_LIBADD = libLexers.la
|
||||||
|
|
||||||
if HAVE_AM_MINOR_LE_11
|
if HAVE_AM_MINOR_LE_11
|
||||||
Io/AsciiParser.hpp: Io/AsciiParser.ypp
|
AsciiParser.hpp: AsciiParser.ypp
|
||||||
$(AM_V_YACC) $(YACC) -o Io/AsciiParser.cpp --defines=Io/AsciiParser.hpp $<
|
$(AM_V_YACC) $(YACC) -o AsciiParser.cpp --defines=AsciiParser.hpp $<
|
||||||
|
|
||||||
Core/MathParser.hpp: Core/MathParser.ypp
|
MathParser.hpp: MathParser.ypp
|
||||||
$(AM_V_YACC) $(YACC) -o Core/MathParser.cpp --defines=Core/MathParser.hpp $<
|
$(AM_V_YACC) $(YACC) -o MathParser.cpp --defines=MathParser.hpp $<
|
||||||
endif
|
endif
|
||||||
|
|
||||||
BUILT_SOURCES = Io/AsciiParser.hpp Core/MathParser.hpp
|
BUILT_SOURCES = AsciiParser.hpp MathParser.hpp
|
||||||
|
|
||||||
CLEANFILES = \
|
CLEANFILES = \
|
||||||
Core/MathLexer.cpp \
|
MathLexer.cpp \
|
||||||
Core/MathParser.cpp\
|
AsciiLexer.cpp \
|
||||||
Core/MathParser.hpp\
|
AsciiParser.cpp\
|
||||||
Io/AsciiLexer.cpp \
|
AsciiParser.hpp\
|
||||||
Io/AsciiParser.cpp \
|
MathParser.cpp \
|
||||||
Io/AsciiParser.hpp
|
MathParser.hpp
|
||||||
|
|
||||||
nobase_dist_pkginclude_HEADERS = $(HPPFILES) $(eigen_files) Io/Xml/tinyxml2.hpp
|
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I .buildutils/m4
|
ACLOCAL_AMFLAGS = -I .buildutils/m4
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Mat.cpp, part of LatAnalyze 3
|
* Mat.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Mat.hpp, part of LatAnalyze 3
|
* Mat.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,7 +21,11 @@
|
|||||||
#define Latan_Mat_hpp_
|
#define Latan_Mat_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Io/IoObject.hpp>
|
#include <LatAnalyze/IoObject.hpp>
|
||||||
|
|
||||||
|
#define FOR_MAT(mat, i, j) \
|
||||||
|
for (Latan::Index j = 0; j < mat.cols(); ++j)\
|
||||||
|
for (Latan::Index i = 0; i < mat.rows(); ++i)
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MatSample.hpp, part of LatAnalyze 3
|
* MatSample.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_MatSample_hpp_
|
#define Latan_MatSample_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Statistics/StatArray.hpp>
|
#include <LatAnalyze/StatArray.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ Index MatSample<T>::BlockTemplate<S>::getNCol(void) const
|
|||||||
// assignement operators ///////////////////////////////////////////////////////
|
// assignement operators ///////////////////////////////////////////////////////
|
||||||
template <typename T>
|
template <typename T>
|
||||||
template <class S>
|
template <class S>
|
||||||
typename MatSample<T>::template BlockTemplate<S> &
|
MatSample<T>::BlockTemplate<S> &
|
||||||
MatSample<T>::BlockTemplate<S>::operator=(const S &sample)
|
MatSample<T>::BlockTemplate<S>::operator=(const S &sample)
|
||||||
{
|
{
|
||||||
FOR_STAT_ARRAY(sample_, s)
|
FOR_STAT_ARRAY(sample_, s)
|
||||||
@ -241,7 +241,7 @@ MatSample<T>::BlockTemplate<S>::operator=(const S &sample)
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
template <class S>
|
template <class S>
|
||||||
typename MatSample<T>::template BlockTemplate<S> &
|
MatSample<T>::BlockTemplate<S> &
|
||||||
MatSample<T>::BlockTemplate<S>::operator=(const S &&sample)
|
MatSample<T>::BlockTemplate<S>::operator=(const S &&sample)
|
||||||
{
|
{
|
||||||
*this = sample;
|
*this = sample;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Math.cpp, part of LatAnalyze 3
|
* Math.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <gsl/gsl_cdf.h>
|
#include <gsl/gsl_cdf.h>
|
||||||
|
|
||||||
@ -107,14 +107,8 @@ DEF_STD_FUNC_1ARG(fabs)
|
|||||||
|
|
||||||
// p-value
|
// p-value
|
||||||
auto chi2PValueVecFunc = [](const double arg[2])
|
auto chi2PValueVecFunc = [](const double arg[2])
|
||||||
{
|
|
||||||
return 2.*min(gsl_cdf_chisq_P(arg[0], arg[1]), gsl_cdf_chisq_Q(arg[0], arg[1]));
|
|
||||||
};
|
|
||||||
|
|
||||||
auto chi2CcdfVecFunc = [](const double arg[2])
|
|
||||||
{
|
{
|
||||||
return gsl_cdf_chisq_Q(arg[0], arg[1]);
|
return gsl_cdf_chisq_Q(arg[0], arg[1]);
|
||||||
};
|
};
|
||||||
|
|
||||||
DoubleFunction MATH_NAMESPACE::chi2PValue(chi2PValueVecFunc, 2);
|
DoubleFunction MATH_NAMESPACE::chi2PValue(chi2PValueVecFunc, 2);
|
||||||
DoubleFunction MATH_NAMESPACE::chi2Ccdf(chi2CcdfVecFunc, 2);
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Math.hpp, part of LatAnalyze 3
|
* Math.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_Math_hpp_
|
#define Latan_Math_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Core/MathInterpreter.hpp>
|
#include <LatAnalyze/MathInterpreter.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
||||||
@ -75,7 +75,6 @@ namespace MATH_NAMESPACE
|
|||||||
constexpr double pi = 3.1415926535897932384626433832795028841970;
|
constexpr double pi = 3.1415926535897932384626433832795028841970;
|
||||||
constexpr double e = 2.7182818284590452353602874713526624977572;
|
constexpr double e = 2.7182818284590452353602874713526624977572;
|
||||||
constexpr double inf = std::numeric_limits<double>::infinity();
|
constexpr double inf = std::numeric_limits<double>::infinity();
|
||||||
constexpr double nan = std::numeric_limits<double>::quiet_NaN();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -153,7 +152,6 @@ DECL_STD_FUNC(fabs)
|
|||||||
namespace MATH_NAMESPACE
|
namespace MATH_NAMESPACE
|
||||||
{
|
{
|
||||||
extern DoubleFunction chi2PValue;
|
extern DoubleFunction chi2PValue;
|
||||||
extern DoubleFunction chi2Ccdf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
END_LATAN_NAMESPACE
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MathInterpreter.cpp, part of LatAnalyze 3
|
* MathInterpreter.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,9 +17,9 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Core/MathInterpreter.hpp>
|
#include <LatAnalyze/MathInterpreter.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <LatAnalyze/Core/Math.hpp>
|
#include <LatAnalyze/Math.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MathInterpreter.hpp, part of LatAnalyze 3
|
* MathInterpreter.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -20,9 +20,9 @@
|
|||||||
#ifndef Latan_MathInterpreter_hpp_
|
#ifndef Latan_MathInterpreter_hpp_
|
||||||
#define Latan_MathInterpreter_hpp_
|
#define Latan_MathInterpreter_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Core/ParserState.hpp>
|
#include <LatAnalyze/ParserState.hpp>
|
||||||
|
|
||||||
#define MAXIDLENGTH 256
|
#define MAXIDLENGTH 256
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MathLexer.lpp, part of LatAnalyze 3
|
* MathLexer.lpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -25,7 +25,7 @@
|
|||||||
%option yylineno
|
%option yylineno
|
||||||
|
|
||||||
%{
|
%{
|
||||||
#include <LatAnalyze/Core/MathInterpreter.hpp>
|
#include <LatAnalyze/MathInterpreter.hpp>
|
||||||
#include "MathParser.hpp"
|
#include "MathParser.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MathParser.ypp, part of LatAnalyze 3
|
* MathParser.ypp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
%{
|
%{
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Core/MathInterpreter.hpp>
|
#include <LatAnalyze/MathInterpreter.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Latan;
|
using namespace Latan;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Minimizer.cpp, part of LatAnalyze 3
|
* Minimizer.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/Minimizer.hpp>
|
#include <LatAnalyze/Minimizer.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Minimizer.hpp, part of LatAnalyze 3
|
* Minimizer.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,9 +21,9 @@
|
|||||||
#define Latan_Minimizer_hpp_
|
#define Latan_Minimizer_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
#include <LatAnalyze/Numerical/Solver.hpp>
|
#include <LatAnalyze/Solver.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MinuitMinimizer.cpp, part of LatAnalyze 3
|
* MinuitMinimizer.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/MinuitMinimizer.hpp>
|
#include <LatAnalyze/MinuitMinimizer.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
#include <Minuit2/Minuit2Minimizer.h>
|
#include <Minuit2/Minuit2Minimizer.h>
|
||||||
#include <Math/Functor.h>
|
#include <Math/Functor.h>
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* MinuitMinimizer.hpp, part of LatAnalyze 3
|
* MinuitMinimizer.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_MinuitMinimizer_hpp_
|
#define Latan_MinuitMinimizer_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Numerical/Minimizer.hpp>
|
#include <LatAnalyze/Minimizer.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Model.cpp, part of LatAnalyze 3
|
* Model.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Functional/Model.hpp>
|
#include <LatAnalyze/Model.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Model.hpp, part of LatAnalyze 3
|
* Model.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,8 +21,8 @@
|
|||||||
#define Latan_Model_hpp_
|
#define Latan_Model_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Core/Mat.hpp>
|
#include <LatAnalyze/Mat.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* NloptMinimizer.cpp, part of LatAnalyze 3
|
* NloptMinimizer.cpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LatAnalyze/Numerical/NloptMinimizer.hpp>
|
#include <LatAnalyze/NloptMinimizer.hpp>
|
||||||
#include <LatAnalyze/includes.hpp>
|
#include <LatAnalyze/includes.hpp>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* NloptMinimizer.hpp, part of LatAnalyze 3
|
* NloptMinimizer.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -21,9 +21,9 @@
|
|||||||
#define Latan_NloptMinimizer_hpp_
|
#define Latan_NloptMinimizer_hpp_
|
||||||
|
|
||||||
#include <LatAnalyze/Global.hpp>
|
#include <LatAnalyze/Global.hpp>
|
||||||
#include <LatAnalyze/Numerical/Derivative.hpp>
|
#include <LatAnalyze/Derivative.hpp>
|
||||||
#include <LatAnalyze/Functional/Function.hpp>
|
#include <LatAnalyze/Function.hpp>
|
||||||
#include <LatAnalyze/Numerical/Minimizer.hpp>
|
#include <LatAnalyze/Minimizer.hpp>
|
||||||
#include <nlopt.hpp>
|
#include <nlopt.hpp>
|
||||||
|
|
||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* ParserState.hpp, part of LatAnalyze 3
|
* ParserState.hpp, part of LatAnalyze 3
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
* Copyright (C) 2013 - 2016 Antonin Portelli
|
||||||
*
|
*
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
@ -1,417 +0,0 @@
|
|||||||
/*
|
|
||||||
* CorrelatorFitter.cpp, part of LatAnalyze 3
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 - 2020 Antonin Portelli
|
|
||||||
*
|
|
||||||
* LatAnalyze 3 is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LatAnalyze 3 is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LatAnalyze 3. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <LatAnalyze/Physics/CorrelatorFitter.hpp>
|
|
||||||
#include <LatAnalyze/includes.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace Latan;
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* Correlator models *
|
|
||||||
******************************************************************************/
|
|
||||||
DoubleModel CorrelatorModels::makeExpModel(const Index nState)
|
|
||||||
{
|
|
||||||
DoubleModel mod;
|
|
||||||
|
|
||||||
mod.setFunction([nState](const double *x, const double *p)
|
|
||||||
{
|
|
||||||
double res = 0.;
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < nState; ++i)
|
|
||||||
{
|
|
||||||
res += p[2*i + 1]*exp(-p[2*i]*x[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}, 1, 2*nState);
|
|
||||||
for (unsigned int i = 0; i < nState; ++i)
|
|
||||||
{
|
|
||||||
mod.parName().setName(2*i, "E_" + strFrom(i));
|
|
||||||
mod.parName().setName(2*i + 1, "Z_" + strFrom(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoubleModel CorrelatorModels::makeCoshModel(const Index nState, const Index nt)
|
|
||||||
{
|
|
||||||
DoubleModel mod;
|
|
||||||
|
|
||||||
mod.setFunction([nState, nt](const double *x, const double *p)
|
|
||||||
{
|
|
||||||
double res = 0.;
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < nState; ++i)
|
|
||||||
{
|
|
||||||
res += p[2*i + 1]*(exp(-p[2*i]*x[0]) + exp(-p[2*i]*(nt - x[0])));
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}, 1, 2*nState);
|
|
||||||
for (unsigned int i = 0; i < nState; ++i)
|
|
||||||
{
|
|
||||||
mod.parName().setName(2*i, "E_" + strFrom(i));
|
|
||||||
mod.parName().setName(2*i + 1, "Z_" + strFrom(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoubleModel CorrelatorModels::makeSinhModel(const Index nState, const Index nt)
|
|
||||||
{
|
|
||||||
DoubleModel mod;
|
|
||||||
|
|
||||||
mod.setFunction([nState, nt](const double *x, const double *p)
|
|
||||||
{
|
|
||||||
double res = 0.;
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < nState; ++i)
|
|
||||||
{
|
|
||||||
res += p[2*i + 1]*(exp(-p[2*i]*x[0]) - exp(-p[2*i]*(nt - x[0])));
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}, 1, 2*nState);
|
|
||||||
for (unsigned int i = 0; i < nState; ++i)
|
|
||||||
{
|
|
||||||
mod.parName().setName(2*i, "E_" + strFrom(i));
|
|
||||||
mod.parName().setName(2*i + 1, "Z_" + strFrom(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoubleModel CorrelatorModels::makeConstModel(void)
|
|
||||||
{
|
|
||||||
DoubleModel mod;
|
|
||||||
|
|
||||||
mod.setFunction([](const double *x __dumb, const double *p __dumb)
|
|
||||||
{
|
|
||||||
return p[0];
|
|
||||||
}, 1, 1);
|
|
||||||
mod.parName().setName(0, "cst");
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoubleModel CorrelatorModels::makeLinearModel(void)
|
|
||||||
{
|
|
||||||
DoubleModel mod;
|
|
||||||
|
|
||||||
mod.setFunction([](const double *x, const double *p)
|
|
||||||
{
|
|
||||||
return p[1] + p[0]*x[0];
|
|
||||||
}, 1, 2);
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
CorrelatorModels::ModelPar CorrelatorModels::parseModel(const string s)
|
|
||||||
{
|
|
||||||
smatch sm;
|
|
||||||
ModelPar par;
|
|
||||||
|
|
||||||
if (regex_match(s, sm, regex("exp([0-9]+)")))
|
|
||||||
{
|
|
||||||
par.type = CorrelatorType::exp;
|
|
||||||
par.nState = strTo<Index>(sm[1].str());
|
|
||||||
}
|
|
||||||
else if (regex_match(s, sm, regex("cosh([0-9]+)")))
|
|
||||||
{
|
|
||||||
par.type = CorrelatorType::cosh;
|
|
||||||
par.nState = strTo<Index>(sm[1].str());
|
|
||||||
}
|
|
||||||
else if (regex_match(s, sm, regex("sinh([0-9]+)")))
|
|
||||||
{
|
|
||||||
par.type = CorrelatorType::sinh;
|
|
||||||
par.nState = strTo<Index>(sm[1].str());
|
|
||||||
}
|
|
||||||
else if (s == "linear")
|
|
||||||
{
|
|
||||||
par.type = CorrelatorType::linear;
|
|
||||||
par.nState = 1;
|
|
||||||
}
|
|
||||||
else if (s == "cst")
|
|
||||||
{
|
|
||||||
par.type = CorrelatorType::cst;
|
|
||||||
par.nState = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
par.type = CorrelatorType::undefined;
|
|
||||||
par.nState = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return par;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoubleModel CorrelatorModels::makeModel(const CorrelatorModels::ModelPar par,
|
|
||||||
const Index nt)
|
|
||||||
{
|
|
||||||
switch (par.type)
|
|
||||||
{
|
|
||||||
case CorrelatorType::undefined:
|
|
||||||
LATAN_ERROR(Argument, "correlator type is undefined");
|
|
||||||
break;
|
|
||||||
case CorrelatorType::exp:
|
|
||||||
return makeExpModel(par.nState);
|
|
||||||
break;
|
|
||||||
case CorrelatorType::cosh:
|
|
||||||
return makeCoshModel(par.nState, nt);
|
|
||||||
break;
|
|
||||||
case CorrelatorType::sinh:
|
|
||||||
return makeSinhModel(par.nState, nt);
|
|
||||||
break;
|
|
||||||
case CorrelatorType::linear:
|
|
||||||
return makeLinearModel();
|
|
||||||
break;
|
|
||||||
case CorrelatorType::cst:
|
|
||||||
return makeConstModel();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DVec CorrelatorModels::parameterGuess(const DMatSample &corr,
|
|
||||||
const ModelPar par)
|
|
||||||
{
|
|
||||||
DVec init;
|
|
||||||
Index nt = corr[central].size();
|
|
||||||
|
|
||||||
switch (par.type)
|
|
||||||
{
|
|
||||||
case CorrelatorType::undefined:
|
|
||||||
LATAN_ERROR(Argument, "correlator type is undefined");
|
|
||||||
break;
|
|
||||||
case CorrelatorType::exp:
|
|
||||||
case CorrelatorType::cosh:
|
|
||||||
case CorrelatorType::sinh:
|
|
||||||
init.resize(2*par.nState);
|
|
||||||
init(0) = log(corr[central](nt/4)/corr[central](nt/4 + 1));
|
|
||||||
init(1) = corr[central](nt/4)/(exp(-init(0)*nt/4));
|
|
||||||
for (Index p = 2; p < init.size(); p += 2)
|
|
||||||
{
|
|
||||||
init(p) = 2*init(p - 2);
|
|
||||||
init(p + 1) = init(p - 1)/2.;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CorrelatorType::linear:
|
|
||||||
init.resize(2);
|
|
||||||
init(0) = corr[central](nt/4) - corr[central](nt/4 + 1, 0);
|
|
||||||
init(1) = corr[central](nt/4, 0) + nt/4*init(0);
|
|
||||||
break;
|
|
||||||
case CorrelatorType::cst:
|
|
||||||
init.resize(1);
|
|
||||||
init(0) = corr[central](nt/4);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return init;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* Correlator utilities *
|
|
||||||
******************************************************************************/
|
|
||||||
DMatSample CorrelatorUtils::shift(const DMatSample &c, const Index ts)
|
|
||||||
{
|
|
||||||
if (ts != 0)
|
|
||||||
{
|
|
||||||
const Index nt = c[central].rows();
|
|
||||||
DMatSample buf = c;
|
|
||||||
|
|
||||||
FOR_STAT_ARRAY(buf, s)
|
|
||||||
{
|
|
||||||
for (Index t = 0; t < nt; ++t)
|
|
||||||
{
|
|
||||||
buf[s]((t - ts + nt)%nt) = c[s](t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DMatSample CorrelatorUtils::fold(const DMatSample &c)
|
|
||||||
{
|
|
||||||
const Index nt = c[central].rows();
|
|
||||||
DMatSample buf = c;
|
|
||||||
|
|
||||||
FOR_STAT_ARRAY(buf, s)
|
|
||||||
{
|
|
||||||
for (Index t = 0; t < nt; ++t)
|
|
||||||
{
|
|
||||||
buf[s](t) = 0.5*(c[s](t) + c[s]((nt - t) % nt));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
DMatSample CorrelatorUtils::fourierTransform(const DMatSample &c, FFT &fft,
|
|
||||||
const unsigned int dir)
|
|
||||||
{
|
|
||||||
const Index nSample = c.size();
|
|
||||||
const Index nt = c[central].rows();
|
|
||||||
bool isComplex = (c[central].cols() > 1);
|
|
||||||
CMatSample buf(nSample, nt, 1);
|
|
||||||
DMatSample out(nSample, nt, 2);
|
|
||||||
|
|
||||||
fft.resize(nt);
|
|
||||||
FOR_STAT_ARRAY(buf, s)
|
|
||||||
{
|
|
||||||
buf[s].real() = c[s].col(0);
|
|
||||||
if (isComplex)
|
|
||||||
{
|
|
||||||
buf[s].imag() = c[s].col(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buf[s].imag() = DVec::Constant(nt, 0.);
|
|
||||||
}
|
|
||||||
fft(buf[s], dir);
|
|
||||||
out[s].col(0) = buf[s].real();
|
|
||||||
out[s].col(1) = buf[s].imag();
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* CorrelatorFitter implementation *
|
|
||||||
******************************************************************************/
|
|
||||||
// constructors ////////////////////////////////////////////////////////////////
|
|
||||||
CorrelatorFitter::CorrelatorFitter(const DMatSample &corr)
|
|
||||||
{
|
|
||||||
setCorrelator(corr);
|
|
||||||
}
|
|
||||||
|
|
||||||
CorrelatorFitter::CorrelatorFitter(const std::vector<DMatSample> &corr)
|
|
||||||
{
|
|
||||||
setCorrelators(corr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// access //////////////////////////////////////////////////////////////////////
|
|
||||||
XYSampleData & CorrelatorFitter::data(void)
|
|
||||||
{
|
|
||||||
return *data_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CorrelatorFitter::setCorrelator(const DMatSample &corr)
|
|
||||||
{
|
|
||||||
std::vector<DMatSample> vec;
|
|
||||||
|
|
||||||
vec.push_back(corr);
|
|
||||||
setCorrelators(vec);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CorrelatorFitter::setCorrelators(const std::vector<DMatSample> &corr)
|
|
||||||
{
|
|
||||||
Index nSample = corr[0].size();
|
|
||||||
DMatSample tVec(nSample);
|
|
||||||
std::vector<const DMatSample *> ptVec;
|
|
||||||
|
|
||||||
nt_ = corr[0][central].rows();
|
|
||||||
tVec.fill(DVec::LinSpaced(nt_, 0, nt_ - 1));
|
|
||||||
for (auto &c: corr)
|
|
||||||
{
|
|
||||||
ptVec.push_back(&c);
|
|
||||||
}
|
|
||||||
data_.reset(new XYSampleData(corr[0].size()));
|
|
||||||
data_->addXDim(nt_, "t/a", true);
|
|
||||||
for (unsigned int i = 0; i < corr.size(); ++i)
|
|
||||||
{
|
|
||||||
data_->addYDim("C_" + strFrom(i) + "(t)");
|
|
||||||
}
|
|
||||||
data_->setUnidimData(tVec, ptVec);
|
|
||||||
model_.resize(corr.size());
|
|
||||||
range_.resize(corr.size(), make_pair(0, nt_ - 1));
|
|
||||||
thinning_.resize(corr.size(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CorrelatorFitter::setModel(const DoubleModel &model, const Index i)
|
|
||||||
{
|
|
||||||
model_[i] = model;
|
|
||||||
}
|
|
||||||
|
|
||||||
const DoubleModel & CorrelatorFitter::getModel(const Index i) const
|
|
||||||
{
|
|
||||||
return model_.at(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CorrelatorFitter::setFitRange(const Index tMin, const Index tMax,
|
|
||||||
const Index i)
|
|
||||||
{
|
|
||||||
range_[i] = make_pair(tMin, tMax);
|
|
||||||
refreshRanges();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CorrelatorFitter::setCorrelation(const bool isCorrelated, const Index i,
|
|
||||||
const Index j)
|
|
||||||
{
|
|
||||||
data_->assumeYYCorrelated(isCorrelated, i, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
DMat CorrelatorFitter::getVarianceMatrix(void) const
|
|
||||||
{
|
|
||||||
return data_->getFitVarMat();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CorrelatorFitter::setThinning(const Index thinning, const Index i)
|
|
||||||
{
|
|
||||||
thinning_[i] = thinning;
|
|
||||||
refreshRanges();
|
|
||||||
}
|
|
||||||
|
|
||||||
// fit functions ///////////////////////////////////////////////////////////////
|
|
||||||
SampleFitResult CorrelatorFitter::fit(Minimizer &minimizer, const DVec &init)
|
|
||||||
{
|
|
||||||
vector<Minimizer *> vecPt = {&minimizer};
|
|
||||||
|
|
||||||
return fit(vecPt, init);
|
|
||||||
}
|
|
||||||
|
|
||||||
SampleFitResult CorrelatorFitter::fit(vector<Minimizer *> &minimizer,
|
|
||||||
const DVec &init)
|
|
||||||
{
|
|
||||||
vector<const DoubleModel *> vecPt(model_.size());
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < model_.size(); ++i)
|
|
||||||
{
|
|
||||||
vecPt[i] = &(model_[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return data_->fit(minimizer, init, vecPt);
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal function to refresh fit ranges /////////////////////////////////////
|
|
||||||
void CorrelatorFitter::refreshRanges(void)
|
|
||||||
{
|
|
||||||
for (unsigned int i = 0; i < range_.size(); ++i)
|
|
||||||
for (Index t = 0; t < nt_; ++t)
|
|
||||||
{
|
|
||||||
data_->fitPoint((t >= range_[i].first) and (t <= range_[i].second)
|
|
||||||
and ((t - range_[i].first) % thinning_[i] == 0), t);
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user