mirror of
				https://github.com/aportelli/LatAnalyze.git
				synced 2025-11-04 08:04:32 +00:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			andrew-pr
			...
			feature/fi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| de509714b4 | |||
| 0ade8a8cbf | |||
| 80b826040b | |||
| 9e8021d7d7 | 
							
								
								
									
										26
									
								
								.github/workflows/build-macos.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/build-macos.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,26 +0,0 @@
 | 
				
			|||||||
name: Build macOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  build:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    runs-on: macos-11
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
    - name: Checkout
 | 
					 | 
				
			||||||
      uses: actions/checkout@v2
 | 
					 | 
				
			||||||
    - name: Install basic dependencies
 | 
					 | 
				
			||||||
      run: brew install automake autoconf libtool bison flex
 | 
					 | 
				
			||||||
    - name: Build dependencies
 | 
					 | 
				
			||||||
      shell: bash
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        export PATH=/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:${PATH}
 | 
					 | 
				
			||||||
        cd ci-scripts
 | 
					 | 
				
			||||||
        ./install-deps.sh prefix 6
 | 
					 | 
				
			||||||
    - name: Build LatAnalyze
 | 
					 | 
				
			||||||
      shell: bash
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        export PATH=/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:${PATH}
 | 
					 | 
				
			||||||
        cd ci-scripts
 | 
					 | 
				
			||||||
        ./install-latan.sh prefix 6
 | 
					 | 
				
			||||||
							
								
								
									
										26
									
								
								.github/workflows/build-ubuntu.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/build-ubuntu.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,26 +0,0 @@
 | 
				
			|||||||
