mirror of
https://github.com/aportelli/LatAnalyze.git
synced 2025-06-15 14:17:04 +01:00
Compare commits
38 Commits
6fbb0f70ef
...
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
|
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
|
||||||
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)
|
||||||
{
|
{
|
||||||
@ -206,42 +206,6 @@ PlotData::PlotData(const XYStatData &data, const Index i, const Index j, const b
|
|||||||
setCommand("'" + tmpFileName + "' " + usingCmd);
|
setCommand("'" + tmpFileName + "' " + usingCmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlotData::PlotData(const XYStatData & data, XYStatData::CoordFilter f, Index i, const Index j, const bool abs)
|
|
||||||
{
|
|
||||||
string usingCmd, tmpFileName;
|
|
||||||
|
|
||||||
if (!abs)
|
|
||||||
{
|
|
||||||
usingCmd = (data.isXExact(i)) ? "u 1:3:4 w yerr" : "u 1:3:2:4 w xyerr";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
usingCmd = (data.isXExact(i)) ? "u 1:(abs($3)):4 w yerr" : "u 1:(abs($3)):2:4 w xyerr";
|
|
||||||
}
|
|
||||||
|
|
||||||
tmpFileName = dumpToTmpFile(data.getTable(i, j, f));
|
|
||||||
pushTmpFile(tmpFileName);
|
|
||||||
setCommand("'" + tmpFileName + "' " + usingCmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlotData::PlotData(const XYStatData & data, XYStatData::PointFilter f, Index i, const Index j, const bool abs)
|
|
||||||
{
|
|
||||||
string usingCmd, tmpFileName;
|
|
||||||
|
|
||||||
if (!abs)
|
|
||||||
{
|
|
||||||
usingCmd = (data.isXExact(i)) ? "u 1:3:4 w yerr" : "u 1:3:2:4 w xyerr";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
usingCmd = (data.isXExact(i)) ? "u 1:(abs($3)):4 w yerr" : "u 1:(abs($3)):2:4 w xyerr";
|
|
||||||
}
|
|
||||||
|
|
||||||
tmpFileName = dumpToTmpFile(data.getTable(i, j, f));
|
|
||||||
pushTmpFile(tmpFileName);
|
|
||||||
setCommand("'" + tmpFileName + "' " + usingCmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
// PlotPoint constructor ///////////////////////////////////////////////////////
|
// PlotPoint constructor ///////////////////////////////////////////////////////
|
||||||
PlotPoint::PlotPoint(const double x, const double y)
|
PlotPoint::PlotPoint(const double x, const double y)
|
||||||
{
|
{
|
||||||
@ -551,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 //////////////////////////////////////////////////////
|
||||||
@ -735,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;\
|
||||||
@ -811,7 +773,7 @@ void Plot::display(void)
|
|||||||
ostringstream scriptBuf;
|
ostringstream scriptBuf;
|
||||||
|
|
||||||
getProgramPath();
|
getProgramPath();
|
||||||
command = gnuplotPath_ + "/" + gnuplotBin_;
|
command = gnuplotPath_ + "/" + gnuplotBin_ + " 2>/dev/null";
|
||||||
gnuplotPipe = popen(command.c_str(), "w");
|
gnuplotPipe = popen(command.c_str(), "w");
|
||||||
if (!gnuplotPipe)
|
if (!gnuplotPipe)
|
||||||
{
|
{
|
||||||
@ -953,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())
|
||||||
{
|
{
|
@ -94,10 +94,6 @@ public:
|
|||||||
PlotData(const DMatSample &x, const DVec &y, const bool abs = false);
|
PlotData(const DMatSample &x, const DVec &y, const bool abs = false);
|
||||||
PlotData(const XYStatData &data, const Index i = 0, const Index j = 0,
|
PlotData(const XYStatData &data, const Index i = 0, const Index j = 0,
|
||||||
const bool abs = false);
|
const bool abs = false);
|
||||||
PlotData(const XYStatData &data, XYStatData::CoordFilter f, Index i = 0,
|
|
||||||
const Index j = 0, const bool abs = false);
|
|
||||||
PlotData(const XYStatData &data, XYStatData::PointFilter f, Index i = 0,
|
|
||||||
const Index j = 0, const bool abs = false);
|
|
||||||
// destructor
|
// destructor
|
||||||
virtual ~PlotData(void) = default;
|
virtual ~PlotData(void) = default;
|
||||||
};
|
};
|
||||||
@ -231,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;
|
||||||
@ -319,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 filterConvolution(MatType &out, const MatType &data,
|
|
||||||
const std::vector<double> &filter, const Index offset)
|
|
||||||
{
|
|
||||||
Index n = data.rows(), nf = n*filter.size();
|
|
||||||
|
|
||||||
out.resizeLike(data);
|
|
||||||
out.fill(0.);
|
|
||||||
for (unsigned int i = 0; i < filter.size(); ++i)
|
|
||||||
{
|
|
||||||
FOR_MAT(out, j, k)
|
|
||||||
{
|
|
||||||
out(j, k) += filter[i]*data((j + i + nf - offset) % n, k);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DWT::filterConvolution(DVec &out, const DVec &data,
|
void DWT::filterConvolution(DVec &out, const DVec &data,
|
||||||
const std::vector<double> &filter, const Index offset)
|
const std::vector<double> &filter, const Index offset)
|
||||||
{
|
{
|
||||||
::filterConvolution(out, data, filter, offset);
|
Index n = data.size(), nf = n*filter.size();
|
||||||
}
|
|
||||||
|
|
||||||
void DWT::filterConvolution(DMat &out, const DMat &data,
|
out.resize(n);
|
||||||
const std::vector<double> &filter, const Index offset)
|
out.fill(0.);
|
||||||
|
for (unsigned int i = 0; i < filter.size(); ++i)
|
||||||
{
|
{
|
||||||
::filterConvolution(out, data, filter, offset);
|
FOR_VEC(out, j)
|
||||||
|
{
|
||||||
|
out(j) += filter[i]*data((j + i + nf - offset) % n);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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)
|
||||||
|
{
|
||||||
|
LATAN_ERROR(Size, "output vector smaller than half the input vector size");
|
||||||
}
|
}
|
||||||
|
for (Index i = 0; i < in.size(); i += 2)
|
||||||
void DWT::downsample(DMat &out, const DMat &in)
|
|
||||||
{
|
{
|
||||||
::downsample(out, in);
|
out(i/2) = in(i);
|
||||||
}
|
|
||||||
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
if (out.cols() != in.cols())
|
|
||||||
{
|
|
||||||
LATAN_ERROR(Size, "output and input number of columns mismatch");
|
|
||||||
}
|
|
||||||
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())
|
||||||
}
|
|
||||||
|
|
||||||
void DWT::upsample(DMat &out, const DMat &in)
|
|
||||||
{
|
{
|
||||||
::upsample(out, in);
|
LATAN_ERROR(Size, "output vector smaller than twice the input vector size");
|
||||||
|
}
|
||||||
|
out.segment(0, 2*in.size()).fill(0.);
|
||||||
|
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