mirror of
				https://github.com/aportelli/LatAnalyze.git
				synced 2025-10-31 06:44:32 +00:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			3.5.1
			...
			feature/fi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| de509714b4 | |||
| 0ade8a8cbf | |||
| 80b826040b | |||
| 9e8021d7d7 | 
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -31,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 | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								Readme.md
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								Readme.md
									
									
									
									
									
								
							| @@ -1,4 +1,5 @@ | |||||||
| # LatAnalyze  | # LatAnalyze  | ||||||
|  | Contributors: Antonin Portelli, Matt Spraggs | ||||||
|  |  | ||||||
| License: GNU General Public License v3 | License: GNU General Public License v3 | ||||||
|  |  | ||||||
| @@ -40,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,15 +1,16 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| if (( $# != 1 )); then | if (( $# != 1 )); then | ||||||
|   echo "usage: `basename $0` <prefix>" 1>&2 |   echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| PREFIX=$1 | PREFIX=$1 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| mkdir -p local/build | mkdir -p local/build | ||||||
| for d in gsl nlopt minuit hdf5; do | for d in nlopt minuit hdf5; do | ||||||
|   if [ ! -e local/.built.${d} ]; then |   if [ ! -e local/.built.${d} ]; then | ||||||
|     ./install-${d}.sh ${PREFIX} |     ./install-${d}.sh ${PREFIX} | ||||||
|   fi |   fi | ||||||
| done | done | ||||||
|  | ./install-latcore.sh ${PREFIX} | ||||||
|   | |||||||
| @@ -1,26 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
|  |  | ||||||
| NAME='gsl-2.6' |  | ||||||
|  |  | ||||||
| if (( $# != 1 )); then |  | ||||||
|   echo "usage: `basename $0` <prefix>" 1>&2 |  | ||||||
|   exit 1 |  | ||||||
| fi |  | ||||||
| PREFIX=$1 |  | ||||||
|  |  | ||||||
| set -ex |  | ||||||
| INITDIR=$(pwd -P) |  | ||||||
| mkdir -p ${PREFIX} |  | ||||||
| cd ${PREFIX} |  | ||||||
| PREFIX=$(pwd -P) |  | ||||||
| cd ${INITDIR}/local/build |  | ||||||
| wget http://ftpmirror.gnu.org/gsl/${NAME}.tar.gz |  | ||||||
| tar -xzvf ${NAME}.tar.gz |  | ||||||
| mkdir -p ${NAME}/build |  | ||||||
| cd ${NAME}/build |  | ||||||
| ../configure --prefix=${PREFIX} |  | ||||||
| make -j4  |  | ||||||
| make install |  | ||||||
| cd ${INITDIR}/local |  | ||||||
| touch .built.gsl |  | ||||||
| cd ${INITDIR} |  | ||||||
| @@ -1,20 +1,17 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| NAME='hdf5-1.10.5' | NAME='hdf5-1.8.16' | ||||||
|  |  | ||||||
| if (( $# != 1 )); then | if (( $# != 1 )); then | ||||||
|   echo "usage: `basename $0` <prefix>" 1>&2 |   echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| PREFIX=$1 | PREFIX=$1 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| INITDIR=$(pwd -P) | INITDIR=`pwd` | ||||||
| mkdir -p ${PREFIX} | cd local/build | ||||||
| cd ${PREFIX} | wget http://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 | ||||||
|   | |||||||
| @@ -1,22 +1,19 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| if (( $# != 1 )); then | if (( $# != 2 )); then | ||||||
|   echo "usage: `basename $0` <prefix>" 1>&2 |   echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| PREFIX=$1 | PREFIX=$1 | ||||||
|  | OS=$2 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| INITDIR=$(pwd -P) |  | ||||||
| mkdir -p ${PREFIX} |  | ||||||
| cd ${PREFIX} |  | ||||||
| PREFIX=$(pwd -P) |  | ||||||
| cd ${INITDIR} |  | ||||||
| ./install-deps.sh ${PREFIX} | ./install-deps.sh ${PREFIX} | ||||||
| cd .. | cd .. | ||||||
| ./bootstrap.sh | ./bootstrap.sh | ||||||
| mkdir -p build | mkdir -p build | ||||||
| cd build | cd build | ||||||
| ../configure --prefix=${PREFIX} --with-minuit=${PREFIX} --with-nlopt=${PREFIX} --with-hdf5=${PREFIX} --with-gsl=${PREFIX} CXXFLAGS="${CXXFLAGS} -O3 -march=haswell -mtune=haswell" | if [[ "$OS" == "osx" ]]; then EXTRA_FLAGS='--with-gsl=/usr/local'; fi | ||||||
|  | ../configure --prefix=$PREFIX --with-minuit=$PREFIX --with-nlopt=$PREFIX --with-latcore=$PREFIX --with-hdf5=$PREFIX $EXTRA_FLAGS CXXFLAGS='-O3 -march=native -mtune=native' | ||||||
| make -j4 | make -j4 | ||||||
| make install | make install | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								ci-scripts/install-latcore.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								ci-scripts/install-latcore.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | if (( $# != 1 )); then | ||||||
|  |   echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2 | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | PREFIX=$1 | ||||||
|  |  | ||||||
|  | set -ex | ||||||
|  | INITDIR=`pwd` | ||||||
|  | cd local/build | ||||||
|  | if [ -d LatCore ]; then | ||||||
|  |   cd LatCore | ||||||
|  |   git pull origin master | ||||||
|  | else   | ||||||
|  |   git clone https://github.com/aportelli/LatCore.git | ||||||
|  |   mkdir LatCore/build | ||||||
|  |   cd LatCore | ||||||
|  |   ./bootstrap.sh | ||||||
|  | fi | ||||||
|  | cd build | ||||||
|  | ../configure --prefix=${PREFIX} | ||||||
|  | make -j4  | ||||||
|  | make install | ||||||
|  | cd ${INITDIR} | ||||||
| @@ -3,17 +3,14 @@ | |||||||
| NAME='Minuit2-5.34.14' | NAME='Minuit2-5.34.14' | ||||||
|  |  | ||||||
| if (( $# != 1 )); then | if (( $# != 1 )); then | ||||||
|   echo "usage: `basename $0` <prefix>" 1>&2 |   echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| PREFIX=$1 | PREFIX=$1 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| INITDIR=$(pwd -P) | INITDIR=`pwd` | ||||||
| mkdir -p ${PREFIX} | cd local/build | ||||||
| cd ${PREFIX} |  | ||||||
| PREFIX=$(pwd -P) |  | ||||||
| cd ${INITDIR}/local/build |  | ||||||
| wget http://www.cern.ch/mathlibs/sw/5_34_14/Minuit2/${NAME}.tar.gz | wget http://www.cern.ch/mathlibs/sw/5_34_14/Minuit2/${NAME}.tar.gz | ||||||
| tar -xzvf ${NAME}.tar.gz | tar -xzvf ${NAME}.tar.gz | ||||||
| mkdir -p ${NAME}/build | mkdir -p ${NAME}/build | ||||||
|   | |||||||
| @@ -1,25 +1,21 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| NAME='2.6.1' | NAME='nlopt-2.4.2' | ||||||
|  |  | ||||||
| if (( $# != 1 )); then | if (( $# != 1 )); then | ||||||
|   echo "usage: `basename $0` <prefix>" 1>&2 |   echo "usage: `basename $0` <prefix> {osx|linux}" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| PREFIX=$1 | PREFIX=$1 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| INITDIR=$(pwd -P) | INITDIR=`pwd` | ||||||
| mkdir -p ${PREFIX} | cd local/build | ||||||
| cd ${PREFIX} | wget http://ab-initio.mit.edu/nlopt/${NAME}.tar.gz | ||||||
| PREFIX=$(pwd -P) | tar -xzvf ${NAME}.tar.gz | ||||||
| cd ${INITDIR}/local/build |  | ||||||
| wget https://github.com/stevengj/nlopt/archive/v${NAME}.tar.gz |  | ||||||
| tar -xzvf v${NAME}.tar.gz |  | ||||||
| NAME=nlopt-${NAME} |  | ||||||
| mkdir -p ${NAME}/build | mkdir -p ${NAME}/build | ||||||
| cd ${NAME}/build | cd ${NAME}/build | ||||||
| cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=TRUE -DCMAKE_INSTALL_NAME_DIR="${PREFIX}/lib" .. | ../configure --prefix=${PREFIX} --with-cxx --without-guile --without-python --without-octave --without-matlab --with-pic | ||||||
| make -j4  | make -j4  | ||||||
| make install | make install | ||||||
| cd ${INITDIR}/local | cd ${INITDIR}/local | ||||||
|   | |||||||
							
								
								
									
										71
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -2,13 +2,13 @@ | |||||||
|  |  | ||||||
| # Initialization | # Initialization | ||||||
| AC_PREREQ([2.63]) | AC_PREREQ([2.63]) | ||||||
| AC_INIT([LatAnalyze],[3.5.1],[antonin.portelli@me.com],[LatAnalyze]) | AC_INIT([LatAnalyze],[3.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], | ||||||
| @@ -48,6 +48,14 @@ AC_ARG_WITH([hdf5], | |||||||
|     [try this for a non-standard install prefix of the HDF5 library])], |     [try this for a non-standard install prefix of the HDF5 library])], | ||||||
|     [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_hdf5/include"] |     [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_hdf5/include"] | ||||||
|     [AM_LDFLAGS="$AM_LDFLAGS -L$with_hdf5/lib"]) |     [AM_LDFLAGS="$AM_LDFLAGS -L$with_hdf5/lib"]) | ||||||
|  | AC_ARG_WITH([latcore], | ||||||
|  |     [AS_HELP_STRING([--with-latcore=prefix], | ||||||
|  |     [use this option for a non-standard install prefix of the LatCore library])], | ||||||
|  |     [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_latcore/include"] | ||||||
|  |     [AM_LDFLAGS="$AM_LDFLAGS -L$with_latcore/lib"]) | ||||||
|  | CFLAGS="$AM_CFLAGS $CFLAGS" | ||||||
|  | CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" | ||||||
|  | LDFLAGS="$AM_LDFLAGS $LDFLAGS" | ||||||
|  |  | ||||||
| # Get compilers informations | # Get compilers informations | ||||||
| AX_COMPILER_VENDOR | AX_COMPILER_VENDOR | ||||||
| @@ -70,24 +78,24 @@ AC_DEFINE_UNQUOTED([GXX_VERSION],["$GXX_VERSION"], | |||||||
| 			[version of g++ that will compile the code]) | 			[version of g++ that will compile the code]) | ||||||
|  |  | ||||||
| # Checks for libraries. | # Checks for libraries. | ||||||
| CXXFLAGS_CPY=$CXXFLAGS |  | ||||||
| LDFLAGS_CPY=$LDFLAGS |  | ||||||
| CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" |  | ||||||
| LDFLAGS="$AM_LDFLAGS $LDFLAGS" |  | ||||||
| AC_CHECK_LIB([m],[cos],[],[AC_MSG_ERROR([libm library not found])]) | AC_CHECK_LIB([m],[cos],[],[AC_MSG_ERROR([libm library not found])]) | ||||||
| AC_CHECK_LIB([gslcblas],[cblas_dgemm],[], | AC_CHECK_LIB([gslcblas],[cblas_dgemm],[], | ||||||
|              [AC_MSG_ERROR([GSL CBLAS library not found])]) |              [AC_MSG_ERROR([GSL CBLAS library not found])]) | ||||||
| AC_CHECK_LIB([gsl],[gsl_blas_dgemm],[],[AC_MSG_ERROR([GSL library not found])]) | AC_CHECK_LIB([gsl],[gsl_blas_dgemm],[],[AC_MSG_ERROR([GSL library not found])]) | ||||||
| AC_CHECK_LIB([nlopt],[nlopt_create], | AC_CHECK_LIB([nlopt_cxx],[nlopt_create], | ||||||
|     [AC_DEFINE([HAVE_NLOPT], |     [AC_DEFINE([HAVE_NLOPT], | ||||||
|     [1], |     [1], | ||||||
|     [Define to 1 if you have the `NLopt' library (-lnlopt).])] |     [Define to 1 if you have the `NLopt' library (-lnlopt_cxx).])] | ||||||
|     [have_nlopt=true] |     [have_nlopt=true] | ||||||
|     [LIBS="$LIBS -lnlopt"],[]) |     [LIBS="$LIBS -lnlopt_cxx"],[]) | ||||||
| AM_CONDITIONAL([HAVE_NLOPT], [test x$have_nlopt = xtrue]) | AM_CONDITIONAL([HAVE_NLOPT], [test x$have_nlopt = xtrue]) | ||||||
| AC_CHECK_LIB([hdf5_cpp],[H5Fopen], | AC_CHECK_LIB([hdf5_cpp],[H5Fopen], | ||||||
|     [LIBS="$LIBS -lhdf5_cpp -lhdf5"], |     [AC_DEFINE([HAVE_HDF5], | ||||||
|     [AC_MSG_ERROR([HDF5 library not found])], [-lhdf5]) |     [1], | ||||||
|  |     [Define to 1 if you have the `HDF5' library (-lhdf5_cpp).])] | ||||||
|  |     [have_hdf5=true] | ||||||
|  |     [LIBS="$LIBS -lhdf5_cpp -lhdf5"],[],[-lhdf5]) | ||||||
|  | AM_CONDITIONAL([HAVE_HDF5], [test x$have_hdf5 = xtrue]) | ||||||
| SAVED_LDFLAGS=$LDFLAGS | SAVED_LDFLAGS=$LDFLAGS | ||||||
| LDFLAGS="$LDFLAGS -lMinuit2" | LDFLAGS="$LDFLAGS -lMinuit2" | ||||||
| AC_MSG_CHECKING([for ROOT::Minuit2::BasicMinimumError in -lMinuit2]); | AC_MSG_CHECKING([for ROOT::Minuit2::BasicMinimumError in -lMinuit2]); | ||||||
| @@ -104,44 +112,35 @@ AC_LINK_IFELSE( | |||||||
|     [AC_MSG_RESULT([no])]) |     [AC_MSG_RESULT([no])]) | ||||||
| AM_CONDITIONAL([HAVE_MINUIT], [test x$have_minuit = xtrue]) | AM_CONDITIONAL([HAVE_MINUIT], [test x$have_minuit = xtrue]) | ||||||
| LDFLAGS=$SAVED_LDFLAGS | LDFLAGS=$SAVED_LDFLAGS | ||||||
| CXXFLAGS=$CXXFLAGS_CPY | SAVED_LDFLAGS=$LDFLAGS | ||||||
| LDFLAGS=$LDFLAGS_CPY | LDFLAGS="$LDFLAGS -lLatCore" | ||||||
|  | AC_MSG_CHECKING([for LatCore::XmlReader in -lLatCore]); | ||||||
|  | AC_LINK_IFELSE( | ||||||
|  | 	[AC_LANG_PROGRAM([#include <LatCore/XmlReader.hpp>], | ||||||
|  |     [LatCore::XmlReader dummy()])], | ||||||
|  | 	[LIBS="$LIBS -lLatCore"] | ||||||
|  | 	[AC_MSG_RESULT([yes])], | ||||||
|  |     [AC_MSG_RESULT([no])] | ||||||
|  |     [AC_MSG_ERROR([LatCore library not found])]) | ||||||
|  | LDFLAGS=$SAVED_LDFLAGS | ||||||
|  |  | ||||||
| # Checks for header files. | # Checks for header files. | ||||||
| AC_HEADER_STDC | AC_HEADER_STDC | ||||||
|  |  | ||||||
| cwd=`pwd -P`; cd ${srcdir}; abs_srcdir=`pwd -P`; cd ${cwd} |  | ||||||
| LATAN_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" |  | ||||||
| LATAN_LDFLAGS="$AM_LDFLAGS $LDFLAGS" |  | ||||||
| LATAN_LIBS=$LIBS |  | ||||||
| LATAN_SHORT_SHA=`git rev-parse --short HEAD` |  | ||||||
| LATAN_SHA=`git rev-parse HEAD` |  | ||||||
| LATAN_BRANCH=`git rev-parse --abbrev-ref HEAD` |  | ||||||
| AM_CXXFLAGS="-I${abs_srcdir}/lib $AM_CXXFLAGS" |  | ||||||
| AM_CFLAGS="-I${abs_srcdir}/lib $AM_CFLAGS" |  | ||||||
| CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" |  | ||||||
| LDFLAGS="$AM_LDFLAGS $LDFLAGS" |  | ||||||
| AC_SUBST([LIBS]) | AC_SUBST([LIBS]) | ||||||
| AC_SUBST([AM_CXXFLAGS]) | AC_SUBST([AM_CFLAGS]) | ||||||
| AC_SUBST([AM_LDFLAGS]) | AC_SUBST([AM_LDFLAGS]) | ||||||
| AC_SUBST([LATAN_CXXFLAGS]) |  | ||||||
| AC_SUBST([LATAN_LDFLAGS]) |  | ||||||
| AC_SUBST([LATAN_LIBS]) |  | ||||||
| AC_SUBST([LATAN_SHA]) |  | ||||||
| AC_SUBST([LATAN_BRANCH]) |  | ||||||
|  |  | ||||||
| AC_CONFIG_FILES([latan-config], [chmod +x latan-config]) | AC_CONFIG_FILES([Makefile lib/Makefile utils/Makefile physics/Makefile  | ||||||
| AC_CONFIG_FILES([Makefile]) |                  examples/Makefile]) | ||||||
| AC_CONFIG_FILES([lib/Makefile]) |  | ||||||
| AC_CONFIG_FILES([utils/Makefile]) |  | ||||||
| AC_CONFIG_FILES([physics/Makefile]) |  | ||||||
| AC_CONFIG_FILES([examples/Makefile]) |  | ||||||
| AC_OUTPUT | AC_OUTPUT | ||||||
|  |  | ||||||
| echo "*********************************************" | echo "*********************************************" | ||||||
| echo "* ${PACKAGE_NAME} v${VERSION}" build options | echo "* ${PACKAGE_NAME} v${VERSION}" build options | ||||||
| echo "*********************************************" | echo "*********************************************" | ||||||
| echo "* C++ compiler     : $CXX" | echo "* C++ compiler     : $CXX" | ||||||
|  | echo "* HDF5 support     : `test x$HAVE_HDF5_TRUE = 'x'   && echo yes \ | ||||||
|  |                                                           || echo no`" | ||||||
| echo "* Minuit minimizers: `test x$HAVE_MINUIT_TRUE = 'x' && echo yes \ | echo "* Minuit minimizers: `test x$HAVE_MINUIT_TRUE = 'x' && echo yes \ | ||||||
|                                                           || echo no`" |                                                           || echo no`" | ||||||
| echo "* NLopt minimizers : `test x$HAVE_NLOPT_TRUE = 'x'  && echo yes \ | echo "* NLopt minimizers : `test x$HAVE_NLOPT_TRUE = 'x'  && echo yes \ | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -17,7 +17,6 @@ noinst_PROGRAMS =           \ | |||||||
|     exMathInterpreter       \ |     exMathInterpreter       \ | ||||||
|     exMin                   \ |     exMin                   \ | ||||||
|     exPlot                  \ |     exPlot                  \ | ||||||
|     exPValue                \ |  | ||||||
|     exRand                  \ |     exRand                  \ | ||||||
|     exRootFinder |     exRootFinder | ||||||
|  |  | ||||||
| @@ -61,10 +60,6 @@ exPlot_SOURCES                    = exPlot.cpp | |||||||
| exPlot_CXXFLAGS                   = $(COM_CXXFLAGS) | exPlot_CXXFLAGS                   = $(COM_CXXFLAGS) | ||||||
| exPlot_LDFLAGS                    = -L../lib/.libs -lLatAnalyze | exPlot_LDFLAGS                    = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
| exPValue_SOURCES                  = exPValue.cpp |  | ||||||
| exPValue_CXXFLAGS                 = $(COM_CXXFLAGS) |  | ||||||
| exPValue_LDFLAGS                  = -L../lib/.libs -lLatAnalyze |  | ||||||
|  |  | ||||||
| exRand_SOURCES                    = exRand.cpp | exRand_SOURCES                    = exRand.cpp | ||||||
| exRand_CXXFLAGS                   = $(COM_CXXFLAGS) | exRand_CXXFLAGS                   = $(COM_CXXFLAGS) | ||||||
| exRand_LDFLAGS                    = -L../lib/.libs -lLatAnalyze | exRand_LDFLAGS                    = -L../lib/.libs -lLatAnalyze | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #include <LatAnalyze/Functional/CompiledFunction.hpp> | #include <LatAnalyze/CompiledFunction.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| #include <LatAnalyze/Numerical/Derivative.hpp> | #include <LatAnalyze/Derivative.hpp> | ||||||
| #include <LatAnalyze/Functional/CompiledFunction.hpp> | #include <LatAnalyze/CompiledFunction.hpp> | ||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Math.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <cmath> | #include <cmath> | ||||||
| #include <LatAnalyze/Functional/CompiledModel.hpp> | #include <LatAnalyze/CompiledModel.hpp> | ||||||
| #include <LatAnalyze/Io/Io.hpp> | #include <LatAnalyze/Io.hpp> | ||||||
| #include <LatAnalyze/Numerical/GslMinimizer.hpp> | #include <LatAnalyze/GslMinimizer.hpp> | ||||||
| #include <LatAnalyze/Core/Plot.hpp> | #include <LatAnalyze/Plot.hpp> | ||||||
| #include <LatAnalyze/Statistics/XYStatData.hpp> | #include <LatAnalyze/XYStatData.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| #include <LatAnalyze/Functional/CompiledModel.hpp> | #include <LatAnalyze/CompiledModel.hpp> | ||||||
| #include <LatAnalyze/Numerical/GslMinimizer.hpp> | #include <LatAnalyze/GslMinimizer.hpp> | ||||||
| #include <LatAnalyze/Core/Plot.hpp> | #include <LatAnalyze/Plot.hpp> | ||||||
| #include <LatAnalyze/Statistics/XYSampleData.hpp> | #include <LatAnalyze/XYSampleData.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #include <LatAnalyze/Functional/CompiledFunction.hpp> | #include <LatAnalyze/CompiledFunction.hpp> | ||||||
| #include <LatAnalyze/Numerical/GslQagsIntegrator.hpp> | #include <LatAnalyze/GslQagsIntegrator.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #include <LatAnalyze/Functional/TabFunction.hpp> | #include <LatAnalyze/TabFunction.hpp> | ||||||
|  |  | ||||||
| int main(void) | int main(void) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| #include <LatAnalyze/Io/Io.hpp> | #include <LatAnalyze/Io.hpp> | ||||||
| #include <LatAnalyze/Core/Mat.hpp> | #include <LatAnalyze/Mat.hpp> | ||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Math.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Math.hpp> | ||||||
| #include <LatAnalyze/Core/MathInterpreter.hpp> | #include <LatAnalyze/MathInterpreter.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #include <LatAnalyze/Functional/CompiledFunction.hpp> | #include <LatAnalyze/CompiledFunction.hpp> | ||||||
| #include <LatAnalyze/Numerical/GslMinimizer.hpp> | #include <LatAnalyze/GslMinimizer.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,23 +0,0 @@ | |||||||
| #include <LatAnalyze/Core/Math.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| int main(int argc, char* argv[]) |  | ||||||
| { |  | ||||||
|     double chi2, ndof; |  | ||||||
|  |  | ||||||
|     if (argc != 3) |  | ||||||
|     { |  | ||||||
|         cerr << "usage: " << argv[0] << " <chi^2> <ndof>" << endl; |  | ||||||
|          |  | ||||||
|         return EXIT_FAILURE; |  | ||||||
|     } |  | ||||||
|     chi2 = strTo<double>(argv[1]); |  | ||||||
|     ndof = strTo<double>(argv[2]); |  | ||||||
|  |  | ||||||
|     cout << "Two-sided p-value: " << Math::chi2PValue(chi2, ndof) << endl; |  | ||||||
|     cout << "chi^2 CCDF       : " << Math::chi2Ccdf(chi2, ndof) << endl; |  | ||||||
|  |  | ||||||
|     return EXIT_SUCCESS; |  | ||||||
| } |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| #include <LatAnalyze/Functional/CompiledFunction.hpp> | #include <LatAnalyze/CompiledFunction.hpp> | ||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Math.hpp> | ||||||
| #include <LatAnalyze/Core/Plot.hpp> | #include <LatAnalyze/Plot.hpp> | ||||||
| #include <LatAnalyze/Functional/TabFunction.hpp> | #include <LatAnalyze/TabFunction.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|   | |||||||
| @@ -1,15 +1,11 @@ | |||||||
| #include <LatAnalyze/Io/Io.hpp> | #include <LatAnalyze/Io.hpp> | ||||||
| #include <LatAnalyze/Functional/CompiledFunction.hpp> | #include <LatAnalyze/CompiledFunction.hpp> | ||||||
| #include <LatAnalyze/Core/Plot.hpp> | #include <LatAnalyze/Plot.hpp> | ||||||
| #include <LatAnalyze/Statistics/Random.hpp> |  | ||||||
| #include <LatAnalyze/Statistics/MatSample.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|  |  | ||||||
| constexpr Index  size          = 8; |  | ||||||
| constexpr Index  nDraw         = 20000; | constexpr Index  nDraw         = 20000; | ||||||
| constexpr Index  nSample       = 2000; |  | ||||||
| const     string stateFileName = "exRand.seed"; | const     string stateFileName = "exRand.seed"; | ||||||
|  |  | ||||||
| int main(void) | int main(void) | ||||||
| @@ -40,24 +36,5 @@ int main(void) | |||||||
|     p << PlotFunction(compile("return exp(-x_0^2/2)/sqrt(2*pi);", 1), -5., 5.); |     p << PlotFunction(compile("return exp(-x_0^2/2)/sqrt(2*pi);", 1), -5., 5.); | ||||||
|     p.display(); |     p.display(); | ||||||
|  |  | ||||||
|     DMat       var(size, size); |  | ||||||
|     DVec       mean(size); |  | ||||||
|     DMatSample sample(nSample, size, 1); |  | ||||||
|  |  | ||||||
|     cout << "-- generating " << nSample << " Gaussian random vectors..." << endl; |  | ||||||
|     var   = DMat::Random(size, size); |  | ||||||
|     var  *= var.adjoint(); |  | ||||||
|     mean  = DVec::Random(size);  |  | ||||||
|     RandomNormal mgauss(mean, var, rd()); |  | ||||||
|     sample[central] = mgauss(); |  | ||||||
|     FOR_STAT_ARRAY(sample, s) |  | ||||||
|     { |  | ||||||
|         sample[s] = mgauss(); |  | ||||||
|     } |  | ||||||
|     cout << "* original variance matrix:\n" << var << endl; |  | ||||||
|     cout << "* measured variance matrix:\n" << sample.varianceMatrix() << endl; |  | ||||||
|     cout << "* original mean:\n" << mean << endl; |  | ||||||
|     cout << "* measured mean:\n" << sample.mean() << endl; |  | ||||||
|  |  | ||||||
|     return EXIT_SUCCESS; |     return EXIT_SUCCESS; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| #include <LatAnalyze/Functional/Function.hpp> | #include <LatAnalyze/Function.hpp> | ||||||
| #include <LatAnalyze/Numerical/GslHybridRootFinder.hpp> | #include <LatAnalyze/GslHybridRootFinder.hpp> | ||||||
|  |  | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
| @@ -7,8 +7,8 @@ using namespace Latan; | |||||||
| int main(void) | int main(void) | ||||||
| { | { | ||||||
|     constexpr double a = 1., b = 10.; |     constexpr double a = 1., b = 10.; | ||||||
|     DoubleFunction f1([](const double *x){return a*(1.-x[0]);}, 2); |     DoubleFunction f1([a](const double *x){return a*(1.-x[0]);}, 2); | ||||||
|     DoubleFunction f2([](const double *x){return b*(x[1]-x[0]*x[0]);}, 2); |     DoubleFunction f2([b](const double *x){return b*(x[1]-x[0]*x[0]);}, 2); | ||||||
|     vector<DoubleFunction *> system = {&f1, &f2}; |     vector<DoubleFunction *> system = {&f1, &f2}; | ||||||
|     GslHybridRootFinder solve; |     GslHybridRootFinder solve; | ||||||
|     DVec init(2), x; |     DVec init(2), x; | ||||||
|   | |||||||
| @@ -1,79 +0,0 @@ | |||||||
| #! /bin/sh |  | ||||||
|  |  | ||||||
| prefix=@prefix@ |  | ||||||
| exec_prefix=@exec_prefix@ |  | ||||||
| includedir=@includedir@ |  | ||||||
|  |  | ||||||
| usage() |  | ||||||
| { |  | ||||||
|   cat <<EOF |  | ||||||
| Usage: latan-config [OPTION] |  | ||||||
|  |  | ||||||
| Known values for OPTION are: |  | ||||||
|  |  | ||||||
|   --prefix     show LatAnalyze installation prefix |  | ||||||
|   --cxxflags   print pre-processor and compiler flags |  | ||||||
|   --ldflags    print library linking flags |  | ||||||
|   --libs       print library linking information |  | ||||||
|   --help       display this help and exit |  | ||||||
|   --version    output version information |  | ||||||
|   --git        print git revision |  | ||||||
|  |  | ||||||
| EOF |  | ||||||
|    |  | ||||||
|   exit $1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| if test $# -eq 0; then |  | ||||||
|   usage 1 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| cflags=false |  | ||||||
| libs=false |  | ||||||
|  |  | ||||||
| while test $# -gt 0; do |  | ||||||
|   case "$1" in |  | ||||||
|     -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; |  | ||||||
|     *) optarg= ;; |  | ||||||
|   esac |  | ||||||
|    |  | ||||||
|   case "$1" in |  | ||||||
|     --prefix) |  | ||||||
|       echo $prefix |  | ||||||
|     ;; |  | ||||||
|      |  | ||||||
|     --version) |  | ||||||
|       echo @VERSION@ |  | ||||||
|       exit 0 |  | ||||||
|     ;; |  | ||||||
|      |  | ||||||
|     --git) |  | ||||||
|       echo "@LATAN_BRANCH@ @LATAN_SHA@" |  | ||||||
|       exit 0 |  | ||||||
|     ;; |  | ||||||
|      |  | ||||||
|     --help) |  | ||||||
|       usage 0 |  | ||||||
|     ;; |  | ||||||
|      |  | ||||||
|     --cxxflags) |  | ||||||
|       echo @LATAN_CXXFLAGS@ |  | ||||||
|     ;; |  | ||||||
|      |  | ||||||
|     --ldflags) |  | ||||||
|       echo @LATAN_LDFLAGS@ |  | ||||||
|     ;; |  | ||||||
|      |  | ||||||
|     --libs) |  | ||||||
|       echo @LIBS@ |  | ||||||
|     ;; |  | ||||||
|      |  | ||||||
|     *) |  | ||||||
|       usage |  | ||||||
|       exit 1 |  | ||||||
|     ;; |  | ||||||
|   esac |  | ||||||
|   shift |  | ||||||
| done |  | ||||||
|  |  | ||||||
| exit 0 |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * AsciiFile.cpp, part of LatAnalyze 3 |  * AsciiFile.cpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -17,7 +17,7 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Io/AsciiFile.hpp> | #include <LatAnalyze/AsciiFile.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * AsciiFile.hpp, part of LatAnalyze 3 |  * AsciiFile.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,10 +21,10 @@ | |||||||
| #define Latan_AsciiFile_hpp_ | #define Latan_AsciiFile_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Io/File.hpp> | #include <LatAnalyze/File.hpp> | ||||||
| #include <LatAnalyze/Core/Mat.hpp> | #include <LatAnalyze/Mat.hpp> | ||||||
| #include <LatAnalyze/Statistics/MatSample.hpp> | #include <LatAnalyze/MatSample.hpp> | ||||||
| #include <LatAnalyze/Core/ParserState.hpp> | #include <LatAnalyze/ParserState.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
|  * AsciiLexer.lpp, part of LatAnalyze 3 |  * AsciiLexer.lpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -25,7 +25,7 @@ | |||||||
| %option yylineno | %option yylineno | ||||||
| 
 | 
 | ||||||
| %{ | %{ | ||||||
| 	#include <LatAnalyze/Io/AsciiFile.hpp> | 	#include <LatAnalyze/AsciiFile.hpp> | ||||||
| 	#include "AsciiParser.hpp" | 	#include "AsciiParser.hpp" | ||||||
|      |      | ||||||
|     using namespace std; |     using namespace std; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /* | /* | ||||||
|  * AsciiParser.ypp, part of LatAnalyze 3 |  * AsciiParser.ypp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -19,9 +19,9 @@ | |||||||
| 
 | 
 | ||||||
| %{ | %{ | ||||||
|     #include <LatAnalyze/Global.hpp> |     #include <LatAnalyze/Global.hpp> | ||||||
| 	#include <LatAnalyze/Io/AsciiFile.hpp> | 	#include <LatAnalyze/AsciiFile.hpp> | ||||||
|     #include <LatAnalyze/Core/Mat.hpp> |     #include <LatAnalyze/Mat.hpp> | ||||||
|     #include <LatAnalyze/Statistics/MatSample.hpp> |     #include <LatAnalyze/MatSample.hpp> | ||||||
| 
 | 
 | ||||||
|     using namespace std; |     using namespace std; | ||||||
|     using namespace Latan; |     using namespace Latan; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * CompiledFunction.cpp, part of LatAnalyze 3 |  * CompiledFunction.cpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -17,8 +17,8 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Functional/CompiledFunction.hpp> | #include <LatAnalyze/CompiledFunction.hpp> | ||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Math.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * CompiledFunction.hpp, part of LatAnalyze 3 |  * CompiledFunction.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,8 +21,8 @@ | |||||||
| #define	Latan_CompiledFunction_hpp_ | #define	Latan_CompiledFunction_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Functional/Function.hpp> | #include <LatAnalyze/Function.hpp> | ||||||
| #include <LatAnalyze/Core/MathInterpreter.hpp> | #include <LatAnalyze/MathInterpreter.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * CompiledModel.cpp, part of LatAnalyze 3 |  * CompiledModel.cpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -17,8 +17,8 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Functional/CompiledModel.hpp> | #include <LatAnalyze/CompiledModel.hpp> | ||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Math.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * CompiledModel.hpp, part of LatAnalyze 3 |  * CompiledModel.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,8 +21,8 @@ | |||||||
| #define Latan_CompiledModel_hpp_ | #define Latan_CompiledModel_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Functional/Model.hpp> | #include <LatAnalyze/Model.hpp> | ||||||
| #include <LatAnalyze/Core/MathInterpreter.hpp> | #include <LatAnalyze/MathInterpreter.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,123 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Eigen.hpp, part of LatAnalyze 3 |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze 3 is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| // Eigen inclusion |  | ||||||
| #define EIGEN_DONT_PARALLELIZE |  | ||||||
| #define EIGEN_MATRIXBASE_PLUGIN <LatAnalyze/Core/EigenPlugin.hpp> |  | ||||||
| #include <LatAnalyze/Eigen/Dense> |  | ||||||
|  |  | ||||||
| // copy/assignement from Eigen expression |  | ||||||
| #define EIGEN_EXPR_CTOR(ctorName, Class, Base, ExprType) \ |  | ||||||
| template <typename Derived>\ |  | ||||||
| ctorName(const ExprType<Derived> &m): Base(m) {}\ |  | ||||||
| template<typename Derived>\ |  | ||||||
| Class & operator=(const ExprType<Derived> &m)\ |  | ||||||
| {\ |  | ||||||
|     this->Base::operator=(m);\ |  | ||||||
|     return *this;\ |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #define FOR_MAT(mat, i, j) \ |  | ||||||
| for (Latan::Index j = 0; j < mat.cols(); ++j)\ |  | ||||||
| for (Latan::Index i = 0; i < mat.rows(); ++i) |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| const int dynamic = Eigen::Dynamic; |  | ||||||
|  |  | ||||||
| // array types |  | ||||||
| template <typename Derived> |  | ||||||
| using ArrayExpr = Eigen::ArrayBase<Derived>; |  | ||||||
|  |  | ||||||
| template <typename T, int nRow = dynamic, int nCol = dynamic> |  | ||||||
| using Array = Eigen::Array<T, nRow, nCol>; |  | ||||||
|  |  | ||||||
| // matrix types |  | ||||||
| template <typename Derived> |  | ||||||
| using MatExpr = Eigen::MatrixBase<Derived>; |  | ||||||
|  |  | ||||||
| template <typename T, int nRow = dynamic, int nCol = dynamic> |  | ||||||
| using MatBase = Eigen::Matrix<T, nRow, nCol>; |  | ||||||
|  |  | ||||||
| template <int nRow, int nCol> |  | ||||||
| using SFMat = Eigen::Matrix<float, nRow, nCol>; |  | ||||||
|  |  | ||||||
| template <int nRow, int nCol> |  | ||||||
| using SDMat = Eigen::Matrix<double, nRow, nCol>; |  | ||||||
|  |  | ||||||
| template <int nRow, int nCol> |  | ||||||
| using SCMat = Eigen::Matrix<std::complex<double>, nRow, nCol>; |  | ||||||
|  |  | ||||||
| // vector types |  | ||||||
| template <typename T, int size = dynamic> |  | ||||||
| using Vec = MatBase<T, size, 1>; |  | ||||||
|  |  | ||||||
| template <int size> |  | ||||||
| using SIVec = Vec<int, size>; |  | ||||||
|  |  | ||||||
| template <int size> |  | ||||||
| using SUVec = Vec<unsigned int, size>; |  | ||||||
|  |  | ||||||
| template <int size> |  | ||||||
| using SFVec = Vec<float, size>; |  | ||||||
|  |  | ||||||
| template <int size> |  | ||||||
| using SDVec = Vec<double, size>; |  | ||||||
|  |  | ||||||
| template <int size> |  | ||||||
| using SCVec = Vec<std::complex<double>, size>; |  | ||||||
|  |  | ||||||
| typedef SIVec<dynamic> IVec; |  | ||||||
| typedef SUVec<dynamic> UVec; |  | ||||||
| typedef SDVec<dynamic> DVec; |  | ||||||
| typedef SCVec<dynamic> CVec; |  | ||||||
|  |  | ||||||
| // block types |  | ||||||
| template <typename Derived> |  | ||||||
| using Block      = Eigen::Block<Derived>; |  | ||||||
| template <typename Derived> |  | ||||||
| using ConstBlock = const Eigen::Block<const Derived>; |  | ||||||
|  |  | ||||||
| template <typename Derived> |  | ||||||
| using Row      = typename Derived::RowXpr; |  | ||||||
| template <typename Derived> |  | ||||||
| using ConstRow = typename Derived::ConstRowXpr; |  | ||||||
|  |  | ||||||
| template <typename Derived> |  | ||||||
| using Col = typename Derived::ColXpr; |  | ||||||
| template <typename Derived> |  | ||||||
| using ConstCol = typename Derived::ConstColXpr; |  | ||||||
|  |  | ||||||
| // map type |  | ||||||
| template <int stride> |  | ||||||
| using InnerStride = Eigen::InnerStride<stride>; |  | ||||||
| template <int rowStride, int colStride> |  | ||||||
| using Stride = Eigen::Stride<rowStride, colStride>; |  | ||||||
| template <typename Derived, typename StrideType = Stride<0, 0>> |  | ||||||
| using Map = Eigen::Map<Derived, Eigen::Unaligned, StrideType>; |  | ||||||
| template <typename Derived, typename StrideType = Stride<0, 0>> |  | ||||||
| using ConstMap = Eigen::Map<const Derived, Eigen::Unaligned, StrideType>; |  | ||||||
|  |  | ||||||
| // Index type ////////////////////////////////////////////////////////////////// |  | ||||||
| typedef MatBase<int>::Index Index; |  | ||||||
|  |  | ||||||
| #define FOR_VEC(vec, i)  for (Latan::Index i = 0; i < (vec).size(); ++i) |  | ||||||
| #define FOR_ARRAY(ar, i) FOR_VEC(ar, i) |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
| @@ -1,60 +0,0 @@ | |||||||
| /* |  | ||||||
|  * EigenPlugin.hpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2015 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| Derived pInverse(const double tolerance = 1.0e-10) |  | ||||||
| { |  | ||||||
|     auto         svd   = jacobiSvd(Eigen::ComputeThinU|Eigen::ComputeThinV); |  | ||||||
|     const auto   u     = svd.matrixU(); |  | ||||||
|     const auto   v     = svd.matrixV(); |  | ||||||
|     auto         s     = svd.singularValues(); |  | ||||||
|     double       maxsv = 0.; |  | ||||||
|     unsigned int elim  = 0; |  | ||||||
|      |  | ||||||
|     for (Index i = 0; i < s.rows(); ++i) |  | ||||||
|     { |  | ||||||
|         if (fabs(s(i)) > maxsv) maxsv = fabs(s(i)); |  | ||||||
|     } |  | ||||||
|     for (Index i = 0; i < s.rows(); ++i) |  | ||||||
|     { |  | ||||||
|         if (fabs(s(i)) > maxsv*tolerance) |  | ||||||
|         { |  | ||||||
|             s(i) = 1./s(i); |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             elim++; |  | ||||||
|             s(i) = 0.; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     if (elim) |  | ||||||
|     { |  | ||||||
|         std::cerr << "warning: pseudoinverse: " << elim << "/"; |  | ||||||
|         std::cerr << s.rows() << " singular value(s) eliminated (tolerance= "; |  | ||||||
|         std::cerr << tolerance << ")" << std::endl; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return v*s.asDiagonal()*u.transpose(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Derived singularValues(void) |  | ||||||
| { |  | ||||||
|     auto svd = jacobiSvd(); |  | ||||||
|      |  | ||||||
|     return svd.singularValues(); |  | ||||||
| } |  | ||||||
| @@ -1,299 +0,0 @@ | |||||||
| /* |  | ||||||
|  * OptParser.cpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2016 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Core/OptParser.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| static char optRegex[] = "(-([a-zA-Z])(.+)?)|(--([a-zA-Z_-]+)=?(.+)?)"; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                         OptParser implementation                           * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // regular expressions ///////////////////////////////////////////////////////// |  | ||||||
| const regex OptParser::optRegex_(optRegex); |  | ||||||
|  |  | ||||||
| // access ////////////////////////////////////////////////////////////////////// |  | ||||||
| void OptParser::addOption(const std::string shortName, |  | ||||||
|                           const std::string longName, |  | ||||||
|                           const OptType type, const bool optional, |  | ||||||
|                           const std::string helpMessage, |  | ||||||
|                           const std::string defaultVal) |  | ||||||
| { |  | ||||||
|     OptPar par; |  | ||||||
|      |  | ||||||
|     par.shortName   = shortName; |  | ||||||
|     par.longName    = longName; |  | ||||||
|     par.defaultVal  = defaultVal; |  | ||||||
|     par.helpMessage = helpMessage; |  | ||||||
|     par.type        = type; |  | ||||||
|     par.optional    = optional; |  | ||||||
|     auto it = std::find_if(opt_.begin(), opt_.end(), [&par](const OptPar & p) |  | ||||||
|     { |  | ||||||
|         bool match = false; |  | ||||||
|  |  | ||||||
|         match |= (par.shortName == p.shortName) and !par.shortName.empty(); |  | ||||||
|         match |= (par.longName == p.longName) and !par.longName.empty(); |  | ||||||
|  |  | ||||||
|         return match; |  | ||||||
|     }); |  | ||||||
|     if (it != opt_.end()) |  | ||||||
|     { |  | ||||||
|         string opt; |  | ||||||
|  |  | ||||||
|         if (!it->shortName.empty()) |  | ||||||
|         { |  | ||||||
|             opt += "-" + it->shortName; |  | ||||||
|         } |  | ||||||
|         if (!opt.empty()) |  | ||||||
|         { |  | ||||||
|             opt += "/"; |  | ||||||
|         } |  | ||||||
|         if (!it->longName.empty()) |  | ||||||
|         { |  | ||||||
|             opt += "--" + it->longName; |  | ||||||
|         } |  | ||||||
|         throw(logic_error("duplicate option " + opt + " (in the code, not in the command line)")); |  | ||||||
|     } |  | ||||||
|     opt_.push_back(par); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool OptParser::gotOption(const std::string name) const |  | ||||||
| { |  | ||||||
|     int i = optIndex(name); |  | ||||||
|      |  | ||||||
|     if (result_.size() != opt_.size()) |  | ||||||
|     { |  | ||||||
|         throw(runtime_error("options not parsed")); |  | ||||||
|     } |  | ||||||
|     if (i >= 0) |  | ||||||
|     { |  | ||||||
|         return result_[i].present; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         throw(out_of_range("no option with name '" + name + "'")); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const vector<string> & OptParser::getArgs(void) const |  | ||||||
| { |  | ||||||
|     return arg_; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // parse /////////////////////////////////////////////////////////////////////// |  | ||||||
| bool OptParser::parse(int argc, char *argv[]) |  | ||||||
| { |  | ||||||
|     smatch        sm; |  | ||||||
|     queue<string> arg; |  | ||||||
|     int           expectVal = -1; |  | ||||||
|     bool          isCorrect = true; |  | ||||||
|      |  | ||||||
|     for (int i = 1; i < argc; ++i) |  | ||||||
|     { |  | ||||||
|         arg.push(argv[i]); |  | ||||||
|     } |  | ||||||
|     result_.clear(); |  | ||||||
|     result_.resize(opt_.size()); |  | ||||||
|     arg_.clear(); |  | ||||||
|     for (unsigned int i = 0; i < opt_.size(); ++i) |  | ||||||
|     { |  | ||||||
|         result_[i].value = opt_[i].defaultVal; |  | ||||||
|     } |  | ||||||
|     while (!arg.empty()) |  | ||||||
|     { |  | ||||||
|         // option |  | ||||||
|         if (regex_match(arg.front(), sm, optRegex_)) |  | ||||||
|         { |  | ||||||
|             // should it be a value? |  | ||||||
|             if (expectVal >= 0) |  | ||||||
|             { |  | ||||||
|                 cerr << "warning: expected value for option "; |  | ||||||
|                 cerr << optName(opt_[expectVal]); |  | ||||||
|                 cerr << ", got option '" << arg.front() << "' instead" << endl; |  | ||||||
|                 expectVal = -1; |  | ||||||
|                 isCorrect = false; |  | ||||||
|             } |  | ||||||
|             // short option |  | ||||||
|             if (sm[1].matched) |  | ||||||
|             { |  | ||||||
|                 string optName = sm[2].str(); |  | ||||||
|                  |  | ||||||
|                 // find option |  | ||||||
|                 auto it = find_if(opt_.begin(), opt_.end(), |  | ||||||
|                                   [&optName](const OptPar &p) |  | ||||||
|                                   { |  | ||||||
|                                       return (p.shortName == optName); |  | ||||||
|                                   }); |  | ||||||
|                  |  | ||||||
|                 // parse if found |  | ||||||
|                 if (it != opt_.end()) |  | ||||||
|                 { |  | ||||||
|                     unsigned int i =  it - opt_.begin(); |  | ||||||
|                      |  | ||||||
|                     result_[i].present = true; |  | ||||||
|                     if (opt_[i].type == OptType::value) |  | ||||||
|                     { |  | ||||||
|                         if (sm[3].matched) |  | ||||||
|                         { |  | ||||||
|                             result_[i].value = sm[3].str(); |  | ||||||
|                         } |  | ||||||
|                         else |  | ||||||
|                         { |  | ||||||
|                             expectVal = i; |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 // warning if not found |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     cerr << "warning: unknown option '" << arg.front() << "'"; |  | ||||||
|                     cerr << endl; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             // long option |  | ||||||
|             else if (sm[4].matched) |  | ||||||
|             { |  | ||||||
|                 string optName = sm[5].str(); |  | ||||||
|                  |  | ||||||
|                 // find option |  | ||||||
|                 auto it = find_if(opt_.begin(), opt_.end(), |  | ||||||
|                                   [&optName](const OptPar &p) |  | ||||||
|                                   { |  | ||||||
|                                       return (p.longName == optName); |  | ||||||
|                                   }); |  | ||||||
|                  |  | ||||||
|                 // parse if found |  | ||||||
|                 if (it != opt_.end()) |  | ||||||
|                 { |  | ||||||
|                     unsigned int i =  it - opt_.begin(); |  | ||||||
|                      |  | ||||||
|                     result_[i].present = true; |  | ||||||
|                     if (opt_[i].type == OptType::value) |  | ||||||
|                     { |  | ||||||
|                         if (sm[6].matched) |  | ||||||
|                         { |  | ||||||
|                             result_[i].value = sm[6].str(); |  | ||||||
|                         } |  | ||||||
|                         else |  | ||||||
|                         { |  | ||||||
|                             expectVal = i; |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 // warning if not found |  | ||||||
|                 else |  | ||||||
|                 { |  | ||||||
|                     cerr << "warning: unknown option '" << arg.front() << "'"; |  | ||||||
|                     cerr << endl; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         else if (expectVal >= 0) |  | ||||||
|         { |  | ||||||
|             result_[expectVal].value = arg.front(); |  | ||||||
|             expectVal                = -1; |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             arg_.push_back(arg.front()); |  | ||||||
|         } |  | ||||||
|         arg.pop(); |  | ||||||
|     } |  | ||||||
|     if (expectVal >= 0) |  | ||||||
|     { |  | ||||||
|         cerr << "warning: expected value for option "; |  | ||||||
|         cerr << optName(opt_[expectVal]) << endl; |  | ||||||
|         expectVal = -1; |  | ||||||
|         isCorrect = false; |  | ||||||
|     } |  | ||||||
|     for (unsigned int i = 0; i < opt_.size(); ++i) |  | ||||||
|     { |  | ||||||
|         if (!opt_[i].optional and !result_[i].present) |  | ||||||
|         { |  | ||||||
|             cerr << "warning: mandatory option " << optName(opt_[i]); |  | ||||||
|             cerr << " is missing" << endl; |  | ||||||
|             isCorrect = false; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return isCorrect; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // find option index /////////////////////////////////////////////////////////// |  | ||||||
| int OptParser::optIndex(const string name) const |  | ||||||
| { |  | ||||||
|     auto it = find_if(opt_.begin(), opt_.end(), [&name](const OptPar &p) |  | ||||||
|                       { |  | ||||||
|                           return (p.shortName == name) or (p.longName == name); |  | ||||||
|                       }); |  | ||||||
|      |  | ||||||
|     if (it != opt_.end()) |  | ||||||
|     { |  | ||||||
|         return static_cast<int>(it - opt_.begin()); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // option name for messages //////////////////////////////////////////////////// |  | ||||||
| std::string OptParser::optName(const OptPar &opt) |  | ||||||
| { |  | ||||||
|     std::string res = ""; |  | ||||||
|      |  | ||||||
|     if (!opt.shortName.empty()) |  | ||||||
|     { |  | ||||||
|         res += "-" + opt.shortName; |  | ||||||
|         if (!opt.longName.empty()) |  | ||||||
|         { |  | ||||||
|             res += "/"; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     if (!opt.longName.empty()) |  | ||||||
|     { |  | ||||||
|         res += "--" + opt.longName; |  | ||||||
|         if (opt.type == OptParser::OptType::value) |  | ||||||
|         { |  | ||||||
|             res += "="; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return res; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // print option list /////////////////////////////////////////////////////////// |  | ||||||
| std::ostream & Latan::operator<<(std::ostream &out, const OptParser &parser) |  | ||||||
| { |  | ||||||
|     for (auto &o: parser.opt_) |  | ||||||
|     { |  | ||||||
|         out << setw(20) << OptParser::optName(o); |  | ||||||
|         out << ": " << o.helpMessage; |  | ||||||
|         if (!o.defaultVal.empty()) |  | ||||||
|         { |  | ||||||
|             out << " (default: " << o.defaultVal << ")"; |  | ||||||
|         } |  | ||||||
|         out << endl; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return out; |  | ||||||
| } |  | ||||||
| @@ -1,103 +0,0 @@ | |||||||
| /* |  | ||||||
|  * OptParser.hpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2016 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef LatAnalyze_OptParser_hpp_ |  | ||||||
| #define LatAnalyze_OptParser_hpp_ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                       command-line option parser                           * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| class OptParser |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     enum class OptType {value, trigger}; |  | ||||||
| private: |  | ||||||
|     struct OptPar |  | ||||||
|     { |  | ||||||
|         std::string shortName, longName, defaultVal, helpMessage; |  | ||||||
|         OptType     type; |  | ||||||
|         bool        optional; |  | ||||||
|     }; |  | ||||||
|     struct OptRes |  | ||||||
|     { |  | ||||||
|         std::string value; |  | ||||||
|         bool        present; |  | ||||||
|     }; |  | ||||||
| public: |  | ||||||
|     // constructor |  | ||||||
|     OptParser(void) = default; |  | ||||||
|     // destructor |  | ||||||
|     virtual ~OptParser(void) = default; |  | ||||||
|     // access |  | ||||||
|     void addOption(const std::string shortName, const std::string longName, |  | ||||||
|                    const OptType type, const bool optional = false, |  | ||||||
|                    const std::string helpMessage = "", |  | ||||||
|                    const std::string defaultVal = ""); |  | ||||||
|     bool gotOption(const std::string name) const; |  | ||||||
|     template <typename T = std::string> |  | ||||||
|     T    optionValue(const std::string name) const; |  | ||||||
|     const std::vector<std::string> & getArgs(void) const; |  | ||||||
|     // parse |  | ||||||
|     bool parse(int argc, char *argv[]); |  | ||||||
|     // print option list |  | ||||||
|     friend std::ostream & operator<<(std::ostream &out, |  | ||||||
|                                      const OptParser &parser); |  | ||||||
| private: |  | ||||||
|     // find option index |  | ||||||
|     int optIndex(const std::string name) const; |  | ||||||
|     // option name for messages |  | ||||||
|     static std::string optName(const OptPar &opt); |  | ||||||
| private: |  | ||||||
|     std::vector<OptPar>      opt_; |  | ||||||
|     std::vector<OptRes>      result_; |  | ||||||
|     std::vector<std::string> arg_; |  | ||||||
|     static const std::regex  optRegex_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| std::ostream & operator<<(std::ostream &out, const OptParser &parser); |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                     OptParser template implementation                      * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| template <typename T> |  | ||||||
| T OptParser::optionValue(const std::string name) const |  | ||||||
| { |  | ||||||
|     int i = optIndex(name); |  | ||||||
|      |  | ||||||
|     if (result_.size() != opt_.size()) |  | ||||||
|     { |  | ||||||
|         throw(std::runtime_error("options not parsed")); |  | ||||||
|     } |  | ||||||
|     if (i >= 0) |  | ||||||
|     { |  | ||||||
|         return strTo<T>(result_[i].value); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         throw(std::out_of_range("no option with name '" + name + "'")); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // LatAnalyze_OptParser_hpp_ |  | ||||||
| @@ -1,137 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Utilities.cpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Core/Utilities.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| void Latan::testFunction(void) |  | ||||||
| {} |  | ||||||
|  |  | ||||||
| ostream & Latan::operator<<(ostream &out, const ProgressBar &&bar) |  | ||||||
| { |  | ||||||
|     const Index nTick = bar.nCol_*bar.current_/bar.total_; |  | ||||||
|      |  | ||||||
|     out << "["; |  | ||||||
|     for (Index i = 0; i < nTick; ++i) |  | ||||||
|     { |  | ||||||
|         out << "="; |  | ||||||
|     } |  | ||||||
|     for (Index i = nTick; i < bar.nCol_; ++i) |  | ||||||
|     { |  | ||||||
|         out << " "; |  | ||||||
|     } |  | ||||||
|     out << "] " << bar.current_ << "/" << bar.total_; |  | ||||||
|     out.flush(); |  | ||||||
|      |  | ||||||
|     return out; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int Latan::mkdir(const std::string dirName) |  | ||||||
| { |  | ||||||
|     if (access(dirName.c_str(), R_OK|W_OK|X_OK)) |  | ||||||
|     { |  | ||||||
|         mode_t mode755; |  | ||||||
|         char   tmp[MAX_PATH_LENGTH]; |  | ||||||
|         char   *p = NULL; |  | ||||||
|         size_t len; |  | ||||||
|  |  | ||||||
|         mode755 = S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH; |  | ||||||
|  |  | ||||||
|         snprintf(tmp, sizeof(tmp), "%s", dirName.c_str()); |  | ||||||
|         len = strlen(tmp); |  | ||||||
|         if(tmp[len - 1] == '/') |  | ||||||
|         { |  | ||||||
|             tmp[len - 1] = 0; |  | ||||||
|         } |  | ||||||
|         for(p = tmp + 1; *p; p++) |  | ||||||
|         { |  | ||||||
|             if(*p == '/') |  | ||||||
|             { |  | ||||||
|                 *p = 0; |  | ||||||
|                 ::mkdir(tmp, mode755); |  | ||||||
|                 *p = '/'; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return ::mkdir(tmp, mode755); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return 0; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| string Latan::basename(const string &s) |  | ||||||
| { |  | ||||||
|     constexpr char sep = '/'; |  | ||||||
|     size_t         i   = s.rfind(sep, s.length()); |  | ||||||
|      |  | ||||||
|     if (i != string::npos) |  | ||||||
|     { |  | ||||||
|         return s.substr(i+1, s.length() - i); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return s; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| std::string Latan::dirname(const std::string &s) |  | ||||||
| { |  | ||||||
|     constexpr char sep = '/'; |  | ||||||
|     size_t         i   = s.rfind(sep, s.length()); |  | ||||||
|      |  | ||||||
|     if (i != std::string::npos) |  | ||||||
|     { |  | ||||||
|         return s.substr(0, i); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return ""; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| VarName::VarName(const string defName) |  | ||||||
| : defName_(defName) |  | ||||||
| {} |  | ||||||
|  |  | ||||||
| string VarName::getName(const Index i) const |  | ||||||
| { |  | ||||||
|     if (hasName(i)) |  | ||||||
|     { |  | ||||||
|         return name_.at(i); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return defName_ + "_" + strFrom(i); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void VarName::setName(const Index i, const string name) |  | ||||||
| { |  | ||||||
|     name_[i] = name; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool VarName::hasName(const Index i) const |  | ||||||
| { |  | ||||||
|     return (name_.find(i) != name_.end()); |  | ||||||
| } |  | ||||||
| @@ -1,250 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Utilities.hpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef LatAnalyze_Utilities_hpp_ |  | ||||||
| #define	LatAnalyze_Utilities_hpp_ |  | ||||||
|  |  | ||||||
| #ifndef LATAN_GLOBAL_HPP_ |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| // Random seed type //////////////////////////////////////////////////////////// |  | ||||||
| typedef std::random_device::result_type SeedType; |  | ||||||
|  |  | ||||||
| // Type utilities ////////////////////////////////////////////////////////////// |  | ||||||
| // pointer type test |  | ||||||
| template <typename Derived, typename Base> |  | ||||||
| inline bool isDerivedFrom(const Base *pt) |  | ||||||
| { |  | ||||||
|     return (dynamic_cast<const Derived *>(pt) != nullptr); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // static logical or |  | ||||||
| template <bool... b> |  | ||||||
| struct static_or; |  | ||||||
|  |  | ||||||
| template <bool... tail> |  | ||||||
| struct static_or<true, tail...> : static_or<tail...> {}; |  | ||||||
|  |  | ||||||
| template <bool... tail> |  | ||||||
| struct static_or<false, tail...> : std::false_type {}; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct static_or<> : std::true_type {}; |  | ||||||
|  |  | ||||||
| // Environment ///////////////////////////////////////////////////////////////// |  | ||||||
| void testFunction(void); |  | ||||||
|  |  | ||||||
| // String utilities //////////////////////////////////////////////////////////// |  | ||||||
| inline std::string extension(const std::string fileName) |  | ||||||
| { |  | ||||||
|     return fileName.substr(fileName.find_last_of(".") + 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline T strTo(const std::string &str) |  | ||||||
| { |  | ||||||
|     T buf; |  | ||||||
|     std::istringstream stream(str); |  | ||||||
|      |  | ||||||
|     stream >> buf; |  | ||||||
|      |  | ||||||
|     return buf; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // optimized specializations |  | ||||||
| template <> |  | ||||||
| inline float strTo<float>(const std::string &str) |  | ||||||
| { |  | ||||||
|     return strtof(str.c_str(), (char **)NULL); |  | ||||||
| } |  | ||||||
| template <> |  | ||||||
| inline double strTo<double>(const std::string &str) |  | ||||||
| { |  | ||||||
|     return strtod(str.c_str(), (char **)NULL); |  | ||||||
| } |  | ||||||
| template <> |  | ||||||
| inline int strTo<int>(const std::string &str) |  | ||||||
| { |  | ||||||
|     return (int)(strtol(str.c_str(), (char **)NULL, 10)); |  | ||||||
| } |  | ||||||
| template <> |  | ||||||
| inline long strTo<long>(const std::string &str) |  | ||||||
| { |  | ||||||
|     return strtol(str.c_str(), (char **)NULL, 10); |  | ||||||
| } |  | ||||||
| template <> |  | ||||||
| inline std::string strTo<std::string>(const std::string &str) |  | ||||||
| { |  | ||||||
|     return str; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline std::string strFrom(const T x) |  | ||||||
| { |  | ||||||
|     std::ostringstream stream; |  | ||||||
|      |  | ||||||
|     stream << x; |  | ||||||
|      |  | ||||||
|     return stream.str(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // specialization for vectors |  | ||||||
| template<> |  | ||||||
| inline DVec strTo<DVec>(const std::string &str) |  | ||||||
| { |  | ||||||
|     DVec                res; |  | ||||||
|     std::vector<double> vbuf; |  | ||||||
|     double              buf; |  | ||||||
|     std::istringstream  stream(str); |  | ||||||
|      |  | ||||||
|     while (!stream.eof()) |  | ||||||
|     { |  | ||||||
|         stream >> buf; |  | ||||||
|         vbuf.push_back(buf); |  | ||||||
|     } |  | ||||||
|     res = Map<DVec>(vbuf.data(), static_cast<Index>(vbuf.size())); |  | ||||||
|      |  | ||||||
|     return res; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template<> |  | ||||||
| inline IVec strTo<IVec>(const std::string &str) |  | ||||||
| { |  | ||||||
|     IVec                res; |  | ||||||
|     std::vector<int>    vbuf; |  | ||||||
|     int                 buf; |  | ||||||
|     std::istringstream  stream(str); |  | ||||||
|      |  | ||||||
|     while (!stream.eof()) |  | ||||||
|     { |  | ||||||
|         stream >> buf; |  | ||||||
|         vbuf.push_back(buf); |  | ||||||
|     } |  | ||||||
|     res = Map<IVec>(vbuf.data(), static_cast<Index>(vbuf.size())); |  | ||||||
|      |  | ||||||
|     return res; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template<> |  | ||||||
| inline UVec strTo<UVec>(const std::string &str) |  | ||||||
| { |  | ||||||
|     UVec                      res; |  | ||||||
|     std::vector<unsigned int> vbuf; |  | ||||||
|     unsigned int              buf; |  | ||||||
|     std::istringstream        stream(str); |  | ||||||
|  |  | ||||||
|     while (!stream.eof()) |  | ||||||
|     { |  | ||||||
|         stream >> buf; |  | ||||||
|         vbuf.push_back(buf); |  | ||||||
|     } |  | ||||||
|     res = Map<UVec>(vbuf.data(), static_cast<Index>(vbuf.size())); |  | ||||||
|  |  | ||||||
|     return res; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| void tokenReplace(std::string &str, const std::string token, |  | ||||||
|                   const T &x, const std::string mark = "@") |  | ||||||
| { |  | ||||||
|     std::string fullToken = mark + token + mark; |  | ||||||
|      |  | ||||||
|     auto pos = str.find(fullToken); |  | ||||||
|     if (pos != std::string::npos) |  | ||||||
|     { |  | ||||||
|         str.replace(pos, fullToken.size(), strFrom(x)); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Manifest file reader //////////////////////////////////////////////////////// |  | ||||||
| inline std::vector<std::string> readManifest(const std::string manFileName) |  | ||||||
| { |  | ||||||
|     std::vector<std::string> list; |  | ||||||
|     std::ifstream            manFile; |  | ||||||
|     char                     buf[MAX_PATH_LENGTH]; |  | ||||||
|      |  | ||||||
|     manFile.open(manFileName); |  | ||||||
|     while (!manFile.eof()) |  | ||||||
|     { |  | ||||||
|         manFile.getline(buf, MAX_PATH_LENGTH); |  | ||||||
|         if (!std::string(buf).empty()) |  | ||||||
|         { |  | ||||||
|             list.push_back(buf); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     manFile.close(); |  | ||||||
|      |  | ||||||
|     return list; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Recursive directory creation //////////////////////////////////////////////// |  | ||||||
| int mkdir(const std::string dirName); |  | ||||||
|  |  | ||||||
| // C++ version of basename/dirname ///////////////////////////////////////////// |  | ||||||
| std::string basename(const std::string& s); |  | ||||||
| std::string dirname(const std::string& s); |  | ||||||
|  |  | ||||||
| // Progress bar class ////////////////////////////////////////////////////////// |  | ||||||
| class ProgressBar |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     // constructor |  | ||||||
|     template <typename A, typename B> |  | ||||||
|     ProgressBar(const A current, const B total, const Index nCol = 60); |  | ||||||
|     // IO |  | ||||||
|     friend std::ostream & operator<<(std::ostream &out, |  | ||||||
|                                      const ProgressBar &&bar); |  | ||||||
| private: |  | ||||||
|     Index current_, total_, nCol_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename A, typename B> |  | ||||||
| ProgressBar::ProgressBar(const A current, const B total, const Index nCol) |  | ||||||
| : current_(static_cast<Index>(current)) |  | ||||||
| , total_(static_cast<Index>(total)) |  | ||||||
| , nCol_(nCol) |  | ||||||
| {} |  | ||||||
|  |  | ||||||
| std::ostream & operator<<(std::ostream &out, const ProgressBar &&bar); |  | ||||||
|  |  | ||||||
| // named variable interface //////////////////////////////////////////////////// |  | ||||||
| // FIXME: check redundant names and variable number limit |  | ||||||
| class VarName |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     // constructor |  | ||||||
|     VarName(const std::string defName); |  | ||||||
|     // destructor |  | ||||||
|     virtual ~VarName(void) = default; |  | ||||||
|     // access |  | ||||||
|     std::string getName(const Index i) const; |  | ||||||
|     void        setName(const Index i, const std::string name); |  | ||||||
|     // test |  | ||||||
|     bool hasName(const Index i) const; |  | ||||||
| private: |  | ||||||
|     std::string                            defName_; |  | ||||||
|     std::unordered_map<Index, std::string> name_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // LatAnalyze_Utilities_hpp_ |  | ||||||
| @@ -1,56 +0,0 @@ | |||||||
| /* |  | ||||||
|  * stdincludes.hpp, part of LatAnalyze 3 |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze 3 is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef Latan_stdincludes_hpp_ |  | ||||||
| #define	Latan_stdincludes_hpp_ |  | ||||||
|  |  | ||||||
| #include <algorithm> |  | ||||||
| #include <array> |  | ||||||
| #include <chrono> |  | ||||||
| #include <complex> |  | ||||||
| #include <fstream> |  | ||||||
| #include <functional> |  | ||||||
| #include <iostream> |  | ||||||
| #include <iomanip> |  | ||||||
| #include <iterator> |  | ||||||
| #include <limits> |  | ||||||
| #include <list> |  | ||||||
| #include <map> |  | ||||||
| #include <memory> |  | ||||||
| #include <queue> |  | ||||||
| #include <random> |  | ||||||
| #include <regex> |  | ||||||
| #include <set> |  | ||||||
| #include <stack> |  | ||||||
| #include <string> |  | ||||||
| #include <sstream> |  | ||||||
| #include <type_traits> |  | ||||||
| #include <unordered_map> |  | ||||||
| #include <utility> |  | ||||||
| #include <vector> |  | ||||||
| #include <cfloat> |  | ||||||
| #include <climits> |  | ||||||
| #include <cmath> |  | ||||||
| #include <cstdio> |  | ||||||
| #include <cstdlib> |  | ||||||
| #include <cstring> |  | ||||||
| #include <sys/stat.h> |  | ||||||
| #include <unistd.h> |  | ||||||
|  |  | ||||||
| #endif // Latan_stdincludes_hpp_ |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Dataset.hpp, part of LatAnalyze 3 |  * Dataset.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,8 +21,8 @@ | |||||||
| #define Latan_Dataset_hpp_ | #define Latan_Dataset_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Io/File.hpp> | #include <LatAnalyze/File.hpp> | ||||||
| #include <LatAnalyze/Statistics/StatArray.hpp> | #include <LatAnalyze/StatArray.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -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> | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Histogram.hpp, part of LatAnalyze 3 |  * Histogram.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,7 +21,7 @@ | |||||||
| #define Latan_Histogram_hpp_ | #define Latan_Histogram_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Statistics/StatArray.hpp> | #include <LatAnalyze/StatArray.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Integrator.hpp, part of LatAnalyze 3 |  * Integrator.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,7 +21,7 @@ | |||||||
| #define Latan_Integrator_hpp_ | #define Latan_Integrator_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Functional/Function.hpp> | #include <LatAnalyze/Function.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Io.cpp, part of LatAnalyze 3 |  * Io.cpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -17,10 +17,12 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Io/Io.hpp> | #include <LatAnalyze/Io.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| #include <LatAnalyze/Io/AsciiFile.hpp> | #include <LatAnalyze/AsciiFile.hpp> | ||||||
| #include <LatAnalyze/Io/Hdf5File.hpp> | #ifdef HAVE_HDF5 | ||||||
|  | #include <LatAnalyze/Hdf5File.hpp> | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
| @@ -40,10 +42,12 @@ unique_ptr<File> Io::open(const std::string &fileName, const unsigned int mode) | |||||||
|     { |     { | ||||||
|         return unique_ptr<File>(new AsciiFile(fileName, mode)); |         return unique_ptr<File>(new AsciiFile(fileName, mode)); | ||||||
|     } |     } | ||||||
|  | #ifdef HAVE_HDF5 | ||||||
|     else if (ext == "h5") |     else if (ext == "h5") | ||||||
|     { |     { | ||||||
|         return unique_ptr<File>(new Hdf5File(fileName, mode)); |         return unique_ptr<File>(new Hdf5File(fileName, mode)); | ||||||
|     } |     } | ||||||
|  | #endif | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         LATAN_ERROR(Io, "unknown file extension '" + ext + "'"); |         LATAN_ERROR(Io, "unknown file extension '" + ext + "'"); | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Io.hpp, part of LatAnalyze 3 |  * Io.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,7 +21,7 @@ | |||||||
| #define Latan_Io_hpp_ | #define Latan_Io_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Io/File.hpp> | #include <LatAnalyze/File.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,81 +0,0 @@ | |||||||
| /* |  | ||||||
|  * BinReader.cpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2015 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Io/BinReader.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
|  |  | ||||||
| #if (defined __GNUC__)||(defined __clang__) |  | ||||||
| #pragma GCC diagnostic ignored "-Wunreachable-code" |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| BinIO::BinIO(string msg, string loc) |  | ||||||
| : runtime_error("Binary reader error: " + msg + " (" + loc + ")") |  | ||||||
| {} |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                         BinReader implementation                           * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // constructor ///////////////////////////////////////////////////////////////// |  | ||||||
| BinReader::BinReader(const string fileName, const uint32_t endianness, |  | ||||||
|                      const bool isColMaj) |  | ||||||
| { |  | ||||||
|     open(fileName, endianness, isColMaj); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // I/O ///////////////////////////////////////////////////////////////////////// |  | ||||||
| void BinReader::open(const string fileName, const uint32_t endianness, |  | ||||||
|                      const bool isColMaj) |  | ||||||
| { |  | ||||||
|     fileName_   = fileName; |  | ||||||
|     endianness_ = endianness; |  | ||||||
|     isColMaj_   = isColMaj; |  | ||||||
|     file_.reset(new ifstream(fileName_, ios::in|ios::binary|ios::ate)); |  | ||||||
|     if (!file_->is_open()) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "impossible to open file '" + fileName_ + "'"); |  | ||||||
|     } |  | ||||||
|     size_ = static_cast<size_t>(file_->tellg()); |  | ||||||
|     file_->seekg(0, ios::beg); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void BinReader::close(void) |  | ||||||
| { |  | ||||||
|     file_.reset(nullptr); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| std::string BinReader::read(void) |  | ||||||
| { |  | ||||||
|     std::string s; |  | ||||||
|     char        c = 'a'; |  | ||||||
|      |  | ||||||
|     while (c != '\n') |  | ||||||
|     { |  | ||||||
|         c = read<char>(); |  | ||||||
|         if (c != '\n') |  | ||||||
|         { |  | ||||||
|             s.push_back(c); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return s; |  | ||||||
| } |  | ||||||
| @@ -1,196 +0,0 @@ | |||||||
| /* |  | ||||||
|  * BinReader.hpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2015 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef LatAnalyze_BinReader_hpp_ |  | ||||||
| #define LatAnalyze_BinReader_hpp_ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| // I/O exception |  | ||||||
| class BinIO: public std::runtime_error |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     BinIO(std::string msg, std::string loc); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                        Byte manipulation utilities                         * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| class Endianness |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     enum: uint32_t |  | ||||||
|     { |  | ||||||
|         little  = 0x00000001, |  | ||||||
|         big     = 0x01000000, |  | ||||||
|         unknown = 0xffffffff |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| class ByteManip |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     static constexpr uint32_t getHostEndianness(void) |  | ||||||
|     { |  | ||||||
|         return ((0xffffffff & 1) == Endianness::little) ? Endianness::little |  | ||||||
|             : (((0xffffffff & 1) == Endianness::big) ? Endianness::big |  | ||||||
|                : Endianness::unknown); |  | ||||||
|     } |  | ||||||
|     template <typename T> |  | ||||||
|     static T swapBytes(const T); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                         template implementation                            * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| template <typename T> |  | ||||||
| T ByteManip::swapBytes(const T u) |  | ||||||
| { |  | ||||||
|     static_assert (CHAR_BIT == 8, "CHAR_BIT != 8"); |  | ||||||
|      |  | ||||||
|     union |  | ||||||
|     { |  | ||||||
|         T             u; |  | ||||||
|         unsigned char u8[sizeof(T)]; |  | ||||||
|     } source, dest; |  | ||||||
|      |  | ||||||
|     source.u = u; |  | ||||||
|     for (size_t k = 0; k < sizeof(T); ++k) |  | ||||||
|     { |  | ||||||
|         dest.u8[k] = source.u8[sizeof(T) - k - 1]; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return dest.u; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                        Utility to read binary files                        * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| class BinReader |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     // constructor |  | ||||||
|     BinReader(void) = default; |  | ||||||
|     BinReader(const std::string fileName, |  | ||||||
|               const uint32_t endianness = ByteManip::getHostEndianness(), |  | ||||||
|               const bool isColMaj = false); |  | ||||||
|     // destructor |  | ||||||
|     virtual ~BinReader(void) = default; |  | ||||||
|     // I/O |  | ||||||
|     void       open(const std::string fileName, |  | ||||||
|                     const uint32_t endianness = ByteManip::getHostEndianness(), |  | ||||||
|                     const bool isColMaj = false); |  | ||||||
|     void       close(void); |  | ||||||
|     template <typename T> |  | ||||||
|     void       read(T *pt, Index size); |  | ||||||
|     template <typename T> |  | ||||||
|     T          read(void); |  | ||||||
|     template <typename T> |  | ||||||
|     MatBase<T> read(const Index nRow, const Index nCol); |  | ||||||
| private: |  | ||||||
|     std::unique_ptr<std::ifstream> file_{nullptr}; |  | ||||||
|     std::string                    fileName_; |  | ||||||
|     size_t                         size_; |  | ||||||
|     uint32_t                       endianness_; |  | ||||||
|     bool                           isColMaj_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                         template implementation                            * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| template <typename T> |  | ||||||
| void BinReader::read(T *pt, Index n) |  | ||||||
| { |  | ||||||
|     if (file_ != nullptr) |  | ||||||
|     { |  | ||||||
|         file_->read(reinterpret_cast<char *>(pt), |  | ||||||
|                     static_cast<long>(sizeof(T))*n); |  | ||||||
|         if (endianness_ != ByteManip::getHostEndianness()) |  | ||||||
|         { |  | ||||||
|             for (Index i = 0; i < n; ++i) |  | ||||||
|             { |  | ||||||
|                 pt[i] = ByteManip::swapBytes(pt[i]); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "file is not opened"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| T BinReader::read(void) |  | ||||||
| { |  | ||||||
|     T x; |  | ||||||
|      |  | ||||||
|     if (file_ != nullptr) |  | ||||||
|     { |  | ||||||
|         read(&x, 1); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "file is not opened"); |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return x; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| std::string BinReader::read(void); |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| MatBase<T> BinReader::read(const Index nRow, const Index nCol) |  | ||||||
| { |  | ||||||
|     MatBase<T> m; |  | ||||||
|      |  | ||||||
|     // Eigen matrices use column-major ordering |  | ||||||
|     if (isColMaj_) |  | ||||||
|     { |  | ||||||
|         m.resize(nRow, nCol); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         m.resize(nCol, nRow); |  | ||||||
|     } |  | ||||||
|     if (file_ != nullptr) |  | ||||||
|     { |  | ||||||
|         read(m.data(), nRow*nCol); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "file is not opened"); |  | ||||||
|     } |  | ||||||
|     if (isColMaj_) |  | ||||||
|     { |  | ||||||
|         return m; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return m.transpose(); |  | ||||||
|  |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // LatAnalyze_BinReader_hpp_ |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,84 +0,0 @@ | |||||||
| /* |  | ||||||
|  * XmlReader.cpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Io/XmlReader.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| XmlParsing::XmlParsing(string msg, string loc) |  | ||||||
| : runtime_error("XML reader error: " + msg + " (" + loc + ")") |  | ||||||
| {} |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                         XmlReader implementation                           * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // constructor ///////////////////////////////////////////////////////////////// |  | ||||||
| XmlReader::XmlReader(const string &fileName) |  | ||||||
| { |  | ||||||
|     open(fileName); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IO ////////////////////////////////////////////////////////////////////////// |  | ||||||
| void XmlReader::open(const string &fileName) |  | ||||||
| { |  | ||||||
|     name_ = fileName; |  | ||||||
|     doc_.LoadFile(name_.c_str()); |  | ||||||
|     if (doc_.Error()) |  | ||||||
|     { |  | ||||||
|         string errMsg; |  | ||||||
|          |  | ||||||
|         if (doc_.ErrorStr()) |  | ||||||
|         { |  | ||||||
|             errMsg = doc_.ErrorStr(); |  | ||||||
|         } |  | ||||||
|         LATAN_ERROR(Io, "cannot open file " + fileName + " [tinyxml2 code " |  | ||||||
|                   + strFrom(doc_.ErrorID()) + ": " + errMsg + "]"); |  | ||||||
|     } |  | ||||||
|     root_ = doc_.RootElement(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // XML structure access //////////////////////////////////////////////////////// |  | ||||||
| const XmlNode * XmlReader::getNextNode(const XmlNode *node, |  | ||||||
|                                        const string &nodeName) |  | ||||||
| { |  | ||||||
|     const char *pt = (nodeName.empty()) ? nullptr : nodeName.c_str(); |  | ||||||
|      |  | ||||||
|     if (node) |  | ||||||
|     { |  | ||||||
|         return node->NextSiblingElement(pt); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return nullptr; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const XmlNode * XmlReader::getNextSameNode(const XmlNode *node) |  | ||||||
| { |  | ||||||
|     if (node) |  | ||||||
|     { |  | ||||||
|         return getNextNode(node, node->Name()); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return nullptr; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,235 +0,0 @@ | |||||||
| /* |  | ||||||
|  * XmlReader.hpp, part of LatAnalyze |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef LatAnalyze_XmlReader_hpp_ |  | ||||||
| #define LatAnalyze_XmlReader_hpp_ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
|  |  | ||||||
| #pragma GCC diagnostic push |  | ||||||
| #pragma GCC diagnostic ignored "-Wsign-conversion" |  | ||||||
| #include <LatAnalyze/Io/Xml/tinyxml2.hpp> |  | ||||||
| #pragma GCC diagnostic pop |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| // parsing exception |  | ||||||
| class XmlParsing: public std::runtime_error |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     XmlParsing(std::string msg, std::string loc); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                        XML parameter file reader                           * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| typedef tinyxml2::XMLElement XmlNode; |  | ||||||
|  |  | ||||||
| class XmlReader |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     // constructor |  | ||||||
|     XmlReader(void) = default; |  | ||||||
|     explicit XmlReader(const std::string &fileName); |  | ||||||
|     // destructor |  | ||||||
|     virtual ~XmlReader(void) = default; |  | ||||||
|     // IO |  | ||||||
|     void open(const std::string &fileName); |  | ||||||
|     // XML structure access |  | ||||||
|     template <typename... Strs> |  | ||||||
|     static const XmlNode * getFirstNode(const XmlNode *startNode, |  | ||||||
|                                         const std::string &nodeName, |  | ||||||
|                                         Strs... nodeNames); |  | ||||||
|     template <typename... Strs> |  | ||||||
|     const XmlNode * getFirstNode(const std::string &nodeName, |  | ||||||
|                                  Strs... nodeNames) const; |  | ||||||
|     static const XmlNode * getNextNode(const XmlNode *node, |  | ||||||
|                                        const std::string &nodeName = ""); |  | ||||||
|     static const XmlNode * getNextSameNode(const XmlNode *node); |  | ||||||
|     template <typename T> |  | ||||||
|     static T getValue(const XmlNode *node); |  | ||||||
|     template <typename T, typename... Strs> |  | ||||||
|     static T getFirstValue(const XmlNode *startNode, |  | ||||||
|                            const std::string &nodeName, Strs... nodeNames); |  | ||||||
|     template <typename T, typename... Strs> |  | ||||||
|     T getFirstValue(const std::string &nodeName, Strs... nodeNames) const; |  | ||||||
|     template <typename T, typename... Strs> |  | ||||||
|     static std::vector<T> getAllValues(const XmlNode *startNode, |  | ||||||
|                                        const std::string &nodeName, |  | ||||||
|                                        Strs... nodeNames); |  | ||||||
|     template <typename T, typename... Strs> |  | ||||||
|     std::vector<T> getAllValues(const std::string &nodeName, |  | ||||||
|                                 Strs... nodeNames) const; |  | ||||||
|     // XML structure test |  | ||||||
|     template <typename... Strs> |  | ||||||
|     static bool hasNode(const XmlNode *startNode, const std::string &nodeName, |  | ||||||
|                         Strs... nodeNames); |  | ||||||
|     template <typename... Strs> |  | ||||||
|     bool hasNode(const std::string &nodeName, Strs... nodeNames) const; |  | ||||||
| private: |  | ||||||
|     std::string           name_; |  | ||||||
|     tinyxml2::XMLDocument doc_; |  | ||||||
|     XmlNode               *root_{nullptr}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                     XmlReader template implementation                      * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // XML structure access //////////////////////////////////////////////////////// |  | ||||||
| template <typename... Strs> |  | ||||||
| const XmlNode * XmlReader::getFirstNode(const XmlNode *startNode, |  | ||||||
|                                         const std::string &nodeName, |  | ||||||
|                                         Strs... nodeNames) |  | ||||||
| { |  | ||||||
|     static_assert(static_or<std::is_assignable<std::string, Strs>::value...>::value, |  | ||||||
|                   "getFirstNode arguments are not compatible with std::string"); |  | ||||||
|      |  | ||||||
|     const unsigned int nName  = sizeof...(nodeNames) + 1; |  | ||||||
|     const std::string  name[] = {nodeName, nodeNames...}; |  | ||||||
|     const XmlNode      *node  = startNode; |  | ||||||
|      |  | ||||||
|     if (!node) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "root node is null, no XML file opened"); |  | ||||||
|     } |  | ||||||
|     for (unsigned int i = 0; i < nName; ++i) |  | ||||||
|     { |  | ||||||
|         node = node->FirstChildElement(name[i].c_str()); |  | ||||||
|         if (!node) |  | ||||||
|         { |  | ||||||
|             LATAN_ERROR(Io, "XML node " + name[i] + " not found"); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return node; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename... Strs> |  | ||||||
| const XmlNode * XmlReader::getFirstNode(const std::string &nodeName, |  | ||||||
|                                         Strs... nodeNames) const |  | ||||||
| { |  | ||||||
|     if (!root_) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "root node is null, no XML file opened"); |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return getFirstNode(root_, nodeName, nodeNames...); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| T XmlReader::getValue(const XmlNode *node) |  | ||||||
| { |  | ||||||
|     if (node) |  | ||||||
|     { |  | ||||||
|         if (node->GetText()) |  | ||||||
|         { |  | ||||||
|             return Latan::strTo<T>(node->GetText()); |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             return T(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return T(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T, typename... Strs> |  | ||||||
| T XmlReader::getFirstValue(const XmlNode *startNode, |  | ||||||
|                            const std::string &nodeName, Strs... nodeNames) |  | ||||||
| { |  | ||||||
|     const XmlNode *node = getFirstNode(startNode, nodeName, nodeNames...); |  | ||||||
|      |  | ||||||
|     return getValue<T>(node); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T, typename... Strs> |  | ||||||
| T XmlReader::getFirstValue(const std::string &nodeName, Strs... nodeNames) const |  | ||||||
| { |  | ||||||
|     return getFirstValue<T>(root_, nodeName, nodeNames...); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T, typename... Strs> |  | ||||||
| std::vector<T> XmlReader::getAllValues(const XmlNode *startNode, |  | ||||||
|                                        const std::string &nodeName, |  | ||||||
|                                        Strs... nodeNames) |  | ||||||
| { |  | ||||||
|     const XmlNode  *node = getFirstNode(startNode, nodeName, nodeNames...); |  | ||||||
|     std::vector<T> value; |  | ||||||
|      |  | ||||||
|     while (node) |  | ||||||
|     { |  | ||||||
|         value.push_back(getValue<T>(node)); |  | ||||||
|         node = getNextSameNode(node); |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     return value; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T, typename... Strs> |  | ||||||
| std::vector<T> XmlReader::getAllValues(const std::string &nodeName, |  | ||||||
|                                        Strs... nodeNames) const |  | ||||||
| { |  | ||||||
|     return getAllValues<T>(root_, nodeName, nodeNames...); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // XML structure test ////////////////////////////////////////////////////////// |  | ||||||
| template <typename... Strs> |  | ||||||
| bool XmlReader::hasNode(const XmlNode *startNode, const std::string &nodeName, |  | ||||||
|              Strs... nodeNames) |  | ||||||
| { |  | ||||||
|     static_assert(static_or<std::is_assignable<std::string, Strs>::value...>::value, |  | ||||||
|                   "hasNode arguments are not compatible with std::string"); |  | ||||||
|  |  | ||||||
|     const unsigned int nName  = sizeof...(nodeNames) + 1; |  | ||||||
|     const std::string  name[] = {nodeName, nodeNames...}; |  | ||||||
|     const XmlNode      *node  = startNode; |  | ||||||
|  |  | ||||||
|     if (!node) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "root node is null, no XML file opened"); |  | ||||||
|     } |  | ||||||
|     for (unsigned int i = 0; i < nName; ++i) |  | ||||||
|     { |  | ||||||
|         node = node->FirstChildElement(name[i].c_str()); |  | ||||||
|         if (!node) |  | ||||||
|         { |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename... Strs> |  | ||||||
| bool XmlReader::hasNode(const std::string &nodeName, Strs... nodeNames) const |  | ||||||
| { |  | ||||||
|     if (!root_) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Io, "root node is null, no XML file opened"); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return hasNode(root_, nodeName, nodeNames...); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // LatAnalyze_XmlReader_hpp_ |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * IoObject.hpp, part of LatAnalyze 3 |  * IoObject.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
							
								
								
									
										183
									
								
								lib/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										183
									
								
								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,121 +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/Utilities.cpp               \ |     Math.cpp               \ | ||||||
|     Functional/CompiledFunction.cpp  \ |     MathInterpreter.cpp    \ | ||||||
|     Functional/CompiledModel.cpp     \ |     MathParser.ypp         \ | ||||||
|     Functional/Function.cpp          \ |     Minimizer.cpp          \ | ||||||
|     Functional/Model.cpp             \ |     Model.cpp              \ | ||||||
|     Functional/TabFunction.cpp       \ |     Plot.cpp               \ | ||||||
|     Io/AsciiFile.cpp                 \ |     RootFinder.cpp         \ | ||||||
|     Io/AsciiParser.ypp               \ |     Solver.cpp             \ | ||||||
|     Io/BinReader.cpp                 \ |     StatArray.cpp          \ | ||||||
|     Io/File.cpp                      \ |     TabFunction.cpp        \ | ||||||
|     Io/Hdf5File.cpp                  \ |     XYSampleData.cpp       \ | ||||||
|     Io/Io.cpp                        \ |     XYStatData.cpp         \ | ||||||
|     Io/XmlReader.cpp                 \ |  | ||||||
|     Io/Xml/tinyxml2.cpp              \ |  | ||||||
|     Numerical/Derivative.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/stdincludes.hpp             \ |     MathInterpreter.hpp    \ | ||||||
|     Core/Utilities.hpp               \ |     MatSample.hpp          \ | ||||||
|     Functional/CompiledFunction.hpp  \ |     Minimizer.hpp          \ | ||||||
|     Functional/CompiledModel.hpp     \ |     Model.hpp              \ | ||||||
|     Functional/Function.hpp          \ |     ParserState.hpp        \ | ||||||
|     Functional/Model.hpp             \ |     Plot.hpp               \ | ||||||
|     Functional/TabFunction.hpp       \ |     RootFinder.hpp         \ | ||||||
|     Io/AsciiFile.hpp                 \ |     TabFunction.hpp        \ | ||||||
|     Io/BinReader.hpp                 \ |     Solver.hpp             \ | ||||||
|     Io/File.hpp                      \ |     StatArray.hpp          \ | ||||||
|     Io/Hdf5File.hpp                  \ |     XYSampleData.hpp       \ | ||||||
|     Io/Io.hpp                        \ |     XYStatData.hpp | ||||||
|     Io/IoObject.hpp                  \ | if HAVE_HDF5 | ||||||
|     Io/XmlReader.hpp                 \ |     libLatAnalyze_la_SOURCES += Hdf5File.cpp | ||||||
|     Numerical/Derivative.hpp         \ |     libLatAnalyze_la_HEADERS += Hdf5File.hpp | ||||||
|     Numerical/FFT.hpp                \ | endif | ||||||
|     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 | ||||||
| 
 | 
 | ||||||
| @@ -228,7 +228,7 @@ Index MatSample<T>::BlockTemplate<S>::getNCol(void) const | |||||||
| // assignement operators ///////////////////////////////////////////////////////
 | // assignement operators ///////////////////////////////////////////////////////
 | ||||||
| template <typename T> | template <typename T> | ||||||
| template <class S> | template <class S> | ||||||
| typename MatSample<T>::template BlockTemplate<S> & | MatSample<T>::BlockTemplate<S> & | ||||||
| MatSample<T>::BlockTemplate<S>::operator=(const S &sample) | MatSample<T>::BlockTemplate<S>::operator=(const S &sample) | ||||||
| { | { | ||||||
|     FOR_STAT_ARRAY(sample_, s) |     FOR_STAT_ARRAY(sample_, s) | ||||||
| @@ -241,7 +241,7 @@ MatSample<T>::BlockTemplate<S>::operator=(const S &sample) | |||||||
| 
 | 
 | ||||||
| template <typename T> | template <typename T> | ||||||
| template <class S> | template <class S> | ||||||
| typename MatSample<T>::template BlockTemplate<S> & | MatSample<T>::BlockTemplate<S> & | ||||||
| MatSample<T>::BlockTemplate<S>::operator=(const S &&sample) | MatSample<T>::BlockTemplate<S>::operator=(const S &&sample) | ||||||
| { | { | ||||||
|     *this = sample; |     *this = sample; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Math.cpp, part of LatAnalyze 3 |  * Math.cpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -17,7 +17,7 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Math.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| #include <gsl/gsl_cdf.h> | #include <gsl/gsl_cdf.h> | ||||||
| 
 | 
 | ||||||
| @@ -107,14 +107,8 @@ DEF_STD_FUNC_1ARG(fabs) | |||||||
| 
 | 
 | ||||||
| // p-value
 | // p-value
 | ||||||
| auto chi2PValueVecFunc = [](const double arg[2]) | auto chi2PValueVecFunc = [](const double arg[2]) | ||||||
| { |  | ||||||
|     return 2.*min(gsl_cdf_chisq_P(arg[0], arg[1]), gsl_cdf_chisq_Q(arg[0], arg[1])); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| auto chi2CcdfVecFunc = [](const double arg[2]) |  | ||||||
| { | { | ||||||
|     return gsl_cdf_chisq_Q(arg[0], arg[1]); |     return gsl_cdf_chisq_Q(arg[0], arg[1]); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| DoubleFunction MATH_NAMESPACE::chi2PValue(chi2PValueVecFunc, 2); | DoubleFunction MATH_NAMESPACE::chi2PValue(chi2PValueVecFunc, 2); | ||||||
| DoubleFunction MATH_NAMESPACE::chi2Ccdf(chi2CcdfVecFunc, 2); |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Math.hpp, part of LatAnalyze 3 |  * Math.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,8 +21,8 @@ | |||||||
| #define	Latan_Math_hpp_ | #define	Latan_Math_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Functional/Function.hpp> | #include <LatAnalyze/Function.hpp> | ||||||
| #include <LatAnalyze/Core/MathInterpreter.hpp> | #include <LatAnalyze/MathInterpreter.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -72,10 +72,8 @@ namespace MATH_NAMESPACE | |||||||
|     DMat varToCorr(const DMat &var); |     DMat varToCorr(const DMat &var); | ||||||
|      |      | ||||||
|     // 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(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -153,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,7 +17,7 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Numerical/MinuitMinimizer.hpp> | #include <LatAnalyze/MinuitMinimizer.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| #include <Minuit2/Minuit2Minimizer.h> | #include <Minuit2/Minuit2Minimizer.h> | ||||||
| #include <Math/Functor.h> | #include <Math/Functor.h> | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * MinuitMinimizer.hpp, part of LatAnalyze 3 |  * MinuitMinimizer.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,8 +21,8 @@ | |||||||
| #define Latan_MinuitMinimizer_hpp_ | #define Latan_MinuitMinimizer_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Functional/Function.hpp> | #include <LatAnalyze/Function.hpp> | ||||||
| #include <LatAnalyze/Numerical/Minimizer.hpp> | #include <LatAnalyze/Minimizer.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Model.cpp, part of LatAnalyze 3 |  * Model.cpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -17,7 +17,7 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Functional/Model.hpp> | #include <LatAnalyze/Model.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * Model.hpp, part of LatAnalyze 3 |  * Model.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,8 +21,8 @@ | |||||||
| #define Latan_Model_hpp_ | #define Latan_Model_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Functional/Function.hpp> | #include <LatAnalyze/Function.hpp> | ||||||
| #include <LatAnalyze/Core/Mat.hpp> | #include <LatAnalyze/Mat.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * NloptMinimizer.cpp, part of LatAnalyze 3 |  * NloptMinimizer.cpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -17,7 +17,7 @@ | |||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 |  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Numerical/NloptMinimizer.hpp> | #include <LatAnalyze/NloptMinimizer.hpp> | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace std; | using namespace std; | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * NloptMinimizer.hpp, part of LatAnalyze 3 |  * NloptMinimizer.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -21,9 +21,9 @@ | |||||||
| #define Latan_NloptMinimizer_hpp_ | #define Latan_NloptMinimizer_hpp_ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Numerical/Derivative.hpp> | #include <LatAnalyze/Derivative.hpp> | ||||||
| #include <LatAnalyze/Functional/Function.hpp> | #include <LatAnalyze/Function.hpp> | ||||||
| #include <LatAnalyze/Numerical/Minimizer.hpp> | #include <LatAnalyze/Minimizer.hpp> | ||||||
| #include <nlopt.hpp> | #include <nlopt.hpp> | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| @@ -1,53 +0,0 @@ | |||||||
| /* |  | ||||||
|  * FFT.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 Latan_FFT_hpp_ |  | ||||||
| #define Latan_FFT_hpp_ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                             FFT abstract class                             * |  | ||||||
|  ******************************************************************************/ |  | ||||||
|  |  | ||||||
| class FFT |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     enum |  | ||||||
|     { |  | ||||||
|       Forward  = 0, |  | ||||||
|       Backward = 1 |  | ||||||
|     }; |  | ||||||
| public: |  | ||||||
|   // constructor |  | ||||||
|   FFT(void) = default; |  | ||||||
|   FFT(const Index size); |  | ||||||
|   // destructor |  | ||||||
|   virtual ~FFT(void) = default; |  | ||||||
|   // size |  | ||||||
|   virtual void resize(const Index size) = 0; |  | ||||||
|   // FFT |  | ||||||
|   virtual void operator()(CMat &x, const unsigned int dir = FFT::Forward) = 0; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // Latan_FFT_hpp_ |  | ||||||
| @@ -1,90 +0,0 @@ | |||||||
| /* |  | ||||||
|  * GslFFT.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/Numerical/GslFFT.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                           GslFFT implementation                            * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // constructor ///////////////////////////////////////////////////////////////// |  | ||||||
| GslFFT::GslFFT(const Index size) |  | ||||||
| { |  | ||||||
|     resize(size); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // destructor ////////////////////////////////////////////////////////////////// |  | ||||||
| GslFFT::~GslFFT(void) |  | ||||||
| { |  | ||||||
|     clear(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // size //////////////////////////////////////////////////////////////////////// |  | ||||||
| void GslFFT::resize(const Index size) |  | ||||||
| { |  | ||||||
|     if (size_ != size) |  | ||||||
|     { |  | ||||||
|         clear(); |  | ||||||
|         size_      = size; |  | ||||||
|         wavetable_ = gsl_fft_complex_wavetable_alloc(size_); |  | ||||||
|         workspace_ = gsl_fft_complex_workspace_alloc(size_); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // fft ///////////////////////////////////////////////////////////////////////// |  | ||||||
| void GslFFT::operator()(CMat &x, const unsigned int dir) |  | ||||||
| { |  | ||||||
|     if (x.size() != size_) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Size, "wrong input vector size"); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         switch (dir) |  | ||||||
|         { |  | ||||||
|             case FFT::Forward: |  | ||||||
|                 gsl_fft_complex_forward((double *)x.data(), 1, size_, |  | ||||||
|                                         wavetable_, workspace_); |  | ||||||
|                 break; |  | ||||||
|             case FFT::Backward: |  | ||||||
|                 gsl_fft_complex_backward((double *)x.data(), 1, size_, |  | ||||||
|                                          wavetable_, workspace_); |  | ||||||
|                 break; |  | ||||||
|             default: |  | ||||||
|                 LATAN_ERROR(Argument, "invalid FT direction"); |  | ||||||
|                 break; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // destroy GSL objects ///////////////////////////////////////////////////////// |  | ||||||
| void GslFFT::clear(void) |  | ||||||
| { |  | ||||||
|     if (!wavetable_) |  | ||||||
|     { |  | ||||||
|         gsl_fft_complex_wavetable_free(wavetable_); |  | ||||||
|     } |  | ||||||
|     if (!workspace_) |  | ||||||
|     { |  | ||||||
|         gsl_fft_complex_workspace_free(workspace_); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,57 +0,0 @@ | |||||||
| /* |  | ||||||
|  * GslFFT.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 Latan_GslFFT_hpp_ |  | ||||||
| #define Latan_GslFFT_hpp_ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
| #include <LatAnalyze/Core/Mat.hpp> |  | ||||||
| #include <LatAnalyze/Numerical/FFT.hpp> |  | ||||||
| #include <gsl/gsl_fft_complex.h> |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                                 GSL FFT                                    * |  | ||||||
|  ******************************************************************************/ |  | ||||||
|  |  | ||||||
| class GslFFT: public FFT |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     // constructors |  | ||||||
|     GslFFT(void) = default; |  | ||||||
|     GslFFT(const Index size); |  | ||||||
|     // destructor |  | ||||||
|     virtual ~GslFFT(void); |  | ||||||
|     // size |  | ||||||
|     void resize(const Index size); |  | ||||||
|     // fft |  | ||||||
|     virtual void operator()(CMat &x, const unsigned int dir = FFT::Forward); |  | ||||||
| private: |  | ||||||
|     // destroy GSL objects |  | ||||||
|     void clear(void); |  | ||||||
| private: |  | ||||||
|     Index                     size_{0}; |  | ||||||
|     gsl_fft_complex_wavetable *wavetable_{nullptr}; |  | ||||||
|     gsl_fft_complex_workspace *workspace_{nullptr}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // Latan_GslFFT_hpp_ |  | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| /*
 | /*
 | ||||||
|  * ParserState.hpp, part of LatAnalyze 3 |  * ParserState.hpp, part of LatAnalyze 3 | ||||||
|  * |  * | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  * Copyright (C) 2013 - 2016 Antonin Portelli | ||||||
|  * |  * | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  * LatAnalyze 3 is free software: you can redistribute it and/or modify | ||||||
|  * it under the terms of the GNU General Public License as published by |  * it under the terms of the GNU General Public License as published by | ||||||
| @@ -1,417 +0,0 @@ | |||||||
| /* |  | ||||||
|  * CorrelatorFitter.cpp, part of LatAnalyze 3 |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2020 Antonin Portelli |  | ||||||
|  * |  | ||||||
|  * LatAnalyze 3 is free software: you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License as published by |  | ||||||
|  * the Free Software Foundation, either version 3 of the License, or |  | ||||||
|  * (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * LatAnalyze 3 is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with LatAnalyze 3.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Physics/CorrelatorFitter.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                           Correlator models                                * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| DoubleModel CorrelatorModels::makeExpModel(const Index nState) |  | ||||||
| { |  | ||||||
|     DoubleModel mod; |  | ||||||
|  |  | ||||||
|     mod.setFunction([nState](const double *x, const double *p) |  | ||||||
|     { |  | ||||||
|         double res = 0.; |  | ||||||
|  |  | ||||||
|         for (unsigned int i = 0; i < nState; ++i) |  | ||||||
|         { |  | ||||||
|             res += p[2*i + 1]*exp(-p[2*i]*x[0]); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return res; |  | ||||||
|     }, 1, 2*nState); |  | ||||||
|     for (unsigned int i = 0; i < nState; ++i) |  | ||||||
|     { |  | ||||||
|         mod.parName().setName(2*i, "E_" + strFrom(i)); |  | ||||||
|         mod.parName().setName(2*i + 1, "Z_" + strFrom(i)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return mod; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DoubleModel CorrelatorModels::makeCoshModel(const Index nState, const Index nt) |  | ||||||
| { |  | ||||||
|     DoubleModel mod; |  | ||||||
|  |  | ||||||
|     mod.setFunction([nState, nt](const double *x, const double *p) |  | ||||||
|     { |  | ||||||
|         double res = 0.; |  | ||||||
|  |  | ||||||
|         for (unsigned int i = 0; i < nState; ++i) |  | ||||||
|         { |  | ||||||
|             res += p[2*i + 1]*(exp(-p[2*i]*x[0]) + exp(-p[2*i]*(nt - x[0]))); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return res; |  | ||||||
|     }, 1, 2*nState); |  | ||||||
|     for (unsigned int i = 0; i < nState; ++i) |  | ||||||
|     { |  | ||||||
|         mod.parName().setName(2*i, "E_" + strFrom(i)); |  | ||||||
|         mod.parName().setName(2*i + 1, "Z_" + strFrom(i)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return mod; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DoubleModel CorrelatorModels::makeSinhModel(const Index nState, const Index nt) |  | ||||||
| { |  | ||||||
|     DoubleModel mod; |  | ||||||
|  |  | ||||||
|     mod.setFunction([nState, nt](const double *x, const double *p) |  | ||||||
|     { |  | ||||||
|         double res = 0.; |  | ||||||
|  |  | ||||||
|         for (unsigned int i = 0; i < nState; ++i) |  | ||||||
|         { |  | ||||||
|             res += p[2*i + 1]*(exp(-p[2*i]*x[0]) - exp(-p[2*i]*(nt - x[0]))); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return res; |  | ||||||
|     }, 1, 2*nState); |  | ||||||
|     for (unsigned int i = 0; i < nState; ++i) |  | ||||||
|     { |  | ||||||
|         mod.parName().setName(2*i, "E_" + strFrom(i)); |  | ||||||
|         mod.parName().setName(2*i + 1, "Z_" + strFrom(i)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return mod; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DoubleModel CorrelatorModels::makeConstModel(void) |  | ||||||
| { |  | ||||||
|     DoubleModel mod; |  | ||||||
|  |  | ||||||
|     mod.setFunction([](const double *x __dumb, const double *p __dumb) |  | ||||||
|     { |  | ||||||
|         return p[0]; |  | ||||||
|     }, 1, 1); |  | ||||||
|     mod.parName().setName(0, "cst"); |  | ||||||
|  |  | ||||||
|     return mod; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DoubleModel CorrelatorModels::makeLinearModel(void) |  | ||||||
| { |  | ||||||
|     DoubleModel mod; |  | ||||||
|  |  | ||||||
|     mod.setFunction([](const double *x, const double *p) |  | ||||||
|     { |  | ||||||
|         return p[1] + p[0]*x[0]; |  | ||||||
|     }, 1, 2); |  | ||||||
|  |  | ||||||
|     return mod; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| CorrelatorModels::ModelPar CorrelatorModels::parseModel(const string s) |  | ||||||
| { |  | ||||||
|     smatch   sm; |  | ||||||
|     ModelPar par; |  | ||||||
|  |  | ||||||
|     if (regex_match(s, sm, regex("exp([0-9]+)"))) |  | ||||||
|     { |  | ||||||
|         par.type   = CorrelatorType::exp; |  | ||||||
|         par.nState = strTo<Index>(sm[1].str()); |  | ||||||
|     } |  | ||||||
|     else if (regex_match(s, sm, regex("cosh([0-9]+)"))) |  | ||||||
|     { |  | ||||||
|         par.type   = CorrelatorType::cosh; |  | ||||||
|         par.nState = strTo<Index>(sm[1].str()); |  | ||||||
|     } |  | ||||||
|     else if (regex_match(s, sm, regex("sinh([0-9]+)"))) |  | ||||||
|     { |  | ||||||
|         par.type   = CorrelatorType::sinh; |  | ||||||
|         par.nState = strTo<Index>(sm[1].str()); |  | ||||||
|     } |  | ||||||
|     else if (s == "linear") |  | ||||||
|     { |  | ||||||
|         par.type   = CorrelatorType::linear; |  | ||||||
|         par.nState = 1; |  | ||||||
|     } |  | ||||||
|     else if (s == "cst") |  | ||||||
|     { |  | ||||||
|         par.type   = CorrelatorType::cst; |  | ||||||
|         par.nState = 1; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         par.type   = CorrelatorType::undefined; |  | ||||||
|         par.nState = 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return par; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DoubleModel CorrelatorModels::makeModel(const CorrelatorModels::ModelPar par, |  | ||||||
|                                         const Index nt) |  | ||||||
| { |  | ||||||
|     switch (par.type) |  | ||||||
|     { |  | ||||||
|     case CorrelatorType::undefined: |  | ||||||
|         LATAN_ERROR(Argument, "correlator type is undefined"); |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::exp: |  | ||||||
|         return makeExpModel(par.nState); |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::cosh: |  | ||||||
|         return makeCoshModel(par.nState, nt); |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::sinh: |  | ||||||
|         return makeSinhModel(par.nState, nt); |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::linear: |  | ||||||
|         return makeLinearModel(); |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::cst: |  | ||||||
|         return makeConstModel(); |  | ||||||
|         break; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DVec CorrelatorModels::parameterGuess(const DMatSample &corr,  |  | ||||||
|                                       const ModelPar par) |  | ||||||
| { |  | ||||||
|     DVec  init; |  | ||||||
|     Index nt = corr[central].size(); |  | ||||||
|  |  | ||||||
|     switch (par.type) |  | ||||||
|     { |  | ||||||
|     case CorrelatorType::undefined: |  | ||||||
|         LATAN_ERROR(Argument, "correlator type is undefined"); |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::exp: |  | ||||||
|     case CorrelatorType::cosh: |  | ||||||
|     case CorrelatorType::sinh: |  | ||||||
|         init.resize(2*par.nState); |  | ||||||
|         init(0) = log(corr[central](nt/4)/corr[central](nt/4 + 1)); |  | ||||||
|         init(1) = corr[central](nt/4)/(exp(-init(0)*nt/4)); |  | ||||||
|         for (Index p = 2; p < init.size(); p += 2) |  | ||||||
|         { |  | ||||||
|             init(p)     = 2*init(p - 2); |  | ||||||
|             init(p + 1) = init(p - 1)/2.; |  | ||||||
|         } |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::linear: |  | ||||||
|         init.resize(2); |  | ||||||
|         init(0) = corr[central](nt/4) - corr[central](nt/4 + 1, 0); |  | ||||||
|         init(1) = corr[central](nt/4, 0) + nt/4*init(0); |  | ||||||
|         break; |  | ||||||
|     case CorrelatorType::cst: |  | ||||||
|         init.resize(1); |  | ||||||
|         init(0) = corr[central](nt/4); |  | ||||||
|         break; |  | ||||||
|     default: |  | ||||||
|         break; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return init; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                         Correlator utilities                               * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| DMatSample CorrelatorUtils::shift(const DMatSample &c, const Index ts) |  | ||||||
| { |  | ||||||
|     if (ts != 0) |  | ||||||
|     { |  | ||||||
|         const Index nt  = c[central].rows(); |  | ||||||
|         DMatSample  buf = c; |  | ||||||
|  |  | ||||||
|         FOR_STAT_ARRAY(buf, s) |  | ||||||
|         { |  | ||||||
|             for (Index t = 0; t < nt; ++t) |  | ||||||
|             { |  | ||||||
|                 buf[s]((t - ts + nt)%nt) = c[s](t); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return buf; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return c; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DMatSample CorrelatorUtils::fold(const DMatSample &c) |  | ||||||
| { |  | ||||||
|     const Index nt  = c[central].rows(); |  | ||||||
|     DMatSample  buf = c; |  | ||||||
|  |  | ||||||
|     FOR_STAT_ARRAY(buf, s) |  | ||||||
|     { |  | ||||||
|         for (Index t = 0; t < nt; ++t) |  | ||||||
|         { |  | ||||||
|             buf[s](t) = 0.5*(c[s](t) + c[s]((nt - t) % nt)); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return buf; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DMatSample CorrelatorUtils::fourierTransform(const DMatSample &c, FFT &fft,  |  | ||||||
|                                              const unsigned int dir) |  | ||||||
| { |  | ||||||
|     const Index nSample   = c.size(); |  | ||||||
|     const Index nt        = c[central].rows(); |  | ||||||
|     bool        isComplex = (c[central].cols() > 1); |  | ||||||
|     CMatSample  buf(nSample, nt, 1); |  | ||||||
|     DMatSample  out(nSample, nt, 2); |  | ||||||
|  |  | ||||||
|     fft.resize(nt); |  | ||||||
|     FOR_STAT_ARRAY(buf, s) |  | ||||||
|     { |  | ||||||
|         buf[s].real() = c[s].col(0); |  | ||||||
|         if (isComplex) |  | ||||||
|         { |  | ||||||
|             buf[s].imag() = c[s].col(1); |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             buf[s].imag() = DVec::Constant(nt, 0.); |  | ||||||
|         } |  | ||||||
|         fft(buf[s], dir); |  | ||||||
|         out[s].col(0) = buf[s].real(); |  | ||||||
|         out[s].col(1) = buf[s].imag(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return out;     |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                      CorrelatorFitter implementation                       * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // constructors //////////////////////////////////////////////////////////////// |  | ||||||
| CorrelatorFitter::CorrelatorFitter(const DMatSample &corr) |  | ||||||
| { |  | ||||||
|     setCorrelator(corr); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| CorrelatorFitter::CorrelatorFitter(const std::vector<DMatSample> &corr) |  | ||||||
| { |  | ||||||
|     setCorrelators(corr); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // access ////////////////////////////////////////////////////////////////////// |  | ||||||
| XYSampleData & CorrelatorFitter::data(void) |  | ||||||
| { |  | ||||||
|     return *data_; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void CorrelatorFitter::setCorrelator(const DMatSample &corr) |  | ||||||
| { |  | ||||||
|     std::vector<DMatSample> vec; |  | ||||||
|  |  | ||||||
|     vec.push_back(corr); |  | ||||||
|     setCorrelators(vec); |  | ||||||
| }    |  | ||||||
|  |  | ||||||
| void CorrelatorFitter::setCorrelators(const std::vector<DMatSample> &corr) |  | ||||||
| { |  | ||||||
|     Index                           nSample = corr[0].size(); |  | ||||||
|     DMatSample                      tVec(nSample); |  | ||||||
|     std::vector<const DMatSample *> ptVec; |  | ||||||
|  |  | ||||||
|     nt_ = corr[0][central].rows(); |  | ||||||
|     tVec.fill(DVec::LinSpaced(nt_, 0, nt_ - 1)); |  | ||||||
|     for (auto &c: corr) |  | ||||||
|     { |  | ||||||
|         ptVec.push_back(&c); |  | ||||||
|     } |  | ||||||
|     data_.reset(new XYSampleData(corr[0].size())); |  | ||||||
|     data_->addXDim(nt_, "t/a", true); |  | ||||||
|     for (unsigned int i = 0; i < corr.size(); ++i) |  | ||||||
|     { |  | ||||||
|         data_->addYDim("C_" + strFrom(i) + "(t)"); |  | ||||||
|     } |  | ||||||
|     data_->setUnidimData(tVec, ptVec); |  | ||||||
|     model_.resize(corr.size()); |  | ||||||
|     range_.resize(corr.size(), make_pair(0, nt_ - 1)); |  | ||||||
|     thinning_.resize(corr.size(), 1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void CorrelatorFitter::setModel(const DoubleModel &model, const Index i) |  | ||||||
| { |  | ||||||
|     model_[i] = model; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const DoubleModel & CorrelatorFitter::getModel(const Index i) const |  | ||||||
| { |  | ||||||
|     return model_.at(i); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void CorrelatorFitter::setFitRange(const Index tMin, const Index tMax,  |  | ||||||
|                                    const Index i) |  | ||||||
| { |  | ||||||
|     range_[i] = make_pair(tMin, tMax); |  | ||||||
|     refreshRanges(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void CorrelatorFitter::setCorrelation(const bool isCorrelated, const Index i,  |  | ||||||
|                                       const Index j) |  | ||||||
| { |  | ||||||
|     data_->assumeYYCorrelated(isCorrelated, i, j); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| DMat CorrelatorFitter::getVarianceMatrix(void) const |  | ||||||
| { |  | ||||||
|     return data_->getFitVarMat(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void CorrelatorFitter::setThinning(const Index thinning, const Index i) |  | ||||||
| { |  | ||||||
|     thinning_[i] = thinning; |  | ||||||
|     refreshRanges(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // fit functions /////////////////////////////////////////////////////////////// |  | ||||||
| SampleFitResult CorrelatorFitter::fit(Minimizer &minimizer, const DVec &init) |  | ||||||
| { |  | ||||||
|     vector<Minimizer *> vecPt = {&minimizer}; |  | ||||||
|  |  | ||||||
|     return fit(vecPt, init); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| SampleFitResult CorrelatorFitter::fit(vector<Minimizer *> &minimizer, |  | ||||||
|                                       const DVec &init) |  | ||||||
| { |  | ||||||
|     vector<const DoubleModel *> vecPt(model_.size()); |  | ||||||
|      |  | ||||||
|     for (unsigned int i = 0; i < model_.size(); ++i) |  | ||||||
|     { |  | ||||||
|         vecPt[i] = &(model_[i]); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return data_->fit(minimizer, init, vecPt); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // internal function to refresh fit ranges ///////////////////////////////////// |  | ||||||
| void CorrelatorFitter::refreshRanges(void) |  | ||||||
| { |  | ||||||
|     for (unsigned int i = 0; i < range_.size(); ++i) |  | ||||||
|     for (Index t = 0; t < nt_; ++t) |  | ||||||
|     { |  | ||||||
|         data_->fitPoint((t >= range_[i].first) and (t <= range_[i].second) |  | ||||||
|                          and ((t - range_[i].first) % thinning_[i] == 0), t); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user