name: Build Ubuntu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on: [push]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  build:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    runs-on: ubuntu-20.04
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
    - name: Checkout
 | 
					 | 
				
			||||||
      uses: actions/checkout@v2
 | 
					 | 
				
			||||||
    - name: Install basic dependencies
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
 | 
					 | 
				
			||||||
        sudo apt install cmake bison flex
 | 
					 | 
				
			||||||
    - name: Build dependencies
 | 
					 | 
				
			||||||
      shell: bash
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        cd ci-scripts
 | 
					 | 
				
			||||||
        CC=clang CXX=clang++ ./install-deps.sh prefix 6
 | 
					 | 
				
			||||||
    - name: Build LatAnalyze
 | 
					 | 
				
			||||||
      shell: bash
 | 
					 | 
				
			||||||
      run: |
 | 
					 | 
				
			||||||
        cd ci-scripts
 | 
					 | 
				
			||||||
        CC=clang CXX=clang++ ./install-latan.sh prefix 6
 | 
					 | 
				
			||||||
							
								
								
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -16,7 +16,6 @@ autom4te.cache/*
 | 
				
			|||||||
*.in~
 | 
					*.in~
 | 
				
			||||||
config.h*
 | 
					config.h*
 | 
				
			||||||
configure
 | 
					configure
 | 
				
			||||||
configure~
 | 
					 | 
				
			||||||
.buildutils/*
 | 
					.buildutils/*
 | 
				
			||||||
aclocal.m4
 | 
					aclocal.m4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,6 +31,7 @@ lib/eigen_files.mk
 | 
				
			|||||||
# CI builds
 | 
					# CI builds
 | 
				
			||||||
ci-scripts/local/*
 | 
					ci-scripts/local/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# VS Code Studio stuff
 | 
					# CLion stuff
 | 
				
			||||||
.vscode
 | 
					.idea/*
 | 
				
			||||||
*.code-workspace
 | 
					CMakeLists.txt
 | 
				
			||||||
 | 
					cmake-build-debug/*
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										50
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -1,5 +1,9 @@
 | 
				
			|||||||
language: cpp
 | 
					language: cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					notifications:
 | 
				
			||||||
 | 
					  email: false
 | 
				
			||||||
 | 
					  slack: ukqcd:mQLXCtz8D2cg89xT8j1a4wku
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
cache:
 | 
					cache:
 | 
				
			||||||
  directories:
 | 
					  directories:
 | 
				
			||||||
    - ci-scripts/local
 | 
					    - ci-scripts/local
 | 
				
			||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										99
									
								
								Readme.md
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								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,93 +41,22 @@ 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
 | 
					 | 
				
			||||||
Additions:
 | 
					 | 
				
			||||||
* Sample plot CL utility.
 | 
					 | 
				
			||||||
* Infinity as a math constant.
 | 
					 | 
				
			||||||
* Option to dump bootstrap sequence while resampling.
 | 
					 | 
				
			||||||
* FFT through the GSL.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changes:
 | 
					 | 
				
			||||||
* GSL integrator accepts infinite bounds.
 | 
					 | 
				
			||||||
* `latan-sample-combine` accepts mixes of `DSample` and `DMatSample`.
 | 
					 | 
				
			||||||
* More general `latan-sample-element` command.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#### v3.2.2
 | 
					 | 
				
			||||||
Additions:
 | 
					 | 
				
			||||||
* The math interpreter supports `inf` for infinity.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changes:
 | 
					 | 
				
			||||||
* Vector version of `setUnidimData`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Fixes:
 | 
					 | 
				
			||||||
* 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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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,16 +1,16 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (( $# != 2 )); then
 | 
					if (( $# != 1 )); then
 | 
				
			||||||
  echo "usage: `basename $0` <prefix> <ntasks>" 1>&2
 | 
					  echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
 | 
				
			||||||
  exit 1
 | 
					  exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
PREFIX=$1
 | 
					PREFIX=$1
 | 
				
			||||||
NTASKS=$2
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
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} ${NTASKS}
 | 
					    ./install-${d}.sh ${PREFIX}
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					./install-latcore.sh ${PREFIX}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,27 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
NAME='gsl-2.6'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (( $# != 2 )); then
 | 
					 | 
				
			||||||
  echo "usage: `basename $0` <prefix> <ntasks>" 1>&2
 | 
					 | 
				
			||||||
  exit 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
PREFIX=$1
 | 
					 | 
				
			||||||
NTASKS=$2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 -j${NTASKS}
 | 
					 | 
				
			||||||
make install
 | 
					 | 
				
			||||||
cd ${INITDIR}/local
 | 
					 | 
				
			||||||
touch .built.gsl
 | 
					 | 
				
			||||||
cd ${INITDIR}
 | 
					 | 
				
			||||||
@@ -1,26 +1,22 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME='hdf5-1.10.8'
 | 
					NAME='hdf5-1.8.16'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (( $# != 2 )); then
 | 
					if (( $# != 1 )); then
 | 
				
			||||||
  echo "usage: `basename $0` <prefix> <ntasks>" 1>&2
 | 
					  echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
 | 
				
			||||||
  exit 1
 | 
					  exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
PREFIX=$1
 | 
					PREFIX=$1
 | 
				
			||||||
NTASKS=$2
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
set -ex
 | 
					set -ex
 | 
				
			||||||
INITDIR=$(pwd -P)
 | 
					INITDIR=`pwd`
 | 
				
			||||||
mkdir -p ${PREFIX}
 | 
					cd local/build
 | 
				
			||||||
cd ${PREFIX}
 | 
					wget http://www.hdfgroup.org/ftp/HDF5/releases/${NAME}/src/${NAME}.tar.gz
 | 
				
			||||||
PREFIX=$(pwd -P)
 | 
					 | 
				
			||||||
cd ${INITDIR}/local/build
 | 
					 | 
				
			||||||
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
 | 
				
			||||||
cd ${NAME}/build
 | 
					cd ${NAME}/build
 | 
				
			||||||
../configure --prefix=${PREFIX} --enable-cxx
 | 
					../configure --prefix=${PREFIX} --enable-cxx
 | 
				
			||||||
make -j${NTASKS}
 | 
					make -j4 
 | 
				
			||||||
make install
 | 
					make install
 | 
				
			||||||
cd ${INITDIR}/local
 | 
					cd ${INITDIR}/local
 | 
				
			||||||
touch .built.hdf5
 | 
					touch .built.hdf5
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,23 +1,19 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (( $# != 2 )); then
 | 
					if (( $# != 2 )); then
 | 
				
			||||||
  echo "usage: `basename $0` <prefix> <ntasks>" 1>&2
 | 
					  echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
 | 
				
			||||||
  exit 1
 | 
					  exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
PREFIX=$1
 | 
					PREFIX=$1
 | 
				
			||||||
NTASKS=$2
 | 
					OS=$2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set -ex
 | 
					set -ex
 | 
				
			||||||
INITDIR=$(pwd -P)
 | 
					./install-deps.sh ${PREFIX}
 | 
				
			||||||
mkdir -p ${PREFIX}
 | 
					 | 
				
			||||||
cd ${PREFIX}
 | 
					 | 
				
			||||||
PREFIX=$(pwd -P)
 | 
					 | 
				
			||||||
cd ${INITDIR}
 | 
					 | 
				
			||||||
./install-deps.sh ${PREFIX} ${NTASKS}
 | 
					 | 
				
			||||||
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=native -mtune=native"
 | 
					if [[ "$OS" == "osx" ]]; then EXTRA_FLAGS='--with-gsl=/usr/local'; fi
 | 
				
			||||||
make -j${NTASKS}
 | 
					../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 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}
 | 
				
			||||||
@@ -1,25 +1,22 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NAME='Minuit2-5.34.14'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (( $# != 2 )); then
 | 
					if (( $# != 1 )); then
 | 
				
			||||||
  echo "usage: `basename $0` <prefix> <ntasks>" 1>&2
 | 
					  echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
 | 
				
			||||||
  exit 1
 | 
					  exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
PREFIX=$1
 | 
					PREFIX=$1
 | 
				
			||||||
NTASKS=$2
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
set -ex
 | 
					set -ex
 | 
				
			||||||
INITDIR=$(pwd -P)
 | 
					INITDIR=`pwd`
 | 
				
			||||||
mkdir -p ${PREFIX}
 | 
					cd local/build
 | 
				
			||||||
cd ${PREFIX}
 | 
					wget http://www.cern.ch/mathlibs/sw/5_34_14/Minuit2/${NAME}.tar.gz
 | 
				
			||||||
PREFIX=$(pwd -P)
 | 
					tar -xzvf ${NAME}.tar.gz
 | 
				
			||||||
cd ${INITDIR}/local/build
 | 
					mkdir -p ${NAME}/build
 | 
				
			||||||
rm -rf root
 | 
					cd ${NAME}/build
 | 
				
			||||||
git clone https://github.com/root-project/root.git
 | 
					../configure --prefix=${PREFIX} --disable-openmp
 | 
				
			||||||
cd root/math/minuit2/
 | 
					make -j4 
 | 
				
			||||||
mkdir build; cd build
 | 
					 | 
				
			||||||
cmake .. -Dminuit2_standalone=ON -DCMAKE_INSTALL_PREFIX=${PREFIX}
 | 
					 | 
				
			||||||
make -j${NTASKS}
 | 
					 | 
				
			||||||
make install
 | 
					make install
 | 
				
			||||||
cd ${INITDIR}/local
 | 
					cd ${INITDIR}/local
 | 
				
			||||||
touch .built.minuit
 | 
					touch .built.minuit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,27 +1,22 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NAME='2.6.1'
 | 
					NAME='nlopt-2.4.2'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (( $# != 2 )); then
 | 
					if (( $# != 1 )); then
 | 
				
			||||||
  echo "usage: `basename $0` <prefix> <ntasks>" 1>&2
 | 
					  echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2
 | 
				
			||||||
  exit 1
 | 
					  exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
PREFIX=$1
 | 
					PREFIX=$1
 | 
				
			||||||
NTASKS=$2
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
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 -j${NTASKS}
 | 
					make -j4 
 | 
				
			||||||
make install
 | 
					make install
 | 
				
			||||||
cd ${INITDIR}/local
 | 
					cd ${INITDIR}/local
 | 
				
			||||||
touch .built.nlopt
 | 
					touch .built.nlopt
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										94
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								configure.ac
									
									
									
									
									
								
							@@ -2,13 +2,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Initialization
 | 
					# Initialization
 | 
				
			||||||
AC_PREREQ([2.63])
 | 
					AC_PREREQ([2.63])
 | 
				
			||||||
AC_INIT([LatAnalyze],[3.5.1-dev],[antonin.portelli@me.com],[LatAnalyze])
 | 
					AC_INIT([LatAnalyze],[3.2.1-dev],[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],
 | 
				
			||||||
@@ -36,7 +36,7 @@ AC_ARG_WITH([gsl],
 | 
				
			|||||||
AC_ARG_WITH([minuit],
 | 
					AC_ARG_WITH([minuit],
 | 
				
			||||||
    [AS_HELP_STRING([--with-minuit=prefix],
 | 
					    [AS_HELP_STRING([--with-minuit=prefix],
 | 
				
			||||||
		[try this for a non-standard install prefix of the Minuit2 library])],
 | 
							[try this for a non-standard install prefix of the Minuit2 library])],
 | 
				
			||||||
    [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_minuit/include -I$with_minuit/include/Minuit2 -I$with_minuit/include/Fit"]
 | 
					    [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_minuit/include"]
 | 
				
			||||||
	[AM_LDFLAGS="$AM_LDFLAGS -L$with_minuit/lib"])
 | 
						[AM_LDFLAGS="$AM_LDFLAGS -L$with_minuit/lib"])
 | 
				
			||||||
AC_ARG_WITH([nlopt],
 | 
					AC_ARG_WITH([nlopt],
 | 
				
			||||||
    [AS_HELP_STRING([--with-nlopt=prefix],
 | 
					    [AS_HELP_STRING([--with-nlopt=prefix],
 | 
				
			||||||
@@ -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,31 +78,30 @@ 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([pthread],[pthread_create],[],[AC_MSG_ERROR([pthread library not found])])
 | 
					 | 
				
			||||||
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::VariableMetricMinimizer in -lMinuit2]);
 | 
					AC_MSG_CHECKING([for ROOT::Minuit2::BasicMinimumError in -lMinuit2]);
 | 
				
			||||||
AC_LINK_IFELSE(
 | 
					AC_LINK_IFELSE(
 | 
				
			||||||
	[AC_LANG_PROGRAM([#include <Minuit2/VariableMetricMinimizer.h>],
 | 
						[AC_LANG_PROGRAM([#include <Minuit2/BasicMinimumError.h>],
 | 
				
			||||||
	[ROOT::Minuit2::VariableMetricMinimizer dummy()])],
 | 
						[ROOT::Minuit2::BasicMinimumError dummy(0)])],
 | 
				
			||||||
	[LIBS="$LIBS -lMinuit2"]
 | 
						[LIBS="$LIBS -lMinuit2"]
 | 
				
			||||||
	[AC_DEFINE([HAVE_MINUIT2],
 | 
						[AC_DEFINE([HAVE_MINUIT2],
 | 
				
			||||||
				[1],
 | 
									[1],
 | 
				
			||||||
@@ -104,59 +111,36 @@ AC_LINK_IFELSE(
 | 
				
			|||||||
	[have_minuit=false]
 | 
						[have_minuit=false]
 | 
				
			||||||
    [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="$LDFLAGS -lMinuit2Math"
 | 
					 | 
				
			||||||
AC_MSG_CHECKING([for ROOT::Math::MinimizerOptions in -lMinuit2Math]);
 | 
					 | 
				
			||||||
AC_LINK_IFELSE(
 | 
					 | 
				
			||||||
	[AC_LANG_PROGRAM([#include <Minuit2/Math/MinimizerOptions.h>],
 | 
					 | 
				
			||||||
	[ROOT::Math::MinimizerOptions dummy()])],
 | 
					 | 
				
			||||||
	[LIBS="$LIBS -lMinuit2Math"]
 | 
					 | 
				
			||||||
	[AC_DEFINE([HAVE_MINUIT2MATH],
 | 
					 | 
				
			||||||
				[1],
 | 
					 | 
				
			||||||
				[Define to 1 if you have the `Minuit2Math' library (-lMinuit2Math).])]
 | 
					 | 
				
			||||||
    [have_minuitmath=true]
 | 
					 | 
				
			||||||
	[AC_MSG_RESULT([yes])],
 | 
					 | 
				
			||||||
	[have_minuitmath=false]
 | 
					 | 
				
			||||||
    [AC_MSG_RESULT([no])])
 | 
					 | 
				
			||||||
AM_CONDITIONAL([HAVE_MINUITMATH], [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.
										
									
								
							@@ -9,7 +9,6 @@ endif
 | 
				
			|||||||
noinst_PROGRAMS =           \
 | 
					noinst_PROGRAMS =           \
 | 
				
			||||||
    exCompiledDoubleFunction\
 | 
					    exCompiledDoubleFunction\
 | 
				
			||||||
    exDerivative            \
 | 
					    exDerivative            \
 | 
				
			||||||
    exDWT                   \
 | 
					 | 
				
			||||||
    exFit                   \
 | 
					    exFit                   \
 | 
				
			||||||
    exFitSample             \
 | 
					    exFitSample             \
 | 
				
			||||||
    exIntegrator            \
 | 
					    exIntegrator            \
 | 
				
			||||||
@@ -18,10 +17,8 @@ noinst_PROGRAMS =           \
 | 
				
			|||||||
    exMathInterpreter       \
 | 
					    exMathInterpreter       \
 | 
				
			||||||
    exMin                   \
 | 
					    exMin                   \
 | 
				
			||||||
    exPlot                  \
 | 
					    exPlot                  \
 | 
				
			||||||
    exPValue                \
 | 
					 | 
				
			||||||
    exRand                  \
 | 
					    exRand                  \
 | 
				
			||||||
    exRootFinder            \
 | 
					    exRootFinder
 | 
				
			||||||
    exThreadPool
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
exCompiledDoubleFunction_SOURCES  = exCompiledDoubleFunction.cpp
 | 
					exCompiledDoubleFunction_SOURCES  = exCompiledDoubleFunction.cpp
 | 
				
			||||||
exCompiledDoubleFunction_CXXFLAGS = $(COM_CXXFLAGS)
 | 
					exCompiledDoubleFunction_CXXFLAGS = $(COM_CXXFLAGS)
 | 
				
			||||||
@@ -31,10 +28,6 @@ exDerivative_SOURCES              = exDerivative.cpp
 | 
				
			|||||||
exDerivative_CXXFLAGS             = $(COM_CXXFLAGS)
 | 
					exDerivative_CXXFLAGS             = $(COM_CXXFLAGS)
 | 
				
			||||||
exDerivative_LDFLAGS              = -L../lib/.libs -lLatAnalyze
 | 
					exDerivative_LDFLAGS              = -L../lib/.libs -lLatAnalyze
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exDWT_SOURCES                     = exDWT.cpp
 | 
					 | 
				
			||||||
exDWT_CXXFLAGS                    = $(COM_CXXFLAGS)
 | 
					 | 
				
			||||||
exDWT_LDFLAGS                     = -L../lib/.libs -lLatAnalyze
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exFit_SOURCES                     = exFit.cpp
 | 
					exFit_SOURCES                     = exFit.cpp
 | 
				
			||||||
exFit_CXXFLAGS                    = $(COM_CXXFLAGS)
 | 
					exFit_CXXFLAGS                    = $(COM_CXXFLAGS)
 | 
				
			||||||
exFit_LDFLAGS                     = -L../lib/.libs -lLatAnalyze
 | 
					exFit_LDFLAGS                     = -L../lib/.libs -lLatAnalyze
 | 
				
			||||||
@@ -67,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
 | 
				
			||||||
@@ -79,8 +68,4 @@ exRootFinder_SOURCES              = exRootFinder.cpp
 | 
				
			|||||||
exRootFinder_CXXFLAGS             = $(COM_CXXFLAGS)
 | 
					exRootFinder_CXXFLAGS             = $(COM_CXXFLAGS)
 | 
				
			||||||
exRootFinder_LDFLAGS              = -L../lib/.libs -lLatAnalyze
 | 
					exRootFinder_LDFLAGS              = -L../lib/.libs -lLatAnalyze
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exThreadPool_SOURCES              = exThreadPool.cpp
 | 
					 | 
				
			||||||
exThreadPool_CXXFLAGS             = $(COM_CXXFLAGS)
 | 
					 | 
				
			||||||
exThreadPool_LDFLAGS              = -L../lib/.libs -lLatAnalyze
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ACLOCAL_AMFLAGS = -I .buildutils/m4
 | 
					ACLOCAL_AMFLAGS = -I .buildutils/m4
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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,28 +0,0 @@
 | 
				
			|||||||
#include <LatAnalyze/Numerical/DWT.hpp>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
using namespace std;
 | 
					 | 
				
			||||||
using namespace Latan;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    DVec                  data, dataRec;
 | 
					 | 
				
			||||||
    vector<DWT::DWTLevel> dataDWT;
 | 
					 | 
				
			||||||
    DWT                   dwt(DWTFilters::db3);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cout << "-- random data" << endl;
 | 
					 | 
				
			||||||
    data.setRandom(16);
 | 
					 | 
				
			||||||
    cout << data.transpose() << endl;
 | 
					 | 
				
			||||||
    cout << "-- compute Daubechies 3 DWT" << endl;
 | 
					 | 
				
			||||||
    dataDWT = dwt.forward(data, 4);
 | 
					 | 
				
			||||||
    for (unsigned int l = 0; l < dataDWT.size(); ++l)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        cout << "* level " << l << endl;
 | 
					 | 
				
			||||||
        cout << "L= " << dataDWT[l].first.transpose() << endl;
 | 
					 | 
				
			||||||
        cout << "H= " << dataDWT[l].second.transpose() << endl;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    cout << "-- check inverse DWT" << endl;
 | 
					 | 
				
			||||||
    dataRec = dwt.backward(dataDWT);
 | 
					 | 
				
			||||||
    cout << "rel diff = " << 2.*(data - dataRec).norm()/(data + dataRec).norm() << endl;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return EXIT_SUCCESS;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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,29 +0,0 @@
 | 
				
			|||||||
#include <LatAnalyze/Core/ThreadPool.hpp>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
using namespace std;
 | 
					 | 
				
			||||||
using namespace Latan;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ThreadPool pool;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cout << "Using " << pool.getThreadNum() << " threads" << endl;
 | 
					 | 
				
			||||||
    for (unsigned int i = 1; i <= 20; ++i)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        pool.addJob([i, &pool](void)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            pool.critical([i](void)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                cout << "job " << i << " wait for " << i*100 << " ms" << endl;
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
            this_thread::sleep_for(chrono::milliseconds(i*100));
 | 
					 | 
				
			||||||
            pool.critical([i](void)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                cout << "job " << i << " done" << endl;
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    pool.terminate();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return EXIT_SUCCESS;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    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) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    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,117 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * ThreadPool.cpp, part of LatAnalyze 3
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2013 - 2021 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/Core/ThreadPool.hpp>
 | 
					 | 
				
			||||||
#include <LatAnalyze/includes.hpp>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
using namespace std;
 | 
					 | 
				
			||||||
using namespace Latan;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 *                         ThreadPool implementation                          *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
// constructors ////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
ThreadPool::ThreadPool(void)
 | 
					 | 
				
			||||||
: ThreadPool(std::thread::hardware_concurrency())
 | 
					 | 
				
			||||||
{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ThreadPool::ThreadPool(const unsigned int nThreads)
 | 
					 | 
				
			||||||
: nThreads_(nThreads)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    for (unsigned int t = 0; t < nThreads_; ++t)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        threads_.push_back(thread(&ThreadPool::workerLoop, this));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// destructor //////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
ThreadPool::~ThreadPool(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    terminate();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// get the number of threads ///////////////////////////////////////////////////
 | 
					 | 
				
			||||||
unsigned int ThreadPool::getThreadNum(void) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return nThreads_;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// get the pool mutex for synchronisation //////////////////////////////////////
 | 
					 | 
				
			||||||
std::mutex & ThreadPool::getMutex(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return mutex_;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// worker loop /////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
void ThreadPool::workerLoop(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    while (true)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        Job job;
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            unique_lock<mutex> lock(mutex_);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            condition_.wait(lock, [this](){
 | 
					 | 
				
			||||||
                return !queue_.empty() || terminatePool_;
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
            if (terminatePool_ and queue_.empty())
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            job = queue_.front();
 | 
					 | 
				
			||||||
            queue_.pop();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        job();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// add jobs ////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
void ThreadPool::addJob(Job newJob)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        unique_lock<mutex> lock(mutex_);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        queue_.push(newJob);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    condition_.notify_one();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// critical section ////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
void ThreadPool::critical(Job fn)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    unique_lock<mutex> lock(mutex_);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// wait for completion /////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
void ThreadPool::terminate(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        unique_lock<mutex> lock(mutex_);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        terminatePool_ = true;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    condition_.notify_all();
 | 
					 | 
				
			||||||
    for (auto &thread: threads_)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        thread.join();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    threads_.clear();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,56 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * ThreadPool.hpp, part of LatAnalyze 3
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Copyright (C) 2013 - 2021 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_ThreadPool_hpp_
 | 
					 | 
				
			||||||
#define Latan_ThreadPool_hpp_
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <LatAnalyze/Global.hpp>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class ThreadPool
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    typedef std::function<void(void)> Job;
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    // constructors/destructor
 | 
					 | 
				
			||||||
    ThreadPool(void);
 | 
					 | 
				
			||||||
    ThreadPool(const unsigned int nThreads);
 | 
					 | 
				
			||||||
    virtual ~ThreadPool(void);
 | 
					 | 
				
			||||||
    // get the number of threads
 | 
					 | 
				
			||||||
    unsigned int getThreadNum(void) const;
 | 
					 | 
				
			||||||
    // get the pool mutex for synchronisation
 | 
					 | 
				
			||||||
    std::mutex & getMutex(void);
 | 
					 | 
				
			||||||
    // add jobs
 | 
					 | 
				
			||||||
    void addJob(Job newJob);
 | 
					 | 
				
			||||||
    // critical section
 | 
					 | 
				
			||||||
    void critical(Job fn);
 | 
					 | 
				
			||||||
    // wait for completion and terminate
 | 
					 | 
				
			||||||
    void terminate(void);
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    // worker loop
 | 
					 | 
				
			||||||
    void workerLoop(void);
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    unsigned int             nThreads_;
 | 
					 | 
				
			||||||
    std::condition_variable  condition_;
 | 
					 | 
				
			||||||
    std::vector<std::thread> threads_;
 | 
					 | 
				
			||||||
    bool                     terminatePool_{false};
 | 
					 | 
				
			||||||
    std::queue<Job>          queue_;
 | 
					 | 
				
			||||||
    std::mutex               mutex_;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
@@ -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,267 +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 std::vector<Index> strTo<std::vector<Index>>(const std::string &str)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    std::vector<Index>  res;
 | 
					 | 
				
			||||||
    std::vector<double> vbuf;
 | 
					 | 
				
			||||||
    double              buf;
 | 
					 | 
				
			||||||
    std::istringstream  stream(str);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    while (!stream.eof())
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        stream >> buf;
 | 
					 | 
				
			||||||
        res.push_back(buf);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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,58 +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 <condition_variable>
 | 
					 | 
				
			||||||
#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 <thread>
 | 
					 | 
				
			||||||
#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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,8 +47,6 @@ public:
 | 
				
			|||||||
    // resampling
 | 
					    // resampling
 | 
				
			||||||
    Sample<T> bootstrapMean(const Index nSample, const SeedType seed);
 | 
					    Sample<T> bootstrapMean(const Index nSample, const SeedType seed);
 | 
				
			||||||
    Sample<T> bootstrapMean(const Index nSample);
 | 
					    Sample<T> bootstrapMean(const Index nSample);
 | 
				
			||||||
    void      dumpBootstrapSeq(std::ostream &out, const Index nSample,
 | 
					 | 
				
			||||||
                               const SeedType seed);
 | 
					 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    // mean from pointer vector for resampling
 | 
					    // mean from pointer vector for resampling
 | 
				
			||||||
    void ptVectorMean(T &m, const std::vector<const T *> &v);
 | 
					    void ptVectorMean(T &m, const std::vector<const T *> &v);
 | 
				
			||||||
@@ -116,23 +114,6 @@ Sample<T> Dataset<T>::bootstrapMean(const Index nSample)
 | 
				
			|||||||
    return bootstrapMean(nSample, rd());
 | 
					    return bootstrapMean(nSample, rd());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename T>
 | 
					 | 
				
			||||||
void Dataset<T>::dumpBootstrapSeq(std::ostream &out, const Index nSample,
 | 
					 | 
				
			||||||
                                  const SeedType seed)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    std::mt19937                         gen(seed);
 | 
					 | 
				
			||||||
    std::uniform_int_distribution<Index> dis(0, this->size() - 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (Index i = 0; i < nSample; ++i)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        for (unsigned int j = 0; j < this->size(); ++j)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            out << dis(gen) << " " << std::endl;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        out << std::endl;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
void Dataset<T>::ptVectorMean(T &m, const std::vector<const T *> &v)
 | 
					void Dataset<T>::ptVectorMean(T &m, const std::vector<const T *> &v)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -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 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * 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 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * 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,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/Numerical/GslQagsIntegrator.hpp>
 | 
					#include <LatAnalyze/GslQagsIntegrator.hpp>
 | 
				
			||||||
#include <LatAnalyze/includes.hpp>
 | 
					#include <LatAnalyze/includes.hpp>
 | 
				
			||||||
#include <LatAnalyze/Core/Math.hpp>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
using namespace Latan;
 | 
					using namespace Latan;
 | 
				
			||||||
@@ -56,26 +55,9 @@ double GslQagsIntegrator::operator()(const DoubleFunction &f, const double xMin,
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    gslF.function = fWrap;
 | 
					    gslF.function = fWrap;
 | 
				
			||||||
    gslF.params   = reinterpret_cast<void *>(&const_cast<DoubleFunction &>(f));
 | 
					    gslF.params   = reinterpret_cast<void *>(&const_cast<DoubleFunction &>(f));
 | 
				
			||||||
    if ((xMin > -Math::inf) and (xMax < Math::inf))
 | 
					    
 | 
				
			||||||
    {
 | 
					    gsl_integration_qags(&gslF, xMin, xMax, 0.0, precision_, limit_, workspace_,
 | 
				
			||||||
        gsl_integration_qags(&gslF, xMin, xMax, 0.0, precision_, limit_,
 | 
					                         &result, &error_);
 | 
				
			||||||
                             workspace_, &result, &error_);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else if (xMax < Math::inf)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        gsl_integration_qagil(&gslF, xMax, 0.0, precision_, limit_,
 | 
					 | 
				
			||||||
                              workspace_, &result, &error_);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else if (xMin > -Math::inf)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        gsl_integration_qagiu(&gslF, xMin, 0.0, precision_, limit_,
 | 
					 | 
				
			||||||
                              workspace_, &result, &error_);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        gsl_integration_qagi(&gslF, 0.0, precision_, limit_,
 | 
					 | 
				
			||||||
                             workspace_, &result, &error_);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -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>
 | 
				
			||||||
@@ -146,16 +146,6 @@ double Histogram::getX(const Index i) const
 | 
				
			|||||||
    return x_(i);
 | 
					    return x_(i);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
double Histogram::getXMin(void) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return xMin_;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
double Histogram::getXMax(void) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return xMax_;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
double Histogram::operator[](const Index i) const
 | 
					double Histogram::operator[](const Index i) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return bin_(i)*(isNormalized() ? norm_ : 1.);
 | 
					    return bin_(i)*(isNormalized() ? norm_ : 1.);
 | 
				
			||||||
@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,8 +52,6 @@ public:
 | 
				
			|||||||
    const StatArray<double> & getData(void) const;
 | 
					    const StatArray<double> & getData(void) const;
 | 
				
			||||||
    const StatArray<double> & getWeight(void) const;
 | 
					    const StatArray<double> & getWeight(void) const;
 | 
				
			||||||
    double                    getX(const Index i) const;
 | 
					    double                    getX(const Index i) const;
 | 
				
			||||||
    double                    getXMin(void) const;
 | 
					 | 
				
			||||||
    double                    getXMax(void) const;
 | 
					 | 
				
			||||||
    double                    operator[](const Index i) const;
 | 
					    double                    operator[](const Index i) const;
 | 
				
			||||||
    double                    operator()(const double x) const;
 | 
					    double                    operator()(const double x) const;
 | 
				
			||||||
    // percentiles & confidence interval
 | 
					    // percentiles & confidence interval
 | 
				
			||||||
@@ -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
 | 
				
			||||||
							
								
								
									
										189
									
								
								lib/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										189
									
								
								lib/Makefile.am
									
									
									
									
									
								
							@@ -7,15 +7,13 @@ 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
 | 
				
			||||||
@@ -23,127 +21,100 @@ else
 | 
				
			|||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libLatAnalyze_la_SOURCES = \
 | 
					libLatAnalyze_la_SOURCES = \
 | 
				
			||||||
    includes.hpp                     \
 | 
					    AsciiFile.cpp          \
 | 
				
			||||||
 | 
					    AsciiParser.ypp        \
 | 
				
			||||||
 | 
					    CompiledFunction.cpp   \
 | 
				
			||||||
 | 
					    CompiledModel.cpp      \
 | 
				
			||||||
 | 
					    Derivative.cpp         \
 | 
				
			||||||
 | 
					    Exceptions.cpp         \
 | 
				
			||||||
 | 
					    File.cpp               \
 | 
				
			||||||
 | 
					    FitInterface.cpp       \
 | 
				
			||||||
 | 
					    Function.cpp           \
 | 
				
			||||||
    Global.cpp             \
 | 
					    Global.cpp             \
 | 
				
			||||||
    Core/Exceptions.cpp              \
 | 
					    GslHybridRootFinder.cpp\
 | 
				
			||||||
    Core/Mat.cpp                     \
 | 
					    GslMinimizer.cpp       \
 | 
				
			||||||
    Core/Math.cpp                    \
 | 
					    GslQagsIntegrator.cpp  \
 | 
				
			||||||
    Core/MathInterpreter.cpp         \
 | 
					    Histogram.cpp          \
 | 
				
			||||||
    Core/MathParser.ypp              \
 | 
					    includes.hpp           \
 | 
				
			||||||
    Core/OptParser.cpp               \
 | 
					    Io.cpp                 \
 | 
				
			||||||
    Core/Plot.cpp                    \
 | 
					    Mat.cpp                \
 | 
				
			||||||
    Core/ThreadPool.cpp              \
 | 
					    Math.cpp               \
 | 
				
			||||||
    Core/Utilities.cpp               \
 | 
					    MathInterpreter.cpp    \
 | 
				
			||||||
    Functional/CompiledFunction.cpp  \
 | 
					    MathParser.ypp         \
 | 
				
			||||||
    Functional/CompiledModel.cpp     \
 | 
					    Minimizer.cpp          \
 | 
				
			||||||
    Functional/Function.cpp          \
 | 
					    Model.cpp              \
 | 
				
			||||||
    Functional/Model.cpp             \
 | 
					    Plot.cpp               \
 | 
				
			||||||
    Functional/TabFunction.cpp       \
 | 
					    RootFinder.cpp         \
 | 
				
			||||||
    Io/AsciiFile.cpp                 \
 | 
					    Solver.cpp             \
 | 
				
			||||||
    Io/AsciiParser.ypp               \
 | 
					    StatArray.cpp          \
 | 
				
			||||||
    Io/BinReader.cpp                 \
 | 
					    TabFunction.cpp        \
 | 
				
			||||||
    Io/File.cpp                      \
 | 
					    XYSampleData.cpp       \
 | 
				
			||||||
    Io/Hdf5File.cpp                  \
 | 
					    XYStatData.cpp         \
 | 
				
			||||||
    Io/Io.cpp                        \
 | 
					 | 
				
			||||||
    Io/XmlReader.cpp                 \
 | 
					 | 
				
			||||||
    Io/Xml/tinyxml2.cpp              \
 | 
					 | 
				
			||||||
    Numerical/Derivative.cpp         \
 | 
					 | 
				
			||||||
    Numerical/DWT.cpp                \
 | 
					 | 
				
			||||||
    Numerical/DWTFilters.cpp         \
 | 
					 | 
				
			||||||
    Numerical/GslFFT.cpp             \
 | 
					 | 
				
			||||||
    Numerical/GslHybridRootFinder.cpp\
 | 
					 | 
				
			||||||
    Numerical/GslMinimizer.cpp       \
 | 
					 | 
				
			||||||
    Numerical/GslQagsIntegrator.cpp  \
 | 
					 | 
				
			||||||
    Numerical/Minimizer.cpp          \
 | 
					 | 
				
			||||||
    Numerical/RootFinder.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 = \
 | 
				
			||||||
 | 
					    AsciiFile.hpp          \
 | 
				
			||||||
 | 
					    CompiledFunction.hpp   \
 | 
				
			||||||
 | 
					    CompiledModel.hpp      \
 | 
				
			||||||
 | 
					    Dataset.hpp            \
 | 
				
			||||||
 | 
					    Derivative.hpp         \
 | 
				
			||||||
 | 
					    Exceptions.hpp         \
 | 
				
			||||||
 | 
					    Function.hpp           \
 | 
				
			||||||
 | 
					    File.hpp               \
 | 
				
			||||||
 | 
					    FitInterface.hpp       \
 | 
				
			||||||
    Global.hpp             \
 | 
					    Global.hpp             \
 | 
				
			||||||
    Core/Eigen.hpp                   \
 | 
					    GslHybridRootFinder.hpp\
 | 
				
			||||||
    Core/EigenPlugin.hpp             \
 | 
					    GslMinimizer.hpp       \
 | 
				
			||||||
    Core/Exceptions.hpp              \
 | 
					    GslQagsIntegrator.hpp  \
 | 
				
			||||||
    Core/Mat.hpp                     \
 | 
					    Histogram.hpp          \
 | 
				
			||||||
    Core/Math.hpp                    \
 | 
					    Integrator.hpp         \
 | 
				
			||||||
    Core/MathInterpreter.hpp         \
 | 
					    Io.hpp                 \
 | 
				
			||||||
    Core/OptParser.hpp               \
 | 
					    IoObject.hpp           \
 | 
				
			||||||
    Core/ParserState.hpp             \
 | 
					    Mat.hpp                \
 | 
				
			||||||
    Core/Plot.hpp                    \
 | 
					    Math.hpp               \
 | 
				
			||||||
    Core/ThreadPool.hpp              \
 | 
					    MathInterpreter.hpp    \
 | 
				
			||||||
    Core/stdincludes.hpp             \
 | 
					    MatSample.hpp          \
 | 
				
			||||||
    Core/Utilities.hpp               \
 | 
					    Minimizer.hpp          \
 | 
				
			||||||
    Functional/CompiledFunction.hpp  \
 | 
					    Model.hpp              \
 | 
				
			||||||
    Functional/CompiledModel.hpp     \
 | 
					    ParserState.hpp        \
 | 
				
			||||||
    Functional/Function.hpp          \
 | 
					    Plot.hpp               \
 | 
				
			||||||
    Functional/Model.hpp             \
 | 
					    RootFinder.hpp         \
 | 
				
			||||||
    Functional/TabFunction.hpp       \
 | 
					    TabFunction.hpp        \
 | 
				
			||||||
    Io/AsciiFile.hpp                 \
 | 
					    Solver.hpp             \
 | 
				
			||||||
    Io/BinReader.hpp                 \
 | 
					    StatArray.hpp          \
 | 
				
			||||||
    Io/File.hpp                      \
 | 
					    XYSampleData.hpp       \
 | 
				
			||||||
    Io/Hdf5File.hpp                  \
 | 
					    XYStatData.hpp
 | 
				
			||||||
    Io/Io.hpp                        \
 | 
					if HAVE_HDF5
 | 
				
			||||||
    Io/IoObject.hpp                  \
 | 
					    libLatAnalyze_la_SOURCES += Hdf5File.cpp
 | 
				
			||||||
    Io/XmlReader.hpp                 \
 | 
					    libLatAnalyze_la_HEADERS += Hdf5File.hpp
 | 
				
			||||||
    Numerical/Derivative.hpp         \
 | 
					endif
 | 
				
			||||||
    Numerical/DWT.hpp                \
 | 
					 | 
				
			||||||
    Numerical/DWTFilters.hpp         \
 | 
					 | 
				
			||||||
    Numerical/FFT.hpp                \
 | 
					 | 
				
			||||||
    Numerical/GslFFT.hpp             \
 | 
					 | 
				
			||||||
    Numerical/GslHybridRootFinder.hpp\
 | 
					 | 
				
			||||||
    Numerical/GslMinimizer.hpp       \
 | 
					 | 
				
			||||||
    Numerical/GslQagsIntegrator.hpp  \
 | 
					 | 
				
			||||||
    Numerical/Integrator.hpp         \
 | 
					 | 
				
			||||||
    Numerical/Minimizer.hpp          \
 | 
					 | 
				
			||||||
    Numerical/RootFinder.hpp         \
 | 
					 | 
				
			||||||
    Numerical/Solver.hpp             \
 | 
					 | 
				
			||||||
    Physics/CorrelatorFitter.hpp     \
 | 
					 | 
				
			||||||
    Physics/EffectiveMass.hpp        \
 | 
					 | 
				
			||||||
    Statistics/Dataset.hpp           \
 | 
					 | 
				
			||||||
    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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -103,10 +103,6 @@ public:
 | 
				
			|||||||
                     const Index nCol);
 | 
					                     const Index nCol);
 | 
				
			||||||
    // resize all matrices
 | 
					    // resize all matrices
 | 
				
			||||||
    void resizeMat(const Index nRow, const Index nCol);
 | 
					    void resizeMat(const Index nRow, const Index nCol);
 | 
				
			||||||
    // covariance matrix
 | 
					 | 
				
			||||||
    Mat<T> covarianceMatrix(const MatSample<T> &sample) const;
 | 
					 | 
				
			||||||
    Mat<T> varianceMatrix(void) const;
 | 
					 | 
				
			||||||
    Mat<T> correlationMatrix(void) const;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// non-member operators
 | 
					// non-member operators
 | 
				
			||||||
@@ -232,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)
 | 
				
			||||||
@@ -245,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;
 | 
				
			||||||
@@ -383,78 +379,6 @@ void MatSample<T>::resizeMat(const Index nRow, const Index nCol)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// covariance matrix ///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
template <typename T>
 | 
					 | 
				
			||||||
Mat<T> MatSample<T>::covarianceMatrix(const MatSample<T> &sample) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (((*this)[central].cols() != 1) or (sample[central].cols() != 1))
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        LATAN_ERROR(Size, "samples have more than one column");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Index  n1 = (*this)[central].rows(), n2 = sample[central].rows();
 | 
					 | 
				
			||||||
    Index  nSample = this->size();
 | 
					 | 
				
			||||||
    Mat<T> tmp1(n1, nSample), tmp2(n2, nSample), res(n1, n2);
 | 
					 | 
				
			||||||
    Mat<T> s1(n1, 1), s2(n2, 1), one(nSample, 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    one.fill(1.);
 | 
					 | 
				
			||||||
    s1.fill(0.);
 | 
					 | 
				
			||||||
    s2.fill(0.);
 | 
					 | 
				
			||||||
    for (unsigned int s = 0; s < nSample; ++s)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        s1          += (*this)[s];
 | 
					 | 
				
			||||||
        tmp1.col(s)  = (*this)[s];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    tmp1 -= s1*one.transpose()/static_cast<double>(nSample);
 | 
					 | 
				
			||||||
    for (unsigned int s = 0; s < nSample; ++s)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        s2          += sample[s];
 | 
					 | 
				
			||||||
        tmp2.col(s)  = sample[s];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    tmp2 -= s2*one.transpose()/static_cast<double>(nSample);
 | 
					 | 
				
			||||||
    res   = tmp1*tmp2.transpose()/static_cast<double>(nSample - 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <typename T>
 | 
					 | 
				
			||||||
Mat<T> MatSample<T>::varianceMatrix(void) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if ((*this)[central].cols() != 1)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        LATAN_ERROR(Size, "samples have more than one column");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Index  n1 = (*this)[central].rows();
 | 
					 | 
				
			||||||
    Index  nSample = this->size();
 | 
					 | 
				
			||||||
    Mat<T> tmp1(n1, nSample), res(n1, n1);
 | 
					 | 
				
			||||||
    Mat<T> s1(n1, 1), one(nSample, 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    one.fill(1.);
 | 
					 | 
				
			||||||
    s1.fill(0.);
 | 
					 | 
				
			||||||
    for (unsigned int s = 0; s < nSample; ++s)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        s1          += (*this)[s];
 | 
					 | 
				
			||||||
        tmp1.col(s)  = (*this)[s];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    tmp1 -= s1*one.transpose()/static_cast<double>(nSample);
 | 
					 | 
				
			||||||
    res   = tmp1*tmp1.transpose()/static_cast<double>(nSample - 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <typename T>
 | 
					 | 
				
			||||||
Mat<T> MatSample<T>::correlationMatrix(void) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Mat<T> res = varianceMatrix();
 | 
					 | 
				
			||||||
    Mat<T> invDiag(res.rows(), 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    invDiag = res.diagonal();
 | 
					 | 
				
			||||||
    invDiag = invDiag.cwiseInverse().cwiseSqrt();
 | 
					 | 
				
			||||||
    res     = (invDiag*invDiag.transpose()).cwiseProduct(res);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
END_LATAN_NAMESPACE
 | 
					END_LATAN_NAMESPACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -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>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,8 +29,7 @@ using namespace Latan;
 | 
				
			|||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
DMat MATH_NAMESPACE::varToCorr(const DMat &var)
 | 
					DMat MATH_NAMESPACE::varToCorr(const DMat &var)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DMat res = var;
 | 
					    DMat res = var, invDiag = res.diagonal();
 | 
				
			||||||
    DVec invDiag = res.diagonal();
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    invDiag = invDiag.cwiseInverse().cwiseSqrt();
 | 
					    invDiag = invDiag.cwiseInverse().cwiseSqrt();
 | 
				
			||||||
    res     = (invDiag*invDiag.transpose()).cwiseProduct(res);
 | 
					    res     = (invDiag*invDiag.transpose()).cwiseProduct(res);
 | 
				
			||||||
@@ -38,28 +37,6 @@ DMat MATH_NAMESPACE::varToCorr(const DMat &var)
 | 
				
			|||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DMat MATH_NAMESPACE::corrToVar(const DMat &corr, const DVec &varDiag)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    DMat res = corr;
 | 
					 | 
				
			||||||
    DVec varSqrtDiag = varDiag.cwiseSqrt();
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    res = (varSqrtDiag*varSqrtDiag.transpose()).cwiseProduct(res);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return res;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
double MATH_NAMESPACE::svdDynamicRange(const DMat &mat)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    DVec s = mat.singularValues();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return s.maxCoeff()/s.minCoeff();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
double MATH_NAMESPACE::svdDynamicRangeDb(const DMat &mat)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 10.*log10(svdDynamicRange(mat));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/******************************************************************************
 | 
					/******************************************************************************
 | 
				
			||||||
 *                             Standard C functions                           *
 | 
					 *                             Standard C functions                           *
 | 
				
			||||||
 ******************************************************************************/
 | 
					 ******************************************************************************/
 | 
				
			||||||
