mirror of
				https://github.com/aportelli/LatAnalyze.git
				synced 2025-10-30 14:34:31 +00:00 
			
		
		
		
	Compare commits
	
		
			38 Commits
		
	
	
		
			c3cf22532e
			...
			andrew-pr
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| cd4d739f46 | |||
| a20dff68d1 | |||
| cb5a28dfa6 | |||
| be72d31364 | |||
| db08559632 | |||
| 8b259879ff | |||
| 500210a2eb | |||
| b9f61d8c17 | |||
| 51a46edb27 | |||
| 4436c575e6 | |||
| e02a4bf30d | |||
|  | feb6f96589 | ||
|  | c442a437e5 | ||
|  | 493d641e2f | ||
|  | cd1aeac669 | ||
|  | db99951dd4 | ||
|  | a389e01aa0 | ||
|  | d11c6f725c | ||
|  | 15a5471bef | ||
|  | 6eca1e6fc6 | ||
|  | 28aff209c4 | ||
|  | 9c5ade4989 | ||
|  | f0739047c3 | ||
|  | 6990d16ca0 | ||
| 80e3c27d8e | |||
|  | 2b52ee4512 | ||
| af31d1564d | |||
|  | 938b96bf95 | ||
| 375b8fd038 | |||
|  | a7d020e0f9 | ||
| c48e2be20b | |||
|  | 113b433b5e | ||
| 9e8d534635 | |||
| 1b12f2ca2d | |||
| ddee922e72 | |||
| 7b3b203ca9 | |||
| 3e3cdf2d69 | |||
| b6c2efa666 | 
							
								
								
									
										2
									
								
								.github/workflows/build-macos.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-macos.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| name: Build macOS | name: Build macOS | ||||||