@@ -130,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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -70,17 +70,10 @@ namespace MATH_NAMESPACE
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    // convert variance matrix to correlation matrix
 | 
					    // convert variance matrix to correlation matrix
 | 
				
			||||||
    DMat varToCorr(const DMat &var);
 | 
					    DMat varToCorr(const DMat &var);
 | 
				
			||||||
    DMat corrToVar(const DMat &corr, const DVec &varDiag);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // matrix SVD dynamic range
 | 
					 | 
				
			||||||
    double svdDynamicRange(const DMat &mat);
 | 
					 | 
				
			||||||
    double svdDynamicRangeDb(const DMat &mat);
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // Constants
 | 
					    // Constants
 | 
				
			||||||
    constexpr double pi  = 3.1415926535897932384626433832795028841970;
 | 
					    const double pi = 3.1415926535897932384626433832795028841970;
 | 
				
			||||||
    constexpr double e   = 2.7182818284590452353602874713526624977572;
 | 
					    const double e  = 2.7182818284590452353602874713526624977572;
 | 
				
			||||||
    constexpr double inf = std::numeric_limits<double>::infinity();
 | 
					 | 
				
			||||||
    constexpr double nan = std::numeric_limits<double>::quiet_NaN();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -158,7 +151,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;
 | 
				
			||||||