|  |  | ||||||
| on: [push, workflow_dispatch] | on: [push] | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   build: |   build: | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,7 @@ | |||||||
| # builds | # builds | ||||||
| build | build/* | ||||||
|  | build_debug/* | ||||||
|  | sandbox/* | ||||||
|  |  | ||||||
| # Apple stuff | # Apple stuff | ||||||
| *.xcodeproj | *.xcodeproj | ||||||
| @@ -8,12 +10,27 @@ build | |||||||
| # VIM | # VIM | ||||||
| *.swp | *.swp | ||||||
|  |  | ||||||
| # Eigen headers and archives | # autotools | ||||||
| /lib/LatAnalyze/Eigen | autom4te.cache/* | ||||||
| eigen-*.tar.bz2 | *.in | ||||||
|  | *.in~ | ||||||
|  | config.h* | ||||||
|  | configure | ||||||
|  | configure~ | ||||||
|  | .buildutils/* | ||||||
|  | aclocal.m4 | ||||||
|  |  | ||||||
|  | # bison/flex generated sources | ||||||
|  | lib/*Lexer.cpp | ||||||
|  | lib/*Parser.cpp | ||||||
|  | lib/*Parser.hpp | ||||||
|  |  | ||||||
|  | # Eigen headers | ||||||
|  | lib/Eigen/* | ||||||
|  | lib/eigen_files.mk | ||||||
|  |  | ||||||
| # CI builds | # CI builds | ||||||
| /ci-scripts/local | ci-scripts/local/* | ||||||
|  |  | ||||||
| # VS Code Studio stuff | # VS Code Studio stuff | ||||||
| .vscode | .vscode | ||||||
|   | |||||||
							
								
								
									
										63
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | language: cpp | ||||||
|  |    | ||||||
|  | cache: | ||||||
|  |   directories: | ||||||
|  |     - ci-scripts/local | ||||||
|  |     - ci-scripts/clang | ||||||
|  |  | ||||||
|  | matrix: | ||||||
|  |   include: | ||||||
|  |     - os:        osx | ||||||
|  |       osx_image: xcode10.1 | ||||||
|  |       compiler: clang | ||||||
|  |     - os:        osx | ||||||
|  |       osx_image: xcode10.1 | ||||||
|  |       compiler: gcc | ||||||
|  |       env: VERSION=-7 | ||||||
|  |     - compiler: gcc | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |           packages: | ||||||
|  |             - g++-7 | ||||||
|  |             - flex | ||||||
|  |             - bison | ||||||
|  |       env: VERSION=-7 | ||||||
|  |     - compiler: clang | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |           packages: | ||||||
|  |             - g++-7 | ||||||
|  |             - flex | ||||||
|  |             - 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 | ||||||
|  |  | ||||||
|  | before_install: | ||||||
|  |   - export LATDIR=`pwd` | ||||||
|  |   - cd ci-scripts | ||||||
|  |   - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]] && [ ! -e clang/bin ]; then wget $CLANG_LINK; tar -xf `basename $CLANG_LINK`; mkdir clang; mv clang+*/* clang/; 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" == "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" ]] && [[ "$CC" == "gcc" ]]; then brew install gcc@${VERSION#-}; fi | ||||||
|  |    | ||||||
|  | install: | ||||||
|  |   - export CC=$CC$VERSION | ||||||
|  |   - export CXX=$CXX$VERSION | ||||||
|  |   - echo $PATH | ||||||
|  |   - which $CC | ||||||
|  |   - $CC  --version | ||||||
|  |   - which $CXX | ||||||
|  |   - $CXX --version | ||||||
|  |   - ./install-deps.sh `pwd`/local | ||||||
|  |   - cd .. | ||||||
|  |   - 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: | ||||||
|  |   - cd ci-scripts | ||||||
|  |   - ./install-latan.sh `pwd`/local | ||||||
| @@ -1,94 +0,0 @@ | |||||||
| # package config |  | ||||||
| cmake_minimum_required(VERSION 3.11.0) |  | ||||||
| project( |  | ||||||
|   LatAnalyze |  | ||||||
|   VERSION 3.6 |  | ||||||
|   LANGUAGES C CXX) |  | ||||||
|  |  | ||||||
| # includes |  | ||||||
| include(CheckCXXCompilerFlag) |  | ||||||
| include(CMakePackageConfigHelpers) |  | ||||||
| include(FetchContent) |  | ||||||
| include(FindPackageMessage) |  | ||||||
| include(GNUInstallDirs) |  | ||||||
|  |  | ||||||
| # C++ compile flags |  | ||||||
| set(CMAKE_CXX_STANDARD 17) |  | ||||||
| set(CMAKE_CXX_STANDARD_REQUIRED True) |  | ||||||
| set(CMAKE_CXX_EXTENSIONS OFF) |  | ||||||
| check_cxx_compiler_flag("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE) |  | ||||||
| if(COMPILER_SUPPORTS_MARCH_NATIVE) |  | ||||||
|   set(MARCH_FLAG "-march=native") |  | ||||||
| endif() |  | ||||||
| check_cxx_compiler_flag("-mtune=native" COMPILER_SUPPORTS_MTUNE_NATIVE) |  | ||||||
| if(COMPILER_SUPPORTS_MTUNE_NATIVE) |  | ||||||
|   set(MTUNE_FLAG "-mtune=native") |  | ||||||
| endif() |  | ||||||
| set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG ${MARCH_FLAG} ${MTUNE_FLAG}") |  | ||||||
| set(CMAKE_CXX_FLAGS_RELWITHDEBINFO |  | ||||||
|     "-O3 -g -DNDEBUG ${MARCH_FLAG} ${MTUNE_FLAG}") |  | ||||||
| set(gcc_like_cxx "$<COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU,LCC>") |  | ||||||
| add_library(compiler_flags INTERFACE) |  | ||||||
| target_compile_features(compiler_flags INTERFACE cxx_std_17) |  | ||||||
| target_compile_options( |  | ||||||
|   compiler_flags |  | ||||||
|   INTERFACE "$<${gcc_like_cxx}:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>") |  | ||||||
|  |  | ||||||
| # position idependent code |  | ||||||
| set(CMAKE_POSITION_INDEPENDENT_CODE ON) |  | ||||||
|  |  | ||||||
| # installation rpath setup |  | ||||||
| set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") |  | ||||||
|  |  | ||||||
| # fetch and create symbolic link to Eigen headers |  | ||||||
| set(FETCHCONTENT_BASE_DIR ${CMAKE_BINARY_DIR}/deps) |  | ||||||
| FetchContent_Declare( |  | ||||||
|   Eigen3 |  | ||||||
|   GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git |  | ||||||
|   GIT_TAG 3.4.0) |  | ||||||
| FetchContent_GetProperties(Eigen3) |  | ||||||
| if(NOT eigen3_POPULATED) |  | ||||||
|   FetchContent_Populate(Eigen3) |  | ||||||
|   message(STATUS "Eigen3 fetched") |  | ||||||
| endif() |  | ||||||
| file(CREATE_LINK ${eigen3_SOURCE_DIR}/Eigen |  | ||||||
|      ${CMAKE_SOURCE_DIR}/lib/LatAnalyze/Eigen SYMBOLIC) |  | ||||||
|  |  | ||||||
| # dependencies |  | ||||||
| find_package(Threads REQUIRED) |  | ||||||
| find_package(GSL REQUIRED) |  | ||||||
| find_package(HDF5 REQUIRED COMPONENTS C CXX) |  | ||||||
| find_package(Minuit2 QUIET) |  | ||||||
| if(Minuit2_FOUND) |  | ||||||
|   set(Minuit2_MSG "yes") |  | ||||||
|   find_package_message( |  | ||||||
|     Minuit2 |  | ||||||
|     "Found Minuit2: ${Minuit2_DIR} (found version \"${Minuit2_VERSION}\")" " ") |  | ||||||
| else() |  | ||||||
|   set(Minuit2_MSG "no") |  | ||||||
|   message(STATUS "Minuit2 not found") |  | ||||||
| endif() |  | ||||||
| find_package(NLopt QUIET) |  | ||||||
| if(NLopt_FOUND) |  | ||||||
|   set(NLopt_MSG "yes") |  | ||||||
|   find_package_message( |  | ||||||
|     NLopt "Found NLopt: ${NLopt_DIR} (found version \"${NLopt_VERSION}\")" " ") |  | ||||||
| else() |  | ||||||
|   set(NLopt_MSG "no") |  | ||||||
|   message(STATUS "NLopt not found") |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| # subdirectories |  | ||||||
| add_subdirectory(lib) |  | ||||||
| add_subdirectory(examples) |  | ||||||
| add_subdirectory(physics) |  | ||||||
| add_subdirectory(utils) |  | ||||||
|  |  | ||||||
| # summary |  | ||||||
| message(STATUS "---------------------------") |  | ||||||
| message(STATUS "LatAnalyze v${PROJECT_VERSION} configured") |  | ||||||
| message(STATUS "---------------------------") |  | ||||||
| message(STATUS "    install prefix: ${CMAKE_INSTALL_PREFIX}") |  | ||||||
| message(STATUS "Minuit2 minimisers: ${Minuit2_MSG}") |  | ||||||
| message(STATUS "  NLopt minimisers: ${NLopt_MSG}") |  | ||||||
| message(STATUS "---------------------------") |  | ||||||
							
								
								
									
										5
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | SUBDIRS = lib utils physics examples | ||||||
|  |  | ||||||
|  | bin_SCRIPTS=latan-config | ||||||
|  |  | ||||||
|  | ACLOCAL_AMFLAGS = -I .buildutils/m4 | ||||||
							
								
								
									
										64
									
								
								Readme.md
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								Readme.md
									
									
									
									
									
								
							| @@ -3,19 +3,19 @@ | |||||||
| [](https://www.gnu.org/licenses/gpl-3.0) [](https://zenodo.org/badge/latestdoi/10201777) [](https://github.com/aportelli/LatAnalyze/actions/workflows/build-ubuntu.yml) [](https://github.com/aportelli/LatAnalyze/actions/workflows/build-macos.yml) | [](https://www.gnu.org/licenses/gpl-3.0) [](https://zenodo.org/badge/latestdoi/10201777) [](https://github.com/aportelli/LatAnalyze/actions/workflows/build-ubuntu.yml) [](https://github.com/aportelli/LatAnalyze/actions/workflows/build-macos.yml) | ||||||
|  |  | ||||||
| ## Description | ## Description | ||||||
| LatAnalyze is a C++14 library for statistical data analysis based on bootstrap | LatAnalyze is a C++11 library for statistical data analysis based on bootstrap | ||||||
| resampling. It has been written with lattice QCD data analysis in mind (hence | resampling. It has been written with lattice QCD data analysis in mind (hence | ||||||
| the name), but its features are not lattice specific and can be used more general statistical context. | the name), but its features are not lattice specific and can be used more general statistical context. | ||||||
|  |  | ||||||
| Sadly a proper documentation was never written, but some comprehensive examples covering several key features can be found in the `examples` directory. | Sadly a proper documentation was never written, but some comprehensive examples covering most features can be found in the `examples` directory. | ||||||
|  |  | ||||||
| The main features are the following: | The main features are the following: | ||||||
|  |  | ||||||
| * Array and matrix types with fast arithmetic operations based on [Eigen](http://eigen.tuxfamily.org). | * Array and matrix types with fast arithmetic operations based on [Eigen](http://eigen.tuxfamily.org). | ||||||
| * High-level types for bootstrap sample manipulation (including various statistical estimators and histogramming). | * High-level types for bootstrap sample manipulation (including various statistical estimators and histogramming). | ||||||
| * Mathematical expression parser for runtime defined functions. | * Mathematical expression parser for runtime defined functions. | ||||||
| * Data I/O in ASCII, XML, and HDF5. | * Data I/O in ASCII and HDF5 (optional). | ||||||
| * High-level wrappers to minimisation routines from the [GSL](http://www.gnu.org/software/gsl/), [Minuit 2](https://github.com/root-project/root/tree/master/math/minuit2) (optional) and [NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt). | * High-level wrappers to minimisation routines from the [GSL](http://www.gnu.org/software/gsl/), [Minuit](http://seal.web.cern.ch/seal/snapshot/work-packages/mathlibs/minuit/) (optional) and [NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt). | ||||||
| * Non-linear regression with error on independent variables (through total least squares). | * Non-linear regression with error on independent variables (through total least squares). | ||||||
| * High-level wrappers to numerical integrator and non-linear solver from the [GSL](http://www.gnu.org/software/gsl/). | * High-level wrappers to numerical integrator and non-linear solver from the [GSL](http://www.gnu.org/software/gsl/). | ||||||
| * High-level functional types for function of model. General functions can be defined from C pointers, C++ objects, strings of mathematical expressions or tabulated data. | * High-level functional types for function of model. General functions can be defined from C pointers, C++ objects, strings of mathematical expressions or tabulated data. | ||||||
| @@ -24,14 +24,14 @@ The main features are the following: | |||||||
| ## Installation | ## Installation | ||||||
| The head of the `master` branch always points to the latest stable release. The `develop` branch is the main unstable branch of LatAnalyze. | The head of the `master` branch always points to the latest stable release. The `develop` branch is the main unstable branch of LatAnalyze. | ||||||
|  |  | ||||||
| LatAnalyze is written in C++14. It has been successfully built on various Unix platform using reasonably recent versions of Clang or GCC. | 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 are the [GSL](http://www.gnu.org/software/gsl/) and [HDF5](https://www.hdfgroup.org/HDF5/) (built with C++ support). | The only strict dependencies is the [GSL](http://www.gnu.org/software/gsl/). | ||||||
| Additionally, cmake (from 3.11), bison (from 3.0) and flex are necessary to build the library. Unless you use a very exotic system, these tools are standard on any Unix platform and should be already present or easy to install through a package manager. | 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 [Minuit 2](https://github.com/root-project/root/tree/master/math/minuit2) 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). | ||||||
|  |  | ||||||
| LatAnalyze is built through CMake. Below are example instructions for compiling and installing LatAnalyze.  | 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`. | ||||||
|  |  | ||||||
| ### Portable quick installation | ### 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> | ||||||
| @@ -43,53 +43,19 @@ All the dependencies of LatAnalyze can be installed through the [Homebrew](https | |||||||
| ``` | ``` | ||||||
| brew install automake autoconf libtool bison flex gsl minuit2 nlopt hdf5 | brew install automake autoconf libtool bison flex gsl minuit2 nlopt hdf5 | ||||||
| ``` | ``` | ||||||
| Then build the library with `cmake` | Then generate the build system in LatAnalyze main directory by running the `./bootstrap.sh` script. Finally, build the library | ||||||
| ``` | ``` | ||||||
| mkdir build | mkdir build | ||||||
| cd build | cd build | ||||||
| cmake -DCMAKE_INSTALL_PREFIX=<prefix> -DCMAKE_BUILD_TYPE=Release .. | ../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 -j <n> | ||||||
| make install | make install | ||||||
| ``` | ``` | ||||||
| where `<prefix>` should be replaced by the desired prefix for LatAnalyze installation, and `<n>` is the number of parallel build processes. | 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). | ||||||
|  |  | ||||||
| ### Dependencies through Homebrew/Linuxbrew |  | ||||||
| If you use Homebrew/Linuxbrew to manage packages, the following command can install all the dependencies of LatAnalyze (including optional ones) |  | ||||||
|  |  | ||||||
| ## Using LatAnalyze in CMake projects |  | ||||||
| When LatAnalyze is installed, the necessary CMake module configuration files to link against the library are available in the installation prefix. |  | ||||||
|  |  | ||||||
| To link against LatAnalyze in a downstream CMake project, simply use |  | ||||||
| ```cmake |  | ||||||
| find_package(LatAnalyze) |  | ||||||
| target_link_libraries(<my_app> LatAnalyze::LatAnalyze) |  | ||||||
| ``` |  | ||||||
| where `<my_app>` is a CMake target. If LatAnalyze was installed in a non-standard prefix, you might have to set `CMAKE_PREFIX_PATH` accordingly for `find_package` to be successful. |  | ||||||
|  |  | ||||||
| You can additionally modify the `find_package` to ensure specific components are supported |  | ||||||
| ```cmake |  | ||||||
| find_package(LatAnalyze REQUIRED COMPONENTS <...>) |  | ||||||
| ``` |  | ||||||
| where `<...>` is a space separated list of components. Currently available components are |  | ||||||
| - `MINUIT2`: Minuit 2 minimisers |  | ||||||
| - `NLOPT`: NLopt minimisers |  | ||||||
|  |  | ||||||
| ## History | ## History | ||||||
| #### v3.6 |  | ||||||
| Build system: |  | ||||||
| * automake build discontinued, now using CMake |  | ||||||
| * CI through GitHub Actions |  | ||||||
|  |  | ||||||
| Additions: |  | ||||||
| * Discrete wavelet transform |  | ||||||
| * Thread pools |  | ||||||
| * Correlation dynamic range (CDR) calculation |  | ||||||
| * Data filtering and CDR optimisation |  | ||||||
|  |  | ||||||
| Changes: |  | ||||||
| * Significant optimisation of covariance matrix calculation |  | ||||||
| * Covariance matrix available for any `StatArray` (not only resampled arrays) |  | ||||||
|  |  | ||||||
| #### v3.5.1 | #### v3.5.1 | ||||||
| Various fixes and cleaning of outdated code. | Various fixes and cleaning of outdated code. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										542
									
								
								acinclude.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										542
									
								
								acinclude.m4
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,542 @@ | |||||||
|  | AC_DEFUN([AX_GCC_OPTION], [ | ||||||
|  | AC_REQUIRE([AC_PROG_CC]) | ||||||
|  |  | ||||||
|  | AC_MSG_CHECKING([if gcc accepts $1 option]) | ||||||
|  |  | ||||||
|  | AS_IF([ test "x$GCC" = "xyes" ],[ | ||||||
|  | AS_IF([ test -z "$3" ],[ | ||||||
|  | ax_gcc_option_test="int main() | ||||||
|  | { | ||||||
|  | return 0; | ||||||
|  | }" | ||||||
|  | ],[ | ||||||
|  | ax_gcc_option_test="$3" | ||||||
|  | ]) | ||||||
|  |  | ||||||
|  | # Dump the test program to file | ||||||
|  | cat <<EOF > conftest.c | ||||||
|  | $ax_gcc_option_test | ||||||
|  | EOF | ||||||
|  |  | ||||||
|  | # Dump back the file to the log, useful for debugging purposes | ||||||
|  | AC_TRY_COMMAND(cat conftest.c 1>&AS_MESSAGE_LOG_FD) | ||||||
|  |  | ||||||
|  | AS_IF([ AC_TRY_COMMAND($CC $2 $1 -c conftest.c 1>&AS_MESSAGE_LOG_FD) ],[ | ||||||
|  | AC_MSG_RESULT([yes]) | ||||||
|  | $4 | ||||||
|  | ],[ | ||||||
|  | AC_MSG_RESULT([no]) | ||||||
|  | $5 | ||||||
|  | ]) | ||||||
|  | ],[ | ||||||
|  | AC_MSG_RESULT([no gcc available]) | ||||||
|  | ]) | ||||||
|  | ]) | ||||||
|  |  | ||||||
|  | AC_DEFUN([AX_GCC_VERSION], [ | ||||||
|  | GCC_VERSION="" | ||||||
|  | AX_GCC_OPTION([-dumpversion],[],[],[ | ||||||
|  | ax_gcc_version_option=yes | ||||||
|  | ],[ | ||||||
|  | ax_gcc_version_option=no | ||||||
|  | ]) | ||||||
|  | AS_IF([test "x$GCC" = "xyes"],[ | ||||||
|  | AS_IF([test "x$ax_gcc_version_option" != "xno"],[ | ||||||
|  | AC_CACHE_CHECK([gcc version],[ax_cv_gcc_version],[ | ||||||
|  | ax_cv_gcc_version="`$CC -dumpversion`" | ||||||
|  | AS_IF([test "x$ax_cv_gcc_version" = "x"],[ | ||||||
|  | ax_cv_gcc_version="" | ||||||
|  | ]) | ||||||
|  | ]) | ||||||
|  | GCC_VERSION=$ax_cv_gcc_version | ||||||
|  | ]) | ||||||
|  | ]) | ||||||
|  | AC_SUBST([GCC_VERSION]) | ||||||
|  | ]) | ||||||
|  |  | ||||||
|  | AC_DEFUN([AX_GXX_VERSION], [ | ||||||
|  | GXX_VERSION="" | ||||||
|  | AX_GCC_OPTION([-dumpversion],[],[],[ | ||||||
|  | ax_gcc_version_option=yes | ||||||
|  | ],[ | ||||||
|  | ax_gcc_version_option=no | ||||||
|  | ]) | ||||||
|  | AS_IF([test "x$GXX" = "xyes"],[ | ||||||
|  | AS_IF([test "x$ax_gxx_version_option" != "no"],[ | ||||||
|  | AC_CACHE_CHECK([gxx version],[ax_cv_gxx_version],[ | ||||||
|  | ax_cv_gxx_version="`$CXX -dumpversion`" | ||||||
|  | AS_IF([test "x$ax_cv_gxx_version" = "x"],[ | ||||||
|  | ax_cv_gxx_version="" | ||||||
|  | ]) | ||||||
|  | ]) | ||||||
|  | GXX_VERSION=$ax_cv_gxx_version | ||||||
|  | ]) | ||||||
|  | ]) | ||||||
|  | AC_SUBST([GXX_VERSION]) | ||||||
|  | ]) | ||||||
|  |  | ||||||
|  | AC_DEFUN([AX_COMPILER_VENDOR], | ||||||
|  | [ | ||||||
|  | AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, | ||||||
|  | [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown | ||||||
|  | # note: don't check for gcc first since some other compilers define __GNUC__ | ||||||
|  | for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do | ||||||
|  | vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" | ||||||
|  | AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ | ||||||
|  | #if !($vencpp) | ||||||
|  | thisisanerror; | ||||||
|  | #endif | ||||||
|  | ])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) | ||||||
|  | done | ||||||
|  | ]) | ||||||
|  | ]) | ||||||
|  |  | ||||||
|  | # ============================================================================ | ||||||
|  | #  http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html | ||||||
|  | # ============================================================================ | ||||||
|  | # | ||||||
|  | # SYNOPSIS | ||||||
|  | # | ||||||
|  | #   AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) | ||||||
|  | # | ||||||
|  | # DESCRIPTION | ||||||
|  | # | ||||||
|  | #   Check for baseline language coverage in the compiler for the C++11 | ||||||
|  | #   standard; if necessary, add switches to CXXFLAGS to enable support. | ||||||
|  | # | ||||||
|  | #   The first argument, if specified, indicates whether you insist on an | ||||||
|  | #   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. | ||||||
|  | #   -std=c++11).  If neither is specified, you get whatever works, with | ||||||
|  | #   preference for an extended mode. | ||||||
|  | # | ||||||
|  | #   The second argument, if specified 'mandatory' or if left unspecified, | ||||||
|  | #   indicates that baseline C++11 support is required and that the macro | ||||||
|  | #   should error out if no mode with that support is found.  If specified | ||||||
|  | #   'optional', then configuration proceeds regardless, after defining | ||||||
|  | #   HAVE_CXX11 if and only if a supporting mode is found. | ||||||
|  | # | ||||||
|  | # LICENSE | ||||||
|  | # | ||||||
|  | #   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> | ||||||
|  | #   Copyright (c) 2012 Zack Weinberg <zackw@panix.com> | ||||||
|  | #   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> | ||||||
|  | #   Copyright (c) 2014 Alexey Sokolov <sokolov@google.com> | ||||||
|  | # | ||||||
|  | #   Copying and distribution of this file, with or without modification, are | ||||||
|  | #   permitted in any medium without royalty provided the copyright notice | ||||||
|  | #   and this notice are preserved. This file is offered as-is, without any | ||||||
|  | #   warranty. | ||||||
|  |  | ||||||
|  | m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[ | ||||||
|  |   template <typename T> | ||||||
|  |     struct check | ||||||
|  |     { | ||||||
|  |       static_assert(sizeof(int) <= sizeof(T), "not big enough"); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     struct Base { | ||||||
|  |     virtual void f() {} | ||||||
|  |     }; | ||||||
|  |     struct Child : public Base { | ||||||
|  |     virtual void f() override {} | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     typedef check<check<bool>> right_angle_brackets; | ||||||
|  |  | ||||||
|  |     int a; | ||||||
|  |     decltype(a) b; | ||||||
|  |  | ||||||
|  |     typedef check<int> check_type; | ||||||
|  |     check_type c; | ||||||
|  |     check_type&& cr = static_cast<check_type&&>(c); | ||||||
|  |  | ||||||
|  |     auto d = a; | ||||||
|  |     auto l = [](){}; | ||||||
|  | ]]) | ||||||
|  |  | ||||||
|  | AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl | ||||||
|  |   m4_if([$1], [], [], | ||||||
|  |         [$1], [ext], [], | ||||||
|  |         [$1], [noext], [], | ||||||
|  |         [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl | ||||||
|  |   m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], | ||||||
|  |         [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], | ||||||
|  |         [$2], [optional], [ax_cxx_compile_cxx11_required=false], | ||||||
|  |         [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])]) | ||||||
|  |   AC_LANG_PUSH([C++])dnl | ||||||
|  |   ac_success=no | ||||||
|  |   AC_CACHE_CHECK(whether $CXX supports C++11 features by default, | ||||||
|  |   ax_cv_cxx_compile_cxx11, | ||||||
|  |   [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], | ||||||
|  |     [ax_cv_cxx_compile_cxx11=yes], | ||||||
|  |     [ax_cv_cxx_compile_cxx11=no])]) | ||||||
|  |   if test x$ax_cv_cxx_compile_cxx11 = xyes; then | ||||||
|  |     ac_success=yes | ||||||
|  |   fi | ||||||
|  |  | ||||||
|  |   m4_if([$1], [noext], [], [dnl | ||||||
|  |   if test x$ac_success = xno; then | ||||||
|  |     for switch in -std=gnu++11 -std=gnu++0x; do | ||||||
|  |       cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) | ||||||
|  |       AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, | ||||||
|  |                      $cachevar, | ||||||
|  |         [ac_save_CXXFLAGS="$CXXFLAGS" | ||||||
|  |          CXXFLAGS="$CXXFLAGS $switch" | ||||||
|  |          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], | ||||||
|  |           [eval $cachevar=yes], | ||||||
|  |           [eval $cachevar=no]) | ||||||
|  |          CXXFLAGS="$ac_save_CXXFLAGS"]) | ||||||
|  |       if eval test x\$$cachevar = xyes; then | ||||||
|  |         CXXFLAGS="$CXXFLAGS $switch" | ||||||
|  |         ac_success=yes | ||||||
|  |         break | ||||||
|  |       fi | ||||||
|  |     done | ||||||
|  |   fi]) | ||||||
|  |  | ||||||
|  |   m4_if([$1], [ext], [], [dnl | ||||||
|  |   if test x$ac_success = xno; then | ||||||
|  |     for switch in -std=c++11 -std=c++0x; do | ||||||
|  |       cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) | ||||||
|  |       AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, | ||||||
|  |                      $cachevar, | ||||||
|  |         [ac_save_CXXFLAGS="$CXXFLAGS" | ||||||
|  |          CXXFLAGS="$CXXFLAGS $switch" | ||||||
|  |          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], | ||||||
|  |           [eval $cachevar=yes], | ||||||
|  |           [eval $cachevar=no]) | ||||||
|  |          CXXFLAGS="$ac_save_CXXFLAGS"]) | ||||||
|  |       if eval test x\$$cachevar = xyes; then | ||||||
|  |         CXXFLAGS="$CXXFLAGS $switch" | ||||||
|  |         ac_success=yes | ||||||
|  |         break | ||||||
|  |       fi | ||||||
|  |     done | ||||||
|  |   fi]) | ||||||
|  |   AC_LANG_POP([C++]) | ||||||
|  |   if test x$ax_cxx_compile_cxx11_required = xtrue; then | ||||||
|  |     if test x$ac_success = xno; then | ||||||
|  |       AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) | ||||||
|  |     fi | ||||||
|  |   else | ||||||
|  |     if test x$ac_success = xno; then | ||||||
|  |       HAVE_CXX11=0 | ||||||
|  |       AC_MSG_NOTICE([No compiler with C++11 support was found]) | ||||||
|  |     else | ||||||
|  |       HAVE_CXX11=1 | ||||||
|  |       AC_DEFINE(HAVE_CXX11,1, | ||||||
|  |                 [define if the compiler supports basic C++11 syntax]) | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     AC_SUBST(HAVE_CXX11) | ||||||
|  |   fi | ||||||
|  | ]) | ||||||
|  |  | ||||||
|  | # =========================================================================== | ||||||
|  | #        http://www.gnu.org/software/autoconf-archive/ax_lib_hdf5.html | ||||||
|  | # =========================================================================== | ||||||
|  | # | ||||||
|  | # SYNOPSIS | ||||||
|  | # | ||||||
|  | #   AX_LIB_HDF5([serial/parallel]) | ||||||
|  | # | ||||||
|  | # DESCRIPTION | ||||||
|  | # | ||||||
|  | #   This macro provides tests of the availability of HDF5 library. | ||||||
|  | # | ||||||
|  | #   The optional macro argument should be either 'serial' or 'parallel'. The | ||||||
|  | #   former only looks for serial HDF5 installations via h5cc. The latter | ||||||
|  | #   only looks for parallel HDF5 installations via h5pcc. If the optional | ||||||
|  | #   argument is omitted, serial installations will be preferred over | ||||||
|  | #   parallel ones. | ||||||
|  | # | ||||||
|  | #   The macro adds a --with-hdf5 option accepting one of three values: | ||||||
|  | # | ||||||
|  | #     no   - do not check for the HDF5 library. | ||||||
|  | #     yes  - do check for HDF5 library in standard locations. | ||||||
|  | #     path - complete path to the HDF5 helper script h5cc or h5pcc. | ||||||
|  | # | ||||||
|  | #   If HDF5 is successfully found, this macro calls | ||||||
|  | # | ||||||
|  | #     AC_SUBST(HDF5_VERSION) | ||||||
|  | #     AC_SUBST(HDF5_CC) | ||||||
|  | #     AC_SUBST(HDF5_CFLAGS) | ||||||
|  | #     AC_SUBST(HDF5_CPPFLAGS) | ||||||
|  | #     AC_SUBST(HDF5_LDFLAGS) | ||||||
|  | #     AC_SUBST(HDF5_LIBS) | ||||||
|  | #     AC_SUBST(HDF5_FC) | ||||||
|  | #     AC_SUBST(HDF5_FFLAGS) | ||||||
|  | #     AC_SUBST(HDF5_FLIBS) | ||||||
|  | #     AC_DEFINE(HAVE_HDF5) | ||||||
|  | # | ||||||
|  | #   and sets with_hdf5="yes".  Additionally, the macro sets | ||||||
|  | #   with_hdf5_fortran="yes" if a matching Fortran wrapper script is found. | ||||||
|  | #   Note that Autconf's Fortran support is not used to perform this check. | ||||||
|  | #   H5CC and H5FC will contain the appropriate serial or parallel HDF5 | ||||||
|  | #   wrapper script locations. | ||||||
|  | # | ||||||
|  | #   If HDF5 is disabled or not found, this macros sets with_hdf5="no" and | ||||||
|  | #   with_hdf5_fortran="no". | ||||||
|  | # | ||||||
|  | #   Your configuration script can test $with_hdf to take any further | ||||||
|  | #   actions. HDF5_{C,CPP,LD}FLAGS may be used when building with C or C++. | ||||||
|  | #   HDF5_F{FLAGS,LIBS} should be used when building Fortran applications. | ||||||
|  | # | ||||||
|  | #   To use the macro, one would code one of the following in "configure.ac" | ||||||
|  | #   before AC_OUTPUT: | ||||||
|  | # | ||||||
|  | #     1) dnl Check for HDF5 support | ||||||
|  | #        AX_LIB_HDF5() | ||||||
|  | # | ||||||
|  | #     2) dnl Check for serial HDF5 support | ||||||
|  | #        AX_LIB_HDF5([serial]) | ||||||
|  | # | ||||||
|  | #     3) dnl Check for parallel HDF5 support | ||||||
|  | #        AX_LIB_HDF5([parallel]) | ||||||
|  | # | ||||||
|  | #   One could test $with_hdf5 for the outcome or display it as follows | ||||||
|  | # | ||||||
|  | #     echo "HDF5 support:  $with_hdf5" | ||||||
|  | # | ||||||
|  | #   You could also for example, override the default CC in "configure.ac" to | ||||||
|  | #   enforce compilation with the compiler that HDF5 uses: | ||||||
|  | # | ||||||
|  | #     AX_LIB_HDF5([parallel]) | ||||||
|  | #     if test "$with_hdf5" = "yes"; then | ||||||
|  | #             CC="$HDF5_CC" | ||||||
|  | #     else | ||||||
|  | #             AC_MSG_ERROR([Unable to find HDF5, we need parallel HDF5.]) | ||||||
|  | #     fi | ||||||
|  | # | ||||||
|  | # LICENSE | ||||||
|  | # | ||||||
|  | #   Copyright (c) 2009 Timothy Brown <tbrown@freeshell.org> | ||||||
|  | #   Copyright (c) 2010 Rhys Ulerich <rhys.ulerich@gmail.com> | ||||||
|  | # | ||||||
|  | #   Copying and distribution of this file, with or without modification, are | ||||||
|  | #   permitted in any medium without royalty provided the copyright notice | ||||||
|  | #   and this notice are preserved. This file is offered as-is, without any | ||||||
|  | #   warranty. | ||||||
|  |  | ||||||
|  | AC_DEFUN([AX_LIB_HDF5], [ | ||||||
|  |  | ||||||
|  | AC_REQUIRE([AC_PROG_SED]) | ||||||
|  | AC_REQUIRE([AC_PROG_AWK]) | ||||||
|  | AC_REQUIRE([AC_PROG_GREP]) | ||||||
|  |  | ||||||
|  | dnl Check first argument is one of the recognized values. | ||||||
|  | dnl Fail eagerly if is incorrect as this simplifies case statements below. | ||||||
|  | if   test "m4_normalize(m4_default([$1],[]))" = ""        ; then | ||||||
|  |     : # Recognized value | ||||||
|  | elif test "m4_normalize(m4_default([$1],[]))" = "serial"  ; then | ||||||
|  |     : # Recognized value | ||||||
|  | elif test "m4_normalize(m4_default([$1],[]))" = "parallel"; then | ||||||
|  |     : # Recognized value | ||||||
|  | else | ||||||
|  |     AC_MSG_ERROR([ | ||||||
|  | Unrecognized value for AX[]_LIB_HDF5 within configure.ac. | ||||||
|  | If supplied, argument 1 must be either 'serial' or 'parallel'. | ||||||
|  | ]) | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | dnl Add a default --with-hdf5 configuration option. | ||||||
|  | AC_ARG_WITH([hdf5], | ||||||
|  |   AS_HELP_STRING( | ||||||
|  |     [--with-hdf5=[yes/no/PATH]], | ||||||
|  |     m4_case(m4_normalize([$1]), | ||||||
|  |             [serial],   [location of h5cc for serial HDF5 configuration], | ||||||
|  |             [parallel], [location of h5pcc for parallel HDF5 configuration], | ||||||
|  |             [location of h5cc or h5pcc for HDF5 configuration]) | ||||||
|  |   ), | ||||||
|  |   [if test "$withval" = "no"; then | ||||||
|  |      with_hdf5="no" | ||||||
|  |    elif test "$withval" = "yes"; then | ||||||
|  |      with_hdf5="yes" | ||||||
|  |    else | ||||||
|  |      with_hdf5="yes" | ||||||
|  |      H5CC="$withval" | ||||||
|  |    fi], | ||||||
|  |    [with_hdf5="yes"] | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | dnl Set defaults to blank | ||||||
|  | HDF5_CC="" | ||||||
|  | HDF5_VERSION="" | ||||||
|  | HDF5_CFLAGS="" | ||||||
|  | HDF5_CPPFLAGS="" | ||||||
|  | HDF5_LDFLAGS="" | ||||||
|  | HDF5_LIBS="" | ||||||
|  | HDF5_FC="" | ||||||
|  | HDF5_FFLAGS="" | ||||||
|  | HDF5_FLIBS="" | ||||||
|  |  | ||||||
|  | dnl Try and find hdf5 compiler tools and options. | ||||||
|  | if test "$with_hdf5" = "yes"; then | ||||||
|  |     if test -z "$H5CC"; then | ||||||
|  |         dnl Check to see if H5CC is in the path. | ||||||
|  |         AC_PATH_PROGS( | ||||||
|  |             [H5CC], | ||||||
|  |             m4_case(m4_normalize([$1]), | ||||||
|  |                 [serial],   [h5cc], | ||||||
|  |                 [parallel], [h5pcc], | ||||||
|  |                 [h5cc h5pcc]), | ||||||
|  |             []) | ||||||
|  |     else | ||||||
|  |         AC_MSG_CHECKING([Using provided HDF5 C wrapper]) | ||||||
|  |         AC_MSG_RESULT([$H5CC]) | ||||||
|  |     fi | ||||||
|  |     AC_MSG_CHECKING([for HDF5 libraries]) | ||||||
|  |     if test ! -f "$H5CC" || test ! -x "$H5CC"; then | ||||||
|  |         AC_MSG_RESULT([no]) | ||||||
|  |         AC_MSG_WARN(m4_case(m4_normalize([$1]), | ||||||
|  |             [serial],  [ | ||||||
|  | Unable to locate serial HDF5 compilation helper script 'h5cc'. | ||||||
|  | Please specify --with-hdf5=<LOCATION> as the full path to h5cc. | ||||||
|  | HDF5 support is being disabled (equivalent to --with-hdf5=no). | ||||||
|  | ],            [parallel],[ | ||||||
|  | Unable to locate parallel HDF5 compilation helper script 'h5pcc'. | ||||||
|  | Please specify --with-hdf5=<LOCATION> as the full path to h5pcc. | ||||||
|  | HDF5 support is being disabled (equivalent to --with-hdf5=no). | ||||||
|  | ],            [ | ||||||
|  | Unable to locate HDF5 compilation helper scripts 'h5cc' or 'h5pcc'. | ||||||
|  | Please specify --with-hdf5=<LOCATION> as the full path to h5cc or h5pcc. | ||||||
|  | HDF5 support is being disabled (equivalent to --with-hdf5=no). | ||||||
|  | ])) | ||||||
|  |         with_hdf5="no" | ||||||
|  |         with_hdf5_fortran="no" | ||||||
|  |     else | ||||||
|  |         dnl Get the h5cc output | ||||||
|  |         HDF5_SHOW=$(eval $H5CC -show) | ||||||
|  |  | ||||||
|  |         dnl Get the actual compiler used | ||||||
|  |         HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]1}') | ||||||
|  |         if test "$HDF5_CC" = "ccache"; then | ||||||
|  |             HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]2}') | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         dnl h5cc provides both AM_ and non-AM_ options | ||||||
|  |         dnl depending on how it was compiled either one of | ||||||
|  |         dnl these are empty. Lets roll them both into one. | ||||||
|  |  | ||||||
|  |         dnl Look for "HDF5 Version: X.Y.Z" | ||||||
|  |         HDF5_VERSION=$(eval $H5CC -showconfig | $GREP 'HDF5 Version:' \ | ||||||
|  |             | $AWK '{print $[]3}') | ||||||
|  |  | ||||||
|  |         dnl A ideal situation would be where everything we needed was | ||||||
|  |         dnl in the AM_* variables. However most systems are not like this | ||||||
|  |         dnl and seem to have the values in the non-AM variables. | ||||||
|  |         dnl | ||||||
|  |         dnl We try the following to find the flags: | ||||||
|  |         dnl (1) Look for "NAME:" tags | ||||||
|  |         dnl (2) Look for "H5_NAME:" tags | ||||||
|  |         dnl (3) Look for "AM_NAME:" tags | ||||||
|  |         dnl | ||||||
|  |         HDF5_tmp_flags=$(eval $H5CC -showconfig \ | ||||||
|  |             | $GREP 'FLAGS\|Extra libraries:' \ | ||||||
|  |             | $AWK -F: '{printf("%s "), $[]2}' ) | ||||||
|  |  | ||||||
|  |         dnl Find the installation directory and append include/ | ||||||
|  |         HDF5_tmp_inst=$(eval $H5CC -showconfig \ | ||||||
|  |             | $GREP 'Installation point:' \ | ||||||
|  |             | $AWK '{print $[]NF}' ) | ||||||
|  |  | ||||||
|  |         dnl Add this to the CPPFLAGS | ||||||
|  |         HDF5_CPPFLAGS="-I${HDF5_tmp_inst}/include" | ||||||
|  |  | ||||||
|  |         dnl Now sort the flags out based upon their prefixes | ||||||
|  |         for arg in $HDF5_SHOW $HDF5_tmp_flags ; do | ||||||
|  |           case "$arg" in | ||||||
|  |             -I*) echo $HDF5_CPPFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ | ||||||
|  |                   || HDF5_CPPFLAGS="$arg $HDF5_CPPFLAGS" | ||||||
|  |               ;; | ||||||
|  |             -L*) echo $HDF5_LDFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ | ||||||
|  |                   || HDF5_LDFLAGS="$arg $HDF5_LDFLAGS" | ||||||
|  |               ;; | ||||||
|  |             -l*) echo $HDF5_LIBS | $GREP -e "$arg" 2>&1 >/dev/null \ | ||||||
|  |                   || HDF5_LIBS="$arg $HDF5_LIBS" | ||||||
|  |               ;; | ||||||
|  |           esac | ||||||
|  |         done | ||||||
|  |  | ||||||
|  |         HDF5_LIBS="$HDF5_LIBS -lhdf5" | ||||||
|  |         AC_MSG_RESULT([yes (version $[HDF5_VERSION])]) | ||||||
|  |  | ||||||
|  |         dnl See if we can compile | ||||||
|  |         ax_lib_hdf5_save_CC=$CC | ||||||
|  |         ax_lib_hdf5_save_CPPFLAGS=$CPPFLAGS | ||||||
|  |         ax_lib_hdf5_save_LIBS=$LIBS | ||||||
|  |         ax_lib_hdf5_save_LDFLAGS=$LDFLAGS | ||||||
|  |         CC=$HDF5_CC | ||||||
|  |         CPPFLAGS=$HDF5_CPPFLAGS | ||||||
|  |         LIBS=$HDF5_LIBS | ||||||
|  |         LDFLAGS=$HDF5_LDFLAGS | ||||||
|  |         AC_CHECK_HEADER([hdf5.h], [ac_cv_hadf5_h=yes], [ac_cv_hadf5_h=no]) | ||||||
|  |         AC_CHECK_LIB([hdf5], [H5Fcreate], [ac_cv_libhdf5=yes], | ||||||
|  |                      [ac_cv_libhdf5=no]) | ||||||
|  |         if test "$ac_cv_hadf5_h" = "no" && test "$ac_cv_libhdf5" = "no" ; then | ||||||
|  |           AC_MSG_WARN([Unable to compile HDF5 test program]) | ||||||
|  |         fi | ||||||
|  |         dnl Look for HDF5's high level library | ||||||
|  |         AC_HAVE_LIBRARY([hdf5_hl], [HDF5_LIBS="$HDF5_LIBS -lhdf5_hl"], [], []) | ||||||
|  |  | ||||||
|  |         CC=$ax_lib_hdf5_save_CC | ||||||
|  |         CPPFLAGS=$ax_lib_hdf5_save_CPPFLAGS | ||||||
|  |         LIBS=$ax_lib_hdf5_save_LIBS | ||||||
|  |         LDFLAGS=$ax_lib_hdf5_save_LDFLAGS | ||||||
|  |  | ||||||
|  |         AC_MSG_CHECKING([for matching HDF5 Fortran wrapper]) | ||||||
|  |         dnl Presume HDF5 Fortran wrapper is just a name variant from H5CC | ||||||
|  |         H5FC=$(eval echo -n $H5CC | $SED -n 's/cc$/fc/p') | ||||||
|  |         if test -x "$H5FC"; then | ||||||
|  |             AC_MSG_RESULT([$H5FC]) | ||||||
|  |             with_hdf5_fortran="yes" | ||||||
|  |             AC_SUBST([H5FC]) | ||||||
|  |  | ||||||
|  |             dnl Again, pry any remaining -Idir/-Ldir from compiler wrapper | ||||||
|  |             for arg in `$H5FC -show` | ||||||
|  |             do | ||||||
|  |               case "$arg" in #( | ||||||
|  |                 -I*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ | ||||||
|  |                       || HDF5_FFLAGS="$arg $HDF5_FFLAGS" | ||||||
|  |                   ;;#( | ||||||
|  |                 -L*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ | ||||||
|  |                       || HDF5_FFLAGS="$arg $HDF5_FFLAGS" | ||||||
|  |                      dnl HDF5 installs .mod files in with libraries, | ||||||
|  |                      dnl but some compilers need to find them with -I | ||||||
|  |                      echo $HDF5_FFLAGS | $GREP -e "-I${arg#-L}" >/dev/null \ | ||||||
|  |                       || HDF5_FFLAGS="-I${arg#-L} $HDF5_FFLAGS" | ||||||
|  |                   ;; | ||||||
|  |               esac | ||||||
|  |             done | ||||||
|  |  | ||||||
|  |             dnl Make Fortran link line by inserting Fortran libraries | ||||||
|  |             for arg in $HDF5_LIBS | ||||||
|  |             do | ||||||
|  |               case "$arg" in #( | ||||||
|  |                 -lhdf5_hl) HDF5_FLIBS="$HDF5_FLIBS -lhdf5hl_fortran $arg" | ||||||
|  |                   ;; #( | ||||||
|  |                 -lhdf5)    HDF5_FLIBS="$HDF5_FLIBS -lhdf5_fortran $arg" | ||||||
|  |                   ;; #( | ||||||
|  |                 *) HDF5_FLIBS="$HDF5_FLIBS $arg" | ||||||
|  |                   ;; | ||||||
|  |               esac | ||||||
|  |             done | ||||||
|  |         else | ||||||
|  |             AC_MSG_RESULT([no]) | ||||||
|  |             with_hdf5_fortran="no" | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  | 	AC_SUBST([HDF5_VERSION]) | ||||||
|  | 	AC_SUBST([HDF5_CC]) | ||||||
|  | 	AC_SUBST([HDF5_CFLAGS]) | ||||||
|  | 	AC_SUBST([HDF5_CPPFLAGS]) | ||||||
|  | 	AC_SUBST([HDF5_LDFLAGS]) | ||||||
|  | 	AC_SUBST([HDF5_LIBS]) | ||||||
|  | 	AC_SUBST([HDF5_FC]) | ||||||
|  | 	AC_SUBST([HDF5_FFLAGS]) | ||||||
|  | 	AC_SUBST([HDF5_FLIBS]) | ||||||
|  | 	AC_DEFINE([HAVE_HDF5], [1], [Defined if you have HDF5 support]) | ||||||
|  |     fi | ||||||
|  | fi | ||||||
|  | ]) | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								bootstrap.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								bootstrap.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | rm -rf .buildutils | ||||||
|  | mkdir -p .buildutils/m4 | ||||||
|  | ./update_eigen.sh eigen-3.3.8.tar.bz2 | ||||||
|  | autoreconf -fvi | ||||||
							
								
								
									
										24
									
								
								build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								build.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | set -e | ||||||
|  |  | ||||||
|  | PREFIX=`cat Makefile | grep '^prefix =' | awk '{print $3}'` | ||||||
|  | case $1 in | ||||||
|  |     '') | ||||||
|  |         echo '-- building...' | ||||||
|  |         make -j8 | ||||||
|  |         echo '-- installing...' | ||||||
|  |         make uninstall 1>/dev/null | ||||||
|  |         make install 1>/dev/null;; | ||||||
|  | #        if [[ `basename \`pwd\`` == "lib" ]] | ||||||
|  | #        then | ||||||
|  | #            echo '-- creating debug symbols...' | ||||||
|  | #            dsymutil .libs/libLatAnalyze.0.dylib -o ${PREFIX}/lib/libLatAnalyze.0.dylib.dSYM | ||||||
|  | #        fi;; | ||||||
|  |     'clean') | ||||||
|  |         echo '-- cleaning...' | ||||||
|  |         make -j8 clean;; | ||||||
|  |     *) | ||||||
|  |         echo 'error: unknown action' 1>&2 | ||||||
|  |         exit 1;; | ||||||
|  | esac | ||||||
| @@ -1,16 +1,16 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| if (($# != 2)); then | if (( $# != 2 )); then | ||||||
|   echo "usage: $(basename "$0") <prefix> <ntasks>" 1>&2 |   echo "usage: `basename $0` <prefix> <ntasks>" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| prefix=$1 | PREFIX=$1 | ||||||
| ntasks=$2 | NTASKS=$2 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| mkdir -p local/build | mkdir -p local/build | ||||||
| for d in gsl nlopt minuit hdf5; do | for d in gsl nlopt minuit hdf5; do | ||||||
|   if [ ! -e local/.built.${d} ]; then |   if [ ! -e local/.built.${d} ]; then | ||||||
|     ./install-${d}.sh "${prefix}" "${ntasks}" |     ./install-${d}.sh ${PREFIX} ${NTASKS} | ||||||
|   fi |   fi | ||||||
| done | done | ||||||
|   | |||||||
| @@ -1,27 +1,27 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| name='gsl-2.6' | NAME='gsl-2.6' | ||||||
|  |  | ||||||
| if (($# != 2)); then | if (( $# != 2 )); then | ||||||
|   echo "usage: $(basename "$0") <prefix> <ntasks>" 1>&2 |   echo "usage: `basename $0` <prefix> <ntasks>" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| prefix=$1 | PREFIX=$1 | ||||||
| ntasks=$2 | NTASKS=$2 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| init_dir=$(pwd -P) | INITDIR=$(pwd -P) | ||||||
| mkdir -p "${prefix}" | mkdir -p ${PREFIX} | ||||||
| cd "${prefix}" | cd ${PREFIX} | ||||||
| prefix=$(pwd -P) | PREFIX=$(pwd -P) | ||||||
| cd "${init_dir}/local/build" | cd ${INITDIR}/local/build | ||||||
| wget http://ftpmirror.gnu.org/gsl/${name}.tar.gz | wget http://ftpmirror.gnu.org/gsl/${NAME}.tar.gz | ||||||
| tar -xzvf ${name}.tar.gz | tar -xzvf ${NAME}.tar.gz | ||||||
| mkdir -p ${name}/build | mkdir -p ${NAME}/build | ||||||
| cd ${name}/build | cd ${NAME}/build | ||||||
| ../configure --prefix="${prefix}" | ../configure --prefix=${PREFIX} | ||||||
| make -j"${ntasks}" | make -j${NTASKS} | ||||||
| make install | make install | ||||||
| cd "${init_dir}/local" | cd ${INITDIR}/local | ||||||
| touch .built.gsl | touch .built.gsl | ||||||
| cd "${init_dir}" | cd ${INITDIR} | ||||||
| @@ -1,27 +1,27 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| name='hdf5-1.14.3' | NAME='hdf5-1.10.8' | ||||||
|  |  | ||||||
| if (($# != 2)); then | if (( $# != 2 )); then | ||||||
|   echo "usage: $(basename "$0") <prefix> <ntasks>" 1>&2 |   echo "usage: `basename $0` <prefix> <ntasks>" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| prefix=$1 | PREFIX=$1 | ||||||
| ntasks=$2 | NTASKS=$2 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| init_dir=$(pwd -P) | INITDIR=$(pwd -P) | ||||||
| mkdir -p "${prefix}" | mkdir -p ${PREFIX} | ||||||
| cd "${prefix}" | cd ${PREFIX} | ||||||
| prefix=$(pwd -P) | PREFIX=$(pwd -P) | ||||||
| cd "${init_dir}/local/build" | cd ${INITDIR}/local/build | ||||||
| wget "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/${name}/src/${name}.tar.gz" | wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${NAME}/src/${NAME}.tar.gz | ||||||
| tar -xzvf ${name}.tar.gz | tar -xzvf ${NAME}.tar.gz | ||||||
| mkdir ${name}/build | mkdir ${NAME}/build | ||||||
| cd ${name}/build | cd ${NAME}/build | ||||||
| ../configure --prefix="${prefix}" --enable-cxx | ../configure --prefix=${PREFIX} --enable-cxx | ||||||
| make -j "${ntasks}" | make -j${NTASKS} | ||||||
| make install | make install | ||||||
| cd "${init_dir}/local" | cd ${INITDIR}/local | ||||||
| touch .built.hdf5 | touch .built.hdf5 | ||||||
| cd "${init_dir}" | cd ${INITDIR} | ||||||
|   | |||||||
| @@ -1,22 +1,23 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| if (($# != 2)); then | if (( $# != 2 )); then | ||||||
|   echo "usage: $(basename "$0") <prefix> <ntasks>" 1>&2 |   echo "usage: `basename $0` <prefix> <ntasks>" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| prefix=$1 | PREFIX=$1 | ||||||
| ntasks=$2 | NTASKS=$2 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| init_dir=$(pwd -P) | INITDIR=$(pwd -P) | ||||||
| mkdir -p "${prefix}" | mkdir -p ${PREFIX} | ||||||
| cd "${prefix}" | cd ${PREFIX} | ||||||
| prefix=$(pwd -P) | PREFIX=$(pwd -P) | ||||||
| cd "${init_dir}" | cd ${INITDIR} | ||||||
| ./install-deps.sh "${prefix}" "${ntasks}" | ./install-deps.sh ${PREFIX} ${NTASKS} | ||||||
| mkdir -p "${init_dir}/local/build/latan" | cd .. | ||||||
| cd "${init_dir}/local/build/latan" | ./bootstrap.sh | ||||||
| cmake -DCMAKE_INSTALL_PREFIX="${prefix}" -DCMAKE_PREFIX_PATH="${prefix}" \ | mkdir -p build | ||||||
|   -DCMAKE_BUILD_TYPE="RelWithDebInfo" "${init_dir}/.." | cd build | ||||||
| make -j "${ntasks}" | ../configure --prefix=${PREFIX} --with-minuit=${PREFIX} --with-nlopt=${PREFIX} --with-hdf5=${PREFIX} --with-gsl=${PREFIX} CXXFLAGS="${CXXFLAGS} -O3 -march=native -mtune=native" | ||||||
|  | make -j${NTASKS} | ||||||
| make install | make install | ||||||
|   | |||||||
| @@ -1,26 +1,26 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| if (($# != 2)); then |  | ||||||
|   echo "usage: $(basename "$0") <prefix> <ntasks>" 1>&2 | if (( $# != 2 )); then | ||||||
|  |   echo "usage: `basename $0` <prefix> <ntasks>" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| prefix=$1 | PREFIX=$1 | ||||||
| ntasks=$2 | NTASKS=$2 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| init_dir=$(pwd -P) | INITDIR=$(pwd -P) | ||||||
| mkdir -p "${prefix}" | mkdir -p ${PREFIX} | ||||||
| cd "${prefix}" | cd ${PREFIX} | ||||||
| prefix=$(pwd -P) | PREFIX=$(pwd -P) | ||||||
| cd "${init_dir}/local/build" | cd ${INITDIR}/local/build | ||||||
| rm -rf root | rm -rf root | ||||||
| git clone https://github.com/root-project/root.git | git clone https://github.com/root-project/root.git | ||||||
| cd root/math/minuit2/ | cd root/math/minuit2/ | ||||||
| mkdir build | mkdir build; cd build | ||||||
| cd build | cmake .. -Dminuit2_standalone=ON -DCMAKE_INSTALL_PREFIX=${PREFIX} | ||||||
| cmake .. -Dminuit2_standalone=ON -DCMAKE_INSTALL_PREFIX="${prefix}" | make -j${NTASKS} | ||||||
| make -j "${ntasks}" |  | ||||||
| make install | make install | ||||||
| cd "${init_dir}/local" | cd ${INITDIR}/local | ||||||
| touch .built.minuit | touch .built.minuit | ||||||
| cd "${init_dir}" | cd ${INITDIR} | ||||||
|   | |||||||
| @@ -1,30 +1,28 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| name='2.6.1' | NAME='2.6.1' | ||||||
|  |  | ||||||
| if (($# != 2)); then | if (( $# != 2 )); then | ||||||
|   echo "usage: $(basename "$0") <prefix> <ntasks>" 1>&2 |   echo "usage: `basename $0` <prefix> <ntasks>" 1>&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| prefix=$1 | PREFIX=$1 | ||||||
| ntasks=$2 | NTASKS=$2 | ||||||
|  |  | ||||||
| set -ex | set -ex | ||||||
| init_dir=$(pwd -P) | INITDIR=$(pwd -P) | ||||||
| mkdir -p "${prefix}" | mkdir -p ${PREFIX} | ||||||
| cd "${prefix}" | cd ${PREFIX} | ||||||
| prefix=$(pwd -P) | PREFIX=$(pwd -P) | ||||||
| cd "${init_dir}/local/build" | cd ${INITDIR}/local/build | ||||||
| wget "https://github.com/stevengj/nlopt/archive/v${name}.tar.gz" | wget https://github.com/stevengj/nlopt/archive/v${NAME}.tar.gz | ||||||
| tar -xzvf v${name}.tar.gz | tar -xzvf v${NAME}.tar.gz | ||||||
| name=nlopt-${name} | 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 \ | cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=TRUE -DCMAKE_INSTALL_NAME_DIR="${PREFIX}/lib" .. | ||||||
|   -DCMAKE_INSTALL_NAME_DIR="${prefix}/lib" -DNLOPT_PYTHON=OFF -DNLOPT_OCTAVE=OFF \ | make -j${NTASKS} | ||||||
|   -DNLOPT_MATLAB=OFF -DNLOPT_GUILE=OFF -DNLOPT_SWIG=OFF .. |  | ||||||
| make -j "${ntasks}" |  | ||||||
| make install | make install | ||||||
| cd "${init_dir}/local" | cd ${INITDIR}/local | ||||||
| touch .built.nlopt | touch .built.nlopt | ||||||
| cd "${init_dir}" | cd ${INITDIR} | ||||||
|   | |||||||
							
								
								
									
										167
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | |||||||
|  | # Process this file with autoconf to produce a configure script. | ||||||
|  |  | ||||||
|  | # Initialization | ||||||
|  | AC_PREREQ([2.63]) | ||||||
|  | AC_INIT([LatAnalyze],[3.5.1-dev],[antonin.portelli@me.com],[LatAnalyze]) | ||||||
|  | AC_CONFIG_AUX_DIR([.buildutils]) | ||||||
|  | AC_CONFIG_SRCDIR([lib/Global.cpp]) | ||||||
|  | AC_CONFIG_SRCDIR([utils/sample_read.cpp]) | ||||||
|  | AC_CONFIG_SRCDIR([examples/exMathInterpreter.cpp]) | ||||||
|  | AC_CONFIG_MACRO_DIR([.buildutils/m4]) | ||||||
|  | AM_INIT_AUTOMAKE([1.11 -Wall -Werror foreign subdir-objects]) | ||||||
|  | AM_SILENT_RULES([yes]) | ||||||
|  | AC_CONFIG_HEADERS([config.h]) | ||||||
|  | AM_CONDITIONAL([HAVE_AM_MINOR_LE_11], | ||||||
|  |                [test `automake --version | grep automake | awk -F '.' '{print $2}'` -le 11]) | ||||||
|  | # Checks for programs | ||||||
|  | AC_PROG_CXX | ||||||
|  | AC_PROG_AWK | ||||||
|  | AC_PROG_CC | ||||||
|  | AC_PROG_CPP | ||||||
|  | AC_PROG_INSTALL | ||||||
|  | AC_PROG_LN_S | ||||||
|  | AC_PROG_MAKE_SET | ||||||
|  | AC_PROG_LEX | ||||||
|  | AC_PROG_YACC | ||||||
|  | m4_ifdef([AM_PROG_AR],[AM_PROG_AR]) | ||||||
|  |  | ||||||
|  | LT_INIT | ||||||
|  |  | ||||||
|  | # Options | ||||||
|  | AC_ARG_WITH([gsl], | ||||||
|  |     [AS_HELP_STRING([--with-gsl=prefix], | ||||||
|  | 		[try this for a non-standard install prefix of the GSL library])], | ||||||
|  | 	[AM_CXXFLAGS="$AM_CXXFLAGS -I$with_gsl/include"] | ||||||
|  | 	[AM_LDFLAGS="$AM_LDFLAGS -L$with_gsl/lib"]) | ||||||
|  | AC_ARG_WITH([minuit], | ||||||
|  |     [AS_HELP_STRING([--with-minuit=prefix], | ||||||
|  | 		[try this for a non-standard install prefix of the Minuit2 library])], | ||||||
|  |     [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_minuit/include -I$with_minuit/include/Minuit2 -I$with_minuit/include/Fit"] | ||||||
|  | 	[AM_LDFLAGS="$AM_LDFLAGS -L$with_minuit/lib"]) | ||||||
|  | AC_ARG_WITH([nlopt], | ||||||
|  |     [AS_HELP_STRING([--with-nlopt=prefix], | ||||||
|  |         [try this for a non-standard install prefix of the NLopt library])], | ||||||
|  |     [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_nlopt/include"] | ||||||
|  |     [AM_LDFLAGS="$AM_LDFLAGS -L$with_nlopt/lib"]) | ||||||
|  | AC_ARG_WITH([hdf5], | ||||||
|  |     [AS_HELP_STRING([--with-hdf5=prefix], | ||||||
|  |     [try this for a non-standard install prefix of the HDF5 library])], | ||||||
|  |     [AM_CXXFLAGS="$AM_CXXFLAGS -I$with_hdf5/include"] | ||||||
|  |     [AM_LDFLAGS="$AM_LDFLAGS -L$with_hdf5/lib"]) | ||||||
|  |  | ||||||
|  | # Get compilers informations | ||||||
|  | AX_COMPILER_VENDOR | ||||||
|  | AC_DEFINE_UNQUOTED([C_COMP_VENDOR],["$ax_cv_c_compiler_vendor"], | ||||||
|  | 			[vendor of C compiler that will compile the code]) | ||||||
|  | AM_CONDITIONAL([CC_GNU],[test $ax_cv_c_compiler_vendor = "gnu"]) | ||||||
|  | AM_CONDITIONAL([CC_INTEL],[test $ax_cv_c_compiler_vendor = "intel"]) | ||||||
|  | AC_LANG([C++]) | ||||||
|  | AX_CXX_COMPILE_STDCXX_11([noext],[mandatory]) | ||||||
|  | AX_COMPILER_VENDOR | ||||||
|  | AC_DEFINE_UNQUOTED([CXX_COMP_VENDOR],["$ax_cv_cxx_compiler_vendor"], | ||||||
|  | 			[vendor of C++ compiler that will compile the code]) | ||||||
|  | AM_CONDITIONAL([CXX_GNU],[test $ax_cv_cxx_compiler_vendor = "gnu"]) | ||||||
|  | AM_CONDITIONAL([CXX_INTEL],[test $ax_cv_cxx_compiler_vendor = "intel"]) | ||||||
|  | AX_GCC_VERSION | ||||||
|  | AC_DEFINE_UNQUOTED([GCC_VERSION],["$GCC_VERSION"], | ||||||
|  | 			[version of gcc that will compile the code]) | ||||||
|  | AX_GXX_VERSION | ||||||
|  | AC_DEFINE_UNQUOTED([GXX_VERSION],["$GXX_VERSION"], | ||||||
|  | 			[version of g++ that will compile the code]) | ||||||
|  |  | ||||||
|  | # Checks for libraries. | ||||||
|  | CXXFLAGS_CPY=$CXXFLAGS | ||||||
|  | LDFLAGS_CPY=$LDFLAGS | ||||||
|  | CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" | ||||||
|  | LDFLAGS="$AM_LDFLAGS $LDFLAGS" | ||||||
|  | AC_CHECK_LIB([pthread],[pthread_create],[],[AC_MSG_ERROR([pthread library not found])]) | ||||||
|  | AC_CHECK_LIB([m],[cos],[],[AC_MSG_ERROR([libm library not found])]) | ||||||
|  | AC_CHECK_LIB([gslcblas],[cblas_dgemm],[], | ||||||
|  |              [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([nlopt],[nlopt_create], | ||||||
|  |     [AC_DEFINE([HAVE_NLOPT], | ||||||
|  |     [1], | ||||||
|  |     [Define to 1 if you have the `NLopt' library (-lnlopt).])] | ||||||
|  |     [have_nlopt=true] | ||||||
|  |     [LIBS="$LIBS -lnlopt"],[]) | ||||||
|  | AM_CONDITIONAL([HAVE_NLOPT], [test x$have_nlopt = xtrue]) | ||||||
|  | AC_CHECK_LIB([hdf5_cpp],[H5Fopen], | ||||||
|  |     [LIBS="$LIBS -lhdf5_cpp -lhdf5"], | ||||||
|  |     [AC_MSG_ERROR([HDF5 library not found])], [-lhdf5]) | ||||||
|  | SAVED_LDFLAGS=$LDFLAGS | ||||||
|  | LDFLAGS="$LDFLAGS -lMinuit2" | ||||||
|  | AC_MSG_CHECKING([for ROOT::Minuit2::VariableMetricMinimizer in -lMinuit2]); | ||||||
|  | AC_LINK_IFELSE( | ||||||
|  | 	[AC_LANG_PROGRAM([#include <Minuit2/VariableMetricMinimizer.h>], | ||||||
|  | 	[ROOT::Minuit2::VariableMetricMinimizer dummy()])], | ||||||
|  | 	[LIBS="$LIBS -lMinuit2"] | ||||||
|  | 	[AC_DEFINE([HAVE_MINUIT2], | ||||||
|  | 				[1], | ||||||
|  | 				[Define to 1 if you have the `Minuit2' library (-lMinuit2).])] | ||||||
|  |     [have_minuit=true] | ||||||
|  | 	[AC_MSG_RESULT([yes])], | ||||||
|  | 	[have_minuit=false] | ||||||
|  |     [AC_MSG_RESULT([no])]) | ||||||
|  | AM_CONDITIONAL([HAVE_MINUIT], [test x$have_minuit = xtrue]) | ||||||
|  | LDFLAGS="$LDFLAGS -lMinuit2Math" | ||||||
|  | AC_MSG_CHECKING([for ROOT::Math::MinimizerOptions in -lMinuit2Math]); | ||||||
|  | AC_LINK_IFELSE( | ||||||
|  | 	[AC_LANG_PROGRAM([#include <Minuit2/Math/MinimizerOptions.h>], | ||||||
|  | 	[ROOT::Math::MinimizerOptions dummy()])], | ||||||
|  | 	[LIBS="$LIBS -lMinuit2Math"] | ||||||
|  | 	[AC_DEFINE([HAVE_MINUIT2MATH], | ||||||
|  | 				[1], | ||||||
|  | 				[Define to 1 if you have the `Minuit2Math' library (-lMinuit2Math).])] | ||||||
|  |     [have_minuitmath=true] | ||||||
|  | 	[AC_MSG_RESULT([yes])], | ||||||
|  | 	[have_minuitmath=false] | ||||||
|  |     [AC_MSG_RESULT([no])]) | ||||||
|  | AM_CONDITIONAL([HAVE_MINUITMATH], [test x$have_minuit = xtrue]) | ||||||
|  | LDFLAGS=$SAVED_LDFLAGS | ||||||
|  | CXXFLAGS=$CXXFLAGS_CPY | ||||||
|  | LDFLAGS=$LDFLAGS_CPY | ||||||
|  |  | ||||||
|  | # Checks for header files. | ||||||
|  | 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([AM_CXXFLAGS]) | ||||||
|  | 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]) | ||||||
|  | AC_CONFIG_FILES([lib/Makefile]) | ||||||
|  | AC_CONFIG_FILES([utils/Makefile]) | ||||||
|  | AC_CONFIG_FILES([physics/Makefile]) | ||||||
|  | AC_CONFIG_FILES([examples/Makefile]) | ||||||
|  | AC_OUTPUT | ||||||
|  |  | ||||||
|  | echo "*********************************************" | ||||||
|  | echo "* ${PACKAGE_NAME} v${VERSION}" build options | ||||||
|  | echo "*********************************************" | ||||||
|  | echo "* C++ compiler     : $CXX" | ||||||
|  | echo "* Minuit minimizers: `test x$HAVE_MINUIT_TRUE = 'x' && echo yes \ | ||||||
|  |                                                           || echo no`" | ||||||
|  | echo "* NLopt minimizers : `test x$HAVE_NLOPT_TRUE = 'x'  && echo yes \ | ||||||
|  |                                                           || echo no`" | ||||||
|  | echo "*********************************************" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								eigen-3.3.8.tar.bz2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								eigen-3.3.8.tar.bz2
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,21 +0,0 @@ | |||||||
| set(EXAMPLES_STEM |  | ||||||
|     exCompiledDoubleFunction |  | ||||||
|     exDerivative |  | ||||||
|     exDWT |  | ||||||
|     exFit |  | ||||||
|     exFitSample |  | ||||||
|     exIntegrator |  | ||||||
|     exInterp |  | ||||||
|     exMat |  | ||||||
|     exMathInterpreter |  | ||||||
|     exMin |  | ||||||
|     exPlot |  | ||||||
|     exPValue |  | ||||||
|     exRand |  | ||||||
|     exRootFinder |  | ||||||
|     exThreadPool) |  | ||||||
|  |  | ||||||
| foreach(_stem ${EXAMPLES_STEM}) |  | ||||||
|   add_executable(${_stem} ${_stem}.cpp) |  | ||||||
|   target_link_libraries(${_stem} LatAnalyze compiler_flags) |  | ||||||
| endforeach() |  | ||||||
							
								
								
									
										1
									
								
								examples/LatAnalyze
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								examples/LatAnalyze
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | ../lib | ||||||
							
								
								
									
										86
									
								
								examples/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								examples/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | |||||||
|  | if CXX_GNU | ||||||
|  |     COM_CXXFLAGS = -Wall -W -pedantic -Wno-deprecated-declarations | ||||||
|  | else | ||||||
|  | if CXX_INTEL | ||||||
|  |     COM_CXXFLAGS = -wd1682 -Wall | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | noinst_PROGRAMS =           \ | ||||||
|  |     exCompiledDoubleFunction\ | ||||||
|  |     exDerivative            \ | ||||||
|  |     exDWT                   \ | ||||||
|  |     exFit                   \ | ||||||
|  |     exFitSample             \ | ||||||
|  |     exIntegrator            \ | ||||||
|  |     exInterp                \ | ||||||
|  |     exMat                   \ | ||||||
|  |     exMathInterpreter       \ | ||||||
|  |     exMin                   \ | ||||||
|  |     exPlot                  \ | ||||||
|  |     exPValue                \ | ||||||
|  |     exRand                  \ | ||||||
|  |     exRootFinder            \ | ||||||
|  |     exThreadPool | ||||||
|  |  | ||||||
|  | exCompiledDoubleFunction_SOURCES  = exCompiledDoubleFunction.cpp | ||||||
|  | exCompiledDoubleFunction_CXXFLAGS = $(COM_CXXFLAGS) | ||||||
|  | exCompiledDoubleFunction_LDFLAGS  = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exDerivative_SOURCES              = exDerivative.cpp | ||||||
|  | exDerivative_CXXFLAGS             = $(COM_CXXFLAGS) | ||||||
|  | exDerivative_LDFLAGS              = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exDWT_SOURCES                     = exDWT.cpp | ||||||
|  | exDWT_CXXFLAGS                    = $(COM_CXXFLAGS) | ||||||
|  | exDWT_LDFLAGS                     = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exFit_SOURCES                     = exFit.cpp | ||||||
|  | exFit_CXXFLAGS                    = $(COM_CXXFLAGS) | ||||||
|  | exFit_LDFLAGS                     = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exFitSample_SOURCES               = exFitSample.cpp | ||||||
|  | exFitSample_CXXFLAGS              = $(COM_CXXFLAGS) | ||||||
|  | exFitSample_LDFLAGS               = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exInterp_SOURCES                  = exInterp.cpp | ||||||
|  | exInterp_CXXFLAGS                 = $(COM_CXXFLAGS) | ||||||
|  | exInterp_LDFLAGS                  = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exIntegrator_SOURCES              = exIntegrator.cpp | ||||||
|  | exIntegrator_CXXFLAGS             = $(COM_CXXFLAGS) | ||||||
|  | exIntegrator_LDFLAGS              = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exMat_SOURCES                     = exMat.cpp | ||||||
|  | exMat_CXXFLAGS                    = $(COM_CXXFLAGS) | ||||||
|  | exMat_LDFLAGS                     = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exMin_SOURCES                     = exMin.cpp | ||||||
|  | exMin_CXXFLAGS                    = $(COM_CXXFLAGS) | ||||||
|  | exMin_LDFLAGS                     = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exMathInterpreter_SOURCES         = exMathInterpreter.cpp | ||||||
|  | exMathInterpreter_CXXFLAGS        = $(COM_CXXFLAGS) | ||||||
|  | exMathInterpreter_LDFLAGS         = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exPlot_SOURCES                    = exPlot.cpp | ||||||
|  | exPlot_CXXFLAGS                   = $(COM_CXXFLAGS) | ||||||
|  | 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_CXXFLAGS                   = $(COM_CXXFLAGS) | ||||||
|  | exRand_LDFLAGS                    = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exRootFinder_SOURCES              = exRootFinder.cpp | ||||||
|  | exRootFinder_CXXFLAGS             = $(COM_CXXFLAGS) | ||||||
|  | exRootFinder_LDFLAGS              = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | exThreadPool_SOURCES              = exThreadPool.cpp | ||||||
|  | exThreadPool_CXXFLAGS             = $(COM_CXXFLAGS) | ||||||
|  | exThreadPool_LDFLAGS              = -L../lib/.libs -lLatAnalyze | ||||||
|  |  | ||||||
|  | ACLOCAL_AMFLAGS = -I .buildutils/m4 | ||||||
| @@ -7,7 +7,7 @@ | |||||||
| using namespace std; | using namespace std; | ||||||
| using namespace Latan; | using namespace Latan; | ||||||
|  |  | ||||||
| constexpr Index  n             = 8; | constexpr Index  size          = 8; | ||||||
| constexpr Index  nDraw         = 20000; | constexpr Index  nDraw         = 20000; | ||||||
| constexpr Index  nSample       = 2000; | constexpr Index  nSample       = 2000; | ||||||
| const     string stateFileName = "exRand.seed"; | const     string stateFileName = "exRand.seed"; | ||||||
| @@ -40,14 +40,14 @@ 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(n, n); |     DMat       var(size, size); | ||||||
|     DVec       mean(n); |     DVec       mean(size); | ||||||
|     DMatSample sample(nSample, n, 1); |     DMatSample sample(nSample, size, 1); | ||||||
|  |  | ||||||
|     cout << "-- generating " << nSample << " Gaussian random vectors..." << endl; |     cout << "-- generating " << nSample << " Gaussian random vectors..." << endl; | ||||||
|     var   = DMat::Random(n, n); |     var   = DMat::Random(size, size); | ||||||
|     var  *= var.adjoint(); |     var  *= var.adjoint(); | ||||||
|     mean  = DVec::Random(n);  |     mean  = DVec::Random(size);  | ||||||
|     RandomNormal mgauss(mean, var, rd()); |     RandomNormal mgauss(mean, var, rd()); | ||||||
|     sample[central] = mgauss(); |     sample[central] = mgauss(); | ||||||
|     FOR_STAT_ARRAY(sample, s) |     FOR_STAT_ARRAY(sample, s) | ||||||
|   | |||||||
							
								
								
									
										79
									
								
								latan-config.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								latan-config.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  | #! /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,101 +0,0 @@ | |||||||
| # config.h header for package version and name |  | ||||||
| execute_process( |  | ||||||
|   COMMAND git rev-parse --short HEAD |  | ||||||
|   OUTPUT_VARIABLE LATAN_SHORT_SHA |  | ||||||
|   OUTPUT_STRIP_TRAILING_WHITESPACE) |  | ||||||
| execute_process( |  | ||||||
|   COMMAND git rev-parse HEAD |  | ||||||
|   OUTPUT_VARIABLE LATAN_SHA |  | ||||||
|   OUTPUT_STRIP_TRAILING_WHITESPACE) |  | ||||||
| execute_process( |  | ||||||
|   COMMAND git rev-parse --abbrev-ref HEAD |  | ||||||
|   OUTPUT_VARIABLE LATAN_BRANCH |  | ||||||
|   OUTPUT_STRIP_TRAILING_WHITESPACE) |  | ||||||
| configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY) |  | ||||||
|  |  | ||||||
| # find bison & flex |  | ||||||
| find_package(BISON REQUIRED) |  | ||||||
| find_package(FLEX REQUIRED) |  | ||||||
|  |  | ||||||
| # ASCII parser |  | ||||||
| bison_target( |  | ||||||
|   AsciiParser LatAnalyze/Io/AsciiParser.ypp |  | ||||||
|   ${CMAKE_CURRENT_BINARY_DIR}/AsciiParser.cpp COMPILE_FLAGS "-Wno-deprecated") |  | ||||||
| flex_target(AsciiLexer LatAnalyze/Io/AsciiLexer.lpp |  | ||||||
|             ${CMAKE_CURRENT_BINARY_DIR}/AsciiLexer.cpp) |  | ||||||
| add_flex_bison_dependency(AsciiLexer AsciiParser) |  | ||||||
|  |  | ||||||
| # math parser |  | ||||||
| bison_target( |  | ||||||
|   MathParser LatAnalyze/Core/MathParser.ypp |  | ||||||
|   ${CMAKE_CURRENT_BINARY_DIR}/MathParser.cpp COMPILE_FLAGS "-Wno-deprecated") |  | ||||||
| flex_target(MathLexer LatAnalyze/Core/MathLexer.lpp |  | ||||||
|             ${CMAKE_CURRENT_BINARY_DIR}/MathLexer.cpp) |  | ||||||
| add_flex_bison_dependency(MathLexer MathParser) |  | ||||||
|  |  | ||||||
| # intermediate libraries |  | ||||||
| add_library(parsers STATIC) |  | ||||||
| target_include_directories(parsers PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) |  | ||||||
| target_sources( |  | ||||||
|   parsers PRIVATE ${BISON_AsciiParser_OUTPUTS} ${FLEX_AsciiLexer_OUTPUTS} |  | ||||||
|                   ${BISON_MathParser_OUTPUTS} ${FLEX_MathLexer_OUTPUTS}) |  | ||||||
|  |  | ||||||
| add_library(tinyxml2 STATIC) |  | ||||||
| target_include_directories(parsers PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) |  | ||||||
| target_sources(tinyxml2 PRIVATE LatAnalyze/Io/Xml/tinyxml2.hpp |  | ||||||
|                                 LatAnalyze/Io/Xml/tinyxml2.cpp) |  | ||||||
|  |  | ||||||
| # library target |  | ||||||
| add_library(LatAnalyze SHARED) |  | ||||||
| file(GLOB_RECURSE EIGEN_HEADERS LatAnalyze/Eigen/*) |  | ||||||
| target_include_directories(LatAnalyze PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) |  | ||||||
| include(source-list.cmake) |  | ||||||
| target_sources( |  | ||||||
|   LatAnalyze |  | ||||||
|   PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/config.h ${LATAN_SOURCES} |  | ||||||
|   PUBLIC FILE_SET |  | ||||||
|          public_headers |  | ||||||
|          TYPE |  | ||||||
|          HEADERS |  | ||||||
|          FILES |  | ||||||
|          ${EIGEN_HEADERS} |  | ||||||
|          ${LATAN_HEADERS}) |  | ||||||
| target_link_libraries(LatAnalyze PRIVATE compiler_flags parsers tinyxml2) |  | ||||||
| target_link_libraries(LatAnalyze PUBLIC GSL::gsl hdf5::hdf5 hdf5::hdf5_cpp |  | ||||||
|                                         ${CMAKE_THREAD_LIBS_INIT}) |  | ||||||
| if(Minuit2_FOUND) |  | ||||||
|   target_link_libraries(LatAnalyze PUBLIC Minuit2::Minuit2) |  | ||||||
| endif() |  | ||||||
| if(NLopt_FOUND) |  | ||||||
|   target_link_libraries(LatAnalyze PUBLIC NLopt::nlopt) |  | ||||||
| endif() |  | ||||||
| set_target_properties(LatAnalyze PROPERTIES VERSION ${PROJECT_VERSION}) |  | ||||||
| target_include_directories( |  | ||||||
|   LatAnalyze PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> |  | ||||||
|                     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) |  | ||||||
|  |  | ||||||
| # installation |  | ||||||
| install( |  | ||||||
|   TARGETS LatAnalyze |  | ||||||
|   EXPORT LatAnalyzeTargets |  | ||||||
|   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |  | ||||||
|   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |  | ||||||
|   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |  | ||||||
|           FILE_SET public_headers |  | ||||||
|           DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |  | ||||||
| install( |  | ||||||
|   EXPORT LatAnalyzeTargets |  | ||||||
|   FILE LatAnalyzeTargets.cmake |  | ||||||
|   NAMESPACE LatAnalyze:: |  | ||||||
|   DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LatAnalyze) |  | ||||||
| configure_package_config_file( |  | ||||||
|   ${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in |  | ||||||
|   "${CMAKE_CURRENT_BINARY_DIR}/LatAnalyzeConfig.cmake" |  | ||||||
|   INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LatAnalyze) |  | ||||||
| write_basic_package_version_file( |  | ||||||
|   "${CMAKE_CURRENT_BINARY_DIR}/LatAnalyzeConfigVersion.cmake" |  | ||||||
|   VERSION "${PROJECT_VERSION}" |  | ||||||
|   COMPATIBILITY AnyNewerVersion) |  | ||||||
| install(FILES "${CMAKE_CURRENT_BINARY_DIR}/LatAnalyzeConfig.cmake" |  | ||||||
|               "${CMAKE_CURRENT_BINARY_DIR}/LatAnalyzeConfigVersion.cmake" |  | ||||||
|         DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LatAnalyze) |  | ||||||
| @@ -1,28 +0,0 @@ | |||||||
| @PACKAGE_INIT@ |  | ||||||
|  |  | ||||||
| include(CMakeFindDependencyMacro) |  | ||||||
|  |  | ||||||
| find_dependency(GSL REQUIRED) |  | ||||||
| find_dependency(HDF5 REQUIRED COMPONENTS C CXX) |  | ||||||
| set(HAVE_Minuit2 @Minuit2_FOUND@) |  | ||||||
| set(HAVE_NLopt @NLopt_FOUND@) |  | ||||||
| if(HAVE_Minuit2) |  | ||||||
|   find_dependency(Minuit2 REQUIRED) |  | ||||||
|   list(APPEND _LatAnalyze_supported_components MINUIT2) |  | ||||||
|   set(LatAnalyze_MINUIT2_FOUND True) |  | ||||||
| endif() |  | ||||||
| if(HAVE_NLopt) |  | ||||||
|   find_dependency(NLopt REQUIRED) |  | ||||||
|   list(APPEND _LatAnalyze_supported_components NLOPT) |  | ||||||
|   set(LatAnalyze_NLOPT_FOUND True) |  | ||||||
| endif() |  | ||||||
| foreach(_comp ${LatAnalyze_FIND_COMPONENTS}) |  | ||||||
|   if (NOT ";${_LatAnalyze_supported_components};" MATCHES ";${_comp};") |  | ||||||
|     set(LatAnalyze_FOUND False) |  | ||||||
|     set(LatAnalyze_NOT_FOUND_MESSAGE "Unsupported LatAnalyze component: ${_comp}") |  | ||||||
|   endif() |  | ||||||
| endforeach() |  | ||||||
|  |  | ||||||
| include("${CMAKE_CURRENT_LIST_DIR}/LatAnalyzeTargets.cmake") |  | ||||||
|  |  | ||||||
| check_required_components(LatAnalyze) |  | ||||||
| @@ -18,7 +18,6 @@ | |||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Core/Math.hpp> | #include <LatAnalyze/Core/Math.hpp> | ||||||
| #include <LatAnalyze/Numerical/GslFFT.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> | #include <LatAnalyze/includes.hpp> | ||||||
| #include <gsl/gsl_cdf.h> | #include <gsl/gsl_cdf.h> | ||||||
| 
 | 
 | ||||||
| @@ -49,42 +48,16 @@ DMat MATH_NAMESPACE::corrToVar(const DMat &corr, const DVec &varDiag) | |||||||
|     return res; |     return res; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| double MATH_NAMESPACE::conditionNumber(const DMat &mat) | double MATH_NAMESPACE::svdDynamicRange(const DMat &mat) | ||||||
| { | { | ||||||
|     DVec s = mat.singularValues(); |     DVec s = mat.singularValues(); | ||||||
| 
 | 
 | ||||||
|     return s.maxCoeff()/s.minCoeff(); |     return s.maxCoeff()/s.minCoeff(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| double MATH_NAMESPACE::cdr(const DMat &mat) | double MATH_NAMESPACE::svdDynamicRangeDb(const DMat &mat) | ||||||
| { | { | ||||||
|     return 10.*log10(conditionNumber(mat)); |     return 10.*log10(svdDynamicRange(mat)); | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template <typename FFT> |  | ||||||
| double nsdr(const DMat &m) |  | ||||||
| { |  | ||||||
|     Index  n = m.rows(); |  | ||||||
|     FFT    fft(n); |  | ||||||
|     CMat   buf(n, 1); |  | ||||||
| 
 |  | ||||||
|     FOR_VEC(buf, i) |  | ||||||
|     { |  | ||||||
|         buf(i) = 0.; |  | ||||||
|         for (Index j = 0; j < n; ++j) |  | ||||||
|         { |  | ||||||
|             buf(i) += m(j, (i+j) % n); |  | ||||||
|         } |  | ||||||
|         buf(i) /= n; |  | ||||||
|     } |  | ||||||
|     fft(buf, FFT::Forward); |  | ||||||
| 
 |  | ||||||
|     return 10.*log10(buf.real().maxCoeff()/buf.real().minCoeff()); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| double MATH_NAMESPACE::nsdr(const DMat &mat) |  | ||||||
| { |  | ||||||
|     return ::nsdr<GslFFT>(mat); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /******************************************************************************
 | /******************************************************************************
 | ||||||
| @@ -73,9 +73,8 @@ namespace MATH_NAMESPACE | |||||||
|     DMat corrToVar(const DMat &corr, const DVec &varDiag); |     DMat corrToVar(const DMat &corr, const DVec &varDiag); | ||||||
| 
 | 
 | ||||||
|     // matrix SVD dynamic range
 |     // matrix SVD dynamic range
 | ||||||
|     double conditionNumber(const DMat &mat); |     double svdDynamicRange(const DMat &mat); | ||||||
|     double cdr(const DMat &mat); |     double svdDynamicRangeDb(const DMat &mat); | ||||||
|     double nsdr(const DMat &mat); |  | ||||||
|      |      | ||||||
|     // Constants
 |     // Constants
 | ||||||
|     constexpr double pi  = 3.1415926535897932384626433832795028841970; |     constexpr double pi  = 3.1415926535897932384626433832795028841970; | ||||||
| @@ -36,7 +36,7 @@ unsigned int RunContext::addFunction(const string &name, DoubleFunction *init) | |||||||
|          |          | ||||||
|         return getFunctionAddress(name); |         return getFunctionAddress(name); | ||||||
|     } |     } | ||||||
|     catch (Exceptions::Definition &) |     catch (Exceptions::Definition) | ||||||
|     { |     { | ||||||
|         unsigned int address = fTable_.size(); |         unsigned int address = fTable_.size(); | ||||||
|          |          | ||||||
| @@ -55,7 +55,7 @@ unsigned int RunContext::addVariable(const string &name, double init) | |||||||
|          |          | ||||||
|         return getVariableAddress(name); |         return getVariableAddress(name); | ||||||
|     } |     } | ||||||
|     catch (Exceptions::Definition &) |     catch (Exceptions::Definition) | ||||||
|     { |     { | ||||||
|         unsigned int address = vTable_.size(); |         unsigned int address = vTable_.size(); | ||||||
|          |          | ||||||
| @@ -92,7 +92,7 @@ unsigned int RunContext::getFunctionAddress(const string &name) const | |||||||
|     { |     { | ||||||
|         return fTable_.at(name); |         return fTable_.at(name); | ||||||
|     } |     } | ||||||
|     catch (out_of_range &) |     catch (out_of_range) | ||||||
|     { |     { | ||||||
|         LATAN_ERROR(Definition, "undefined function '" + name + "'"); |         LATAN_ERROR(Definition, "undefined function '" + name + "'"); | ||||||
|     } |     } | ||||||
| @@ -139,7 +139,7 @@ unsigned int RunContext::getVariableAddress(const string &name) const | |||||||
|     { |     { | ||||||
|         return vTable_.at(name); |         return vTable_.at(name); | ||||||
|     } |     } | ||||||
|     catch (out_of_range &) |     catch (out_of_range) | ||||||
|     { |     { | ||||||
|         LATAN_ERROR(Definition, "undefined variable '" + name + "'"); |         LATAN_ERROR(Definition, "undefined variable '" + name + "'"); | ||||||
|     } |     } | ||||||
| @@ -449,7 +449,7 @@ try\ | |||||||
| {\ | {\ | ||||||
|     address = (table).at(name);\ |     address = (table).at(name);\ | ||||||
| }\ | }\ | ||||||
| catch (out_of_range &)\ | catch (out_of_range)\ | ||||||
| {\ | {\ | ||||||
|     address         = (table).size();\ |     address         = (table).size();\ | ||||||
|     (table)[(name)] = address;\ |     (table)[(name)] = address;\ | ||||||
| @@ -72,7 +72,7 @@ string PlotObject::dumpToTmpFile(const DMat &m) | |||||||
|     for (Index j = 0; j < m.cols(); ++j) |     for (Index j = 0; j < m.cols(); ++j) | ||||||
|     { |     { | ||||||
|     } |     } | ||||||
|     snprintf(tmpFileName, sizeof(tmpFileName), "%s/latan_plot_tmp.XXXXXX.dat", P_tmpdir); |     sprintf(tmpFileName, "%s/latan_plot_tmp.XXXXXX.dat", P_tmpdir); | ||||||
|     fd = mkstemps(tmpFileName, 4); |     fd = mkstemps(tmpFileName, 4); | ||||||
|     if (fd == -1) |     if (fd == -1) | ||||||
|     { |     { | ||||||
| @@ -515,16 +515,14 @@ void Dash::operator()(PlotOptions &option) const | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // LogScale constructor ////////////////////////////////////////////////////////
 | // LogScale constructor ////////////////////////////////////////////////////////
 | ||||||
| LogScale::LogScale(const Axis axis, const double basis) | LogScale::LogScale(const Axis axis) | ||||||
| : axis_(axis) | : axis_(axis) | ||||||
| , basis_(basis) |  | ||||||
| {} | {} | ||||||
| 
 | 
 | ||||||
| // Logscale modifier ///////////////////////////////////////////////////////////
 | // Logscale modifier ///////////////////////////////////////////////////////////
 | ||||||
| void LogScale::operator()(PlotOptions &option) const | void LogScale::operator()(PlotOptions &option) const | ||||||
| { | { | ||||||
|     option.scaleMode[static_cast<int>(axis_)]     |= Plot::Scale::log; |     option.scaleMode[static_cast<int>(axis_)] |= Plot::Scale::log; | ||||||
|     option.logScaleBasis[static_cast<int>(axis_)]  = basis_; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // PlotRange constructors //////////////////////////////////////////////////////
 | // PlotRange constructors //////////////////////////////////////////////////////
 | ||||||
| @@ -699,7 +697,7 @@ Plot & Plot::operator<<(PlotModifier &&modifier) | |||||||
| 
 | 
 | ||||||
| // find gnuplot ////////////////////////////////////////////////////////////////
 | // find gnuplot ////////////////////////////////////////////////////////////////
 | ||||||
| #define SEARCH_DIR(dir) \ | #define SEARCH_DIR(dir) \ | ||||||
| snprintf(buf, sizeof(buf), "%s/%s", dir, gnuplotBin_.c_str());\ | sprintf(buf, "%s/%s", dir, gnuplotBin_.c_str());\ | ||||||
| if (access(buf, X_OK) == 0)\ | if (access(buf, X_OK) == 0)\ | ||||||
| {\ | {\ | ||||||
|     return dir;\ |     return dir;\ | ||||||
| @@ -917,11 +915,11 @@ ostream & Latan::operator<<(ostream &out, const Plot &plot) | |||||||
|     out << "unset log" << endl; |     out << "unset log" << endl; | ||||||
|     if (plot.options_.scaleMode[x] & Plot::Scale::log) |     if (plot.options_.scaleMode[x] & Plot::Scale::log) | ||||||
|     { |     { | ||||||
|         out << "set log x " << plot.options_.logScaleBasis[x] << endl;; |         out << "set log x" << endl; | ||||||
|     } |     } | ||||||
|     if (plot.options_.scaleMode[y] & Plot::Scale::log) |     if (plot.options_.scaleMode[y] & Plot::Scale::log) | ||||||
|     { |     { | ||||||
|         out << "set log y " << plot.options_.logScaleBasis[y] << endl; |         out << "set log y" << endl; | ||||||
|     } |     } | ||||||
|     if (!plot.options_.label[x].empty()) |     if (!plot.options_.label[x].empty()) | ||||||
|     { |     { | ||||||
| @@ -227,7 +227,6 @@ struct PlotOptions | |||||||
|     std::string              caption; |     std::string              caption; | ||||||
|     std::string              title; |     std::string              title; | ||||||
|     unsigned int             scaleMode[2]; |     unsigned int             scaleMode[2]; | ||||||
|     double                   logScaleBasis[2]; |  | ||||||
|     Range                    scale[2]; |     Range                    scale[2]; | ||||||
|     std::string              label[2]; |     std::string              label[2]; | ||||||
|     std::string              lineColor; |     std::string              lineColor; | ||||||
| @@ -315,14 +314,13 @@ class LogScale: public PlotModifier | |||||||
| { | { | ||||||
| public: | public: | ||||||
|     // constructor
 |     // constructor
 | ||||||
|     explicit LogScale(const Axis axis, const double basis = 10); |     explicit LogScale(const Axis axis); | ||||||
|     // destructor
 |     // destructor
 | ||||||
|     virtual ~LogScale(void) = default; |     virtual ~LogScale(void) = default; | ||||||
|     // modifier
 |     // modifier
 | ||||||
|     virtual void operator()(PlotOptions &option) const; |     virtual void operator()(PlotOptions &option) const; | ||||||
| private: | private: | ||||||
|     const Axis axis_; |     const Axis axis_; | ||||||
|     const double basis_; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class PlotRange: public PlotModifier | class PlotRange: public PlotModifier | ||||||
| @@ -108,6 +108,23 @@ inline std::string strFrom(const T x) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // specialization for vectors
 | // specialization for vectors
 | ||||||
|  | template<> | ||||||
|  | inline std::vector<Index> strTo<std::vector<Index>>(const std::string &str) | ||||||
|  | { | ||||||
|  |     std::vector<Index>  res; | ||||||
|  |     std::vector<double> vbuf; | ||||||
|  |     double              buf; | ||||||
|  |     std::istringstream  stream(str); | ||||||
|  |      | ||||||
|  |     while (!stream.eof()) | ||||||
|  |     { | ||||||
|  |         stream >> buf; | ||||||
|  |         res.push_back(buf); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     return res; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| template<> | template<> | ||||||
| inline DVec strTo<DVec>(const std::string &str) | inline DVec strTo<DVec>(const std::string &str) | ||||||
| { | { | ||||||
| @@ -25,13 +25,11 @@ using namespace Latan; | |||||||
| 
 | 
 | ||||||
| PlaceHolder Latan::_; | PlaceHolder Latan::_; | ||||||
| 
 | 
 | ||||||
| const string Env::fullName  = strFrom(PROJECT_NAME) + " " + strFrom(LATAN_SHORT_SHA) + " (v" + strFrom(PROJECT_VERSION) + ")"; | const string Env::fullName  = PACKAGE_STRING; | ||||||
| const string Env::name      = PROJECT_NAME; | const string Env::name      = PACKAGE_NAME; | ||||||
| const string Env::version   = PROJECT_VERSION; | const string Env::version   = PACKAGE_VERSION; | ||||||
| const string Env::gitShortSha = LATAN_SHORT_SHA; | const string Env::msgPrefix = "[" + strFrom(PACKAGE_NAME) + " v" | ||||||
| const string Env::gitSha = LATAN_SHA; |                               + strFrom(PACKAGE_VERSION) + "] "; | ||||||
| const string Env::gitBranch = LATAN_BRANCH; |  | ||||||
| const string Env::msgPrefix = "[" + Env::fullName + "] "; |  | ||||||
| 
 | 
 | ||||||
| void Env::function(void) | void Env::function(void) | ||||||
| {} | {} | ||||||
| @@ -54,9 +54,6 @@ namespace Env | |||||||
|     extern const std::string fullName; |     extern const std::string fullName; | ||||||
|     extern const std::string name; |     extern const std::string name; | ||||||
|     extern const std::string version; |     extern const std::string version; | ||||||
|     extern const std::string gitShortSha; |  | ||||||
|     extern const std::string gitSha; |  | ||||||
|     extern const std::string gitBranch; |  | ||||||
|     extern const std::string msgPrefix; |     extern const std::string msgPrefix; | ||||||
|     // empty function for library test
 |     // empty function for library test
 | ||||||
|     void function(void); |     void function(void); | ||||||
| @@ -105,12 +105,12 @@ const IoT& File::getData(const std::string &name) const | |||||||
|     { |     { | ||||||
|         return dynamic_cast<const IoT &>(*(data_.at(name))); |         return dynamic_cast<const IoT &>(*(data_.at(name))); | ||||||
|     } |     } | ||||||
|     catch (std::out_of_range &) |     catch(std::out_of_range) | ||||||
|     { |     { | ||||||
|         LATAN_ERROR(Definition, "no data with name '" + name + "' in file " |         LATAN_ERROR(Definition, "no data with name '" + name + "' in file " | ||||||
|                     + name_); |                     + name_); | ||||||
|     } |     } | ||||||
|     catch (std::bad_cast &) |     catch(std::bad_cast) | ||||||
|     { |     { | ||||||
|         LATAN_ERROR(Definition, "data with name '" + name + "' in file " |         LATAN_ERROR(Definition, "data with name '" + name + "' in file " | ||||||
|                     + name_ + " does not have type '" + typeid(IoT).name() |                     + name_ + " does not have type '" + typeid(IoT).name() | ||||||
							
								
								
									
										1
									
								
								lib/LatAnalyze
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								lib/LatAnalyze
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | . | ||||||
| @@ -1,71 +0,0 @@ | |||||||
| /* |  | ||||||
|  * CompositeMinimizer.cpp, part of LatAnalyze 3 |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2024 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/Numerical/CompositeMinimizer.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
| #include "CompositeMinimizer.hpp" |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                   CompositeMinimizer implementation                        * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // constructor //////////////////////////////////////////////////////////////// |  | ||||||
| CompositeMinimizer::CompositeMinimizer(const std::vector<Minimizer *> &minimizer) |  | ||||||
| : minVec_(minimizer) |  | ||||||
| { |  | ||||||
|     if (minVec_.size() == 0) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Size, "minimizer vector has size 0"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // access ///////////////////////////////////////////////////////////////////// |  | ||||||
| bool CompositeMinimizer::supportLimits(void) const |  | ||||||
| { |  | ||||||
|     return false; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // minimization /////////////////////////////////////////////////////////////// |  | ||||||
| const DVec &CompositeMinimizer::operator()(const DoubleFunction &f) |  | ||||||
| { |  | ||||||
|     DVec &x = getState(); |  | ||||||
|     DVec tmp; |  | ||||||
|     unsigned int i = 1, nMin = minVec_.size(); |  | ||||||
|  |  | ||||||
|     // resize minimizer state to match function number of arguments |  | ||||||
|     if (f.getNArg() != x.size()) |  | ||||||
|     { |  | ||||||
|         resize(f.getNArg()); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     for (auto &m: minVec_) |  | ||||||
|     { |  | ||||||
|         if (getVerbosity() >= Verbosity::Normal) |  | ||||||
|         { |  | ||||||
|             cout << "********** Composite minimizer step " << i << "/" << nMin << endl; |  | ||||||
|         } |  | ||||||
|         m->setInit(x); |  | ||||||
|         x = (*m)(f); |  | ||||||
|         i++; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return x; |  | ||||||
| } |  | ||||||
| @@ -1,68 +0,0 @@ | |||||||
| /* |  | ||||||
|  * CompositeMinimizer.hpp, part of LatAnalyze 3 |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 - 2024 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_CompositeMinimizer_hpp_ |  | ||||||
| #define Latan_CompositeMinimizer_hpp_ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
| #include <LatAnalyze/Functional/Function.hpp> |  | ||||||
| #include <LatAnalyze/Numerical/Minimizer.hpp> |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                       Class for chaining minimizers                        * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| class CompositeMinimizer: public Minimizer |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     // constructors |  | ||||||
|     explicit CompositeMinimizer(const std::vector<Minimizer *> &minimizer); |  | ||||||
|     template <typename... Ts> |  | ||||||
|     CompositeMinimizer(Minimizer &min, Ts & ... minimisers); |  | ||||||
|     // destructor |  | ||||||
|     virtual ~CompositeMinimizer(void) = default; |  | ||||||
|     // access |  | ||||||
|     virtual bool supportLimits(void) const; |  | ||||||
|     // minimization |  | ||||||
|     virtual const DVec & operator()(const DoubleFunction &f); |  | ||||||
| private: |  | ||||||
|     std::vector<Minimizer *> minVec_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *              CompositeMinimizer template implementation                    * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| template <typename... Ts> |  | ||||||
| CompositeMinimizer::CompositeMinimizer(Minimizer &min, Ts & ... minimisers) |  | ||||||
| { |  | ||||||
|     static_assert(static_or<std::is_assignable<Minimizer &, Ts>::value...>::value, |  | ||||||
|                   "model arguments are not compatible with Minimizer"); |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     minVec_ = {&min, &minimisers...}; |  | ||||||
|     if (minVec_.size() == 0) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Size, "minimizer vector has size 0"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // Latan_CompositeMinimizer_hpp_ |  | ||||||
| @@ -1,83 +0,0 @@ | |||||||
| /* |  | ||||||
|  * DataFilter.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/DataFilter.hpp> |  | ||||||
| #include <LatAnalyze/includes.hpp> |  | ||||||
| #include <LatAnalyze/Numerical/DWT.hpp> |  | ||||||
|  |  | ||||||
| using namespace std; |  | ||||||
| using namespace Latan; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                        DataFilter implementation                           * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // constructor //////////////////////////////////////////////////////////////// |  | ||||||
| DataFilter::DataFilter(const vector<double> &filter, const bool downsample) |  | ||||||
| : filter_(filter), downsample_(downsample) |  | ||||||
| {} |  | ||||||
|  |  | ||||||
| // filtering ////////////////////////////////////////////////////////////////// |  | ||||||
| template <typename MatType> |  | ||||||
| void filter(MatType &out, const MatType &in, const vector<double> &filter,  |  | ||||||
|             const bool downsample, MatType &buf) |  | ||||||
| { |  | ||||||
|     if (!downsample) |  | ||||||
|     { |  | ||||||
|         out.resizeLike(in); |  | ||||||
|         DWT::filterConvolution(out, in, filter, filter.size()/2); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         out.resize(in.rows()/2, in.cols()); |  | ||||||
|         buf.resizeLike(in); |  | ||||||
|         DWT::filterConvolution(buf, in, filter, filter.size()/2); |  | ||||||
|         DWT::downsample(out, buf); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void DataFilter::operator()(DVec &out, const DVec &in) |  | ||||||
| { |  | ||||||
|     filter(out, in, filter_, downsample_, vBuf_); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void DataFilter::operator()(DMat &out, const DMat &in) |  | ||||||
| { |  | ||||||
|     filter(out, in, filter_, downsample_, mBuf_); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                     LaplaceDataFilter implementation                       * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // constructor //////////////////////////////////////////////////////////////// |  | ||||||
| LaplaceDataFilter::LaplaceDataFilter(const bool downsample) |  | ||||||
| : DataFilter({1., -2. , 1.}, downsample) |  | ||||||
| {} |  | ||||||
|  |  | ||||||
| // filtering ////////////////////////////////////////////////////////////////// |  | ||||||
| void LaplaceDataFilter::operator()(DVec &out, const DVec &in, const double lambda) |  | ||||||
| { |  | ||||||
|     filter_[1] = -2. - lambda; |  | ||||||
|     DataFilter::operator()(out, in); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void LaplaceDataFilter::operator()(DMat &out, const DMat &in, const double lambda) |  | ||||||
| { |  | ||||||
|     filter_[1] = -2. - lambda; |  | ||||||
|     DataFilter::operator()(out, in); |  | ||||||
| } |  | ||||||
| @@ -1,130 +0,0 @@ | |||||||
| /* |  | ||||||
|  * DataFilter.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_DataFilter_hpp_ |  | ||||||
| #define Latan_DataFilter_hpp_ |  | ||||||
|  |  | ||||||
| #include <LatAnalyze/Global.hpp> |  | ||||||
| #include <LatAnalyze/Core/Math.hpp> |  | ||||||
| #include <LatAnalyze/Statistics/StatArray.hpp> |  | ||||||
| #include <LatAnalyze/Statistics/MatSample.hpp> |  | ||||||
| #include <LatAnalyze/Numerical/Minimizer.hpp> |  | ||||||
|  |  | ||||||
| BEGIN_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                    Generic convolution filter class                        * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| class DataFilter |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     // constructor |  | ||||||
|     DataFilter(const std::vector<double> &filter, const bool downsample = false); |  | ||||||
|     // filtering |  | ||||||
|     void operator()(DVec &out, const DVec &in); |  | ||||||
|     void operator()(DMat &out, const DMat &in); |  | ||||||
|     template <typename MatType, Index o> |  | ||||||
|     void operator()(StatArray<MatType, o> &out, const StatArray<MatType, o> &in); |  | ||||||
| protected: |  | ||||||
|     std::vector<double> filter_; |  | ||||||
| private: |  | ||||||
|     bool                downsample_; |  | ||||||
|     DVec                vBuf_; |  | ||||||
|     DMat                mBuf_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                         Laplacian filter class                             * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| class LaplaceDataFilter: public DataFilter |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     template <typename MatType, Index o> |  | ||||||
|     using ObjectiveFunction = std::function<double(const StatArray<MatType, o> &)>; |  | ||||||
| public: |  | ||||||
|     // constructor |  | ||||||
|     LaplaceDataFilter(const bool downsample = false); |  | ||||||
|     // filtering |  | ||||||
|     void operator()(DVec &out, const DVec &in, const double lambda = 0.); |  | ||||||
|     void operator()(DMat &out, const DMat &in, const double lambda = 0.); |  | ||||||
|     template <typename MatType, Index o> |  | ||||||
|     void operator()(StatArray<MatType, o> &out, const StatArray<MatType, o> &in,  |  | ||||||
|                     const double lambda = 0.); |  | ||||||
|     // metric optimisation |  | ||||||
|     template <typename MatType, Index o> |  | ||||||
|     double optimiseFunction(const StatArray<MatType, o> &data,  |  | ||||||
|                             ObjectiveFunction<MatType, o> &fn, |  | ||||||
|                             Minimizer &min, const unsigned int nPass = 3); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *                 DataFilter class template implementation                   * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // filtering ////////////////////////////////////////////////////////////////// |  | ||||||
| template <typename MatType, Index o> |  | ||||||
| void DataFilter::operator()(StatArray<MatType, o> &out, const StatArray<MatType, o> &in) |  | ||||||
| { |  | ||||||
|     FOR_STAT_ARRAY(in, s) |  | ||||||
|     { |  | ||||||
|         (*this)(out[s], in[s]); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /****************************************************************************** |  | ||||||
|  *            LaplaceDataFilter class template implementation                 * |  | ||||||
|  ******************************************************************************/ |  | ||||||
| // filtering ////////////////////////////////////////////////////////////////// |  | ||||||
| template <typename MatType, Index o> |  | ||||||
| void LaplaceDataFilter::operator()(StatArray<MatType, o> &out,  |  | ||||||
|                                    const StatArray<MatType, o> &in, const double lambda) |  | ||||||
| { |  | ||||||
|     FOR_STAT_ARRAY(in, s) |  | ||||||
|     { |  | ||||||
|         (*this)(out[s], in[s], lambda); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // correlation optimisation /////////////////////////////////////////////////// |  | ||||||
| template <typename MatType, Index o> |  | ||||||
| double LaplaceDataFilter::optimiseFunction(const StatArray<MatType, o> &data,  |  | ||||||
|                                            ObjectiveFunction<MatType, o> &fn,  |  | ||||||
|                                            Minimizer &min, |  | ||||||
|                                            const unsigned int nPass) |  | ||||||
| { |  | ||||||
|     StatArray<MatType, o> fdata(data.size()); |  | ||||||
|     DVec init(1); |  | ||||||
|     double reg, prec; |  | ||||||
|     DoubleFunction fnReg([&data, &fdata, &fn, this](const double *x) |  | ||||||
|     { |  | ||||||
|         double res; |  | ||||||
|         (*this)(fdata, data, x[0]); |  | ||||||
|         res = fn(fdata); |  | ||||||
|          |  | ||||||
|         return res; |  | ||||||
|     }, 1); |  | ||||||
|      |  | ||||||
|     min.setPrecision(prec); |  | ||||||
|     reg = min(fnReg)(0); |  | ||||||
|  |  | ||||||
|     return reg; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| END_LATAN_NAMESPACE |  | ||||||
|  |  | ||||||
| #endif // Latan_DataFilter_hpp_ |  | ||||||
| @@ -58,7 +58,6 @@ libLatAnalyze_la_SOURCES =           \ | |||||||
|     Numerical/RootFinder.cpp         \
 |     Numerical/RootFinder.cpp         \
 | ||||||
|     Numerical/Solver.cpp             \
 |     Numerical/Solver.cpp             \
 | ||||||
|     Physics/CorrelatorFitter.cpp     \
 |     Physics/CorrelatorFitter.cpp     \
 | ||||||
|     Physics/DataFilter.cpp           \
 |  | ||||||
|     Physics/EffectiveMass.cpp        \
 |     Physics/EffectiveMass.cpp        \
 | ||||||
|     Statistics/FitInterface.cpp      \
 |     Statistics/FitInterface.cpp      \
 | ||||||
|     Statistics/Histogram.cpp         \
 |     Statistics/Histogram.cpp         \
 | ||||||
| @@ -107,7 +106,6 @@ HPPFILES =                           \ | |||||||
|     Numerical/RootFinder.hpp         \
 |     Numerical/RootFinder.hpp         \
 | ||||||
|     Numerical/Solver.hpp             \
 |     Numerical/Solver.hpp             \
 | ||||||
|     Physics/CorrelatorFitter.hpp     \
 |     Physics/CorrelatorFitter.hpp     \
 | ||||||
|     Physics/DataFilter.hpp           \
 |  | ||||||
|     Physics/EffectiveMass.hpp        \
 |     Physics/EffectiveMass.hpp        \
 | ||||||
|     Statistics/Dataset.hpp           \
 |     Statistics/Dataset.hpp           \
 | ||||||
|     Statistics/FitInterface.hpp      \
 |     Statistics/FitInterface.hpp      \
 | ||||||
| @@ -32,91 +32,46 @@ DWT::DWT(const DWTFilter &filter) | |||||||
| {} | {} | ||||||
| 
 | 
 | ||||||
| // convolution primitive ///////////////////////////////////////////////////////
 | // convolution primitive ///////////////////////////////////////////////////////
 | ||||||
| template <typename MatType> | void DWT::filterConvolution(DVec &out, const DVec &data,  | ||||||
| void filterConvolution(MatType &out, const MatType &data,  |                             const std::vector<double> &filter, const Index offset) | ||||||
|                        const std::vector<double> &filter, const Index offset) |  | ||||||
| { | { | ||||||
|     Index n = data.rows(), nf = n*filter.size(); |     Index n = data.size(), nf = n*filter.size(); | ||||||
| 
 | 
 | ||||||
|     out.resizeLike(data); |     out.resize(n); | ||||||
|     out.fill(0.); |     out.fill(0.); | ||||||
|     for (unsigned int i = 0; i < filter.size(); ++i) |     for (unsigned int i = 0; i < filter.size(); ++i) | ||||||
|     { |     { | ||||||
|         FOR_MAT(out, j, k) |         FOR_VEC(out, j) | ||||||
|         { |         { | ||||||
|             out(j, k) += filter[i]*data((j + i + nf - offset) % n, k); |             out(j) += filter[i]*data((j + i + nf - offset) % n); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void DWT::filterConvolution(DVec &out, const DVec &data,  |  | ||||||
|                             const std::vector<double> &filter, const Index offset) |  | ||||||
| { |  | ||||||
|     ::filterConvolution(out, data, filter, offset); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void DWT::filterConvolution(DMat &out, const DMat &data,  |  | ||||||
|                             const std::vector<double> &filter, const Index offset) |  | ||||||
| { |  | ||||||
|     ::filterConvolution(out, data, filter, offset); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // downsampling/upsampling primitives //////////////////////////////////////////
 | // downsampling/upsampling primitives //////////////////////////////////////////
 | ||||||
| template <typename MatType> |  | ||||||
| void downsample(MatType &out, const MatType &in) |  | ||||||
| { |  | ||||||
|     if (out.rows() < in.rows()/2) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Size, "output rows smaller than half the input vector rows"); |  | ||||||
|     } |  | ||||||
|     if (out.cols() != in.cols()) |  | ||||||
|     { |  | ||||||
|         LATAN_ERROR(Size, "output and input number of columns mismatch"); |  | ||||||
|     } |  | ||||||
|     for (Index j = 0; j < in.cols(); j++) |  | ||||||
|     for (Index i = 0; i < in.rows(); i += 2) |  | ||||||
|     { |  | ||||||
|         out(i/2, j) = in(i, j); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void DWT::downsample(DVec &out, const DVec &in) | void DWT::downsample(DVec &out, const DVec &in) | ||||||
| { | { | ||||||
|     ::downsample(out, in); |     if (out.size() < in.size()/2) | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void DWT::downsample(DMat &out, const DMat &in) |  | ||||||
| { |  | ||||||
|     ::downsample(out, in); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template <typename MatType> |  | ||||||
| void upsample(MatType &out, const MatType &in) |  | ||||||
| { |  | ||||||
|     if (out.size() < 2*in.size()) |  | ||||||
|     { |     { | ||||||
|         LATAN_ERROR(Size, "output rows smaller than twice the input rows"); |         LATAN_ERROR(Size, "output vector smaller than half the input vector size"); | ||||||
|     } |     } | ||||||
|     if (out.cols() != in.cols()) |     for (Index i = 0; i < in.size(); i += 2) | ||||||
|     { |     { | ||||||
|         LATAN_ERROR(Size, "output and input number of columns mismatch"); |         out(i/2) = in(i); | ||||||
|     } |  | ||||||
|     out.block(0, 0, 2*in.size(), out.cols()).fill(0.); |  | ||||||
|     for (Index j = 0; j < in.cols(); j++) |  | ||||||
|     for (Index i = 0; i < in.size(); i ++) |  | ||||||
|     { |  | ||||||
|         out(2*i, j) = in(i, j); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void DWT::upsample(DVec &out, const DVec &in) | void DWT::upsample(DVec &out, const DVec &in) | ||||||
| { | { | ||||||
|     ::upsample(out, in); |     if (out.size() < 2*in.size()) | ||||||
| } |     { | ||||||
| 
 |         LATAN_ERROR(Size, "output vector smaller than twice the input vector size"); | ||||||
| void DWT::upsample(DMat &out, const DMat &in) |     } | ||||||
| { |     out.segment(0, 2*in.size()).fill(0.); | ||||||
|     ::upsample(out, in); |     for (Index i = 0; i < in.size(); i ++) | ||||||
|  |     { | ||||||
|  |         out(2*i) = in(i); | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DWT /////////////////////////////////////////////////////////////////////////
 | // DWT /////////////////////////////////////////////////////////////////////////
 | ||||||
| @@ -180,26 +135,3 @@ DVec DWT::backward(const std::vector<DWTLevel>& dwt) const | |||||||
| 
 | 
 | ||||||
|     return res; |     return res; | ||||||
| } | } | ||||||
| 
 |  | ||||||
| // concatenate levels //////////////////////////////////////////////////////////
 |  | ||||||
| DVec DWT::concat(const std::vector<DWTLevel> &dwt, const int maxLevel, const bool dropLow) |  | ||||||
| { |  | ||||||
|     unsigned int level = ((maxLevel >= 0) ? (maxLevel + 1) : dwt.size()); |  | ||||||
|     Index nlast = dwt[level - 1].first.size(); |  | ||||||
|     Index n = 2*dwt.front().first.size() - ((dropLow) ? nlast : 0); |  | ||||||
|     Index pt = n, nl; |  | ||||||
|     DVec  res(n); |  | ||||||
| 
 |  | ||||||
|     for (unsigned int l = 0; l < level; ++l) |  | ||||||
|     { |  | ||||||
|         nl  = dwt[l].second.size(); |  | ||||||
|         pt -= nl; |  | ||||||
|         res.segment(pt, nl) = dwt[l].second; |  | ||||||
|     } |  | ||||||
|     if (!dropLow) |  | ||||||
|     { |  | ||||||
|         res.segment(0, nl) = dwt[level-1].first; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return res; |  | ||||||
| } |  | ||||||
| @@ -22,7 +22,6 @@ | |||||||
| 
 | 
 | ||||||
| #include <LatAnalyze/Global.hpp> | #include <LatAnalyze/Global.hpp> | ||||||
| #include <LatAnalyze/Numerical/DWTFilters.hpp> | #include <LatAnalyze/Numerical/DWTFilters.hpp> | ||||||
| #include <LatAnalyze/Core/Mat.hpp> |  | ||||||
| 
 | 
 | ||||||
| BEGIN_LATAN_NAMESPACE | BEGIN_LATAN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| @@ -41,18 +40,12 @@ public: | |||||||
|     // convolution primitive
 |     // convolution primitive
 | ||||||
|     static void filterConvolution(DVec &out, const DVec &data,  |     static void filterConvolution(DVec &out, const DVec &data,  | ||||||
|                                   const std::vector<double> &filter, const Index offset); |                                   const std::vector<double> &filter, const Index offset); | ||||||
|     static void filterConvolution(DMat &out, const DMat &data,  |  | ||||||
|                                   const std::vector<double> &filter, const Index offset); |  | ||||||
|     // downsampling/upsampling primitives
 |     // downsampling/upsampling primitives
 | ||||||
|     static void downsample(DVec &out, const DVec &in); |     static void downsample(DVec &out, const DVec &in); | ||||||
|     static void downsample(DMat &out, const DMat &in); |  | ||||||
|     static void upsample(DVec &out, const DVec &in); |     static void upsample(DVec &out, const DVec &in); | ||||||
|     static void upsample(DMat &out, const DMat &in); |  | ||||||
|     // DWT
 |     // DWT
 | ||||||
|     std::vector<DWTLevel> forward(const DVec &data, const unsigned int level) const; |     std::vector<DWTLevel> forward(const DVec &data, const unsigned int level) const; | ||||||
|     DVec                  backward(const std::vector<DWTLevel>& dwt) const; |     DVec                  backward(const std::vector<DWTLevel>& dwt) const; | ||||||
|     // concatenate levels
 |  | ||||||
|     static DVec concat(const std::vector<DWTLevel>& dwt, const int maxLevel = -1, const bool dropLow = false); |  | ||||||
| private: | private: | ||||||
|     DWTFilter filter_; |     DWTFilter filter_; | ||||||
| }; | }; | ||||||
| @@ -30,12 +30,8 @@ namespace ROOT | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // macros necessary in the ROOT-based version of Minuit2
 | // macros necessary in the ROOT-based version of Minuit2
 | ||||||
| #ifndef ROOT_Math_VecTypes |  | ||||||
| #define ROOT_Math_VecTypes | #define ROOT_Math_VecTypes | ||||||
| #endif |  | ||||||
| #ifndef MATHCORE_STANDALONE |  | ||||||
| #define MATHCORE_STANDALONE | #define MATHCORE_STANDALONE | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| #include <Minuit2/Minuit2Minimizer.h> | #include <Minuit2/Minuit2Minimizer.h> | ||||||
| #include <Math/Functor.h> | #include <Math/Functor.h> | ||||||
| @@ -164,7 +160,8 @@ const DVec & MinuitMinimizer::operator()(const DoubleFunction &f) | |||||||
|     { |     { | ||||||
|         if (getVerbosity() >= Verbosity::Normal) |         if (getVerbosity() >= Verbosity::Normal) | ||||||
|         { |         { | ||||||
|             cout << "========== Minuit minimization, pass #" << n + 1 << endl; |             cout << "========== Minuit minimization, pass #" << n + 1; | ||||||
|  |             cout << " =========" << endl; | ||||||
|         } |         } | ||||||
|         min.Minimize(); |         min.Minimize(); | ||||||
|         status = min.Status(); |         status = min.Status(); | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user