@@ -690,7 +690,7 @@ void MathInterpreter::compile(RunContext &context)
 | 
				
			|||||||
        if (root_)
 | 
					        if (root_)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            context.addVariable("pi", Math::pi);
 | 
					            context.addVariable("pi", Math::pi);
 | 
				
			||||||
            context.addVariable("inf", Math::inf);
 | 
					            context.addVariable("inf", HUGE_VAL);
 | 
				
			||||||
            ADD_STDMATH_FUNCS(context);
 | 
					            ADD_STDMATH_FUNCS(context);
 | 
				
			||||||
            root_->compile(program_, context);
 | 
					            root_->compile(program_, context);
 | 
				
			||||||
            for (unsigned int i = 0; i < program_.size(); ++i)
 | 
					            for (unsigned int i = 0; i < program_.size(); ++i)
 | 
				
			||||||
@@ -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,22 +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/Numerical/MinuitMinimizer.hpp>
 | 
					#include <LatAnalyze/MinuitMinimizer.hpp>
 | 
				
			||||||
#include <LatAnalyze/includes.hpp>
 | 
					#include <LatAnalyze/includes.hpp>
 | 
				
			||||||
 | 
					 | 
				
			||||||
// forward declaration necessary in the ROOT-based version of Minuit2
 | 
					 | 
				
			||||||
namespace ROOT
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    namespace Fit
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        class ParameterSettings;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// macros necessary in the ROOT-based version of Minuit2
 | 
					 | 
				
			||||||
#define ROOT_Math_VecTypes
 | 
					 | 
				
			||||||
#define MATHCORE_STANDALONE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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;
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user