Merged muonspin/musrfit:root6 into master

This commit is contained in:
Zaher Salman 2018-06-09 10:18:16 +02:00
commit 0593f7c150
142 changed files with 8840 additions and 1210 deletions

314
CMakeLists.txt Normal file
View File

@ -0,0 +1,314 @@
# - musrfit
cmake_minimum_required(VERSION 3.6)
project(musrfit VERSION 1.3.0 LANGUAGES C CXX)
#--- musrfit specific options -------------------------------------------------
option(nexus "build optional NeXus support. Needed for ISIS" OFF)
option(ASlibs "build optional ASlibs" OFF)
option(BMWlibs "build optional BMWlibs" OFF)
option(BNMRlibs "build optional beta-NMR libs" OFF)
option(qt_based_tools "try to install Qt based tools (musredit, musrWiz, musrStep, mupp)" ON)
option(try_OpenMP "try to use OpenMP if available" ON)
# define qt_version with possible values 'auto' or version '3', '4', '5'
set(qt_version AUTO CACHE STRING "provide a specific Qt version to be used.")
set_property(CACHE qt_version PROPERTY STRINGS AUTO 3 4 5)
#--- set a default build type if none was specified ---------------------------
set(default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
#--- perform some checks and generate the config.h ----------------------------
include(CheckTypeSize)
include(CheckIncludeFiles)
include(CheckFunctionExists)
check_include_files(alloca.h HAVE_ALLOCA_H)
check_include_files("sys/ipc.h;sys/shm.h" HAVE_SHMGET)
check_function_exists(fork HAVE_FORK)
check_include_files(dlfcn.h HAVE_DLFCN_H)
check_function_exists(erf HAVE_ERF)
check_function_exists(getloadavg HAVE_GETLOADAVG)
check_include_files(inttypes.h HAVE_INTTYPES_H)
check_include_files(memory.h HAVE_MEMORY_H)
check_function_exists(powl HAVE_POWL)
check_include_files(memory.h HAVE_MEMORY_H)
check_include_files(stdint.h HAVE_STDINT_H)
check_include_files(stdlib.h HAVE_STDLIB_H)
check_include_files(string.h HAVE_STRING_H)
check_include_files(strings.h HAVE_STRINGS_H)
check_include_files(sys/stat.h HAVE_SYS_STAT_H)
check_include_files(sys/types.h HAVE_SYS_TYPES_H)
check_include_files(sys/unistd.h HAVE_UNISTD_H)
check_type_size("long double" LONG_DOUBLE)
check_type_size("double" DOUBLE)
if (${LONG_DOUBLE} GREATER ${DOUBLE})
set(HAVE_LONG_DOUBLE 1)
set(HAVE_LONG_DOUBLE_WIDER 1)
endif (${LONG_DOUBLE} GREATER ${DOUBLE})
#--- check for all the needed packages ----------------------------------------
#--- add path to my own find modules and other stuff
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
#--- check for git ------------------------------------------------------------
find_package(Git REQUIRED)
#--- check for ROOT -----------------------------------------------------------
find_package(ROOT 6.06 REQUIRED COMPONENTS Gui MathMore Minuit2 XMLParser)
if (ROOT_mathmore_FOUND)
execute_process(COMMAND root-config --bindir OUTPUT_VARIABLE ROOT_BINDIR)
string(STRIP ${ROOT_BINDIR} ROOT_BINDIR)
execute_process(COMMAND root-config --version OUTPUT_VARIABLE ROOT_VERSION)
string(STRIP ${ROOT_VERSION} ROOT_VERSION)
message("-- Found ROOT: ${ROOT_BINDIR} (found version: ${ROOT_VERSION})")
#---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY)
include(${ROOT_USE_FILE})
endif (ROOT_mathmore_FOUND)
#--- check for boost ----------------------------------------------------------
find_package(Boost REQUIRED)
#--- check for gsl ------------------------------------------------------------
find_package(GSL REQUIRED)
#--- check for fftw3 ----------------------------------------------------------
find_package(FFTW3 REQUIRED)
if (FFTW3_THREAD_FOUND)
set(HAVE_LIBFFTW3_THREADS 1 CACHE INTERNAL "fftw3_threads are available")
endif (FFTW3_THREAD_FOUND)
if (FFTW3F_THREAD_FOUND)
set(HAVE_LIBFFTW3F_THREADS 1 CACHE INTERNAL "fftw3f_threads are available")
endif (FFTW3F_THREAD_FOUND)
#--- check for libxml2 --------------------------------------------------------
find_package(LibXml2 REQUIRED)
#--- check for OpenMP ---------------------------------------------------------
if (try_OpenMP AND NOT APPLE)
find_package(OpenMP)
if (OpenMP_FOUND)
add_definitions(-DHAVE_GOMP)
set(HAVE_GOMP 1 CACHE INTERNAL "Have GOMP")
endif (OpenMP_FOUND)
endif (try_OpenMP AND NOT APPLE)
#--- check for Qt -------------------------------------------------------------
if (qt_based_tools)
# check for any Qt, i.e. AUTO
if (qt_version STREQUAL AUTO)
# first try Qt5
# Find the QtCore library
find_package(Qt5Core)
if (Qt5Core_FOUND)
# Find the QtWidgets library
find_package(Qt5Widgets CONFIG REQUIRED)
# Find the QtXml library
find_package(Qt5Xml CONFIG REQUIRED)
# Find the QtNetwork library
find_package(Qt5Network CONFIG REQUIRED)
# Find the QtSvg library
find_package(Qt5Svg CONFIG REQUIRED)
# Fing the QtPrintSupport
find_package(Qt5PrintSupport CONFIG REQUIRED)
endif (Qt5Core_FOUND)
# if Qt5 is not found, try Qt4
if (NOT Qt5Core_FOUND)
find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml)
endif (NOT Qt5Core_FOUND)
# if Qt5 and Qt4 is not found try Qt3. Hopefully you never reach this point
if (NOT Qt5Core_FOUND)
if (NOT Qt4_FOUND)
find_package(Qt3)
endif (NOT Qt4_FOUND)
endif (NOT Qt5Core_FOUND)
endif (qt_version STREQUAL AUTO)
# check specifically for Qt5
if (qt_version STREQUAL 5)
# Find the QtCore library
find_package(Qt5Core)
if (Qt5Core_FOUND)
# Find the QtWidgets library
find_package(Qt5Widgets CONFIG REQUIRED)
# Find the QtXml library
find_package(Qt5Xml CONFIG REQUIRED)
# Find the QtNetwork library
find_package(Qt5Network CONFIG REQUIRED)
# Find the QtSvg library
find_package(Qt5Svg CONFIG REQUIRED)
# Fing the QtPrintSupport
find_package(Qt5PrintSupport CONFIG REQUIRED)
else (Qt5Core_FOUND)
message(FATAL_ERROR "Couldn't find the specifically requested Qt5 version.")
endif (Qt5Core_FOUND)
endif (qt_version STREQUAL 5)
# check specifically for Qt4
if (qt_version STREQUAL 4)
find_package(Qt4 COMPONENTS QtGui QtWebKit QtXml)
if (NOT Qt4_FOUND)
message(FATAL_ERROR "Couldn't find the specifically requested Qt4 version.")
endif (NOT Qt4_FOUND)
endif (qt_version STREQUAL 4)
# check specifically for Qt3
if (qt_version STREQUAL 3)
find_package(Qt3)
if (NOT QT_FOUND)
message(FATAL_ERROR "Couldn't find the specifically requested Qt3 version.")
endif (NOT QT_FOUND)
endif (qt_version STREQUAL 3)
endif (qt_based_tools)
#--- if NeXus check also for HDF4, HDF5, and MXML -----------------------------
if (nexus)
find_package(HDF5 COMPONENTS CXX REQUIRED )
#//as35 - STILL NEEDED?? -> find_package(HDF4 REQUIRED)
find_package(MXML REQUIRED)
find_package(NeXus REQUIRED)
add_definitions(-DPNEXUS_ENABLED)
endif (nexus)
#--- check for Cuba lib if BMWlibs are enabled --------------------------------
#//as35 probably always stick to the internal one ...
#--- all checks done -> feed config.h -----------------------------------------
set(HAVE_CONFIG_H 1 CACHE INTERNAL "config.h is available")
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
#--- propagate to the sub-directories -----------------------------------------
add_subdirectory(src)
#--- write summary of the installation
message("")
message("|-----------------------------------------------------------------------|")
message("| |")
message("| Summary |")
message("| |")
message("|-----------------------------------------------------------------------|")
message("")
message(" System: ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR} - ${CMAKE_HOST_SYSTEM_VERSION}")
message(" -------")
message("")
message(" Build Type: ${CMAKE_BUILD_TYPE}")
message(" -----------")
message("")
message(" Requirements:")
message(" -------------")
message("")
message(" FFTW3 found in ${FFTW3_INCLUDE_DIR}")
message(" GSL found in ${GSL_INCLUDE_DIRS}")
message(" BOOST found in ${Boost_INCLUDE_DIRS}")
message(" LibXML2 found in ${LIBXML2_INCLUDE_DIR}")
message(" ROOT found in ${ROOT_INCLUDE_DIRS}")
if (OpenMP_FOUND)
if (OpenMP_CXX_VERSION)
message(" OpenMP found (version ${OpenMP_CXX_VERSION})")
else (OpenMP_CXX_VERSION)
message(" OpenMP found")
endif (OpenMP_CXX_VERSION)
endif (OpenMP_FOUND)
if (nexus)
message("")
#//as35 message(" HDF4 found in ${HDF4_INCLUDE_DIRS}")
message(" HDF5 found in ${HDF5_INCLUDE_DIRS}")
message(" NeXus found in ${NEXUS_INCLUDE_DIR}")
endif (nexus)
message("")
if (qt_based_tools)
if (Qt5Core_FOUND)
message(" Qt found in ${Qt5Core_INCLUDE_DIRS} (Version: ${Qt5Core_VERSION})")
else (Qt5Core_FOUND)
if (Qt4_FOUND)
message(" Qt found (Version: ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH})")
else (Qt4_FOUND)
if (QT_FOUND)
message(" Qt found (Version: ${QT_VERSION})")
endif (QT_FOUND)
endif (Qt4_FOUND)
endif (Qt5Core_FOUND)
endif (qt_based_tools)
message("")
message(" Features:")
message(" ---------")
message("")
message(" Supported muSR file formates:")
message(" MusrRoot : yes")
message(" ROOT (LEM) : yes")
message(" MUD (triumf) : yes")
message(" PSI-BIN : yes")
message(" PSI-MDU : yes")
message(" WKM (deprecated) : yes")
if (nexus)
message(" NeXus : yes")
else (nexus)
message(" NeXus : no")
endif (nexus)
message("")
message(" External user-function libraries:")
if (ASlibs)
message(" ASlibs : yes")
else (ASlibs)
message(" ASlibs : no")
endif (ASlibs)
if (BMWlibs)
message(" BMWlibs : yes")
else (BMWlibs)
message(" BMWlibs : no")
endif (BMWlibs)
if (BNMRlibs)
message(" BNMRlibs : yes")
else (BNMRlibs)
message(" BNMRlibs : no")
endif (BNMRlibs)
if (qt_based_tools)
if (Qt5Core_FOUND)
message("")
message(" Qt5 based tools:")
message(" musredit, musrStep, musrWiz, mupp : yes")
endif (Qt5Core_FOUND)
if (Qt4_FOUND)
message("")
message(" Qt4 based tools (deprecated):")
message(" musredit : yes")
endif (Qt4_FOUND)
if (QT_FOUND)
message("")
message(" Qt3 based tools (outdated):")
message(" musrgui : yes")
endif (QT_FOUND)
if (NOT Qt5Core_FOUND AND NOT Qt4_FOUND AND NOT QT_FOUND)
message("")
message(" NO Qt based tools will be installed since Qt is not found or not installed on the system")
endif (NOT Qt5Core_FOUND AND NOT Qt4_FOUND AND NOT QT_FOUND)
else (qt_based_tools)
message("")
message(" Qt based tools (musredit, musrStep, musrWiz, mupp) have been disabled")
endif (qt_based_tools)
message("")
message(" Installation directories:")
message(" -------------------------")
message("")
message(" Programs : ${CMAKE_INSTALL_PREFIX}/bin")
message(" XML configuration files : " $ENV{HOME} "/.musrfit")
message(" Documentation : ${CMAKE_INSTALL_PREFIX}/share/doc/musrfit")
message("")
message("-------------------------------------------------------------------------")
message("")
#--- end ----------------------------------------------------------------------

69
INSTALL
View File

@ -1,17 +1,80 @@
#---------------------------------------------------------------------
# INSTALL
# AS/BMW, 2014/02/11; 2011/01/27
#---------------------------------------------------------------------
To get it all build:
There are currently 2 wasy to build musrfit:
1) via the automake tool chain (this will phase out until 2019)
2) via the cmake tool chain (this will be the default starting from now)
In the following it is assumed that the system variable ROOTSYS is already
defined and pointing to the place where CERN/ROOT is installed.
#----------------------------------
# Install via automake tool chain
#----------------------------------
To get it build:
sh autogen.sh
./configure --prefix=/opt/cern/root (or where ever musrfit should be installed)
./configure --prefix=$ROOTSYS (or where ever musrfit should be installed)
make
make install (as superuser -- maybe)
/sbin/ldconfig (as superuser)
configure comes with a couple of options. For details either execute
./configure --help
or check under http://lmu.web.psi.ch/musrfit/user/MUSR/MusrFitSetup.html
for a more detailed description.
An example with NeXus support and BMWlibs needed would look like this
sh autogen.sh
./configure --enable-NeXus --enable-BMWlibs --prefix=$ROOTSYS
make
make install (as superuser -- maybe)
/sbin/ldconfig (as superuser)
In the optimal case, everything is set up ;-)
#----------------------------------
# Install via cmake tool chain
#----------------------------------
cmake minimal required version is 3.6.
musrfit supports only out-of-source cmake build! Hence, go to the musrfit
directory and
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS (or where ever musrfit should be installed)
cmake --build ./ --clean-first
make install (as superuser -- maybe)
/sbin/ldconfig (as superuser)
cmake configuration allows a couple of switches. For details check the user
docu under
http://lmu.web.psi.ch/musrfit/user/MUSR/MusrFitSetup.html
An example with NeXus support and BMWlibs needed would look like this
mkdir build
cd build
cmake ../ -Dnexus=1 -DBMWlibs=1 -DCMAKE_INSTALL_PREFIX=$ROOTSYS
cmake --build ./ --clean-first
make install (as superuser -- maybe)
/sbin/ldconfig (as superuser)
In the optimal case, everything is set up ;-)
#----------------------------------
# Link to the docu
#----------------------------------
More information about the software requirements and the installation can be found at:
http://lmu.web.psi.ch/musrfit/user/MUSR/MusrFitSetup.html

151
cmake/FindFFTW3.cmake Normal file
View File

@ -0,0 +1,151 @@
# - Find fftw3 library
# Find the native FFTW3 includes and library
# This module defines
# FFTW3_INCLUDE_DIR, where to find fftw3.h, etc.
# ---
# FFTW3_LIBRARY, library to link against to use FFTW3
# FFTW3_OMP_LIBRARY, library to link against to use FFTW3_omp
# FFTW3_THREADS_LIBRARY, library to link against to use FFTW3_threads
# FFTW3_FOUND, if false, do not try to use FFTW3.
# FFTW3_OMP_FOUND, if false, do not try to use OpenMP FFTW3.
# FFTW3_THREADS_FOUND, if false, do not try to use threaded FFTW3.
# ---
# FFTW3L_LIBRARY, library to link against to use FFTW3l
# FFTW3L_OMP_LIBRARY, library to link against to use FFTW3l_omp
# FFTW3L_THREADS_LIBRARY, library to link against to use FFTW3l_threads
# FFTW3L_FOUND, if false, do not try to use FFTW3l.
# FFTW3L_OMP_FOUND, if false, do not try to use OpenMP FFTW3l.
# FFTW3L_THREADS_FOUND, if false, do not try to use threaded FFTW3l.
# ---
# FFTW3F_LIBRARY, library to link against to use FFTW3f
# FFTW3F_OMP_LIBRARY, library to link against to use FFTW3f_omp
# FFTW3F_THREADS_LIBRARY, library to link against to use FFTW3f_threads
# FFTW3F_FOUND, if false, do not try to use FFTW3f.
# FFTW3F_OMP_FOUND, if false, do not try to use OpenMP FFTW3f.
# FFTW3F_THREADS_FOUND, if false, do not try to use threaded FFTW3f.
# ---
# FFTW3Q_LIBRARY, library to link against to use FFTW3q
# FFTW3Q_OMP_LIBRARY, library to link against to use FFTW3q_omp
# FFTW3Q_THREADS_LIBRARY, library to link against to use FFTW3q_threads
# FFTW3Q_FOUND, if false, do not try to use FFTW3q.
# FFTW3Q_OMP_FOUND, if false, do not try to use OpenMP FFTW3q.
# FFTW3Q_THREADS_FOUND, if false, do not try to use threaded FFTW3q.
find_path(FFTW3_INCLUDE_DIR fftw3.h
HINTS "/usr/include" "/opt/local/include"
)
# find position of fftw3.h from the end
string(FIND "${FFTW3_INCLUDE_DIR}" "/fftw3.h" pos REVERSE)
# truncate the string
string(SUBSTRING "${FFTW3_INCLUDE_DIR}" 0 ${pos} substr)
set(FFTW3_INCLUDE_DIR ${substr})
unset(substr)
find_library(FFTW3_LIBRARY fftw3)
find_library(FFTW3_OMP_LIBRARY fftw3_omp)
find_library(FFTW3_THREAD_LIBRARY fftw3_threads)
find_library(FFTW3L_LIBRARY fftw3l)
find_library(FFTW3L_OMP_LIBRARY fftw3l_omp)
find_library(FFTW3L_THREAD_LIBRARY fftw3l_threads)
find_library(FFTW3F_LIBRARY fftw3f)
find_library(FFTW3F_OMP_LIBRARY fftw3f_omp)
find_library(FFTW3F_THREAD_LIBRARY fftw3f_threads)
find_library(FFTW3Q_LIBRARY fftw3q)
find_library(FFTW3Q_OMP_LIBRARY fftw3q_omp)
find_library(FFTW3Q_THREAD_LIBRARY fftw3q_threads)
# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE if
# all listed variables are TRUE
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
find_package_handle_standard_args(FFTW3
REQUIRED_VARS FFTW3_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3_OMP
REQUIRED_VARS FFTW3_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3_THREAD
REQUIRED_VARS FFTW3_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3L
REQUIRED_VARS FFTW3L_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3L_OMP
REQUIRED_VARS FFTW3L_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3L_THREAD
REQUIRED_VARS FFTW3L_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3F
REQUIRED_VARS FFTW3F_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3F_OMP
REQUIRED_VARS FFTW3F_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3F_THREAD
REQUIRED_VARS FFTW3F_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3Q
REQUIRED_VARS FFTW3Q_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3Q_OMP
REQUIRED_VARS FFTW3Q_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
find_package_handle_standard_args(FFTW3Q_THREAD
REQUIRED_VARS FFTW3Q_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
if (NOT FFTW3_FOUND)
unset(FFTW3_LIBRARY)
endif()
if (NOT FFTW3_OMP_FOUND)
unset(FFTW3_OMP_LIBRARY)
endif()
if (NOT FFTW3_THREAD_FOUND)
unset(FFTW3_THREAD_LIBRARY)
endif()
if (NOT FFTW3L_FOUND)
unset(FFTW3L_LIBRARY)
endif()
if (NOT FFTW3L_OMP_FOUND)
unset(FFTW3L_OMP_LIBRARY)
endif()
if (NOT FFTW3L_THREAD_FOUND)
unset(FFTW3L_THREAD_LIBRARY)
endif()
if (NOT FFTW3F_FOUND)
unset(FFTW3F_LIBRARY)
endif()
if (NOT FFTW3F_OMP_FOUND)
unset(FFTW3F_OMP_LIBRARY)
endif()
if (NOT FFTW3F_THREAD_FOUND)
unset(FFTW3F_THREAD_LIBRARY)
endif()
if (NOT FFTW3Q_FOUND)
unset(FFTW3Q_LIBRARY)
endif()
if (NOT FFTW3Q_OMP_FOUND)
unset(FFTW3Q_OMP_LIBRARY)
endif()
if (NOT FFTW3Q_THREAD_FOUND)
unset(FFTW3Q_THREAD_LIBRARY)
endif()
mark_as_advanced(
FFTW3_INCLUDE_DIR
FFTW3_LIBRARY FFTW3_OMP_LIBRARY FFTW3_THREAD_LIBRARY
FFTW3L_LIBRARY FFTW3L_OMP_LIBRARY FFTW3L_THREAD_LIBRARY
FFTW3F_LIBRARY FFTW3F_OMP_LIBRARY FFTW3F_THREAD_LIBRARY
FFTW3Q_LIBRARY FFTW3Q_OMP_LIBRARY FFTW3Q_THREAD_LIBRARY
)
if (FFTW3_FOUND)
message("-- Found FFTW3: ${FFTW3_INCLUDE_DIR}")
endif (FFTW3_FOUND)

34
cmake/FindMXML.cmake Normal file
View File

@ -0,0 +1,34 @@
# - find MXML
# find the MXML lib and includes
# This module defines
# LIBMXML_INCLUDE_DIR, where to find mxml.h
# LIBMXML_LIBRARY, library to link against
# LIBMXML_FOUND, if false, do not try to use the MXML lib
find_path(LIBMXML_INCLUDE_DIR mxml.h
HINT "/usr/include"
)
# find position of mxml.h from the end
string(FIND "${LIBMXML_INCLUDE_DIR}" "/mxml.h" pos REVERSE)
# truncate the string
string(SUBSTRING "${LIBMXML_INCLUDE_DIR}" 0 ${pos} substr)
set(LIBMXML_INCLUDE_DIR ${substr})
unset(substr)
find_library(LIBMXML_LIBRARY mxml)
# get version string
# currently do not know from where to get it automatically
# handle the QUIETLY and REQUIRED arguments and set LIBMXML_FOUND to TRUE if
# all listed variables are TRUE
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(MXML
REQUIRED_VARS LIBMXML_LIBRARY LIBMXML_INCLUDE_DIR)
if (NOT LIBMXML_FOUND)
unset(LIBMXML_LIBRARY)
endif()
mark_as_advanced(LIBMXML_INCLUDE_DIR LIBMXML_LIBRARY)

45
cmake/FindNeXus.cmake Normal file
View File

@ -0,0 +1,45 @@
# - Find NeXus library
# Find the native NEXUS includes and library
# This module defines
# NEXUS_INCLUDE_DIR, where to find NeXus.h, etc.
# NEXUS_LIBRARY, library to link against to use NEXUS
# NEXUS_FOUND, if false, do not try to use NEXUS.
find_path(NEXUS_INCLUDE_DIR napi.h
HINTS "/usr/local/include" "/opt/nexus/include" "/usr/local/include/nexus"
)
# find position of napi.h from the end
string(FIND "${NEXUS_INCLUDE_DIR}" "/napi.h" pos REVERSE)
# truncate the string
string(SUBSTRING "${NEXUS_INCLUDE_DIR}" 0 ${pos} substr)
set(NEXUS_INCLUDE_DIR ${substr})
unset(substr)
find_library(NEXUS_LIBRARY NeXus
HINTS "/usr/lib" "/usr/lib64" "/usr/local/lib" "/usr/local/lib64" "/opt/nexus/lib")
# get version string
if (NEXUS_INCLUDE_DIR AND EXISTS ${NEXUS_INCLUDE_DIR}/napi.h)
file(STRINGS "${NEXUS_INCLUDE_DIR}/napi.h" NEXUS_version_str
REGEX "^#define[\t ]+NEXUS_VERSION[\t ].*")
string(REGEX REPLACE "^#define[\t ]+NEXUS_VERSION[\t ]+\"([^\"]*).*"
"\\1" NEXUS_VERSION_STRING "${NEXUS_version_str}")
unset(NEXUS_version_str)
endif()
# handle the QUIETLY and REQUIRED arguments and set NEXUS_FOUND to TRUE if
# all listed variables are TRUE
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(NEXUS
REQUIRED_VARS NEXUS_LIBRARY NEXUS_INCLUDE_DIR
VERSION_VAR NEXUS_VERSION_STRING)
if (NOT NEXUS_FOUND)
unset(NEXUS_LIBRARY)
endif()
mark_as_advanced(NEXUS_INCLUDE_DIR NEXUS_LIBRARY)

67
cmake/config.h.in Normal file
View File

@ -0,0 +1,67 @@
// config.h
#define PACKAGE_VERSION "@PROJECT_VERSION@"
// define to 1 if you have fork and it should be used
#cmakedefine HAVE_FORK 1
// define to 1 if you have <alloca.h> and it should be used
#cmakedefine HAVE_ALLOCA_H 1
// Define to 1 if you have the <dlfcn.h> header file.
#cmakedefine HAVE_DLFCN_H 1
// Define to 1 if you have the `erf' function.
#cmakedefine HAVE_ERF 1
// Define to 1 if you have the `getloadavg' function.
#cmakedefine HAVE_GETLOADAVG 1
// Define to 1 if gomp is available */
#cmakedefine HAVE_GOMP 1
// Define to 1 if you have the <inttypes.h> header file.
#cmakedefine HAVE_INTTYPES_H 1
// Define to 1 if the type `long double' works and has more range or precision than `double'.
#cmakedefine HAVE_LONG_DOUBLE 1
// Define to 1 if the type `long double' works and has more range or precision than `double'.
#cmakedefine HAVE_LONG_DOUBLE_WIDER 1
// Define to 1 if fftw3f_threads are available
#cmakedefine HAVE_LIBFFTW3F_THREADS 1
// Define to 1 if fftw3_threads are available
#cmakedefine HAVE_LIBFFTW3_THREADS 1
// Define to 1 if you have the <memory.h> header file.
#cmakedefine HAVE_MEMORY_H 1
// Define to 1 if you have the `powl' function.
#cmakedefine HAVE_POWL 1
// Define to 1 if you have the `shmget' function.
#cmakedefine HAVE_SHMGET 1
// Define to 1 if you have the <stdint.h> header file.
#cmakedefine HAVE_STDINT_H 1
// Define to 1 if you have the <stdlib.h> header file.
#cmakedefine HAVE_STDLIB_H 1
// Define to 1 if you have the <string.h> header file.
#cmakedefine HAVE_STRING_H 1
// Define to 1 if you have the <strings.h> header file.
#cmakedefine HAVE_STRINGS_H 1
// Define to 1 if you have the <sys/stat.h> header file.
#cmakedefine HAVE_SYS_STAT_H 1
// Define to 1 if you have the <sys/types.h> header file.
#cmakedefine HAVE_SYS_TYPES_H 1
// Define to 1 if you have the <unistd.h> header file.
#cmakedefine HAVE_UNISTD_H 1

View File

@ -0,0 +1,30 @@
# configure_musrfit_version_file.cmake.in:
set(SRC_DIR "@CMAKE_SOURCE_DIR@")
set(BIN_DIR "@CMAKE_CURRENT_BINARY_DIR@")
# Set variables
set(CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
set(MUSRFIT_VERSION "@MUSRFIT_VERSION@")
# Get the current working branch
execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Get the latest abbreviated commit hash of the working branch
execute_process(
COMMAND git log -1 --pretty="%h, %ci"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_CURRENT_SHA1
OUTPUT_STRIP_TRAILING_WHITESPACE
)
configure_file(
${SRC_DIR}/cmake/git-revision.h.in
${BIN_DIR}/git-revision.h
@ONLY
)
# EOF

8
cmake/git-revision.h.in Normal file
View File

@ -0,0 +1,8 @@
#ifndef GIT_VERSION_H
#define GIT_VERSION_H
#define GIT_BRANCH "@GIT_BRANCH@"
#define GIT_CURRENT_SHA1 @GIT_CURRENT_SHA1@
#endif // GIT_VERSION_H

4
cmake/musrfit-info.h.in Normal file
View File

@ -0,0 +1,4 @@
//--- This file is generated by cmake -----------------------------------------
#define MUSRFIT_PREFIX "@CMAKE_INSTALL_PREFIX@"
#define MUSRFIT_DOC_DIR "@CMAKE_INSTALL_PREFIX@/share/doc/musrfit"

View File

@ -1,7 +1,7 @@
AC_REVISION([m4_esyscmd_s([git describe --always])])
AC_PREREQ(2.63)
AC_INIT([musrfit],[1.2.0],[andreas.suter@psi.ch])
AC_INIT([musrfit],[1.3.0],[andreas.suter@psi.ch])
AC_CONFIG_AUX_DIR(admin)
AC_CANONICAL_HOST
#AC_MSG_RESULT([${host} ${host_cpu} ${host_vendor} ${host_os}])
@ -35,7 +35,7 @@ dnl -----------------------------------------------
#release versioning
MUSR_MAJOR_VERSION=1
MUSR_MINOR_VERSION=2
MUSR_MINOR_VERSION=3
MUSR_MICRO_VERSION=0
#release versioning
@ -54,7 +54,7 @@ PSIBIN_MINOR_VERSION=1
PSIBIN_MICRO_VERSION=0
#release versioning
MUD_MAJOR_VERSION=0
MUD_MAJOR_VERSION=1
MUD_MINOR_VERSION=0
MUD_MICRO_VERSION=0
@ -69,7 +69,7 @@ PLUGIN_MINOR_VERSION=0
PLUGIN_MICRO_VERSION=0
#release versioning
CUBA_MAJOR_VERSION=3
CUBA_MAJOR_VERSION=4
CUBA_MINOR_VERSION=2
CUBA_MICRO_VERSION=0

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/BmwLibs?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:10 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/BmwLibs?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:27 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,14 +14,14 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/BmwLibs?t=1494785300" type="application/x-wiki" title="edit BmwLibs" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/BmwLibs?t=1528465298" type="application/x-wiki" title="edit BmwLibs" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<base /><!--[if IE]></base><![endif]--><link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -106,10 +106,10 @@
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::COMMENT--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
<span id="PageTop"></span><div class="foswikiPage"><div id="patternScreen">
@ -149,5 +149,5 @@ Topic revision: <span class='patternRevInfo'>03 Jul 2015, suter_a</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/BmwLibs?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:10 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/BmwLibs?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:27 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/CiteMusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:03 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/CiteMusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:20 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,14 +14,14 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/CiteMusrFit?t=1494785299" type="application/x-wiki" title="edit CiteMusrFit" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/CiteMusrFit?t=1528465297" type="application/x-wiki" title="edit CiteMusrFit" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<base /><!--[if IE]></base><![endif]--><link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -105,8 +105,8 @@
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiForm-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
@ -123,13 +123,19 @@
<p></p>
Since quite some effort is going into the development and maintenance of the <code>musrfit</code> package, you should at least acknowledge it in your publication if you have used it to analyze your data. Even better of course is to cite it properly by the reference given beneath
<p></p> <ul>
<li> <a href="http://dx.doi.org/10.1016/j.phpro.2012.04.042">A. Suter, B.M. Wojek, "Musrfit: A Free Platform-Independent Framework for &mu;SR Data Analysis", Physics Procedia 30, 69 (2012).</a>
<li> <a href="http://dx.doi.org/10.1016/j.phpro.2012.04.042">A. Suter, B.M. Wojek, "Musrfit: A Free Platform-Independent Framework for &mu;SR Data Analysis", Physics Procedia <strong>30</strong>, 69 (2012).</a>
</li></ul>
<p></p>
The GPU high speed <code>musrfit</code> version is utilizing <code>DKS</code>. In case you are using this version, please also add the following citations
<p></p> <ul>
<li> <a href="https://doi.org/10.1016/j.cpc.2016.05.013">A. Adelmann, U. Locans, A. Suter, "The Dynamic Kernel Scheduler&mdash;Part 1", Computer Physics Communications <strong>207</strong>, 83 (2016).</a>
</li> <li> <a href="https://doi.org/10.1016/j.cpc.2017.02.007">U. Locans, <strong><em>et al.</em></strong>, "Real-time computation of parameter fitting and image reconstruction using graphical processing units", Computer Physics Communications <strong>215</strong>, 71 (2017).</a>
</li></ul> </div>
<p></p>
<p></p>
</div>
<div class="patternInfo">This topic: MUSR<span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span><a class="foswikiCurrentWebHomeLink" href="WebHome.html">WebHome</a><span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span>CiteMusrFit <br />
Topic revision: <span class='patternRevInfo'>19 Jun 2012, suter_a</span></div>
Topic revision: <span class='patternRevInfo'>22 Aug 2017, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
</div>
</div>
</div>
@ -147,5 +153,5 @@ Topic revision: <span class='patternRevInfo'>19 Jun 2012, suter_a</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/CiteMusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:03 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/CiteMusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:20 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/LibFitPofB?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:04 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/LibFitPofB?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:21 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,13 +14,13 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/LibFitPofB?t=1494785299" type="application/x-wiki" title="edit LibFitPofB" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/LibFitPofB?t=1528465298" type="application/x-wiki" title="edit LibFitPofB" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@ -101,17 +101,17 @@
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--JavascriptFiles/foswikiPref-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::CHILI-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
@ -428,5 +428,5 @@ Topic revision: <span class='patternRevInfo'>03 Jul 2015, suter_a</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/LibFitPofB?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:10 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/LibFitPofB?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:26 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/LibZFRelaxation?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:26 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/LibZFRelaxation?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:45 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,14 +14,14 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/LibZFRelaxation?t=1494785294" type="application/x-wiki" title="edit LibZFRelaxation" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/LibZFRelaxation?t=1528465295" type="application/x-wiki" title="edit LibZFRelaxation" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<base /><!--[if IE]></base><![endif]--><link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -104,13 +104,13 @@
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JavascriptFiles/foswikiString-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JavascriptFiles/foswikiPref-->
<!--JQUERYPLUGIN::CHILI-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
@ -233,5 +233,5 @@ Topic revision: <span class='patternRevInfo'>03 Jul 2015, suter_a</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/LibZFRelaxation?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:30 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/LibZFRelaxation?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:47 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/Msr2Data?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:03 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/Msr2Data?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:20 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,13 +14,11 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/Msr2Data?t=1494785299" type="application/x-wiki" title="edit Msr2Data" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/Msr2Data?t=1528465298" type="application/x-wiki" title="edit Msr2Data" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN-->
<style class='head TABLEPLUGIN_default' type="text/css" media="all">
<base /><!--[if IE]></base><![endif]--><style class='head TABLEPLUGIN_default' type="text/css" media="all">
body .foswikiTable {border-width:1px}
body .foswikiTable .tableSortIcon img {padding-left:.3em; vertical-align:text-bottom}
body .foswikiTable td {border-style:solid none; vertical-align:top}
@ -52,10 +50,12 @@ body .foswikiTable#tableMsr2Data1 th.foswikiSortedCol {background-color:#eeeeee}
body .foswikiTable#tableMsr2Data1 tr.foswikiTableRowdataBg0 td {background-color:#ffffff}
body .foswikiTable#tableMsr2Data1 tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-color:#f5f5f5}
</style><!--TABLEPLUGIN_specific-->
<link class='head JQUERYPLUGIN::TWISTY' rel='stylesheet' href='../pub/System/TwistyPlugin/twisty327a.css?version=1.6.0' type='text/css' media='all' /><!--JQUERYPLUGIN::TWISTY: requires= missing ids: JavascriptFiles/foswikiPref-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::TWISTY' rel='stylesheet' href='../pub/System/TwistyPlugin/twisty327a.css?version=1.6.0' type='text/css' media='all' /><!--JQUERYPLUGIN::TWISTY: requires= missing ids: JavascriptFiles/foswikiPref-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -135,18 +135,18 @@ body .foswikiTable#tableMsr2Data1 tr.foswikiTableRowdataBg0 td.foswikiSortedCol
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JQUERYPLUGIN::TWISTY-->
<!--JavascriptFiles/foswikiForm-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::CHILI-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::TWISTY-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
@ -435,5 +435,5 @@ Topic revision: <span class='patternRevInfo'>28 Apr 2016, <a href="https://intr
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/Msr2Data?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:03 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/Msr2Data?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:20 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:39 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,14 +14,11 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrFit?t=1494785298" type="application/x-wiki" title="edit MusrFit" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrFit?t=1528465297" type="application/x-wiki" title="edit MusrFit" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<style class='head TABLEPLUGIN_default' type="text/css" media="all">
<base /><!--[if IE]></base><![endif]--><style class='head TABLEPLUGIN_default' type="text/css" media="all">
body .foswikiTable {border-width:1px}
body .foswikiTable .tableSortIcon img {padding-left:.3em; vertical-align:text-bottom}
body .foswikiTable td {border-style:solid none; vertical-align:top}
@ -35,8 +32,11 @@ body .foswikiTable tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-col
body .foswikiTable tr.foswikiTableRowdataBg1 td {background-color:#f7f7f6}
body .foswikiTable tr.foswikiTableRowdataBg1 td.foswikiSortedCol {background-color:#f0f0ee}
</style><!--TABLEPLUGIN_default-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -116,17 +116,17 @@ body .foswikiTable tr.foswikiTableRowdataBg1 td.foswikiSortedCol {background-col
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::CHILI-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
@ -165,7 +165,9 @@ body .foswikiTable tr.foswikiTableRowdataBg1 td.foswikiSortedCol {background-col
</li> <li> <a href="MusrFit.html#A_4.4_The_FUNCTIONS_Block"> 4.4 The FUNCTIONS Block </a>
</li> <li> <a href="MusrFit.html#A_4.5_The_GLOBAL_Block"> 4.5 The GLOBAL Block </a>
</li> <li> <a href="MusrFit.html#A_4.6_The_RUN_Block"> 4.6 The RUN Block </a>
</li> <li> <a href="MusrFit.html#A_4.7_The_COMMANDS_Block"> 4.7 The COMMANDS Block </a>
</li> <li> <a href="MusrFit.html#A_4.7_The_COMMANDS_Block"> 4.7 The COMMANDS Block </a> <ul>
<li> <a href="MusrFit.html#A_4.7.1_DKS_extensions_of_the_COMMANDS_block_enabling_GPU_and_general_OpenCL_support"> 4.7.1 DKS extensions of the COMMANDS block enabling GPU and general OpenCL support </a>
</li></ul>
</li> <li> <a href="MusrFit.html#A_4.8_The_FOURIER_Block"> 4.8 The FOURIER Block </a>
</li> <li> <a href="MusrFit.html#A_4.9_The_PLOT_Block"> 4.9 The PLOT Block </a>
</li> <li> <a href="MusrFit.html#A_4.10_The_STATISTIC_Block"> 4.10 The STATISTIC Block </a>
@ -554,6 +556,8 @@ Notes
<h2 id="A_4.3_The_THEORY_Block"> 4.3 The THEORY Block </h2>
The THEORY block is used to define the fit function. There is a set of predefined functions available. It is also possible to use externally defined functions. How to use them will be explained afterwards, here only the predefined functions are described.
<p></p>
Theory functions which show a <img class='smily' src='../pub/Main/SmiliesPluginPSI/no.gif' alt='no' title='no' /> are not yet DKS ready, i.e. cannot be run on the GPU if the <code>musrfit</code> / DKS version is installed.
<p></p>
<span id="TheoryTable"></span>
<table border="1" class="foswikiTable" rules="none">
<thead>
@ -608,14 +612,14 @@ The THEORY block is used to define the fit function. There is a set of predefine
<td class="foswikiTableCol1"> sgktlf </td>
<td class="foswikiTableCol2"> <img alt="\nu\,(\mathrm{MHz})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_7188605a647615e4fb92cc89274b22a0.png" />, <img alt="\sigma\,(\mu\text{s}^{-1})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_6b6bbc4add4da0bde8220c54594658f3.png" /> </td>
<td class="foswikiTableCol3"> <img alt="G&#95;{\mathrm{G,LF}}(t) \equiv 1-\frac{2\sigma^2}{(2\pi\nu)^2}\left&#91;1-\exp\left(-\frac{1}{2}\sigma^2t^2\right)\cos(2\pi\nu t)\right]+\frac{2\sigma^4}{(2\pi\nu)^3}\int^t&#95;0 \exp\left(-\frac{1}{2}\sigma^2\tau^2\right)\sin(2\pi\nu\tau)\mathrm{d}\tau" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_e9a0c0aa5d84cb4ea67265a3b06b9af5.png" /> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote3text"></a><span class="FootNoteTextLink" title=" R&#46; S&#46; Hayano _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;20&#46;850&#93;&#91;Phys&#46; Rev&#46; B &#42;20&#42; &#40;1979&#41; 850&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote3note">(4)</a></span> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote3text"></a><span class="FootNoteTextLink" title=" R&#46; S&#46; Hayano _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;20&#46;850&#93;&#91;Phys&#46; Rev&#46; B &#42;20&#42; &#40;1979&#41; 850&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote3note">(4)</a></span> <img class='smily' src='../pub/Main/SmiliesPluginPSI/no.gif' alt='no' title='no' /> </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> dynGssKTLF </td>
<td class="foswikiTableCol1"> dgktlf </td>
<td class="foswikiTableCol2"> <img alt="\nu\,(\mathrm{MHz})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_7188605a647615e4fb92cc89274b22a0.png" />, <img alt="\sigma\,(\mu\text{s}^{-1})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_6b6bbc4add4da0bde8220c54594658f3.png" />, <img alt="\Gamma\,(\mathrm{MHz})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_f87b1352f663a35bf263bc7e9a214ca3.png" /> </td>
<td class="foswikiTableCol3"> <img alt="\frac{1}{2\pi \imath}\int&#95;{\gamma-\imath\infty}^{\gamma+\imath\infty} \frac{f&#95;{\mathrm{G}}(s+\Gamma)}{1-\Gamma f&#95;{\mathrm{G}}(s+\Gamma)} \exp(s t) \mathrm{d}s,\mathrm{where}\,f&#95;{\mathrm{G}}(s)\equiv \int&#95;0^{\infty}G&#95;{\mathrm{G,LF}}(t)\exp(-s t) \mathrm{d}t" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_cb688f85a062f09bfaff5cf9144860a9.png" /> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote4text"></a><span class="FootNoteTextLink" title=" R&#46; S&#46; Hayano _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;20&#46;850&#93;&#91;Phys&#46; Rev&#46; B &#42;20&#42; &#40;1979&#41; 850&#93;&#93;&#59; P&#46; Dalmas de R&#38;eacute&#59;otier and A&#46; Yaouanc&#44; &#91;&#91;http&#58;&#47;&#47;dx&#46;doi&#46;org&#47;10&#46;1088&#47;0953&#45;8984&#47;4&#47;18&#47;020&#93;&#91;J&#46; Phys&#46;&#58; Condens&#46; Matter &#42;4&#42; &#40;1992&#41; 4533&#93;&#93;&#59; A&#46; Keren&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;50&#46;10039&#93;&#91;Phys&#46; Rev&#46; B &#42;50&#42; &#40;1994&#41; 10039&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote4note">(5)</a></span> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote4text"></a><span class="FootNoteTextLink" title=" R&#46; S&#46; Hayano _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;20&#46;850&#93;&#91;Phys&#46; Rev&#46; B &#42;20&#42; &#40;1979&#41; 850&#93;&#93;&#59; P&#46; Dalmas de R&#38;eacute&#59;otier and A&#46; Yaouanc&#44; &#91;&#91;http&#58;&#47;&#47;dx&#46;doi&#46;org&#47;10&#46;1088&#47;0953&#45;8984&#47;4&#47;18&#47;020&#93;&#91;J&#46; Phys&#46;&#58; Condens&#46; Matter &#42;4&#42; &#40;1992&#41; 4533&#93;&#93;&#59; A&#46; Keren&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;50&#46;10039&#93;&#91;Phys&#46; Rev&#46; B &#42;50&#42; &#40;1994&#41; 10039&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote4note">(5)</a></span> <img class='smily' src='../pub/Main/SmiliesPluginPSI/no.gif' alt='no' title='no' /> </td>
</tr>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> statExpKT </td>
@ -629,14 +633,14 @@ The THEORY block is used to define the fit function. There is a set of predefine
<td class="foswikiTableCol1"> sektlf </td>
<td class="foswikiTableCol2"> <img alt="\nu\,(\mathrm{MHz})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_7188605a647615e4fb92cc89274b22a0.png" />, <img alt="a\,(\mu\text{s}^{-1})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_26a5ae8799badcc3bcbe1823265a9053.png" /> </td>
<td class="foswikiTableCol3"> <img alt="1-\frac{a}{2\pi\nu}j&#95;1(2\pi\nu t)\exp\left(-at\right)-\left(\frac{a}{2\pi\nu}\right)^2 \left&#91;j&#95;0(2\pi\nu t)\exp\left(-at\right)-1\right]-a\left&#91;1+\left(\frac{a}{2\pi\nu}\right)^2\right]\int^t&#95;0 \exp\left(-a\tau\right)j&#95;0(2\pi\nu\tau)\mathrm{d}\tau \equiv G&#95;{\mathrm{L,LF}}(t)" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_df4770dd7b14577f14410b4f7ab59721.png" /> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote6text"></a><span class="FootNoteTextLink" title=" Y&#46; J&#46; Uemura _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;31&#46;546&#93;&#91;Phys&#46; Rev&#46; B &#42;31&#42; &#40;1985&#41; 546&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote6note">(7)</a></span> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote6text"></a><span class="FootNoteTextLink" title=" Y&#46; J&#46; Uemura _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;31&#46;546&#93;&#91;Phys&#46; Rev&#46; B &#42;31&#42; &#40;1985&#41; 546&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote6note">(7)</a></span> <img class='smily' src='../pub/Main/SmiliesPluginPSI/no.gif' alt='no' title='no' /> </td>
</tr>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> dynExpKTLF </td>
<td class="foswikiTableCol1"> dektlf </td>
<td class="foswikiTableCol2"> <img alt="\nu\,(\mathrm{MHz})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_7188605a647615e4fb92cc89274b22a0.png" />, <img alt="a\,(\mu\text{s}^{-1})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_26a5ae8799badcc3bcbe1823265a9053.png" />, <img alt="\Gamma\,(\mathrm{MHz})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_f87b1352f663a35bf263bc7e9a214ca3.png" /> </td>
<td class="foswikiTableCol3"> <img alt="\frac{1}{2\pi \imath}\int&#95;{\gamma-\imath\infty}^{\gamma+\imath\infty} \frac{f&#95;{\mathrm{L}}(s+\Gamma)}{1-\Gamma f&#95;{\mathrm{L}}(s+\Gamma)} \exp(s t) \mathrm{d}s,\mathrm{where}\,f&#95;{\mathrm{L}}(s)\equiv \int&#95;0^{\infty}G&#95;{\mathrm{L,LF}}(t)\exp(-s t) \mathrm{d}t" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_c5c6dea10611dae1d470a5615869073a.png" /> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote7text"></a><span class="FootNoteTextLink" title=" R&#46; S&#46; Hayano _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;20&#46;850&#93;&#91;Phys&#46; Rev&#46; B &#42;20&#42; &#40;1979&#41; 850&#93;&#93;&#59; P&#46; Dalmas de R&#38;eacute&#59;otier and A&#46; Yaouanc&#44; &#91;&#91;http&#58;&#47;&#47;dx&#46;doi&#46;org&#47;10&#46;1088&#47;0953&#45;8984&#47;4&#47;18&#47;020&#93;&#91;J&#46; Phys&#46;&#58; Condens&#46; Matter &#42;4&#42; &#40;1992&#41; 4533&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote7note">(8)</a></span> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a name="FootNote7text"></a><span class="FootNoteTextLink" title=" R&#46; S&#46; Hayano _et al&#46;_&#44; &#91;&#91;http&#58;&#47;&#47;link&#46;aps&#46;org&#47;doi&#47;10&#46;1103&#47;PhysRevB&#46;20&#46;850&#93;&#91;Phys&#46; Rev&#46; B &#42;20&#42; &#40;1979&#41; 850&#93;&#93;&#59; P&#46; Dalmas de R&#38;eacute&#59;otier and A&#46; Yaouanc&#44; &#91;&#91;http&#58;&#47;&#47;dx&#46;doi&#46;org&#47;10&#46;1088&#47;0953&#45;8984&#47;4&#47;18&#47;020&#93;&#91;J&#46; Phys&#46;&#58; Condens&#46; Matter &#42;4&#42; &#40;1992&#41; 4533&#93;&#93; "><a class="foswikiCurrentTopicLink" href="#FootNote7note">(8)</a></span> <img class='smily' src='../pub/Main/SmiliesPluginPSI/no.gif' alt='no' title='no' /> </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> combiLGKT </td>
@ -706,7 +710,7 @@ The THEORY block is used to define the fit function. There is a set of predefine
<td class="foswikiTableCol1"> skg </td>
<td class="foswikiTableCol2"> <img alt="\varphi\,(^{\circ})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_61136f20673ad20f955c43e43b8cec9d.png" />, <img alt="\nu\,(\mathrm{MHz})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_7188605a647615e4fb92cc89274b22a0.png" />, <img alt="\sigma&#95;{-}\,(\mu\text{s}^{-1})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_bd5c765027d46aa1433dda03f540c17e.png" />, <img alt="\sigma&#95;{+}\,(\mu\text{s}^{-1})" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_82adbab00b6a057f04037b44746e33eb.png" /> </td>
<td class="foswikiTableCol3"> <img alt="\frac{\sigma&#95;{-}}{\sigma&#95;{+}+\sigma&#95;{-}}\exp\left&#91;-\frac{\sigma&#95;{-}^2t^2}{2}\right]\left\lbrace\cos\left(2\pi\nu t+\frac{\pi\varphi}{180}\right)+\sin\left(2\pi\nu t+\frac{\pi\varphi}{180}\right)\mathrm{Erfi}\left(\frac{\sigma&#95;{-}t}{\sqrt{2}}\right)\right\rbrace+ \frac{\sigma&#95;{+}}{\sigma&#95;{+}+\sigma&#95;{-}}\exp\left&#91;-\frac{\sigma&#95;{+}^2t^2}{2}\right]\left\lbrace\cos\left(2\pi\nu t+\frac{\pi\varphi}{180}\right)-\sin\left(2\pi\nu t+\frac{\pi\varphi}{180}\right)\mathrm{Erfi}\left(\frac{\sigma&#95;{+}t}{\sqrt{2}}\right)\right\rbrace" class="mmpImage" src="../pub/MUSR/MusrFit/_MathModePlugin_7f4cd42199fbf712ad5a86f9d94bd698.png" /> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a href="http://lmu.web.psi.ch/musrfit/memos/skewedGaussian.pdf">memo</a> <span class='foswikiIcon'><img src='../pub/System/DocumentGraphics/pdf.png' width='16' height='16' alt='pdf' /></span> </td>
<td class="foswikiTableCol4 foswikiLastCol"> <a href="http://lmu.web.psi.ch/musrfit/memos/skewedGaussian.pdf">memo</a> <span class='foswikiIcon'><img src='../pub/System/DocumentGraphics/pdf.png' width='16' height='16' alt='pdf' /></span> <img class='smily' src='../pub/Main/SmiliesPluginPSI/no.gif' alt='no' title='no' /> </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> staticNKZF </td>
@ -1243,6 +1247,41 @@ For debug purposes it is possible to force MINUIT2 to print out additional infor
</pre>
Here the <code>MINOS</code> command will print out lot of additional information to the standard output. Notice there are 2 <code>SAVE</code> commands here. This will write the result of <code>MIGRAD</code> to the <code>MINUIT2.OUTPUT</code> file and at the end <em>append</em> the <code>MINOS</code> results to this file.
<p></p>
<h3 id="A_4.7.1_DKS_extensions_of_the_COMMANDS_block_enabling_GPU_and_general_OpenCL_support"> 4.7.1 DKS extensions of the COMMANDS block enabling GPU and general OpenCL support </h3>
<p></p>
In case you are running the <code>musrfit</code> / DKS version, there are a couple commands which allow you to control the way how the fit shall be performed. These commands are:
<span class='foswikiMaroonFG'>
<table border="1" class="foswikiTable" rules="none">
<thead>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<th class="foswikiTableCol0 foswikiFirstCol"> <a href="https://intranet.psi.ch/MUSR/MusrFit?cover=print;sortcol=0;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column">Command</a> </th>
<th class="foswikiTableCol1 foswikiLastCol"> <a href="https://intranet.psi.ch/MUSR/MusrFit?cover=print;sortcol=1;table=3;up=0#sorted_table" rel="nofollow" title="Sort by this column">Purpose</a> </th>
</tr>
</thead>
<tbody>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> OpenMP </td>
<td class="foswikiTableCol1 foswikiLastCol"> tries to run multi-threading via OpenMP if available </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol"> CUDA </td>
<td class="foswikiTableCol1 foswikiLastCol"> tries to run the fit on a NVIDIA card as the Tesla K40c </td>
</tr>
<tr class="foswikiTableEven foswikiTableRowdataBgSorted0 foswikiTableRowdataBg0">
<td class="foswikiTableCol0 foswikiFirstCol"> OpenCL-CPU </td>
<td class="foswikiTableCol1 foswikiLastCol"> tries to run multi-threading via OpenCL on the CPU. This is useful for macOS </td>
</tr>
<tr class="foswikiTableOdd foswikiTableRowdataBgSorted1 foswikiTableRowdataBg1">
<td class="foswikiTableCol0 foswikiFirstCol foswikiLast"> OpenCL-GPU </td>
<td class="foswikiTableCol1 foswikiLastCol foswikiLast"> tries to run multi-threading via OpenCL on the GPU. This is used for AMD cards, but also works for NVIDIA </td>
</tr>
</tbody></table>
<p></p>
OpenMP is the default if none of these tags are found in the COMMANDS block.
</span>
<p></p>
In case the defined THEORY is <strong>not</strong> ready to run on the accelerator, <code>musrfit</code> will fall back to the default behaviour. In the <a class="foswikiCurrentTopicLink" href="#TheoryTable">THEORY table</a> all the functions which are currently <strong>not</strong> GPU ready are marked by <img class='smily' src='../pub/Main/SmiliesPluginPSI/no.gif' alt='no' title='no' /> in the reference column.
<p></p>
<span id="TheFourierBlock"></span>
<h2 id="A_4.8_The_FOURIER_Block"> 4.8 The FOURIER Block </h2>
The Fourier transform is done and the results are plotted within <code>musrview</code> &mdash;as input data the actual data shown in <code>musrview</code> is used. In the FOURIER block of the msr file all necessary parameters for calculating and presenting the Fourier transform of the data specified in the <a class="foswikiCurrentTopicLink" href="#ThePlotBlock">PLOT block</a> is given. If the FOURIER block is not present in the msr file, either the parameters set in the <a class="foswikiCurrentTopicLink" href="#MusrfitStartupXml">XML startup file</a> or the system defaults are taken when the Fourier transform is performed. The block starts with the FOURIER keyword and may contain the following entries on the successive lines: <dl>
@ -1713,7 +1752,7 @@ For reporting bugs or requesting new features and improvements please use the <a
<p></p>
</div>
<div class="patternInfo">This topic: MUSR<span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span><a class="foswikiCurrentWebHomeLink" href="WebHome.html">WebHome</a><span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span>MusrFit <br />
Topic revision: <span class='patternRevInfo'>30 Apr 2017, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
Topic revision: <span class='patternRevInfo'>23 Aug 2017, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
</div>
</div>
</div>
@ -1731,5 +1770,5 @@ Topic revision: <span class='patternRevInfo'>30 Apr 2017, <a href="https://intr
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:03 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFit?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:20 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitAcknowledgements?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:39 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitAcknowledgements?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,14 +14,14 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrFitAcknowledgements?t=1494785298" type="application/x-wiki" title="edit MusrFitAcknowledgements" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrFitAcknowledgements?t=1528465297" type="application/x-wiki" title="edit MusrFitAcknowledgements" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<base /><!--[if IE]></base><![endif]--><link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -102,14 +102,14 @@
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::COMMENT--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
<span id="PageTop"></span><div class="foswikiPage"><div id="patternScreen">
@ -122,12 +122,15 @@
<div class="patternContent"><div class="foswikiTopic"> <h1 id="Acknowledgements_45_61_61musrfit_61_61"> Acknowledgements - <code><b>musrfit</b></code> </h1>
<p></p> <dl>
<dt> Bastian M. Wojek </dt><dd> I am very much indebted to <a href="http://www.fsf.org/register_form?referrer=8369">BMW</a> for his rigorous testing of <code><a href="MusrFit.html">musrfit</a></code>, his many useful suggestions, contributions, and for the largest part of the <a class="foswikiCurrentWebHomeLink" href="WebHome.html">user manual of <code>musrfit</code></a> which makes it accessible to a broader audience! Many thanks Bastian!
</dd></dl>
<p></p> <dl>
<dt> Uldis Locans </dt><dd> I am very much indebted to Uldis work on <a href="CiteMusrFit.html">DKS</a> enabling the GPU support for <code><a href="MusrFit.html">musrfit</a></code>. His kind, calm, and extremely competent way to deal with his projects as well as to deal with the chaos of physicists way to think is admirable. Many thanks Uldis!
</dd></dl> </div>
<p></p>
<p></p>
</div>
<div class="patternInfo">This topic: MUSR<span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span><a class="foswikiCurrentWebHomeLink" href="WebHome.html">WebHome</a> &gt; <a href="MusrFit.html">MusrFit</a><span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span>MusrFitAcknowledgements <br />
Topic revision: <span class='patternRevInfo'>03 Jul 2015, suter_a</span></div>
Topic revision: <span class='patternRevInfo'>23 Aug 2017, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
</div>
</div>
</div>
@ -145,5 +148,5 @@ Topic revision: <span class='patternRevInfo'>03 Jul 2015, suter_a</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitAcknowledgements?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:39 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitAcknowledgements?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitSetup?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:39 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitSetup?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,7 +14,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrFitSetup?t=1494785297" type="application/x-wiki" title="edit MusrFitSetup" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrFitSetup?t=1528465297" type="application/x-wiki" title="edit MusrFitSetup" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
@ -101,17 +101,17 @@
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JavascriptFiles/foswikiString-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::CHILI-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
@ -134,9 +134,13 @@
</li> <li> <a href="MusrFitSetup.html#A_3.1.2_Installation_of_61_61NeXus_61_61_requirements_40optional_41"> 3.1.2 Installation of NeXus requirements (optional) </a>
</li> <li> <a href="MusrFitSetup.html#A_3.1.3_61_61ROOT_61_61"> 3.1.3 ROOT </a>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_3.2_61_61musrfit_61_61"> 3.2 musrfit </a>
</li> <li> <a href="MusrFitSetup.html#A_3.2_61_61musrfit_61_61"> 3.2 musrfit </a> <ul>
<li> <a href="MusrFitSetup.html#A_3.2.1_61_61musrfit_61_61_build_with_61_61automake_61_61"> 3.2.1 musrfit build with automake </a>
</li> <li> <a href="MusrFitSetup.html#A_3.2.2_61_61musrfit_61_61_build_with_61_61cmake_61_61"> 3.2.2 musrfit build with cmake </a>
</li> <li> <a href="MusrFitSetup.html#A_3.2.3_61_61musrfit_61_61_last_step_of_the_installation"> 3.2.3 musrfit last step of the installation </a>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_3.3_61_61musredit_61_61"> 3.3 musredit </a>
</li> <li> <a href="MusrFitSetup.html#A_3.4_61_61musrgui_61_61"> 3.4 musrgui </a>
</li> <li> <a href="MusrFitSetup.html#A_3.4_61_61musrgui_61_61_40obsolete_41"> 3.4 musrgui (obsolete) </a>
</li> <li> <a href="MusrFitSetup.html#A_3.5_Check_of_the_installation"> 3.5 Check of the installation </a>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_4_MS_Windows"> 4 MS Windows </a> <ul>
@ -145,24 +149,40 @@
</li> <li> <a href="MusrFitSetup.html#A_4.1.2_Installation_of_61_61NeXus_61_61_requirements_40optional_41"> 4.1.2 Installation of NeXus requirements (optional) </a>
</li> <li> <a href="MusrFitSetup.html#A_4.1.3_61_61ROOT_61_61"> 4.1.3 ROOT </a>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_4.2_61_61musrfit_61_61"> 4.2 musrfit </a>
</li> <li> <a href="MusrFitSetup.html#A_4.2_61_61musrfit_61_61"> 4.2 musrfit </a> <ul>
<li> <a href="MusrFitSetup.html#A_4.2.1_61_61musrfit_61_61_build_with_61_61automake_61_61"> 4.2.1 musrfit build with automake </a>
</li> <li> <a href="MusrFitSetup.html#A_4.2.2_61_61musrfit_61_61_build_with_61_61cmake_61_61"> 4.2.2 musrfit build with cmake </a>
</li> <li> <a href="MusrFitSetup.html#A_4.2.3_61_61musrfit_61_61_last_step_of_the_installation"> 4.2.3 musrfit last step of the installation </a>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_4.3_61_61musredit_61_61"> 4.3 musredit </a>
</li> <li> <a href="MusrFitSetup.html#A_4.4_61_61musrgui_61_61"> 4.4 musrgui </a>
</li> <li> <a href="MusrFitSetup.html#A_4.5_Check_of_the_installation"> 4.5 Check of the installation </a>
</li> <li> <a href="MusrFitSetup.html#A_4.6_Possible_problems"> 4.6 Possible problems </a>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_5_Mac_OS_X"> 5 Mac OS X </a> <ul>
</li> <li> <a href="MusrFitSetup.html#A_5_Mac_OS_X_47_macOS"> 5 Mac OS X / macOS </a> <ul>
<li> <a href="MusrFitSetup.html#A_5.1_Requirements_40_61_61MacPorts_61_61_41"> 5.1 Requirements (MacPorts) </a> <ul>
<li> <a href="MusrFitSetup.html#A_5.1.1_Everything_but_61_61ROOT_61_61_and_61_61NeXus_61_61"> 5.1.1 Everything but ROOT and NeXus </a>
</li> <li> <a href="MusrFitSetup.html#A_5.1.2_Installation_of_61_61NeXus_61_61_requirements_40optional_41"> 5.1.2 Installation of NeXus requirements (optional) </a>
</li> <li> <a href="MusrFitSetup.html#A_5.1.3_61_61ROOT_61_61"> 5.1.3 ROOT </a>
</li> <li> <a href="MusrFitSetup.html#A_5.1.3_61_61ROOT_61_61"> 5.1.3 ROOT </a> <ul>
<li> <a href="MusrFitSetup.html#A_5.1.3.1_61_61ROOT_61_61_installed_via_package_installer"> 5.1.3.1 ROOT installed via package installer </a>
</li> <li> <a href="MusrFitSetup.html#A_5.1.3.2_61_61ROOT_61_61_installed_from_source"> 5.1.3.2 ROOT installed from source </a>
</li> <li> <a href="MusrFitSetup.html#A_5.1.3.3_Setting_up_Environment_Variables_for_61_61ROOT_61_61_and_61_61musrfit_61_61"> 5.1.3.3 Setting up Environment Variables for ROOT and musrfit </a>
</li></ul>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_5.2_Requirements_40_61_61Fink_61_61_41"> 5.2 Requirements (Fink) </a> <ul>
<li> <a href="MusrFitSetup.html#A_5.2.1_Everything_but_61_61ROOT_61_61_and_61_61NeXus_61_61"> 5.2.1 Everything but ROOT and NeXus </a>
</li> <li> <a href="MusrFitSetup.html#A_5.2.2_Installation_of_61_61NeXus_61_61_requirements_40optional_41"> 5.2.2 Installation of NeXus requirements (optional) </a>
</li> <li> <a href="MusrFitSetup.html#A_5.2.3_61_61ROOT_61_61"> 5.2.3 ROOT </a>
</li> <li> <a href="MusrFitSetup.html#A_5.2.3_61_61ROOT_61_61"> 5.2.3 ROOT </a> <ul>
<li> <a href="MusrFitSetup.html#A_5.2.3.1_61_61ROOT_61_61_installed_via_package_installer"> 5.2.3.1 ROOT installed via package installer </a>
</li> <li> <a href="MusrFitSetup.html#A_5.2.3.2_61_61ROOT_61_61_installed_from_source"> 5.2.3.2 ROOT installed from source </a>
</li> <li> <a href="MusrFitSetup.html#A_5.2.3.3_Setting_up_Environment_Variables_for_61_61ROOT_61_61_and_61_61musrfit_61_61"> 5.2.3.3 Setting up Environment Variables for ROOT and musrfit </a>
</li></ul>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_5.3_61_61musrfit_61_61"> 5.3 musrfit </a> <ul>
<li> <a href="MusrFitSetup.html#A_5.3.1_61_61musrfit_61_61_build_with_61_61automake_61_61"> 5.3.1 musrfit build with automake </a>
</li> <li> <a href="MusrFitSetup.html#A_5.3.2_61_61musrfit_61_61_build_with_61_61cmake_61_61"> 5.3.2 musrfit build with cmake </a>
</li> <li> <a href="MusrFitSetup.html#A_5.3.3_61_61musrfit_61_61_last_step_of_the_installation"> 5.3.3 musrfit last step of the installation </a>
</li></ul>
</li> <li> <a href="MusrFitSetup.html#A_5.3_61_61musrfit_61_61"> 5.3 musrfit </a>
</li> <li> <a href="MusrFitSetup.html#A_5.4_61_61musredit_61_61"> 5.4 musredit </a>
</li> <li> <a href="MusrFitSetup.html#A_5.5_61_61musrgui_61_61_40obsolete_41"> 5.5 musrgui (obsolete) </a>
</li> <li> <a href="MusrFitSetup.html#A_5.6_Check_of_the_installation"> 5.6 Check of the installation </a>
@ -175,22 +195,25 @@
This page is intended to demonstrate for the interested user which steps are necessary to set up the <a href="http://www.gnu.org/philosophy/free-sw.html">free software</a> &mu;SR data analysis framework <code><a href="MusrFit.html">musrfit</a></code>. While the preferred way is to run the software on <strong>GNU/Linux</strong> or <strong>MacOS X</strong>, with some restrictions it can also be set up under <strong>MS Windows</strong> (cygwin, only for the very brave, probably it is easier for most MS Windows users to install a Virtual Machine running Linux). <span class='foswikiRedFG'>In case <code>musrfit</code> should be installed according to the description found on this page, the user is strongly encouraged to <em>read completely</em> each section dealing with the present installation step <em>before</em> starting the installation process!</span>
<p></p>
<span id="ReqSw"></span>
Apart from <a href="http://gcc.gnu.org/">GCC, the GNU Compiler Collection</a> (gcc, g++), the GNU build tools <a href="http://www.gnu.org/software/autoconf/">autoconf</a>, <a href="http://www.gnu.org/software/automake/">automake</a> and <a href="http://www.gnu.org/software/libtool/">libtool</a> as well as the helper tool <a href="http://pkg-config.freedesktop.org/wiki/">pkg-config</a> <code>musrfit</code> requires the installation of a few open-source libraries and programs including their header packages:
$ <a href="http://www.boost.org/">boost C++ libraries</a>: The powerful <code>Spirit</code> parser framework used by <code>musrfit</code> is included in that collection of libraries. <em>Required version &#8805; 1.33</em>
$ <a href="http://www.gnu.org/software/gsl/">GNU Scientific Library</a>: A numerical <code>C</code> and <code>C++</code> library which provides efficient implementations of various mathematical routines. <em>Required version &#8805; 1.9</em>
$ <a href="http://www.fftw.org/">FFTW</a>: A <code>C</code> implementation for the fast computation of discrete Fourier transforms. <em>Required version &#8805; 3.1</em>
$ <a href="http://root.cern.ch/">ROOT</a>: A <code>C++</code> data analysis framework developed at <a href="http://www.cern.ch/">CERN</a>. <em>Required version &#8805; 5.22</em>
$ <a href="http://xmlsoft.org/">libxml2</a>: The <code>XML</code> <code>C</code> parser and toolkit of <a href="http://www.gnome.org/">Gnome</a>. <em>Required version &#8805; 2.0</em>
Apart from <a href="http://gcc.gnu.org/">GCC, the GNU Compiler Collection</a> (gcc, g++), the GNU build tools <a href="http://www.gnu.org/software/autoconf/">autoconf</a>, <a href="http://www.gnu.org/software/automake/">automake</a> and <a href="http://www.gnu.org/software/libtool/">libtool</a> are needed if you want to build <code>musrfit</code> via the automake toolchain, or <a href="https://cmake.org/">cmake</a> if you plan to use the cmake toolchain. Furthermore the helper tool <a href="http://pkg-config.freedesktop.org/wiki/">pkg-config</a> is needed and <code>musrfit</code> requires the installation of a few open-source libraries and programs including their header packages:
<p></p> <dl>
<dt> boost C++ libraries </dt><dd> The powerful <code>Spirit</code> parser framework used by <code>musrfit</code> is included in that collection of libraries. <em>Required version &#8805; 1.33</em> (see <a href="http://www.boost.org/">boost C++ libraries</a>)
</dd> <dt> GNU Scientific Library </dt><dd> A numerical <code>C</code> and <code>C++</code> library which provides efficient implementations of various mathematical routines. <em>Required version &#8805; 1.9</em> (see <a href="http://www.gnu.org/software/gsl/">GNU Scientific Library</a>)
</dd> <dt> FFTW </dt><dd> A <code>C</code> implementation for the fast computation of discrete Fourier transforms. <em>Required version &#8805; 3.1</em> $ <a href="http://root.cern.ch/">ROOT</a>: A <code>C++</code> data analysis framework developed at <a href="http://www.cern.ch/">CERN</a>. <em>Required version &#8805; 5.22</em> (see <a href="http://www.fftw.org/">FFTW</a>)
</dd> <dt> libxml2 </dt><dd> The <code>XML</code> <code>C</code> parser and toolkit of <a href="http://www.gnome.org/">Gnome</a>. <em>Required version &#8805; 2.0</em> (see <a href="http://xmlsoft.org/">libxml2</a>)
</dd></dl>
<p></p>
<span id="ReqSwNeXus"></span>
Additionally, <span class='foswikiRedFG'>only if</span> <code>musrfit</code> should support reading of data files in the <code>NeXus</code> format the following libraries are needed:
$ <a href="http://www.hdfgroup.org/products/hdf4/">HDF4</a>: A library and multi-object file format for storing and managing data.
$ <a href="http://www.hdfgroup.org/HDF5/">HDF5</a>: A data model, library, and file format for storing and managing data.
$ <a href="http://www.minixml.org/">minixml</a>: A small <code>XML</code> library that can be used to read and write <code>XML</code> and <code>XML</code> -like data files. <em>Required version &#8805; 2.2</em>
$ <a href="http://www.nexusformat.org/">NeXus</a>: A common data format for neutron, x-ray, and muon science. <em>Required version &#8805; 4.4</em>
Additionally, <span class='foswikiRedFG'>only if</span> <code>musrfit</code> should support reading of data files in the <code>NeXus</code> format the following libraries are needed: <dl>
<dt> HDF4 </dt><dd> A library and multi-object file format for storing and managing data (see <a href="http://www.hdfgroup.org/products/hdf4/">HDF4</a>). HDF4 is "outdated" and its support will soon be dropped.
</dd> <dt> HDF5 </dt><dd> A data model, library, and file format for storing and managing data (see <a href="http://www.hdfgroup.org/HDF5/">HDF5</a>).
</dd> <dt> minixml </dt><dd> A small <code>XML</code> library that can be used to read and write <code>XML</code> and <code>XML</code> -like data files. <em>Required version &#8805; 2.2</em> (see <a href="http://www.minixml.org/">minixml</a>).
</dd> <dt> NeXus </dt><dd> A common data format for neutron, x-ray, and muon science. <em>Required version &#8805; 4.4</em> (see <a href="http://www.nexusformat.org/">NeXus</a>).
</dd></dl>
<p></p>
If optionally the editor and graphical user interface <code><a href="MusrGui.html">musrgui</a></code> / <code><a href="MusrGui.html">musredit</a></code> is going to be installed there is one further requirement:
$ <a href="http://qt.nokia.com/">Qt</a>: A cross-platform application and user interface framework. <em>Required version &#8805; 3.3 &#38; &#8810; 4.0 (<code>musrgui</code>) <strong>OR</strong> &#8805; 4.6 (<code>musredit</code>)</em>
If optionally the editor and graphical user interface <code><a href="MusrGui.html">musrgui</a></code> / <code><a href="MusrGui.html">musredit</a></code> is going to be installed there is one further requirement: <dl>
<dt> Qt </dt><dd> A cross-platform application and user interface framework. &#8805; 4.6 (<code>musredit</code>) (see <a href="http://qt.io/">Qt</a>).
</dd></dl>
<p></p>
Each of the following sections focusing on the installation of <code>musrfit</code> on the different operating systems will also give a brief introduction on the installation of the requirements before the actual <code>musrfit</code> installation is described.
<p></p>
@ -224,28 +247,27 @@ When dealing with a distribution that uses the dpkg/apt package manager like <a
<p></p>
For <strong>Qt4</strong>:
<pre class="bash">
&#36; apt-get install git cmake libboost-dev libgsl0-dev libfftw3-dev libxml2-dev libqt4-dev libqtwebkit-dev
&#36; apt-get install git cmake libboost-dev libgsl-dev libfftw3-dev libxml2-dev libqt4-dev libqtwebkit-dev
</pre>
<p></p>
For <strong>Qt5</strong>:
<pre class="bash">
&#36; apt-get install git cmake libboost-dev libgsl0-dev libfftw3-dev libxml2-dev qt5-default qtbase5-dev libqt5svg5-dev libqt5webkit5-dev
&#36; apt-get install git cmake libboost-dev libgsl-dev libfftw3-dev libxml2-dev qt5-default qtbase5-dev libqt5svg5-dev libqt5webkit5-dev
</pre>
<p></p>
Everyone should know best himself which is the way to install distribution software on the chosen distribution <img class='smily' src='../pub/Main/SmiliesPluginPSI/wink.gif' alt='wink' title='wink' />
<p></p>
In case the distribution does not include the required software it has to be compiled from the source files which normally means to download the source code from the corresponding website, to unpack the source tree and call the following from the shell:
<pre class="bash">
&#36; ./configure
&#36; make
&#36; make install
</pre>
In order to obtain some information about the possible options for the installation, calling <code>./configure --help</code> might give some useful hints. <br>
In case the distribution does not include the required software it has to be compiled from the source files.
This means either to download the source code from the corresponding website, or to clone the git repo. If you
need to follow this line, please check the install details of the corresponding package.
<p></p>
For any further information on the standard installation of software, please refer to the web search engine of choice and ask for "install software on linux"...
<p></p>
<h3 id="A_3.1.2_Installation_of_61_61NeXus_61_61_requirements_40optional_41"> 3.1.2 Installation of <code><b>NeXus</b></code> requirements (optional) </h3>
<span class='foswikiRedFG'>Only if</span> <code>musrfit</code> should support reading/writing data files in the <code>NeXus</code> format the further <a class="foswikiCurrentTopicLink" href="#ReqSwNeXus">required</a> software has to be set up. The required libraries and header files could either be available through the user's GNU/Linux distribution or if this is not the case, the packages can be installed from the source code. E.g. on Red Hat-like systems binary packages for <code>MXML</code>, <code>HDF4</code>, and <code>HDF5</code> might be called <code><b>mxml, mxml-devel, hdf, hdf-devel, hdf5, hdf5-devel</b></code>, on Debian-like systems <code><b>libmxml1, libmxml-dev, libhdf4-dev, libhdf5-dev</b></code>.
<p></p>
<strong>Note:</strong> <strong>HDF4</strong> support within <code>NeXus</code> will be dropped by <code>musrfit</code> in the near future. If you not urgently need to read old <code>ISIS</code> <code>NeXus</code> files, you safely can drop it.
<p></p>
<strong>Only <code><b>NeXus</b></code> Version &gt;= 4.4 is support!</strong>
<p></p>
Even though there might exist binary packages for the <code>NeXus</code> library, it is best to build and install it directly from the source code which can be found <a href="https://github.com/nexusformat/code">here</a>.
@ -262,8 +284,11 @@ A brief instruction how to get <code>NeXus</code> compiled from source:
&#36; # next we will build NeXus out-of-source
&#36; mkdir build
&#36; cd build
# The next line only if HDF4 support is needed
&#36; cmake -DENABLE&#95;HDF5&#61;1 -DENABLE&#95;HDF4&#61;1 -DENABLE&#95;MXML&#61;1 ../code
&#36; make
# The next line if HDF4 support is NOT needed
&#36; cmake -DENABLE&#95;HDF5&#61;1 -DENABLE&#95;MXML&#61;1 ../code
&#36; cmake --build ./ --clean-first
&#36; # make install needs either to be carried out as root or sudo depending on your linux flavour.
&#36; sudo make install
</pre>
@ -277,9 +302,9 @@ For RPM based systems (RedHat, Fedora, etc) this will likely to be <strong>libX1
&#36; yum install libX11-devel libXft-devel libXpm-devel libXext-devel
</pre>
<p></p>
For a dpkg/apt based system (Debian, Ubuntu, etc) this will likely to be <strong>libX11-dev</strong>, <strong>libxft-dev</strong>, <strong>libxpm-dev</strong>, and <strong>libxext-dev</strong>:
For a dpkg/apt based system (Debian, Ubuntu, etc) this will likely to be <strong>libx11-dev</strong>, <strong>libxft-dev</strong>, <strong>libxpm-dev</strong>, and <strong>libxext-dev</strong>:
<pre class="bash">
&#36; apt-get install libX11-dev libxft-dev libxpm-dev libxext-dev
&#36; apt-get install libx11-dev libxft-dev libxpm-dev libxext-dev
</pre>
<p></p>
Also make sure that you have installed all required packages listed under <a class="foswikiCurrentTopicLink" href="#ReqSw">Required Software</a> (e.g. fftw, gsl, etc).
@ -300,10 +325,10 @@ For the following it is assumed that <code>ROOT</code> shall be installed under
&#36; mkdir root&#95;build
&#36; cd root&#95;build
&#36; cmake ../ -Dgminimal&#61;ON -Dasimage&#61;ON -Dmathmore&#61;On -Dminuit2&#61;ON -Dxml&#61;ON -DCMAKE&#95;INSTALL&#95;PREFIX&#61;../root&#95;exec
&#36; # next will be the make. If running on a multicore CPU you can speed up tremendously by calling
&#36; # make with the option -j &#60;number&#62;, where &#60;number&#62; is the number of threads which you want to give,
&#36; # e.g. make -j8
&#36; make
&#36; # next will be the make called via cmake. If running on a multicore CPU you can speed up tremendously by calling
&#36; # it with the option -j &#60;number&#62;, where &#60;number&#62; is the number of threads which you want to give,
&#36; # e.g. cmake --build ./ --clean-first -- -j8
&#36; cmake --build ./ --clean-first
&#36; # as a last step of the ROOT build process we need to install it
&#36; make install
</pre>
@ -323,7 +348,7 @@ If an update of <code>ROOT</code> is needed, simple do the following:<pre class=
&#36; cd &#36;HOME/Apps/root
&#36; git pull
&#36; cd root&#95;build
&#36; make
&#36; cmake --build ./ --clean-first
</pre>
<p></p>
<span id="MusrFitInstallation"></span>
@ -346,23 +371,42 @@ or
<strong>Note 1:</strong> <code>musrfit</code> has moved from svn to git. In case you still have an <em>old</em> svn version of musrfit, it is advised to remove it first. For svn users: for a smooth transition from svn to git, please check the following link:
<a href="http://www.git-tower.com/blog/git-for-subversion-users-cheat-sheet/">Git for Subversion Users - A Cheat Sheet</a>.
<p></p>
<strong>Note 2:</strong> after cloning the <code>musrfit</code> repo you will automatically be on the root6 branch. If you want to get legacy ROOT 5.34.xx support, you will needed to switch branches first.
<strong>Note 2:</strong> after cloning the <code>musrfit</code> repo you will automatically be on the <strong>root6</strong> branch. If you want to get legacy ROOT 5.34.xx support, you will needed to switch branches first.
<p></p>
<strong>Update:</strong>
If a local repository clone is already present (it needs to be newer than Dec. 2016), one can update it using:
<pre class="bash">
&#36; cd &#36;HOME/Apps/musrfit
&#36; git pull
&#36; # the new version now needs to be compiled and installed
</pre>
Now, depending whether you follow the automake or cmake tool chain you do
<p></p>
<strong>automake toolchain</strong>:
<pre class="bash">
&#36; make uninstall
&#36; make clean
&#36; make
&#36; make install
</pre>
<p></p>
or
<p></p>
<strong>cmake toolchain</strong>:
<pre class="bash">
&#36; cd build
&#36; xargs rm &#60; install&#95;manifest.txt
&#36; cmake --build ./ --clean-first
&#36; make install
</pre>
<p></p>
<span class='foswikiRedFG'>As an alternative (if git is not available)</span>, the source code can also be downloaded from the following web-page: <a href="https://bitbucket.org/muonspin/musrfit/downloads">musrfit at bitbucket</a>.
<p></p>
<h3 id="A_3.2.1_61_61musrfit_61_61_build_with_61_61automake_61_61"> 3.2.1 <code><b>musrfit</b></code> build with <code><b>automake</b></code> </h3>
<p></p>
After the source-code extraction the <strong>autogen.sh</strong> script is called to prepare the build environment. If it has been executed successfully the <strong>configure</strong> script should be ready to collect all the information needed to create the Makefiles. <span class='foswikiRedFG'>If <code>musrfit</code> should support <code>NeXus</code> data files this has to be enabled by specifying the <strong>--enable-NeXus</strong> switch when calling <strong>configure</strong>.</span> For an overview of all available options just call <code>./configure --help</code>. Besides the standard options there are a few special options which should be mentioned here:
<p></p> <dl>
<dt> --prefix </dt><dd> Specify the installation prefix, e.g. /opt/root-system (<em>by default: /usr/local</em>)
</dd> <dt> --with-rootsys </dt><dd> Specify the top of the <code>ROOT</code> installation directory, e.g. /opt/root-system
<dt> --prefix </dt><dd> Specify the installation prefix, e.g. $ROOTSYS if already defined (<em>by default: /usr/local</em>)
</dd> <dt> --with-rootsys </dt><dd> Specify the top of the <code>ROOT</code> installation directory, e.g. $ROOTSYS if already defined
</dd> <dt> --with-fftw3 </dt><dd> Specify the prefix of the <code>FFTW3</code> installation. e.g. /usr/local or /usr
</dd> <dt> --with-gsl </dt><dd> Set the prefix of the <code>GSL</code> installation, e.g. /usr/local or /usr
</dd> <dt> --with-boostinc </dt><dd> Set the path to the header files of the <code>Boost</code> installation, e.g. /usr/local/include or /usr/include
@ -387,19 +431,50 @@ When the <strong>configure</strong> script has been called successfully everythi
&#36; make install
&#36; /sbin/ldconfig # (as superuser)
</pre>
<p></p>
<h3 id="A_3.2.2_61_61musrfit_61_61_build_with_61_61cmake_61_61"> 3.2.2 <code><b>musrfit</b></code> build with <code><b>cmake</b></code> </h3>
<p></p>
Currently the following configuration switches for <code>musrfit</code> are available:
<p></p> <dl>
<dt> -DCMAKE_INSTALL_PREFIX=&lt;prefix-path&gt; </dt><dd> Specify the installation prefix, i.e. the place where <code>musrfit</code> shall be installed, e.g. $ROOTSYS if already defined (<em>by default: /usr/local</em>)
</dd> <dt> -Dnexus=&lt;value&gt; </dt><dd> enable/disable the support of <code>NeXus</code> data files (<em>requires the <code>HDF4</code>, <code>HDF5</code> and <code>NeXus</code> libraries to be installed</em>). &lt;value&gt;=1 enables <code>NeXus</code>, &lt;value&gt;=0 disables <code>NeXus</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>NeXus</code> support is <strong>disabled</strong>.
</dd> <dt> -DASlibs=&lt;value&gt; </dt><dd> enable/disable the <code>ASlibs</code>. &lt;value&gt;=1 enables the <code>ASlibs</code>, &lt;value&gt;=0 disables the <code>ASlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>ASlibs</code> support is <strong>disabled</strong>. For details see <a href="index.html">Documentation of user libs</a>.
</dd> <dt> -DBMWlibs=&lt;value&gt; </dt><dd> enable/disable the <code>BMWlibs</code>. &lt;value&gt;=1 enables the <code>BMWlibs</code>, &lt;value&gt;=0 disables the <code>BMWlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>BMWlibs</code> support is <strong>disabled</strong>. For details see <a href="index.html">Documentation of user libs</a>.
</dd> <dt> -DBNMRlibs=&lt;value&gt; </dt><dd> enable/disable the <code>BNMRlibs</code>. &lt;value&gt;=1 enables the <code>BNMRlibs</code>, &lt;value&gt;=0 disables the <code>BNMRlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>BNMRlibs</code> support is <strong>disabled</strong>.
</dd> <dt> -Dqt_based_tools=&lt;value&gt; </dt><dd> Will try to get musredit, musrWiz, musrStep, and mupp installed, if <code>Qt</code> is found. By default this is <strong>enabled</strong>. Again &lt;value&gt;=0 means disabled, &lt;value&gt;=1 enabled.
</dd> <dt> -Dqt_version=&lt;value&gt; </dt><dd> Allows to specify which <code>Qt</code> version shall be tried. &lt;value&gt; can take the values: <code>AUTO</code>, 3, 4, 5. If the value is set to <code>AUTO</code>, this highest installed version is chosen, otherwise the specified version is used.
</dd> <dt> -Dtry_OpenMP=&lt;value&gt; </dt><dd> Will check if <code>OpenMP</code> support is possible, and if yes use it. The default is <strong>enabled</strong>
</dd></dl>
<p></p>
Normally it should not be necessary to make use of any of the options except for specifying the installation path with <strong>-DCMAKE_INSTALL_PREFIX</strong>. <code>musrfit</code> build with <code>cmake</code> takes the out-of-source approach. Therefore a typical configuration / make / install process including <code>NeXus</code> support would look like
<p></p>
<pre class="bash">
&#36; cd &#36;HOME/Apps/musrfit
&#36; mkdir build
&#36; cd build
&#36; cmake ../ -DCMAKE&#95;INSTALL&#95;PREFIX&#61;&#36;ROOTSYS -Dnexus&#61;1
# below it is assumed that multiple cores are present, hence the -j8 option
&#36; cmake --build ./ --clean-first -- -j8
&#36; make install
&#36; /sbin/ldconfig # (as superuser)
</pre>
<p></p>
<h3 id="A_3.2.3_61_61musrfit_61_61_last_step_of_the_installation"> 3.2.3 <code><b>musrfit</b></code> last step of the installation </h3>
<p></p>
In order to finish the installation of <code>musrfit</code> two more things should be done: <ul>
<li> Define the <strong>MUSRFITPATH</strong> environment variable containing the path to the <code>musrfit</code> executables and XML files. E.g. if the location of the example above is used append the following line to the <strong>~/.bashrc</strong> and <strong>~/.bash_profile</strong> (and then either restart the shell or call the same commands once more from the shell): <pre class="bash">
export MUSRFITPATH&#61;/opt/root-system/bin
export MUSRFITPATH&#61;&#36;ROOTSYS/bin
</pre>
</li> <li> Adjust the paths where <code>musrfit</code> will search for data files in the installed <strong>musrfit_startup.xml</strong>. For detailed information on this XML file refer to the <a href="MusrFit.html#MusrfitStartupXml">manual</a>.
</li></ul>
<p></p>
<span id="MusrGuiInstallLinux"></span>
<h2 id="A_3.3_61_61musredit_61_61"> 3.3 <code><b>musredit</b></code> </h2>
<span class='foswikiBlueFG'>In the latest version of <code>musrfit</code> the configure script tries to determine automatically if <code>Qt4.6</code> or higher is set up on the machine. In case this is found, the editor <code>musredit</code> is built already together with <code>musrfit</code>. <em>If not</em>, one can either try to call the configure script with the "--with-qt4" option or install this editor separately:</span>
<p></p>
<span class='foswikiBlueFG'>In the latest version of <code>musrfit</code> the configure script tries to determine automatically the highest available Qt version. In case this is found, the editor <code>musredit</code> is built already together with <code>musrfit</code>. <em>If not</em>, one can either try to call the configure script with the "--with-qt5" option or install this editor separately:</span>
<pre class="bash">
&#36; cd &#36;HOME/Apps/musrfit/src/musredit
&#36; # for some distributions you will need qmake-qt4 for the next command
&#36; cd &#36;HOME/Apps/musrfit/src/musredit&#95;qt5
&#36; # for some distributions you will need qmake-qt5 for the next command
&#36; qmake musredit.pro
</pre>
If everything went fine <code>musredit</code> can be compiled and installed:
@ -410,7 +485,7 @@ If everything went fine <code>musredit</code> can be compiled and installed:
In case one does not like the executable <strong>musredit</strong> to be copied to the default installation directory $ROOTSYS/bin the last "make install" can be skipped and the executable can be copied somewhere else instead. However, the <strong>musredit_startup.xml</strong> should go to the installation directory <strong>MUSRFITPATH</strong> of the <code>musrfit</code> executables.
Eventually, in the installed <strong>musredit_startup.xml</strong> the path specifications should be adjusted to match the local <code>musrfit</code> installation. For detailed information on this XML file refer to the <a href="MusrGui.html#MusrguiStartupXml">manual</a>.
<p></p>
<h2 id="A_3.4_61_61musrgui_61_61"> 3.4 <code><b>musrgui</b></code> </h2>
<h2 id="A_3.4_61_61musrgui_61_61_40obsolete_41"> 3.4 <code><b>musrgui</b></code> (obsolete) </h2>
If <code>Qt4.6</code> or higher is not available but <code>Qt3</code> is set up <code>musrgui</code> can be installed. For this please follow the instructions for the <a class="foswikiCurrentTopicLink" href="#MusrGuiInstallLinux">musredit installation</a> where simply every <code>musredit</code> occurrence has to be replaced by <code>musrgui</code>.<br>
If there are problems during the <code>qmake</code> step, e.g. "uic: File generated with too old version of Qt Designer", this most probably means the <code>Qt4</code> version of qmake is being used. In order to use the <code>Qt3</code> version it should be enough to specify the full path to its location when calling it. Within the most GNU/Linux distributions this location will be something like /usr/lib/qt-3.3/bin/qmake.
<p></p>
@ -550,6 +625,8 @@ If the repository had been checked out already before, one can update the local
<p></p>
<span class='foswikiRedFG'>As an alternative (if git is not available)</span>, the source code can also be downloaded from the following web-page: <a href="https://bitbucket.org/muonspin/musrfit/downloads">musrfit at bitbucket</a>.
<p></p>
<h3 id="A_4.2.1_61_61musrfit_61_61_build_with_61_61automake_61_61"> 4.2.1 <code><b>musrfit</b></code> build with <code><b>automake</b></code> </h3>
<p></p>
After the source-code extraction the <strong>autogen.sh</strong> script is called to prepare the build environment. If it has been executed successfully the <strong>configure</strong> script should be ready to collect all the information needed to create the Makefiles. <span class='foswikiRedFG'>If <code>musrfit</code> should support <code>NeXus</code> data files this has to be enabled by specifying the <nobr><b>--enable-static</b></nobr> <nobr><b>--enable-NeXus</b></nobr> switches when calling <strong>configure</strong>.</span> For an overview of all available options just call <code>./configure --help</code>. Besides the standard options there are a few special options which should be mentioned here:
<p></p> <dl>
<dt> --prefix </dt><dd> Specify the installation prefix, e.g. /opt/root-system (<em>by default: /usr/local</em>)
@ -577,7 +654,37 @@ When the <strong>configure</strong> script has been called successfully everythi
&#36; make
&#36; make install
</pre>
In order to finish the installation of <code>musrfit</code> the paths where <code>musrfit</code> searches for data files should be adjusted in the installed <strong>musrfit_startup.xml</strong> (/cygdrive/c/root/bin/musrfit_startup.xml or C:\root\bin\musrfit_startup.xml). The paths have to obey the <code>POSIX</code> naming convention. For detailed information on this XML file refer to the <a href="MusrFit.html#MusrfitStartupXml">manual</a>.
<p></p>
<h3 id="A_4.2.2_61_61musrfit_61_61_build_with_61_61cmake_61_61"> 4.2.2 <code><b>musrfit</b></code> build with <code><b>cmake</b></code> </h3>
<p></p>
Currently the following configuration switches for <code>musrfit</code> are available:
<p></p> <dl>
<dt> -DCMAKE_INSTALL_PREFIX=&lt;prefix-path&gt; </dt><dd> Specify the installation prefix, i.e. the place where <code>musrfit</code> shall be installed, e.g. $ROOTSYS if already defined (<em>by default: /usr/local</em>)
</dd> <dt> -Dnexus=&lt;value&gt; </dt><dd> enable/disable the support of <code>NeXus</code> data files (<em>requires the <code>HDF4</code>, <code>HDF5</code> and <code>NeXus</code> libraries to be installed</em>). &lt;value&gt;=1 enables <code>NeXus</code>, &lt;value&gt;=0 disables <code>NeXus</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>NeXus</code> support is <strong>disabled</strong>.
</dd> <dt> -DASlibs=&lt;value&gt; </dt><dd> enable/disable the <code>ASlibs</code>. &lt;value&gt;=1 enables the <code>ASlibs</code>, &lt;value&gt;=0 disables the <code>ASlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>ASlibs</code> support is <strong>disabled</strong>. For details see <a href="index.html">Documentation of user libs</a>.
</dd> <dt> -DBMWlibs=&lt;value&gt; </dt><dd> enable/disable the <code>BMWlibs</code>. &lt;value&gt;=1 enables the <code>BMWlibs</code>, &lt;value&gt;=0 disables the <code>BMWlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>BMWlibs</code> support is <strong>disabled</strong>. For details see <a href="index.html">Documentation of user libs</a>.
</dd> <dt> -DBNMRlibs=&lt;value&gt; </dt><dd> enable/disable the <code>BNMRlibs</code>. &lt;value&gt;=1 enables the <code>BNMRlibs</code>, &lt;value&gt;=0 disables the <code>BNMRlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>BNMRlibs</code> support is <strong>disabled</strong>.
</dd> <dt> -Dqt_based_tools=&lt;value&gt; </dt><dd> Will try to get musredit, musrWiz, musrStep, and mupp installed, if <code>Qt</code> is found. By default this is <strong>enabled</strong>. Again &lt;value&gt;=0 means disabled, &lt;value&gt;=1 enabled.
</dd> <dt> -Dqt_version=&lt;value&gt; </dt><dd> Allows to specify which <code>Qt</code> version shall be tried. &lt;value&gt; can take the values: <code>AUTO</code>, 3, 4, 5. If the value is set to <code>AUTO</code>, this highest installed version is chosen, otherwise the specified version is used.
</dd> <dt> -Dtry_OpenMP=&lt;value&gt; </dt><dd> Will check if <code>OpenMP</code> support is possible, and if yes use it. The default is <strong>enabled</strong>
</dd></dl>
<p></p>
Normally it should not be necessary to make use of any of the options except for specifying the installation path with <strong>-DCMAKE_INSTALL_PREFIX</strong>. <code>musrfit</code> build with <code>cmake</code> takes the out-of-source approach. Therefore a typical configuration / make / install process including <code>NeXus</code> support would look like
<p></p>
<pre class="bash">
&#36; cd &#36;HOME/Apps/musrfit
&#36; mkdir build
&#36; cd build
&#36; cmake ../ -DCMAKE&#95;INSTALL&#95;PREFIX&#61;&#36;ROOTSYS -Dnexus&#61;1
# below it is assumed that multiple cores are present, hence the -j8 option
&#36; cmake --build ./ --clean-first -- -j8
&#36; make install
&#36; /sbin/ldconfig # (as superuser)
</pre>
<p></p>
<h3 id="A_4.2.3_61_61musrfit_61_61_last_step_of_the_installation"> 4.2.3 <code><b>musrfit</b></code> last step of the installation </h3>
<p></p>
In order to finish the installation of <code>musrfit</code> the paths where <code>musrfit</code> searches for data files should be adjusted in the installed <strong>musrfit_startup.xml</strong> (/cygdrive/c/root/bin/musrfit_startup.xml or C:\root\bin\musrfit_startup.xml). The paths have to obey the POSIX naming convention. For detailed information on this XML file refer to the <a href="MusrFit.html#MusrfitStartupXml">manual</a>.
<p></p>
<span id="MusrEditInstallCygwin"></span>
<h2 id="A_4.3_61_61musredit_61_61"> 4.3 <code><b>musredit</b></code> </h2>
@ -625,20 +732,21 @@ In this case, try to do the following: Close all Cygwin programs (including the
</pre>
If this does not resolve the problem, try to change the compatibility settings of <strong>C:\cygwin\bin\sh.exe</strong> and <strong>C:\cygwin\bin\bash.exe</strong> so that they are executed with administrator privileges.
<p></p>
<h1 id="A_5_Mac_OS_X"> 5 Mac OS X </h1>
<h1 id="A_5_Mac_OS_X_47_macOS"> 5 Mac OS X / macOS </h1>
<p></p>
With Mac OS X the situation is up to some extent similar like on MS Windows but still different since Mac OS X is a UNIX system. The similarity is that also on OS X a helping framework&mdash;<i>either</i> <code><a href="http://www.macports.org/">MacPorts</a></code> <em>or</em> <code><a href="http://www.finkproject.org/">Fink</a></code>&mdash;which provides open-source software is employed to fulfill the basic software requirements of <code>musrfit</code>. <span class='foswikiRedFG'>In the following, both possibilities (using <code>MacPorts</code> or <code>Fink</code>) are described but it is emphasized here that it should be followed <em>only one of the possible routes</em>.
With Mac OS X / macOS the situation is up to some extent similar like on MS Windows but still different since Mac OS X is a UNIX system. The similarity is that also on OS X a helping framework&mdash;<i>either</i> <code><a href="http://www.macports.org/">MacPorts</a></code> <em>or</em> <code><a href="http://www.finkproject.org/">Fink</a></code>&mdash;which provides open-source software is employed to fulfill the basic software requirements of <code>musrfit</code>. <span class='foswikiRedFG'>In the following, both possibilities (using <code>MacPorts</code> or <code>Fink</code>) are described but it is emphasized here that it should be followed <em>only one of the possible routes</em> </span>.
<p></p>
WARNING: The instruction for <code>Fink</code> haven't been updated/tested for quite a while and likely are slightly outdated.
</span>
<p></p>
<p></p>
<p></p>
<h2 id="A_5.1_Requirements_40_61_61MacPorts_61_61_41"> 5.1 Requirements (<code><b>MacPorts</b></code>) </h2>
<h3 id="A_5.1.1_Everything_but_61_61ROOT_61_61_and_61_61NeXus_61_61"> 5.1.1 Everything but <code><b>ROOT</b></code> and <code><b>NeXus</b></code> </h3>
Before proceeding with the usage of the <code><a href="http://www.macports.org/">MacPorts</a></code> system first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed:
$ <a href="http://developer.apple.com/technology/tools.html">Xcode tools</a>: Useful developer tools including for instance the GNU compiler collection. Starting from XCode &gt;= 4.3 the command line tools need to be installed manually. <dl>
<dt> X11 </dt><dd> The X-window system (automatically installed on 10.5 Leopard and 10.6 Snow Leopard). For 10.7 and higher you also will need to install <code><a href="http://xquartz.macosforge.org/trac">XQuartz</a></code>
Before proceeding with the usage of the <code><a href="http://www.macports.org/">MacPorts</a></code> system first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed: <dl>
<dt> Xcode </dt><dd> Useful developer tools including for instance the GNU compiler collection. It can be installed via the Apple App store. Starting from XCode &gt;= 4.3 the command line tools need to be installed manually. The necessary command line tools can be installed via the following commands entered in the terminal<pre class="bash">
&#36; xcode-select --install
&#36; sudo xcodebuild -license
</pre>
</dd> <dt> X11 </dt><dd> The X-window system (automatically installed on 10.5 Leopard and 10.6 Snow Leopard). For 10.7 and higher you also will need to install <code><a href="http://xquartz.macosforge.org/trac">XQuartz</a></code>
</dd></dl>
<p></p>
After installing the Xcode tools go to the <a href="http://www.macports.org/install.php">MacPorts install page</a>, download the installer for your system and follow the installation instructions on the page. By default the <code>MacPorts</code> system will be installed in <strong>/opt/local</strong>.<br>
@ -663,9 +771,9 @@ file:///Users/username/dports
Then the <code>MacPorts</code> system should be set up and can be used to install additional software.<br>
The installation of the software mentioned <a class="foswikiCurrentTopicLink" href="#ReqSw">above</a> is then done in the terminal:
<pre class="bash">
&#36; sudo port -v install pkgconfig autoconf automake libtool fftw-3 fftw-3-single gsl boost libxml2 qt4-mac
&#36; sudo port -v install pkgconfig autoconf automake libtool cmake fftw-3 fftw-3-single gsl boost libxml2 qt5 qt5-qtsvg qt5-qtwebengine
</pre>
With <code><b>qt4-mac</b></code>, <code>musredit</code> will be installed. If it happens that you used <code>musrgui</code> in the past, please change over to <code>musredit</code> since there will be <strong>no</strong> further development for <code>musrgui</code> anymore!
With <code><b>qt5</b></code>, <code>musredit</code> will be installed. If it happens that you used <code>musrgui</code> in the past, please change over to <code>musredit</code> since there will be <strong>no</strong> further development for <code>musrgui</code> anymore!
<p></p>
<h3 id="A_5.1.2_Installation_of_61_61NeXus_61_61_requirements_40optional_41"> 5.1.2 Installation of <code><b>NeXus</b></code> requirements (optional) </h3>
<p></p>
@ -697,6 +805,17 @@ Unfortunately, the <code>minixml</code> and <code>NeXus</code> libraries have to
<h3 id="A_5.1.3_61_61ROOT_61_61"> 5.1.3 <code><b>ROOT</b></code> </h3>
ROOT 5.34/xx is supported as legacy version only! <strong>The default now will be ROOT 6.xx/yy!</strong>
<p></p>
<h4 id="A_5.1.3.1_61_61ROOT_61_61_installed_via_package_installer"> 5.1.3.1 <code><b>ROOT</b></code> installed via package installer </h4>
The lazy way to get <code>ROOT</code> installed is via package installer. If your macOS is directly supported by the <code>ROOT</code> people you can download the package installer from the <code>ROOT</code> <a href="https://root.cern.ch/downloading-root">download page</a>. Choose the latest <code>ROOT</code> release and download you macOS version dmg-file, e.g. for macOS 10.12 (Sierra) it is at the time of writting <code>root_v6.10.02.macosx64-10.12-clang81.dmg</code>. After the installation <code>ROOT</code> will be installed under <code>/Application</code> as owner <code>root</code>. In order to ease your life for the steps to follow and assuming you are the only guy working on your Mac, you could change the <code>owner</code> and <code>group</code> of the <code>ROOT</code> directory:
<p></p>
<pre class="bash">
&#36; cd /Applications
&#36; sudo chown -R &#60;username&#62; root&#95;v6.10.02
&#36; sudo chgrp -R staff root&#95;v6.10.02
&#36; sudo ln -s root&#95;v6.10.02 root
</pre>
<p></p>
<h4 id="A_5.1.3.2_61_61ROOT_61_61_installed_from_source"> 5.1.3.2 <code><b>ROOT</b></code> installed from source </h4>
The best way to get <code>ROOT</code> exactly the way needed for <code>musrfit</code> is to install it from source. Before describing it, please make sure that you have installed all required packages listed under <a class="foswikiCurrentTopicLink" href="#ReqSw">Requested Software</a> (e.g. fftw, gsl, etc).
<p></p>
For the following it is assumed that <code>ROOT</code> shall be installed under <code>$HOME/Applications</code>. If you want to install it somewhere else, just systematically replace the related terms of the following description. For the following list of commands the '$' will be given, the command prompt. Do <strong>not</strong> enter it! Also some comments will be added starting with a '#' which can be omitted. They are only there to explain what is going on.
@ -705,9 +824,9 @@ For the following it is assumed that <code>ROOT</code> shall be installed under
&#36; git clone http://root.cern.ch/git/root.git
&#36; cd root
&#36; git tag -l
&#36; # git tag -l will list all available tags. In the next command choose the tag v6-08-xx
&#36; # where xx is the highest listed number, e.g. v6-08-06
&#36; git checkout -b v6-08-06 v6-08-06
&#36; # git tag -l will list all available tags. In the next command choose the tag v6-10-xx
&#36; # where xx is the highest listed number, e.g. v6-10-02
&#36; git checkout -b v6-10-02 v6-10-02
&#36; # now ROOT is ready to be configured. Below you will find the minimal ROOT configuration needed.
&#36; # We will use the cmake out-of-source approach here.
&#36; mkdir root&#95;build
@ -723,11 +842,12 @@ For the following it is assumed that <code>ROOT</code> shall be installed under
<p></p>
For further details see <a href="https://root.cern.ch/building-root">Installing ROOT from Source</a>.
<p></p>
<h4 id="A_5.1.3.3_Setting_up_Environment_Variables_for_61_61ROOT_61_61_and_61_61musrfit_61_61"> 5.1.3.3 Setting up Environment Variables for <code><b>ROOT</b></code> and <code><b>musrfit</b></code> </h4>
Since Apple in its wisdom decided that programs started from a shell are treated differently than apps if it is coming to system variables, we need to work harder compared to a Linux system.
<p></p>
<strong>For Mac OS X &lt; 10.8:</strong>
<p></p>
In order to finalize the <code>ROOT</code> installation and to prepare already the installation of <code>musrfit</code> and <code>musrgui</code> / <code>musredit</code> this is a good time for setting necessary environment variables for the use in Mac OS X. Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation) into the file <strong>~/.MacOSX/environment.plist</strong> and <span class='foswikiRedFG'>re-login</span>:<br>
In order to finalize the <code>ROOT</code> installation and to prepare already the installation of <code>musrfit</code> and <code>musrgui</code> / <code>musredit</code> this is a good time for setting necessary environment variables for the use in Mac OS X. Here it assumed that you installed <code>ROOT</code> from source. If you downloaded the binary package, you will need to adopt the paths accordingly. Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation) into the file <strong>~/.MacOSX/environment.plist</strong> and <span class='foswikiRedFG'>re-login</span>:<br>
<pre class="html">
&#60;?xml version&#61;&#34;1.0&#34; encoding&#61;&#34;UTF-8&#34;?&#62;
&#60;!DOCTYPE plist PUBLIC &#34;-//Apple//DTD PLIST 1.0//EN&#34; &#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&#34;&#62;
@ -748,17 +868,30 @@ In order to finalize the <code>ROOT</code> installation and to prepare already t
One needs to add some system variables in <strong>~/.profile</strong>:
<pre class="bash">
export ROOTSYS&#61;&#36;HOME/Applications/root/root&#95;exec
launchctl setenv ROOTSYS &#36;ROOTSYS
export MUSRFITPATH&#61;&#36;ROOTSYS/bin
launchctl setenv MUSRFITPATH &#36;MUSRFITPATH
export PATH&#61;&#36;ROOTSYS/bin:&#36;QTDIR/bin:&#36;PATH
export LD&#95;LIBRARY&#95;PATH&#61;&#36;ROOTSYS/lib:&#36;LD&#95;LIBRARY&#95;PATH
launchctl setenv ROOTSYS &#36;ROOTSYS
launchctl setenv MUSRFITPATH &#36;MUSRFITPATH
launchctl setenv PATH &#36;PATH
launchctl setenv LD&#95;LIBRARY&#95;PATH &#36;LD&#95;LIBRARY&#95;PATH
</pre>
<p></p>
After this you will need to `execute' <code>.profile</code> before proceeding:
<p></p>
<pre class="bash">
&#36; source &#36;HOME/.profile
</pre>
<h2 id="A_5.2_Requirements_40_61_61Fink_61_61_41"> 5.2 Requirements (<code><b>Fink</b></code>) </h2>
<h3 id="A_5.2.1_Everything_but_61_61ROOT_61_61_and_61_61NeXus_61_61"> 5.2.1 Everything but <code><b>ROOT</b></code> and <code><b>NeXus</b></code> </h3>
Before proceeding with the usage of the <code><a href="http://www.finkproject.org/">Fink</a></code> system first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed:
$ <a href="http://developer.apple.com/technology/tools.html">Xcode tools</a>: Useful developer tools including for instance the GNU compiler collection <dl>
<dt> X11 </dt><dd> The X-window-system (automatically installed on 10.5 Leopard and 10.6 Snow Leopard)
<p></p> <dl>
<dt> <strong>Xcode</strong> </dt><dd> Useful developer tools including for instance the GNU compiler collection. It can be installed via the Apple App Store. Starting from XCode &gt;= 4.3 the command line tools need to be installed manually. The necessary command line tools can be installed via the following commands entered in the terminal:<pre class="bash">
&#36; xcode-select --install
&#36; sudo xcodebuild -license
</pre>
</dd> <dt> <strong>X11</strong> </dt><dd> The X-window-system (automatically installed on 10.5 Leopard and 10.6 Snow Leopard)
</dd></dl>
<p></p>
After installing the Xcode tools go to the <a href="http://www.finkproject.org/download/index.php?phpLang=en">Fink download page</a>, download the installer for your system and follow the installation instructions on the page.
@ -773,9 +906,11 @@ After applying the changes above to the configuration file, the <code>Fink</code
Then the <code>Fink</code> system should be set up and can be used to install additional software.<br>
The <code>Fink</code> installer package also contains a graphical user interface called <code>FinkCommander</code> and it is suggested to use that for installing the following packages (or packages with revisions close to the following)&mdash;it is necessary to compile a few packages from source since no binary packages are available, however, this is done automatically by the <code>FinkCommander</code> after you have chosen the software packages for installation:
<p></p>
<code><b>autoconf automake boost1.41.nopython boost1.41.nopython-shlibs fftw3 fftw3-shlibs gsl gsl-shlibs libtool2 libtool2-shlibs libxml2 libxml2-bin libxml2-shlibs pkgconfig qt3mac qt3mac-shlibs</b></code>
<pre class="bash">
autoconf automake cmake boost1.63-nopython boost1.63.nopython-shlibs fftw3 fftw3-shlibs gsl gsl-shlibs libtool2 libtool2-shlibs libxml2 libxml2-bin libxml2-shlibs pkgconfig qt5-mac-qtbase qt5-mac-qtbase-dev-tools qt5-mac-qtsvg qt5-mac-qtsvg-shlibs qt5-mac-qtwebengine qt5-mac-qtwebengine-shlibs qt5-mac-qtwebenginecore-shlibs qt5-mac-qtwebenginewidgets-shlibs
</pre>
<p></p>
Under OS X 10.6 Snow Leopard it will not be possible to install <code><b>qt3mac</b></code> since the system is by default a 64-bit system and the old <code><b>qt3-mac</b></code> depends on software which is only available for 32-bit systems. It is suggested to install <code><b>qt4mac</b></code> instead and use <code>musredit</code>.
Under OS X 10.6 Snow Leopard it will not be possible to install <code><b>qt3mac</b></code> since the system is by default a 64-bit system and the old <code><b>qt3-mac</b></code> depends on software which is only available for 32-bit systems. It is suggested to install <code><b>qt5-mac</b></code> instead and use <code>musredit</code>.
<p></p>
Also, due to some not fulfilled dependencies, it might not be possible to install FFTW3 through Fink. In this case (<span class='foswikiRedFG'>and ONLY in THIS case</span>) simply download the FFTW3 source code from <a href="http://www.fftw.org/download.html">its download page</a> and install it from a terminal using the following commands (for the FFTW version 3.x.y):
<pre class="bash">
@ -790,13 +925,15 @@ Since later on the <code>boost</code> header files should be used and in the sta
<pre class="bash">
&#36; ln -sf /sw/include/boost-x&#95;yy&#95;z/boost /sw/include/boost
</pre>
where <strong>x_yy_z</strong> has to be substituted by the correct version number, e.g. <strong>1_41_0</strong>.
where <strong>x_yy_z</strong> has to be substituted by the correct version number, e.g. <strong>1_63_0</strong>.
<p></p>
<h3 id="A_5.2.2_Installation_of_61_61NeXus_61_61_requirements_40optional_41"> 5.2.2 Installation of <code><b>NeXus</b></code> requirements (optional) </h3>
<p></p>
<span class='foswikiRedFG'>Only if</span> <code>musrfit</code> should support reading data files in the <code>NeXus</code> format the further <a class="foswikiCurrentTopicLink" href="#ReqSwNeXus">required</a> packages can be installed through <code>Fink</code>:
<span class='foswikiRedFG'>Only if</span> <code>musrfit</code> should support reading data files in the <code>NeXus</code> format the further <a class="foswikiCurrentTopicLink" href="#ReqSwNeXus">required</a> packages can be installed through <code>Fink</code> (check for the most recent versions):
<p></p>
<code><b>libjpeg hdf hdf5-18 hdf5-18-shlibs</b></code>
<pre class="bash">
libjpeg hdf hdf5-cpp11 hdf5-cpp11-shlibs
</pre>
<p></p>
Unfortunately, the <code>minixml</code> and <code>NeXus</code> libraries have to be compiled and installed directly from the source code. Given the respective version numbers of <strong>2.9</strong> and <strong>4.3.2</strong> (which are subject to change with time) this can be achieved for example by:
<pre class="bash">
@ -820,6 +957,21 @@ Unfortunately, the <code>minixml</code> and <code>NeXus</code> libraries have to
</pre>
<p></p>
<h3 id="A_5.2.3_61_61ROOT_61_61"> 5.2.3 <code><b>ROOT</b></code> </h3>
<p></p>
ROOT 5.34/xx is supported as legacy version only and will likely to be dropped in 2018. <strong>The default now is ROOT 6.xx/yy!</strong>
<p></p>
<h4 id="A_5.2.3.1_61_61ROOT_61_61_installed_via_package_installer"> 5.2.3.1 <code><b>ROOT</b></code> installed via package installer </h4>
<p></p>
The lazy way to get ROOT installed is via package installer. If your macOS is directly supported by the ROOT people you can download the package installer from the ROOT <a href="https://root.cern.ch/downloading-root">download page</a>. Choose the latest ROOT release and download you macOS version dmg-file, e.g. for macOS 10.12 (Sierra) it is at the time of writting root_v6.10.02.macosx64-10.12-clang81.dmg. After the installation ROOT will be installed under /Application as owner root. In order to ease your life for the steps to follow and assuming you are the only guy working on your Mac, you could change the owner and group of the ROOT directory:
<p></p>
<pre class="bash">
&#36; cd /Applications
&#36; sudo chown -R &#60;username&#62; root&#95;v6.10.02
&#36; sudo chgrp -R staff root&#95;v6.10.02
&#36; sudo ln -s root&#95;v6.10.02 root
</pre>
<h4 id="A_5.2.3.2_61_61ROOT_61_61_installed_from_source"> 5.2.3.2 <code><b>ROOT</b></code> installed from source </h4>
<p></p>
The best way to get <code>ROOT</code> exactly the way needed for <code>musrfit</code> is to install it from source. Before describing it, please make sure that you have installed all required packages listed under <a class="foswikiCurrentTopicLink" href="#ReqSw">Requested Software</a> (e.g. fftw, gsl, etc).
<p></p>
For the following it is assumed that <code>ROOT</code> shall be installed under <code>$HOME/Applications</code>. If you want to install it somewhere else, just systematically replace the related terms of the following description. For the following list of commands the '$' will be given, the command prompt. Do <strong>not</strong> enter it! Also some comments will be added starting with a '#' which can be omitted. They are only there to explain what is going on.
@ -828,9 +980,9 @@ For the following it is assumed that <code>ROOT</code> shall be installed under
&#36; git clone http://root.cern.ch/git/root.git
&#36; cd root
&#36; git tag -l
&#36; # git tag -l will list all available tags. In the next command choose the tag v6-08-06
&#36; # where xx is the highest listed number, e.g. v6-08-06
&#36; git checkout -b v6-08-06 v6-08-06
&#36; # git tag -l will list all available tags. In the next command choose the tag v6-10-02
&#36; # where xx is the highest listed number, e.g. v6-10-02
&#36; git checkout -b v6-10-06 v6-10-02
&#36; # now ROOT is ready to be configured. Below you will find the minimal ROOT configuration needed.
&#36; # the out-of-source approach will be followed
&#36; mkdir root&#95;build
@ -845,11 +997,13 @@ For the following it is assumed that <code>ROOT</code> shall be installed under
<p></p>
For further details see <a href="http://root.cern.ch/drupal/content/installing-root-source">Installing ROOT from Source</a>.
<p></p>
<h4 id="A_5.2.3.3_Setting_up_Environment_Variables_for_61_61ROOT_61_61_and_61_61musrfit_61_61"> 5.2.3.3 Setting up Environment Variables for <code><b>ROOT</b></code> and <code><b>musrfit</b></code> </h4>
<p></p>
Since Apple in its wisdom decided that programs started from a shell are treated differently than apps if it is coming to system variables, we need to work harder compared to a Linux system.
<p></p>
<strong>For Mac OS X &lt; 10.8:</strong>
<p></p>
In order to finalize the <code>ROOT</code> installation and to prepare already the installation of <code>musrfit</code> and <code>musrgui</code> / <code>musredit</code> this is a good time for setting necessary environment variables for the use in Mac OS X. Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation) into the file <strong>~/.MacOSX/environment.plist</strong> and <span class='foswikiRedFG'>re-login</span>:<br>
In order to finalize the <code>ROOT</code> installation and to prepare already the installation of <code>musrfit</code> and <code>musrgui</code> / <code>musredit</code> this is a good time for setting necessary environment variables for the use in Mac OS X. Here it assumed that you installed ROOT from source. If you downloaded the binary package, you will need to adopt the paths accordingly. Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation) into the file <strong>~/.MacOSX/environment.plist</strong> and <span class='foswikiRedFG'>re-login</span>:<br>
<pre class="html">
&#60;?xml version&#61;&#34;1.0&#34; encoding&#61;&#34;UTF-8&#34;?&#62;
&#60;!DOCTYPE plist PUBLIC &#34;-//Apple//DTD PLIST 1.0//EN&#34; &#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&#34;&#62;
@ -858,7 +1012,7 @@ In order to finalize the <code>ROOT</code> installation and to prepare already t
&#60;key&#62;MUSRFITPATH&#60;/key&#62;
&#60;string&#62;&#36;HOME/Applications/root/root&#95;exec/bin&#60;/string&#62; (where to find the musrfit executables)
&#60;key&#62;QTDIR&#60;/key&#62;
&#60;string&#62;/opt/local/lib/qt3mac&#60;/string&#62; (where to find Qt3 (for musrgui) or Qt4 (for musredit))
&#60;string&#62;/sw/lib/qt5-mac&#60;/string&#62; (where to find Qt5)
&#60;key&#62;ROOTSYS&#60;/key&#62;
&#60;string&#62;&#36;HOME/Applications/root/root&#95;exec&#60;/string&#62; (where to find the ROOT system)
&#60;/dict&#62;
@ -870,10 +1024,24 @@ In order to finalize the <code>ROOT</code> installation and to prepare already t
One needs to add some system variables in <strong>~/.profile</strong>:
<pre class="bash">
export ROOTSYS&#61;&#36;HOME/Applications/root/root&#95;exec
launchctl setenv ROOTSYS &#36;ROOTSYS
export MUSRFITPATH&#61;&#36;ROOTSYS/bin
launchctl setenv MUSRFITPATH &#36;MUSRFITPATH
export QTDIR&#61;/sw/lib/qt5-mac
export PATH&#61;&#36;ROOTSYS/bin:&#36;QTDIR/bin:&#36;PATH
export PKG&#95;CONFIG&#95;PATH&#61;&#36;QTDIR/lib/pkgconfig:&#36;PKG&#95;CONFIG&#95;PATH
export LD&#95;LIBRARY&#95;PATH&#61;&#36;ROOTSYS/lib:&#36;QTDIR/lib:&#36;LD&#95;LIBRARAY&#95;PATH
launchctl setenv ROOTSYS &#36;ROOTSYS
launchctl setenv MUSRFITPATH &#36;MUSRFITPATH
launchctl setenv QTDIR &#36;QTDIR
launchctl setenv PKG&#95;CONFIG&#95;PATH &#36;PKG&#95;CONFIG&#95;PATH
launchctl setenv PATH &#36;PATH
launchctl setenv LD&#95;LIBRARY&#95;PATH &#36;LD&#95;LIBRARY&#95;PATH
</pre>
<p></p>
After this you will need to `execute' <code>.profile</code> before proceeding:
<p></p>
<pre class="bash">
&#36; source &#36;HOME/.profile
</pre>
<h2 id="A_5.3_61_61musrfit_61_61"> 5.3 <code><b>musrfit</b></code> </h2>
First, the most recent source code should be downloaded. First, the most recent source code should be downloaded. The preferred way of doing so is to clone the musrfit repository via git. Assuming the code should be located in ~/Applications/musrfit this is achieved most easily calling from the terminal
@ -904,6 +1072,8 @@ If a local repository clone is already present, one can update it using:
<p></p>
<span class='foswikiRedFG'>As an alternative (if git is not available)</span>, the source code can also be downloaded from the following web-page: <a href="https://bitbucket.org/muonspin/musrfit/downloads">musrfit at bitbucket</a>.
<p></p>
<h3 id="A_5.3.1_61_61musrfit_61_61_build_with_61_61automake_61_61"> 5.3.1 <code><b>musrfit</b></code> build with <code><b>automake</b></code> </h3>
<p></p>
After the source-code extraction the <strong>autogen.sh</strong> script is called to prepare the build environment. If it has been executed successfully the <strong>configure</strong> script should be ready to collect all the information needed to create the Makefiles. <span class='foswikiRedFG'>If <code>musrfit</code> should support <code>NeXus</code> data files this has to be enabled by specifying the <strong>--enable-NeXus</strong> switch when calling <strong>configure</strong>.</span> For an overview of all available options just call <code>./configure --help</code>. Besides the standard options there are a few special options which should be mentioned here:
<p></p> <dl>
<dt> --prefix </dt><dd> Specify the installation prefix, e.g. /opt/root-system (<em>by default: /usr/local</em>)
@ -933,11 +1103,47 @@ When the <strong>configure</strong> script has been called successfully everythi
</pre>
In order to finish the installation of <code>musrfit</code> the paths where <code>musrfit</code> searches for data files should be adjusted in the installed <strong>musrfit_startup.xml</strong> ($ROOTSYS/bin/musrfit_startup.xml). For detailed information on this XML file refer to the <a href="MusrFit.html#MusrfitStartupXml">manual</a>.
<p></p>
<h3 id="A_5.3.2_61_61musrfit_61_61_build_with_61_61cmake_61_61"> 5.3.2 <code><b>musrfit</b></code> build with <code><b>cmake</b></code> </h3>
<p></p>
Currently the following configuration switches for <code>musrfit</code> are available:
<p></p> <dl>
<dt> -DCMAKE_INSTALL_PREFIX=&lt;prefix-path&gt; </dt><dd> Specify the installation prefix, i.e. the place where <code>musrfit</code> shall be installed, e.g. $ROOTSYS if already defined (<em>by default: /usr/local</em>)
</dd> <dt> -Dnexus=&lt;value&gt; </dt><dd> enable/disable the support of <code>NeXus</code> data files (<em>requires the <code>HDF4</code>, <code>HDF5</code> and <code>NeXus</code> libraries to be installed</em>). &lt;value&gt;=1 enables <code>NeXus</code>, &lt;value&gt;=0 disables <code>NeXus</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>NeXus</code> support is <strong>disabled</strong>.
</dd> <dt> -DASlibs=&lt;value&gt; </dt><dd> enable/disable the <code>ASlibs</code>. &lt;value&gt;=1 enables the <code>ASlibs</code>, &lt;value&gt;=0 disables the <code>ASlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>ASlibs</code> support is <strong>disabled</strong>. For details see <a href="index.html">Documentation of user libs</a>.
</dd> <dt> -DBMWlibs=&lt;value&gt; </dt><dd> enable/disable the <code>BMWlibs</code>. &lt;value&gt;=1 enables the <code>BMWlibs</code>, &lt;value&gt;=0 disables the <code>BMWlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>BMWlibs</code> support is <strong>disabled</strong>. For details see <a href="index.html">Documentation of user libs</a>.
</dd> <dt> -DBNMRlibs=&lt;value&gt; </dt><dd> enable/disable the <code>BNMRlibs</code>. &lt;value&gt;=1 enables the <code>BNMRlibs</code>, &lt;value&gt;=0 disables the <code>BNMRlibs</code>. The default setting, i.e. the switch is <strong>not</strong> provided is <code>BNMRlibs</code> support is <strong>disabled</strong>.
</dd> <dt> -Dqt_based_tools=&lt;value&gt; </dt><dd> Will try to get musredit, musrWiz, musrStep, and mupp installed, if <code>Qt</code> is found. By default this is <strong>enabled</strong>. Again &lt;value&gt;=0 means disabled, &lt;value&gt;=1 enabled.
</dd> <dt> -Dqt_version=&lt;value&gt; </dt><dd> Allows to specify which <code>Qt</code> version shall be tried. &lt;value&gt; can take the values: <code>AUTO</code>, 3, 4, 5. If the value is set to <code>AUTO</code>, this highest installed version is chosen, otherwise the specified version is used.
</dd> <dt> -Dtry_OpenMP=&lt;value&gt; </dt><dd> Will check if <code>OpenMP</code> support is possible, and if yes use it. The default is <strong>enabled</strong>
</dd></dl>
<p></p>
Normally it should not be necessary to make use of any of the options except for specifying the installation path with <strong>-DCMAKE_INSTALL_PREFIX</strong>. <code>musrfit</code> build with <code>cmake</code> takes the out-of-source approach. Therefore a typical configuration / make / install process including <code>NeXus</code> support would look like
<p></p>
<pre class="bash">
&#36; cd &#36;HOME/Apps/musrfit
&#36; mkdir build
&#36; cd build
&#36; cmake ../ -DCMAKE&#95;INSTALL&#95;PREFIX&#61;&#36;ROOTSYS -Dnexus&#61;1
# below it is assumed that multiple cores are present, hence the -j8 option
&#36; cmake --build ./ --clean-first -- -j8
&#36; make install
&#36; /sbin/ldconfig # (as superuser)
</pre>
<p></p>
<h3 id="A_5.3.3_61_61musrfit_61_61_last_step_of_the_installation"> 5.3.3 <code><b>musrfit</b></code> last step of the installation </h3>
<p></p>
In order to finish the installation of <code>musrfit</code> two more things should be done: <ul>
<li> Define the <strong>MUSRFITPATH</strong> environment variable containing the path to the <code>musrfit</code> executables and XML files. E.g. if the location of the example above is used append the following line to the <strong>~/.bashrc</strong> and <strong>~/.bash_profile</strong> (and then either restart the shell or call the same commands once more from the shell): <pre class="bash">
export MUSRFITPATH&#61;&#36;ROOTSYS/bin
</pre>
</li> <li> Adjust the paths where <code>musrfit</code> will search for data files in the installed <strong>musrfit_startup.xml</strong>. For detailed information on this XML file refer to the <a href="MusrFit.html#MusrfitStartupXml">manual</a>.
</li></ul>
<p></p>
<span id="MusrGuiInstall"></span>
<h2 id="A_5.4_61_61musredit_61_61"> 5.4 <code><b>musredit</b></code> </h2>
<span class='foswikiBlueFG'>In the latest version of <code>musrfit</code> the configure script tries to determine automatically if <code>Qt4.5</code> or higher is set up on the machine. In case this is found, the editor <code>musredit</code> is built already together with <code>musrfit</code>. <em>If not</em>, one can either try to call the configure script with the "--with-qt4" option (<strong>MacPort</strong>: for Mac OS X &lt; 10.11 this is likley <strong>/opt/local/libexec/qt4</strong>, for Mac OS X &gt;= 10.11 this is likely <strong>/usr/local/libexec/qt4</strong>) or install this editor separately:</span>
<span class='foswikiBlueFG'>In the latest version of <code>musrfit</code> the configure script tries to determine automatically highest available Qt version. In case this is found, the editor <code>musredit</code> is built together with <code>musrfit</code>. <em>If not</em>, one can either try to call the configure script with the "--with-qt5" option or install this editor separately:</span>
<pre class="bash">
&#36; cd ~/Apps/musrfit/src/musredit
&#36; cd ~/Applications/musrfit/src/musredit&#95;qt5
&#36; qmake musredit.pro
</pre>
If everything went fine <code>musredit</code> can be compiled and installed:
@ -950,7 +1156,7 @@ The last command copies <strong>musredit.app</strong> to the standard program di
<h2 id="A_5.5_61_61musrgui_61_61_40obsolete_41"> 5.5 <code><b>musrgui</b></code> (obsolete) </h2>
If <code>Qt3</code> is set up the installation of the <code>musrfit</code> editor can be done as follows from within the shell:
<pre class="bash">
&#36; cd ~/Apps/musrfit/src/musrgui
&#36; cd ~/Applications/musrfit/src/musrgui
&#36; qmake musrgui.pro
&#36; make
&#36; make install
@ -990,7 +1196,7 @@ If <code>musrgui</code> has been installed, just open one of the <strong>test-&#
<p></p>
</div>
<div class="patternInfo">This topic: MUSR<span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span><a class="foswikiCurrentWebHomeLink" href="WebHome.html">WebHome</a> &gt; <a href="MusrFit.html">MusrFit</a><span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span>MusrFitSetup <br />
Topic revision: <span class='patternRevInfo'>27 Mar 2017, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
Topic revision: <span class='patternRevInfo'>08 Jun 2018, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
</div>
</div>
</div>
@ -1008,5 +1214,5 @@ Topic revision: <span class='patternRevInfo'>27 Mar 2017, <a href="https://intr
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitSetup?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:39 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitSetup?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
</html>

View File

@ -0,0 +1,390 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitSetupDKS?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
<title> MUSR :: MusrFitSetupDKS</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.5, user-scalable=yes" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrFitSetupDKS?t=1528465296" type="application/x-wiki" title="edit MusrFitSetupDKS" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@import url('../pub/System/PatternSkinTheme2009/colors.css');
</style>
<link rel='stylesheet' href='../pub/System/PatternSkinTheme2009/column_left.css' media='all' type='text/css' />
<link rel='stylesheet' href='../pub/System/PatternSkinTheme2009/variant_twiki.css' media='all' type='text/css' /><style type="text/css" media="all">
/* Styles that are set using variables */
.patternBookView .foswikiTopRow,
.patternWebIndicator,
.patternWebIndicator a {
background-color:#D0D0D0;
}
#patternTopBarContents { background-image:url(../pub/System/PatternSkin/header5.gif); background-repeat:repeat-x;}
#patternTopBarContents { background-color:#ffffff;}
.patternBookView {
border-color:#D0D0D0;
}
.patternPreviewPage #patternMain {
/* uncomment to set the preview image */
/*background-image:url("/pub/System/PreviewBackground/preview2bg.gif");*/
}
</style>
<style type="text/css" media="all">
@import url("../pub/System/PsiSkin/psicolors.css");
@import url("../pub/System/PsiSkin/psistyle.css");
.foswikiTopic {overflow: hidden;}
</style>
<link rel='stylesheet' href='../pub/System/PatternSkin/print.css' media='all' type='text/css' />
<!--[if IE 7 ]><style type="text/css" media="screen">
.foswikiAttachments,
.foswikiForm,
.foswikiHelp,
.foswikiPreviewArea,
.patternPreviewPage .foswikiForm,
.patternSigLine,
.patternToolBar,
.patternTop,
.patternTopicAction,
#patternSideBarContents .patternLeftBarPersonal,
#patternSideBarContents h2,
#patternSideBarContents li,
#patternTopBarButtons ul {
height:1%;
}
#patternSideBarContents .patternLeftBarPersonal {
width:100%;
}
.foswikiFormStep {
height:100%;
}
#foswikiLogin {
margin-left: 25%;
margin-right: 25%;
}
#foswikiLogin .foswikiFormSteps {
width:auto;
}
#foswikiLogin input[type="text"],
#foswikiLogin input[type="password"] {
width: auto;
}
.patternShadow {
border:10px solid #fff;
margin-top:10px;
margin-bottom:10px;
border:2px solid #ccc;
}
</style><![endif]-->
<!--[if lte IE 9]>
<![endif]-->
<!--[if gt IE 9]><!-->
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::CHILI--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
<span id="PageTop"></span><div class="foswikiPage"><div id="patternScreen">
<div id="patternPageShadow">
<div id="patternPage">
<div id="patternOuter" class="clear">
<div id="patternFloatWrap">
<div id="patternMain">
<div id="patternMainContents">
<div class="patternContent"><div class="foswikiTopic"> <h1 id="Setting_up_61musrfit_61_47_61DKS_61:_high_speed_fitting_with_GPU_39s"> Setting up <code>musrfit</code> / <code>DKS</code>: high speed fitting with GPU's </h1>
<p></p>
<div class="foswikiToc" id="foswikiTOC"> <ul>
<li> <a href="MusrFitSetupDKS.html#Setting_up_61musrfit_61_47_61DKS_61:_high_speed_fitting_with_GPU_39s"> Setting up musrfit / DKS: high speed fitting with GPU's </a>
</li> <li> <a href="MusrFitSetupDKS.html#A_1_Setting_up_61_61musrfit_47DKS_61_61_for_a_Tesla_K40c_40NVIDIA_41"> 1 Setting up musrfit/DKS for a Tesla K40c (NVIDIA) </a> <ul>
<li> <a href="MusrFitSetupDKS.html#A_1.1_Driver_Installation_for_the_Tesla_K40c"> 1.1 Driver Installation for the Tesla K40c </a>
</li> <li> <a href="MusrFitSetupDKS.html#A_1.2_Installation_of_CUDA"> 1.2 Installation of CUDA </a>
</li> <li> <a href="MusrFitSetupDKS.html#A_1.3_Installation_of_DKS"> 1.3 Installation of DKS </a>
</li> <li> <a href="MusrFitSetupDKS.html#A_1.4_Installation_of_61musrfit_61_for_DKS"> 1.4 Installation of musrfit for DKS </a> <ul>
<li> <a href="MusrFitSetupDKS.html#A_1.4.1_Install_via_61_61automake_61_61"> 1.4.1 Install via automake </a>
</li> <li> <a href="MusrFitSetupDKS.html#A_1.4.2_Install_via_61_61cmake_61_61"> 1.4.2 Install via cmake </a>
</li></ul>
</li></ul>
</li> <li> <a href="MusrFitSetupDKS.html#A_2_Setting_up_61_61musrfit_47DKS_61_61_for_a_AMD_Graphic_Card_40Radeon_R9_390X_41"> 2 Setting up musrfit/DKS for a AMD Graphic Card (Radeon R9 390X) </a> <ul>
<li> <a href="MusrFitSetupDKS.html#A_2.1_Driver_Installation_for_an_AMD_Graphic_Card_44_e.g._Radeon_R9_390X"> 2.1 Driver Installation for an AMD Graphic Card, e.g. Radeon R9 390X </a>
</li> <li> <a href="MusrFitSetupDKS.html#A_2.2_AMD_APP_Software_Development_Kit_40SDK_41_to_enable_OpenCL_support"> 2.2 AMD APP Software Development Kit (SDK) to enable OpenCL support </a>
</li> <li> <a href="MusrFitSetupDKS.html#A_2.3_Installation_of_DKS_and_61musrfit_61"> 2.3 Installation of DKS and musrfit </a>
</li></ul>
</li> <li> <a href="MusrFitSetupDKS.html#A_3_Setting_up_61_61musrfit_47DKS_61_61_for_macOS_for_OpenCL_support"> 3 Setting up musrfit/DKS for macOS for OpenCL support </a>
</li></ul>
</div>
<p></p>
In the years 2016/2017 we explored ways to speed up current fitting frameworks, especially <code>musrfit</code>. This allows now to analyze histogram sets of high field spectrometers like HAL-9500 at PSI without the error-prone RRF fitting (see U. Locans and A. Suter, " <code>musrfit</code> - Real Time Parameter Fitting Using GPUs", accepted for the proceedings of the muSR2017 conference in Sapporo, and the Memo from A. Suter, "Rotating Reference Frame Fits", in the <code>musrfit</code> source code). At the same time it can help to speed-up elaborate global fits tremendously, and dealing properly with muonium. It also allows Apple Mac users to speed up their fitting code on the CPU. Currently it is not straight forward to get <code>musrfit</code> multi-threaded under macOS since Apple doesn't be default support OpenMP. DKS enables <code>musrfit</code> to utilize OpenCL instead which is present on macOS by default.
<p></p>
<strong>Warning</strong>: before you run into the shop to buy a gamer graphic card or a Tesla card, make sure that you have an appropriate server with a sufficiently strong power supply!
<p></p>
<strong>However, the current <code>musrfit/DKS</code> version doesn't yet support all theory functions on the GPU.</strong> In case the theory function is not yet available for the GPU, <code>musrfit</code> will fall back to the CPU implementation.
<p></p>
Conceptually the setup of <code>musrfit/DKS</code> is as following: <ol>
<li> install the latest hardware driver for your graphic card.
</li> <li> install the GPU SDK which enables number crunching (CUDA for NVIDIA, OpenCL for AMD)
</li> <li> install DKS
</li> <li> install the musrfit version which is DKS ready
</li></ol>
<p></p>
In the following the description for the installation of <code>musrfit/DKS</code> for the following systems will be discussed in some more detail: <ul>
<li> NVIDIA Tesla K40c
</li> <li> AMD Graphic Card (Radeon R9 390X)
</li> <li> macOS in order to get OpenCL support
</li></ul>
<p></p>
The <strong>usage</strong> of <code>musrfit</code> with GPU acceleration and OpenCL support is described in the <a href="MusrFit.html">'User manual of the &#956;SR data analysis software <code>musrfit</code> '</a>. The additional <code>musrfit</code> / DKS commands are labelled in <span class='foswikiMaroonFG'> <strong>MAROON</strong> </span>.
<p></p>
<h1 id="A_1_Setting_up_61_61musrfit_47DKS_61_61_for_a_Tesla_K40c_40NVIDIA_41"> 1 Setting up <code><b>musrfit/DKS</b></code> for a Tesla K40c (NVIDIA) </h1>
<p></p>
It is assumed that the Tesla K40c is already physically installed on your system. For now I only will discuss to set it up for a Linux based system. In order to check that your operating systems see the card, enter the following command in the terminal:
<p></p>
<pre class="bash">
&#36; lspci &#124; grep NVIDIA
</pre>
<p></p>
On the response you should find something like
<p></p>
<pre class="bash">
05:00.0 3D controller: NVIDIA Corporation GK110BGL &#91;Tesla K40c&#93; (rev a1)
</pre>
<p></p>
which means that the OS physically recognises your card.
<p></p>
<h2 id="A_1.1_Driver_Installation_for_the_Tesla_K40c"> 1.1 Driver Installation for the Tesla K40c </h2>
<p></p>
Next, you will need to download and install the driver for your card. Select the proper operating system, card, etc. from the <a href="http://www.nvidia.com/Download/index.aspx?lang=en-us">NVIDIA download center</a>. At PSI we are running currently Red Hat Enterprise Linux 7.x (RHEL) for which we will get a rpm (something like <code>nvidia-diag-driver-local-repo-rhel7-375.66-1.x86_64.rpm</code>). Install it and make sure there is no conflict with the nouveau driver of the system.
<p></p>
<h2 id="A_1.2_Installation_of_CUDA"> 1.2 Installation of CUDA </h2>
<p></p>
Download the <a href="https://developer.nvidia.com/cuda-downloads">CUDA SDK</a> form NVIDIA for your system. Again, for the RHEL 7.x this is an rpm. After the installation of the rpm you should reboot your machine. Afterwards you are ready for the installation of DKS.
<p></p>
<span id="DksInstall"></span>
<h2 id="A_1.3_Installation_of_DKS"> 1.3 Installation of DKS </h2>
<p></p>
For the following list of commands the '$' will be given as the command prompt. Do not enter it! Also some comments will be added starting with a '#' which can be omitted. They are only there to explain what is going on.
<code>DKS</code> stands for Dynamical Kernel Scheduler and provides a thin interface allowing host applications to incorporate GPU's and other hardware accelerators.
<p></p>
Details can be found in the papers listed <a href="CiteMusrFit.html">here</a>, or on the <a href="https://gitlab.psi.ch/uldis_l/DKS/wikis/home">DKS wiki page</a>.
<p></p>
In brief the installation should be something like this:<pre class="bash">
# go to whatever directory you would like to clone/install DKS
# For macOS DKS will likely to got to &#36;HOME/Applications to be consistent with the musrfit docu for macOS
&#36; cd &#36;HOME/Apps
&#36; git clone https://gitlab.psi.ch/uldis&#95;l/DKS.git
&#36; cd DKS
&#36; mkdir build
&#36; cd build
&#36; cmake ../ -DENABLE&#95;MUSR&#61;1 -DCMAKE&#95;INSTALL&#95;PREFIX&#61;../exec
&#36; cmake --build ./ --clean-first
&#36; make install
</pre>
<p></p>
Since <code>DKS</code> is installed in a non-standard path, a couple of additional small steps are required. This will be different for Linux compared to macOS.
<p></p>
For <strong>Linux</strong>:
<p></p>
add the <code>DKS</code> library path to <code>/etc/ld.so.conf.d/musrfit-x86_64.conf</code> and execute as super user
<p></p>
<pre class="bash">
&#36; /sbin/ldconfig
</pre>
<p></p>
For <strong>macOS</strong>:
<p></p>
add the <code>DKS</code> path to <code>$HOME/.profile</code>:
<p></p>
<pre class="bash">
export DKS&#61;&#36;HOME/Applications/DKS/exec
export LD&#95;LIBRARY&#95;PATH&#61;&#36;DKS/lib:&#36;LD&#95;LIBRARY&#95;PATH
launchctl setenv DKS &#36;DKS
launchctl setenv LD&#95;LIBRARY&#95;PATH &#36;LD&#95;LIBRARY&#95;PATH
</pre>
<p></p>
<h2 id="A_1.4_Installation_of_61musrfit_61_for_DKS"> 1.4 Installation of <code>musrfit</code> for DKS </h2>
<p></p>
Most of the installation steps are the same as described for <a href="MusrFitSetup.html"><code>musrfit</code></a> without GPU support.
Here only the differences are explained. First checkout <code>musrfit</code>, then you will need to switch the working branch which is done by<pre class="bash">
&#36; cd &#36;HOME/Apps/musrfit
&#36; git checkout dks6
</pre>
<p></p>
<h3 id="A_1.4.1_Install_via_61_61automake_61_61"> 1.4.1 Install via <code><b>automake</b></code> </h3>
<p></p>
The configure script for <code>musrfit</code> has now a couple of more tags/options, which are: <dl>
<dt> <code><b>--enable-dks</b></code> </dt><dd> by default this is set to <code><b>no</b></code>, hence if you want to have GPU support you need to enable it.
</dd> <dt> <code><b>--with-cuda</b></code> </dt><dd> with this tag you tell the configure script where it can find CUDA
</dd> <dt> <code><b>--with-opencl</b></code> </dt><dd> with this tag you tell the configure script where it can find OpenCL
</dd> <dt> <code><b>--with-dks</b></code> </dt><dd> with this tag you tell the configure script where it can find <code>DKS</code>
</dd></dl>
<p></p>
For a typical setup on a RHEL system it could look like this
<pre class="bash">
&#36; ./configure --enable-ASlibs --enable-BMWlibs --enable-NeXus --with-dks&#61;&#36;HOME/Apps/DKS/exec --enable-dks --prefix&#61;&#36;ROOTSYS
</pre>
whereas for macOS it would typically look like this
<pre class="bash">
&#36; ./configure --enable-ASlibs --enable-BMWlibs --enable-NeXus --with-dks&#61;&#36;HOME/Applications/DKS/exec --enable-dks --prefix&#61;&#36;ROOTSYS
</pre>
After
<pre class="bash">
&#36; make
&#36; make install
</pre>
and updating the shared library lookup table (only needed for Linux)
<pre class="bash">
/sbin/ldconfig # as superuser / root
</pre>
you are done with the setup.
<p></p>
<h3 id="A_1.4.2_Install_via_61_61cmake_61_61"> 1.4.2 Install via <code><b>cmake</b></code> </h3>
<p></p>
There is on more configuration switch
<p></p> <dl>
<dt> <code>-Ddks=&lt;value&gt; </dt><dd> it allows to enable/disable =DKS</code> support. The default is &lt;value&gt;=1, i.e. <strong>enabled</strong>. To disable use &lt;value&gt;=0.
</dd></dl>
<p></p>
For a typical setup on a RHEL system it could look like this
<pre class="bash">
&#36; cmake ../ -DCMAKE&#95;INSTALL&#95;PREFIX&#61;&#36;ROOTSYS -DASlibs&#61;1 -DBMWlibs&#61;1 -Dnexus&#61;1
</pre>
whereas for macOS it would typically look like this
<pre class="bash">
&#36; cmake ../ -DCMAKE&#95;INSTALL&#95;PREFIX&#61;&#36;ROOTSYS -DASlibs&#61;1 -DBMWlibs&#61;1 -Dnexus&#61;1
</pre>
<p></p>
After
<pre class="bash">
&#36; cmake --build ./ --clean-first
&#36; make install
</pre>
and updating the shared library lookup table (only needed for Linux)
<pre class="bash">
/sbin/ldconfig # as superuser / root
</pre>
you are done with the setup.
<p></p>
<h1 id="A_2_Setting_up_61_61musrfit_47DKS_61_61_for_a_AMD_Graphic_Card_40Radeon_R9_390X_41"> 2 Setting up <code><b>musrfit/DKS</b></code> for a AMD Graphic Card (Radeon R9 390X) </h1>
<p></p>
<h2 id="A_2.1_Driver_Installation_for_an_AMD_Graphic_Card_44_e.g._Radeon_R9_390X"> 2.1 Driver Installation for an AMD Graphic Card, e.g. Radeon R9 390X </h2>
<p></p>
This will depend slightly on the AMD Card and operating system. Here I will summaries how it was done on a RHEL (Linux) system using a Radeon R9 390X.
<p></p>
It is assumed that the Radeon R9 390X is already physically installed on your system. For now I only will discuss to set it up for a Linux based system. In order to check that your operating systems see the card, enter the following command in the terminal:
<p></p>
<pre class="bash">
&#36; lspci &#124; grep NVIDIA
</pre>
<p></p>
On the response you should find something like
<pre class="bash">
84:00.0 VGA compatible controller: Advanced Micro Devices, Inc. &#91;AMD/ATI&#93; Hawaii XT / Grenada XT &#91;Radeon R9 290X/390X&#93; (rev 80)
</pre>
which means that the OS physically recognises your card.
<p></p>
For RHEL7.x the AMDGPU-PRO driver should be used. It can be downloaded from <a href="http://support.amd.com/en-us/kb-articles/Pages/AMDGPU-PRO-RedHat-Install.aspx">here</a>.
Unpack the driver
<pre class="bash">
&#36; tar -Jxvf amdgpu-pro-17.10-414273.tar.xz
&#36; cd amdgpu-pro-17.10-414273
</pre>
<p></p>
Install the driver as root
<pre class="bash">
&#36; ./amdgpu-pro-install --compute -y
</pre>
<p></p>
Here I assume that the AMD graphic card is only used for computation. You need to add the following command in order that the user 'blabla' (chance this to the appropriate user name) can access the GPU (otherwise only root works):
<pre class="bash">
&#36; /sbin/usermod -a -G video blabla
</pre>
<p></p>
Reboot the machine.
<p></p>
<h2 id="A_2.2_AMD_APP_Software_Development_Kit_40SDK_41_to_enable_OpenCL_support"> 2.2 AMD APP Software Development Kit (SDK) to enable OpenCL support </h2>
<p></p>
The AMD APP Software Development Kit (SDK) is a complete development platform created by AMD to allow you to quickly and easily develop applications accelerated by AMD APP technology. The SDK provides samples, documentation, and other materials to quickly get you started leveraging accelerated compute using OpenCL or <code>C++ AMP</code> in your <code>C/C++</code> applications.
<p></p>
Download the AMD APP SDK 3.0 from <a href="http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/">here</a>.
<p></p>
Extract the installer
<pre class="bash">
&#36; tar -xvjf AMD-APP-SDKInstaller-v3.0.130.136-GA-linux64.tar.bz2
</pre>
<p></p>
Run the installer
<pre class="bash">
&#36; ./AMD-APP-SDK-v3.0.130.136-GA-linux64.sh
</pre>
<p></p>
This will install the AMD APP SDK to /opt/AMDAPPSDK-3.0/ where you can find the OpenCL include and library files, as well as documentation and sample code.
The install guide for AMD OpenCL SDK can be found <a href="http://developer.amd.com/wordpress/media/2012/10/AMD_APP_SDK_InstallationNotes.pdf">here</a>.
<p></p>
<h2 id="A_2.3_Installation_of_DKS_and_61musrfit_61"> 2.3 Installation of DKS and <code>musrfit</code> </h2>
<p></p>
To install DKS and <code>musrfit</code> follow the instructions <a class="foswikiCurrentTopicLink" href="#DksInstall">here</a>.
<p></p>
<h1 id="A_3_Setting_up_61_61musrfit_47DKS_61_61_for_macOS_for_OpenCL_support"> 3 Setting up <code><b>musrfit/DKS</b></code> for macOS for OpenCL support </h1>
<p></p>
Since Apple is not providing an out-of-the-box OpenMP support on their macOS compiler framework (Xcode), typically <code>musrfit</code> is just running single threaded. Here DKS can help since it delivers OpenCL support which is present on macOS. Hence, if you would like to run <code>musrfit</code> multi-threaded the easiest way is to use DKS.
<p></p>
Since there is no graphic card involved, you do not need any graphic card driver of additional SDK. The only thing you need DKS and the proper <code>musrfit</code> version.
<p></p>
The installation instruction for DKS / <code>musrfit</code> can be found <a class="foswikiCurrentTopicLink" href="#DksInstall">here</a>.
<p></p>
-- <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a> - June 8, 2018</div>
<p></p>
<p></p>
</div>
<div class="patternInfo">This topic: MUSR<span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span><a class="foswikiCurrentWebHomeLink" href="WebHome.html">WebHome</a><span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span>MusrFitSetupDKS <br />
Topic revision: <span class='patternRevInfo'>08 Jun 2018, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
</div>
</div>
</div>
</div><div id="patternBottomBar"><div id="patternBottomBarContents"><div id="patternWebBottomBar"><span class="foswikiRight"> <a href="http://foswiki.org/"><img src="../pub/System/ProjectLogos/foswiki-badge.png" alt="This site is powered by Foswiki" title="This site is powered by Foswiki" /></a></span>Copyright &copy; by the contributing authors. All material on this collaboration platform is the property of the contributing authors. <br /> Ideas, requests, problems regarding PSI Wiki? <a href='mailto:thomas.buecklers@psi.ch?subject=PSI Wiki %20Feedback%20on%20MUSR.MusrFitSetupDKS'>Send feedback</a></div></div></div>
</div>
</div>
</div>
</div></div><!-- /endWrap -->
<p></p>
<!-- Piwik -->
<noscript><p><img src="../piwik/piwikf832.gif?idsite=7" style="border:0" alt=""></p></noscript>
<!-- End Piwik Tag -->
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/MusrFitSetupDKS?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/MusrGui?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:33 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrGui?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:51 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,12 +14,11 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrGui?t=1494785296" type="application/x-wiki" title="edit MusrGui" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrGui?t=1528465296" type="application/x-wiki" title="edit MusrGui" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head JQUERYPLUGIN::TWISTY' rel='stylesheet' href='../pub/System/TwistyPlugin/twisty327a.css?version=1.6.0' type='text/css' media='all' /><!--JQUERYPLUGIN::TWISTY: requires= missing ids: JavascriptFiles/foswikiPref-->
<style class='head TABLEPLUGIN_default' type="text/css" media="all">
<base /><!--[if IE]></base><![endif]--><style class='head TABLEPLUGIN_default' type="text/css" media="all">
body .foswikiTable {border-width:1px}
body .foswikiTable .tableSortIcon img {padding-left:.3em; vertical-align:text-bottom}
body .foswikiTable td {border-style:solid none; vertical-align:top}
@ -33,6 +32,11 @@ body .foswikiTable tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-col
body .foswikiTable tr.foswikiTableRowdataBg1 td {background-color:#f7f7f6}
body .foswikiTable tr.foswikiTableRowdataBg1 td.foswikiSortedCol {background-color:#f0f0ee}
</style><!--TABLEPLUGIN_default-->
<link class='head JQUERYPLUGIN::TWISTY' rel='stylesheet' href='../pub/System/TwistyPlugin/twisty327a.css?version=1.6.0' type='text/css' media='all' /><!--JQUERYPLUGIN::TWISTY: requires= missing ids: JavascriptFiles/foswikiPref-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<style class='head TABLEPLUGIN_specific' type="text/css" media="all">
body .foswikiTable#tableMusrGui1 td {vertical-align:middle; vertical-align:top}
body .foswikiTable#tableMusrGui1 td.foswikiTableCol0 {text-align:left}
@ -50,11 +54,7 @@ body .foswikiTable#tableMusrGui1 th a:hover {color:#0066cc; background-color:#ff
body .foswikiTable#tableMusrGui1 th.foswikiSortedCol {background-color:#eeeeee}
body .foswikiTable#tableMusrGui1 tr.foswikiTableRowdataBg0 td {background-color:#ffffff}
body .foswikiTable#tableMusrGui1 tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-color:#f5f5f5}
</style><!--TABLEPLUGIN_specific-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
</style><!--TABLEPLUGIN_specific--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -135,18 +135,18 @@ body .foswikiTable#tableMusrGui1 tr.foswikiTableRowdataBg0 td.foswikiSortedCol {
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::TWISTY-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::CHILI-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::TWISTY--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
<span id="PageTop"></span><div class="foswikiPage"><div id="patternScreen">
@ -531,5 +531,5 @@ Topic revision: <span class='patternRevInfo'>14 May 2017, <a href="https://intr
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/MusrGui?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:38 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrGui?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:56 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/MusrRoot?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:20 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrRoot?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:39 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,13 +14,11 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrRoot?t=1494785293" type="application/x-wiki" title="edit MusrRoot" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/MusrRoot?t=1528465295" type="application/x-wiki" title="edit MusrRoot" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head JQUERYPLUGIN::TWISTY' rel='stylesheet' href='../pub/System/TwistyPlugin/twisty327a.css?version=1.6.0' type='text/css' media='all' /><!--JQUERYPLUGIN::TWISTY: requires= missing ids: JavascriptFiles/foswikiPref-->
<style class='head TABLEPLUGIN_default' type="text/css" media="all">
body .foswikiTable {border-width:1px}
@ -36,6 +34,9 @@ body .foswikiTable tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-col
body .foswikiTable tr.foswikiTableRowdataBg1 td {background-color:#f7f7f6}
body .foswikiTable tr.foswikiTableRowdataBg1 td.foswikiSortedCol {background-color:#f0f0ee}
</style><!--TABLEPLUGIN_default-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN-->
<style class='head TABLEPLUGIN_specific' type="text/css" media="all">
body .foswikiTable#tableMusrRoot7 td {vertical-align:middle; vertical-align:top}
body .foswikiTable#tableMusrRoot7 td.foswikiTableCol0 {text-align:left}
@ -54,8 +55,7 @@ body .foswikiTable#tableMusrRoot7 th.foswikiSortedCol {background-color:#eeeeee}
body .foswikiTable#tableMusrRoot7 tr.foswikiTableRowdataBg0 td {background-color:#ffffff}
body .foswikiTable#tableMusrRoot7 tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-color:#f5f5f5}
</style><!--TABLEPLUGIN_specific-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -138,16 +138,16 @@ body .foswikiTable#tableMusrRoot7 tr.foswikiTableRowdataBg0 td.foswikiSortedCol
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiForm-->
<!--JavascriptFiles/foswikiPref-->
<!--JQUERYPLUGIN::TWISTY-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::METADATA-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::CHILI-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::TWISTY--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
<span id="PageTop"></span><div class="foswikiPage"><div id="patternScreen">
@ -1125,5 +1125,5 @@ Topic revision: <span class='patternRevInfo'>29 Mar 2012, suter_a</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/MusrRoot?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:26 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/MusrRoot?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:45 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/QuickStart?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:33 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/QuickStart?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:50 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,14 +14,14 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/QuickStart?t=1494785296" type="application/x-wiki" title="edit QuickStart" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/QuickStart?t=1528465296" type="application/x-wiki" title="edit QuickStart" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -101,15 +101,15 @@
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<!--JavascriptFiles/foswikiPref-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JQUERYPLUGIN::COMMENT--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
<span id="PageTop"></span><div class="foswikiPage"><div id="patternScreen">
@ -285,5 +285,5 @@ Topic revision: <span class='patternRevInfo'>10 Jul 2011, wojek</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/QuickStart?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:33 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/QuickStart?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:50 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/TutorialSingleHisto?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:30 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/TutorialSingleHisto?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:47 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,7 +14,7 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/TutorialSingleHisto?t=1494785295" type="application/x-wiki" title="edit TutorialSingleHisto" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/TutorialSingleHisto?t=1528465296" type="application/x-wiki" title="edit TutorialSingleHisto" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
@ -32,6 +32,12 @@ body .foswikiTable tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-col
body .foswikiTable tr.foswikiTableRowdataBg1 td {background-color:#f7f7f6}
body .foswikiTable tr.foswikiTableRowdataBg1 td.foswikiSortedCol {background-color:#f0f0ee}
</style><!--TABLEPLUGIN_default-->
<link class='head JQUERYPLUGIN::TWISTY' rel='stylesheet' href='../pub/System/TwistyPlugin/twisty327a.css?version=1.6.0' type='text/css' media='all' /><!--JQUERYPLUGIN::TWISTY: requires= missing ids: JavascriptFiles/foswikiPref-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<style class='head TABLEPLUGIN_specific' type="text/css" media="all">
body .foswikiTable#tableTutorialSingleHisto1 td {vertical-align:middle; vertical-align:top}
body .foswikiTable#tableTutorialSingleHisto1 td.foswikiTableCol0 {text-align:left}
@ -49,13 +55,7 @@ body .foswikiTable#tableTutorialSingleHisto1 th a:hover {color:#0066cc; backgrou
body .foswikiTable#tableTutorialSingleHisto1 th.foswikiSortedCol {background-color:#eeeeee}
body .foswikiTable#tableTutorialSingleHisto1 tr.foswikiTableRowdataBg0 td {background-color:#ffffff}
body .foswikiTable#tableTutorialSingleHisto1 tr.foswikiTableRowdataBg0 td.foswikiSortedCol {background-color:#f5f5f5}
</style><!--TABLEPLUGIN_specific-->
<link class='head IMAGEPLUGIN' rel="stylesheet" href="../pub/System/ImagePlugin/style.css" type="text/css" media="all" /><!--IMAGEPLUGIN-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head JQUERYPLUGIN::TWISTY' rel='stylesheet' href='../pub/System/TwistyPlugin/twisty327a.css?version=1.6.0' type='text/css' media='all' /><!--JQUERYPLUGIN::TWISTY: requires= missing ids: JavascriptFiles/foswikiPref-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
</style><!--TABLEPLUGIN_specific--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -138,12 +138,12 @@ body .foswikiTable#tableTutorialSingleHisto1 tr.foswikiTableRowdataBg0 td.foswik
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JQUERYPLUGIN::TWISTY-->
<!--JavascriptFiles/foswikiForm-->
<!--JQUERYPLUGIN::COMMENT-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
@ -401,5 +401,5 @@ Topic revision: <span class='patternRevInfo'>02 Sep 2011, wojek</span></div>
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/TutorialSingleHisto?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:08:33 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/TutorialSingleHisto?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:41:50 GMT -->
</html>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html lang="en">
<!-- Mirrored from intranet.psi.ch/MUSR/WebHome?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:10 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/WebHome?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:27 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
<head>
<link rel="stylesheet" href="../pub/System/HeadlinesPlugin/style.css" type="text/css" media="all" />
@ -14,14 +14,14 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="../pub/Main/WebPreferences/favicon.ico" type="image/x-icon" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/WebHome?t=1494785300" type="application/x-wiki" title="edit WebHome" />
<link rel="alternate" href="https://intranet.psi.ch/wiki/bin/edit/MUSR/WebHome?t=1528465299" type="application/x-wiki" title="edit WebHome" />
<meta name="TEXT_NUM_TOPICS" content="Number of topics:" />
<meta name="TEXT_MODIFY_SEARCH" content="Modify search" />
<meta name="robots" content="noindex" /><link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss" />
<base /><!--[if IE]></base><![endif]--><link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<base /><!--[if IE]></base><![endif]--><link class='head JQUERYPLUGIN::COMMENT' rel='stylesheet' href='../pub/System/CommentPlugin/commentf5b6.css?version=3.0' type='text/css' media='all' /><!--JQUERYPLUGIN::COMMENT-->
<link class='head CLASSIFICATIONPLUGIN::CSS' rel="stylesheet" href="../pub/System/ClassificationPlugin/styles.css" media="all" /><!--CLASSIFICATIONPLUGIN::CSS-->
<link class='head SMILIESPLUGIN' rel='stylesheet' href='../pub/System/SmiliesPlugin/smilies.css' type='text/css' media='all' /><!--SMILIESPLUGIN-->
<link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS--><link rel='stylesheet' href='../pub/System/SkinTemplates/base.css' media='all' type='text/css' />
<style type="text/css" media="all">
@import url('../pub/System/PatternSkinTheme/layout.css');
@import url('../pub/System/PatternSkinTheme2009/style.css');
@ -101,15 +101,15 @@
<!--<![endif]-->
<!--JQUERYPLUGIN-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::MIGRATE-->
<!--JQUERYPLUGIN::FOSWIKI-->
<!--JQUERYPLUGIN::LIVEQUERY-->
<!--JavascriptFiles/foswikiString-->
<!--JavascriptFiles/foswikiPref-->
<!--JavascriptFiles/foswikiForm-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES-->
<!--PatternSkin/pattern-->
<!--JQUERYPLUGIN::COMMENT-->
<!--PatternSkin/pattern--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
<!--JQUERYPLUGIN::FOSWIKI::PREFERENCES--><link class='head FOOTNOTEPLUGIN_LINKCSS' rel="stylesheet" href="../pub/System/FootNotePlugin/styles.css" type="text/css" media="all" /><!--FOOTNOTEPLUGIN_LINKCSS-->
</head>
<body class="foswikiNoJs patternViewPage patternPrintPage">
<span id="PageTop"></span><div class="foswikiPage"><div id="patternScreen">
@ -125,9 +125,10 @@
<li> <a href="CiteMusrFit.html">How to cite <code>musrfit</code>? <img class='smily' src='../pub/Main/SmiliesPluginPSI/yes.gif' alt='yes' title='yes' /> </a>
</li> <li> <a href="TutorialSingleHisto.html">Single-histogram-fit tutorial for <code>musrfit</code> introducing the basic features of the programs and <code>msr</code> files</a>
</li> <li> <a href="MusrFit.html">User manual of the &#956;SR data analysis software <code>musrfit</code> </a>
</li> <li> <a href="MusrFitSetup.html">Setting up <code>musrfit</code> on Different Platforms <img src="../pub/System/DocumentGraphics/new.png" alt="NEW" title="NEW" width="30" height="16" /> <strong><span class='foswikiRedFG'>ROOT6!</span></strong></a>
</li> <li> <a href="MusrFitSetup.html">Setting up <code>musrfit</code> on Different Platforms</a>
</li> <li> <a href="MusrFitSetupDKS.html">Setting up <code>musrfit</code> / <code>DKS</code>: high speed fitting with GPU's</a>
</li> <li> <a href="QuickStart.html">Quick start page for <code>WKM</code> users</a>
</li> <li> <a href="MusrGui.html">Documentation of <code>musrgui</code>/<code>musredit</code>&mdash;editors interfacing <code>musrfit</code> <img src="../pub/System/DocumentGraphics/updated.png" alt="UPDATED" title="UPDATED" width="55" height="16" /></a>
</li> <li> <a href="MusrGui.html">Documentation of <code>musrgui</code>/<code>musredit</code>&mdash;editors interfacing <code>musrfit</code></a>
</li> <li> <a href="Msr2Data.html">Documentation of <code>msr2data</code>&mdash;a program for automatically processing multiple musrfit <code>msr</code> files</a>
</li> <li> <a href="MusrFit.html#Any2Many"><code>any2many</code>&mdash;a universal &#956;SR-file-format converter</a>
</li> <li> <a href="MusrRoot.html"><code>MusrRoot</code>: an extensible open file format for &#956;SR</a>
@ -138,12 +139,12 @@
</li> <li> <a href="MusrFitAcknowledgements.html">Acknowledgements</a>
</li></ul>
<p></p>
-- <a href="http://www.psi.ch/low-energy-muons/people">AS</a> &amp; (<a href="http://www.fsf.org/register_form?referrer=8369">BMW</a>) - last update May 14, 2017</div>
-- <a href="http://www.psi.ch/low-energy-muons/people">AS</a> &amp; (<a href="http://www.fsf.org/register_form?referrer=8369">BMW</a>) - last update June 8, 2018</div>
<p></p>
<p></p>
</div>
<div class="patternInfo">This topic: MUSR<span class='foswikiSeparator'>&nbsp;&gt;&nbsp;</span>WebHome <br />
Topic revision: <span class='patternRevInfo'>14 May 2017, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
Topic revision: <span class='patternRevInfo'>08 Jun 2018, <a href="https://intranet.psi.ch/Main/AndreasSuter">AndreasSuter</a></span></div>
</div>
</div>
</div>
@ -161,5 +162,5 @@ Topic revision: <span class='patternRevInfo'>14 May 2017, <a href="https://intr
</body>
<!-- Mirrored from intranet.psi.ch/MUSR/WebHome?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Sun, 14 May 2017 18:09:12 GMT -->
<!-- Mirrored from intranet.psi.ch/MUSR/WebHome?cover=print by HTTrack Website Copier/3.x [XR&CO'2014], Fri, 08 Jun 2018 13:42:28 GMT -->
</html>

176
src/CMakeLists.txt Normal file
View File

@ -0,0 +1,176 @@
#--- add further sub-directories ----------------------------------------------
add_subdirectory(classes)
add_subdirectory(external)
if (Qt5Core_FOUND)
add_subdirectory(musredit_qt5)
elseif (Qt4_FOUND)
add_subdirectory(musredit)
elseif (QT_FOUND)
add_subdirectory(musrgui)
endif (Qt5Core_FOUND)
#--- define the musrfit libs --------------------------------------------------
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} mud)
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TMusrRunHeader)
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TLemRunHeader)
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} Class_MuSR_PSI)
if (nexus)
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} ${NEXUS_LIBRARY})
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PNeXus)
endif (nexus)
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PMusr)
#--- start create git-revision.h ----------------------------------------------
configure_file(
${CMAKE_SOURCE_DIR}/cmake/configure_musrfit_version_file.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake
@ONLY
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/git-revision.h
COMMAND ${CMAKE_COMMAND} -P
${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake
${CMAKE_SOURCE_DIR}/cmake/git-revision.h.in
COMMENT "Configuring git-revision.h"
VERBATIM
)
add_custom_target(
configure_musrfit_version ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/git-revision.h
)
#--- end create git-revision.h ------------------------------------------------
#--- add all executables ------------------------------------------------------
add_executable(any2many git-revision.h any2many.cpp)
target_compile_options(any2many BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(any2many
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
)
target_link_libraries(any2many ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(dump_header git-revision.h dump_header.cpp)
target_compile_options(dump_header BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(dump_header
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${NEXUS_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/MusrRoot>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/TLemRunHeader>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/MuSR_software/Class_MuSR_PSI/>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/mud/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/nexus>
)
target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(msr2data git-revision.h msr2data.cpp)
target_compile_options(msr2data BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(msr2data
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
)
target_link_libraries(msr2data ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(msr2msr msr2msr.cpp)
target_link_libraries(msr2msr ${ROOT_LIBRARIES})
add_executable(musrfit git-revision.h musrfit.cpp)
target_compile_options(musrfit BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(musrfit
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
)
target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(musrFT git-revision.h musrFT.cpp)
target_compile_options(musrFT BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(musrFT
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
)
target_link_libraries(musrFT ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(musrRootValidation git-revision.h musrRootValidation.cpp)
target_compile_options(musrRootValidation BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(musrRootValidation
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
$<BUILD_INTERFACE:${LIBXML2_INCLUDE_DIR}>
)
target_link_libraries(musrRootValidation ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES})
add_executable(musrt0 git-revision.h musrt0.cpp)
target_compile_options(musrt0 BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(musrt0
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
)
target_link_libraries(musrt0 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(musrview git-revision.h musrview.cpp)
target_compile_options(musrview BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(musrview
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
)
target_link_libraries(musrview ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(write_musrRoot_runHeader git-revision.h write_musrRoot_runHeader.cpp)
target_compile_options(write_musrRoot_runHeader BEFORE PRIVATE "-DHAVE_CONFIG_H")
target_include_directories(write_musrRoot_runHeader
BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
$<BUILD_INTERFACE:${LIBXML2_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/MusrRoot>
)
target_link_libraries(write_musrRoot_runHeader ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES})
#--- installation info --------------------------------------------------------
install(
TARGETS
any2many
dump_header
msr2data
msr2msr
musrfit
musrFT
musrRootValidation
musrt0
musrview
write_musrRoot_runHeader
RUNTIME DESTINATION
bin
)

176
src/classes/CMakeLists.txt Normal file
View File

@ -0,0 +1,176 @@
#--- build the PMusr and PUserFcnBase libs ------------------------------------
#--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
root_generate_dictionary(
PFourierCanvasDict
-I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PFourierCanvas.h
LINKDEF ${MUSRFIT_INC}/PFourierCanvasLinkDef.h
)
root_generate_dictionary(
PMusrCanvasDict
-I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PMusrCanvas.h
LINKDEF ${MUSRFIT_INC}/PMusrCanvasLinkDef.h
)
root_generate_dictionary(
PMusrT0Dict
-I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PMusrT0.h
LINKDEF ${MUSRFIT_INC}/PMusrT0LinkDef.h
)
root_generate_dictionary(
PStartupHandlerDict
-I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PStartupHandler.h
LINKDEF ${MUSRFIT_INC}/PStartupHandlerLinkDef.h
)
root_generate_dictionary(
PUserFcnBaseDict
-I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PUserFcnBase.h
LINKDEF ${MUSRFIT_INC}/PUserFcnBaseLinkDef.h
)
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(MUSR_VERSION "1.3.0")
set(MUSR_LIBRARY_NAME "PMusr")
configure_file("PMusr.pc.in" "PMusr.pc" @ONLY)
set(USERFCN_LIBRARY_NAME "PUserFcnBase")
configure_file("PUserFcnBase.pc.in" "PUserFcnBase.pc" @ONLY)
#--- lib creation -------------------------------------------------------------
add_library(PMusr SHARED
PFitter.cpp
PFitterFcn.cpp
PFourier.cpp
PFourierCanvas.cpp
PFourierCanvasDict.cxx
PMusrCanvas.cpp
PMusrCanvasDict.cxx
PFunction.cpp
PFunctionHandler.cpp
PMsr2Data.cpp
PMsrHandler.cpp
PMusrCanvas.cpp
PMusrCanvasDict.cxx
PMusr.cpp
PMusrT0.cpp
PMusrT0Dict.cxx
PPrepFourier.cpp
PRunAsymmetry.cpp
PRunAsymmetryRRF.cpp
PRunBase.cpp
PRunDataHandler.cpp
PRunListCollection.cpp
PRunMuMinus.cpp
PRunNonMusr.cpp
PRunSingleHisto.cpp
PRunSingleHistoRRF.cpp
PStartupHandler.cpp
PStartupHandlerDict.cxx
PTheory.cpp
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
PMusr BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${NEXUS_INCLUDE_DIR}>
$<BUILD_INTERFACE:${MUSRFIT_INC}>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/MusrRoot>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/TLemRunHeader>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/MuSR_software/Class_MuSR_PSI>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/mud/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/external/nexus>
)
add_library(PUserFcnBase SHARED
PUserFcnBase.cpp
PUserFcnBaseDict.cxx
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(PMusr
PROPERTIES
VERSION ${MUSR_VERSION}
)
set_target_properties(PUserFcnBase
PROPERTIES
VERSION ${MUSR_VERSION}
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
PUserFcnBase BEFORE PRIVATE $<BUILD_INTERFACE:${MUSRFIT_INC}>
)
#--- add OpenMP compile options if needed -------------------------------------
if (OpenMP_FOUND)
target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS})
endif (OpenMP_FOUND)
#--- add library dependencies -------------------------------------------------
set(DependOnLibs ${ROOT_LIBARIES})
set(DependOnLibs ${DependOnLibs} ${FFTW3_LIBRARY})
set(DependOnLibs ${DependOnLibs} PUserFcnBase)
set(DependOnLibs ${DependOnLibs} mud)
set(DependOnLibs ${DependOnLibs} TMusrRunHeader)
set(DependOnLibs ${DependOnLibs} TLemRunHeader)
set(DependOnLibs ${DependOnLibs} Class_MuSR_PSI)
if (nexus)
set(DependOnLibs ${DependOnLibs} ${LIBNEXUS_LIBRARY})
set(DependOnLibs ${DependOnLibs} PNeXus)
endif (nexus)
if (OpenMP_FOUND)
if (OpenMP_CXX_LIBRARIES)
set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_LIBRARIES})
else (OpenMP_CXX_LIBRARIES)
set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_FLAGS}) # for older cmake OpenMP_CXX_LIBRARIES is not defined
endif (OpenMP_CXX_LIBRARIES)
endif (OpenMP_FOUND)
target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES})
target_link_libraries(PMusr ${DependOnLibs})
#--- install PUserFcnBase solib -----------------------------------------------
install(TARGETS PUserFcnBase DESTINATION lib)
#--- install PMusr solib ------------------------------------------------------
install(TARGETS PMusr DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libPFourierCanvasDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPFourierCanvasDict.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvasDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvasDict.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0Dict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0Dict.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandlerDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandlerDict.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBaseDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBaseDict.rootmap
DESTINATION lib
)
#--- install headers ----------------------------------------------------------
#--- only install headers needed for classes with dictionary
install(
FILES ${MUSRFIT_INC}/PFourierCanvas.h
${MUSRFIT_INC}/PFourier.h
${MUSRFIT_INC}/PMusrCanvas.h
${MUSRFIT_INC}/PMusr.h
${MUSRFIT_INC}/PMusrT0.h
${MUSRFIT_INC}/PRunListCollection.h
${MUSRFIT_INC}/PStartupHandler.h
${MUSRFIT_INC}/PUserFcnBase.h
DESTINATION include
)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/PUserFcnBase.pc
${CMAKE_CURRENT_BINARY_DIR}/PMusr.pc
DESTINATION lib/pkgconfig
)

View File

@ -2607,7 +2607,7 @@ void PMsrHandler::SetMsrBkgRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin)
Int_t PMsrHandler::ParameterInUse(UInt_t paramNo)
{
// check that paramNo is within acceptable range
if ((paramNo < 0) || (paramNo >= fParam.size()))
if (paramNo >= fParam.size())
return -1;
return fParamInUse[paramNo];
@ -6164,10 +6164,10 @@ UInt_t PMsrHandler::LastSignificant(Double_t dval, UInt_t precLimit)
}
// find last significant digit
for (UInt_t i=strlen(str)-1; i>=0; i--) {
for (Int_t i=strlen(str)-1; i>=0; i--) {
if (str[i] != '0') {
if ((i-decimalPoint) < precLimit)
lastSignificant = i-decimalPoint;
if (((UInt_t)i-decimalPoint) < precLimit)
lastSignificant = (UInt_t)i-decimalPoint;
else
lastSignificant = precLimit;
break;

View File

@ -6475,10 +6475,10 @@ UInt_t PMusrCanvas::GetNeededAccuracy(PMsrParamStructure param)
}
// find last significant digit
for (UInt_t i=strlen(str)-1; i>=0; i--) {
for (Int_t i=strlen(str)-1; i>=0; i--) {
if (str[i] != '0') {
if ((i-decimalPoint) < precLimit)
accuracy = i-decimalPoint;
if (((UInt_t)i-decimalPoint) < precLimit)
accuracy = (UInt_t)i-decimalPoint;
else
accuracy = precLimit;
break;

View File

@ -574,7 +574,7 @@ Bool_t PRunAsymmetry::PrepareData()
addRunSize = addRunData->GetDataBin(forwardHistoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(forwardHistoNo[k])->size(); j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) {
if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(forwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k]);
}
}
@ -585,7 +585,7 @@ Bool_t PRunAsymmetry::PrepareData()
addRunSize = addRunData->GetDataBin(backwardHistoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(backwardHistoNo[k])->size(); j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) {
if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) {
backward[k][j] += addRunData->GetDataBin(backwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1]);
}
}

View File

@ -566,7 +566,7 @@ Bool_t PRunAsymmetryRRF::PrepareData()
addRunSize = addRunData->GetDataBin(forwardHistoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(forwardHistoNo[k])->size(); j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) {
if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k] < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(forwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k]);
}
}
@ -577,7 +577,7 @@ Bool_t PRunAsymmetryRRF::PrepareData()
addRunSize = addRunData->GetDataBin(backwardHistoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(backwardHistoNo[k])->size(); j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) {
if (((Int_t)j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] >= 0) && (j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1] < addRunSize)) {
backward[k][j] += addRunData->GetDataBin(backwardHistoNo[k])->at(j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1]);
}
}
@ -597,7 +597,7 @@ Bool_t PRunAsymmetryRRF::PrepareData()
for (UInt_t i=1; i<forwardHistoNo.size(); i++) { // loop over the groupings
for (UInt_t j=0; j<runData->GetDataBin(forwardHistoNo[i])->size(); j++) { // loop over the bin indices
// make sure that the index stays within proper range
if ((j+fT0s[2*i]-fT0s[0] >= 0) && (j+fT0s[2*i]-fT0s[0] < runData->GetDataBin(forwardHistoNo[i])->size())) {
if (((Int_t)j+fT0s[2*i]-fT0s[0] >= 0) && (j+fT0s[2*i]-fT0s[0] < runData->GetDataBin(forwardHistoNo[i])->size())) {
fForward[j] += forward[i][j+(Int_t)fT0s[2*i]-(Int_t)fT0s[0]];
}
}
@ -771,8 +771,7 @@ Bool_t PRunAsymmetryRRF::SubtractEstimatedBkg()
}
// check if start is within histogram bounds
if ((start[0] < 0) || (start[0] >= fForward.size()) ||
(start[1] < 0) || (start[1] >= fBackward.size())) {
if ((start[0] >= fForward.size()) || (start[1] >= fBackward.size())) {
cerr << endl << ">> PRunAsymmetryRRF::SubtractEstimatedBkg(): **ERROR** background bin values out of bound!";
cerr << endl << ">> histo lengths (f/b) = (" << fForward.size() << "/" << fBackward.size() << ").";
cerr << endl << ">> background start (f/b) = (" << start[0] << "/" << start[1] << ").";
@ -780,8 +779,7 @@ Bool_t PRunAsymmetryRRF::SubtractEstimatedBkg()
}
// check if end is within histogram bounds
if ((end[0] < 0) || (end[0] >= fForward.size()) ||
(end[1] < 0) || (end[1] >= fBackward.size())) {
if ((end[0] >= fForward.size()) || (end[1] >= fBackward.size())) {
cerr << endl << ">> PRunAsymmetryRRF::SubtractEstimatedBkg(): **ERROR** background bin values out of bound!";
cerr << endl << ">> histo lengths (f/b) = (" << fForward.size() << "/" << fBackward.size() << ").";
cerr << endl << ">> background end (f/b) = (" << end[0] << "/" << end[1] << ").";

View File

@ -34,11 +34,8 @@
#include <TString.h>
#include <TObjArray.h>
#include <TObjString.h>
//#include <TFile.h>
#include <TFolder.h>
#include "TLemRunHeader.h"
#include "PRunBase.h"
//--------------------------------------------------------------------------
@ -78,7 +75,7 @@ PRunBase::PRunBase(PMsrHandler *msrInfo, PRunDataHandler *rawData, UInt_t runNo,
fValid = true;
fRunNo = static_cast<Int_t>(runNo);
if ((runNo < 0) || (runNo > fMsrInfo->GetMsrRunList()->size())) {
if (runNo > fMsrInfo->GetMsrRunList()->size()) {
fRunInfo = 0;
return;
}

View File

@ -788,7 +788,7 @@ PRunData* PRunListCollection::GetSingleHisto(UInt_t index, EDataSwitch tag)
switch (tag) {
case kIndex:
if ((index < 0) || (index >= fRunSingleHistoList.size())) {
if (index >= fRunSingleHistoList.size()) {
cerr << endl << ">> PRunListCollection::GetSingleHisto(): **ERROR** index = " << index << " out of bounds";
cerr << endl;
return 0;
@ -831,7 +831,7 @@ PRunData* PRunListCollection::GetSingleHistoRRF(UInt_t index, EDataSwitch tag)
switch (tag) {
case kIndex:
if ((index < 0) || (index >= fRunSingleHistoRRFList.size())) {
if (index >= fRunSingleHistoRRFList.size()) {
cerr << endl << ">> PRunListCollection::GetSingleHistoRRF(): **ERROR** index = " << index << " out of bounds";
cerr << endl;
return 0;
@ -874,7 +874,7 @@ PRunData* PRunListCollection::GetAsymmetry(UInt_t index, EDataSwitch tag)
switch (tag) {
case kIndex: // called from musrfit when dumping the data
if ((index < 0) || (index > fRunAsymmetryList.size())) {
if (index > fRunAsymmetryList.size()) {
cerr << endl << ">> PRunListCollection::GetAsymmetry(): **ERROR** index = " << index << " out of bounds";
cerr << endl;
return 0;
@ -917,7 +917,7 @@ PRunData* PRunListCollection::GetAsymmetryRRF(UInt_t index, EDataSwitch tag)
switch (tag) {
case kIndex: // called from musrfit when dumping the data
if ((index < 0) || (index > fRunAsymmetryRRFList.size())) {
if (index > fRunAsymmetryRRFList.size()) {
cerr << endl << ">> PRunListCollection::GetAsymmetryRRF(): **ERROR** index = " << index << " out of bounds";
cerr << endl;
return 0;
@ -960,7 +960,7 @@ PRunData* PRunListCollection::GetMuMinus(UInt_t index, EDataSwitch tag)
switch (tag) {
case kIndex:
if ((index < 0) || (index > fRunMuMinusList.size())) {
if (index > fRunMuMinusList.size()) {
cerr << endl << ">> PRunListCollection::GetMuMinus(): **ERROR** index = " << index << " out of bounds";
cerr << endl;
return 0;
@ -1002,7 +1002,7 @@ PRunData* PRunListCollection::GetNonMusr(UInt_t index, EDataSwitch tag)
switch (tag) {
case kIndex:
if ((index < 0) || (index > fRunNonMusrList.size())) {
if (index > fRunNonMusrList.size()) {
cerr << endl << ">> PRunListCollection::GetNonMusr(): **ERROR** index = " << index << " out of bounds";
cerr << endl;
return 0;

View File

@ -27,6 +27,14 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_GOMP
#include <omp.h>
#endif
#include <iostream>
using namespace std;
@ -512,7 +520,7 @@ Bool_t PRunMuMinus::PrepareData()
addRunSize = addRunData->GetDataBin(histoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) {
if (((Int_t)j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k]);
}
}
@ -530,7 +538,7 @@ Bool_t PRunMuMinus::PrepareData()
for (UInt_t i=1; i<histoNo.size(); i++) { // loop over the groupings
for (UInt_t j=0; j<runData->GetDataBin(histoNo[i])->size(); j++) { // loop over the bin indices
// make sure that the index stays within proper range
if ((j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) {
if (((Int_t)j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) {
fForward[j] += forward[i][j+(Int_t)fT0s[i]-(Int_t)fT0s[0]];
}
}

View File

@ -41,6 +41,8 @@ PRunNonMusr::PRunNonMusr() : PRunBase()
{
fNoOfFitBins = 0;
fPacking = 1;
fStartTimeBin = 0;
fEndTimeBin = 0;
fHandleTag = kEmpty;
@ -105,14 +107,12 @@ Double_t PRunNonMusr::CalcChiSquare(const std::vector<Double_t>& par)
}
// calculate chi square
Double_t x;
for (UInt_t i=0; i<fData.GetValue()->size(); i++) {
Double_t x(1.0);
for (UInt_t i=fStartTimeBin; i<=fEndTimeBin; i++) {
x = fData.GetX()->at(i);
if ((x>=fFitStartTime) && (x<=fFitEndTime)) {
diff = fData.GetValue()->at(i) - fTheory->Func(x, par, fFuncValues);
chisq += diff*diff / (fData.GetError()->at(i)*fData.GetError()->at(i));
}
}
return chisq;
}
@ -279,6 +279,17 @@ Bool_t PRunNonMusr::PrepareFitData()
fNoOfFitBins++;
}
// get start/end bin
const PDoubleVector *xx = fData.GetX();
fStartTimeBin = 0;
fEndTimeBin = xx->size()-1;
for (UInt_t i=0; i<xx->size(); i++) {
if (xx->at(i) < fFitStartTime)
fStartTimeBin = i;
if (xx->at(i) < fFitEndTime)
fEndTimeBin = i;
}
return success;
}

View File

@ -764,7 +764,7 @@ Bool_t PRunSingleHisto::PrepareData()
addRunSize = addRunData->GetDataBin(histoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) {
if (((Int_t)j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k]);
}
}
@ -782,7 +782,7 @@ Bool_t PRunSingleHisto::PrepareData()
for (UInt_t i=1; i<histoNo.size(); i++) { // loop over the groupings
for (UInt_t j=0; j<runData->GetDataBin(histoNo[i])->size(); j++) { // loop over the bin indices
// make sure that the index stays within proper range
if ((j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) {
if (((Int_t)j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) {
fForward[j] += forward[i][j+(Int_t)fT0s[i]-(Int_t)fT0s[0]];
}
}
@ -1766,7 +1766,7 @@ Bool_t PRunSingleHisto::EstimateBkg(UInt_t histoNo)
}
// check if start is within histogram bounds
if ((start < 0) || (start >= fForward.size())) {
if (start >= fForward.size()) {
cerr << endl << ">> PRunSingleHisto::EstimatBkg(): **ERROR** background bin values out of bound!";
cerr << endl << ">> histo lengths = " << fForward.size();
cerr << endl << ">> background start = " << start;
@ -1775,7 +1775,7 @@ Bool_t PRunSingleHisto::EstimateBkg(UInt_t histoNo)
}
// check if end is within histogram bounds
if ((end < 0) || (end >= fForward.size())) {
if (end >= fForward.size()) {
cerr << endl << ">> PRunSingleHisto::EstimatBkg(): **ERROR** background bin values out of bound!";
cerr << endl << ">> histo lengths = " << fForward.size();
cerr << endl << ">> background end = " << end;

View File

@ -493,7 +493,7 @@ Bool_t PRunSingleHistoRRF::PrepareData()
addRunSize = addRunData->GetDataBin(histoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) {
if (((Int_t)j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] >= 0) && (j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k] < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+(Int_t)fAddT0s[i-1][k]-(Int_t)fT0s[k]);
}
}
@ -511,7 +511,7 @@ Bool_t PRunSingleHistoRRF::PrepareData()
for (UInt_t i=1; i<histoNo.size(); i++) { // loop over the groupings
for (UInt_t j=0; j<runData->GetDataBin(histoNo[i])->size(); j++) { // loop over the bin indices
// make sure that the index stays within proper range
if ((j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) {
if (((Int_t)j+fT0s[i]-fT0s[0] >= 0) && (j+fT0s[i]-fT0s[0] < runData->GetDataBin(histoNo[i])->size())) {
fForward[j] += forward[i][j+(Int_t)fT0s[i]-(Int_t)fT0s[0]];
}
}
@ -1173,7 +1173,7 @@ Bool_t PRunSingleHistoRRF::EstimateBkg(UInt_t histoNo)
}
// check if start is within histogram bounds
if ((start < 0) || (start >= fForward.size())) {
if (start >= fForward.size()) {
cerr << endl << ">> PRunSingleHistoRRF::EstimatBkg(): **ERROR** background bin values out of bound!";
cerr << endl << ">> histo lengths = " << fForward.size();
cerr << endl << ">> background start = " << start;
@ -1182,7 +1182,7 @@ Bool_t PRunSingleHistoRRF::EstimateBkg(UInt_t histoNo)
}
// check if end is within histogram bounds
if ((end < 0) || (end >= fForward.size())) {
if (end >= fForward.size()) {
cerr << endl << ">> PRunSingleHistoRRF::EstimatBkg(): **ERROR** background bin values out of bound!";
cerr << endl << ">> histo lengths = " << fForward.size();
cerr << endl << ">> background end = " << end;

View File

@ -31,6 +31,7 @@
#include "cuba.h"
#define USERDATA NULL
#define SPIN NULL
#define SEED 0
#define STATEFILE NULL
@ -45,6 +46,7 @@ std::vector<double> TDWaveGapIntegralCuhre::fPar;
double TDWaveGapIntegralCuhre::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-4);
const double EPSABS (1e-6);
const unsigned int VERBOSE (0);
@ -57,9 +59,9 @@ double TDWaveGapIntegralCuhre::IntegrateFunc()
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Cuhre(fNDim, NCOMP, Integrand, USERDATA,
Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL,
KEY, STATEFILE,
KEY, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];
@ -96,6 +98,7 @@ std::vector<double> TCosSqDWaveGapIntegralCuhre::fPar;
double TCosSqDWaveGapIntegralCuhre::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-8);
const double EPSABS (1e-6);
const unsigned int VERBOSE (0);
@ -108,9 +111,9 @@ double TCosSqDWaveGapIntegralCuhre::IntegrateFunc()
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Cuhre(fNDim, NCOMP, Integrand, USERDATA,
Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL,
KEY, STATEFILE,
KEY, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];
@ -147,6 +150,7 @@ std::vector<double> TSinSqDWaveGapIntegralCuhre::fPar;
double TSinSqDWaveGapIntegralCuhre::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-8);
const double EPSABS (1e-10);
const unsigned int VERBOSE (0);
@ -159,9 +163,9 @@ double TSinSqDWaveGapIntegralCuhre::IntegrateFunc()
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Cuhre(fNDim, NCOMP, Integrand, USERDATA,
Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL,
KEY, STATEFILE,
KEY, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];
@ -198,6 +202,7 @@ std::vector<double> TAnSWaveGapIntegralCuhre::fPar;
double TAnSWaveGapIntegralCuhre::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-4);
const double EPSABS (1e-6);
const unsigned int VERBOSE (0);
@ -210,9 +215,9 @@ double TAnSWaveGapIntegralCuhre::IntegrateFunc()
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Cuhre(fNDim, NCOMP, Integrand, USERDATA,
Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL,
KEY, STATEFILE,
KEY, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];
@ -249,6 +254,7 @@ std::vector<double> TAnSWaveGapIntegralDivonne::fPar;
double TAnSWaveGapIntegralDivonne::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-4);
const double EPSABS (1e-6);
const unsigned int VERBOSE (0);
@ -268,10 +274,10 @@ double TAnSWaveGapIntegralDivonne::IntegrateFunc()
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Divonne(fNDim, NCOMP, Integrand, USERDATA,
Divonne(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE, SEED, MINEVAL, MAXEVAL,
KEY1, KEY2, KEY3, MAXPASS, BORDER, MAXCHISQ, MINDEVIATION,
NGIVEN, LDXGIVEN, NULL, NEXTRA, NULL, STATEFILE,
NGIVEN, LDXGIVEN, NULL, NEXTRA, NULL, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];
@ -308,6 +314,7 @@ std::vector<double> TAnSWaveGapIntegralSuave::fPar;
double TAnSWaveGapIntegralSuave::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-4);
const double EPSABS (1e-6);
const unsigned int VERBOSE (0);
@ -316,14 +323,15 @@ double TAnSWaveGapIntegralSuave::IntegrateFunc()
const unsigned int MAXEVAL (1000000);
const unsigned int NNEW (1000);
const unsigned int NMIN (2);
const double FLATNESS (25.);
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Suave(fNDim, NCOMP, Integrand, USERDATA,
Suave(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE | LAST, SEED, MINEVAL, MAXEVAL,
NNEW, FLATNESS, STATEFILE,
NNEW, NMIN, FLATNESS, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];
@ -360,6 +368,7 @@ std::vector<double> TNonMonDWave1GapIntegralCuhre::fPar;
double TNonMonDWave1GapIntegralCuhre::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-4);
const double EPSABS (1e-6);
const unsigned int VERBOSE (0);
@ -372,9 +381,9 @@ double TNonMonDWave1GapIntegralCuhre::IntegrateFunc()
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Cuhre(fNDim, NCOMP, Integrand, USERDATA,
Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL,
KEY, STATEFILE,
KEY, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];
@ -411,6 +420,7 @@ std::vector<double> TNonMonDWave2GapIntegralCuhre::fPar;
double TNonMonDWave2GapIntegralCuhre::IntegrateFunc()
{
const unsigned int NCOMP(1);
const unsigned int NVEC(1);
const double EPSREL (1e-4);
const double EPSABS (1e-6);
const unsigned int VERBOSE (0);
@ -423,9 +433,9 @@ double TNonMonDWave2GapIntegralCuhre::IntegrateFunc()
int nregions, neval, fail;
double integral[NCOMP], error[NCOMP], prob[NCOMP];
Cuhre(fNDim, NCOMP, Integrand, USERDATA,
Cuhre(fNDim, NCOMP, Integrand, USERDATA, NVEC,
EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL,
KEY, STATEFILE,
KEY, STATEFILE, SPIN,
&nregions, &neval, &fail, integral, error, prob);
return integral[0];

77
src/external/BMWtools/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,77 @@
# - BMWtools library ----------------------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
set(CUBA_INC ${CMAKE_SOURCE_DIR}/src/external/libCuba/src)
root_generate_dictionary(
BMWStartupHandlerDict
-I${MUSRFIT_INC}
BMWStartupHandler.h
LINKDEF BMWStartupHandlerLinkDef.h
)
#--- create pkg-config info ---------------------------------------------------
#[==[ //as35 for now do not create a pkgconfig file
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(BMW_TOOLS_VERSION "1.0.0")
set(BMW_TOOLS_LIBRARY_NAME "BMWtools")
configure_file("BMWtools.pc.in" "BMWtools.pc" @ONLY)
#]==]
#--- lib creation -------------------------------------------------------------
add_library(BMWtools SHARED
BMWStartupHandler.cpp
BMWStartupHandlerDict.cxx
TTrimSPDataHandler.cpp
BMWIntegrator.cpp
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(BMWtools
PROPERTIES
VERSION "1.0.0"
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
BMWtools BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${CUBA_INC}>
$<BUILD_INTERFACE:${MUSRFIT_INC}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(BMWtools ${ROOT_LIBRARIES} cuba)
#--- install BMWtools solib ---------------------------------------------------
install(TARGETS BMWtools DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libBMWStartupHandlerDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libBMWStartupHandlerDict.rootmap
DESTINATION lib
)
#--- install BMWtools header --------------------------------------------------
install(
FILES
BMWStartupHandler.h
TTrimSPDataHandler.h
BMWIntegrator.h
DESTINATION
include
)
#--- install pkg-config info --------------------------------------------------
#[==[ //as35 for now do not install a pkgconfig file
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/BMWtools.pc
DESTINATION lib/pkgconfig
)
#]==]

30
src/external/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,30 @@
if (ASlibs)
add_subdirectory(Nonlocal)
add_subdirectory(MagProximity)
add_subdirectory(libPhotoMeissner)
add_subdirectory(libSpinValve)
endif (ASlibs)
if (BMWlibs)
add_subdirectory(libCuba)
add_subdirectory(BMWtools)
add_subdirectory(libCalcMeanFieldsLEM)
add_subdirectory(libFitPofB)
add_subdirectory(libGapIntegrals)
add_subdirectory(libLFRelaxation)
add_subdirectory(libZFRelaxation)
endif (BMWlibs)
if (BNMRlibs)
add_subdirectory(libBNMR)
endif (BNMRlibs)
add_subdirectory(mud)
add_subdirectory(MusrRoot)
add_subdirectory(TLemRunHeader)
add_subdirectory(MuSR_software)
if (nexus)
add_subdirectory(nexus)
endif (nexus)

View File

@ -0,0 +1,82 @@
# - Mag. Proximity library ----------------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
root_generate_dictionary(
PMagProximityFitterDict
-I${FFTW3_INCLUDE}
-I${MUSRFIT_INC}
PMagProximityFitter.h
LINKDEF PMagProximityFitterLinkDef.h
)
root_generate_dictionary(
PMPStartupHandlerDict
-I${MUSRFIT_INC}
PMPStartupHandler.h
LINKDEF PMPStartupHandlerLinkDef.h
)
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(P_MAG_PROXIMITY_FITTER_VERSION "1.0.0")
set(P_MAG_PROXIMITY_FITTER_LIBRARY_NAME "PMagProximityFitter")
configure_file("PMagProximityFitter.pc.in" "PMagProximityFitter.pc" @ONLY)
#--- lib creation -------------------------------------------------------------
add_library(PMagProximityFitter SHARED
PMagProximityFitter.cpp
PMagProximityFitterDict.cxx
PMPRgeHandler.cpp
PMPStartupHandler.cpp
PMPStartupHandlerDict.cxx
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
PMagProximityFitter BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${MUSRFIT_INC}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(PMagProximityFitter
PROPERTIES
VERSION ${P_MAG_PROXIMITY_FITTER_VERSION}
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(PMagProximityFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase)
#--- install PMagProximityFitter solib ----------------------------------------
install(TARGETS PMagProximityFitter DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libPMagProximityFitterDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPMagProximityFitterDict.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPMPStartupHandlerDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPMPStartupHandlerDict.rootmap
DESTINATION lib
)
#--- install PMagProximityFitter header ---------------------------------------
install(
FILES
PMagProximity.h
PMagProximityFitter.h
PMPRgeHandler.h
PMPStartupHandler.h
DESTINATION
include
)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/PMagProximityFitter.pc
DESTINATION lib/pkgconfig
)

View File

@ -94,7 +94,7 @@ Double_t PMPRgeHandler::GetRgeValue(const Int_t index, const Double_t dist)
UInt_t distIdx = (UInt_t)(dist/(fRgeDataList[index].stoppingDistance[1]-fRgeDataList[index].stoppingDistance[0]));
if ((distIdx >= fRgeDataList[index].stoppingDistance.size()) || (distIdx < 0)) {
if (distIdx >= fRgeDataList[index].stoppingDistance.size()) {
rgeVal = 0.0;
} else {
rgeVal = fRgeDataList[index].stoppingAmplitude[distIdx] +

View File

@ -0,0 +1,10 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: PMagProximityFitter
Description: C++ shared library providing the mag. proximity fitter class
Version: @P_MAG_PROXIMITY_FITTER_VERSION@
Libs: -L${libdir} -l@P_MAG_PROXIMITY_FITTER_LIBRARY_NAME@
Cflags: -I${includedir}

View File

@ -0,0 +1 @@
add_subdirectory(Class_MuSR_PSI)

View File

@ -0,0 +1,40 @@
# - Class_MuSR_PSI library ----------------------------------------------------
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(PSIBIN_VERSION "0.1.0")
set(PSIBIN_LIBRARY_NAME "Class_MuSR_PSI")
configure_file("Class_MuSR_PSI.pc.in" "Class_MuSR_PSI.pc" @ONLY)
#--- OS dependent pre-compiler settings for PSI-BIN ---------------------------
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
add_definitions(-D__linux__)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
add_definitions(-D_Darwin_)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
add_definitions(-D_WIN32)
endif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
#--- lib creation -------------------------------------------------------------
add_library(Class_MuSR_PSI SHARED MuSR_td_PSI_bin.cpp)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(Class_MuSR_PSI
PROPERTIES
VERSION ${PSIBIN_VERSION}
)
#--- install Class_MuSR_PSI solib ---------------------------------------------
install(TARGETS Class_MuSR_PSI DESTINATION lib)
#--- install MuSR_td_PSI_bin header -------------------------------------------
install(FILES MuSR_td_PSI_bin.h DESTINATION include)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/Class_MuSR_PSI.pc
DESTINATION lib/pkgconfig
)

53
src/external/MusrRoot/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,53 @@
# - TMusrRunHeader library ----------------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
root_generate_dictionary(
TMusrRunHeaderDict TMusrRunHeader.h LINKDEF TMusrRunHeaderLinkDef.h
)
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(MUSR_ROOT_VERSION "1.0.0")
set(MUSR_ROOT_LIBRARY_NAME "TMusrRunHeader")
configure_file("TMusrRunHeader.pc.in" "TMusrRunHeader.pc" @ONLY)
#--- lib creation -------------------------------------------------------------
add_library(TMusrRunHeader SHARED
TMusrRunHeader.cpp
TMusrRunHeaderDict.cxx
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
TMusrRunHeader BEFORE PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(TMusrRunHeader
PROPERTIES
VERSION ${MUSR_ROOT_VERSION}
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(TMusrRunHeader ${ROOT_LIBRARIES})
#--- install TMusrRunHeader solib ---------------------------------------------
install(TARGETS TMusrRunHeader DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libTMusrRunHeaderDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libTMusrRunHeaderDict.rootmap
DESTINATION lib
)
#--- install TMusrRunHeader header --------------------------------------------
install(FILES TMusrRunHeader.h DESTINATION include)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/TMusrRunHeader.pc
DESTINATION lib/pkgconfig
)

77
src/external/Nonlocal/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,77 @@
# - Nonlocal library ----------------------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
root_generate_dictionary(
PNL_PippardFitterDict
-I${FFTW3_INCLUDE_DIR}
-I${MUSRFIT_INC}
PNL_PippardFitter.h
LINKDEF PNL_PippardFitterLinkDef.h
)
root_generate_dictionary(
PNL_StartupHandlerDict PNL_StartupHandler.h LINKDEF PNL_StartupHandlerLinkDef.h
)
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(PNL_PIPPARDFITTER_VERSION "1.0.0")
set(PNL_PIPPARDFITTER_LIBRARY_NAME "PNL_PippardFitter")
configure_file("PNL_PippardFitter.pc.in" "PNL_PippardFitter.pc" @ONLY)
#--- lib creation -------------------------------------------------------------
add_library(PNL_PippardFitter SHARED
PNL_PippardFitter.cpp
PNL_PippardFitterDict.cxx
PNL_RgeHandler.cpp
PNL_StartupHandler.cpp
PNL_StartupHandlerDict.cxx
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
PNL_PippardFitter BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${MUSRFIT_INC}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(PNL_PippardFitter
PROPERTIES
VERSION ${PNL_PIPPARDFITTER_VERSION}
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(PNL_PippardFitter ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase)
#--- install PNL_PippardFitter solib ------------------------------------------
install(TARGETS PNL_PippardFitter DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitterDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPNL_PippardFitterDict.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandlerDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPNL_StartupHandlerDict.rootmap
DESTINATION lib
)
#--- install PNL_PippardFitter header -----------------------------------------
install(
FILES
PNL_PippardFitter.h
PNL_RgeHandler.h
PNL_StartupHandler.h
DESTINATION
include
)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/PNL_PippardFitter.pc
DESTINATION lib/pkgconfig
)

View File

@ -0,0 +1,10 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: PNL_PippardFitter
Description: C++ shared library providing the nonlocal sc fitter class
Version: @PNL_PIPPARDFITTER_VERSION@
Libs: -L${libdir} -l@PNL_PIPPARDFITTER_LIBRARY_NAME@
Cflags: -I${includedir}

View File

@ -0,0 +1,61 @@
# -TLemRunHeader library ------------------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
root_generate_dictionary(
TLemRunHeaderDict TLemRunHeader.h LINKDEF TLemRunHeaderLinkDef.h
)
root_generate_dictionary(
TLemStatsDict TLemStats.h LINKDEF TLemStatsLinkDef.h
)
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(LEM_VERSION "1.5.0")
set(LEM_LIBRARY_NAME "TLemRunHeader")
configure_file("TLemRunHeader.pc.in" "TLemRunHeader.pc" @ONLY)
#--- lib creation -------------------------------------------------------------
add_library(TLemRunHeader SHARED
TLemRunHeader.cxx
TLemRunHeaderDict.cxx
TLemStats.cxx
TLemStatsDict.cxx
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(TLemRunHeader
PROPERTIES
VERSION ${LEM_VERSION}
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
TLemRunHeader BEFORE PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(TLemRunHeader ${ROOT_LIBRARIES})
#--- install TLemRunHeader solib ----------------------------------------------
install(TARGETS TLemRunHeader DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libTLemRunHeaderDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libTLemRunHeaderDict.rootmap
${CMAKE_CURRENT_BINARY_DIR}/libTLemStatsDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libTLemStatsDict.rootmap
DESTINATION lib
)
#--- install headers ----------------------------------------------------------
install(FILES TLemRunHeader.h TLemStats.h DESTINATION include)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/TLemRunHeader.pc
DESTINATION lib/pkgconfig
)

53
src/external/libBNMR/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,53 @@
# - beta-NMR library ----------------------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
root_generate_dictionary(
TBNMRDict
-I${FFTW3_INCLUDE_DIR}
-I${MUSRFIT_INC}
TBNMR.h
LINKDEF TBNMRLinkDef.h
)
#--- lib creation -------------------------------------------------------------
add_library(BNMR SHARED
TBNMR.cpp
TBNMRDict.cxx
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
BNMR BEFORE PRIVATE
$<BUILD_INTERFACE:${MUSRFIT_INC}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(BNMR
PROPERTIES
VERSION "1.0.0"
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(BNMR ${ROOT_LIBRARIES} PUserFcnBase)
#--- install libBNMR solib ----------------------------------------------------
install(TARGETS BNMR DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libTBNMRDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libTBNMRDict.rootmap
DESTINATION lib
)
#--- install libBNMR header ---------------------------------------------------
install(
FILES
TBNMR.h
DESTINATION
include
)

View File

@ -0,0 +1,81 @@
# - libCalcMeanFieldsLEM library ----------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
set(BMW_TOOLS_INC ${CMAKE_SOURCE_DIR}/src/external/BMWtools)
set(POFB_INC ${CMAKE_SOURCE_DIR}/src/external/libFitPofB/include)
root_generate_dictionary(
TCalcMeanFieldsLEMDict
-I${FFTW3_INCLUDE_DIR}
-I${MUSRFIT_INC}
-I${BMW_TOOLS_INC}
-I${POFB_INC}
TCalcMeanFieldsLEM.h
LINKDEF TCalcMeanFieldsLEMLinkDef.h
)
#--- create pkg-config info ---------------------------------------------------
#[==[ //as35 for now do not create a pkgconfig file
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(T_CALC_MEAN_FIELD_LEM_VERSION "1.0.0")
set(T_CALC_MEAN_FIELD_LEM_LIBRARY_NAME "TCalcMeanFieldsLEM")
configure_file("TCalcMeanFieldsLEM.pc.in" "TCalcMeanFieldsLEM.pc" @ONLY)
#]==]
#--- lib creation -------------------------------------------------------------
add_library(CalcMeanFieldsLEM SHARED
TCalcMeanFieldsLEM.cpp
TCalcMeanFieldsLEMDict.cxx
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(CalcMeanFieldsLEM
PROPERTIES
VERSION "1.0.0"
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
CalcMeanFieldsLEM BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${MUSRFIT_INC}>
$<BUILD_INTERFACE:${BMW_TOOLS_INC}>
$<BUILD_INTERFACE:${POFB_INC}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(CalcMeanFieldsLEM
${FFTW3_LIBRARY} ${ROOT_LIBRARIES} BMWtools FitPofB PUserFcnBase
)
#--- install CalcMeanFieldsLEM solib ------------------------------------------
install(TARGETS CalcMeanFieldsLEM DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libTCalcMeanFieldsLEMDict_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libTCalcMeanFieldsLEMDict.rootmap
DESTINATION lib
)
#--- install CalcMeanFieldsLEM header -----------------------------------------
install(
FILES
TCalcMeanFieldsLEM.h
DESTINATION
include
)
#--- install pkg-config info --------------------------------------------------
#[==[ //as35 for now do not install a pkgconfig file
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/TCalcMeanFieldsLEM.pc
DESTINATION lib/pkgconfig
)
#]==]

1
src/external/libCuba/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1 @@
add_subdirectory(src)

48
src/external/libCuba/src/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,48 @@
# - cuba library --------------------------------------------------------------
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(CUBA_VERSION "4.2.0")
set(CUBA_LIBRARY_NAME "cuba")
configure_file("cuba.pc.in" "cuba.pc" @ONLY)
add_subdirectory(common)
add_subdirectory(cuhre)
add_subdirectory(divonne)
add_subdirectory(suave)
add_subdirectory(vegas)
#--- lib creation -------------------------------------------------------------
add_library(cuba SHARED
$<TARGET_OBJECTS:common>
$<TARGET_OBJECTS:cuhre>
$<TARGET_OBJECTS:divonne>
$<TARGET_OBJECTS:suave>
$<TARGET_OBJECTS:vegas>
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(cuba
PROPERTIES
VERSION ${CUBA_VERSION}
)
#--- install cuba solib -------------------------------------------------------
install(TARGETS cuba DESTINATION lib)
#--- install cuba header ------------------------------------------------------
install(
FILES
cuba.h
DESTINATION
include
)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/cuba.pc
DESTINATION lib/pkgconfig
)

View File

@ -11,7 +11,7 @@ lib_LTLIBRARIES = libcuba.la
libcuba_la_SOURCES =
libcuba_la_LIBADD = cuhre/libcuhre.la divonne/libdivonne.la suave/libsuave.la vegas/libvegas.la -lm
libcuba_la_LIBADD = common/libcommon.la cuhre/libcuhre.la divonne/libdivonne.la suave/libsuave.la vegas/libvegas.la -lm
libcuba_la_LDFLAGS = -version-info $(CUBA_LIBRARY_VERSION) -release $(CUBA_RELEASE) $(AM_LDFLAGS)
pkgconfigdir = $(libdir)/pkgconfig

View File

@ -0,0 +1,31 @@
#--- common -------------------------------------------------------------------
set(common_src Global.c)
set(common_src ${common_src} Data.c)
if (HAVE_FORK)
set(common_src ${common_src} Fork.c)
endif (HAVE_FORK)
#--- obj lib creation ---------------------------------------------------------
add_library(common OBJECT ${common_src})
#--- make sure that the include directory is found ----------------------------
target_include_directories(
common BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
)
#--- check for pre compile flags ----------------------------------------------
set(COMP_DEF "-DHAVE_CONFIG_H")
set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE")
target_compile_definitions(
common PRIVATE ${COMP_DEF}
)
#--- set compiler options -----------------------------------------------------
target_compile_options(
common PRIVATE -fPIC
)

View File

@ -3,19 +3,27 @@
the serial sampling routine
for the C versions of the Cuba routines
by Thomas Hahn
last modified 19 Dec 11 th
last modified 9 Oct 14 th
*/
static inline number SampleRaw(cThis *t, number n, creal *x, real *f
VES_ONLY(, creal *w, ccount iter))
coreinit cubafun_;
extern int cubaverb_;
extern corespec cubaworkers_;
static inline number SampleRaw(This *t, number n, creal *x, real *f,
cint core VES_ONLY(, creal *w, ccount iter))
{
for( ; n; --n ) {
if( t->integrand(&t->ndim, x, &t->ncomp, f, t->userdata
VES_ONLY(, w++, &iter)
number nvec;
for( nvec = t->nvec; n > 0; n -= nvec ) {
nvec = IMin(n, nvec);
if( t->integrand(&t->ndim, x, &t->ncomp, f, t->userdata, &nvec, &core
VES_ONLY(, w, &iter)
DIV_ONLY(, &t->phase)) == ABORT ) return -1;
x += t->ndim;
f += t->ncomp;
VES_ONLY(w += nvec;)
x += nvec*t->ndim;
f += nvec*t->ncomp;
}
return 0;
}
@ -25,8 +33,9 @@ static inline number SampleRaw(cThis *t, number n, creal *x, real *f
static inline void DoSampleSerial(This *t, cnumber n, creal *x, real *f
VES_ONLY(, creal *w, ccount iter))
{
MasterInit();
t->neval += n;
if( SampleRaw(t, n, x, f VES_ONLY(, w, iter)) )
if( SampleRaw(t, n, x, f, -1 VES_ONLY(, w, iter)) )
longjmp(t->abort, -99);
}
@ -43,7 +52,13 @@ DIV_ONLY(static int Explore(This *t, cint iregion);)
#define DoSample DoSampleSerial
#define Explore ExploreSerial
#define ForkCores(t)
#define WaitCores(t)
static inline void WaitCores(This *t, Spin **pspin)
{
if( Invalid(pspin) ) MasterExit();
}
#define WaitCores(t, pspin)
#endif
@ -51,7 +66,7 @@ DIV_ONLY(static int Explore(This *t, cint iregion);)
static inline count SampleExtra(This *t, cBounds *b)
{
number n = t->nextra;
t->peakfinder(&t->ndim, b, &n, t->xextra);
t->peakfinder(&t->ndim, b, &n, t->xextra, t->userdata);
DoSample(t, n, t->xextra, t->fextra);
return n;
}
@ -60,7 +75,7 @@ static inline count SampleExtra(This *t, cBounds *b)
#include "common.c"
#ifdef HAVE_FORK
#include "Fork.c"
#include "Parallel.c"
#endif
#include "Integrate.c"

View File

@ -3,7 +3,7 @@
the chi-square cdf
after W.J. Kennedy and J.E. Gentle,
Statistical computing, p. 116
last modified 9 Feb 05 th
last modified 12 Mar 15 th
*/
#ifdef HAVE_ERF
@ -31,7 +31,7 @@ static real ChiSquare(creal x, cint df)
if( df > 1000 ) {
if( x < 2 ) return 0;
y = 2./(9*df);
y = (pow(x/df, 1/3.) - (1 - y))/sqrt(y);
y = (powx(x/df, 1/3.) - (1 - y))/sqrtx(y);
if( y > 5 ) return 1;
if( y < -18.8055 ) return 0;
return Normal(y);
@ -40,13 +40,13 @@ static real ChiSquare(creal x, cint df)
y = .5*x;
if( df & 1 ) {
creal sqrty = sqrt(y);
creal sqrty = sqrtx(y);
real h = Erf(sqrty);
count i;
if( df == 1 ) return h;
y = sqrty*exp(-y)/.8862269254527579825931;
y = sqrty*expx(-y)/.8862269254527579825931;
for( i = 3; i < df; i += 2 ) {
h -= y;
y *= x/i;
@ -54,7 +54,7 @@ static real ChiSquare(creal x, cint df)
y = h - y;
}
else {
real term = exp(-y), sum = term;
real term = expx(-y), sum = term;
count i;
for( i = 1; i < df/2; ++i )

18
src/external/libCuba/src/common/Data.c vendored Normal file
View File

@ -0,0 +1,18 @@
/*
Data.c
initialized data for Cuba
by Thomas Hahn
last modified 21 Jul 14 th
*/
#include "stddecl.h"
int cubaverb_ = uninitialized;
#ifdef HAVE_FORK
corespec cubaworkers_ = {
uninitialized, uninitialized,
uninitialized, uninitialized };
#endif

View File

@ -4,7 +4,7 @@
= 2/Sqrt[Pi] Integrate[Exp[-t^2], {t, 0, x}]
Code from Takuya Ooura's gamerf2a.f
http://www.kurims.kyoto-u.ac.jp/~ooura/gamerf.html
last modified 8 Feb 05 th
last modified 12 Mar 15 th
*/
@ -21,12 +21,12 @@ static real Erfc(creal x)
1.66642447174307753e-07, 1.48455557345597957e+01,
6.10399733098688199e+00, 1.26974899965115684e+01 };
real y = x*x;
y = exp(-y)*x*(
y = expx(-y)*x*(
c[0]/(y + c[1]) + c[2]/(y + c[3]) +
c[4]/(y + c[5]) + c[6]/(y + c[7]) +
c[8]/(y + c[9]) + c[10]/(y + c[11]) +
c[12]/(y + c[13]) + c[14]/(y + c[15]) );
if( x < c[16] ) y += 2/(exp(c[17]*x) + 1);
if( x < c[16] ) y += 2/(expx(c[17]*x) + 1);
return y;
}
@ -40,7 +40,7 @@ static real Erf(creal x)
-2.68661698447642378e-02,
5.22387877685618101e-03,
-8.49202435186918470e-04 };
real y = fabs(x);
real y = fabsx(x);
if( y > .125 ) {
y = 1 - Erfc(y);
return (x > 0) ? y : -y;

View File

@ -1,422 +1,171 @@
/*
Fork.c
the parallel sampling routine
for the C versions of the Cuba routines
fork the cores for parallel sampling
(C version only)
by Thomas Hahn
last modified 25 Sep 13 th
last modified 23 Apr 15 th
*/
#define MINSLICE 10
#define ROUTINE "cubafork"
#include "stddecl.h"
#ifdef HAVE_FORK
#include "sock.h"
#define MINCORES 1
/*#define MINCORES 2*/
typedef struct {
number n, m, i;
VES_ONLY(count iter;)
DIV_ONLY(int phase SHM_ONLY(, shmid);)
} Slice;
extern coreinit cubafun_;
extern int cubaverb_;
extern corespec cubaworkers_;
workerini cubaini;
/*********************************************************************/
#if defined HAVE_SHMGET && (defined SUAVE || defined DIVONNE)
#define FRAMECOPY
#endif
static inline void Child(cint fd, cint core)
{
dispatch d;
#ifdef DEBUG
#define TERM_RED "\e[31m"
#define TERM_BLUE "\e[34m"
#define TERM_RESET "\e[0m\n"
#define MASTER(s, ...) \
fprintf(stderr, TERM_RED ROUTINE " master %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__)
#define WORKER(s, ...) \
fprintf(stderr, TERM_BLUE ROUTINE " worker %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__)
while( readsock(fd, &d, sizeof d) == sizeof d ) {
if( d.thissize ) {
MemAlloc(d.thisptr, d.thissize);
WORKER("reading This (%lu)", d.thissize);
readsock(fd, d.thisptr, d.thissize);
}
WORKER("running %p on fd %d", d.thisptr, fd);
d.worker(d.thisptr, d.thissize, core, fd);
if( d.thissize ) free(d.thisptr);
}
}
/*********************************************************************/
Extern void SUFFIX(cubafork)(Spin **pspin)
{
char out[128];
int cores, core;
fdpid *pfp;
Spin *spin;
VerboseInit();
EnvInit(cubaworkers_.paccel, "CUBAACCELMAX", 1000);
EnvInit(cubaworkers_.pcores, "CUBACORESMAX", 10000);
EnvInit(cubaworkers_.naccel, "CUBAACCEL", 0);
EnvInit(cubaworkers_.ncores, "CUBACORES", -sysconf(_SC_NPROCESSORS_ONLN));
#ifdef HAVE_GETLOADAVG
if( cubaworkers_.ncores < 0 ) {
static int load = uninitialized;
if( load == uninitialized ) {
double loadavg;
getloadavg(&loadavg, 1);
load = floor(loadavg);
}
cubaworkers_.ncores = IMax(-cubaworkers_.ncores - load, 0);
}
#else
#define MASTER(s, ...)
#define WORKER(s, ...)
cubaworkers_.ncores = abs(cubaworkers_.ncores);
#endif
/*********************************************************************/
#ifndef MSG_WAITALL
/* Windows */
#define MSG_WAITALL 0
#endif
static inline int readsock(int fd, void *data, size_t n)
{
ssize_t got;
size_t remain = n;
do got = recv(fd, data, remain, MSG_WAITALL);
while( got > 0 && (data += got, remain -= got) > 0 );
return got;
}
static inline int writesock(int fd, const void *data, size_t n)
{
ssize_t got;
size_t remain = n;
do got = send(fd, data, remain, MSG_WAITALL);
while( got > 0 && (data += got, remain -= got) > 0 );
return got;
}
/*********************************************************************/
static void DoSample(This *t, number n, creal *x, real *f
VES_ONLY(, creal *w, ccount iter))
{
cint ncores = IMin(t->ncores, n/MINSLICE);
if( ncores < MINCORES ) DoSampleSerial(t, n, x, f VES_ONLY(, w, iter));
else {
Slice slice;
int core, abort;
number nx;
char s[128];
t->neval += n;
nx = n % ncores;
slice.m = slice.n = n/ncores + 1;
if( VERBOSE > 2 ) {
sprintf(s, "sampling " NUMBER " points each on %d cores",
slice.n, ncores);
Print(s);
cores = cubaworkers_.naccel + cubaworkers_.ncores;
if( cores < MINCORES ) {
*pspin = NULL;
return;
}
slice.i = 0;
VES_ONLY(slice.iter = iter;)
DIV_ONLY(slice.phase = t->phase;)
#ifdef DIVONNE
if( n > t->nframe ) {
FrameFree(t, ShmRm(t));
t->nframe = n;
FrameAlloc(t);
}
SHM_ONLY(slice.shmid = t->shmid;)
#endif
SHM_ONLY(if( t->shmid != -1 ) {
slice.m = n;
#ifdef FRAMECOPY
VES_ONLY(Copy(t->frame, w, n);)
Copy(t->frame + n*NW, x, n*t->ndim);
#endif
})
for( core = 0; core < ncores; ++core ) {
cint fd = t->child[core];
slice.n -= (core == nx);
MASTER("sending samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+")
NUMBER "x:%lu]) to fd %d",
sizeof slice, VES_ONLY(slice.n, sizeof *w,)
slice.n, t->ndim*sizeof *x, fd);
writesock(fd, &slice, sizeof slice);
SHM_ONLY(if( t->shmid == -1 )) {
VES_ONLY(writesock(fd, w, slice.n*sizeof *w);
w += slice.n;)
writesock(fd, x, slice.n*t->ndim*sizeof *x);
x += slice.n*t->ndim;
}
slice.i += slice.n;
}
abort = 0;
for( core = 0; core < ncores; ++core ) {
cint fd = t->child[core];
readsock(fd, &slice, sizeof slice);
MASTER("reading samples (sli:%lu[+" NUMBER "f:%lu]) from fd %d",
sizeof slice, slice.n, t->ncomp*sizeof *f, fd);
if( slice.n == -1 ) abort = 1;
else SHM_ONLY(if( t->shmid == -1 )) readsock(fd,
f + slice.i*t->ncomp, slice.n*t->ncomp*sizeof *f);
}
if( abort ) longjmp(t->abort, -99);
#ifdef FRAMECOPY
if( t->shmid != -1 )
Copy(f, t->frame + slice.m*(NW + t->ndim), slice.m*t->ncomp);
#endif
}
}
/*********************************************************************/
#ifdef DIVONNE
static inline int ReadyCore(cThis *t)
{
fd_set ready;
int core, n = 0;
FD_ZERO(&ready);
for( core = 0; core < t->ncores; ++core ) {
FD_SET(t->child[core], &ready);
n = IMax(n, t->child[core]);
}
select(n + 1, &ready, NULL, NULL, NULL);
for( core = 0; core < t->ncores; ++core )
if( FD_ISSET(t->child[core], &ready) ) break;
return core;
}
/*********************************************************************/
typedef struct {
number neval, neval_opt, neval_cut;
count nregions, iregion, retval;
} ExploreResult;
static int Explore(This *t, cint iregion)
{
csize_t regionsize = RegionSize;
Region *region;
int ireg = iregion, core = t->running;
Vector(Totals, totals, NCOMP);
if( t->ncores < MINCORES ) return ExploreSerial(t, iregion);
if( t->running >= ((iregion < 0) ? 1 : t->ncores) ) {
cint fd = t->child[core = ReadyCore(t)];
ExploreResult res;
count comp, succ;
--t->running;
MASTER("reading res + region (res:%lu+reg:%lu) from fd %d",
sizeof res, regionsize, fd);
readsock(fd, &res, sizeof res);
ireg = res.iregion;
region = RegionPtr(ireg);
succ = ireg + region->next;
readsock(fd, region, regionsize);
if( --res.nregions > 0 ) {
region->next = t->nregions - ireg;
EnlargeRegions(t, res.nregions);
MASTER("reading regions (%dreg:%lu) from fd %d",
res.nregions, regionsize, fd);
readsock(fd, RegionPtr(t->nregions), res.nregions*regionsize);
t->nregions += res.nregions;
RegionPtr(t->nregions-1)->next = succ - t->nregions + 1;
}
MASTER("reading totals (tot:%lu) from fd %d",
t->ncomp*sizeof(Totals), fd);
readsock(fd, totals, t->ncomp*sizeof(Totals));
for( comp = 0; comp < t->ncomp; ++comp )
t->totals[comp].secondspread =
Max(t->totals[comp].secondspread, totals[comp].secondspread);
t->neval += res.neval;
t->neval_opt += res.neval_opt;
t->neval_cut += res.neval_cut;
if( res.retval == -1 ) return -1;
}
if( iregion >= 0 ) {
Slice slice;
cint fd = t->child[core];
slice.n = 0;
slice.i = iregion;
slice.phase = t->phase;
region = RegionPtr(iregion);
MASTER("writing region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) to fd %d",
sizeof slice, sizeof(Samples), regionsize,
t->ncomp*sizeof(Totals), fd);
writesock(fd, &slice, sizeof slice);
writesock(fd, &t->samples[region->isamples], sizeof(Samples));
writesock(fd, region, regionsize);
writesock(fd, t->totals, t->ncomp*sizeof(Totals));
region->depth = 0;
++t->running;
}
return ireg;
}
#endif
/*********************************************************************/
static void DoChild(This *t, cint core, cint fd)
{
Slice slice;
#ifdef DIVONNE
csize_t regionsize = RegionSize;
Vector(Totals, totals, NCOMP);
ExploreResult res;
t->totals = totals;
t->ncores = 0; /* no recursive forks */
t->size = 2*t->ndim + 2;
AllocRegions(t);
#endif
#ifdef SUAVE
SHM_ONLY(if( t->shmid == -1 ))
MemAlloc(t->frame, t->nframe*SAMPLESIZE);
#endif
if( cubaini.initfun ) cubaini.initfun(cubaini.initarg);
while( readsock(fd, &slice, sizeof slice) ) {
number n = slice.n;
DIV_ONLY(t->phase = slice.phase;)
if( n > 0 ) {
real VES_ONLY(*w,) *x, *f;
WORKER("reading samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+")
NUMBER "x:%lu]) from fd %d",
sizeof slice, VES_ONLY(n, sizeof *w,) n, t->ndim*sizeof *x, fd);
#ifdef DIVONNE
if( slice.m > t->nframe ) {
FrameFree(t);
t->nframe = slice.m;
SHM_ONLY(t->shmid = slice.shmid; ShmMap(t) else)
MemAlloc(t->frame, t->nframe*SAMPLESIZE);
}
#endif
VES_ONLY(w = t->frame;)
x = t->frame + slice.m*NW;
f = x + slice.m*t->ndim;
SHM_ONLY(if( t->shmid != -1 ) {
VES_ONLY(w += slice.i;)
x += slice.i*t->ndim;
f += slice.i*t->ncomp;
}
else) {
VES_ONLY(readsock(fd, w, n*sizeof *w);)
readsock(fd, x, n*t->ndim*sizeof *x);
}
slice.n |= SampleRaw(t, n, x, f VES_ONLY(, w, slice.iter));
WORKER("writing samples (sli:%lu[+" NUMBER "f:%lu]) to fd %d",
sizeof slice, slice.n, t->ncomp*sizeof *f, fd);
writesock(fd, &slice, sizeof slice);
if( SHM_ONLY(t->shmid == -1 &&) slice.n != -1 )
writesock(fd, f, slice.n*t->ncomp*sizeof *f);
}
#ifdef DIVONNE
else {
Samples *samples, psamples;
WORKER("reading region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) from fd %d",
sizeof slice, sizeof(Samples), regionsize,
t->ncomp*sizeof(Totals), fd);
readsock(fd, &psamples, sizeof(Samples));
readsock(fd, t->region, regionsize);
readsock(fd, totals, t->ncomp*sizeof(Totals));
t->nregions = 1;
t->neval = t->neval_opt = t->neval_cut = 0;
samples = &t->samples[RegionPtr(0)->isamples];
if( psamples.n != samples->n ) {
SamplesFree(samples);
*samples = psamples;
SamplesAlloc(t, samples);
}
res.retval = ExploreSerial(t, 0);
res.neval = t->neval;
res.neval_opt = t->neval_opt;
res.neval_cut = t->neval_cut;
res.nregions = t->nregions;
res.iregion = slice.i;
WORKER("writing regions (res:%lu+%dreg:%lu+tot:%lu) to fd %d",
sizeof res, t->nregions, regionsize,
t->ncomp*sizeof(Totals), fd);
writesock(fd, &res, sizeof res);
writesock(fd, t->region, t->nregions*regionsize);
writesock(fd, totals, t->ncomp*sizeof(Totals));
}
#endif
}
WORKER("wrapping up");
if( cubaini.exitfun ) cubaini.exitfun(cubaini.exitarg);
exit(0);
}
/*********************************************************************/
#ifdef HAVE_GETLOADAVG
double cubaloadavg_;
#endif
static inline void ForkCores(This *t)
{
int core;
char s[128];
cchar *env = getenv("CUBACORES");
t->ncores = env ? atoi(env) : sysconf(_SC_NPROCESSORS_ONLN);
#ifdef HAVE_GETLOADAVG
if( env == NULL || t->ncores < 0 ) {
if( cubaloadavg_ < 0 ) getloadavg(&cubaloadavg_, 1);
t->ncores = abs(t->ncores) - floor(cubaloadavg_);
}
#endif
DIV_ONLY(t->running = 0;)
if( t->ncores < MINCORES ) return;
if( VERBOSE ) {
sprintf(s, "using %d cores via "
if( cubaverb_ ) {
sprintf(out, "using %d cores %d accelerators via "
#ifdef HAVE_SHMGET
"shared memory",
#else
"pipes",
#endif
t->ncores);
Print(s);
cubaworkers_.ncores, cubaworkers_.naccel);
Print(out);
}
fflush(NULL); /* make sure all buffers are flushed,
or else buffered content will be written
out multiply, at each child's exit(0) */
Alloc(t->child, t->ncores);
for( core = 0; core < t->ncores; ++core ) {
MemAlloc(spin, sizeof *spin + cores*sizeof *spin->fp);
spin->spec = cubaworkers_;
pfp = spin->fp;
for( core = -spin->spec.naccel; core < spin->spec.ncores; ++core ) {
int fd[2];
pid_t pid;
//as35 the next two if's fix the crash when compiling with -DNDEBUG
if (socketpair(AF_LOCAL, SOCK_STREAM, 0, fd) == -1)
assert(0);
if ((pid = fork()) == -1)
assert(0);
/*//as35 see comment just above
assert(
socketpair(AF_LOCAL, SOCK_STREAM, 0, fd) != -1 &&
(pid = fork()) != -1 );
*/
if( pid == 0 ) {
close(fd[0]);
DoChild(t, core, fd[1]);
free(spin);
Child(fd[1], core);
exit(0);
}
MASTER("forked pid %d pipe %d(master) -> %d(worker)",
pid, fd[0], fd[1]);
close(fd[1]);
t->child[core] = fd[0];
pfp->fd = fd[0];
pfp->pid = pid;
++pfp;
}
*pspin = spin;
}
/*********************************************************************/
static inline void WaitCores(cThis *t)
Extern void SUFFIX(cubawait)(Spin **pspin)
{
if( t->ncores >= MINCORES ) {
int core;
pid_t pid;
for( core = 0; core < t->ncores; ++core ) {
MASTER("closing fd %d", t->child[core]);
close(t->child[core]);
int cores, core, status;
Spin *spin;
MasterExit();
if( Invalid(pspin) || (spin = *pspin) == NULL ) return;
cores = spin->spec.naccel + spin->spec.ncores;
for( core = 0; core < cores; ++core ) {
MASTER("closing fd %d", spin->fp[core].fd);
close(spin->fp[core].fd);
}
free(t->child);
for( core = 0; core < t->ncores; ++core ) {
#ifdef KILL_WORKERS
for( core = 0; core < cores; ++core ) {
MASTER("killing pid %d", spin->fp[core].pid);
kill(spin->fp[core].pid, SIGKILL);
}
#endif
for( core = 0; core < cores; ++core ) {
DEB_ONLY(pid_t pid;)
MASTER("waiting for child");
wait(&pid);
MASTER("pid %d terminated", pid);
}
DEB_ONLY(pid =) wait(&status);
MASTER("pid %d terminated with exit code %d", pid, status);
}
free(spin);
*pspin = NULL;
}
#else
Extern void SUFFIX(cubafork)(Spin **pspin) {}
Extern void SUFFIX(cubawait)(Spin **pspin)
{
MasterExit();
}
#endif

View File

@ -0,0 +1,58 @@
/*
Global.c
set global vars
by Thomas Hahn
last modified 21 Jul 14 th
*/
#include "stddecl.h"
coreinit cubafun_;
extern int cubaverb_;
#ifdef HAVE_FORK
extern corespec cubaworkers_;
#endif
Extern void SUFFIX(cubaverbose)(cint verb)
{
cubaverb_ = verb;
}
/*********************************************************************/
Extern void SUFFIX(cubacores)(cint n, cint p)
{
#ifdef HAVE_FORK
cubaworkers_.ncores = n;
cubaworkers_.pcores = p;
#endif
}
Extern void SUFFIX(cubaaccel)(cint n, cint p)
{
#ifdef HAVE_FORK
cubaworkers_.naccel = n;
cubaworkers_.paccel = p;
#endif
}
/*********************************************************************/
Extern void SUFFIX(cubainit)(subroutine f, void *arg)
{
cubafun_.initfun = f;
cubafun_.initarg = arg;
}
/*********************************************************************/
Extern void SUFFIX(cubaexit)(subroutine f, void *arg)
{
cubafun_.exitfun = f;
cubafun_.exitarg = arg;
}

View File

@ -3,7 +3,7 @@
the sampling routine for the
Mathematica versions of the Cuba routines
by Thomas Hahn
last modified 19 Mar 12 th
last modified 13 Mar 15 th
*/
@ -11,20 +11,20 @@ static void DoSample(This *t, cnumber n, real *x, real *f
VES_ONLY(, real *w, ccount iter))
{
real *mma_f;
long mma_n;
int mma_n;
if( MLAbort ) longjmp(t->abort, -99);
MLPutFunction(stdlink, "EvaluatePacket", 1);
MLPutFunction(stdlink, "Cuba`" ROUTINE "`sample", 1 VES_ONLY(+2) DIV_ONLY(+1));
MLPutRealList(stdlink, x, n*t->ndim);
VES_ONLY(MLPutRealList(stdlink, w, n);
MLPutRealxList(stdlink, x, n*t->ndim);
VES_ONLY(MLPutRealxList(stdlink, w, n);
MLPutInteger(stdlink, iter);)
DIV_ONLY(MLPutInteger(stdlink, t->phase);)
MLEndPacket(stdlink);
MLNextPacket(stdlink);
if( !MLGetRealList(stdlink, &mma_f, &mma_n) ) {
if( !MLGetRealxList(stdlink, &mma_f, &mma_n) ) {
MLClearError(stdlink);
MLNewPacket(stdlink);
longjmp(t->abort, -99);
@ -33,12 +33,12 @@ static void DoSample(This *t, cnumber n, real *x, real *f
t->neval += mma_n;
if( mma_n != n*t->ncomp ) {
MLDisownRealList(stdlink, mma_f, mma_n);
MLReleaseRealxList(stdlink, mma_f, mma_n);
longjmp(t->abort, -3);
}
Copy(f, mma_f, n*t->ncomp);
MLDisownRealList(stdlink, mma_f, mma_n);
MLReleaseRealxList(stdlink, mma_f, mma_n);
}
/*********************************************************************/
@ -50,16 +50,16 @@ static count SampleExtra(This *t, cBounds *b)
{
count n, nget;
real *mma_f;
long mma_n;
int mma_n;
MLPutFunction(stdlink, "EvaluatePacket", 1);
MLPutFunction(stdlink, "Cuba`Divonne`findpeak", 2);
MLPutRealList(stdlink, (real *)b, 2*t->ndim);
MLPutRealxList(stdlink, (real *)b, 2*t->ndim);
MLPutInteger(stdlink, t->phase);
MLEndPacket(stdlink);
MLNextPacket(stdlink);
if( !MLGetRealList(stdlink, &mma_f, &mma_n) ) {
if( !MLGetRealxList(stdlink, &mma_f, &mma_n) ) {
MLClearError(stdlink);
MLNewPacket(stdlink);
longjmp(t->abort, -99);
@ -73,7 +73,7 @@ static count SampleExtra(This *t, cBounds *b)
Copy(t->fextra, mma_f + nget*t->ndim, n*t->ncomp);
}
MLDisownRealList(stdlink, mma_f, mma_n);
MLReleaseRealxList(stdlink, mma_f, mma_n);
return n;
}

View File

@ -1,12 +1,14 @@
## Process this file with automake to create Makefile.in
c_sources = WorkerIni.c
c_sources = \
Global.c \
Data.c
AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE
AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS)
AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS)
noinst_LTLIBRARIES = libworkerini.la
noinst_LTLIBRARIES = libcommon.la
libworkerini_la_SOURCES = $(c_sources)
libworkerini_la_LDFLAGS = $(AM_LDFLAGS)
libcommon_la_SOURCES = $(c_sources)
libcommon_la_LDFLAGS = $(AM_LDFLAGS)

View File

@ -0,0 +1,441 @@
/*
Parallel.c
the parallel sampling routine
for the C versions of the Cuba routines
by Thomas Hahn
last modified 23 Apr 15 th
*/
#include "sock.h"
#define MINSLICE 10
#define MINCORES 1
/*#define MINCORES 2*/
typedef struct {
number n, m, i;
VES_ONLY(count iter;)
DIV_ONLY(int phase SHM_ONLY(, shmid);)
} Slice;
#if defined HAVE_SHMGET && (defined SUAVE || defined DIVONNE)
#define FRAMECOPY
#endif
Extern void SUFFIX(cubafork)(Spin **);
Extern void SUFFIX(cubawait)(Spin **);
/*********************************************************************/
static inline void DoSampleParallel(This *t, number n, creal *x, real *f
VES_ONLY(, creal *w, ccount iter))
{
char out[128];
Slice slice, rslice;
fd_set ready;
int core, abort, running = 0;
const fdpid *pfp;
Spin *spin = t->spin;
cint paccel = spin->spec.paccel;
cint naccel = IMin(spin->spec.naccel, (n + paccel - 1)/IMax(paccel, 1));
cnumber nrest = IDim(n - naccel*paccel);
cint ncores = IMin(spin->spec.ncores, nrest/MINSLICE);
number pcores = IMin(spin->spec.pcores, nrest/IMax(ncores, 1));
number nx = nrest - ncores*pcores;
if( nx >= ncores ) nx = 0;
t->neval += n;
if( VERBOSE > 2 ) {
sprintf(out, "sampling " NUMBER " points each on %d cores",
pcores, ncores);
Print(out);
}
slice.n = paccel;
slice.m = IMax(slice.n, pcores);
slice.i = 0;
VES_ONLY(slice.iter = iter;)
DIV_ONLY(slice.phase = t->phase;)
#ifdef DIVONNE
if( n > t->nframe ) {
FrameFree(t, Master);
t->nframe = n;
FrameAlloc(t, Master);
}
SHM_ONLY(slice.shmid = t->shmid;)
#endif
SHM_ONLY(if( t->shmid != -1 ) {
slice.m = n;
#ifdef FRAMECOPY
VES_ONLY(Copy(t->frame, w, n);)
Copy(t->frame + n*NW, x, n*t->ndim);
#endif
})
#define PutSamples(fd) do { \
slice.n = IMin(slice.n, n); \
MASTER("sending samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+") \
NUMBER "x:%lu]) to fd %d", \
sizeof slice, VES_ONLY(slice.n, sizeof *w,) \
slice.n, t->ndim*sizeof *x, fd); \
writesock(fd, &slice, sizeof slice); \
SHM_ONLY(if( t->shmid == -1 )) { \
VES_ONLY(writesock(fd, w, slice.n*sizeof *w); \
w += slice.n;) \
writesock(fd, x, slice.n*t->ndim*sizeof *x); \
x += slice.n*t->ndim; \
} \
slice.i += slice.n; \
n -= slice.n; \
++running; \
} while( 0 )
#define GetSamples(fd) do { \
readsock(fd, &rslice, sizeof rslice); \
MASTER("reading samples (sli:%lu[+" NUMBER "f:%lu]) from fd %d", \
sizeof rslice, rslice.n, t->ncomp*sizeof *f, fd); \
if( rslice.n == -1 ) abort = 1; \
else SHM_ONLY(if( t->shmid == -1 )) \
readsock(fd, f + rslice.i*t->ncomp, rslice.n*t->ncomp*sizeof *f); \
--running; \
} while( 0 )
++pcores;
pfp = spin->fp;
for( core = -naccel; n && core < ncores; ++core ) {
cint fd = pfp++->fd;
pcores -= (core == nx);
slice.n = (core < 0) ? paccel : pcores;
PutSamples(fd);
}
abort = 0;
while( running ) {
int fdmax = 0;
FD_ZERO(&ready);
pfp = spin->fp;
for( core = -naccel; core < ncores; ++core ) {
cint fd = pfp++->fd;
FD_SET(fd, &ready);
fdmax = IMax(fdmax, fd);
}
fdmax = select(fdmax + 1, &ready, NULL, NULL, NULL);
pfp = spin->fp;
for( core = -naccel; core < ncores; ++core ) {
cint fd = pfp++->fd;
if( FD_ISSET(fd, &ready) ) {
GetSamples(fd);
if( abort ) break;
if( n ) PutSamples(fd);
if( --fdmax == 0 ) break;
}
}
}
if( abort ) longjmp(t->abort, -99);
#ifdef FRAMECOPY
if( t->shmid != -1 )
Copy(f, t->frame + slice.m*(NW + t->ndim), slice.m*t->ncomp);
#endif
}
/*********************************************************************/
static void DoSample(This *t, number n, creal *x, real *f
VES_ONLY(, creal *w, ccount iter))
{
if( t->spin == NULL ||
t->spin->spec.ncores + t->spin->spec.naccel < MINCORES ||
n < MINCORES*MINSLICE )
DoSampleSerial(t, n, x, f VES_ONLY(, w, iter));
else
DoSampleParallel(t, n, x, f VES_ONLY(, w, iter));
}
/*********************************************************************/
#ifdef DIVONNE
typedef struct {
number neval, neval_opt, neval_cut;
count nregions, iregion, retval;
} ExploreResult;
static inline int ExploreParallel(This *t, cint iregion)
{
Vector(Totals, totals, NCOMP);
csize_t regionsize = RegionSize;
Region *region;
Spin *spin = t->spin;
cint cores = spin->spec.naccel + spin->spec.ncores;
int core = t->running;
int ireg = iregion;
if( core >= ((iregion < 0) ? 1 : cores) ) {
fd_set ready;
int fd = 0, fdmax = 0;
ExploreResult res;
count comp, succ;
FD_ZERO(&ready);
for( core = 0; core < cores; ++core ) {
fd = spin->fp[core].fd;
FD_SET(fd, &ready);
fdmax = IMax(fd, fdmax);
}
select(fdmax + 1, &ready, NULL, NULL, NULL);
for( core = 0; core < cores; ++core ) {
fd = spin->fp[core].fd;
if( FD_ISSET(fd, &ready) ) break;
}
--t->running;
MASTER("reading res + region (res:%lu+reg:%lu) from fd %d",
sizeof res, regionsize, fd);
readsock(fd, &res, sizeof res);
ireg = res.iregion;
region = RegionPtr(ireg);
succ = ireg + region->next;
readsock(fd, region, regionsize);
if( --res.nregions > 0 ) {
region->next = t->nregions - ireg;
EnlargeRegions(t, res.nregions);
MASTER("reading regions (%dreg:%lu) from fd %d",
res.nregions, regionsize, fd);
readsock(fd, RegionPtr(t->nregions), res.nregions*regionsize);
t->nregions += res.nregions;
RegionPtr(t->nregions-1)->next = succ - t->nregions + 1;
}
MASTER("reading totals (tot:%lu) from fd %d",
t->ncomp*sizeof(Totals), fd);
readsock(fd, totals, t->ncomp*sizeof(Totals));
for( comp = 0; comp < t->ncomp; ++comp )
t->totals[comp].secondspread =
Max(t->totals[comp].secondspread, totals[comp].secondspread);
t->neval += res.neval;
t->neval_opt += res.neval_opt;
t->neval_cut += res.neval_cut;
if( res.retval == -1 ) return -1;
}
if( iregion >= 0 ) {
Slice slice;
cint fd = spin->fp[core].fd;
slice.n = 0;
slice.i = iregion;
slice.phase = t->phase;
region = RegionPtr(iregion);
MASTER("writing region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) to fd %d",
sizeof slice, sizeof(Samples), regionsize,
t->ncomp*sizeof(Totals), fd);
writesock(fd, &slice, sizeof slice);
writesock(fd, &t->samples[region->isamples], sizeof(Samples));
writesock(fd, region, regionsize);
writesock(fd, t->totals, t->ncomp*sizeof(Totals));
region->depth = 0;
++t->running;
}
return ireg;
}
/*********************************************************************/
static int Explore(This *t, cint iregion)
{
if( t->spin == NULL ||
t->spin->spec.ncores + t->spin->spec.naccel < MINCORES )
return ExploreSerial(t, iregion);
else
return ExploreParallel(t, iregion);
}
#endif
/*********************************************************************/
static void Worker(This *t, const size_t alloc, cint core, cint fd)
{
Slice slice;
if( readsock(fd, &slice, sizeof slice) == sizeof slice &&
slice.n != -1 ) {
#ifdef DIVONNE
csize_t regionsize = RegionSize;
Vector(Totals, totals, NCOMP);
Spin spin = {{0, 0, 0, 0}}; /* no recursive forks */
t->totals = totals;
t->spin = &spin;
t->size = 2*t->ndim + 2;
AllocRegions(t);
#endif
if( alloc ) {
#ifndef DIVONNE
FrameAlloc(t, Worker);
#endif
#if defined DIVONNE || defined CUHRE
RuleAlloc(t);
#endif
}
#ifdef SUAVE
else SHM_ONLY(if( t->shmid == -1 ))
MemAlloc(t->frame, t->nframe*SAMPLESIZE);
#endif
if( cubafun_.initfun ) cubafun_.initfun(cubafun_.initarg, &core);
do {
number n = slice.n;
WORKER("received slice.n = " NUMBER, n);
DIV_ONLY(t->phase = slice.phase;)
if( n > 0 ) {
real VES_ONLY(*w,) *x, *f;
WORKER("reading samples (sli:%lu[+" VES_ONLY(NUMBER "w:%lu+")
NUMBER "x:%lu]) from fd %d",
sizeof slice, VES_ONLY(n, sizeof *w,) n, t->ndim*sizeof *x, fd);
#ifdef DIVONNE
if( slice.m > t->nframe ) {
FrameFree(t, Worker);
t->nframe = slice.m;
SHM_ONLY(t->shmid = slice.shmid;)
FrameAlloc(t, Worker);
}
#endif
VES_ONLY(w = t->frame;)
x = t->frame + slice.m*NW;
f = x + slice.m*t->ndim;
SHM_ONLY(if( t->shmid != -1 ) {
VES_ONLY(w += slice.i;)
x += slice.i*t->ndim;
f += slice.i*t->ncomp;
}
else) {
VES_ONLY(readsock(fd, w, n*sizeof *w);)
readsock(fd, x, n*t->ndim*sizeof *x);
}
slice.n |= SampleRaw(t, n, x, f, core VES_ONLY(, w, slice.iter));
WORKER("writing samples (sli:%lu[+" NUMBER "f:%lu]) to fd %d",
sizeof slice, slice.n, t->ncomp*sizeof *f, fd);
writesock(fd, &slice, sizeof slice);
if( SHM_ONLY(t->shmid == -1 &&) slice.n != -1 )
writesock(fd, f, slice.n*t->ncomp*sizeof *f);
}
#ifdef DIVONNE
else {
Samples *samples, psamples;
ExploreResult res;
WORKER("reading region (sli:%lu+sam:%lu+reg:%lu+tot:%lu) from fd %d",
sizeof slice, sizeof psamples, regionsize,
t->ncomp*sizeof(Totals), fd);
readsock(fd, &psamples, sizeof psamples);
readsock(fd, t->region, regionsize);
readsock(fd, totals, t->ncomp*sizeof(Totals));
t->nregions = 1;
t->neval = t->neval_opt = t->neval_cut = 0;
samples = &t->samples[RegionPtr(0)->isamples];
if( psamples.n != samples->n ) {
SamplesFree(samples);
*samples = psamples;
SamplesAlloc(t, samples);
}
res.retval = ExploreSerial(t, 0);
res.neval = t->neval;
res.neval_opt = t->neval_opt;
res.neval_cut = t->neval_cut;
res.nregions = t->nregions;
res.iregion = slice.i;
WORKER("writing regions (res:%lu+%dreg:%lu+tot:%lu) to fd %d",
sizeof res, t->nregions, regionsize,
t->ncomp*sizeof(Totals), fd);
writesock(fd, &res, sizeof res);
writesock(fd, t->region, t->nregions*regionsize);
writesock(fd, totals, t->ncomp*sizeof(Totals));
}
#endif
} while( readsock(fd, &slice, sizeof slice) == sizeof slice &&
slice.n != -1 );
if( cubafun_.exitfun ) cubafun_.exitfun(cubafun_.exitarg, &core);
#if defined DIVONNE || defined CUHRE
RuleFree(t);
#endif
FrameFree(t, Worker);
#ifdef DIVONNE
free(t->region);
#endif
}
WORKER("worker wrapping up");
}
/*********************************************************************/
static inline void ForkCores(This *t)
{
dispatch d;
const fdpid *pfp;
int ncores, core;
DIV_ONLY(t->running = 0;)
d.worker = Worker;
d.thisptr = t;
d.thissize = sizeof *t;
if( t->spin == NULL ) {
SUFFIX(cubafork)(&t->spin);
if( t->spin == NULL ) return;
d.thissize = 0;
}
pfp = t->spin->fp;
ncores = t->spin->spec.ncores;
for( core = -t->spin->spec.naccel; core < ncores; ++core ) {
cint fd = pfp++->fd;
writesock(fd, &d, sizeof d);
if( d.thissize ) writesock(fd, t, d.thissize);
}
}
/*********************************************************************/
static inline void WaitCores(This *t, Spin **pspin)
{
if( Invalid(pspin) ) SUFFIX(cubawait)(&t->spin);
else {
Slice slice = { .n = -1 };
cint cores = t->spin->spec.naccel + t->spin->spec.ncores;
const fdpid *pfp = t->spin->fp;
int core;
for( core = 0; core < cores; ++core )
writesock(pfp[core].fd, &slice, sizeof slice);
*pspin = t->spin;
MasterExit();
}
}

View File

@ -1,7 +1,7 @@
/*
Random.c
quasi- and pseudo-random-number generation
last modified 7 Aug 13 th
last modified 18 Mar 14 th
*/
@ -88,14 +88,13 @@ static inline void SobolIni(This *t)
299, 1, 3, 3, 9, 9, 25, 107, 39 };
count dim, bit, nbits;
number max, *pini = ini;
cnumber nmax = 2*t->maxeval;
number *pini = ini, max;
for( nbits = 0, max = 1; max <= nmax; max <<= 1 ) ++nbits;
t->rng.sobol.norm = 1./max;
for( nbits = 0, max = t->maxeval; max; max >>= 1 ) ++nbits;
t->rng.sobol.norm = ldexp(.5, -nbits);
for( bit = 0; bit < nbits; ++bit )
t->rng.sobol.v[0][bit] = (max >>= 1);
for( bit = 0; bit <= nbits; ++bit )
t->rng.sobol.v[0][bit] = (number)1 << (nbits - bit);
for( dim = 1; dim < t->ndim; ++dim ) {
number *pv = t->rng.sobol.v[dim], *pvv = pv;
@ -103,10 +102,10 @@ static inline void SobolIni(This *t)
int inibits = -1, bit;
for( j = powers; j; j >>= 1 ) ++inibits;
memcpy(pv, pini, inibits*sizeof(*pini));
memcpy(pv, pini, inibits*sizeof *pini);
pini += 8;
for( bit = inibits; bit < nbits; ++bit ) {
for( bit = inibits; bit <= nbits; ++bit ) {
number newv = *pvv, j = powers;
int b;
for( b = 0; b < inibits; ++b ) {
@ -117,8 +116,8 @@ static inline void SobolIni(This *t)
++pvv;
}
for( bit = 0; bit < nbits - 1; ++bit )
pv[bit] <<= nbits - bit - 1;
for( bit = 0; bit < nbits; ++bit )
pv[bit] <<= nbits - bit;
}
t->rng.sobol.seq = 0;

View File

@ -1,37 +0,0 @@
/*
WorkerIni.c
set/run the init/exit functions for worker processes
by Thomas Hahn
last modified 6 Sep 12 th
*/
#include "stddecl.h"
extern workerini cubaini;
Extern void SUFFIX(cubasetinit)(subroutine f, void *arg)
{
cubaini.initfun = f;
cubaini.initarg = arg;
}
Extern void SUFFIX(cubasetexit)(subroutine f, void *arg)
{
cubaini.exitfun = f;
cubaini.exitarg = arg;
}
Extern void SUFFIX(cubaruninit)()
{
if( cubaini.initfun ) cubaini.initfun(cubaini.initarg);
}
Extern void SUFFIX(cubarunexit)()
{
if( cubaini.exitfun ) cubaini.exitfun(cubaini.exitarg);
}

65
src/external/libCuba/src/common/sock.h vendored Normal file
View File

@ -0,0 +1,65 @@
/*
sock.h
socket read/write
by Thomas Hahn
last modified 27 May 14 th
*/
#include <sys/socket.h>
#ifdef DEBUG
#define TERM_RED "\e[31m"
#define TERM_BLUE "\e[34m"
#define TERM_RESET "\e[0m\n"
#define MASTER(s, ...) \
fprintf(stderr, TERM_RED ROUTINE " master %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__)
#define WORKER(s, ...) \
fprintf(stderr, TERM_BLUE ROUTINE " worker %d(%d): " s TERM_RESET, core, getpid(), ##__VA_ARGS__)
#define DEB_ONLY(...) __VA_ARGS__
#else
#define MASTER(s, ...)
#define WORKER(s, ...)
#define DEB_ONLY(...)
#endif
#ifdef LOW_LEVEL_DEBUG
#define TERM_GREEN "\e[32m"
#define TERM_MAGENTA "\e[35m"
#define READ(s, ...) \
fprintf(stderr, TERM_GREEN ROUTINE " pid %d: read " s TERM_RESET, getpid(), ##__VA_ARGS__)
#define WRITE(s, ...) \
fprintf(stderr, TERM_MAGENTA ROUTINE " pid %d: write " s TERM_RESET, getpid(), ##__VA_ARGS__)
#else
#define READ(s, ...)
#define WRITE(s, ...)
#endif
/*********************************************************************/
#ifndef MSG_WAITALL
/* Windows */
#define MSG_WAITALL 0
#endif
static inline int readsock(cint fd, void *data, csize_t n)
{
ssize_t got;
size_t remain = n;
do got = recv(fd, data, remain, MSG_WAITALL);
while( got > 0 && (data += got, remain -= got) > 0 );
READ("%lu bytes at %p from fd %d", n, data, fd);
return got;
}
/*********************************************************************/
static inline int writesock(cint fd, const void *data, csize_t n)
{
ssize_t got;
size_t remain = n;
do got = send(fd, data, remain, MSG_WAITALL);
while( got > 0 && (data += got, remain -= got) > 0 );
WRITE("%lu bytes at %p to fd %d", n, data, fd);
return got;
}

View File

@ -1,7 +1,7 @@
/*
stddecl.h
declarations common to all Cuba routines
last modified 17 Sep 13 th
last modified 23 Apr 15 th
*/
@ -12,8 +12,7 @@
#include "config.h"
#endif
#define _BSD_SOURCE
#define _XOPEN_SOURCE
#define _DEFAULT_SOURCE
#include <stdio.h>
#include <stdlib.h>
@ -30,6 +29,7 @@
#ifdef HAVE_FORK
#include <sys/wait.h>
#include <sys/socket.h>
#include <signal.h>
#ifdef HAVE_SHMGET
#include <sys/ipc.h>
#include <sys/shm.h>
@ -83,10 +83,31 @@ void *alloca (size_t);
#define SAMPLESIZE (NW + t->ndim + t->ncomp)*sizeof(real)
enum { uninitialized = 0x61627563 };
#define EnvInit(var, name, default) \
if( var == uninitialized ) { \
cchar *env = getenv(name); \
if( env == NULL ) var = default; \
else { \
var = atoi(env); \
if( cubaverb_ ) { \
char out[64]; \
sprintf(out, "env " name " = %d", (int)var); \
Print(out); \
} \
} \
}
#define VerboseInit() EnvInit(cubaverb_, "CUBAVERBOSE", 0)
#define MaxVerbose(flags) (flags + IDim(IMin(cubaverb_, 3) - ((flags) & 3)))
#define VERBOSE (t->flags & 3)
#define LAST (t->flags & 4)
#define SHARPEDGES (t->flags & 8)
#define KEEPFILE (t->flags & 16)
#define ZAPSTATE (t->flags & 32)
#define REGIONS (t->flags & 128)
#define RNG (t->flags >> 8)
@ -120,7 +141,7 @@ void *alloca (size_t);
#define Zap(d) memset(d, 0, sizeof(d))
#define MaxErr(avg) Max(t->epsrel*fabs(avg), t->epsabs)
#define MaxErr(avg) Max(t->epsrel*fabsx(avg), t->epsabs)
#ifdef __cplusplus
#define mallocset(p, n) (*(void **)&p = malloc(n))
@ -157,8 +178,21 @@ void *alloca (size_t);
#ifdef MLVERSION
#define ML_ONLY(...) __VA_ARGS__
#define ML_NOT(...)
#else
#define ML_ONLY(...)
#define ML_NOT(...) __VA_ARGS__
#define CORE_MASTER (int []){32768}
#define MasterInit() do if( !cubafun_.init ) { \
cubafun_.init = true; \
if( cubafun_.initfun ) cubafun_.initfun(cubafun_.initarg, CORE_MASTER); \
} while( 0 )
#define MasterExit() do if( cubafun_.init ) { \
cubafun_.init = false; \
if( cubafun_.exitfun ) cubafun_.exitfun(cubafun_.exitarg, CORE_MASTER); \
} while( 0 )
#define Invalid(s) ((s) == NULL || *(int *)(s) == -1)
#ifdef HAVE_FORK
#undef FORK_ONLY
@ -168,37 +202,40 @@ void *alloca (size_t);
#undef SHM_ONLY
#define SHM_ONLY(...) __VA_ARGS__
#define ShmMap(t, ...) if( t->shmid != -1 ) { \
t->frame = shmat(t->shmid, NULL, 0); \
if( t->frame == (void *)-1 ) Abort("shmat"); \
__VA_ARGS__ \
}
#define ShmRm(t) shmctl(t->shmid, IPC_RMID, NULL);
#define MasterAlloc(t) \
t->shmid = shmget(IPC_PRIVATE, t->nframe*SAMPLESIZE, IPC_CREAT | 0600)
#define MasterFree(t) shmctl(t->shmid, IPC_RMID, NULL)
#define WorkerAlloc(t)
#define WorkerFree(r)
#undef ShmAlloc
#define ShmAlloc(t, ...) \
t->shmid = shmget(IPC_PRIVATE, t->nframe*SAMPLESIZE, IPC_CREAT | 0600); \
ShmMap(t, __VA_ARGS__)
#define ShmAlloc(t, who) \
who##Alloc(t); \
if( t->shmid != -1 ) { \
t->frame = shmat(t->shmid, NULL, 0); \
if( t->frame == (void *)-1 ) Abort("shmat"); \
}
#undef ShmFree
#define ShmFree(t, ...) if( t->shmid != -1 ) { \
#define ShmFree(t, who) \
if( t->shmid != -1 ) { \
shmdt(t->frame); \
__VA_ARGS__ \
}
who##Free(t); \
}
#endif
#endif
#endif
#define FrameAlloc(t, ...) \
SHM_ONLY(ShmAlloc(t, __VA_ARGS__) else) \
#define FrameAlloc(t, who) \
SHM_ONLY(ShmAlloc(t, who) else) \
MemAlloc(t->frame, t->nframe*SAMPLESIZE);
#define FrameFree(t, ...) DIV_ONLY(if( t->nframe )) { \
SHM_ONLY(ShmFree(t, __VA_ARGS__) else) \
#define FrameFree(t, who) \
DIV_ONLY(if( t->nframe )) { \
SHM_ONLY(ShmFree(t, who) else) \
free(t->frame); \
}
}
#define StateDecl \
@ -219,7 +256,9 @@ struct stat st
typedef long long int signature_t;
#define StateSignature(t, i) (0x41425543 + \
enum { signature = 0x41425543 };
#define StateSignature(t, i) (signature + \
((signature_t)(i) << 60) + \
((signature_t)(t)->ncomp << 48) + \
((signature_t)(t)->ndim << 32))
@ -306,39 +345,100 @@ typedef const count ccount;
#define PREFIX(s) ll##s
#define NUMBER "%lld"
#define NUMBER7 "%7lld"
#define NUMBER_MAX LLONG_MAX
typedef long long int number;
#else
#define PREFIX(s) s
#define NUMBER "%d"
#define NUMBER7 "%7d"
#define NUMBER_MAX INT_MAX
typedef int number;
#endif
typedef const number cnumber;
#define REAL "%g"
#define REALF "%f"
typedef /*long*/ double real;
/* Switching to long double is not as trivial as it
might seem here. sqrt, erf, exp, pow need to be
replaced by their long double versions (sqrtl, ...),
printf formats need to be updated similarly, and
ferrying long doubles to Mathematica is of course
quite another matter, too. */
#define SHOW(r) (double)(r)
/* floating-point numbers are printed with SHOW */
#if REALSIZE == 16
#include <quadmath.h>
typedef __float128 real;
#define RC(x) x##Q
#define sqrtx sqrtq
#define expx expq
#define powx powq
#define erfx erfq
#define fabsx fabsq
#define ldexpx ldexpq
#define REAL_MAX_EXP FLT128_MAX_EXP
#define REAL_MAX FLT128_MAX
#elif REALSIZE == 10
typedef long double real;
#define RC(x) x##L
#define sqrtx sqrtl
#define expx expl
#define powx powl
#define erfx erfl
#define fabsx fabsl
#define ldexpx ldexpl
#define REAL_MAX_EXP LDBL_MAX_EXP
#define REAL_MAX LDBL_MAX
#define MLPutRealxList MLPutReal128List
#define MLGetRealxList MLGetReal128List
#define MLReleaseRealxList MLReleaseReal128List
#else
typedef double real;
#define RC(x) x
#define sqrtx sqrt
#define expx exp
#define powx pow
#define erfx erf
#define fabsx fabs
#define ldexpx ldexp
#define REAL_MAX_EXP DBL_MAX_EXP
#define REAL_MAX DBL_MAX
#define MLPutRealxList MLPutReal64List
#define MLGetRealxList MLGetReal64List
#define MLReleaseRealxList MLReleaseReal64List
#endif
typedef const real creal;
typedef void (*subroutine)();
typedef void (*subroutine)(void *, cint *);
typedef struct {
subroutine initfun;
void *initarg;
subroutine exitfun;
void *exitarg;
} workerini;
bool init;
} coreinit;
typedef struct {
int ncores, naccel;
int pcores, paccel;
} corespec;
typedef struct {
int fd, pid;
} fdpid;
typedef struct {
corespec spec;
fdpid fp[];
} Spin;
struct _this;
typedef struct {
void (*worker)(struct _this *, csize_t, cint, cint);
struct _this *thisptr;
size_t thissize;
} dispatch;
typedef unsigned int state_t;
#define SOBOL_MINDIM 1
@ -407,7 +507,7 @@ static inline real Max(creal a, creal b) {
}
static inline real Weight(creal sum, creal sqsum, cnumber n) {
creal w = sqrt(sqsum*n);
creal w = sqrtx(sqsum*n);
return (n - 1)/Max((w + sum)*(w - sum), NOTZERO);
}
@ -452,7 +552,7 @@ static inline void Print(MLCONST char *s)
#else
#define Print(s) puts(s); fflush(stdout)
#define Print(s) { puts(s); fflush(stdout); }
#endif

View File

@ -2,116 +2,122 @@
cuba.h
Prototypes for the Cuba library
this file is part of Cuba
last modified 30 Apr 13 th
last modified 13 Mar 15 th
*/
typedef double cubareal;
/* integrand_t is intentionally a minimalistic integrand type.
It includes neither the nvec and core arguments nor the
extra arguments passed by Vegas/Suave (weight, iter) and
Divonne (phase).
In most cases, integrand_t is just what you want, otherwise
simply use an explicit typecast to integrand_t in the Cuba
invocation. */
typedef int (*integrand_t)(const int *ndim, const cubareal x[],
const int *ncomp, cubareal f[], void *userdata);
typedef void (*peakfinder_t)(const int *ndim, const cubareal b[],
int *n, cubareal x[], void *userdata);
#ifdef __cplusplus
extern "C" {
#endif
/* NB: Divonne actually passes a fifth argument, a const int *
which points to the integration phase. This is used only
rarely and most users are confused by the warnings the
compiler emits if the `correct' prototype is used. Thus,
if you need to access this argument, use an explicit cast
to integrand_t when invoking Divonne. */
typedef int (*integrand_t)(const int *ndim, const double x[],
const int *ncomp, double f[], void *userdata);
typedef void (*peakfinder_t)(const int *ndim, const double b[],
int *n, double x[]);
void Vegas(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags, const int seed,
const int mineval, const int maxeval,
const int nstart, const int nincrease, const int nbatch,
const int gridno, const char *statefile,
const int gridno, const char *statefile, void *spin,
int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void llVegas(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const long long int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags, const int seed,
const long long int mineval, const long long int maxeval,
const long long int nstart, const long long int nincrease,
const long long int nbatch,
const int gridno, const char *statefile,
const int gridno, const char *statefile, void *spin,
long long int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void Suave(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags, const int seed,
const int mineval, const int maxeval,
const int nnew, const double flatness,
const char *statefile,
const int nnew, const int nmin,
const cubareal flatness, const char *statefile, void *spin,
int *nregions, int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void llSuave(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const long long int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags, const int seed,
const long long int mineval, const long long int maxeval,
const long long int nnew, const double flatness,
const char *statefile,
const long long int nnew, const long long int nmin,
const cubareal flatness, const char *statefile, void *spin,
int *nregions, long long int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void Divonne(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags, const int seed,
const int mineval, const int maxeval,
const int key1, const int key2, const int key3, const int maxpass,
const double border, const double maxchisq, const double mindeviation,
const int ngiven, const int ldxgiven, double xgiven[],
const cubareal border, const cubareal maxchisq, const cubareal mindeviation,
const int ngiven, const int ldxgiven, cubareal xgiven[],
const int nextra, peakfinder_t peakfinder,
const char *statefile,
const char *statefile, void *spin,
int *nregions, int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void llDivonne(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const long long int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags, const int seed,
const long long int mineval, const long long int maxeval,
const int key1, const int key2, const int key3, const int maxpass,
const double border, const double maxchisq, const double mindeviation,
const long long int ngiven, const int ldxgiven, double xgiven[],
const long long int nextra,
void (*peakfinder)(const int *, const double [], int *, double []),
const char *statefile,
const cubareal border, const cubareal maxchisq, const cubareal mindeviation,
const long long int ngiven, const int ldxgiven, cubareal xgiven[],
const long long int nextra, peakfinder_t peakfinder,
const char *statefile, void *spin,
int *nregions, long long int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void Cuhre(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags, const int mineval, const int maxeval,
const int key,
const char *statefile,
const char *statefile, void *spin,
int *nregions, int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void llCuhre(const int ndim, const int ncomp,
integrand_t integrand, void *userdata,
const double epsrel, const double epsabs,
integrand_t integrand, void *userdata, const long long int nvec,
const cubareal epsrel, const cubareal epsabs,
const int flags,
const long long int mineval, const long long int maxeval,
const int key,
const char *statefile,
const char *statefile, void *spin,
int *nregions, long long int *neval, int *fail,
double integral[], double error[], double prob[]);
cubareal integral[], cubareal error[], cubareal prob[]);
void cubasetinit(void (*)(), void *);
void cubasetexit(void (*)(), void *);
void cubaruninit(void);
void cubaruninit(void);
void cubafork(void *pspin);
void cubawait(void *pspin);
void cubacores(const int n, const int p);
void cubaaccel(const int n, const int p);
void cubainit(void (*f)(), void *arg);
void cubaexit(void (*f)(), void *arg);
#ifdef __cplusplus
}

View File

@ -0,0 +1,29 @@
#--- cuhre --------------------------------------------------------------------
#--- obj lib creation ---------------------------------------------------------
add_library(cuhre OBJECT
Cuhre.c
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
cuhre BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../common>
)
#--- check for pre compile flags ----------------------------------------------
set(COMP_DEF "-DHAVE_CONFIG_H")
set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE")
set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libCuhrecubafun_")
target_compile_definitions(
cuhre PRIVATE ${COMP_DEF}
)
#--- set compiler options -----------------------------------------------------
target_compile_options(
cuhre PRIVATE -fPIC
)

View File

@ -2,7 +2,7 @@
Cuhre.c
Adaptive integration using cubature rules
by Thomas Hahn
last modified 17 Sep 13 th
last modified 22 Jul 14 th
*/
@ -15,55 +15,70 @@
/*********************************************************************/
Extern void EXPORT(Cuhre)(ccount ndim, ccount ncomp,
Integrand integrand, void *userdata,
Integrand integrand, void *userdata, cnumber nvec,
creal epsrel, creal epsabs,
cint flags, cnumber mineval, cnumber maxeval,
ccount key, cchar *statefile,
ccount key, cchar *statefile, Spin **pspin,
count *pnregions, number *pneval, int *pfail,
real *integral, real *error, real *prob)
{
This t;
VerboseInit();
t.ndim = ndim;
t.ncomp = ncomp;
t.integrand = integrand;
t.userdata = userdata;
t.nvec = nvec;
t.epsrel = epsrel;
t.epsabs = epsabs;
t.flags = flags;
t.flags = MaxVerbose(flags);
t.mineval = mineval;
t.maxeval = maxeval;
t.key = key;
t.statefile = statefile;
FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;)
*pfail = Integrate(&t, integral, error, prob);
*pnregions = t.nregions;
*pneval = t.neval;
WaitCores(&t, pspin);
}
/*********************************************************************/
Extern void EXPORT(cuhre)(ccount *pndim, ccount *pncomp,
Integrand integrand, void *userdata,
Integrand integrand, void *userdata, cnumber *pnvec,
creal *pepsrel, creal *pepsabs,
cint *pflags, cnumber *pmineval, cnumber *pmaxeval,
ccount *pkey, cchar *statefile,
ccount *pkey, cchar *statefile, Spin **pspin,
count *pnregions, number *pneval, int *pfail,
real *integral, real *error, real *prob, cint statefilelen)
{
This t;
VerboseInit();
t.ndim = *pndim;
t.ncomp = *pncomp;
t.integrand = integrand;
t.userdata = userdata;
t.nvec = *pnvec;
t.epsrel = *pepsrel;
t.epsabs = *pepsabs;
t.flags = *pflags;
t.flags = MaxVerbose(*pflags);
t.mineval = *pmineval;
t.maxeval = *pmaxeval;
t.key = *pkey;
CString(t.statefile, statefile, statefilelen);
FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;)
*pfail = Integrate(&t, integral, error, prob);
*pnregions = t.nregions;
*pneval = t.neval;
WaitCores(&t, pspin);
}

View File

@ -3,7 +3,7 @@
integrate over the unit hypercube
this file is part of Cuhre
checkpointing by B. Chokoufe
last modified 17 Sep 13 th
last modified 14 Mar 15 th
*/
@ -11,6 +11,9 @@
typedef struct pool {
struct pool *next;
#if REALSIZE > 8
void *dummy; /* for alignment */
#endif
char region[];
} Pool;
@ -42,12 +45,14 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
if( VERBOSE > 1 ) {
sprintf(out, "Cuhre input parameters:\n"
" ndim " COUNT "\n ncomp " COUNT "\n"
ML_NOT(" nvec " NUMBER "\n")
" epsrel " REAL "\n epsabs " REAL "\n"
" flags %d\n mineval " NUMBER "\n maxeval " NUMBER "\n"
" key " COUNT "\n"
" statefile \"%s\"",
t->ndim, t->ncomp,
t->epsrel, t->epsabs,
ML_NOT(t->nvec,)
SHOW(t->epsrel), SHOW(t->epsabs),
t->flags, t->mineval, t->maxeval,
t->key,
t->statefile);
@ -61,7 +66,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
RuleAlloc(t);
t->mineval = IMax(t->mineval, t->rule.n + 1);
FrameAlloc(t, ShmRm(t));
FrameAlloc(t, Master);
ForkCores(t);
if( (fail = setjmp(t->abort)) ) goto abort;
@ -125,7 +130,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
for( tot = state->totals, comp = 0; tot < Tot; ++tot )
oe += sprintf(oe, "\n[" COUNT "] "
REAL " +- " REAL " \tchisq " REAL " (" COUNT " df)",
++comp, tot->avg, tot->err, tot->chisq, t->nregions - 1);
++comp, SHOW(tot->avg), SHOW(tot->err),
SHOW(tot->chisq), t->nregions - 1);
Print(out);
}
@ -188,7 +194,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
tot->lastavg += diff = resL->avg + resR->avg - res->avg;
diff = fabs(.25*diff);
diff = fabsx(.25*diff);
err = resL->err + resR->err;
if( err > 0 ) {
creal c = 1 + 2*diff/err;
@ -213,7 +219,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
}
else {
tot->avg = avg;
tot->err = sqrt(sigsq);
tot->err = sqrtx(sigsq);
}
}
++t->nregions;
@ -249,13 +255,13 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
Result *Res;
MLPutFunction(stdlink, "Cuba`Cuhre`region", 2);
MLPutRealList(stdlink, (real *)region->bounds, 2*t->ndim);
MLPutRealxList(stdlink, (real *)region->bounds, 2*t->ndim);
MLPutFunction(stdlink, "List", t->ncomp);
for( Res = (res = RegionResult(region)) + t->ncomp;
res < Res; ++res ) {
real r[] = {res->avg, res->err};
MLPutRealList(stdlink, r, Elements(r));
MLPutRealxList(stdlink, r, Elements(r));
}
}
}
@ -266,9 +272,7 @@ abort:
cur = cur->next;
free(pool);
}
WaitCores(t);
FrameFree(t);
FrameFree(t, Master);
RuleFree(t);
StateRemove(t);

View File

@ -3,7 +3,7 @@
c_sources = Cuhre.c
AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE
AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS)
AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) "-Dcubafun_=libCuhrecubafun_"
AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS)
noinst_LTLIBRARIES = libcuhre.la

View File

@ -4,11 +4,12 @@
code lifted with minor modifications from DCUHRE
by J. Berntsen, T. Espelid, and A. Genz
this file is part of Cuhre
last modified 5 Aug 13 th
last modified 7 May 15 th
*/
#define NextSet(p) p = (Set *)((char *)p + setsize)
#define IndexSet(p, n) ((Set *)((char *)p + n*setsize))
/*********************************************************************/
@ -153,7 +154,7 @@ static void Rule13Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -298,7 +299,7 @@ static void Rule11Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -309,32 +310,55 @@ static void Rule11Alloc(This *t)
static void Rule9Alloc(This *t)
{
static creal w[] = {
-.0023611709677855117884, .11415390023857325268,
-.63833920076702389094, .74849988504685208004,
-.0014324017033399125142, .057471507864489725949,
-.14225104571434243234, -.062875028738286979989,
.254591133248959089, -1.207328566678236261,
.89567365764160676508, -.36479356986049146661,
.0035417564516782676826, -.072609367395893679605,
.10557491625218991012, .0021486025550098687713,
-.032268563892953949998, .010636783990231217481,
.014689102496143490175, .51134708346467591431,
.45976448120806344646, .18239678493024573331,
-.04508628929435784076, .21415883524352793401,
-.027351546526545644722, .054941067048711234101,
.11937596202570775297, .65089519391920250593,
.14744939829434460168, .057693384490973483573,
.034999626602143583822, -1.3868627719278281436,
-.2386668732575008879, .015532417276607053264,
.0035328099607090870236, .09231719987444221619,
.02254314464717892038, .013675773263272822361,
-.32544759695960125297, .0017708782258391338413,
.0010743012775049343856, .25150011495314791996 };
RC(-.002361170967785511788400941242259231309691),
RC(.1141539002385732526821323741697655347686),
RC(-.6383392007670238909386026193674701393074),
RC(.7484998850468520800423030047583803945205),
RC(-.001432401703339912514196154599769007103671),
RC(.05747150786448972594860897296200006759892),
RC(-.1422510457143424323449521620935950679394),
RC(-.06287502873828697998942424881040490136987),
RC(.2545911332489590890011611142429070613156),
RC(-1.207328566678236261002219995185143356737),
RC(.8956736576416067650809467826488567200939),
RC(-.3647935698604914666100134551377381205297),
RC(.003541756451678267682601411863388846964536),
RC(-.07260936739589367960492815865074633743652),
RC(.1055749162521899101218622863269817454540),
RC(.002148602555009868771294231899653510655506),
RC(-.03226856389295394999786630399875134318006),
RC(.01063678399023121748083624225818915724455),
RC(.01468910249614349017540783437728097691502),
RC(.5113470834646759143109387357149329909126),
RC(.4597644812080634464633352781605214342691),
RC(.1823967849302457333050067275688690602649),
RC(-.04508628929435784075980562738240804429658),
RC(.2141588352435279340097929526588394300172),
RC(-.02735154652654564472203690086290223507436),
RC(.05494106704871123410060080562462135546101),
RC(.1193759620257077529708962121565290178730),
RC(.6508951939192025059314756320878023215278),
RC(.1474493982943446016775696826942585013243),
RC(.05769338449097348357291272840392627722165),
RC(.03499962660214358382244159694487155861542),
RC(-1.386862771927828143599782668709014266770),
RC(-.2386668732575008878964134721962088068396),
RC(.01553241727660705326386197156586357005224),
RC(.003532809960709087023561817517751309380604),
RC(.09231719987444221619017126187763868745587),
RC(.02254314464717892037990281369120402214829),
RC(.01367577326327282236101845043145111753718),
RC(-.3254475969596012529657378160439011607639),
RC(.001770878225839133841300705931694423482268),
RC(.001074301277504934385647115949826755327753),
RC(.2515001149531479199576969952416196054795) };
static creal g[] = {
.47795365790226950619, .20302858736911986780,
.44762735462617812882, .125,
.34303789878087814570 };
RC(.4779536579022695061928604197171830064732),
RC(.2030285873691198677998034402373279133258),
RC(.4476273546261781288207704806530998539285),
RC(.125),
RC(.3430378987808781457001426145164678603407) };
enum { nsets = 9 };
@ -440,7 +464,7 @@ static void Rule9Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -451,21 +475,33 @@ static void Rule9Alloc(This *t)
static void Rule7Alloc(This *t)
{
static creal w[] = {
.019417866674748388428, -.40385257701150182546,
.64485668767465982223, .01177982690775806141,
-.18041318740733609012, -.088785828081335044443,
.056328645808285941374, -.0097089333373741942142,
-.99129176779582358138, -.17757165616267008889,
.12359398032043233572, .074978148702033690681,
.55489147051423559776, .088041241522692771226,
.021118358455513385083, -.0099302203239653333087,
-.064100053285010904179, .030381729038221007659,
.0058899134538790307051, -.0048544666686870971071,
.35514331232534017777 };
RC(.01941786667474838842844534313920462333850),
RC(-.4038525770115018254611834753723880293161),
RC(.6448566876746598222277360730193089551024),
RC(.01177982690775806141012214458820955067854),
RC(-.1804131874073360901182293138710989490609),
RC(-.08878582808133504444306598174517276122439),
RC(.05632864580828594137378124255408286479947),
RC(-.009708933337374194214222671569602311669249),
RC(-.9912917677958235813775106862002319060386),
RC(-.1775716561626700888861319634903455224488),
RC(.1235939803204323357183625846672135876752),
RC(.07497814870203369068087999555157339703666),
RC(.5548914705142355977605994477355651401434),
RC(.08804124152269277122645182458858273865209),
RC(.02111835845551338508329573367808085283304),
RC(-.009930220323965333308685820460105538586058),
RC(-.06410005328501090417895544042025034295870),
RC(.03038172903822100765927778829870429682489),
RC(.005889913453879030705061072294104775339268),
RC(-.004854466668687097107111335784801155834624),
RC(.3551433123253401777722639269806910448976) };
static creal g[] = {
.47795365790226950619, .20302858736911986780,
.375, .34303789878087814570 };
RC(.4779536579022695061928604197171830064732),
RC(.2030285873691198677998034402373279133258),
RC(.375),
RC(.3430378987808781457001426145164678603407) };
enum { nsets = 6 };
@ -541,7 +577,7 @@ static void Rule7Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -630,7 +666,8 @@ static void Sample(This *t, Region *region)
Bounds *b, *B = region->bounds + t->ndim;
Result *result = RegionResult(region), *res, *Res = result + t->ncomp;
creal *errcoeff = t->rule.errcoeff;
creal ratio = Sq(first[2].gen[0]/first[1].gen[0]);
creal ratio = Sq(IndexSet(first,2)->gen[0]/
IndexSet(first,1)->gen[0]);
ccount offset = 2*t->ndim*t->ncomp;
count dim, rul, n, maxdim = 0;
@ -659,7 +696,7 @@ static void Sample(This *t, Region *region)
for( dim = 0; dim < t->ndim; ++dim ) {
creal *fp = f1 + t->ncomp;
creal *fm = fp + t->ncomp;
creal fourthdiff = fabs(base +
creal fourthdiff = fabsx(base +
ratio*(fp[0] + fm[0]) - (fp[offset] + fm[offset]));
f1 = fm;
if( fourthdiff > maxdiff ) {
@ -688,7 +725,7 @@ static void Sample(This *t, Region *region)
real maxerr = 0;
for( s = first; s <= last; NextSet(s) )
maxerr = Max(maxerr,
fabs(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]);
fabsx(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]);
sum[rul] = maxerr;
}
@ -712,7 +749,7 @@ static void Sample(This *t, Region *region)
for( res = result, comp = 0; res < Res; ++res )
oe += sprintf(oe, "\n[" COUNT "] "
REAL " +- " REAL, ++comp, res->avg, res->err);
REAL " +- " REAL, ++comp, SHOW(res->avg), SHOW(res->err));
Print(out);
}

View File

@ -2,7 +2,7 @@
decl.h
Type declarations
this file is part of Cuhre
last modified 26 Jul 13 th
last modified 21 Jul 14 th
*/
@ -47,16 +47,18 @@ typedef struct {
typedef const Rule cRule;
typedef int (*Integrand)(ccount *, creal *, ccount *, real *, void *);
typedef int (*Integrand)(ccount *, creal *, ccount *, real *,
void *, cnumber *, cint *);
typedef struct _this {
count ndim, ncomp;
#ifndef MLVERSION
Integrand integrand;
void *userdata;
number nvec;
#ifdef HAVE_FORK
int ncores, *child;
SHM_ONLY(int shmid;)
Spin *spin;
#endif
#endif
real *frame;

View File

@ -0,0 +1,29 @@
#--- divonne ------------------------------------------------------------------
#--- obj lib creation ---------------------------------------------------------
add_library(divonne OBJECT
Divonne.c
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
divonne BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../common>
)
#--- check for pre compile flags ----------------------------------------------
set(COMP_DEF "-DHAVE_CONFIG_H")
set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE")
set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libDivonnecubafun_")
target_compile_definitions(
divonne PRIVATE ${COMP_DEF}
)
#--- set compiler options -----------------------------------------------------
target_compile_options(
divonne PRIVATE -fPIC
)

View File

@ -4,7 +4,7 @@
originally by J.H. Friedman and M.H. Wright
(CERNLIB subroutine D151)
this version by Thomas Hahn
last modified 17 Sep 13 th
last modified 22 Jul 14 th
*/
#define DIVONNE
@ -16,7 +16,7 @@
/*********************************************************************/
Extern void EXPORT(Divonne)(ccount ndim, ccount ncomp,
Integrand integrand, void *userdata,
Integrand integrand, void *userdata, cnumber nvec,
creal epsrel, creal epsabs,
cint flags, cint seed,
cnumber mineval, cnumber maxeval,
@ -24,18 +24,22 @@ Extern void EXPORT(Divonne)(ccount ndim, ccount ncomp,
creal border, creal maxchisq, creal mindeviation,
cnumber ngiven, ccount ldxgiven, real *xgiven,
cnumber nextra, PeakFinder peakfinder,
cchar *statefile,
cchar *statefile, Spin **pspin,
int *pnregions, number *pneval, int *pfail,
real *integral, real *error, real *prob)
{
This t;
VerboseInit();
t.ndim = ndim;
t.ncomp = ncomp;
t.integrand = integrand;
t.userdata = userdata;
t.nvec = nvec;
t.epsrel = epsrel;
t.epsabs = epsabs;
t.flags = flags;
t.flags = MaxVerbose(flags);
t.seed = seed;
t.mineval = mineval;
t.maxeval = maxeval;
@ -52,16 +56,19 @@ Extern void EXPORT(Divonne)(ccount ndim, ccount ncomp,
t.nextra = nextra;
t.peakfinder = peakfinder;
t.statefile = statefile;
FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;)
*pfail = Integrate(&t, integral, error, prob);
*pnregions = t.nregions;
*pneval = t.neval;
WaitCores(&t, pspin);
}
/*********************************************************************/
Extern void EXPORT(divonne)(ccount *pndim, ccount *pncomp,
Integrand integrand, void *userdata,
Integrand integrand, void *userdata, cnumber *pnvec,
creal *pepsrel, creal *pepsabs,
cint *pflags, cint *pseed,
cnumber *pmineval, cnumber *pmaxeval,
@ -69,18 +76,22 @@ Extern void EXPORT(divonne)(ccount *pndim, ccount *pncomp,
creal *pborder, creal *pmaxchisq, creal *pmindeviation,
cnumber *pngiven, ccount *pldxgiven, real *xgiven,
cnumber *pnextra, PeakFinder peakfinder,
cchar *statefile,
cchar *statefile, Spin **pspin,
int *pnregions, number *pneval, int *pfail,
real *integral, real *error, real *prob, cint statefilelen)
{
This t;
VerboseInit();
t.ndim = *pndim;
t.ncomp = *pncomp;
t.integrand = integrand;
t.userdata = userdata;
t.nvec = *pnvec;
t.epsrel = *pepsrel;
t.epsabs = *pepsabs;
t.flags = *pflags;
t.flags = MaxVerbose(*pflags);
t.seed = *pseed;
t.mineval = *pmineval;
t.maxeval = *pmaxeval;
@ -97,9 +108,12 @@ Extern void EXPORT(divonne)(ccount *pndim, ccount *pncomp,
t.nextra = *pnextra;
t.peakfinder = peakfinder;
CString(t.statefile, statefile, statefilelen);
FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;)
*pfail = Integrate(&t, integral, error, prob);
*pnregions = t.nregions;
*pneval = t.neval;
WaitCores(&t, pspin);
}

View File

@ -2,7 +2,7 @@
Explore.c
sample region, determine min and max, split if necessary
this file is part of Divonne
last modified 2 Aug 13 th
last modified 12 Mar 15 th
*/
@ -19,10 +19,11 @@ static int ExploreSerial(This *t, ccount iregion)
Region *region = RegionPtr(iregion);
cBounds *bounds = region->bounds;
Result *result = RegionResult(region);
real *minmax = RegionMinMax(region);
Vector(Extrema, extrema, NCOMP);
Vector(real, xtmp, NDIM);
Result *r, *r0;
Result *r;
creal *x;
real *f;
real halfvol, maxerr;
@ -102,7 +103,7 @@ skip:
ftmp = FindMinimum(t, bounds, xtmp, e->fmin);
if( ftmp < r->fmin ) {
r->fmin = ftmp;
XCopy(&r->xminmax[0], xtmp);
XCopy(&minmax[2*comp*t->ndim], xtmp);
}
t->selectedcomp = Tag(comp);
@ -110,12 +111,12 @@ skip:
ftmp = -FindMinimum(t, bounds, xtmp, -e->fmax);
if( ftmp > r->fmax ) {
r->fmax = ftmp;
XCopy(&r->xminmax[t->ndim], xtmp);
XCopy(&minmax[(2*comp + 1)*t->ndim], xtmp);
}
}
r->spread = halfvol*(r->fmax - r->fmin);
err = r->spread/Max(fabs(r->avg), NOTZERO);
err = r->spread/Max(fabsx(r->avg), NOTZERO);
if( err > maxerr ) {
maxerr = err;
maxcomp = comp;
@ -130,22 +131,22 @@ skip:
}
region->cutcomp = maxcomp;
r0 = RegionResult(region);
r = r0 + maxcomp;
r = RegionResult(region) + maxcomp;
if( halfvol*(r->fmin + r->fmax) > r->avg ) {
region->fminor = r->fmin;
region->fmajor = r->fmax;
region->xmajor = &r->xminmax[t->ndim] - (real *)r0;
region->xmajor = (2*maxcomp + 1)*t->ndim;
}
else {
region->fminor = r->fmax;
region->fmajor = r->fmin;
region->xmajor = &r->xminmax[0] - (real *)r0;
region->xmajor = 2*maxcomp*t->ndim;
}
if( region->isamples == 0 ) {
if( (region->depth < INIDEPTH && r->spread < samples->neff*r->err) ||
r->spread < t->totals[maxcomp].secondspread ) region->depth = 0;
r->spread < t->totals[maxcomp].secondspread )
region->depth = 0;
if( region->depth == 0 )
for( comp = 0; comp < t->ncomp; ++comp )
t->totals[comp].secondspread =

View File

@ -2,7 +2,7 @@
FindMinimum.c
find minimum (maximum) of hyperrectangular region
this file is part of Divonne
last modified 7 Aug 13 th
last modified 12 Mar 15 th
*/
@ -42,7 +42,7 @@ static inline real Dot(ccount n, creal *a, creal *b)
static inline real Length(ccount n, creal *vec)
{
return sqrt(Dot(n, vec, vec));
return sqrtx(Dot(n, vec, vec));
}
/*********************************************************************/
@ -120,7 +120,7 @@ static void UpdateCholesky(cThis *t, ccount n, real *hessian,
p[i] = dir;
gamma += Sq(dir)/Hessian(i, i);
}
gamma = Max(fabs(1 - gamma), EPS);
gamma = Max(fabsx(1 - gamma), EPS);
while( --i >= 0 ) {
creal dir = z[i] = p[i];
@ -154,7 +154,7 @@ static inline void BFGS(cThis *t, ccount n, real *hessian,
c = Dot(n, g, p);
if( c >= 0 ) return;
c = 1/sqrt(-c);
c = 1/sqrtx(-c);
for( i = 0; i < n; ++i )
y[i] = c*g[i];
UpdateCholesky(t, n, hessian, y, p);
@ -199,7 +199,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree,
c) the gradient is positive, i.e. we'd move uphill */
if( step > 0 && range > tol2 && grad <= 0 ) {
creal eps = RTEPS*fabs(range) + ftol;
creal eps = RTEPS*fabsx(range) + ftol;
creal mingrad = -1e-4*grad, maxgrad = -gtol*grad;
real end = range + eps;
@ -225,7 +225,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree,
maxstep = maxstep*(1 + .75*RTEPS) + .75*tol;
}
cur.dx = (fabs(step) >= tol) ? step : (step > 0) ? tol : -tol;
cur.dx = (fabsx(step) >= tol) ? step : (step > 0) ? tol : -tol;
dist = distmin + cur.dx;
for( i = 0; i < nfree; ++i ) {
ccount dim = ifree[i];
@ -248,7 +248,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree,
if( cur.dx < 0 ) b = w;
else a = w;
tol = RTEPS*fabs(distmin) + ftol;
tol = RTEPS*fabsx(distmin) + ftol;
tol2 = tol + tol;
}
else {
@ -260,14 +260,14 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree,
if( distmin + b.dx <= xtol ) break;
if( min.f < fini &&
a.f - min.f <= fabs(a.dx)*maxgrad &&
(fabs(distmin - range) > tol || maxstep < b.dx) ) break;
a.f - min.f <= fabsx(a.dx)*maxgrad &&
(fabsx(distmin - range) > tol || maxstep < b.dx) ) break;
mid = .5*(a.dx + b.dx);
if( fabs(mid) <= tol2 - .5*(b.dx - a.dx) ) break;
if( fabsx(mid) <= tol2 - .5*(b.dx - a.dx) ) break;
r = q = s = 0;
if( fabs(end) > tol ) {
if( fabsx(end) > tol ) {
if( first ) {
creal s1 = w.dx*grad;
creal s2 = w.f - min.f;
@ -281,7 +281,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree,
q = 2*(s2 - s1);
}
if( q > 0 ) s = -s;
q = fabs(q);
q = fabsx(q);
r = end;
if( step != b1 || b.dx <= maxstep ) end = step;
}
@ -290,15 +290,15 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree,
else if( b.dx > maxstep ) step = (step < b.dx) ? -4*a.dx : maxstep;
else {
real num = a.dx, den = b.dx;
if( fabs(b.dx) <= tol || (w.dx > 0 && fabs(a.dx) > tol) )
if( fabsx(b.dx) <= tol || (w.dx > 0 && fabsx(a.dx) > tol) )
num = b.dx, den = a.dx;
num /= -den;
step = (num < 1) ? .5*den*sqrt(num) : 5/11.*den*(.1 + 1/num);
step = (num < 1) ? .5*den*sqrtx(num) : 5/11.*den*(.1 + 1/num);
}
if( step > 0 ) a1 = a.dx, b1 = step;
else a1 = step, b1 = b.dx;
if( fabs(s) < fabs(.5*q*r) && s > q*a1 && s < q*b1 ) {
if( fabsx(s) < fabsx(.5*q*r) && s > q*a1 && s < q*b1 ) {
step = s/q;
if( step - a.dx < tol2 || b.dx - step < tol2 )
step = (mid > 0) ? tol : -tol;
@ -307,7 +307,7 @@ static Point LineSearch(This *t, ccount nfree, ccount *ifree,
}
first = true;
if( fabs(distmin - range) < tol ) {
if( fabsx(distmin - range) < tol ) {
distmin = range;
if( maxstep > b.dx ) first = false;
}
@ -372,7 +372,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree,
or we come close to a border. */
XCopy(y, x);
ftest = SUFTOL*(1 + fabs(fx));
ftest = SUFTOL*(1 + fabsx(fx));
delta = RTDELTA/5;
do {
delta = Min(5*delta, smax);
@ -381,7 +381,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree,
y[dim] = x[dim] + delta*p[i];
}
fy = Sample(t, y);
if( fabs(fy - fx) > ftest ) break;
if( fabsx(fy - fx) > ftest ) break;
} while( delta != smax );
/* Construct a second direction p' orthogonal to p, i.e. p.p' = 0.
@ -425,7 +425,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree,
or we come close to a border. */
XCopy(z, y);
ftest = SUFTOL*(1 + fabs(fy));
ftest = SUFTOL*(1 + fabsx(fy));
delta = RTDELTA/5;
do {
delta = Min(5*delta, smax);
@ -434,7 +434,7 @@ static real LocalSearch(This *t, ccount nfree, ccount *ifree,
z[dim] = y[dim] + delta*p[i];
}
fz = Sample(t, z);
if( fabs(fz - fy) > ftest ) break;
if( fabsx(fz - fy) > ftest ) break;
} while( delta != smax );
if( fy != fz ) {
@ -541,12 +541,12 @@ static real FindMinimum(This *t, cBounds *b, real *xmin, real fmin)
bool resample = false;
nfree = nfix = 0;
for( dim = 0; dim < t->ndim; ++dim ) {
if( xmin[dim] < b[dim].lower + (1 + fabs(b[dim].lower))*QEPS ) {
if( xmin[dim] < b[dim].lower + (1 + fabsx(b[dim].lower))*QEPS ) {
xmin[dim] = b[dim].lower;
ifix[nfix++] = dim;
resample = true;
}
else if( xmin[dim] > b[dim].upper - (1 + fabs(b[dim].upper))*QEPS ) {
else if( xmin[dim] > b[dim].upper - (1 + fabsx(b[dim].upper))*QEPS ) {
xmin[dim] = b[dim].upper;
ifix[nfix++] = Tag(dim);
resample = true;
@ -562,7 +562,7 @@ static real FindMinimum(This *t, cBounds *b, real *xmin, real fmin)
if( local || Length(nfree, gfree) > GTOL ) break;
ftmp = LocalSearch(t, nfree, ifree, b, xmin, fmin, tmp);
if( ftmp > fmin - (1 + fabs(fmin))*RTEPS )
if( ftmp > fmin - (1 + fabsx(fmin))*RTEPS )
goto releasebounds;
fmin = ftmp;
XCopy(xmin, tmp);
@ -586,7 +586,7 @@ static real FindMinimum(This *t, cBounds *b, real *xmin, real fmin)
minstep = INFTY;
for( i = 0; i < nfree; ++i ) {
count dim = Untag(ifree[i]);
if( fabs(p[i]) > EPS ) {
if( fabsx(p[i]) > EPS ) {
real step;
count fix;
if( p[i] < 0 ) {
@ -642,11 +642,11 @@ fixbound:
BFGS(t, nfree, hessian, tmp, gfree, p, low.dx);
XCopy(gfree, tmp);
if( fabs(low.dx - minstep) < QEPS*minstep ) goto fixbound;
if( fabsx(low.dx - minstep) < QEPS*minstep ) goto fixbound;
fdiff = fini - fmin;
fini = fmin;
if( fdiff > (1 + fabs(fmin))*FTOL ||
if( fdiff > (1 + fabsx(fmin))*FTOL ||
low.dx*plen > (1 + Length(t->ndim, xmin))*FTOL ) continue;
}
}

View File

@ -5,7 +5,7 @@
then do a main integration over all regions
this file is part of Divonne
checkpointing by B. Chokoufe
last modified 5 Aug 13 th
last modified 13 Mar 15 th
*/
@ -29,8 +29,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
Totals *tot, *Tot = state->totals + t->ncomp;
Bounds *b, *B;
Result *res;
count comp, err, iregion;
number nwant;
count comp, iregion;
number nwant, err;
real nneed;
ML_ONLY(number neff;)
int fail;
@ -38,6 +38,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
if( VERBOSE > 1 ) {
sprintf(out, "Divonne input parameters:\n"
" ndim " COUNT "\n ncomp " COUNT "\n"
ML_NOT(" nvec " NUMBER "\n")
" epsrel " REAL "\n epsabs " REAL "\n"
" flags %d\n seed %d\n"
" mineval " NUMBER "\n maxeval " NUMBER "\n"
@ -46,11 +47,12 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
" ngiven " NUMBER "\n nextra " NUMBER "\n"
" statefile \"%s\"",
t->ndim, t->ncomp,
t->epsrel, t->epsabs,
ML_NOT(t->nvec,)
SHOW(t->epsrel), SHOW(t->epsabs),
t->flags, t->seed,
t->mineval, t->maxeval,
t->key1, t->key2, t->key3, t->maxpass,
t->border.lower, t->maxchisq, t->mindeviation,
SHOW(t->border.lower), SHOW(t->maxchisq), SHOW(t->mindeviation),
t->ngiven, t->nextra,
t->statefile);
Print(out);
@ -132,7 +134,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
/* Step 1: partition the integration region */
if( t->phase == 1 ) {
if( VERBOSE ) Print("Partitioning phase:");
if( VERBOSE ) Print("\nPartitioning phase:");
if( ini ) Iterate(t, 0, INIDEPTH, 0, NULL);
@ -164,7 +166,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
integral[comp] = tot->avg;
valid += tot->avg == tot->avg;
if( tot->spreadsq > maxtot->spreadsq ) maxtot = tot;
tot->spread = sqrt(tot->spreadsq);
tot->spread = sqrtx(tot->spreadsq);
error[comp] = tot->spread/t->samples[0].neff;
}
@ -197,7 +199,7 @@ if( StateWriteTest(t) ) { \
for( comp = 0; comp < t->ncomp; ++comp )
oe += sprintf(oe, "\n[" COUNT "] "
REAL " +- " REAL,
comp + 1, integral[comp], error[comp]);
comp + 1, SHOW(integral[comp]), SHOW(error[comp]));
Print(out);
}
@ -230,7 +232,7 @@ if( StateWriteTest(t) ) { \
tot->maxerrsq = Sq(maxerr);
tot->mindevsq = tot->maxerrsq*Sq(t->mindeviation);
}
nwant = (number)Min(ceil(nneed), MARKMASK/40.);
nwant = (number)Min(ceil(nneed), NWANTMAX/40.);
err = SamplesLookup(t, &t->samples[1], t->key2, nwant,
(t->maxeval - t->neval)/t->nregions + 1, t->samples[0].n + 1);
@ -308,11 +310,11 @@ refine:
Iterate(t, state->iregion, POSTDEPTH, 1, state->totals);
if( can_adjust ) {
cnumber nnew = (tot->spreadsq/Sq(MARKMASK) > tot->maxerrsq) ?
MARKMASK :
(number)ceil(sqrt(tot->spreadsq/tot->maxerrsq));
cnumber nnew = (tot->spreadsq/Sq(NWANTMAX) > tot->maxerrsq) ?
NWANTMAX :
(number)ceil(sqrtx(tot->spreadsq/tot->maxerrsq));
if( nnew > nwant + nwant/64 ) {
ccount err = SamplesLookup(t, &t->samples[1], t->key2, nnew,
cnumber err = SamplesLookup(t, &t->samples[1], t->key2, nnew,
(t->maxeval - t->neval)/t->nregions + 1, t->samples[1].n);
fail += Unmark(err)*t->nregions;
nwant = nnew;
@ -404,14 +406,14 @@ refine:
if( chisq > EPS ) chisq /= Max(chiden, NOTZERO);
if( VERBOSE > 2 ) {
#define Out2(f, r) (r)->avg, res->spread/t->samples[f].neff, (r)->err
#define Out2(f, r) SHOW((r)->avg), SHOW(res->spread/t->samples[f].neff), SHOW((r)->err)
#define Out(f) Out2(f, &tot->phase[f])
oe += sprintf(oe, "\n[" COUNT "] "
REAL " +- " REAL "(" REAL ")\n "
REAL " +- " REAL "(" REAL ")", ++comp, Out(0), Out(1));
if( todo == 3 ) oe += sprintf(oe, "\n "
REAL " +- " REAL "(" REAL ")", Out2(2, res));
oe += sprintf(oe, " \tchisq " REAL, chisq);
oe += sprintf(oe, " \tchisq " REAL, SHOW(chisq));
}
tot->integral += avg;
@ -419,7 +421,7 @@ refine:
tot->chisq += chisq;
res->avg = avg;
res->spread = sqrt(sigsq);
res->spread = sqrtx(sigsq);
res->chisq = chisq;
}
@ -433,7 +435,7 @@ refine:
for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp ) {
integral[comp] = tot->integral;
error[comp] = sqrt(tot->sigsq);
error[comp] = sqrtx(tot->sigsq);
prob[comp] = ChiSquare(tot->chisq, df);
}
@ -442,7 +444,8 @@ refine:
for( tot = state->totals, comp = 0; tot < Tot; ++tot, ++comp )
oe += sprintf(oe, "\n[" COUNT "] "
REAL " +- " REAL " \tchisq " REAL " (" COUNT " df)",
comp + 1, integral[comp], error[comp], tot->chisq, df);
comp + 1, SHOW(integral[comp]), SHOW(error[comp]),
SHOW(tot->chisq), df);
Print(out);
}
@ -468,12 +471,12 @@ refine:
MLPutFunction(stdlink, "Cuba`Divonne`region", 4);
MLPutRealList(stdlink, bounds, 2*t->ndim);
MLPutRealxList(stdlink, bounds, 2*t->ndim);
MLPutFunction(stdlink, "List", t->ncomp);
for( Res = (res = RegionResult(region)) + t->ncomp; res < Res; ++res ) {
real r[] = {res->avg, res->spread/neff, res->chisq};
MLPutRealList(stdlink, r, Elements(r));
MLPutRealxList(stdlink, r, Elements(r));
}
MLPutInteger(stdlink, region->depth + 1); /* misused for df */
@ -482,8 +485,7 @@ refine:
#endif
abort:
WaitCores(t);
FORK_ONLY(FrameFree(t, ShmRm(t));)
FORK_ONLY(FrameFree(t, Master);)
RuleFree(t);
SamplesFree(&t->samples[2]);

View File

@ -2,7 +2,7 @@
Iterate.c
recursion over regions
this file is part of Divonne
last modified 2 Aug 13 th
last modified 12 Mar 15 th
*/
@ -85,10 +85,10 @@ FORK_ONLY(more:)
norm = 1./nsplit--;
for( res = RegionResult(parent), c = corr; c < C; ++res, ++c ) {
creal diff = fabs(res->avg - c->avg)*norm;
creal diff = fabsx(res->avg - c->avg)*norm;
c->avg = diff*norm*nsplit;
c->err = (c->err == 0) ? 1 : 1 + diff/c->err;
c->spread = (c->spread == 0) ? 1 : 1 + diff/sqrt(c->spread);
c->spread = (c->spread == 0) ? 1 : 1 + diff/sqrtx(c->spread);
}
for( td = todo; td < tdmax; ++td )

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,267 @@
#define KOROBOV_MINDIM 2
#define KOROBOV_MAXDIM 33
#define MAXPRIME 2423
#define Hash(x) ((4973 - x)*(-47 + x))/25245
static int prime[] = {
FIRST,47,53,59,61,67,73,79,83,89,97,101,103,109,113,127,131,137,139,149,
151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,
251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,
359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,
463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,
593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,
701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,
827,829,839,853,857,859,863,877,881,887,907,911,919,929,937,941,947,953,
967,971,977,983,991,997,1009,1019,1021,1033,1039,1051,1061,1069,1087,
1091,1097,1103,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,
1217,1229,1237,1249,1259,1277,1279,1289,1297,1307,1319,1327,1361,1367,
1373,1381,1399,1409,1423,1427,1429,1439,1453,1459,1481,1489,1499,1511,
1523,1543,1553,1567,1579,1597,1607,1621,1637,1657,1663,1669,1697,1709,
1723,1741,1759,1777,1789,1811,1831,1847,1867,1889,1907,1931,1951,1973,
1999,2027,2053,2081,2111,2143,2179,2221,2269,2333,MarkLast(2423)
};
static short coeff[][32] = {
{13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2},
{23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14},
{18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5},
{17,21,7,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,2,2,2,6,2,2,2,17,7},
{18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2},
{27,14,10,14,2,4,13,2,2,16,4,4,4,6,6,6,6,6,6,25,25,31,31,15,31,2,2,31,15,14,14,6},
{29,19,27,32,6,8,2,2,2,2,2,8,8,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2},
{30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2},
{35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17},
{39,40,15,21,11,26,13,2,2,13,2,2,2,2,2,2,2,2,2,2,26,26,2,2,2,2,2,2,2,2,2,2},
{37,21,35,29,27,19,19,2,2,2,5,15,2,2,15,15,19,19,19,19,19,2,2,2,2,2,19,2,2,2,2,2},
{45,44,13,25,17,47,30,2,30,2,2,2,2,2,2,2,2,2,19,19,19,17,17,2,2,2,2,2,2,2,2,2},
{35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10},
{29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25},
{50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2},
{31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2},
{39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2},
{44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2},
{56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16},
{46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15},
{62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9},
{46,49,49,52,27,7,20,2,2,6,6,13,13,13,2,13,13,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2},
{64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2},
{74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58},
{70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2},
{81,18,10,11,47,38,71,37,2,37,2,2,2,2,2,26,26,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{71,68,68,27,71,39,81,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2},
{64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2},
{68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2},
{94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66},
{94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8},
{89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32},
{70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63},
{70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2},
{71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11},
{109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55},
{75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2},
{80,38,62,66,39,59,2,36,48,33,2,2,41,2,48,48,2,2,2,2,2,2,48,2,2,2,2,2,2,2,2,2},
{81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56},
{109,72,60,96,67,32,85,84,27,91,91,2,10,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2},
{81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13},
{119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54},
{115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33},
{119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65},
{121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2},
{129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16},
{128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98},
{101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2},
{106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2},
{105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79},
{109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2},
{115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80},
{119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2},
{121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2},
{155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96},
{179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39},
{136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36},
{131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91},
{165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41},
{169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37},
{135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{179,104,117,56,132,56,190,130,130,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146},
{144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2},
{145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2},
{191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2},
{186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2},
{151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143},
{144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136},
{189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2},
{165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95},
{169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2},
{211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2},
{154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2},
{169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2},
{229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71},
{165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2},
{221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52},
{230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97},
{181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2},
{239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144},
{234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47},
{179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2},
{246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103},
{239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2},
{177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195},
{259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2},
{264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2},
{264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284},
{194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2},
{196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2},
{271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2},
{288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2},
{311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113},
{311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2},
{176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2},
{283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2},
{334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2},
{240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263},
{246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2},
{229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2},
{251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185},
{232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90},
{246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2},
{356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2},
{322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101},
{264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83},
{254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88},
{341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125},
{355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53},
{349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125},
{283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2},
{287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22},
{284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285},
{359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2},
{288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2},
{277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2},
{292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2},
{282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323},
{282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2},
{374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122},
{288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167},
{286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2},
{398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2},
{390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2},
{408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2},
{417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2},
{456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158},
{432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234},
{437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2},
{430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139},
{434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2},
{453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252},
{438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81},
{324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2},
{512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2},
{478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2},
{485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2},
{378,406,112,198,539,550,516,59,240,240,23,316,2,122,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,95,2,2},
{495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2},
{485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2},
{507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2},
{380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445},
{507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2},
{509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2},
{572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2},
{430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2},
{434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401},
{542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217},
{546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456},
{555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2},
{576,301,142,329,96,41,302,528,126,112,206,206,2,2,2,2,2,2,206,206,2,206,206,2,191,206,206,191,191,191,191,206},
{622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2},
{445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528},
{425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{433,294,192,205,152,70,99,68,392,169,309,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,199,2,2,2},
{437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2},
{610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6},
{612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343},
{486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2},
{462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2},
{639,253,95,380,108,448,223,254,381,30,6,644,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2},
{521,249,388,155,467,245,134,311,72,312,312,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383},
{672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2},
{791,275,60,137,352,839,67,476,356,216,216,563,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222},
{539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{872,630,513,218,719,174,197,104,86,281,281,281,541,642,281,94,2,45,94,2,335,335,2,2,2,2,2,2,2,2,2,84},
{744,466,389,280,229,134,363,177,389,2,2,2,536,273,536,536,536,536,168,45,45,45,45,2,2,2,2,2,2,2,2,2},
{468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2},
{563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79},
{781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2},
{818,280,99,873,165,426,341,74,479,342,727,684,684,662,662,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2},
{901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418},
{859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{612,237,272,53,534,682,372,935,494,536,536,599,599,599,2,536,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2},
{927,493,988,194,97,1006,377,578,105,248,707,784,98,784,2,2,2,2,2,2,2,2,2,370,370,2,370,2,2,2,2,2}
};

View File

@ -0,0 +1,356 @@
#define KOROBOV_MINDIM 2
#define KOROBOV_MAXDIM 33
#define MAXPRIME 3319
#define Hash(x) ((6967 - x)*(-47 + x))/36952
static int prime[] = {
FIRST,47,53,59,61,67,73,79,83,89,97,101,107,113,127,131,137,139,149,
151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,
251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,
359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,
463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,
593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,
701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,
827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,
953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,
1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,
1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,
1259,1277,1279,1283,1291,1297,1307,1319,1321,1327,1361,1367,1373,1381,
1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1493,
1499,1511,1523,1531,1543,1549,1559,1567,1579,1583,1597,1607,1613,1621,
1637,1657,1663,1667,1669,1693,1697,1699,1709,1723,1733,1747,1753,1759,
1777,1787,1801,1811,1823,1831,1847,1861,1867,1877,1889,1901,1913,1931,
1933,1949,1951,1973,1979,1993,2003,2017,2029,2039,2053,2069,2081,2099,
2111,2129,2137,2153,2161,2179,2203,2207,2221,2237,2243,2267,2273,2293,
2309,2333,2339,2351,2371,2389,2399,2417,2437,2459,2473,2503,2521,2531,
2549,2557,2591,2609,2621,2647,2671,2693,2713,2741,2767,2789,2819,2843,
2879,2897,2927,2963,2999,3037,3079,3121,3181,3229,MarkLast(3319)
};
static short coeff[][32] = {
{13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2},
{23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14},
{18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5},
{17,21,7,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,2,2,2,6,2,2,2,17,7},
{18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2},
{27,14,10,14,2,4,13,2,2,16,4,4,4,6,6,6,6,6,6,25,25,31,31,15,31,2,2,31,15,14,14,6},
{29,19,27,32,6,8,2,2,2,2,2,8,8,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2},
{30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2},
{35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17},
{39,40,15,21,11,26,13,2,2,13,2,2,2,2,2,2,2,2,2,2,26,26,2,2,2,2,2,2,2,2,2,2},
{41,22,15,7,26,29,29,2,2,2,2,2,2,41,41,2,2,2,31,31,2,31,31,2,31,2,2,2,2,2,2,2},
{35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10},
{29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25},
{50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2},
{31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2},
{39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2},
{44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2},
{56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16},
{46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15},
{62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9},
{46,49,49,52,27,7,20,2,2,6,6,13,13,13,2,13,13,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2},
{64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2},
{74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58},
{70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2},
{81,18,10,11,47,38,71,37,2,37,2,2,2,2,2,26,26,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{71,68,68,27,71,39,81,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2},
{64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2},
{68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2},
{94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66},
{94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8},
{89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32},
{70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63},
{70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2},
{71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11},
{109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55},
{75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2},
{80,38,62,66,39,59,2,36,48,33,2,2,41,2,48,48,2,2,2,2,2,2,48,2,2,2,2,2,2,2,2,2},
{81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56},
{109,72,60,96,67,32,85,84,27,91,91,2,10,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2},
{81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13},
{119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54},
{115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33},
{119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65},
{121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2},
{129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16},
{128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98},
{101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2},
{106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2},
{105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79},
{109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2},
{115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80},
{119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2},
{121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2},
{155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96},
{179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39},
{136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36},
{131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91},
{165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41},
{169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37},
{135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{179,104,117,56,132,56,190,130,130,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146},
{144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2},
{145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2},
{191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2},
{186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2},
{151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143},
{144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136},
{189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2},
{165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95},
{169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2},
{211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2},
{154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2},
{169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2},
{229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71},
{165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2},
{221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52},
{230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97},
{181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2},
{239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144},
{234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47},
{179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2},
{246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103},
{239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2},
{177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195},
{259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2},
{264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2},
{264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284},
{194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2},
{196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2},
{271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2},
{288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2},
{311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113},
{311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2},
{176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2},
{283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2},
{334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2},
{240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263},
{246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2},
{229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2},
{251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185},
{232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90},
{246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2},
{356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2},
{322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{337,132,27,45,14,81,110,84,238,224,211,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101},
{264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83},
{254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88},
{341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125},
{355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53},
{349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125},
{283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2},
{287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22},
{284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285},
{359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2},
{288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2},
{277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2},
{292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2},
{282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323},
{299,122,174,403,113,77,63,275,2,2,2,138,276,227,38,227,2,237,2,2,2,2,2,2,2,2,2,2,352,352,352,2},
{282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2},
{374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122},
{288,92,62,428,122,153,481,66,2,2,2,250,250,177,177,177,177,279,279,279,279,279,279,279,2,2,279,177,177,177,177,177},
{288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167},
{286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2},
{407,83,435,187,40,16,52,65,2,2,244,39,77,119,119,2,2,2,119,342,342,2,2,2,2,2,342,2,2,58,58,119},
{398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2},
{390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2},
{393,129,393,169,23,192,168,47,2,2,312,150,71,2,150,2,2,2,61,2,2,61,2,2,2,2,2,2,2,2,2,2},
{408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2},
{415,130,241,185,312,175,309,199,94,281,47,47,2,2,2,2,206,307,221,2,2,2,2,2,239,239,239,239,239,206,206,206},
{417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2},
{456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158},
{307,255,92,38,325,61,103,246,176,319,80,89,2,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234},
{437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2},
{430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139},
{434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2},
{453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252},
{438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81},
{324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{448,119,431,111,135,50,242,95,148,49,49,49,68,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2},
{335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{468,377,243,237,332,512,27,167,22,169,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{445,391,115,226,96,456,239,214,556,158,158,282,2,2,2,2,2,2,2,2,2,2,2,2,2,331,2,2,2,2,2,2},
{360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2},
{512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2},
{478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2},
{485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2},
{490,331,187,398,407,373,497,219,423,423,378,378,2,419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{474,373,248,330,40,113,105,273,103,407,2,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2},
{485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2},
{364,462,360,383,182,187,123,69,129,146,2,156,149,2,149,2,2,2,2,2,2,2,303,303,303,2,2,2,2,2,149,266},
{507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2},
{380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445},
{507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2},
{509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2},
{572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2},
{430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2},
{434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401},
{542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217},
{546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{602,466,332,458,99,244,255,183,446,670,2,186,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,165,165,165,165},
{422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456},
{522,141,154,253,264,53,120,93,274,52,44,203,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{600,249,375,555,421,322,317,84,517,517,268,106,353,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,302,2,2},
{555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{544,177,79,306,256,402,205,496,398,115,115,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2},
{548,538,508,250,539,102,73,285,119,433,480,480,2,2,2,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2},
{445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528},
{453,121,489,84,434,505,78,575,468,372,468,468,83,468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{432,479,328,443,253,634,271,429,406,543,406,543,543,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{456,383,487,311,57,579,673,264,582,187,184,43,43,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2},
{437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2},
{463,341,170,401,178,79,305,98,162,166,32,392,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{629,225,67,623,298,588,354,49,41,185,176,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,32,435,435},
{448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6},
{612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343},
{486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2},
{612,327,212,565,450,385,201,649,423,491,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{495,440,89,439,65,207,459,407,139,131,624,2,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{646,393,273,238,24,13,253,127,368,316,316,316,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2},
{670,555,160,90,604,604,50,459,376,545,316,180,526,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{642,160,702,90,157,254,278,521,650,277,74,554,122,2,2,2,2,2,2,517,174,174,174,2,2,2,2,2,2,2,2,2},
{678,254,190,197,637,49,130,25,374,357,357,411,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2},
{512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2},
{660,624,376,472,165,66,158,308,492,779,305,305,2,576,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{408,348,216,299,302,668,347,63,172,141,272,168,678,2,2,2,512,2,2,2,2,4,2,2,2,494,64,64,64,128,16,512},
{669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383},
{693,530,139,82,780,416,270,278,330,484,484,200,2,2,2,2,137,94,2,2,2,2,2,2,2,2,484,2,2,2,2,2},
{672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{684,229,138,46,407,399,82,254,267,31,31,45,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{555,543,434,78,850,174,277,194,4,100,471,69,69,424,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2},
{703,427,225,320,136,47,103,547,239,217,73,68,68,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{703,312,472,588,228,512,386,668,477,617,389,389,389,2,296,2,2,2,2,343,343,2,2,343,343,2,2,617,617,617,617,2},
{709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222},
{587,453,117,107,672,86,248,568,568,294,294,513,78,2,2,164,82,2,2,2,2,22,2,2,2,2,2,2,2,2,2,2},
{741,466,378,135,737,131,159,469,59,2,59,59,187,2,204,2,2,2,2,2,2,2,2,2,798,2,2,798,798,798,798,798},
{539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{547,210,113,361,584,121,65,307,98,2,2,552,514,514,2,514,207,514,514,514,2,2,2,2,2,2,2,2,2,2,2,2},
{580,145,358,434,630,73,604,366,366,2,2,398,398,207,2,207,487,2,2,487,207,2,2,207,207,207,2,2,2,2,207,207},
{765,421,129,298,867,365,222,476,401,142,90,22,22,88,226,657,2,2,477,2,2,2,2,2,226,226,2,226,2,2,2,226},
{587,553,360,539,227,800,312,143,536,2,2,2,64,64,64,2,2,2,179,179,493,2,2,184,184,184,58,2,2,2,493,493},
{841,222,158,469,253,91,347,241,766,2,2,2,88,88,88,439,439,439,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{462,653,478,67,269,150,474,711,220,669,669,669,669,669,390,352,325,2,229,545,545,545,545,545,545,545,545,2,545,352,309,352},
{468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2},
{792,169,306,843,246,123,293,229,483,2,2,2,165,163,163,163,163,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79},
{802,533,869,638,67,192,805,223,219,2,2,191,178,178,77,77,2,2,2,2,431,431,2,2,2,431,431,2,2,431,2,2},
{781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2},
{780,359,766,618,41,596,86,636,287,707,707,96,49,373,613,373,2,2,2,2,2,2,2,613,613,613,2,2,2,2,2,2},
{622,309,913,550,994,90,257,588,29,526,526,526,496,496,576,2,2,2,2,2,182,182,182,2,2,447,447,447,447,447,447,182},
{593,411,953,203,89,57,785,354,349,424,424,707,707,707,829,2,2,2,2,2,670,670,670,2,2,424,424,424,2,2,670,424},
{629,560,621,245,683,633,495,551,472,2,31,74,489,684,555,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418},
{669,321,391,548,189,157,337,42,796,871,276,622,30,2,2,2,2,2,2,2,580,580,107,2,2,2,2,2,434,434,434,434},
{610,236,633,300,681,358,72,281,148,466,466,283,275,2,386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{822,581,76,382,72,347,964,324,137,61,61,28,623,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{867,820,301,252,61,331,105,309,562,218,365,326,768,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{859,844,510,859,118,190,550,29,159,622,622,382,258,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{843,730,235,233,816,495,598,134,131,604,227,378,378,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{670,595,333,257,907,413,548,341,327,350,612,700,700,700,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{877,181,375,79,199,256,223,295,135,371,395,354,2,307,944,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2},
{865,675,786,568,112,197,225,348,372,497,215,215,2,2,2,2,159,159,150,224,224,141,2,2,2,2,141,141,141,141,141,141},
{898,559,396,742,51,143,411,221,116,756,756,756,2,2,2,701,701,2,2,2,2,240,225,256,322,322,240,240,240,240,240,322},
{982,579,548,413,416,103,71,101,1039,526,684,684,2,2,656,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,656,656},
{642,757,247,513,372,54,546,971,271,61,61,1018,2,143,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{865,827,614,74,725,685,724,190,178,272,835,722,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{718,359,103,558,684,560,67,35,120,342,680,265,265,265,2,2,265,2,2,2,2,2,2,2,2,2,430,2,2,2,2,2},
{900,455,485,601,353,69,67,965,25,226,314,314,883,923,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{912,516,108,555,306,274,55,197,565,174,659,208,441,441,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{940,226,320,666,269,54,542,174,109,290,754,524,649,2,202,2,2,2,2,2,2,2,776,202,776,776,776,2,2,202,202,202},
{672,652,792,253,796,404,171,90,406,433,43,159,72,2,2,372,2,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{733,439,537,37,149,650,916,443,743,621,921,664,664,2,2,2,2,2,682,523,523,523,2,2,523,523,523,523,523,523,523,523},
{982,344,812,567,243,52,246,369,439,205,600,739,730,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{936,409,217,57,574,395,481,245,548,268,447,598,375,2,192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{755,796,877,981,259,194,1180,215,90,658,662,662,662,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{949,422,941,491,66,786,592,429,307,123,40,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1077,496,819,340,974,122,39,1209,819,18,461,648,648,394,2,2,2,2,2,2,61,2,2,2,2,2,394,2,2,2,2,394},
{1083,356,367,357,559,213,606,477,71,103,790,103,299,299,2,2,2,2,2,2,406,406,2,2,2,2,2,2,2,2,2,2},
{738,749,769,610,306,326,328,578,479,840,840,840,68,192,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1094,640,912,223,67,472,623,623,1244,65,1009,1209,1209,812,387,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,1209,234},
{1028,730,807,119,209,146,230,498,164,309,309,2,2,2,693,912,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{802,298,672,424,104,623,152,159,476,760,66,2,2,2,215,215,490,490,490,2,2,2,2,2,490,490,490,490,490,490,490,490},
{1004,719,1041,460,551,516,135,417,130,698,698,2,2,2,655,655,655,655,655,2,2,2,2,2,2,2,2,2,2,2,2,2},
{818,301,273,664,206,971,895,590,912,523,523,2,2,452,384,255,2,130,130,130,130,865,2,2,2,255,2,2,2,2,2,2},
{1078,527,589,244,170,892,827,606,1165,773,189,2,2,240,22,2,2,2,2,2,2,759,621,621,621,621,621,621,621,621,621,621},
{1157,395,446,280,1130,695,668,271,111,882,477,615,615,615,2,2,2,2,2,2,2,2,615,615,615,615,615,615,615,2,305,2},
{1050,749,809,479,87,757,288,172,597,722,4,418,418,390,2,2,2,2,2,390,390,2,2,2,2,2,2,2,2,2,2,2},
{1057,385,263,395,901,274,727,340,1117,263,813,870,858,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1120,665,311,695,319,1033,511,297,602,1030,1030,714,240,240,2,2,2,2,2,2,2,2,2,2,2,2,2,953,2,2,2,2},
{1120,1159,358,347,838,207,357,167,476,52,672,38,822,2,2,2,2,2,2,213,2,2,2,2,2,2,2,2,2,2,2,2},
{820,461,681,382,273,273,358,274,274,91,887,676,386,2,676,676,2,2,2,2,2,2,2,200,2,2,2,2,200,2,2,2},
{1148,585,868,1282,666,417,733,1231,515,332,1213,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{898,782,478,1208,196,983,608,537,196,1141,141,296,715,715,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1142,370,287,925,307,1232,129,11,1284,1056,33,33,536,521,2,1286,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847},
{1192,555,586,516,1288,733,64,653,364,273,421,215,75,75,2,2,2,2,2,2,953,953,953,953,8,383,383,2,161,383,953,953},
{966,590,140,297,189,844,633,12,847,742,742,244,281,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1247,353,973,217,1044,1318,1115,319,203,390,1244,225,2,2,508,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1015,593,112,1408,51,104,199,221,931,1010,928,928,2,2,878,878,2,2,2,2,731,731,2,731,731,2,731,2,731,731,731,2}
};

View File

@ -0,0 +1,571 @@
#define KOROBOV_MINDIM 2
#define KOROBOV_MAXDIM 33
#define MAXPRIME 5879
#define Hash(x) ((12013 - x)*(-47 + x))/68400
static int prime[] = {
FIRST,47,53,59,67,71,73,83,89,97,101,103,109,113,127,131,137,139,149,
151,157,163,167,173,179,181,191,197,199,211,223,227,229,233,239,241,251,
257,263,269,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,
373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,
479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,
601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,
719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,
839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,
971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,
1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,
1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,
1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,
1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,
1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,
1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,
1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,
1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,
1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,
2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,
2113,2129,2131,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,
2243,2251,2267,2269,2273,2281,2293,2297,2309,2311,2333,2339,2347,2357,
2371,2377,2383,2393,2399,2411,2423,2437,2441,2447,2459,2467,2477,2503,
2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,
2647,2657,2659,2671,2677,2687,2699,2707,2719,2729,2741,2749,2753,2767,
2777,2791,2803,2819,2833,2837,2843,2857,2861,2879,2887,2897,2909,2917,
2927,2939,2953,2963,2971,2999,3001,3011,3023,3037,3041,3061,3067,3079,
3089,3109,3119,3121,3137,3163,3167,3169,3187,3191,3209,3221,3229,3251,
3259,3271,3299,3301,3307,3319,3331,3347,3359,3371,3389,3391,3413,3433,
3449,3457,3463,3469,3491,3499,3517,3529,3547,3559,3571,3583,3593,3613,
3631,3643,3659,3671,3691,3701,3719,3733,3739,3761,3779,3793,3803,3821,
3833,3853,3863,3881,3907,3917,3931,3947,3967,3989,4001,4013,4027,4049,
4073,4079,4099,4127,4139,4157,4177,4201,4211,4231,4253,4271,4289,4297,
4327,4349,4373,4391,4409,4423,4451,4481,4493,4519,4547,4567,4591,4621,
4637,4663,4691,4721,4733,4759,4793,4817,4861,4877,4909,4943,4973,5003,
5039,5077,5113,5147,5189,5231,5273,5323,5381,5431,5483,5557,5623,5737,
MarkLast(5879)
};
static short coeff[][32] = {
{13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2},
{23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14},
{18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5},
{18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2},
{21,22,7,21,2,20,20,2,2,2,2,22,2,2,2,2,2,2,2,6,6,21,2,2,2,2,2,2,2,2,6,6},
{27,14,10,14,2,4,13,2,2,16,4,4,4,6,6,6,6,6,6,25,25,31,31,15,31,2,2,31,15,14,14,6},
{30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2},
{35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17},
{39,40,15,21,11,26,13,2,2,13,2,2,2,2,2,2,2,2,2,2,26,26,2,2,2,2,2,2,2,2,2,2},
{37,21,35,29,27,19,19,2,2,2,5,15,2,2,15,15,19,19,19,19,19,2,2,2,2,2,19,2,2,2,2,2},
{45,44,13,25,17,47,30,2,30,2,2,2,2,2,2,2,2,2,19,19,19,17,17,2,2,2,2,2,2,2,2,2},
{35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10},
{29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25},
{50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2},
{31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2},
{39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2},
{44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2},
{56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16},
{46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15},
{62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9},
{46,49,49,52,27,7,20,2,2,6,6,13,13,13,2,13,13,2,2,2,2,2,2,34,34,2,2,2,2,2,2,2},
{64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2},
{74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58},
{70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2},
{71,68,68,27,71,39,81,44,2,2,2,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2},
{64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2},
{68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2},
{94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66},
{94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8},
{89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32},
{70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63},
{70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2},
{71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11},
{109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55},
{75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2},
{81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56},
{109,72,60,96,67,32,85,84,27,91,91,2,10,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2},
{81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13},
{119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54},
{115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33},
{119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65},
{121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2},
{129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16},
{128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98},
{101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2},
{106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2},
{105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79},
{109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2},
{115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80},
{119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2},
{121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2},
{155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96},
{179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39},
{136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36},
{131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91},
{165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41},
{169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37},
{135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{179,104,117,56,132,56,190,130,130,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146},
{144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2},
{145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2},
{191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2},
{186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2},
{151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143},
{144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136},
{189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2},
{165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95},
{169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2},
{211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2},
{154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2},
{169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2},
{229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71},
{165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2},
{221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52},
{230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97},
{181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2},
{239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144},
{234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47},
{179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2},
{246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103},
{239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2},
{177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195},
{259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2},
{264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2},
{264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284},
{194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2},
{196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2},
{271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2},
{288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2},
{311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113},
{311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2},
{176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2},
{283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2},
{334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2},
{240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263},
{246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2},
{229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2},
{251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185},
{232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90},
{246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2},
{356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2},
{322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{337,132,27,45,14,81,110,84,238,224,211,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101},
{264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83},
{254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88},
{341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125},
{355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53},
{349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125},
{283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2},
{287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22},
{284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285},
{359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2},
{288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2},
{277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2},
{292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2},
{282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323},
{299,122,174,403,113,77,63,275,2,2,2,138,276,227,38,227,2,237,2,2,2,2,2,2,2,2,2,2,352,352,352,2},
{282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2},
{374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122},
{288,92,62,428,122,153,481,66,2,2,2,250,250,177,177,177,177,279,279,279,279,279,279,279,2,2,279,177,177,177,177,177},
{288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167},
{286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2},
{407,83,435,187,40,16,52,65,2,2,244,39,77,119,119,2,2,2,119,342,342,2,2,2,2,2,342,2,2,58,58,119},
{398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2},
{390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2},
{393,129,393,169,23,192,168,47,2,2,312,150,71,2,150,2,2,2,61,2,2,61,2,2,2,2,2,2,2,2,2,2},
{408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2},
{415,130,241,185,312,175,309,199,94,281,47,47,2,2,2,2,206,307,221,2,2,2,2,2,239,239,239,239,239,206,206,206},
{417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2},
{456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158},
{307,255,92,38,325,61,103,246,176,319,80,89,2,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234},
{437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2},
{430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139},
{434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2},
{453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252},
{438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81},
{324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{448,119,431,111,135,50,242,95,148,49,49,49,68,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2},
{335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{468,377,243,237,332,512,27,167,22,169,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{445,391,115,226,96,456,239,214,556,158,158,282,2,2,2,2,2,2,2,2,2,2,2,2,2,331,2,2,2,2,2,2},
{360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2},
{512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2},
{478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2},
{485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2},
{490,331,187,398,407,373,497,219,423,423,378,378,2,419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{378,406,112,198,539,550,516,59,240,240,23,316,2,122,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,95,2,2},
{474,373,248,330,40,113,105,273,103,407,2,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{498,447,112,241,552,119,227,189,140,140,140,140,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{505,132,169,418,342,28,319,301,172,530,317,317,335,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,2},
{397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2},
{485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2},
{364,462,360,383,182,187,123,69,129,146,2,156,149,2,149,2,2,2,2,2,2,2,303,303,303,2,2,2,2,2,149,266},
{507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2},
{380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445},
{507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2},
{509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2},
{572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2},
{430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2},
{434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401},
{542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217},
{546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{602,466,332,458,99,244,255,183,446,670,2,186,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,165,165,165,165},
{422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456},
{522,141,154,253,264,53,120,93,274,52,44,203,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{600,249,375,555,421,322,317,84,517,517,268,106,353,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,302,2,2},
{555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{544,177,79,306,256,402,205,496,398,115,115,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2},
{400,136,112,136,273,277,205,578,122,122,230,230,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2},
{576,421,115,52,253,373,17,657,43,178,178,58,485,485,485,485,485,485,2,2,2,159,159,159,159,2,619,2,2,2,2,2},
{576,301,142,329,96,41,302,528,126,112,206,206,2,2,2,2,2,2,206,206,2,206,206,2,191,206,206,191,191,191,191,206},
{548,538,508,250,539,102,73,285,119,433,480,480,2,2,2,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2},
{445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528},
{453,121,489,84,434,505,78,575,468,372,468,468,83,468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{432,479,328,443,253,634,271,429,406,543,406,543,543,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{433,294,192,205,152,70,99,68,392,169,309,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,199,2,2,2},
{456,383,487,311,57,579,673,264,582,187,184,43,43,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2},
{437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{434,372,239,508,478,26,375,255,151,151,650,112,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2},
{463,341,170,401,178,79,305,98,162,166,32,392,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{611,211,491,224,47,54,124,268,271,271,223,2,2,2,2,2,2,2,2,2,2,2,2,359,2,2,2,2,2,2,2,2},
{590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{478,388,612,404,491,561,180,80,262,58,94,2,2,275,2,2,2,2,2,151,2,2,2,2,2,312,312,312,2,2,2,275},
{629,225,67,623,298,588,354,49,41,185,176,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,32,435,435},
{671,275,392,298,612,328,337,215,58,58,124,2,2,490,392,2,2,2,125,457,457,2,2,2,2,2,2,2,2,2,2,457},
{448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{667,246,160,68,737,203,168,628,46,128,358,2,2,2,121,121,2,2,2,2,2,2,560,121,2,2,2,2,2,2,2,121},
{635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6},
{612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343},
{486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2},
{612,327,212,565,450,385,201,649,423,491,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{495,440,89,439,65,207,459,407,139,131,624,2,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{646,393,273,238,24,13,253,127,368,316,316,316,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{667,257,290,122,109,523,95,26,282,49,374,236,236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,88,2,2},
{653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2},
{670,555,160,90,604,604,50,459,376,545,316,180,526,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{639,253,95,380,108,448,223,254,381,30,6,644,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{642,160,702,90,157,254,278,521,650,277,74,554,122,2,2,2,2,2,2,517,174,174,174,2,2,2,2,2,2,2,2,2},
{678,254,190,197,637,49,130,25,374,357,357,411,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2},
{512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2},
{498,431,217,101,78,143,111,113,181,825,458,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{660,624,376,472,165,66,158,308,492,779,305,305,2,576,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{521,249,388,155,467,245,134,311,72,312,312,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{408,348,216,299,302,668,347,63,172,141,272,168,678,2,2,2,512,2,2,2,2,4,2,2,2,494,64,64,64,128,16,512},
{669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383},
{693,530,139,82,780,416,270,278,330,484,484,200,2,2,2,2,137,94,2,2,2,2,2,2,2,2,484,2,2,2,2,2},
{672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{684,229,138,46,407,399,82,254,267,31,31,45,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{715,521,636,304,402,459,435,571,611,214,214,43,43,358,2,2,2,2,358,2,2,2,2,2,2,358,358,358,2,2,358,358},
{768,224,219,425,467,147,151,643,316,263,263,263,263,263,2,2,2,2,2,272,139,2,2,2,2,2,2,2,2,2,272,53},
{555,543,434,78,850,174,277,194,4,100,471,69,69,424,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{690,206,572,877,600,129,288,52,19,147,222,222,147,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2},
{703,427,225,320,136,47,103,547,239,217,73,68,68,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{791,275,60,137,352,839,67,476,356,216,216,563,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{703,312,472,588,228,512,386,668,477,617,389,389,389,2,296,2,2,2,2,343,343,2,2,343,343,2,2,617,617,617,617,2},
{709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222},
{587,453,117,107,672,86,248,568,568,294,294,513,78,2,2,164,82,2,2,2,2,22,2,2,2,2,2,2,2,2,2,2},
{741,466,378,135,737,131,159,469,59,2,59,59,187,2,204,2,2,2,2,2,2,2,2,2,798,2,2,798,798,798,798,798},
{539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{547,210,113,361,584,121,65,307,98,2,2,552,514,514,2,514,207,514,514,514,2,2,2,2,2,2,2,2,2,2,2,2},
{555,229,328,91,272,815,483,749,468,2,92,92,4,92,2,2,2,258,258,258,2,258,258,2,2,2,2,258,2,2,258,258},
{580,145,358,434,630,73,604,366,366,2,2,398,398,207,2,207,487,2,2,487,207,2,2,207,207,207,2,2,2,2,207,207},
{457,520,93,460,275,525,300,184,354,147,147,147,147,179,82,82,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{872,630,513,218,719,174,197,104,86,281,281,281,541,642,281,94,2,45,94,2,335,335,2,2,2,2,2,2,2,2,2,84},
{765,421,129,298,867,365,222,476,401,142,90,22,22,88,226,657,2,2,477,2,2,2,2,2,226,226,2,226,2,2,2,226},
{833,634,228,520,113,329,279,420,581,2,2,385,385,110,450,2,733,2,2,2,561,561,2,561,2,2,2,2,2,2,2,2},
{587,553,360,539,227,800,312,143,536,2,2,2,64,64,64,2,2,2,179,179,493,2,2,184,184,184,58,2,2,2,493,493},
{744,466,389,280,229,134,363,177,389,2,2,2,536,273,536,536,536,536,168,45,45,45,45,2,2,2,2,2,2,2,2,2},
{841,222,158,469,253,91,347,241,766,2,2,2,88,88,88,439,439,439,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{462,653,478,67,269,150,474,711,220,669,669,669,669,669,390,352,325,2,229,545,545,545,545,545,545,545,545,2,545,352,309,352},
{468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2},
{610,289,503,744,775,512,605,454,484,2,2,2,444,466,145,631,2,631,631,631,631,631,631,631,631,631,2,2,631,631,631,858},
{792,169,306,843,246,123,293,229,483,2,2,2,165,163,163,163,163,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79},
{795,185,350,211,82,537,106,680,62,2,2,537,423,423,423,2,2,501,501,2,501,2,501,2,2,2,2,2,2,2,2,2},
{633,425,295,548,497,163,381,461,89,2,2,831,583,896,38,2,625,2,2,2,276,276,2,2,276,2,2,2,2,2,2,2},
{767,318,84,97,208,387,423,196,417,2,396,396,396,396,396,128,128,2,2,2,328,328,4,4,4,4,101,2,2,328,82,16},
{802,533,869,638,67,192,805,223,219,2,2,191,178,178,77,77,2,2,2,2,431,431,2,2,2,431,431,2,2,431,2,2},
{781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2},
{807,377,237,443,388,286,158,349,491,32,32,260,260,260,2,2,260,615,615,615,2,2,260,260,260,260,260,615,615,615,615,615},
{780,359,766,618,41,596,86,636,287,707,707,96,49,373,613,373,2,2,2,2,2,2,2,613,613,613,2,2,2,2,2,2},
{788,497,334,93,319,169,273,540,904,2,903,569,569,569,272,272,2,2,2,2,571,571,571,571,571,571,571,571,571,571,571,571},
{814,652,456,774,624,870,27,739,464,2,108,578,578,561,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{818,280,99,873,165,426,341,74,479,342,727,684,684,662,662,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2},
{593,411,953,203,89,57,785,354,349,424,424,707,707,707,829,2,2,2,2,2,670,670,670,2,2,424,424,424,2,2,670,424},
{629,560,621,245,683,633,495,551,472,2,31,74,489,684,555,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418},
{669,321,391,548,189,157,337,42,796,871,276,622,30,2,2,2,2,2,2,2,580,580,107,2,2,2,2,2,434,434,434,434},
{610,236,633,300,681,358,72,281,148,466,466,283,275,2,386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{929,360,102,893,329,136,515,33,170,581,268,35,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{822,581,76,382,72,347,964,324,137,61,61,28,623,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{655,330,324,151,166,431,58,174,142,115,1003,66,724,778,2,2,2,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2},
{867,820,301,252,61,331,105,309,562,218,365,326,768,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{623,330,182,489,212,223,741,490,40,412,801,681,681,801,2,2,71,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2},
{859,844,510,859,118,190,550,29,159,622,622,382,258,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{612,237,272,53,534,682,372,935,494,536,536,599,599,599,2,536,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{843,730,235,233,816,495,598,134,131,604,227,378,378,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{667,397,121,526,321,660,848,729,357,137,268,711,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,194,2,2,2,521},
{670,595,333,257,907,413,548,341,327,350,612,700,700,700,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{678,274,695,790,169,701,707,1084,470,123,846,846,217,121,317,2,2,2,83,83,83,83,83,83,83,83,83,2,2,2,2,2},
{877,181,375,79,199,256,223,295,135,371,395,354,2,307,944,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{882,417,475,424,311,646,346,207,74,157,590,356,2,2,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2},
{865,675,786,568,112,197,225,348,372,497,215,215,2,2,2,2,159,159,150,224,224,141,2,2,2,2,141,141,141,141,141,141},
{693,726,117,167,535,725,224,78,716,100,460,299,2,2,2,2,921,744,2,2,2,2,2,378,2,2,178,178,178,2,178,178},
{697,540,358,391,932,309,103,73,35,353,353,503,2,2,353,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{982,579,548,413,416,103,71,101,1039,526,684,684,2,2,656,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,656,656},
{695,881,335,126,429,476,772,667,974,98,433,49,129,129,2,2,2,2,2,2,2,2,2,2,544,2,544,2,2,2,2,544},
{705,770,134,178,940,944,654,600,46,797,797,591,2,145,616,2,2,2,2,2,2,389,389,2,122,2,2,2,389,389,909,389},
{988,271,675,163,379,108,48,472,870,485,485,18,2,485,528,528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{865,827,614,74,725,685,724,190,178,272,835,722,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{923,397,722,186,203,575,24,144,36,526,206,787,12,100,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{927,493,988,194,97,1006,377,578,105,248,707,784,98,784,2,2,2,2,2,2,2,2,2,370,370,2,370,2,2,2,2,2},
{900,455,485,601,353,69,67,965,25,226,314,314,883,923,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{903,259,153,106,289,916,861,41,441,368,131,131,262,671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{945,358,160,196,82,403,362,195,376,877,521,336,521,77,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{912,516,108,555,306,274,55,197,565,174,659,208,441,441,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{753,242,194,619,345,94,463,485,163,85,412,575,270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{915,210,456,377,303,237,225,521,621,175,569,20,124,2,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{672,652,792,253,796,404,171,90,406,433,43,159,72,2,2,372,2,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{733,439,537,37,149,650,916,443,743,621,921,664,664,2,2,2,2,2,682,523,523,523,2,2,523,523,523,523,523,523,523,523},
{982,344,812,567,243,52,246,369,439,205,600,739,730,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{982,604,126,65,633,657,22,776,161,45,725,44,4,2,2,2,2,2,2,2,2,2,269,269,2,2,2,2,2,2,2,2},
{745,600,284,1117,459,1135,300,52,845,331,334,334,334,2,334,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{936,409,217,57,574,395,481,245,548,268,447,598,375,2,192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{986,241,233,45,721,325,350,222,35,1065,1065,1065,1065,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{755,796,877,981,259,194,1180,215,90,658,662,662,662,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{981,626,987,827,466,458,578,346,475,223,223,223,342,1058,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,728},
{949,422,941,491,66,786,592,429,307,123,40,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{992,723,625,251,431,544,309,466,700,644,484,837,904,320,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1077,496,819,340,974,122,39,1209,819,18,461,648,648,394,2,2,2,2,2,2,61,2,2,2,2,2,394,2,2,2,2,394},
{999,674,212,673,279,579,462,754,89,866,345,110,110,887,2,2,2,2,2,707,707,2,2,2,2,2,2,2,2,2,2,707},
{1083,356,367,357,559,213,606,477,71,103,790,103,299,299,2,2,2,2,2,2,406,406,2,2,2,2,2,2,2,2,2,2},
{1005,260,389,960,501,714,118,73,334,1019,704,204,504,205,822,822,2,2,2,2,2,2,2,2,2,2,684,2,2,2,2,2},
{738,749,769,610,306,326,328,578,479,840,840,840,68,192,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1010,937,449,474,154,456,766,318,275,444,709,2,778,778,778,806,779,779,2,2,2,2,2,2,2,2,806,2,2,2,287,287},
{1011,780,134,945,183,42,741,25,252,164,205,222,222,222,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1094,640,912,223,67,472,623,623,1244,65,1009,1209,1209,812,387,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,1209,234},
{722,375,264,390,515,498,1161,391,884,551,238,2,2,825,549,2,2,2,551,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1022,409,93,359,983,345,280,280,104,940,940,2,2,382,1039,2,2,2,2,831,2,2,2,2,2,2,2,2,2,2,2,2},
{997,525,680,120,466,728,288,110,1082,544,572,2,2,663,290,290,2,2,754,2,2,2,2,2,582,582,582,582,582,2,2,2},
{1055,395,795,561,222,85,294,433,377,89,89,2,2,2,456,821,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1128,788,124,501,561,1015,419,787,48,620,705,2,2,2,2,88,18,2,215,215,215,2,2,215,215,2,2,2,215,2,2,2},
{807,433,721,434,449,242,170,842,21,4,642,2,2,2,2,2,4,4,4,4,2,856,856,856,885,885,856,856,856,856,856,885},
{1004,719,1041,460,551,516,135,417,130,698,698,2,2,2,655,655,655,655,655,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1017,568,930,1113,556,1299,114,881,690,475,641,2,2,2,779,779,103,2,528,2,2,2,2,2,2,528,528,2,2,910,910,2},
{814,473,286,752,476,779,420,569,742,164,490,2,2,2,793,812,812,812,2,812,812,2,2,526,526,812,526,2,2,2,526,526},
{818,301,273,664,206,971,895,590,912,523,523,2,2,452,384,255,2,130,130,130,130,865,2,2,2,255,2,2,2,2,2,2},
{820,249,292,1017,1017,143,403,37,433,456,515,2,2,69,640,2,2,2,2,2,2,2,2,2,2,2,2,824,824,824,2,2},
{865,1132,428,582,254,408,536,376,825,116,116,1266,1266,1266,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{635,503,594,203,456,1246,221,396,1151,178,66,2,781,587,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1157,395,446,280,1130,695,668,271,111,882,477,615,615,615,2,2,2,2,2,2,2,2,615,615,615,615,615,615,615,2,305,2},
{830,397,932,519,818,113,367,694,88,535,535,414,343,175,2,2,2,2,2,2,2,2,2,2,414,864,2,2,864,864,864,864},
{793,463,329,730,390,551,968,92,511,470,424,563,672,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1050,749,809,479,87,757,288,172,597,722,4,418,418,390,2,2,2,2,2,390,390,2,2,2,2,2,2,2,2,2,2,2},
{1090,255,271,110,159,235,158,236,271,815,1300,416,416,416,2,2,416,416,2,2,2,399,791,791,2,791,2,2,2,2,791,791},
{1058,417,271,172,312,363,184,191,28,183,759,214,759,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1057,385,263,395,901,274,727,340,1117,263,813,870,858,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1102,846,985,1085,764,124,764,51,874,612,478,801,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1120,665,311,695,319,1033,511,297,602,1030,1030,714,240,240,2,2,2,2,2,2,2,2,2,2,2,2,2,953,2,2,2,2},
{1106,662,258,190,1315,214,530,263,318,904,877,1317,318,2,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1206,469,299,1052,655,114,189,213,321,188,64,475,475,2,2,662,662,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1120,1159,358,347,838,207,357,167,476,52,672,38,822,2,2,2,2,2,2,213,2,2,2,2,2,2,2,2,2,2,2,2},
{1076,596,553,545,79,727,881,121,298,169,639,368,695,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1130,177,84,673,350,543,543,95,128,954,430,884,884,2,884,884,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{820,461,681,382,273,273,358,274,274,91,887,676,386,2,676,676,2,2,2,2,2,2,2,200,2,2,2,2,200,2,2,2},
{1091,946,437,51,527,802,597,639,587,645,510,586,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,168,168,168,168},
{1148,585,868,1282,666,417,733,1231,515,332,1213,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1103,276,174,408,233,170,955,108,530,354,585,38,677,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,476},
{1167,478,1169,1053,563,371,108,772,413,497,1338,991,660,2,2,2,2,2,2,2,2,2,2,2,2,27,2,2,2,2,2,2},
{1116,331,280,422,1109,341,570,243,849,241,566,61,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{898,782,478,1208,196,983,608,537,196,1141,141,296,715,715,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1099,1187,300,240,268,413,1366,634,184,768,773,365,783,224,783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{904,660,1283,46,33,124,416,218,152,970,1241,305,307,307,307,260,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1127,553,287,58,739,99,514,739,766,42,580,241,598,598,936,936,936,629,629,629,629,2,2,2,2,2,2,2,2,2,2,2},
{1142,370,287,925,307,1232,129,11,1284,1056,33,33,536,521,2,1286,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847},
{1297,600,419,985,846,493,186,109,147,239,197,762,762,327,327,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1181,615,482,653,238,130,313,506,98,1314,730,730,730,730,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{921,613,628,1288,111,150,191,233,633,83,387,602,105,394,2,2,2,2,2,2,2,351,2,2,351,351,351,2,2,2,351,351},
{1192,555,586,516,1288,733,64,653,364,273,421,215,75,75,2,2,2,2,2,2,953,953,953,953,8,383,383,2,161,383,953,953},
{1160,617,505,1205,374,906,23,408,194,91,91,91,585,984,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1203,1101,497,352,254,309,464,123,607,1080,265,1145,1145,1145,284,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1210,656,1026,782,802,442,1319,734,794,165,165,796,93,796,2,829,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{963,646,721,1161,219,667,1088,485,692,692,663,535,553,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,686,2},
{941,231,1038,309,173,770,413,560,855,660,721,1103,721,721,721,2,2,2,2,2,2,2,2,2,2,2,2,174,2,2,2,2},
{1213,305,656,983,1399,1196,692,986,9,339,754,308,2,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1330,671,528,831,1426,735,33,425,364,119,363,978,2,761,483,476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1190,286,513,881,390,215,387,130,749,554,1110,519,160,160,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1247,353,973,217,1044,1318,1115,319,203,390,1244,225,2,2,508,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{893,560,132,1420,721,191,568,799,412,22,322,93,2,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{882,1038,211,110,942,337,1305,1225,661,183,381,381,2,2,2,2,347,2,2,2,2,2,2,2,600,431,431,431,431,431,431,431},
{1208,486,343,725,677,1204,135,139,924,170,1111,317,2,2,2,2,202,706,202,107,107,107,2,2,706,706,107,107,2,2,2,706},
{1259,1017,456,298,443,838,137,744,551,334,36,951,2,2,2,699,718,2,2,984,2,2,2,2,2,2,984,984,2,2,2,2},
{1212,1186,641,284,565,636,895,82,690,117,184,184,2,2,2,397,902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1263,370,132,635,381,47,537,179,1192,301,1282,33,2,2,2,1553,2,2,2,2,2,2,2,2,2,2,2,307,307,2,2,2},
{1015,593,112,1408,51,104,199,221,931,1010,928,928,2,2,878,878,2,2,2,2,731,731,2,731,731,2,731,2,731,731,731,2},
{1223,434,851,152,140,1495,190,397,925,37,1080,430,2,2,204,2,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{939,1070,1288,254,973,901,321,109,568,713,336,988,2,946,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1276,636,569,258,325,675,342,85,88,579,833,833,833,833,520,2,2,2,2,520,520,2,2,2,2,2,2,2,2,2,2,2},
{1288,1398,789,514,151,600,1618,1194,1419,441,234,204,1191,438,828,2,857,857,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1401,402,525,293,97,223,452,808,61,169,1023,1023,886,886,1023,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1001,644,263,164,136,939,624,95,489,1023,1107,331,331,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1401,741,509,797,47,157,1256,482,1513,899,736,780,780,210,2,2,2,2,783,783,2,2,2,2,2,2,2,2,2,2,2,2},
{1047,880,369,402,641,446,639,586,277,396,419,275,825,820,2,2,2,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1273,701,831,1294,1580,137,162,415,563,11,92,116,116,116,2,2,2,2,2,2,1029,1029,1029,504,504,877,877,877,877,877,1029,1029},
{1335,400,315,412,172,125,568,1024,58,601,398,985,640,577,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1057,1198,146,529,284,1286,160,135,75,686,648,1425,821,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1422,838,234,554,736,243,344,526,1108,33,1303,699,249,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1279,681,423,813,806,269,412,420,985,485,761,1013,649,796,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{938,614,523,557,898,624,178,461,287,985,371,371,260,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1040,998,324,93,887,497,1326,443,152,1193,595,80,80,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1027,1128,114,395,357,417,848,22,389,1257,734,838,838,301,900,2,90,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1040,420,960,882,64,661,292,146,976,427,689,248,248,248,638,2,2,2,2,2,2,2,2,2,2,2,2,861,861,861,2,861},
{1041,1090,651,130,72,389,171,237,516,777,937,937,937,168,168,2,336,2,2,2,2,2,2,2,2,2,992,2,992,2,992,2},
{987,1280,1245,1300,926,676,56,546,541,690,84,42,1000,1383,1383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1058,454,1557,191,129,297,695,1390,1274,460,923,923,923,2,4,1059,2,2,2,2,2,2,2,2,2,2,2,2,2,1059,2,2},
{1327,572,282,1022,907,1276,409,643,1050,633,187,187,187,2,228,45,2,2,2,2,2,2,320,2,2,2,2,2,2,2,2,2},
{1395,529,461,402,194,392,122,781,111,162,780,593,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1062,212,784,63,252,873,1302,1108,1380,84,1375,1375,1375,2,2,2,375,374,2,980,2,2,2,980,980,980,2,2,2,2,2,2},
{1384,549,430,781,946,879,901,924,741,114,14,451,36,2,2,2,2,287,287,287,803,803,803,803,2,2,2,803,803,803,803,803},
{1413,627,1329,1092,526,197,31,417,1149,981,964,1003,685,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,717,2,2},
{1084,1174,1601,949,910,960,500,461,1290,23,1042,636,212,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1091,793,1353,208,506,599,846,503,1011,247,289,61,1050,61,61,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1533,978,284,156,914,162,685,1184,252,1375,189,256,640,2,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1128,398,791,1170,76,661,408,259,756,495,79,553,10,10,1532,1532,1532,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1040,704,618,854,374,1470,274,383,941,519,351,351,351,351,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1427,988,498,1529,99,678,1323,149,33,426,543,543,335,1507,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1102,349,490,266,144,220,599,437,743,764,647,1128,605,265,324,324,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1118,724,1322,405,199,614,1087,885,1313,317,769,660,660,1158,535,2,2,2,373,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1120,772,743,488,346,126,784,584,943,153,311,133,133,969,605,605,2,2,2,2,2,2,2,605,2,2,2,2,2,2,2,2},
{1441,791,233,141,141,316,89,296,462,1263,758,482,599,599,578,341,2,2,2,2,2,2,2,2,2,2,2,525,525,525,2,2},
{1413,406,700,547,1166,250,518,543,104,331,205,205,691,691,2,2,118,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1485,400,1497,168,82,680,1103,554,249,702,493,101,296,236,2,236,236,944,944,2,2,394,2,2,2,2,2,2,2,2,2,2},
{1139,809,117,522,955,1096,1120,1470,116,184,1565,1565,557,557,2,2,2,2,2,829,1326,2,2,2,2,2,2,2,2,2,2,2},
{1142,984,1044,590,340,241,662,357,366,1305,2,125,631,474,2,2,2,980,2,2,2,2,2,2,2,2,2,2,2,2,2,1273},
{1487,1010,320,966,785,847,954,1060,138,856,966,966,966,703,2,703,703,2,2,2,2,2,2,2,2,2,2,2,2,1279,2,1279},
{1495,1178,874,415,1100,368,1057,1228,562,215,31,31,680,680,680,1208,2,2,2,2,2,2,2,2,1208,2,2,2,2,1208,1208,2},
{1617,289,1033,169,355,260,30,45,721,906,88,44,44,418,417,218,2,2,846,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1623,499,308,1058,1184,1230,63,1515,433,110,763,763,422,954,954,954,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1531,621,210,755,482,82,1308,317,427,168,2,232,116,190,701,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,701},
{1532,575,1245,360,249,630,133,1406,920,1539,63,63,76,82,82,2,2,2,770,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1102,785,118,93,1491,988,275,53,1328,26,2,2,240,647,240,761,761,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1478,722,113,1534,1751,115,1728,1234,777,282,508,508,1184,63,1184,855,855,2,2,2,738,738,578,578,2,2,2,2,2,2,2,2},
{1482,961,1093,556,1746,628,427,689,510,751,684,37,37,1229,1256,882,1507,1507,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1228,425,1030,699,407,171,568,925,1104,97,2,2,1286,1286,1286,502,2,1219,1219,1219,1290,2,1219,1219,1219,1219,2,2,2,59,2,2},
{1547,657,777,695,1254,224,933,367,212,385,2,2,2,1422,749,245,885,710,2,2,710,710,710,45,710,710,710,710,2,336,710,2},
{1559,462,850,289,1570,71,512,858,810,835,2,2,2,2,1028,1205,1205,546,546,546,1205,1205,1205,1205,1205,2,1205,1205,1205,1205,1205,1205},
{1192,888,701,164,131,613,282,237,525,366,2,2,2,2,1737,845,845,750,2,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,2,1261,1261},
{1128,393,1522,96,160,581,540,120,441,176,2,2,2,2,2,2,1427,551,1102,1102,328,328,592,592,592,592,592,592,592,592,592,592},
{1567,1265,372,1633,613,484,243,1523,21,275,2,2,2,431,431,431,431,2,2,978,489,889,889,889,889,889,889,889,2,2,2,2},
{1522,1422,1017,124,499,451,731,1112,1355,1355,2,2,2,854,854,336,854,336,1297,2,2,2,193,193,193,193,193,2,2,2,2,2},
{1605,1499,454,1072,686,732,309,295,940,551,2,2,880,264,264,973,2,2,72,314,2,2,2,890,890,2,2,2,2,2,2,2},
{1598,397,1471,1471,1162,866,236,948,1557,737,2,2,153,737,1408,765,765,608,2,2,2,171,608,608,608,608,2,608,608,2,2,2},
{1598,434,107,270,148,1317,835,123,642,1236,2,2,67,633,771,878,771,878,878,2,2,2,771,2,2,2,2,2,2,2,2,2},
{1628,1502,1042,822,80,403,1335,684,464,426,671,671,336,336,336,2,425,896,2,2,2,2,1337,1337,1337,1337,1337,1337,2,2,2,2},
{1607,1503,1072,471,221,277,854,1236,263,752,2,694,1657,934,553,2,2,2,498,498,2,802,2,46,2,2,2,2,2,2,2,2},
{1756,1359,698,1584,446,724,729,419,660,1305,2,244,244,244,540,540,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1263,835,1533,789,1259,174,1497,557,644,203,2,289,604,434,434,434,2,844,844,2,2,2,1111,1111,1111,2,2,2,2,2,2,2},
{1797,904,172,659,349,177,692,448,1141,990,640,99,1073,806,640,640,2,640,640,911,911,911,640,640,640,640,2,2,2,2,2,2},
{1276,442,1008,1352,243,162,711,301,552,1002,668,668,384,71,384,384,2,2,2,2,2,727,727,727,777,777,777,777,777,777,2,777},
{1600,1130,171,1113,813,722,117,990,37,24,969,94,825,1398,1398,1398,1398,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1682,449,1067,393,136,854,36,492,637,1053,247,1111,1111,1111,2,247,247,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1601,697,532,408,697,1140,1568,47,1499,780,1171,318,318,318,2,2,2,2,318,318,2,2,2,2,2,2,2,2,2,2,2,2},
{1283,1078,791,873,655,412,389,835,292,958,1245,678,1611,1519,2,2,185,2,2,2,2,2,2,1245,1245,2,2,2,2,2,2,1245},
{1822,589,236,205,797,39,241,1048,181,386,102,102,102,111,1361,1361,1361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1342,705,302,595,1200,52,83,647,519,139,103,103,103,513,2,513,2,2,2,2,2,513,2,2,2,2,2,2,2,2,2,2},
{1636,974,279,419,893,1608,1491,156,1486,115,730,730,863,509,924,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1732,1771,584,533,297,1056,669,293,146,311,1176,311,590,590,277,2,2,2,2,2,2,2,2,2,539,539,2,2,2,2,2,2},
{1360,383,1470,502,1010,153,1588,619,1246,396,1107,1107,112,423,423,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2},
{1747,611,1788,1446,152,1335,710,1040,639,1279,788,788,265,1441,107,2,2,2,2,1441,1441,1441,1441,938,938,938,938,2,2,867,867,1441},
{1682,867,333,102,628,891,654,506,995,684,961,563,1313,1313,1313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1875,1576,924,677,461,134,1525,1619,44,701,299,743,728,791,791,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,791,791},
{1744,1011,935,492,158,1645,795,1056,74,679,367,675,675,1229,1229,1229,2,2,2,2,2,2,2,2,2,2,2,2,2,1229,2,2},
{1763,1018,1859,432,717,723,874,1294,1050,1800,1237,619,1074,2,10,1237,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1376,652,461,225,361,936,1073,1279,149,619,983,511,1994,2,2,1076,1076,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1780,1739,1357,1684,1586,736,208,966,1691,339,339,128,128,2,2,128,128,128,2,2,128,2,2,2,2,1929,2,2,338,2,2,338},
{1289,907,228,665,1695,1735,489,214,762,1777,321,1674,932,2,2,2,2,1358,709,2,1959,1959,372,2,2,372,372,2,2,372,372,372},
{1802,1645,453,1079,604,618,334,855,541,167,37,88,849,2,2,518,518,2,2,530,2,2,2,2,2,2,2,119,119,2,2,2},
{1322,512,560,432,365,87,1835,1137,515,1271,1739,309,309,1229,1229,1229,2,2,2,2,2,2,2,2,416,416,416,416,2,2,2,2},
{1444,394,1613,796,645,1406,186,158,402,1364,314,588,606,2,577,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1325,1300,1353,1575,33,730,46,1476,84,84,189,457,352,2,1479,2,2,2,2,2,2,2,2,2,2,2,2,1565,2,2,2,2},
{1343,365,790,1047,983,1015,918,1469,1416,126,1238,1238,1238,1238,151,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1861,1487,419,97,799,1791,458,1029,370,627,57,414,414,1540,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1480,1131,1089,1688,340,962,505,1816,139,44,1350,403,1385,1996,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1328,601,601,617,554,467,391,1545,162,1361,807,1565,1565,243,1344,2,725,510,510,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1892,441,977,228,1252,604,735,136,889,878,1319,1319,2127,2127,1963,367,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1898,787,769,1166,799,479,1066,390,821,1061,201,201,1339,703,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1850,1476,792,840,2037,229,1578,526,431,1485,1450,1001,1001,1001,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1948,1530,576,582,1069,119,2131,41,1178,1677,1677,1677,325,346,2,2,2,2,2,2,1401,2,33,2,2,2,2,2,2,71,71,71},
{1540,791,518,419,1130,1068,299,1386,1378,134,859,859,71,162,2,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1889,1210,1246,1326,668,1199,77,565,1277,1607,874,1433,1433,77,2,681,2,2,2,2,2,2,2,679,2,2,2,2,2,2,2,2},
{1520,1107,1082,687,484,1732,676,1595,467,653,1091,428,2113,332,332,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1534,854,2007,1207,947,1773,1571,1505,909,1471,1655,1655,2334,1327,409,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2145,1069,662,709,737,1141,1737,827,1384,1628,107,107,1032,277,277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1600,1823,1698,1268,623,583,1932,1674,522,529,1862,1281,246,989,246,2,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1570,1504,1414,1143,1999,1932,1015,1015,556,514,626,79,2,79,1795,1461,1461,2,2,2,2,2,2,2,1461,1461,1461,1461,1461,2,2,2},
{1976,1433,820,504,421,1007,388,1083,635,82,1524,750,2,2,870,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2008,1773,416,1954,1314,742,1694,505,202,1747,785,375,2,2,2,477,1538,477,2,2,2,2,2,1309,1309,1309,1309,2,2,2,1309,2},
{1480,807,1596,520,1139,213,1581,460,923,617,1305,939,2,2,2,2,53,53,1589,284,2,2,1589,1589,1589,1589,1589,1589,1589,1589,1589,1589},
{1628,846,1504,138,464,401,501,506,967,1027,1540,1035,2,1921,1539,1539,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2304,1948,316,1063,237,607,1143,2575,1388,1022,127,251,2,438,1570,1570,1570,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1600,1338,196,1510,1371,1138,957,169,545,1176,1131,2460,1708,541,541,2,363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1736,2186,725,1844,1638,825,592,648,193,1241,462,462,45,264,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}
};

View File

@ -0,0 +1,881 @@
#define KOROBOV_MINDIM 2
#define KOROBOV_MAXDIM 33
#define MAXPRIME 9689
#define Hash(x) ((19945 - x)*(-47 + x))/121634
static int prime[] = {
FIRST,47,53,59,67,71,79,83,89,97,103,109,113,127,131,137,139,149,151,
157,163,173,179,181,191,193,199,211,223,227,229,233,239,241,251,257,263,
269,277,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,
389,397,401,409,419,421,431,433,439,443,449,457,461,467,479,487,491,499,
503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,
619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,
743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,
863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,
997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,
1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,
1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,
1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,
1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,
1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,
1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,
1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,
1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,
1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,
2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,
2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,
2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,
2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,
2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,
2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,
2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,
2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,
2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,
3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,
3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,
3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,
3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,
3511,3517,3527,3529,3533,3539,3547,3557,3571,3581,3583,3593,3607,3613,
3623,3631,3643,3659,3671,3673,3677,3691,3701,3709,3719,3733,3739,3761,
3767,3769,3779,3793,3797,3803,3821,3833,3847,3851,3853,3863,3877,3889,
3907,3911,3917,3929,3943,3947,3967,3989,4001,4003,4007,4013,4019,4027,
4049,4051,4057,4073,4079,4091,4099,4111,4127,4133,4139,4153,4159,4177,
4201,4211,4217,4219,4229,4231,4243,4259,4271,4283,4289,4297,4327,4337,
4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4451,4463,4481,
4483,4493,4507,4517,4523,4547,4549,4561,4567,4583,4597,4603,4621,4637,
4639,4651,4663,4673,4691,4703,4721,4723,4733,4751,4759,4783,4787,4789,
4801,4813,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4943,4957,
4969,4987,4993,5003,5021,5023,5039,5051,5059,5077,5087,5101,5119,5147,
5153,5167,5171,5179,5189,5209,5227,5231,5237,5261,5273,5281,5297,5309,
5323,5333,5347,5351,5381,5387,5399,5413,5431,5437,5449,5471,5479,5501,
5507,5519,5531,5557,5563,5573,5591,5623,5639,5641,5647,5657,5669,5683,
5701,5711,5737,5743,5749,5779,5783,5801,5813,5827,5843,5857,5869,5881,
5903,5923,5927,5953,5981,5987,6007,6011,6029,6037,6053,6067,6089,6101,
6113,6131,6151,6163,6173,6197,6211,6229,6247,6257,6277,6287,6311,6323,
6343,6359,6373,6389,6421,6427,6449,6469,6481,6491,6521,6529,6547,6563,
6581,6599,6619,6637,6653,6673,6691,6709,6733,6737,6763,6781,6803,6823,
6841,6863,6883,6899,6917,6947,6961,6983,7001,7019,7043,7057,7079,7103,
7127,7151,7159,7187,7211,7229,7253,7283,7297,7321,7349,7369,7393,7417,
7433,7459,7487,7507,7537,7561,7583,7607,7639,7669,7687,7717,7741,7759,
7793,7823,7853,7883,7907,7937,7963,7993,8039,8059,8093,8123,8161,8191,
8221,8263,8297,8329,8369,8419,8447,8501,8527,8563,8609,8663,8699,8747,
8803,8849,8893,8963,9029,9091,9157,9239,9319,9413,9533,MarkLast(9689)
};
static short coeff[][32] = {
{13,11,10,3,9,2,2,2,2,9,2,2,7,2,2,2,2,2,2,6,2,2,2,13,11,10,3,9,2,2,2,2},
{23,17,12,11,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,12,14,14,14},
{18,14,5,14,2,2,19,19,25,25,18,18,18,2,2,2,2,2,2,2,2,2,2,2,25,6,2,2,2,18,14,5},
{18,13,23,5,2,12,6,12,12,12,10,10,16,2,16,16,2,2,2,2,2,2,2,10,2,2,2,2,10,2,2,2},
{21,22,7,21,2,20,20,2,2,2,2,22,2,2,2,2,2,2,2,6,6,21,2,2,2,2,2,2,2,2,6,6},
{29,19,27,32,6,8,2,2,2,2,2,8,8,2,2,2,2,9,9,9,9,2,2,2,2,2,2,2,9,9,2,2},
{30,19,24,16,22,8,2,2,22,5,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{34,28,13,28,27,27,2,4,2,2,2,16,16,4,20,20,36,20,36,5,5,5,36,36,5,5,5,7,5,7,7,2},
{35,19,33,8,21,30,8,2,4,2,4,4,2,2,2,2,2,2,2,2,2,17,2,2,11,25,11,17,17,17,17,17},
{37,21,35,29,27,19,19,2,2,2,5,15,2,2,15,15,19,19,19,19,19,2,2,2,2,2,19,2,2,2,2,2},
{45,44,13,25,17,47,30,2,30,2,2,2,2,2,2,2,2,2,19,19,19,17,17,2,2,2,2,2,2,2,2,2},
{35,22,37,9,35,12,35,8,2,2,50,50,2,2,32,32,32,31,13,8,8,8,2,22,50,9,9,9,22,22,22,10},
{29,24,43,36,49,2,2,8,4,25,49,25,2,2,8,10,10,10,5,5,5,40,10,33,40,40,2,27,10,25,25,25},
{50,18,32,39,21,2,2,2,4,4,36,36,14,14,14,14,2,2,2,17,17,17,16,16,2,14,14,14,14,2,2,2},
{31,28,45,20,18,43,43,13,28,2,2,2,31,31,31,31,31,2,2,2,43,43,2,2,2,2,2,2,2,2,30,2},
{39,15,41,7,24,2,2,30,40,2,2,25,25,25,25,2,2,2,2,2,2,6,6,2,25,2,5,2,2,25,2,2},
{44,20,29,39,7,21,21,21,2,2,45,2,2,2,49,49,49,49,49,2,2,2,2,2,2,2,2,2,2,2,2,2},
{56,20,22,13,18,35,35,6,2,4,2,4,2,2,2,23,16,16,4,23,2,34,52,2,34,2,4,2,2,2,23,16},
{46,32,17,18,29,27,31,31,31,2,2,4,15,2,2,2,2,2,2,2,2,2,2,2,2,2,23,32,32,32,15,15},
{62,42,43,17,23,13,13,2,2,13,2,2,2,2,2,2,2,10,2,2,2,2,9,10,2,2,2,19,9,9,9,9},
{64,34,16,28,16,51,47,2,2,2,6,18,39,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,12,2},
{74,26,44,25,50,24,54,39,58,42,2,42,42,2,2,2,2,2,2,2,2,33,33,2,2,39,11,2,2,58,39,58},
{70,22,50,22,16,9,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{74,21,17,25,35,33,10,2,10,20,20,57,57,57,2,2,57,2,2,2,2,2,2,2,13,2,2,2,2,2,2,2},
{81,18,10,11,47,38,71,37,2,37,2,2,2,2,2,26,26,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{55,30,85,42,16,36,45,67,2,2,68,2,2,2,2,2,2,2,68,10,2,2,2,2,2,2,2,2,2,2,2,2},
{64,17,24,26,49,12,10,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,59,2,2},
{68,57,23,38,61,38,13,13,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,68,15,2,44,44,44,2,2,2},
{94,28,58,29,13,5,15,8,66,2,2,2,39,39,15,66,2,2,6,6,2,2,66,66,66,66,2,2,2,2,2,66},
{94,85,9,41,41,37,29,29,17,2,2,2,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8},
{89,32,75,77,77,13,2,30,30,2,2,2,2,2,2,2,2,2,2,67,67,2,2,2,2,2,2,2,2,8,19,32},
{70,45,58,63,67,10,72,72,70,6,2,36,2,70,70,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{101,33,76,13,45,63,2,2,6,19,2,2,32,32,32,32,32,65,2,63,63,11,11,11,19,19,19,19,9,63,63,63},
{70,89,44,37,19,45,2,2,2,8,10,8,54,54,80,80,80,80,80,2,116,2,116,2,2,80,40,51,100,100,8,2},
{71,54,83,51,42,98,2,2,8,8,14,30,93,22,15,15,30,30,30,44,44,44,2,2,22,22,22,117,44,11,11,11},
{109,37,51,113,17,10,2,2,17,17,55,2,55,55,55,55,55,55,2,2,2,57,48,48,55,55,2,2,55,2,2,55},
{75,38,68,89,11,52,2,2,81,39,2,38,2,2,2,2,2,2,2,2,2,2,2,19,2,2,2,2,2,2,2,2},
{81,84,35,34,20,93,2,12,12,12,2,96,2,96,96,2,96,2,2,2,2,2,2,2,2,2,2,2,2,56,56,56},
{104,32,56,46,77,11,35,35,24,56,19,2,2,2,78,2,2,75,2,2,2,2,78,2,2,2,2,2,2,2,2,2},
{81,103,25,35,28,15,20,20,20,2,2,2,2,20,20,20,107,107,2,2,2,2,2,2,2,2,2,2,2,2,13,13},
{119,75,42,29,74,23,54,36,39,2,2,4,4,19,19,2,2,2,2,2,2,2,2,54,2,2,2,2,2,2,2,54},
{115,73,22,102,75,138,16,73,50,16,2,50,2,2,2,133,2,2,2,2,2,2,2,2,2,2,2,2,2,33,33,33},
{119,48,66,51,14,22,20,20,2,2,2,2,2,60,2,2,2,2,2,2,2,2,60,2,2,2,2,2,2,60,2,65},
{121,94,80,29,51,69,42,36,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,17,2,2},
{129,123,41,79,43,34,24,11,2,2,4,2,2,2,2,75,16,16,16,75,75,75,16,16,16,25,2,99,2,2,75,16},
{128,33,35,68,22,8,62,94,2,2,2,62,62,2,98,2,2,4,98,2,2,32,81,32,32,32,98,98,98,98,98,98},
{101,109,154,15,57,6,27,36,2,2,37,37,2,2,2,2,2,2,2,107,2,2,2,107,107,2,2,2,2,2,2,2},
{106,40,24,38,61,118,106,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{149,111,58,79,127,13,41,33,27,16,30,2,61,2,72,2,2,2,2,2,2,2,2,2,2,2,2,75,75,2,2,2},
{105,92,43,156,25,53,57,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{99,40,62,67,66,29,99,99,99,78,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,79},
{109,42,96,95,66,41,103,84,13,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{111,72,16,89,25,86,117,29,14,14,2,2,2,2,2,60,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{106,72,49,94,140,44,97,157,75,2,2,4,123,123,2,2,123,123,123,123,2,2,2,2,2,2,2,2,2,2,2,2},
{115,67,74,32,43,50,21,36,135,36,85,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{151,71,157,42,41,37,80,27,18,2,2,2,2,2,2,2,2,2,2,2,2,2,115,128,128,128,128,128,32,2,128,80},
{119,91,38,30,92,44,32,76,22,2,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,129,2,2,129,2,2,2},
{121,126,31,52,120,37,57,10,171,2,2,2,2,35,35,35,2,2,97,97,97,97,97,97,97,35,35,35,97,97,97,2},
{155,86,49,104,87,94,64,45,61,91,91,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{164,121,44,166,47,33,7,15,13,2,2,122,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{128,120,133,17,71,52,25,107,42,21,21,2,2,2,2,4,4,96,2,9,9,2,9,94,94,94,94,94,94,94,94,96},
{179,82,157,76,61,35,13,90,197,2,69,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39},
{136,136,148,63,66,10,169,95,95,163,30,28,28,2,41,130,2,2,2,21,2,2,2,2,2,2,2,2,2,2,2,36},
{131,40,112,63,55,30,53,79,79,79,2,79,2,2,2,2,2,79,2,2,2,2,14,36,2,21,21,21,21,2,2,91},
{165,81,92,48,9,110,12,40,40,34,2,2,2,107,107,107,2,107,2,2,2,2,2,2,2,2,2,2,2,15,41,41},
{169,66,170,97,35,56,55,86,32,32,2,2,2,2,14,2,40,2,37,2,2,37,40,40,40,2,2,2,37,37,37,37},
{135,63,126,156,70,18,49,143,6,117,2,109,109,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{193,59,51,68,68,15,170,170,170,143,143,12,2,2,2,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{145,101,56,65,23,76,110,2,4,4,4,146,146,146,2,146,2,2,2,2,2,2,2,2,2,2,2,2,2,2,146,146},
{144,129,26,98,36,46,47,52,52,52,82,2,2,2,2,2,17,2,2,2,2,2,2,2,2,2,2,2,2,91,2,2},
{145,78,166,171,56,20,63,2,2,33,33,33,33,2,78,47,47,47,47,47,2,2,2,2,2,78,78,78,2,2,2,2},
{191,69,176,54,47,75,167,2,2,2,188,188,188,30,30,2,67,67,117,2,117,117,117,2,2,36,2,2,2,2,2,2},
{186,96,29,122,47,96,170,157,157,157,157,108,159,2,195,195,26,26,26,26,26,2,2,2,2,132,132,132,2,2,2,2},
{151,118,226,91,54,49,33,2,2,2,2,4,4,4,143,143,2,2,143,25,25,25,2,143,143,143,143,143,143,143,143,143},
{144,91,237,82,81,75,138,163,163,163,117,117,44,2,44,136,136,136,136,2,2,2,2,2,122,122,122,122,2,2,2,136},
{189,78,178,64,118,27,189,2,2,67,67,110,110,110,110,2,28,28,2,2,2,2,2,2,2,102,2,2,2,2,2,2},
{165,202,83,76,125,65,42,2,44,44,23,2,23,23,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{209,204,92,75,85,146,104,2,7,18,8,2,2,2,204,95,95,95,2,2,2,95,95,95,95,95,95,95,2,2,2,95},
{169,68,89,16,193,82,33,262,262,175,148,148,148,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{171,162,78,43,61,17,112,10,171,182,118,33,2,2,2,2,118,2,2,2,2,2,2,151,2,2,2,2,2,2,2,2},
{211,121,119,55,90,211,96,89,225,25,178,36,36,36,2,2,108,2,2,2,2,2,2,2,2,2,2,2,2,184,2,2},
{154,101,83,17,16,210,41,79,70,158,2,27,27,2,2,2,2,2,2,2,2,2,2,2,2,153,2,2,2,2,2,2},
{169,179,130,79,148,180,136,17,47,119,2,119,119,169,169,2,169,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{241,171,148,31,172,34,66,60,156,140,2,2,2,75,75,2,2,2,2,2,2,2,190,190,2,2,2,30,2,2,2,2},
{229,189,183,106,118,138,82,149,265,39,2,2,265,2,2,2,2,2,2,130,2,2,2,71,71,2,2,2,71,2,2,71},
{165,157,127,21,64,15,80,130,130,130,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,74,2},
{221,130,203,84,83,83,29,121,54,54,2,141,2,2,94,94,94,4,4,4,2,4,2,2,2,54,54,108,16,16,94,52},
{230,166,20,160,121,102,153,94,16,67,2,2,2,2,2,2,97,97,97,2,2,97,97,2,97,97,97,97,97,97,97,97},
{181,79,137,119,139,24,77,17,50,25,25,25,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,242,192,40,41,62,124,193,193,31,193,2,2,2,2,2,2,2,2,2,2,2,2,148,2,2,2,2,2,2,2,2},
{239,178,73,122,239,51,95,48,78,88,78,2,2,2,2,2,2,2,2,2,2,2,144,144,2,2,144,144,144,2,144,144},
{234,117,198,34,143,21,74,6,252,252,98,2,2,2,2,197,38,2,2,2,2,2,47,2,47,47,47,47,2,2,2,47},
{179,110,38,28,58,39,16,29,42,125,202,8,8,129,4,4,2,2,2,67,67,2,2,2,2,2,2,8,67,67,2,2},
{246,53,189,50,18,59,179,179,7,137,137,2,2,103,103,103,103,40,40,40,2,2,2,2,73,73,73,2,103,103,103,103},
{239,133,87,92,193,12,206,238,238,238,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{191,244,60,193,18,32,193,104,74,125,125,66,2,2,2,2,2,2,2,2,2,2,125,125,2,125,125,125,2,2,2,2},
{177,74,90,91,172,219,63,84,32,2,2,196,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{253,143,54,39,122,32,75,107,234,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{282,89,71,88,30,23,81,105,105,2,2,105,105,131,107,2,2,2,2,2,195,195,2,2,29,29,21,21,128,195,195,195},
{259,115,171,40,156,71,67,24,24,2,2,2,24,4,4,4,2,234,2,2,2,2,2,2,2,2,2,74,74,2,2,2},
{264,237,49,203,247,108,75,75,75,2,2,32,16,8,16,16,16,164,14,164,2,2,32,16,8,16,16,32,42,42,42,2},
{264,106,89,51,29,226,23,286,286,151,151,151,151,151,2,2,2,2,2,2,31,31,31,2,2,2,2,2,2,2,2,284},
{194,215,82,23,213,23,108,127,74,2,201,32,178,2,285,2,2,2,2,285,2,2,2,2,2,2,2,2,2,2,2,2},
{196,267,251,111,231,14,30,52,95,2,154,53,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{266,67,22,101,102,157,53,95,130,2,42,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{281,205,107,178,236,122,122,316,76,215,215,2,60,2,2,2,2,2,2,227,2,2,2,2,2,2,2,2,27,2,2,2},
{271,89,65,195,132,162,102,45,56,174,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{200,169,170,121,155,68,131,167,78,113,113,2,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,173,2,2,2,2},
{288,143,265,264,71,19,231,169,27,27,27,2,2,2,2,2,2,2,2,2,2,2,2,2,51,2,2,2,2,2,2,2},
{311,141,96,173,90,119,134,151,35,252,39,2,39,39,2,2,2,2,2,2,2,2,2,113,113,2,2,2,2,2,2,113},
{311,230,52,138,225,346,162,216,216,91,160,182,91,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{275,167,128,244,184,184,44,210,237,139,139,139,139,2,2,2,2,2,2,2,2,2,2,73,2,2,2,2,2,2,2,2},
{176,156,83,135,46,197,108,63,33,33,33,2,133,2,213,213,213,213,133,133,2,133,2,2,133,133,2,2,2,2,2,2},
{283,125,141,192,89,181,106,208,124,124,2,112,112,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{289,191,171,152,191,173,54,13,21,56,56,56,2,2,2,2,2,2,2,2,2,220,2,2,2,2,2,2,2,2,2,2},
{334,305,132,132,99,126,54,116,164,105,2,105,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,287,2,2,2,2},
{240,166,44,193,153,333,15,99,246,99,2,2,99,99,2,2,2,2,195,195,195,2,195,195,2,263,263,2,195,195,195,263},
{246,194,265,79,225,65,24,62,46,181,2,2,2,314,2,2,2,2,2,2,2,215,2,2,2,2,2,2,2,2,2,2},
{229,334,285,302,21,26,24,97,64,40,2,2,2,231,231,231,231,65,2,148,2,2,2,2,2,2,2,2,2,2,2,2},
{251,295,55,249,135,173,164,78,261,261,2,2,2,2,114,2,2,2,2,2,256,142,142,2,2,2,2,2,2,2,2,185},
{232,153,55,60,181,79,107,70,29,35,2,2,58,58,2,58,2,2,2,2,61,61,2,61,61,2,2,61,61,90,2,90},
{246,116,45,146,109,90,32,103,133,119,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{246,113,146,232,162,262,204,47,45,331,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,150,84,275,13,26,368,49,244,244,63,63,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{239,295,174,87,30,87,85,36,103,36,2,278,2,2,2,2,2,2,163,2,2,2,2,2,2,2,2,2,2,2,2,2},
{356,300,75,310,123,301,200,107,183,37,218,37,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{358,207,168,150,150,21,156,50,195,275,275,275,2,2,2,2,2,251,2,2,2,251,251,251,251,251,251,251,251,251,2,2},
{322,194,234,62,236,147,239,400,255,255,80,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{326,276,134,100,143,113,115,221,13,339,194,194,194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{337,132,27,45,14,81,110,84,238,224,211,2,29,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{192,213,113,174,403,117,342,342,311,35,35,2,2,2,2,2,2,2,2,101,2,2,2,2,2,2,2,2,2,101,101,101},
{264,273,316,53,40,330,51,285,115,219,147,2,2,2,335,2,2,2,2,2,173,2,173,2,2,173,173,173,173,173,173,83},
{254,293,407,118,54,296,160,231,4,4,93,2,2,2,2,2,60,61,2,2,120,127,127,127,88,88,88,88,88,88,88,88},
{341,78,336,263,281,164,99,334,296,114,109,2,163,163,163,163,2,2,2,2,2,2,2,125,125,292,292,292,292,125,125,125},
{355,87,212,100,89,210,133,344,120,45,45,138,138,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{274,141,46,219,158,284,38,79,73,185,35,6,81,2,2,2,2,53,2,2,81,81,2,81,2,2,2,53,53,53,53,53},
{349,303,439,19,95,240,174,191,2,162,162,2,2,2,76,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{360,91,201,205,67,181,59,77,2,44,103,103,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,125},
{283,154,261,91,77,147,227,105,116,311,256,256,2,116,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,2},
{287,288,111,89,249,370,55,16,248,67,67,115,2,2,134,134,2,2,2,2,2,2,2,2,2,2,2,2,2,22,22,22},
{284,270,282,37,29,181,160,49,285,285,374,250,2,374,374,2,2,2,179,179,35,2,179,179,2,179,179,2,2,285,285,285},
{359,305,52,36,243,231,7,92,2,68,68,307,62,45,2,2,112,311,311,311,2,2,2,2,2,2,2,2,2,2,2,2},
{288,119,218,137,364,38,27,380,2,2,211,23,33,2,2,2,2,2,225,225,225,2,2,225,225,225,2,2,2,2,2,2},
{277,155,232,309,370,365,348,75,214,214,214,4,4,2,2,2,210,210,210,210,210,210,210,2,2,2,2,2,2,2,2,2},
{292,204,91,41,124,190,107,322,125,125,125,125,125,25,25,62,2,2,146,146,2,2,62,146,2,146,114,146,114,2,2,2},
{282,195,192,409,68,99,253,106,2,2,2,231,55,55,2,323,323,55,55,285,285,285,285,2,2,2,2,2,2,285,285,323},
{299,122,174,403,113,77,63,275,2,2,2,138,276,227,38,227,2,237,2,2,2,2,2,2,2,2,2,2,352,352,352,2},
{282,222,268,86,21,109,353,408,2,2,2,2,135,12,12,216,241,241,241,241,241,241,241,241,241,303,303,303,135,135,135,2},
{374,94,89,257,137,246,186,196,2,2,2,2,2,454,122,122,122,122,2,2,2,28,28,94,94,94,94,94,122,122,122,122},
{288,92,62,428,122,153,481,66,2,2,2,250,250,177,177,177,177,279,279,279,279,279,279,279,2,2,279,177,177,177,177,177},
{288,370,141,284,207,192,450,67,2,2,2,183,217,217,217,183,183,167,202,202,202,202,167,167,2,2,2,164,164,80,167,167},
{286,293,199,39,158,332,242,103,2,2,2,408,266,315,2,2,365,253,315,315,315,315,315,2,2,315,2,2,2,2,2,2},
{407,83,435,187,40,16,52,65,2,2,244,39,77,119,119,2,2,2,119,342,342,2,2,2,2,2,342,2,2,58,58,119},
{398,88,78,57,260,203,203,43,131,131,131,204,204,322,204,2,102,2,325,325,325,325,2,2,2,2,2,2,2,2,2,2},
{390,174,70,155,163,67,225,49,2,34,34,151,151,2,2,111,2,2,111,111,2,2,2,2,2,2,2,2,2,2,2,2},
{393,129,393,169,23,192,168,47,2,2,312,150,71,2,150,2,2,2,61,2,2,61,2,2,2,2,2,2,2,2,2,2},
{408,136,71,63,63,159,222,68,181,181,124,227,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{294,169,79,242,160,123,178,290,186,186,56,399,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,228,69,68,193,122,21,362,33,22,362,57,2,2,2,2,46,46,196,196,196,2,196,196,196,2,196,2,2,2,2,2},
{415,130,241,185,312,175,309,199,94,281,47,47,2,2,2,2,206,307,221,2,2,2,2,2,239,239,239,239,239,206,206,206},
{417,238,147,165,346,19,92,164,266,291,291,43,2,2,2,345,2,2,2,345,345,2,2,2,2,2,345,2,2,2,2,2},
{456,192,86,182,35,174,342,102,210,210,210,393,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,256,256,158},
{307,255,92,38,325,61,103,246,176,319,80,89,2,241,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{432,168,63,154,166,46,479,145,144,288,288,288,288,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{341,256,113,85,188,233,161,29,110,167,91,91,253,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{311,360,312,158,73,16,106,209,472,48,24,203,203,2,2,2,2,234,234,234,2,234,234,203,2,2,2,234,234,234,234,234},
{437,196,161,100,132,246,395,187,35,35,35,2,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{438,174,338,145,155,276,422,374,4,463,463,99,224,70,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{426,225,211,130,325,283,353,96,282,23,299,2,2,2,63,63,2,276,276,2,2,2,2,2,2,2,2,2,2,2,2,2},
{430,101,288,38,200,332,325,193,123,123,88,2,2,2,2,2,231,231,139,139,139,139,139,139,139,139,139,139,139,139,139,139},
{434,143,308,389,365,363,174,63,121,125,260,2,2,260,260,2,2,2,2,2,2,2,2,2,2,258,2,2,2,258,2,2},
{453,123,201,141,229,223,234,494,102,102,102,2,2,102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,252},
{438,168,65,264,304,74,168,88,114,132,187,2,127,127,2,2,2,2,2,81,81,56,2,2,2,307,2,2,2,2,81,81},
{324,181,141,129,33,171,173,291,227,373,52,301,301,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{448,119,431,111,135,50,242,95,148,49,49,49,68,2,2,2,2,2,2,2,2,49,2,2,2,2,2,2,2,2,2,2},
{335,114,55,47,33,173,287,345,198,198,136,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{468,377,243,237,332,512,27,167,22,169,14,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{456,162,188,223,408,209,28,164,299,299,258,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{445,391,115,226,96,456,239,214,556,158,158,282,2,2,2,2,2,2,2,2,2,2,2,2,2,331,2,2,2,2,2,2},
{360,397,130,172,407,479,295,13,38,199,199,346,2,2,2,2,2,2,145,2,2,2,2,2,2,2,2,2,2,2,2,2},
{512,136,129,361,180,61,274,128,422,27,292,165,2,2,2,2,2,2,363,117,117,117,117,2,2,2,2,363,2,2,2,2},
{478,433,483,302,200,227,273,27,171,171,371,102,2,2,2,2,2,20,2,2,2,2,2,2,2,2,403,403,2,2,2,2},
{485,158,454,86,212,60,93,40,209,188,188,106,2,231,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{390,448,111,145,47,555,367,317,315,52,429,435,429,429,2,2,2,2,2,2,2,2,229,2,2,229,2,2,2,229,2,2},
{490,331,187,398,407,373,497,219,423,423,378,378,2,419,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{378,406,112,198,539,550,516,59,240,240,23,316,2,122,2,2,2,2,2,2,2,2,2,2,111,111,2,2,2,95,2,2},
{474,373,248,330,40,113,105,273,103,407,2,165,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{495,406,306,239,172,323,236,50,37,435,2,310,56,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{498,447,112,241,552,119,227,189,140,140,140,140,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{505,132,169,418,342,28,319,301,172,530,317,317,335,2,2,2,2,2,2,376,2,2,2,2,2,2,2,2,2,2,2,2},
{397,393,191,269,462,151,264,134,307,307,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,159,2,2,2,2,2},
{485,491,325,149,122,145,228,100,311,64,2,62,137,2,137,2,2,2,2,2,2,2,392,2,2,2,2,2,2,2,2,2},
{364,462,360,383,182,187,123,69,129,146,2,156,149,2,149,2,2,2,2,2,2,2,303,303,303,2,2,2,2,2,149,266},
{507,195,130,401,363,171,483,20,86,464,2,89,89,2,26,2,2,2,2,2,425,425,2,2,2,2,2,2,2,2,2,2},
{380,220,87,122,242,78,207,371,95,305,2,2,2,2,440,440,445,358,358,331,331,358,445,445,445,445,445,445,445,445,445,445},
{507,221,247,137,182,90,28,207,325,438,2,2,2,2,2,187,232,438,2,2,68,37,37,37,37,37,37,37,37,37,161,2},
{509,265,101,126,203,86,152,416,352,85,2,2,2,284,391,368,2,2,152,2,2,2,325,2,2,2,2,2,2,2,2,2},
{572,359,332,480,68,535,59,504,365,21,2,2,246,54,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{415,178,178,372,415,400,73,82,348,99,2,23,325,44,2,2,2,2,2,2,2,2,325,2,2,2,2,2,2,2,2,2},
{430,275,236,361,42,552,368,236,653,74,65,458,288,307,307,2,2,2,2,2,2,2,65,65,2,2,2,2,2,2,2,2},
{434,139,58,437,130,441,188,15,63,145,145,145,300,2,2,2,2,300,2,2,2,2,2,2,2,2,401,401,401,401,401,401},
{542,138,266,514,552,202,103,197,574,48,2,96,96,2,2,96,96,217,2,2,2,2,2,2,2,2,2,2,2,2,2,217},
{546,494,72,272,550,219,213,209,169,404,69,464,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{602,466,332,458,99,244,255,183,446,670,2,186,323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,292,165,165,165,165},
{422,413,561,110,242,62,436,478,18,150,606,88,643,2,249,2,2,2,2,456,2,2,2,2,2,2,2,2,2,2,2,456},
{522,141,154,253,264,53,120,93,274,52,44,203,556,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{600,249,375,555,421,322,317,84,517,517,268,106,353,2,2,2,2,2,2,2,2,2,268,2,2,2,2,2,2,302,2,2},
{555,516,310,438,290,559,52,265,248,193,285,441,285,285,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{555,300,232,386,470,300,355,177,57,407,450,279,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{544,177,79,306,256,402,205,496,398,115,115,43,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{534,274,194,220,575,81,206,544,341,85,137,429,429,429,429,344,2,2,2,2,2,315,315,315,315,315,315,72,72,72,2,2},
{400,136,112,136,273,277,205,578,122,122,230,230,2,2,2,2,2,2,2,2,2,2,2,2,2,2,302,2,2,2,2,2},
{576,421,115,52,253,373,17,657,43,178,178,58,485,485,485,485,485,485,2,2,2,159,159,159,159,2,619,2,2,2,2,2},
{576,301,142,329,96,41,302,528,126,112,206,206,2,2,2,2,2,2,206,206,2,206,206,2,191,206,206,191,191,191,191,206},
{548,538,508,250,539,102,73,285,119,433,480,480,2,2,2,480,480,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{622,526,294,56,498,176,237,351,25,26,474,55,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{446,163,469,481,240,278,51,373,491,13,22,419,2,2,2,2,2,2,2,2,2,176,176,2,2,2,2,2,2,2,2,2},
{445,223,102,108,120,166,68,214,737,504,96,96,206,377,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,39,39,528},
{453,121,489,84,434,505,78,575,468,372,468,468,83,468,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{425,355,128,58,194,82,438,117,10,34,34,35,112,107,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{432,479,328,443,253,634,271,429,406,543,406,543,543,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{433,294,192,205,152,70,99,68,392,169,309,390,390,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,199,2,2,2},
{456,383,487,311,57,579,673,264,582,187,184,43,43,2,2,2,2,501,501,501,2,2,2,2,2,2,2,2,2,2,2,2},
{437,561,384,619,363,420,614,117,217,247,405,142,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{434,372,239,508,478,26,375,255,151,151,650,112,251,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{437,133,516,423,305,90,135,25,266,487,6,286,286,2,2,2,2,2,2,2,2,2,2,2,2,510,510,2,2,2,2,2},
{463,341,170,401,178,79,305,98,162,166,32,392,335,335,335,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{610,477,478,516,318,184,267,423,190,494,494,2,336,336,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{611,211,491,224,47,54,124,268,271,271,223,2,2,2,2,2,2,2,2,2,2,2,2,359,2,2,2,2,2,2,2,2},
{590,463,461,162,162,622,167,254,29,377,377,75,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{478,388,612,404,491,561,180,80,262,58,94,2,2,275,2,2,2,2,2,151,2,2,2,2,2,312,312,312,2,2,2,275},
{629,225,67,623,298,588,354,49,41,185,176,63,63,63,2,2,2,2,2,2,2,2,2,2,2,2,8,435,32,32,435,435},
{671,275,392,298,612,328,337,215,58,58,124,2,2,490,392,2,2,2,125,457,457,2,2,2,2,2,2,2,2,2,2,457},
{448,126,129,168,209,340,40,96,509,509,509,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{667,246,160,68,737,203,168,628,46,128,358,2,2,2,121,121,2,2,2,2,2,2,560,121,2,2,2,2,2,2,2,121},
{635,212,284,356,187,591,275,361,194,317,488,2,2,2,2,2,2,97,6,2,6,247,2,2,2,2,2,2,2,2,2,6},
{612,395,104,86,264,321,521,325,252,53,178,100,100,100,16,343,343,343,343,343,2,2,2,2,2,2,2,2,2,343,343,343},
{486,428,287,472,292,141,504,178,585,98,282,2,2,2,2,2,2,2,2,2,2,2,2,284,284,284,78,284,2,2,2,2},
{612,327,212,565,450,385,201,649,423,491,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{462,579,236,447,60,162,427,258,73,742,742,2,742,742,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{495,440,89,439,65,207,459,407,139,131,624,2,380,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{469,507,276,227,66,237,260,386,27,666,31,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{646,393,273,238,24,13,253,127,368,316,316,316,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{626,196,111,465,386,431,181,414,614,391,349,318,389,2,389,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{667,257,290,122,109,523,95,26,282,49,374,236,236,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,88,2,2},
{653,169,261,533,488,282,213,443,337,480,503,174,534,2,2,2,2,2,534,2,2,2,2,534,2,2,2,2,534,2,2,2},
{670,555,160,90,604,604,50,459,376,545,316,180,526,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{639,253,95,380,108,448,223,254,381,30,6,644,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{642,160,702,90,157,254,278,521,650,277,74,554,122,2,2,2,2,2,2,517,174,174,174,2,2,2,2,2,2,2,2,2},
{678,254,190,197,637,49,130,25,374,357,357,411,643,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,537,2,2},
{512,347,65,546,434,87,18,123,672,412,316,6,699,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{657,233,108,38,147,53,136,168,408,477,477,279,268,289,2,2,2,2,2,2,289,2,2,2,2,2,2,2,2,289,289,2},
{498,431,217,101,78,143,111,113,181,825,458,140,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{660,624,376,472,165,66,158,308,492,779,305,305,2,576,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{521,249,388,155,467,245,134,311,72,312,312,623,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{408,348,216,299,302,668,347,63,172,141,272,168,678,2,2,2,512,2,2,2,2,4,2,2,2,494,64,64,64,128,16,512},
{669,421,230,70,212,845,237,347,148,76,823,472,2,2,2,132,2,2,2,2,2,2,2,383,132,383,2,2,383,383,383,383},
{693,530,139,82,780,416,270,278,330,484,484,200,2,2,2,2,137,94,2,2,2,2,2,2,2,2,484,2,2,2,2,2},
{672,150,164,622,196,75,302,119,42,314,314,132,60,60,60,298,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{705,302,411,705,691,160,809,40,32,867,826,826,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{684,229,138,46,407,399,82,254,267,31,31,45,2,209,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{707,323,409,27,31,157,492,463,886,412,251,251,304,190,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{715,521,636,304,402,459,435,571,611,214,214,43,43,358,2,2,2,2,358,2,2,2,2,2,2,358,358,358,2,2,358,358},
{768,224,219,425,467,147,151,643,316,263,263,263,263,263,2,2,2,2,2,272,139,2,2,2,2,2,2,2,2,2,272,53},
{555,543,434,78,850,174,277,194,4,100,471,69,69,424,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{690,206,572,877,600,129,288,52,19,147,222,222,147,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{793,279,264,566,252,495,872,492,482,107,294,503,350,350,2,2,2,2,2,2,2,285,285,273,273,273,273,2,2,2,2,2},
{703,427,225,320,136,47,103,547,239,217,73,68,68,204,204,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{791,275,60,137,352,839,67,476,356,216,216,563,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{703,312,472,588,228,512,386,668,477,617,389,389,389,2,296,2,2,2,2,343,343,2,2,343,343,2,2,617,617,617,617,2},
{709,509,697,145,252,194,304,192,192,623,623,4,423,2,2,2,199,423,2,2,2,222,222,2,2,623,623,623,623,623,2,222},
{587,453,117,107,672,86,248,568,568,294,294,513,78,2,2,164,82,2,2,2,2,22,2,2,2,2,2,2,2,2,2,2},
{741,466,378,135,737,131,159,469,59,2,59,59,187,2,204,2,2,2,2,2,2,2,2,2,798,2,2,798,798,798,798,798},
{539,310,463,103,553,45,609,326,197,2,62,113,272,2,62,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{750,703,182,242,92,335,272,466,594,2,701,569,474,129,140,140,2,507,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{547,210,113,361,584,121,65,307,98,2,2,552,514,514,2,514,207,514,514,514,2,2,2,2,2,2,2,2,2,2,2,2},
{555,229,328,91,272,815,483,749,468,2,92,92,4,92,2,2,2,258,258,258,2,258,258,2,2,2,2,258,2,2,258,258},
{580,145,358,434,630,73,604,366,366,2,2,398,398,207,2,207,487,2,2,487,207,2,2,207,207,207,2,2,2,2,207,207},
{457,520,93,460,275,525,300,184,354,147,147,147,147,179,82,82,82,82,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{872,630,513,218,719,174,197,104,86,281,281,281,541,642,281,94,2,45,94,2,335,335,2,2,2,2,2,2,2,2,2,84},
{765,421,129,298,867,365,222,476,401,142,90,22,22,88,226,657,2,2,477,2,2,2,2,2,226,226,2,226,2,2,2,226},
{833,634,228,520,113,329,279,420,581,2,2,385,385,110,450,2,733,2,2,2,561,561,2,561,2,2,2,2,2,2,2,2},
{587,553,360,539,227,800,312,143,536,2,2,2,64,64,64,2,2,2,179,179,493,2,2,184,184,184,58,2,2,2,493,493},
{744,466,389,280,229,134,363,177,389,2,2,2,536,273,536,536,536,536,168,45,45,45,45,2,2,2,2,2,2,2,2,2},
{841,222,158,469,253,91,347,241,766,2,2,2,88,88,88,439,439,439,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{462,653,478,67,269,150,474,711,220,669,669,669,669,669,390,352,325,2,229,545,545,545,545,545,545,545,545,2,545,352,309,352},
{468,430,849,689,202,427,45,34,105,2,2,2,2,4,4,4,4,4,4,4,2,2,2,4,4,4,4,4,2,2,2,2},
{610,289,503,744,775,512,605,454,484,2,2,2,444,466,145,631,2,631,631,631,631,631,631,631,631,631,2,2,631,631,631,858},
{792,169,306,843,246,123,293,229,483,2,2,2,165,163,163,163,163,440,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{563,325,717,766,440,705,290,123,228,2,2,2,32,64,146,2,2,2,116,79,79,2,146,146,79,79,79,2,2,146,146,79},
{795,185,350,211,82,537,106,680,62,2,2,537,423,423,423,2,2,501,501,2,501,2,501,2,2,2,2,2,2,2,2,2},
{633,425,295,548,497,163,381,461,89,2,2,831,583,896,38,2,625,2,2,2,276,276,2,2,276,2,2,2,2,2,2,2},
{767,318,84,97,208,387,423,196,417,2,396,396,396,396,396,128,128,2,2,2,328,328,4,4,4,4,101,2,2,328,82,16},
{802,533,869,638,67,192,805,223,219,2,2,191,178,178,77,77,2,2,2,2,431,431,2,2,2,431,431,2,2,431,2,2},
{781,638,410,399,336,465,856,426,28,2,4,4,6,6,2,2,2,449,372,372,449,449,449,2,2,449,449,449,449,449,449,2},
{807,377,237,443,388,286,158,349,491,32,32,260,260,260,2,2,260,615,615,615,2,2,260,260,260,260,260,615,615,615,615,615},
{780,359,766,618,41,596,86,636,287,707,707,96,49,373,613,373,2,2,2,2,2,2,2,613,613,613,2,2,2,2,2,2},
{788,497,334,93,319,169,273,540,904,2,903,569,569,569,272,272,2,2,2,2,571,571,571,571,571,571,571,571,571,571,571,571},
{622,309,913,550,994,90,257,588,29,526,526,526,496,496,576,2,2,2,2,2,182,182,182,2,2,447,447,447,447,447,447,182},
{814,652,456,774,624,870,27,739,464,2,108,578,578,561,295,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{818,280,99,873,165,426,341,74,479,342,727,684,684,662,662,2,2,2,2,2,2,662,2,2,2,2,2,2,2,2,2,2},
{593,411,953,203,89,57,785,354,349,424,424,707,707,707,829,2,2,2,2,2,670,670,670,2,2,424,424,424,2,2,670,424},
{629,560,621,245,683,633,495,551,472,2,31,74,489,684,555,684,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{901,490,693,410,666,119,703,593,201,61,70,70,774,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,418,418},
{669,321,391,548,189,157,337,42,796,871,276,622,30,2,2,2,2,2,2,2,580,580,107,2,2,2,2,2,434,434,434,434},
{610,236,633,300,681,358,72,281,148,466,466,283,275,2,386,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{929,360,102,893,329,136,515,33,170,581,268,35,777,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{859,584,475,745,506,900,40,869,143,612,175,275,209,12,12,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{822,581,76,382,72,347,964,324,137,61,61,28,623,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{655,330,324,151,166,431,58,174,142,115,1003,66,724,778,2,2,2,503,503,2,2,2,2,2,2,2,2,2,2,2,2,2},
{867,820,301,252,61,331,105,309,562,218,365,326,768,672,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{623,330,182,489,212,223,741,490,40,412,801,681,681,801,2,2,71,2,2,2,2,2,2,427,2,2,2,2,2,2,2,2},
{859,844,510,859,118,190,550,29,159,622,622,382,258,382,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{612,237,272,53,534,682,372,935,494,536,536,599,599,599,2,536,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{843,730,235,233,816,495,598,134,131,604,227,378,378,553,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{667,397,121,526,321,660,848,729,357,137,268,711,521,521,2,2,2,2,2,2,2,2,2,2,2,2,2,194,2,2,2,521},
{939,783,796,676,259,643,103,289,15,471,80,80,2,239,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,888},
{670,595,333,257,907,413,548,341,327,350,612,700,700,700,700,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{678,274,695,790,169,701,707,1084,470,123,846,846,217,121,317,2,2,2,83,83,83,83,83,83,83,83,83,2,2,2,2,2},
{877,181,375,79,199,256,223,295,135,371,395,354,2,307,944,2,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{882,417,475,424,311,646,346,207,74,157,590,356,2,2,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{708,442,186,698,345,103,687,463,163,416,416,107,2,2,2,375,375,416,6,2,2,2,2,2,2,2,2,2,2,2,2,2},
{865,675,786,568,112,197,225,348,372,497,215,215,2,2,2,2,159,159,150,224,224,141,2,2,2,2,141,141,141,141,141,141},
{844,244,672,489,839,263,14,233,422,392,8,392,2,2,2,2,2,2,815,815,815,815,257,257,105,105,2,2,2,815,815,815},
{693,726,117,167,535,725,224,78,716,100,460,299,2,2,2,2,921,744,2,2,2,2,2,378,2,2,178,178,178,2,178,178},
{898,559,396,742,51,143,411,221,116,756,756,756,2,2,2,701,701,2,2,2,2,240,225,256,322,322,240,240,240,240,240,322},
{697,540,358,391,932,309,103,73,35,353,353,503,2,2,353,134,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{982,579,548,413,416,103,71,101,1039,526,684,684,2,2,656,2,2,2,2,2,2,2,2,2,2,2,656,656,656,2,656,656},
{695,881,335,126,429,476,772,667,974,98,433,49,129,129,2,2,2,2,2,2,2,2,2,2,544,2,544,2,2,2,2,544},
{859,361,215,569,255,378,543,436,220,34,105,105,816,816,816,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{705,770,134,178,940,944,654,600,46,797,797,591,2,145,616,2,2,2,2,2,2,389,389,2,122,2,2,2,389,389,909,389},
{642,757,247,513,372,54,546,971,271,61,61,1018,2,143,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{988,271,675,163,379,108,48,472,870,485,485,18,2,485,528,528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{865,827,614,74,725,685,724,190,178,272,835,722,2,35,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{923,397,722,186,203,575,24,144,36,526,206,787,12,100,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{718,359,103,558,684,560,67,35,120,342,680,265,265,265,2,2,265,2,2,2,2,2,2,2,2,2,430,2,2,2,2,2},
{927,493,988,194,97,1006,377,578,105,248,707,784,98,784,2,2,2,2,2,2,2,2,2,370,370,2,370,2,2,2,2,2},
{900,455,485,601,353,69,67,965,25,226,314,314,883,923,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{903,259,153,106,289,916,861,41,441,368,131,131,262,671,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{945,358,160,196,82,403,362,195,376,877,521,336,521,77,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{912,516,108,555,306,274,55,197,565,174,659,208,441,441,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{753,242,194,619,345,94,463,485,163,85,412,575,270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{940,226,320,666,269,54,542,174,109,290,754,524,649,2,202,2,2,2,2,2,2,2,776,202,776,776,776,2,2,202,202,202},
{915,210,456,377,303,237,225,521,621,175,569,20,124,2,601,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{672,652,792,253,796,404,171,90,406,433,43,159,72,2,2,372,2,540,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{733,439,537,37,149,650,916,443,743,621,921,664,664,2,2,2,2,2,682,523,523,523,2,2,523,523,523,523,523,523,523,523},
{982,344,812,567,243,52,246,369,439,205,600,739,730,2,2,2,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{982,604,126,65,633,657,22,776,161,45,725,44,4,2,2,2,2,2,2,2,2,2,269,269,2,2,2,2,2,2,2,2},
{745,600,284,1117,459,1135,300,52,845,331,334,334,334,2,334,334,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{936,409,217,57,574,395,481,245,548,268,447,598,375,2,192,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{986,241,233,45,721,325,350,222,35,1065,1065,1065,1065,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{755,796,877,981,259,194,1180,215,90,658,662,662,662,2,36,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{981,626,987,827,466,458,578,346,475,223,223,223,342,1058,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,728},
{949,422,941,491,66,786,592,429,307,123,40,478,478,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{992,723,625,251,431,544,309,466,700,644,484,837,904,320,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1077,496,819,340,974,122,39,1209,819,18,461,648,648,394,2,2,2,2,2,2,61,2,2,2,2,2,394,2,2,2,2,394},
{999,674,212,673,279,579,462,754,89,866,345,110,110,887,2,2,2,2,2,707,707,2,2,2,2,2,2,2,2,2,2,707},
{1083,356,367,357,559,213,606,477,71,103,790,103,299,299,2,2,2,2,2,2,406,406,2,2,2,2,2,2,2,2,2,2},
{1005,260,389,960,501,714,118,73,334,1019,704,204,504,205,822,822,2,2,2,2,2,2,2,2,2,2,684,2,2,2,2,2},
{738,749,769,610,306,326,328,578,479,840,840,840,68,192,2,150,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1010,937,449,474,154,456,766,318,275,444,709,2,778,778,778,806,779,779,2,2,2,2,2,2,2,2,806,2,2,2,287,287},
{1011,780,134,945,183,42,741,25,252,164,205,222,222,222,147,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1118,427,294,404,268,217,922,515,19,1045,1045,2,833,291,448,2,2,2,2,2,2,2,2,2,175,2,2,2,2,2,2,2},
{1094,640,912,223,67,472,623,623,1244,65,1009,1209,1209,812,387,2,2,2,513,2,2,2,2,2,2,2,2,2,2,2,1209,234},
{722,375,264,390,515,498,1161,391,884,551,238,2,2,825,549,2,2,2,551,2,2,2,2,2,2,2,2,2,2,2,2,2},
{792,250,299,210,496,682,94,207,220,227,227,2,2,227,73,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1022,409,93,359,983,345,280,280,104,940,940,2,2,382,1039,2,2,2,2,831,2,2,2,2,2,2,2,2,2,2,2,2},
{1027,925,413,335,327,826,250,122,293,773,564,541,420,420,420,774,763,2,2,2,2,2,2,900,110,110,2,763,2,2,2,2},
{1028,730,807,119,209,146,230,498,164,309,309,2,2,2,693,912,430,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{997,525,680,120,466,728,288,110,1082,544,572,2,2,663,290,290,2,2,754,2,2,2,2,2,582,582,582,582,582,2,2,2},
{1055,395,795,561,222,85,294,433,377,89,89,2,2,2,456,821,2,2,821,2,2,2,2,2,2,2,2,2,2,2,2,2},
{997,614,240,638,755,575,874,321,600,235,665,2,2,2,154,154,767,767,2,767,2,2,2,2,2,2,2,2,2,2,2,2},
{802,298,672,424,104,623,152,159,476,760,66,2,2,2,215,215,490,490,490,2,2,2,2,2,490,490,490,490,490,490,490,490},
{1128,788,124,501,561,1015,419,787,48,620,705,2,2,2,2,88,18,2,215,215,215,2,2,215,215,2,2,2,215,2,2,2},
{807,433,721,434,449,242,170,842,21,4,642,2,2,2,2,2,4,4,4,4,2,856,856,856,885,885,856,856,856,856,856,885},
{755,612,235,265,369,855,414,362,478,518,518,2,2,64,16,8,32,4,16,8,8,1041,501,1041,2,2,64,16,8,8,16,270},
{1004,719,1041,460,551,516,135,417,130,698,698,2,2,2,655,655,655,655,655,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1017,568,930,1113,556,1299,114,881,690,475,641,2,2,2,779,779,103,2,528,2,2,2,2,2,2,528,528,2,2,910,910,2},
{814,473,286,752,476,779,420,569,742,164,490,2,2,2,793,812,812,812,2,812,812,2,2,526,526,812,526,2,2,2,526,526},
{818,301,273,664,206,971,895,590,912,523,523,2,2,452,384,255,2,130,130,130,130,865,2,2,2,255,2,2,2,2,2,2},
{820,249,292,1017,1017,143,403,37,433,456,515,2,2,69,640,2,2,2,2,2,2,2,2,2,2,2,2,824,824,824,2,2},
{1078,527,589,244,170,892,827,606,1165,773,189,2,2,240,22,2,2,2,2,2,2,759,621,621,621,621,621,621,621,621,621,621},
{865,1132,428,582,254,408,536,376,825,116,116,1266,1266,1266,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1062,268,389,1325,598,276,1270,48,572,439,302,2,544,609,544,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1065,517,247,1142,247,674,385,120,592,177,98,2,956,364,275,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{635,503,594,203,456,1246,221,396,1151,178,66,2,781,587,86,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1157,395,446,280,1130,695,668,271,111,882,477,615,615,615,2,2,2,2,2,2,2,2,615,615,615,615,615,615,615,2,305,2},
{830,397,932,519,818,113,367,694,88,535,535,414,343,175,2,2,2,2,2,2,2,2,2,2,414,864,2,2,864,864,864,864},
{793,463,329,730,390,551,968,92,511,470,424,563,672,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1050,749,809,479,87,757,288,172,597,722,4,418,418,390,2,2,2,2,2,390,390,2,2,2,2,2,2,2,2,2,2,2},
{1084,402,130,1077,276,154,1068,779,511,853,83,757,757,38,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,757,2},
{1090,255,271,110,159,235,158,236,271,815,1300,416,416,416,2,2,416,416,2,2,2,399,791,791,2,791,2,2,2,2,791,791},
{1058,417,271,172,312,363,184,191,28,183,759,214,759,39,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1057,385,263,395,901,274,727,340,1117,263,813,870,858,429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1102,846,985,1085,764,124,764,51,874,612,478,801,478,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1120,665,311,695,319,1033,511,297,602,1030,1030,714,240,240,2,2,2,2,2,2,2,2,2,2,2,2,2,953,2,2,2,2},
{814,293,763,661,575,631,524,636,112,691,595,1103,405,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1106,662,258,190,1315,214,530,263,318,904,877,1317,318,2,510,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1206,469,299,1052,655,114,189,213,321,188,64,475,475,2,2,662,662,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1120,1159,358,347,838,207,357,167,476,52,672,38,822,2,2,2,2,2,2,213,2,2,2,2,2,2,2,2,2,2,2,2},
{1076,596,553,545,79,727,881,121,298,169,639,368,695,115,115,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1130,177,84,673,350,543,543,95,128,954,430,884,884,2,884,884,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1222,412,430,707,691,746,131,607,311,607,112,217,912,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{820,461,681,382,273,273,358,274,274,91,887,676,386,2,676,676,2,2,2,2,2,2,2,200,2,2,2,2,200,2,2,2},
{1096,1166,209,407,1127,400,974,322,428,906,631,134,171,2,2,2,2,664,664,664,2,2,2,2,2,2,2,2,2,2,2,2},
{1091,946,437,51,527,802,597,639,587,645,510,586,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,168,168,168,168,168},
{1148,585,868,1282,666,417,733,1231,515,332,1213,337,337,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1103,276,174,408,233,170,955,108,530,354,585,38,677,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,476},
{1167,478,1169,1053,563,371,108,772,413,497,1338,991,660,2,2,2,2,2,2,2,2,2,2,2,2,27,2,2,2,2,2,2},
{1108,437,1160,324,868,686,361,399,786,1161,1161,707,731,731,655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1116,331,280,422,1109,341,570,243,849,241,566,61,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{898,782,478,1208,196,983,608,537,196,1141,141,296,715,715,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1099,1187,300,240,268,413,1366,634,184,768,773,365,783,224,783,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1158,945,300,1115,205,495,435,302,187,774,774,843,843,284,284,2,2,2,2,909,933,933,933,2,2,909,909,2,2,2,2,909},
{904,660,1283,46,33,124,416,218,152,970,1241,305,307,307,307,260,894,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1127,553,287,58,739,99,514,739,766,42,580,241,598,598,936,936,936,629,629,629,629,2,2,2,2,2,2,2,2,2,2,2},
{1142,370,287,925,307,1232,129,11,1284,1056,33,33,536,521,2,1286,2,2,2,2,2,2,2,2,2,2,2,2,847,847,847,847},
{1140,814,528,677,84,1192,305,637,335,451,103,325,77,969,2,651,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1297,600,419,985,846,493,186,109,147,239,197,762,762,327,327,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1181,615,482,653,238,130,313,506,98,1314,730,730,730,730,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{921,613,628,1288,111,150,191,233,633,83,387,602,105,394,2,2,2,2,2,2,2,351,2,2,351,351,351,2,2,2,351,351},
{1192,555,586,516,1288,733,64,653,364,273,421,215,75,75,2,2,2,2,2,2,953,953,953,953,8,383,383,2,161,383,953,953},
{1160,617,505,1205,374,906,23,408,194,91,91,91,585,984,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1203,1101,497,352,254,309,464,123,607,1080,265,1145,1145,1145,284,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1210,656,1026,782,802,442,1319,734,794,165,165,796,93,796,2,829,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{963,646,721,1161,219,667,1088,485,692,692,663,535,553,662,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,686,686,2},
{966,590,140,297,189,844,633,12,847,742,742,244,281,34,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{941,231,1038,309,173,770,413,560,855,660,721,1103,721,721,721,2,2,2,2,2,2,2,2,2,2,2,2,174,2,2,2,2},
{1213,305,656,983,1399,1196,692,986,9,339,754,308,2,308,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{972,768,1109,523,642,546,1452,29,1296,13,813,813,2,1496,2,2,2,2,2,2,2,165,165,165,165,165,165,2,2,2,2,544},
{1330,671,528,831,1426,735,33,425,364,119,363,978,2,761,483,476,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1188,217,838,237,379,202,785,949,479,169,348,872,2,872,872,2,2,2,2,2,2,1028,2,2,2,2,2,2,2,2,2,2},
{1190,286,513,881,390,215,387,130,749,554,1110,519,160,160,160,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1247,353,973,217,1044,1318,1115,319,203,390,1244,225,2,2,508,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{893,560,132,1420,721,191,568,799,412,22,322,93,2,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{987,774,678,175,145,264,588,97,1308,6,828,1129,2,2,2,45,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{955,980,753,96,574,259,1327,556,342,1415,1036,1036,478,478,478,478,507,2,2,2,2,151,2,2,317,2,2,2,2,2,595,595},
{882,1038,211,110,942,337,1305,1225,661,183,381,381,2,2,2,2,347,2,2,2,2,2,2,2,600,431,431,431,431,431,431,431},
{1208,486,343,725,677,1204,135,139,924,170,1111,317,2,2,2,2,202,706,202,107,107,107,2,2,706,706,107,107,2,2,2,706},
{1259,1017,456,298,443,838,137,744,551,334,36,951,2,2,2,699,718,2,2,984,2,2,2,2,2,2,984,984,2,2,2,2},
{1212,1186,641,284,565,636,895,82,690,117,184,184,2,2,2,397,902,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1263,370,132,635,381,47,537,179,1192,301,1282,33,2,2,2,1553,2,2,2,2,2,2,2,2,2,2,2,307,307,2,2,2},
{1223,433,252,572,424,82,221,107,382,430,203,461,2,915,362,964,2,2,964,2,2,2,2,2,964,964,964,964,964,485,485,485},
{1015,593,112,1408,51,104,199,221,931,1010,928,928,2,2,878,878,2,2,2,2,731,731,2,731,731,2,731,2,731,731,731,2},
{1220,410,1193,352,260,434,469,41,1090,961,961,728,2,2,330,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{898,1043,391,1289,29,830,184,321,1136,85,1133,1082,864,864,2,2,2,2,2,2,2,2,789,789,2,789,789,2,2,789,789,2},
{1223,434,851,152,140,1495,190,397,925,37,1080,430,2,2,204,2,759,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{989,1043,184,232,64,403,284,745,171,171,995,223,380,380,1400,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{939,1070,1288,254,973,901,321,109,568,713,336,988,2,946,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1276,636,569,258,325,675,342,85,88,579,833,833,833,833,520,2,2,2,2,520,520,2,2,2,2,2,2,2,2,2,2,2},
{982,508,815,214,206,602,448,685,446,572,1549,8,1047,1047,1047,2,2,2,2,2,2,2,363,502,2,2,71,363,2,2,363,363},
{1288,1398,789,514,151,600,1618,1194,1419,441,234,204,1191,438,828,2,857,857,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1002,342,1045,757,1008,979,322,240,1211,171,552,123,2,129,129,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1401,402,525,293,97,223,452,808,61,169,1023,1023,886,886,1023,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1001,644,263,164,136,939,624,95,489,1023,1107,331,331,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1011,475,845,532,567,951,663,295,877,1275,227,39,618,683,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1401,741,509,797,47,157,1256,482,1513,899,736,780,780,210,2,2,2,2,783,783,2,2,2,2,2,2,2,2,2,2,2,2},
{1047,880,369,402,641,446,639,586,277,396,419,275,825,820,2,2,2,238,238,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1273,701,831,1294,1580,137,162,415,563,11,92,116,116,116,2,2,2,2,2,2,1029,1029,1029,504,504,877,877,877,877,877,1029,1029},
{1335,400,315,412,172,125,568,1024,58,601,398,985,640,577,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1453,947,486,485,453,415,1164,684,504,605,422,998,727,727,2,2,2,1136,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1057,1198,146,529,284,1286,160,135,75,686,648,1425,821,586,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1052,442,936,64,132,1378,1323,161,161,161,230,131,12,12,2,2,2,2,2,2,2,2,2,2,2,998,998,998,998,2,2,2},
{1422,838,234,554,736,243,344,526,1108,33,1303,699,249,305,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1279,681,423,813,806,269,412,420,985,485,761,1013,649,796,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{938,614,523,557,898,624,178,461,287,985,371,371,260,613,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1335,834,652,528,536,523,497,60,173,777,238,59,4,59,4,8,2,2,2,559,559,559,559,559,559,559,2,2,559,559,559,2},
{1040,998,324,93,887,497,1326,443,152,1193,595,80,80,80,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1302,1116,283,1006,891,838,768,373,468,968,1178,1178,1269,1269,876,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1027,1128,114,395,357,417,848,22,389,1257,734,838,838,301,900,2,90,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1072,724,717,877,873,369,1031,698,917,1641,1641,1641,53,549,549,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{987,1243,424,240,53,1150,558,292,1107,574,814,1474,1474,1068,1186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,859,2,2},
{1040,420,960,882,64,661,292,146,976,427,689,248,248,248,638,2,2,2,2,2,2,2,2,2,2,2,2,861,861,861,2,861},
{1040,522,666,398,78,208,293,818,134,867,147,147,482,2,4,629,629,629,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{987,1280,1245,1300,926,676,56,546,541,690,84,42,1000,1383,1383,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1324,588,1378,592,1445,1029,759,1296,739,931,363,704,312,704,704,704,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1058,454,1557,191,129,297,695,1390,1274,460,923,923,923,2,4,1059,2,2,2,2,2,2,2,2,2,2,2,2,2,1059,2,2},
{1327,572,282,1022,907,1276,409,643,1050,633,187,187,187,2,228,45,2,2,2,2,2,2,320,2,2,2,2,2,2,2,2,2},
{1395,958,237,101,559,891,560,47,524,747,197,589,589,917,887,887,887,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1395,529,461,402,194,392,122,781,111,162,780,593,593,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1378,541,848,848,347,856,102,104,183,156,395,130,1377,2,2,2,159,159,159,2,2,2,772,2,2,2,2,2,2,2,2,2},
{1062,212,784,63,252,873,1302,1108,1380,84,1375,1375,1375,2,2,2,375,374,2,980,2,2,2,980,980,980,2,2,2,2,2,2},
{1384,549,430,781,946,879,901,924,741,114,14,451,36,2,2,2,2,287,287,287,803,803,803,803,2,2,2,803,803,803,803,803},
{1413,627,1329,1092,526,197,31,417,1149,981,964,1003,685,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,717,717,2,2},
{1084,1174,1601,949,910,960,500,461,1290,23,1042,636,212,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1420,531,626,738,376,537,814,206,990,235,847,812,201,201,201,201,726,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1420,624,363,537,1436,278,292,377,263,820,376,382,382,2,654,655,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1091,793,1353,208,506,599,846,503,1011,247,289,61,1050,61,61,61,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1533,978,284,156,914,162,685,1184,252,1375,189,256,640,2,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1531,692,414,277,541,1371,1447,682,536,109,432,1240,1240,2,1022,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1128,398,791,1170,76,661,408,259,756,495,79,553,10,10,1532,1532,1532,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1040,704,618,854,374,1470,274,383,941,519,351,351,351,351,351,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1427,988,498,1529,99,678,1323,149,33,426,543,543,335,1507,772,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1102,349,490,266,144,220,599,437,743,764,647,1128,605,265,324,324,324,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1118,496,645,592,354,1133,935,428,72,532,182,182,1370,660,123,2,294,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1102,1042,315,745,1006,771,630,68,587,1187,295,295,295,408,408,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1118,724,1322,405,199,614,1087,885,1313,317,769,660,660,1158,535,2,2,2,373,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1120,772,743,488,346,126,784,584,943,153,311,133,133,969,605,605,2,2,2,2,2,2,2,605,2,2,2,2,2,2,2,2},
{1404,284,176,590,1128,1371,322,543,1136,546,1315,174,174,777,777,891,2,2,2,2,2,2,2,579,579,579,579,2,2,2,2,2},
{1441,791,233,141,141,316,89,296,462,1263,758,482,599,599,578,341,2,2,2,2,2,2,2,2,2,2,2,525,525,525,2,2},
{1413,406,700,547,1166,250,518,543,104,331,205,205,691,691,2,2,118,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1485,400,1497,168,82,680,1103,554,249,702,493,101,296,236,2,236,236,944,944,2,2,394,2,2,2,2,2,2,2,2,2,2},
{1127,869,558,533,1215,194,1762,784,593,777,1153,1079,1079,1079,2,2,2,330,1045,2,1045,1045,2,2,2,2,2,2,2,2,2,787},
{1459,1243,467,533,266,1364,1031,890,1402,486,1678,1678,93,978,2,2,2,978,947,947,2,978,2,2,2,2,2,2,2,2,2,2},
{1139,809,117,522,955,1096,1120,1470,116,184,1565,1565,557,557,2,2,2,2,2,829,1326,2,2,2,2,2,2,2,2,2,2,2},
{1142,984,1044,590,340,241,662,357,366,1305,2,125,631,474,2,2,2,980,2,2,2,2,2,2,2,2,2,2,2,2,2,1273},
{1469,1247,1277,616,209,486,106,552,219,217,471,272,272,1201,2,2,503,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1148,542,1478,496,950,464,1011,235,136,180,2,416,758,453,2,909,2,2,2,2,2,2,2,2,2,2,1019,1019,2,2,2,2},
{1495,1178,874,415,1100,368,1057,1228,562,215,31,31,680,680,680,1208,2,2,2,2,2,2,2,2,1208,2,2,2,2,1208,1208,2},
{1497,1166,1613,1403,107,803,993,539,1436,1289,2,240,334,634,532,1147,2,2,2,2,2,2,2,117,2,2,2,2,2,2,2,117},
{1617,289,1033,169,355,260,30,45,721,906,88,44,44,418,417,218,2,2,846,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1628,721,400,239,728,1336,984,425,65,120,1232,463,463,640,349,616,616,2,2,2,2,2,2,2,2,147,147,2,2,2,2,2},
{1628,286,541,530,1610,201,1220,1592,272,181,2,38,263,1586,1157,1157,1157,2,2,2,1157,1157,2,2,2,1157,2,2,2,2,1157,1157},
{1531,621,210,755,482,82,1308,317,427,168,2,232,116,190,701,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,701},
{1532,575,1245,360,249,630,133,1406,920,1539,63,63,76,82,82,2,2,2,770,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1102,785,118,93,1491,988,275,53,1328,26,2,2,240,647,240,761,761,761,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1478,722,113,1534,1751,115,1728,1234,777,282,508,508,1184,63,1184,855,855,2,2,2,738,738,578,578,2,2,2,2,2,2,2,2},
{1480,536,1421,164,429,84,970,1673,548,497,2,2,530,156,156,128,245,2,2,2,2,260,2,2,2,2,2,2,2,2,2,2},
{1533,1302,1286,538,619,526,1669,145,1034,125,2,1038,1038,388,388,387,729,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1482,961,1093,556,1746,628,427,689,510,751,684,37,37,1229,1256,882,1507,1507,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1472,852,533,433,924,57,53,1036,410,675,1212,1212,1212,600,600,1212,1259,1245,1245,1245,1245,2,2,2,2,2,2,2,2,2,2,2},
{1228,425,1030,699,407,171,568,925,1104,97,2,2,1286,1286,1286,502,2,1219,1219,1219,1290,2,1219,1219,1219,1219,2,2,2,59,2,2},
{1547,657,777,695,1254,224,933,367,212,385,2,2,2,1422,749,245,885,710,2,2,710,710,710,45,710,710,710,710,2,336,710,2},
{1678,466,549,145,351,816,1041,334,192,192,2,2,348,1017,130,4,4,180,180,180,180,512,2,2,2,512,512,512,512,512,128,8},
{1550,569,481,1041,1680,1114,1265,160,386,194,2,2,2,533,929,531,422,531,1355,1355,1355,1355,531,216,216,2,2,2,2,2,2,2},
{1559,462,850,289,1570,71,512,858,810,835,2,2,2,2,1028,1205,1205,546,546,546,1205,1205,1205,1205,1205,2,1205,1205,1205,1205,1205,1205},
{1192,888,701,164,131,613,282,237,525,366,2,2,2,2,1737,845,845,750,2,1062,1062,1062,1062,1062,1062,1062,1062,1062,1062,2,1261,1261},
{1208,426,412,1072,274,248,1544,627,9,458,2,2,2,2,2,2,270,270,270,150,715,282,150,150,150,150,150,150,150,150,150,150},
{1128,393,1522,96,160,581,540,120,441,176,2,2,2,2,2,2,1427,551,1102,1102,328,328,592,592,592,592,592,592,592,592,592,592},
{1202,538,171,1177,1090,690,1566,746,1012,1012,2,2,2,2,313,781,808,313,1125,1117,930,1117,1117,1117,1117,1117,1117,1117,1117,2,2,2},
{1567,1265,372,1633,613,484,243,1523,21,275,2,2,2,431,431,431,431,2,2,978,489,889,889,889,889,889,889,889,2,2,2,2},
{1566,982,815,133,891,412,1179,831,651,268,2,2,2,367,366,367,367,63,63,767,2,2,2,2,2,2,2,2,2,2,2,2},
{1522,1422,1017,124,499,451,731,1112,1355,1355,2,2,2,854,854,336,854,336,1297,2,2,2,193,193,193,193,193,2,2,2,2,2},
{1160,1331,917,1696,401,547,122,592,863,863,2,2,703,703,703,703,495,495,495,2,2,495,495,495,495,495,269,2,2,2,269,269},
{1538,814,1027,677,524,226,756,202,242,102,2,2,912,564,1289,682,2,1125,1125,1125,1125,2,1289,1289,1289,1125,1125,1125,2,1289,1289,1289},
{1598,397,1471,1471,1162,866,236,948,1557,737,2,2,153,737,1408,765,765,608,2,2,2,171,608,608,608,608,2,608,608,2,2,2},
{1598,434,107,270,148,1317,835,123,642,1236,2,2,67,633,771,878,771,878,878,2,2,2,771,2,2,2,2,2,2,2,2,2},
{1628,1502,1042,822,80,403,1335,684,464,426,671,671,336,336,336,2,425,896,2,2,2,2,1337,1337,1337,1337,1337,1337,2,2,2,2},
{1630,715,1368,1273,993,293,385,545,1267,896,1038,1038,270,1325,1325,2,2,961,961,961,961,961,961,2,2,961,961,2,2,961,2,961},
{1612,723,409,641,796,1087,1228,1398,623,262,740,740,870,870,397,2,2,893,893,2,2,1367,328,2,328,2,2,2,2,2,2,2},
{1614,588,652,105,441,844,734,912,532,878,1073,1073,62,1415,693,1431,1431,1431,1431,925,925,925,925,925,925,925,2,2,2,2,2,2},
{1607,1503,1072,471,221,277,854,1236,263,752,2,694,1657,934,553,2,2,2,498,498,2,802,2,46,2,2,2,2,2,2,2,2},
{1172,987,140,1964,584,600,852,1725,456,1199,718,718,791,981,791,2,2,2,2,2,1260,2,2,2,2,2,718,2,2,718,2,718},
{1746,771,620,415,1057,437,613,1034,1662,837,2,1149,1466,1149,1149,1149,1466,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1263,835,1533,789,1259,174,1497,557,644,203,2,289,604,434,434,434,2,844,844,2,2,2,1111,1111,1111,2,2,2,2,2,2,2},
{1272,884,388,1889,956,159,1172,595,219,645,2,629,107,107,1279,75,2,2,2,211,2,2,2,2,2,2,2,2,2,2,2,2},
{1797,904,172,659,349,177,692,448,1141,990,640,99,1073,806,640,640,2,640,640,911,911,911,640,640,640,640,2,2,2,2,2,2},
{1276,442,1008,1352,243,162,711,301,552,1002,668,668,384,71,384,384,2,2,2,2,2,727,727,727,777,777,777,777,777,777,2,777},
{1600,1130,171,1113,813,722,117,990,37,24,969,94,825,1398,1398,1398,1398,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1198,496,714,609,644,1159,873,249,186,1539,136,239,379,1994,2,68,68,68,68,68,2,2,192,2,969,2,2,969,2,2,969,969},
{1678,1316,460,1133,1003,150,1236,1316,1417,218,1763,1763,77,77,2,1491,771,771,771,771,771,2,771,2,2,2,2,2,2,2,2,2},
{1682,449,1067,393,136,854,36,492,637,1053,247,1111,1111,1111,2,247,247,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1288,1690,702,760,420,333,1213,1911,805,351,67,67,1568,1568,2,2,604,142,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1288,1858,152,894,346,104,997,203,249,1006,1278,1489,1489,555,2,2,2,1074,1074,518,2,2,518,2,2,518,2,2,2,2,2,2},
{1601,697,532,408,697,1140,1568,47,1499,780,1171,318,318,318,2,2,2,2,318,318,2,2,2,2,2,2,2,2,2,2,2,2},
{1283,1078,791,873,655,412,389,835,292,958,1245,678,1611,1519,2,2,185,2,2,2,2,2,2,1245,1245,2,2,2,2,2,2,1245},
{1685,1610,1447,1093,1255,937,703,431,522,1384,988,988,253,988,2,1892,1892,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1822,589,236,205,797,39,241,1048,181,386,102,102,102,111,1361,1361,1361,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1233,843,813,157,396,669,1531,439,640,733,996,996,996,1566,951,608,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1342,705,302,595,1200,52,83,647,519,139,103,103,103,513,2,513,2,2,2,2,2,513,2,2,2,2,2,2,2,2,2,2},
{1630,1244,142,767,1299,719,629,1716,419,837,1145,1136,1148,1405,1405,1405,2,2,2,2,2,309,309,309,309,309,2,2,2,2,2,2},
{1636,974,279,419,893,1608,1491,156,1486,115,730,730,863,509,924,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1318,1234,213,1089,1567,602,1330,404,467,718,249,215,354,177,59,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1732,1771,584,533,297,1056,669,293,146,311,1176,311,590,590,277,2,2,2,2,2,2,2,2,2,539,539,2,2,2,2,2,2},
{1026,512,1196,394,1259,1313,762,549,311,1576,1576,465,465,140,465,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1360,383,1470,502,1010,153,1588,619,1246,396,1107,1107,112,423,423,2,2,2,2,2,202,2,2,2,2,2,2,2,2,2,2,2},
{1320,1636,858,1210,509,194,1575,154,1424,455,1860,832,1075,581,262,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1670,1350,689,1074,437,956,587,642,1154,439,196,1108,1108,1108,990,2,2,2,2,2,1112,2,2,2,2,2,2,2,2,2,2,2},
{1873,890,920,874,591,651,768,478,331,76,760,760,760,760,67,2,2,2,2,1241,1241,1241,1241,2,2,2,2,2,2,2,1241,1241},
{1682,867,333,102,628,891,654,506,995,684,961,563,1313,1313,1313,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1672,1248,429,813,262,92,809,1248,560,1365,1392,753,753,1259,1261,2,2,2,2,2,2,2,2,177,177,2,2,2,2,2,2,2},
{1391,1598,1112,590,797,584,1354,47,1473,1291,1874,48,491,463,990,463,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1875,1576,924,677,461,134,1525,1619,44,701,299,743,728,791,791,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,791,791},
{1267,904,1187,1595,765,1451,494,1573,950,909,87,1265,757,1371,1005,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1360,1091,1478,1237,97,578,1616,494,1422,223,865,1092,359,2,1080,4,2,2,2,688,1965,2,1965,2,2,2,2,2,2,2,2,2},
{1750,386,393,840,723,791,1707,1319,1525,83,1302,571,280,2,280,73,2,2,2,1207,2,2,2,2,2,2,2,2,2,2,2,2},
{1763,1018,1859,432,717,723,874,1294,1050,1800,1237,619,1074,2,10,1237,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1376,652,461,225,361,936,1073,1279,149,619,983,511,1994,2,2,1076,1076,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1947,393,495,946,1375,391,2128,582,1143,695,1872,760,760,2,2,1456,974,974,435,974,974,435,974,2,974,974,2,2,2,2,2,2},
{1768,1463,531,1008,95,1677,362,1105,985,177,1682,1682,244,2,2,1234,1041,1041,1041,2,2,2,1041,1041,2,2,2,2,2,2,1894,2},
{1780,1739,1357,1684,1586,736,208,966,1691,339,339,128,128,2,2,128,128,128,2,2,128,2,2,2,2,1929,2,2,338,2,2,338},
{1387,1459,358,1409,1919,917,777,223,313,1847,1012,1024,1024,2,2,2,2,1420,1420,1428,1420,2,1420,1420,2,2,2,1420,1117,1117,1117,1117},
{1289,907,228,665,1695,1735,489,214,762,1777,321,1674,932,2,2,2,2,1358,709,2,1959,1959,372,2,2,372,372,2,2,372,372,372},
{1378,680,1117,1367,759,62,319,563,505,1138,1093,345,693,2,2,2,780,780,2,2,2,729,729,729,2,2,2,2,2,2,729,729},
{1802,1645,453,1079,604,618,334,855,541,167,37,88,849,2,2,518,518,2,2,530,2,2,2,2,2,2,2,119,119,2,2,2},
{1275,1612,143,1586,502,987,555,436,2236,1826,494,494,358,2,2,213,2,2,2,2,2,2,1585,1585,1585,1585,1585,1585,1585,1585,1585,1585},
{1322,512,560,432,365,87,1835,1137,515,1271,1739,309,309,1229,1229,1229,2,2,2,2,2,2,2,2,416,416,416,416,2,2,2,2},
{1758,835,287,888,391,875,1834,516,1432,1171,98,408,302,976,976,1963,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1444,394,1613,796,645,1406,186,158,402,1364,314,588,606,2,577,117,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1337,1391,137,371,165,87,1026,20,419,99,572,572,918,854,918,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1323,589,526,1555,1636,1172,86,42,1545,57,627,1769,1769,2,867,343,2,2,2,2,2,2,2,724,2,2,2,2,724,724,2,2},
{1323,1647,384,301,270,549,1098,1144,1066,55,88,1805,683,2,945,120,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1327,1075,539,1017,926,350,1102,236,494,1268,286,286,1293,267,227,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1472,661,1538,487,94,2209,563,138,881,1735,718,203,1382,1473,1473,1473,1473,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1413,766,349,1471,45,625,733,1082,170,58,1268,207,1081,1081,1081,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1861,1487,419,97,799,1791,458,1029,370,627,57,414,414,1540,247,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1881,716,268,387,2138,1212,999,408,1363,434,1429,1429,1648,1648,1007,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1480,1131,1089,1688,340,962,505,1816,139,44,1350,403,1385,1996,173,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1868,650,1146,1690,948,43,497,692,1628,1302,1302,108,462,731,731,2,2,2,2,2,2,2,185,185,185,2,2,2,2,2,2,2},
{2023,1204,531,733,1054,618,668,363,783,218,1302,2055,559,2055,2055,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1328,601,601,617,554,467,391,1545,162,1361,807,1565,1565,243,1344,2,725,510,510,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1808,1525,1129,652,1195,329,1410,558,1322,911,161,536,737,94,306,2,2,2,2,2,2,2,2,2,541,541,541,2,2,2,2,2},
{1911,1338,639,1106,854,128,19,1353,847,253,618,517,2054,2054,93,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1825,850,180,1483,864,953,50,81,106,432,1372,1372,1212,10,10,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1892,441,977,228,1252,604,735,136,889,878,1319,1319,2127,2127,1963,367,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1820,1553,536,1351,425,1268,227,1742,429,348,1397,552,1151,1151,2,180,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1453,1044,556,833,305,1493,989,1158,726,1790,532,1229,1229,1229,2,2,2,2,2,2,2,2,2,2,259,2,2,2,2,2,420,2},
{2059,592,492,973,137,1331,392,334,635,1480,2254,1796,1796,284,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1460,986,709,268,755,824,83,893,115,656,2071,1323,1001,144,2,2,2,2,2,2,2,2,1527,1527,1527,1527,1527,1527,1527,2,801,801},
{1850,1476,792,840,2037,229,1578,526,431,1485,1450,1001,1001,1001,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1922,1383,813,346,1247,666,1931,1111,2042,79,682,501,1349,1930,2,2,681,681,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1922,542,1739,625,88,1376,259,49,338,318,505,788,1314,657,2,2,2,1314,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1948,1530,576,582,1069,119,2131,41,1178,1677,1677,1677,325,346,2,2,2,2,2,2,1401,2,33,2,2,2,2,2,2,71,71,71},
{1928,1111,168,1252,1467,1083,1927,603,1278,714,1027,50,751,1970,2,2,2,2,621,2,100,2,2,10,10,2,2,2,2,793,793,793},
{1394,896,674,2350,1375,1599,1858,135,762,722,628,685,705,28,2,2,2,2,2,2,2,2,2,2,2,855,2,2,2,2,2,2},
{1540,791,518,419,1130,1068,299,1386,1378,134,859,859,71,162,2,71,71,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2107,709,828,154,542,184,1094,1665,307,1549,177,2007,85,773,2,2,2,2,2,2,2,2,2,2,2,697,2,2,2,2,697,2},
{1977,1218,244,365,576,666,761,238,629,913,1907,986,1351,986,704,1257,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1496,1912,1291,1053,510,2322,1048,1530,2223,673,894,594,628,332,2,2,2,2,2,295,295,295,2,2,2,2,2,2,2,2,2,2},
{1520,1107,1082,687,484,1732,676,1595,467,653,1091,428,2113,332,332,332,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1905,612,920,848,562,2032,230,1305,1073,851,731,798,798,357,516,2,2,2,2,2,2,2,2,1465,1465,373,2,2,2,2,2,2},
{1428,1062,1016,75,297,1130,533,768,464,753,48,1510,1510,418,375,1626,2,221,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1396,729,1710,337,371,489,1341,2117,132,1870,853,853,408,1079,328,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1978,1051,977,588,1423,1001,508,409,825,497,659,1063,384,463,463,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1534,854,2007,1207,947,1773,1571,1505,909,1471,1655,1655,2334,1327,409,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2157,2106,679,238,378,49,1101,588,811,1313,1556,2301,475,812,812,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2187,1515,549,1416,1073,1613,47,1046,390,252,1214,1404,1404,933,1013,2,2,2,1025,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2145,1069,662,709,737,1141,1737,827,1384,1628,107,107,1032,277,277,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2173,1379,155,393,1578,610,1911,899,697,58,185,597,597,1249,1369,2,2,2,2,1369,2,2,2,2,2,2,2,2,2,2,2,2},
{1413,1589,1603,2268,520,333,1416,859,1619,867,1154,512,1291,413,413,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1600,1823,1698,1268,623,583,1932,1674,522,529,1862,1281,246,989,246,2,246,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1559,992,174,1313,612,1487,1487,461,702,37,1660,839,2,95,1628,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2066,1719,710,1294,2041,377,1005,690,132,756,1618,187,187,726,187,615,615,2,2,2,2,851,2,2,2,2,2,2,2,2,2,744},
{2192,1029,310,1609,592,1542,265,117,2006,82,162,205,2,2009,2009,1201,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1570,1504,1414,1143,1999,1932,1015,1015,556,514,626,79,2,79,1795,1461,1461,2,2,2,2,2,2,2,1461,1461,1461,1461,1461,2,2,2},
{1562,937,1964,934,1349,378,459,109,1676,1655,1339,1809,2,768,768,188,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1965,949,1057,1043,2256,1571,970,348,69,1324,1174,485,105,105,105,2172,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2044,1869,838,1424,1097,155,1142,230,1335,420,235,1510,2,431,425,622,2,2,2,2,2,625,2,2,2,625,625,2,2,2,2,2},
{1976,1433,820,504,421,1007,388,1083,635,82,1524,750,2,2,870,106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1990,1948,1138,1787,253,115,312,1912,341,1624,260,1783,1315,1315,790,790,790,790,790,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1993,585,327,1393,1013,1671,1758,1436,1989,1217,1109,1476,2,2,1042,756,1042,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2056,1062,1605,1943,680,445,113,857,650,1388,2016,1231,2,2,1292,1292,1292,2,1039,1039,1039,1039,1039,2,2,2,2,2,2,2,2,2},
{2008,1773,416,1954,1314,742,1694,505,202,1747,785,375,2,2,2,477,1538,477,2,2,2,2,2,1309,1309,1309,1309,2,2,2,1309,2},
{1658,1008,258,749,427,1071,2052,263,1047,2152,1602,1602,2,2,2,1311,669,669,2,1897,1897,1897,669,669,669,669,669,669,669,669,669,669},
{2258,1887,1875,1021,863,604,543,1115,509,1243,312,213,2,2,2,2,335,770,770,2,1143,567,2,2,567,567,567,411,2,2,2,411},
{2266,1872,991,1468,1168,939,907,833,624,701,386,1713,2,2,2,2,2,931,861,381,1299,2,861,2,2,2,861,861,861,861,861,2},
{2273,1510,803,2278,842,1245,1389,230,822,1564,113,1276,2,2,2,2,1350,273,273,2,2,2,2,2,1281,1281,1281,2,2,1281,1281,1281},
{2278,1028,548,373,190,1443,614,2386,1940,930,557,2069,2,2,2,558,112,103,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2108,776,1568,342,2215,1882,681,1292,1601,586,1481,618,1930,1930,1930,1930,2146,89,89,2,2,2,2,2,2,2,1171,2,2,2,2,2},
{2139,2177,1652,392,715,605,778,632,472,1619,64,64,2,2,2,1747,859,2,2,2,2,2,216,216,216,216,1747,1747,1747,1747,1747,1747},
{1492,448,271,135,1288,417,130,83,235,2313,482,746,2,2,746,609,611,611,611,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1628,846,1504,138,464,401,501,506,967,1027,1540,1035,2,1921,1539,1539,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1630,1677,1624,301,1038,909,887,374,411,143,1021,174,2,1393,19,634,2,2,2,2,2,2,2,873,2,2,873,873,2,2,2,2},
{1654,1131,2054,994,2170,548,801,252,87,219,488,2239,2,1232,1839,1822,2,2,2,968,2,2,2,2,2,2,2,2,2,2,2,2},
{2065,1520,1423,1797,899,1425,1801,776,2365,58,646,695,2,998,998,1342,2,2,2,2,2,2,2,2,2,2,2,2,1150,1150,2,2},
{2304,1948,316,1063,237,607,1143,2575,1388,1022,127,251,2,438,1570,1570,1570,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2177,710,1912,617,809,1078,199,905,673,519,457,52,2,1348,1348,410,2,2,2,2,2,340,2,2,2,2,2,2,2,2,2,2},
{2073,1543,1586,1296,2466,753,455,46,119,1694,2035,1592,206,206,206,2,2,2,2,2,2,2,2,1172,2,2,2,2,2,2,2,2},
{2075,1056,874,2101,566,1790,1333,386,538,1560,2254,331,717,717,717,454,454,2,2,2,2,2,2,2,2,2,2,2,454,454,2,2},
{1670,977,1540,553,855,1729,239,757,191,62,732,549,1092,1092,199,199,199,199,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2096,1155,2257,125,1986,245,1208,2146,2287,680,1413,73,467,1410,1410,2,2,2,2,2,133,133,133,2,2,2,2,2,2,2,2,2},
{1538,1026,2157,1457,1784,2559,184,29,614,273,697,697,1922,697,697,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2106,856,1025,382,389,272,425,672,1021,216,601,292,510,510,876,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1662,608,2478,266,1330,505,40,2058,964,724,596,1221,1221,310,42,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1600,1338,196,1510,1371,1138,957,169,545,1176,1131,2460,1708,541,541,2,363,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1682,1008,737,444,822,999,2066,283,646,1860,1008,778,1178,1178,458,1743,2,2,2,2,2,2,2,2,2,2,2,2,2,1743,1743,1743},
{2132,756,1097,166,202,411,640,717,514,1389,633,633,633,633,633,633,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2386,748,620,478,647,898,320,53,1115,190,60,1860,1860,802,802,2,2,2,2,1264,1346,1346,2,2,2,2,2,2,2,2,2,2},
{2125,996,1081,124,1140,628,1668,1913,151,2495,523,430,260,708,2190,2190,2190,2,2,2,2,2,1660,2,2,497,497,497,497,497,497,2},
{1602,1489,895,383,56,698,2081,1728,794,789,16,16,797,302,52,2,2,2,2,2,2,2,2,2,2,797,797,797,797,797,797,1808},
{2210,606,901,547,131,1924,1852,1271,194,766,390,390,520,795,1429,1429,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1731,599,817,724,718,1038,1082,2503,1341,936,421,1802,1304,1304,1491,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1614,1058,847,689,749,1028,1047,1474,117,1369,1442,1442,1540,700,104,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1733,679,2041,2420,326,934,1172,1431,193,370,1073,1073,1073,260,2,2,2,2,2,2,2,2,2,2,2,2,1193,2,2,2,2,2},
{2168,1532,769,2570,1303,357,1793,1633,1226,1025,205,1218,1984,764,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2234,1706,356,581,532,933,1704,387,1345,1345,34,135,350,307,614,614,307,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1656,2093,354,310,306,1553,106,459,175,55,1482,958,254,254,2,356,356,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1654,1035,330,533,1446,953,499,142,1527,1748,265,1437,265,510,2,2,2,2,2,2,2,1835,1835,1835,1835,2,2,2,2,2,2,2},
{1600,479,1457,246,2025,618,1612,2139,169,1492,1097,1327,2007,2007,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1744,447,845,2145,748,1555,1193,1312,916,1770,1294,546,794,323,2,2,2,2,2,1733,1733,2,2,1730,2,1733,1733,2,2,1733,551,551},
{1766,1558,1901,1393,987,1859,815,1165,50,2065,88,88,1453,1453,2,2,2,995,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1615,1267,1242,1494,399,663,68,1209,1573,528,640,1200,248,640,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1678,592,1351,509,312,721,163,1597,1262,199,2643,1330,1661,992,2,2,719,2,2,2,2,2,2,2,2,2,2,2,2,2,1704,2},
{2207,970,838,2043,1016,561,267,329,584,608,679,303,832,1613,959,959,959,1409,1409,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2217,352,447,914,1200,561,614,1616,509,2292,1114,1114,1229,52,1053,1053,1053,2,2,2,2,2,2,2,2,2,2,2,2,2,795,795},
{2313,595,1593,1951,133,282,372,2396,1117,226,2104,267,374,267,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2312,1231,1604,997,652,1096,1070,320,481,662,911,1610,342,2527,606,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2245,1541,1828,783,615,428,1282,1892,848,1219,2465,314,314,314,2,2,2,2,2,2,2,2,2,2,2,2,1323,2,2,2,2,1323},
{2522,1030,324,1264,628,1339,480,234,2351,1085,1979,2333,1339,1356,1356,2286,2,2,2,2,2,2,2,2,2,2,2,2,2530,2,2,2},
{2519,1136,612,209,994,1179,1060,2621,130,485,661,1444,2122,124,258,1114,2,2,806,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2524,1894,253,2072,1242,355,888,1362,28,480,452,1216,595,545,354,1145,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2569,1356,1053,410,437,58,1508,831,2272,383,1725,615,1191,1191,1191,2493,186,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2386,1106,709,251,784,929,1551,2481,304,2148,1546,955,2453,866,866,2,2,2264,2264,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2228,1163,1995,649,1000,680,325,1591,774,767,711,711,1418,524,711,401,976,2,2,2,2,2005,2005,2,2,2,2,2,2,1390,1390,2},
{2362,1706,564,1088,1296,1267,70,1015,496,1298,758,154,240,240,154,154,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1715,2260,357,557,783,1195,2288,1997,1120,144,247,175,1277,203,203,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2294,2360,1353,748,1439,226,940,2316,1112,1527,214,1406,1429,712,1124,2,595,595,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2303,1018,316,280,1616,909,97,1126,1295,736,216,54,2045,726,1673,2,2,2,2,2,779,779,2,2,2,2,2,2,2,2,2,2},
{2390,491,1217,1148,2314,2250,2180,308,613,662,1346,1346,1346,1280,778,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1732,527,1303,664,71,294,404,917,1074,180,2618,2412,441,1987,1750,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1695,1287,1346,1181,1412,1653,830,2025,957,1720,1614,887,964,964,964,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1756,2308,1986,101,957,633,1940,1002,390,1237,95,1441,95,95,705,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2461,1412,540,1183,229,300,47,585,518,402,1863,1863,560,1326,1326,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1707,717,366,287,1883,50,599,1371,474,1551,947,2142,1885,947,2008,1004,1004,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2632,567,1149,1227,1156,2052,643,1585,1197,581,63,718,699,149,149,1940,2,2,2,2,2,2,2,2,2,2,2,2146,2,2,2,2},
{1773,2024,377,340,1938,103,1180,600,199,848,2449,2449,506,506,762,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2435,1920,394,1482,266,1637,911,1697,1689,1249,1085,1085,397,2292,1355,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2345,662,270,324,1061,1080,1952,593,1480,2111,2667,2093,2059,2120,955,1447,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1777,455,1487,1190,455,1542,977,2308,437,1129,410,856,1420,412,412,766,2,2034,2034,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2662,2224,1142,656,59,598,730,458,226,1151,741,1286,1015,2,688,2017,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2666,768,529,990,2329,130,1678,2466,318,1083,387,1524,511,2,731,731,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2501,1216,246,1278,718,704,2019,88,273,1203,67,1488,1828,2,2,1489,1489,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2474,2292,1818,2061,2833,751,2172,1708,1210,1675,370,131,163,2,2,163,163,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1751,1575,889,828,82,1956,712,499,1420,1686,339,2326,2035,2,2,558,558,2,1234,2,2,2,2,2,2,2,2,2,2,2,1239,1239},
{2522,1148,1943,168,218,252,543,1535,2004,130,353,353,42,2,2,2,1173,1173,2,1547,2,2,2,2,2,2,2,1547,1173,1547,1547,2},
{2695,432,1213,579,865,1637,1857,84,447,155,2492,347,1980,2,2,2,1155,1155,1155,2,1933,1933,1933,2,2,2,2,2,2,2,1901,1901},
{1808,1683,474,1761,106,602,1416,217,1351,1602,366,393,1966,2,2,2,2,2,378,378,606,606,606,2,2,2,2,2,919,919,919,919},
{2428,1576,1692,449,2012,240,1167,418,272,1557,2197,645,645,2,2,2,2,2,2150,2150,2,2,562,715,2,2,2,81,81,2,2,2},
{2727,781,1689,1709,997,2563,1032,468,44,992,1214,725,75,2,2,2,2,360,360,380,2,2,2,2,2,2,2,2,2,2,2,2},
{1948,1085,1344,2090,1435,2389,3193,1007,1003,244,667,1838,2062,2,2,2,1802,299,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2433,932,689,818,2014,1498,749,1645,867,1627,47,1766,2193,2,2,2030,2030,2,430,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2463,712,1525,2092,2942,352,761,242,2178,2339,483,1905,1347,2,2,65,529,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2547,920,386,925,74,579,323,2319,520,2332,1535,751,1591,2,770,770,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2452,2588,2055,665,818,2622,413,1260,965,211,989,1219,166,2,1251,1251,2,1256,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1957,2311,993,276,293,2826,1087,880,927,1811,1122,2974,2974,2,2,590,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2552,998,533,827,1619,831,1861,918,750,1955,241,1899,448,2151,2151,449,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1860,579,1000,1575,898,170,185,1032,293,2754,438,459,459,2,1199,1199,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2602,2417,1888,2528,1410,669,1543,233,814,2478,225,1449,1449,224,1671,1671,2,2,931,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1889,2527,1366,1371,387,925,1751,162,250,1064,292,467,467,546,1244,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2492,1186,1350,1616,2749,1962,33,708,279,813,1390,489,1203,268,173,2410,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2500,1575,423,541,561,380,262,1564,1923,1242,2084,1758,1283,2213,924,924,2,2,2,2,2,2,2,2,2,2,2,1827,1827,2,2,2},
{1842,1736,489,743,1539,1681,683,1412,1418,312,2778,2778,1975,1975,803,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2824,1183,2201,278,241,2230,1591,1648,1036,818,1321,1312,754,813,813,813,813,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1900,2506,952,1059,163,870,681,1235,1271,1188,2071,1705,1183,648,404,2,2,2,2,2,2,2,2,2236,2236,2,2,2,2,2,2,2},
{2662,1443,2327,132,490,1149,1572,744,429,621,1763,2383,1903,1246,964,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2673,2182,1307,1776,1233,1828,1828,340,249,216,503,160,160,582,926,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2129,2,1018,1018,1103,1103},
{2042,620,1074,2057,2758,859,815,1127,766,1693,252,808,981,416,416,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2102,881,2170,1673,705,101,58,1712,1568,214,758,488,1007,269,243,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2692,2665,961,1478,324,429,1311,376,1648,130,2083,1047,409,343,343,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2122,1087,563,1669,647,2996,151,2458,250,310,71,1348,355,965,2815,1333,1333,2,2,2,2,2218,2,2,2,2,2,2,2,2,2,2},
{1952,1968,2260,2945,2464,1055,2626,570,1316,1828,1828,970,970,221,220,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2072,1947,1779,254,2822,1552,855,804,3452,202,695,82,684,208,1270,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1947,1699,1341,486,1765,1960,264,899,1082,1674,987,1878,930,1008,930,930,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1953,1527,1643,591,1517,2427,1232,1555,2542,495,675,2534,2534,3106,83,3106,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2744,1728,2213,792,761,1667,1908,31,447,442,815,2865,762,762,762,762,2,2,2,2,2,2,2,2,2,2,2,2,649,649,649,2},
{2722,1406,1257,807,2191,3017,1330,1023,602,2124,794,530,733,733,1083,2528,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{1963,1525,437,398,609,393,2420,3059,435,1251,1977,1672,450,1960,1954,1960,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2626,2468,2838,845,2060,218,1080,912,911,1973,1365,920,1316,1316,2,1316,1316,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2734,1727,1743,1026,809,1154,779,244,1238,1616,812,784,825,1810,1810,1810,1810,1559,1559,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2180,2262,1651,204,3193,2121,2725,1016,629,1834,603,2848,26,26,728,728,728,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2648,1328,2578,133,1377,105,2485,2139,323,1045,145,761,1201,1848,2,814,814,814,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2999,358,250,1379,102,2349,1491,2074,42,376,2811,1220,296,296,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2810,1274,499,742,1724,425,190,1561,1302,2603,2255,917,661,661,2,2,2,495,2,2,2,2,2,2,2,2,2,2575,2,2,2,2},
{2150,589,876,1616,2655,432,902,1028,433,1375,574,1400,1400,1400,2,2,2,2,2,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529},
{1665,1856,201,824,796,249,1217,590,1375,1175,1599,824,824,3319,2,2,2,601,1961,1961,2,2,2,1961,2,2,2,2,2,2,1961,2},
{2704,2239,1260,140,2161,2781,1840,574,2353,343,3218,61,2108,2038,1873,2,1833,1408,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2173,876,802,2197,3338,176,1783,224,1763,1160,1264,1264,2864,554,2,552,552,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2708,1663,2279,824,836,1598,2101,1620,1202,1606,1368,1079,1167,1999,2848,2848,2848,1101,1101,1101,2,2,2,662,2,2,2,2272,2,2,2,2},
{1987,1463,2328,1890,1443,2086,283,2895,522,1577,1514,1657,2605,891,2,1181,1181,2,2,2121,2,2,2,2,2,2,2,2,2,2,2,2},
{2173,1637,1139,905,1802,1378,296,439,1507,1017,1427,209,708,462,1508,1508,1508,2,2,2,2,2,2,2,2,2,2,2240,2240,1459,1459,1459},
{2206,1526,628,2877,802,2587,1253,1258,1044,2195,3246,40,2898,2898,1704,598,2,2145,2,2,2,2145,2,2,2,2,2,2,2,2,2,2},
{2182,618,1022,1433,1138,1580,2590,149,796,2090,743,294,294,1117,720,3003,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2025,1805,1466,1213,2006,1903,568,1700,1355,865,1783,1006,1006,1070,1070,268,2,2,2,2,2388,2388,845,845,845,2,2,2,2,2,2,2},
{2185,1038,3050,1461,2270,2159,958,1637,233,2483,525,987,437,437,437,3065,2,2,2160,2160,2,2,2,2,2,2,2,2,2,2,2160,2160},
{2083,1465,847,1450,502,447,2168,794,1761,1324,162,188,2853,2853,636,973,2,563,2,2,2,2,2,2,2,2089,2089,2089,2089,2089,2,2},
{2923,2303,203,508,472,648,3169,269,515,3147,2415,1700,1700,1700,1461,1461,1461,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2300,1116,1555,2794,1095,998,1999,894,963,753,324,2130,2675,2675,554,2045,2,2,2,2,2,2,2,2130,2130,2130,2,2,2,2,2,2},
{2103,768,702,1548,1486,2228,2846,861,665,1497,1046,1046,2252,394,394,1901,1155,2,2,2,2,2,2,2,2,2,2,2,192,192,192,192},
{2923,640,661,2179,1207,182,872,171,738,269,1372,222,908,2069,2069,2,1550,516,2,2,2,2,2,2,2,2,2,2,1109,2,2,2},
{2833,2005,387,733,562,468,317,224,94,478,1606,2522,1606,2001,1087,2,2,1087,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2125,2479,1749,1226,1169,1681,459,652,1087,2211,1613,686,2213,1689,2446,2,2,2925,2925,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2953,1059,205,3093,138,132,2148,1345,1499,216,151,1296,2446,1610,1632,2,2,2,2,4,4,2,2,2,987,987,2,2,2,2,2,2},
{3199,1431,593,2050,2785,507,1540,1103,1740,459,62,1766,1781,1121,1600,2,1600,1600,125,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2258,1714,415,373,1919,2605,693,827,1918,496,1479,1903,86,1083,415,2,2,38,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3289,2032,329,2169,2323,1599,517,1704,1847,804,632,40,40,40,40,40,40,40,40,2,2,1600,2,2,1600,2,2,2,2,2,2,2},
{2165,2725,2293,368,705,3063,494,103,12,1332,175,2331,3144,2165,1709,1709,2090,2,2,2,2,1363,1363,2,566,2,2,2,2,2,2,2},
{2300,1070,2169,2540,734,1002,912,1386,2215,224,1285,880,2052,2052,1301,959,563,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3267,1852,1037,648,611,1250,432,853,1467,179,715,2,2033,841,2607,2607,2607,2607,2,2,2,2,1874,1874,2,1874,899,2,2,2,2,2},
{2348,2565,794,859,1740,1596,532,462,457,1014,1227,2,2761,954,249,249,2,458,458,2,2,2,2,2,909,909,2,2,2,2,2,2},
{3038,2399,1450,1276,1222,727,552,646,1055,2351,686,63,252,504,3166,1802,2,2,1165,1165,1165,2,2,2,2,1165,1165,1165,2,2,1165,2},
{3038,2519,1494,107,2597,802,535,1669,1695,1928,1940,1580,1580,85,2274,1551,2,2,2431,560,560,560,2,2,1098,2,2,2,2,2,2,2},
{3040,1044,1927,1952,1479,3124,1373,1990,588,2550,1277,2,629,2671,1842,2712,840,1702,2,1669,2,1347,2,2,2,2,1669,1669,1669,1669,2,1669},
{3056,1567,691,1243,653,751,248,842,1954,480,458,2,2,2451,934,3172,3556,2259,2312,2,2562,2562,2,2,2562,2562,2562,2562,2562,2,2,2},
{2959,2553,1333,877,2492,3169,2498,686,2030,2820,3233,1313,1313,1471,1471,1471,1471,2,2,1471,1471,2,2,1481,2,1887,2,2,2,2,2,2},
{3398,964,862,301,1705,2002,310,644,144,1091,1507,2,2,2460,496,496,2517,2517,1842,2,2,1964,2,2,2,2,2,1676,2,2,2,2},
{2379,3034,166,302,2108,1078,2976,68,158,134,1567,2,2,1514,1514,1514,1883,1883,2,2,1883,1883,1883,1883,1883,1883,1883,1883,1883,2,2,2},
{2386,1270,1204,1032,1474,224,496,2296,1536,1219,311,2,2,2,2,1238,2108,2108,2108,2108,2108,2108,2108,2108,1444,1444,1444,1444,1444,1444,1444,2},
{2431,739,2488,1386,1632,2107,2602,2139,1751,349,3147,2,2,64,16,8,32,4,4,32,728,728,728,728,2,2,64,16,8,180,180,180},
{3405,2142,1621,110,2112,2097,807,740,747,282,372,2,2,2,2,2493,2493,2493,1299,2,132,1872,2,1843,2,2,2,2,2,2,2,2},
{3157,1230,685,1513,663,1335,2100,1441,1826,1670,1539,2,2,2,2899,2899,1378,54,2,46,46,2,2,1362,1362,2,2,2,2,2,2,2},
{2415,822,3658,449,1980,891,129,823,1787,621,514,2668,2668,2668,2668,2668,666,269,2830,2,2,2,2,241,370,370,370,370,2,2,2,2},
{2463,2664,2825,1208,882,629,428,428,356,343,1730,2,769,769,769,1714,769,2,2,955,769,2,2,955,955,955,2,2,2,955,955,955},
{2447,1588,1077,831,1413,2362,1499,1812,1112,815,129,1034,1034,1867,194,518,1454,723,723,1251,2,160,2,2,1251,1251,2,2,2,2,2,2},
{3094,1638,1514,843,1503,1884,1481,727,723,1319,226,2,676,2401,1699,562,639,639,1176,2,2,2,2,824,2,2,2,2,2,2,2,2},
{3125,2004,547,2986,2919,471,948,1747,201,1862,802,2,1238,1277,1277,1277,2,2,1245,1245,1245,2,2,2743,1245,1245,2,2,2,2,2,2},
{2582,2469,533,1726,1575,1505,2448,2031,1257,427,588,1633,202,3553,1938,672,195,195,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2378,636,1958,1628,1255,2285,2208,1626,719,2944,1086,1436,1436,1719,2111,655,2637,2637,2,2,2,2637,2637,2,2637,2637,2637,2637,2637,2,2637,2637},
{2372,3079,2161,515,368,847,955,1257,1937,315,2666,1938,1723,1252,1252,362,362,2,2205,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2518,2060,1055,362,1455,1899,1105,1560,2237,2451,2080,181,2346,181,1829,1829,1829,2,2,1509,1509,1509,2,1509,2,2,2,2,2,2,2,2},
{3580,1671,674,1838,814,1409,323,3021,1047,2579,2579,2968,2968,102,2656,2638,2638,4006,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3194,1576,1084,859,2879,1600,953,1429,471,867,1105,1490,293,293,293,2,2,198,2619,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3215,2004,3333,2271,3283,1660,2135,1696,1413,1362,834,253,253,253,3802,2,2,2,1881,690,690,2,2,2,1881,1881,1881,1881,1881,2,1881,1881},
{3719,2441,2094,1665,1707,1827,1310,230,1635,143,386,1029,1070,1062,1062,2,1062,1062,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3249,1309,1232,472,711,2557,1479,1027,145,489,1377,2928,2928,3522,3522,3522,968,415,415,2,2,2,2,1332,1332,1332,2,1332,2891,2,1332,2891},
{2462,1962,257,2244,1966,1905,204,262,799,319,752,1696,971,971,3781,1426,1426,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3434,3131,1399,3413,1533,281,3288,1242,810,135,2506,2506,1742,946,1015,1044,1044,1044,2,2,2,2,1044,1837,1837,1837,1837,1837,2,2,2,2},
{2518,1200,631,596,1946,365,2960,413,592,3878,242,2714,2364,1402,1402,2322,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3362,2012,1759,2002,1365,150,3120,471,1590,3246,1296,196,196,196,2984,2323,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{3382,899,3140,2860,1155,1840,2822,355,1753,1856,1018,822,52,52,52,1102,1102,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2728,1334,274,1330,2674,2614,931,2250,883,1506,2193,1345,1089,500,2,219,390,2,2,2,2,2,2,2,390,2,2,2,2,2,2,2},
{3911,3343,202,675,1733,71,166,176,1323,2864,899,2155,1108,2172,2,2,1829,2172,1107,2,2,2,2,1107,1107,1107,2,2,2,1107,2,2},
{2757,3466,1411,1168,340,2760,1053,524,53,2090,1227,26,260,830,2,2,2,1139,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2662,902,2371,1920,1097,1476,1008,1012,3556,468,3374,2560,591,1446,2,298,298,149,149,149,149,149,3135,3135,3135,3135,3135,2,2,2,2,2},
{2861,1407,1848,245,2186,1209,164,2577,625,132,657,2333,2333,2213,2213,2213,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}
};

View File

@ -3,7 +3,7 @@
c_sources = Divonne.c
AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE
AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS)
AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) "-Dcubafun_=libDivonnecubafun_"
AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS)
noinst_LTLIBRARIES = libdivonne.la

View File

@ -4,14 +4,10 @@
code lifted with minor modifications from DCUHRE
by J. Berntsen, T. Espelid, and A. Genz
this file is part of Divonne
last modified 26 Jul 13 th
last modified 7 May 15 th
*/
#define NextSet(p) p = (Set *)((char *)p + setsize)
/*********************************************************************/
static void Rule13Alloc(This *t)
{
static creal w[][nrules] = {
@ -153,7 +149,7 @@ static void Rule13Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -298,7 +294,7 @@ static void Rule11Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -309,32 +305,55 @@ static void Rule11Alloc(This *t)
static void Rule9Alloc(This *t)
{
static creal w[] = {
-.0023611709677855117884, .11415390023857325268,
-.63833920076702389094, .74849988504685208004,
-.0014324017033399125142, .057471507864489725949,
-.14225104571434243234, -.062875028738286979989,
.254591133248959089, -1.207328566678236261,
.89567365764160676508, -.36479356986049146661,
.0035417564516782676826, -.072609367395893679605,
.10557491625218991012, .0021486025550098687713,
-.032268563892953949998, .010636783990231217481,
.014689102496143490175, .51134708346467591431,
.45976448120806344646, .18239678493024573331,
-.04508628929435784076, .21415883524352793401,
-.027351546526545644722, .054941067048711234101,
.11937596202570775297, .65089519391920250593,
.14744939829434460168, .057693384490973483573,
.034999626602143583822, -1.3868627719278281436,
-.2386668732575008879, .015532417276607053264,
.0035328099607090870236, .09231719987444221619,
.02254314464717892038, .013675773263272822361,
-.32544759695960125297, .0017708782258391338413,
.0010743012775049343856, .25150011495314791996 };
RC(-.002361170967785511788400941242259231309691),
RC(.1141539002385732526821323741697655347686),
RC(-.6383392007670238909386026193674701393074),
RC(.7484998850468520800423030047583803945205),
RC(-.001432401703339912514196154599769007103671),
RC(.05747150786448972594860897296200006759892),
RC(-.1422510457143424323449521620935950679394),
RC(-.06287502873828697998942424881040490136987),
RC(.2545911332489590890011611142429070613156),
RC(-1.207328566678236261002219995185143356737),
RC(.8956736576416067650809467826488567200939),
RC(-.3647935698604914666100134551377381205297),
RC(.003541756451678267682601411863388846964536),
RC(-.07260936739589367960492815865074633743652),
RC(.1055749162521899101218622863269817454540),
RC(.002148602555009868771294231899653510655506),
RC(-.03226856389295394999786630399875134318006),
RC(.01063678399023121748083624225818915724455),
RC(.01468910249614349017540783437728097691502),
RC(.5113470834646759143109387357149329909126),
RC(.4597644812080634464633352781605214342691),
RC(.1823967849302457333050067275688690602649),
RC(-.04508628929435784075980562738240804429658),
RC(.2141588352435279340097929526588394300172),
RC(-.02735154652654564472203690086290223507436),
RC(.05494106704871123410060080562462135546101),
RC(.1193759620257077529708962121565290178730),
RC(.6508951939192025059314756320878023215278),
RC(.1474493982943446016775696826942585013243),
RC(.05769338449097348357291272840392627722165),
RC(.03499962660214358382244159694487155861542),
RC(-1.386862771927828143599782668709014266770),
RC(-.2386668732575008878964134721962088068396),
RC(.01553241727660705326386197156586357005224),
RC(.003532809960709087023561817517751309380604),
RC(.09231719987444221619017126187763868745587),
RC(.02254314464717892037990281369120402214829),
RC(.01367577326327282236101845043145111753718),
RC(-.3254475969596012529657378160439011607639),
RC(.001770878225839133841300705931694423482268),
RC(.001074301277504934385647115949826755327753),
RC(.2515001149531479199576969952416196054795) };
static creal g[] = {
.47795365790226950619, .20302858736911986780,
.44762735462617812882, .125,
.34303789878087814570 };
RC(.4779536579022695061928604197171830064732),
RC(.2030285873691198677998034402373279133258),
RC(.4476273546261781288207704806530998539285),
RC(.125),
RC(.3430378987808781457001426145164678603407) };
enum { nsets = 9 };
@ -440,7 +459,7 @@ static void Rule9Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -451,21 +470,33 @@ static void Rule9Alloc(This *t)
static void Rule7Alloc(This *t)
{
static creal w[] = {
.019417866674748388428, -.40385257701150182546,
.64485668767465982223, .01177982690775806141,
-.18041318740733609012, -.088785828081335044443,
.056328645808285941374, -.0097089333373741942142,
-.99129176779582358138, -.17757165616267008889,
.12359398032043233572, .074978148702033690681,
.55489147051423559776, .088041241522692771226,
.021118358455513385083, -.0099302203239653333087,
-.064100053285010904179, .030381729038221007659,
.0058899134538790307051, -.0048544666686870971071,
.35514331232534017777 };
RC(.01941786667474838842844534313920462333850),
RC(-.4038525770115018254611834753723880293161),
RC(.6448566876746598222277360730193089551024),
RC(.01177982690775806141012214458820955067854),
RC(-.1804131874073360901182293138710989490609),
RC(-.08878582808133504444306598174517276122439),
RC(.05632864580828594137378124255408286479947),
RC(-.009708933337374194214222671569602311669249),
RC(-.9912917677958235813775106862002319060386),
RC(-.1775716561626700888861319634903455224488),
RC(.1235939803204323357183625846672135876752),
RC(.07497814870203369068087999555157339703666),
RC(.5548914705142355977605994477355651401434),
RC(.08804124152269277122645182458858273865209),
RC(.02111835845551338508329573367808085283304),
RC(-.009930220323965333308685820460105538586058),
RC(-.06410005328501090417895544042025034295870),
RC(.03038172903822100765927778829870429682489),
RC(.005889913453879030705061072294104775339268),
RC(-.004854466668687097107111335784801155834624),
RC(.3551433123253401777722639269806910448976) };
static creal g[] = {
.47795365790226950619, .20302858736911986780,
.375, .34303789878087814570 };
RC(.4779536579022695061928604197171830064732),
RC(.2030285873691198677998034402373279133258),
RC(.375),
RC(.3430378987808781457001426145164678603407) };
enum { nsets = 6 };
@ -541,7 +572,7 @@ static void Rule7Alloc(This *t)
-s->weight[r + 1]/s->weight[r];
real sum = 0;
for( x = first; x <= last; NextSet(x) )
sum += x->n*fabs(x->weight[r + 1] + scale*x->weight[r]);
sum += x->n*fabsx(x->weight[r + 1] + scale*x->weight[r]);
s->scale[r] = scale;
s->norm[r] = 1/sum;
}
@ -666,7 +697,7 @@ static void SampleRule(This *t, ccount iregion)
real maxerr = 0;
for( s = first; s <= last; NextSet(s) )
maxerr = Max(maxerr,
fabs(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]);
fabsx(sum[rul + 1] + s->scale[rul]*sum[rul])*s->norm[rul]);
sum[rul] = maxerr;
}

View File

@ -2,14 +2,16 @@
Sample.c
most of what is related to sampling
this file is part of Divonne
last modified 30 Aug 13 th
last modified 12 Mar 15 th
*/
#define MARKMASK 0xfffffff
#define MARKMASK NUMBER_MAX
#define Marked(x) ((x) & ~MARKMASK)
#define Unmark(x) ((x) & MARKMASK)
#define NWANTMAX NUMBER_MAX
#define EXTRAPOLATE_EPS (.25*t->border.lower)
/*#define EXTRAPOLATE_EPS 0x1p-26*/
@ -96,7 +98,7 @@ static void SampleKorobov(This *t, ccount iregion)
}
if( dist > 0 ) {
dist = sqrt(dist)/EXTRAPOLATE_EPS;
dist = sqrtx(dist)/EXTRAPOLATE_EPS;
for( dim = 0; dim < t->ndim; ++dim ) {
real x2 = x[dim], dx = x2 - t->border.upper;
if( dx > 0 ) {
@ -148,7 +150,7 @@ static void SampleKorobov(This *t, ccount iregion)
1..39 = multiplicator, Korobov numbers,
40..inf = absolute # of points, Korobov numbers. */
static count SamplesLookup(This *t, Samples *samples, cint key,
static number SamplesLookup(This *t, Samples *samples, cint key,
cnumber nwant, cnumber nmax, number nmin)
{
number n;
@ -191,7 +193,8 @@ static count SamplesLookup(This *t, Samples *samples, cint key,
static void SamplesAlloc(cThis *t, Samples *samples)
{
#define FIRST -INT_MAX
#define MarkLast(x) (x | Marked(INT_MAX))
#define MarkLast(x) ((x) | 0x40000000)
#define UnmarkLast(x) ((x) & 0x3fffffff)
#include "KorobovCoeff.c"
@ -205,12 +208,12 @@ static void SamplesAlloc(cThis *t, Samples *samples)
while( i = IMin(IDim(i), max),
n > (p = prime[i + 1]) || n <= prime[i] ) {
cint d = (n - Unmark(p)) >> ++shift;
cint d = (n - UnmarkLast(p)) >> ++shift;
i += Min1(d);
}
samples->coeff = coeff[i][t->ndim - KOROBOV_MINDIM];
samples->neff = p = Unmark(p);
samples->neff = p = UnmarkLast(p);
samples->n = p/2 + 1;
}
@ -240,7 +243,7 @@ static real Sample(This *t, creal *x0)
}
if( dist > 0 ) {
dist = sqrt(dist)/EXTRAPOLATE_EPS;
dist = sqrtx(dist)/EXTRAPOLATE_EPS;
for( dim = 0; dim < t->ndim; ++dim ) {
real x2 = xtmp[dim], dx, b;
if( (dx = x2 - (b = t->border.lower)) < 0 ||

View File

@ -2,7 +2,7 @@
Split.c
determine optimal cuts for splitting a region
this file is part of Divonne
last modified 31 Aug 13 th
last modified 12 Mar 15 th
*/
@ -31,7 +31,7 @@ typedef struct {
static inline real Div(creal a, creal b)
{
return (b != 0 /*&& fabs(a) > SMALL*fabs(b)*/) ? a/b : a;
return (b != 0 /*&& fabsx(a) > SMALL*fabsx(b)*/) ? a/b : a;
}
/*********************************************************************/
@ -58,7 +58,7 @@ static void SomeCut(This *t, Cut *cut, Bounds *b)
yupper = Sample(t, xmid);
xmid[dim] = x;
dev = fabs(ymid - .5*(ylower + yupper));
dev = fabsx(ymid - .5*(ylower + yupper));
if( dev >= maxdev ) {
maxdev = dev;
maxdim = dim;
@ -178,7 +178,7 @@ static count FindCuts(This *t, Cut *cut, Bounds *bounds, creal vol,
for( icut = 0; icut < ncuts; ++icut ) {
Cut *c = &cut[icut];
creal diff = fabs(fmajor - c->f);
creal diff = fabsx(fmajor - c->f);
if( diff <= mindiff ) {
mindiff = diff;
mincut = c;
@ -230,18 +230,18 @@ repeat:
if( lhssqnew <= lhssq ) {
real fmax;
if( fabs(gammanew - gamma) < GAMMATOL*gamma ) break;
if( fabsx(gammanew - gamma) < GAMMATOL*gamma ) break;
gamma = gammanew;
fmax = fabs(fgamma);
fmax = fabsx(fgamma);
for( icut = 0; icut < ncuts; ++icut ) {
Cut *c = &cut[icut];
creal dfmin = SINGTOL*c->df;
creal sol = c->sol/div;
real df = c->f - c->fold;
df = (fabs(df) > SMALL*fabs(sol)) ? df/sol : 1;
c->df = (fabs(df) < fabs(dfmin)) ? dfmin : df;
fmax = Max(fmax, fabs(c->f));
df = (fabsx(df) > SMALL*fabsx(sol)) ? df/sol : 1;
c->df = (fabsx(df) < fabsx(dfmin)) ? dfmin : df;
fmax = Max(fmax, fabsx(c->f));
c->fold = c->f;
}
@ -276,7 +276,7 @@ static void Split(This *t, ccount iregion)
t->selectedcomp = region->cutcomp;
t->neval_cut -= t->neval;
ncuts = FindCuts(t, cut, region->bounds, region->vol,
(real *)RegionResult(region) + region->xmajor, region->fmajor,
RegionMinMax(region) + region->xmajor, region->fmajor,
region->fmajor - region->fminor);
t->neval_cut += t->neval;

View File

@ -2,7 +2,7 @@
decl.h
Type declarations
this file is part of Divonne
last modified 26 Jul 13 th
last modified 9 Oct 14 th
*/
@ -44,6 +44,8 @@ typedef struct {
#define SetSize (sizeof(Set) + t->ndim*sizeof(real))
#define NextSet(p) p = (Set *)((char *)p + setsize)
typedef struct {
Set *first, *last;
real errcoeff[3];
@ -71,12 +73,11 @@ typedef const Errors cErrors;
typedef struct {
real avg, err, spread, chisq;
real fmin, fmax;
real xminmax[];
} Result;
typedef const Result cResult;
#define ResultSize (sizeof(Result) + t->ndim*2*sizeof(real))
#define MinMaxSize (t->ncomp*t->ndim*2*sizeof(real))
typedef struct region {
int depth, next;
@ -85,29 +86,34 @@ typedef struct region {
Bounds bounds[];
} Region;
#define RegionSize (sizeof(Region) + t->ndim*sizeof(Bounds) + t->ncomp*ResultSize)
#define RegionSize (sizeof(Region) + t->ndim*sizeof(Bounds) + t->ncomp*sizeof(Result) + MinMaxSize)
#define RegionResult(r) ((Result *)(r->bounds + t->ndim))
#define RegionMinMax(r) ((real *)(RegionResult(r) + t->ncomp))
#define RegionPtr(n) ((Region *)((char *)t->region + (n)*regionsize))
typedef int (*Integrand)(ccount *, creal *, ccount *, real *, void *, cint *);
typedef int (*Integrand)(ccount *, creal *, ccount *, real *,
void *, cnumber *, cint *, cint *);
typedef void (*PeakFinder)(ccount *, cBounds *, number *, real *);
typedef void (*PeakFinder)(ccount *, cBounds *, number *, real *, void *);
typedef struct _this {
count ndim, ncomp;
#ifndef MLVERSION
Integrand integrand;
void *userdata;
PeakFinder peakfinder;
number nvec;
#ifdef HAVE_FORK
int ncores, running, *child;
SHM_ONLY(int shmid;)
Spin *spin;
real *frame;
number nframe;
SHM_ONLY(int shmid;)
int running;
#endif
PeakFinder peakfinder;
#endif
real epsrel, epsabs;
int flags, seed;

View File

@ -0,0 +1,29 @@
#--- suave --------------------------------------------------------------------
#--- obj lib creation ---------------------------------------------------------
add_library(suave OBJECT
Suave.c
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
suave BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../common>
)
#--- check for pre compile flags ----------------------------------------------
set(COMP_DEF "-DHAVE_CONFIG_H")
set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE")
set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libSuavecubafun_")
target_compile_definitions(
suave PRIVATE ${COMP_DEF}
)
#--- set compiler options -----------------------------------------------------
target_compile_options(
suave PRIVATE -fPIC
)

View File

@ -2,35 +2,43 @@
Fluct.c
compute the fluctuation in the left and right half
this file is part of Suave
last modified 29 Jul 13 th
last modified 14 Mar 15 th
*/
#if defined(HAVE_LONG_DOUBLE) && defined(HAVE_POWL)
#if defined(HAVE_LONG_DOUBLE) && defined(HAVE_POWL) && REALSIZE <= 10
typedef long double realx;
#define XDBL_MAX_EXP LDBL_MAX_EXP
#define XDBL_MAX LDBL_MAX
#define powx powl
#define ldexpx ldexpl
typedef long double realL;
#define REALL_MAX_EXP LDBL_MAX_EXP
#define REALL_MAX LDBL_MAX
#define powL powl
#define ldexpL ldexpl
#else
typedef double realx;
#define XDBL_MAX_EXP DBL_MAX_EXP
#define XDBL_MAX DBL_MAX
#define powx pow
#define ldexpx ldexp
typedef real realL;
#define REALL_MAX_EXP REAL_MAX_EXP
#define REALL_MAX REAL_MAX
#define powL powx
#define ldexpL ldexpx
#endif
typedef const realx crealx;
typedef const realL crealL;
typedef struct {
realx fluct;
realL fluct;
number n;
} Var;
static inline realL MinL(crealL a, crealL b) {
return (a < b) ? a : b;
}
static inline realL MaxL(crealL a, crealL b) {
return (a > b) ? a : b;
}
/*********************************************************************/
static void Fluct(cThis *t, Var *var,
@ -41,27 +49,27 @@ static void Fluct(cThis *t, Var *var,
count nvar = 2*t->ndim;
creal norm = 1/(err*Max(fabs(avg), err));
creal flat = 2/3./t->flatness;
crealx max = ldexpx(1., (int)((XDBL_MAX_EXP - 2)/t->flatness));
crealL max = ldexpL(1., (int)((REALL_MAX_EXP - 2)/t->flatness));
Clear(var, nvar);
while( n-- ) {
count dim;
crealx arg = 1 + fabs(*w++)*Sq(*f - avg)*norm;
crealx ft = powx(arg < max ? arg : max, t->flatness);
crealL arg = 1 + fabs(*w++)*Sq(*f - avg)*norm;
crealL ft = powL(MinL(arg, max), t->flatness);
f += t->ncomp;
for( dim = 0; dim < t->ndim; ++dim ) {
Var *v = &var[2*dim + (*x++ >= .5*(b[dim].lower + b[dim].upper))];
crealx f = v->fluct + ft;
v->fluct = (f > XDBL_MAX/2) ? XDBL_MAX/2 : f;
crealL f = v->fluct + ft;
v->fluct = MaxL(f, REALL_MAX/2);
++v->n;
}
}
while( nvar-- ) {
var->fluct = powx(var->fluct, flat);
var->fluct = powL(var->fluct, flat);
++var;
}
}

View File

@ -2,7 +2,7 @@
Grid.c
utility functions for the Vegas grid
this file is part of Suave
last modified 7 Aug 13 th
last modified 12 Mar 15 th
*/
@ -33,7 +33,7 @@ static void RefineGrid(cThis *t, Grid grid, Grid margsum)
real impfun = 0;
if( margsum[bin] > 0 ) {
creal r = margsum[bin]*norm;
avgperbin += impfun = pow((r - 1)/log(r), 1.5);
avgperbin += impfun = powx((r - 1)/log(r), 1.5);
}
imp[bin] = impfun;
}

View File

@ -3,7 +3,7 @@
integrate over the unit hypercube
this file is part of Suave
checkpointing by B. Chokoufe
last modified 5 Aug 13 th
last modified 13 Mar 15 th
*/
@ -26,22 +26,27 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
Result *tot, *Tot = state->totals + t->ncomp;
Result *res, *resL, *resR;
Bounds *b, *B;
cnumber minsamples = IMax(t->nmin, MINSAMPLES);
count dim, comp;
int fail;
if( VERBOSE > 1 ) {
sprintf(out, "Suave input parameters:\n"
" ndim " COUNT "\n ncomp " COUNT "\n"
ML_NOT(" nvec " NUMBER "\n")
" epsrel " REAL "\n epsabs " REAL "\n"
" flags %d\n seed %d\n"
" mineval " NUMBER "\n maxeval " NUMBER "\n"
" nnew " NUMBER "\n flatness " REAL "\n"
" statefile \"%s\"\n",
" nnew " NUMBER "\n nmin " NUMBER "\n"
" flatness " REAL "\n"
" statefile \"%s\"",
t->ndim, t->ncomp,
t->epsrel, t->epsabs,
ML_NOT(t->nvec,)
SHOW(t->epsrel), SHOW(t->epsabs),
t->flags, t->seed,
t->mineval, t->maxeval,
t->nnew, t->flatness,
t->nnew, t->nmin,
SHOW(t->flatness),
t->statefile);
Print(out);
}
@ -49,7 +54,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
if( BadComponent(t) ) return -2;
if( BadDimension(t) ) return -1;
ShmAlloc(t, ShmRm(t));
ShmAlloc(t, Master);
ForkCores(t);
if( (fail = setjmp(t->abort)) ) goto abort;
@ -132,7 +137,8 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
for( tot = state->totals, comp = 0; tot < Tot; ++tot )
oe += sprintf(oe, "\n[" COUNT "] "
REAL " +- " REAL " \tchisq " REAL " (" COUNT " df)",
++comp, tot->avg, tot->err, tot->chisq, state->df);
++comp, SHOW(tot->avg), SHOW(tot->err),
SHOW(tot->chisq), state->df);
Print(out);
}
@ -173,7 +179,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
region->result[maxcomp].avg, Max(maxerr, t->epsabs));
bias = (t->epsrel < 1e-50) ? 2 :
Max(pow(2., -(real)region->div/t->ndim)/t->epsrel, 2.);
Max(powx(2., -(real)region->div/t->ndim)/t->epsrel, 2.);
minfluct = INFTY;
bisectdim = 0;
for( dim = 0; dim < t->ndim; ++dim ) {
@ -190,9 +196,9 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
minfluct = vLR[0].fluct + vLR[1].fluct;
nnewL = IMax(
(minfluct == 0) ? t->nnew/2 : (count)(vLR[0].fluct/minfluct*t->nnew),
MINSAMPLES );
minsamples );
nL = vLR[0].n + nnewL;
nnewR = IMax(t->nnew - nnewL, MINSAMPLES);
nnewR = IMax(t->nnew - nnewL, minsamples);
nR = vLR[1].n + nnewR;
regionL = RegionAlloc(t, nL, nnewL);
@ -211,7 +217,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
while( n-- ) {
cbool final = (*w < 0);
if( x[bisectdim] < mid ) {
if( final && wR > RegionW(regionR) ) wR[-1] = -fabs(wR[-1]);
if( final && wR > RegionW(regionR) ) wR[-1] = -fabsx(wR[-1]);
*wL++ = *w++;
XCopy(xL, x);
xL += t->ndim;
@ -219,7 +225,7 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
fL += t->ncomp;
}
else {
if( final && wL > RegionW(regionL) ) wL[-1] = -fabs(wL[-1]);
if( final && wL > RegionW(regionL) ) wL[-1] = -fabsx(wL[-1]);
*wR++ = *w++;
XCopy(xR, x);
xR += t->ndim;
@ -259,15 +265,15 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
diff = Sq(.25*diff);
sigsq = resL->sigsq + resR->sigsq;
if( sigsq > 0 ) {
creal c = Sq(1 + sqrt(diff/sigsq));
creal c = Sq(1 + sqrtx(diff/sigsq));
resL->sigsq *= c;
resR->sigsq *= c;
}
resL->err = sqrt(resL->sigsq += diff);
resR->err = sqrt(resR->sigsq += diff);
resL->err = sqrtx(resL->sigsq += diff);
resR->err = sqrtx(resR->sigsq += diff);
tot->sigsq += resL->sigsq + resR->sigsq - res->sigsq;
tot->err = sqrt(tot->sigsq);
tot->err = sqrtx(tot->sigsq);
tot->chisq += resL->chisq + resR->chisq - res->chisq;
}
@ -319,12 +325,12 @@ static int Integrate(This *t, real *integral, real *error, real *prob)
MLPutFunction(stdlink, "Cuba`Suave`region", 3);
MLPutRealList(stdlink, bounds, 2*t->ndim);
MLPutRealxList(stdlink, bounds, 2*t->ndim);
MLPutFunction(stdlink, "List", t->ncomp);
for( Res = (res = region->result) + t->ncomp; res < Res; ++res ) {
real r[] = {res->avg, res->err, res->chisq};
MLPutRealList(stdlink, r, Elements(r));
MLPutRealxList(stdlink, r, Elements(r));
}
MLPutInteger(stdlink, region->df);
@ -338,8 +344,7 @@ abort:
anchor = anchor->next;
free(region);
}
WaitCores(t);
ShmFree(t);
ShmFree(t, Master);
StateRemove(t);

View File

@ -3,7 +3,7 @@
c_sources = Suave.c
AM_CPPFLAGS = -I. -I.. -I../common -DNOUNDERSCORE
AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS)
AM_CFLAGS = $(LOCAL_CUBA_LIB_CFLAGS) "-Dcubafun_=libSuavecubafun_"
AM_LDFLAGS = $(LOCAL_LIB_LDFLAGS)
noinst_LTLIBRARIES = libsuave.la

View File

@ -2,7 +2,7 @@
Sample.c
the sampling step of Suave
this file is part of Suave
last modified 30 Jul 13 th
last modified 13 Mar 15 th
*/
@ -71,7 +71,7 @@ static void Sample(This *t, cnumber nnew, Region *region,
while( w < lastw ) {
cbool final = (*w < 0);
creal weight = fabs(*w++);
creal weight = fabsx(*w++);
++n;
for( c = cumul, comp = 0; c < C; ++c ) {
@ -80,20 +80,20 @@ static void Sample(This *t, cnumber nnew, Region *region,
c->sqsum += Sq(wfun);
if( final ) {
if( n > 1 ) {
if( n >= t->nmin ) {
real w = Weight(c->sum, c->sqsum, n);
c->weightsum += c->weight = w;
c->avgsum += c->avg = w*c->sum;
if( VERBOSE > 2 ) {
creal sig = sqrt(1/w);
creal sig = sqrtx(1/w);
ss[comp] += (df == 0) ?
sprintf(ss[comp], "\n[" COUNT "] "
REAL " +- " REAL " (" NUMBER ")", comp + 1,
c->sum, sig, n) :
SHOW(c->sum), SHOW(sig), n) :
sprintf(ss[comp], "\n "
REAL " +- " REAL " (" NUMBER ")",
c->sum, sig, n);
SHOW(c->sum), SHOW(sig), n);
}
if( df == 0 ) c->guess = c->sum;
@ -107,7 +107,7 @@ static void Sample(This *t, cnumber nnew, Region *region,
}
}
if( final ) ++df, n = 0;
if( final ) df -= NegQ(t->nmin - n - 1), n = 0;
}
region->df = --df;
@ -124,7 +124,7 @@ static void Sample(This *t, cnumber nnew, Region *region,
res->sigsq = sigsq;
res->avg = avg;
}
res->err = sqrt(res->sigsq);
res->err = sqrtx(res->sigsq);
res->chisq = (sigsq < .9*NOTZERO) ? 0 : c->chisqsum - avg*c->chisum;
/* This catches the special case where the integrand is constant
@ -153,7 +153,7 @@ static void Sample(This *t, cnumber nnew, Region *region,
for( comp = 0, res = region->result;
comp < t->ncomp; ++comp, ++res ) {
p += sprintf(p, "%s \tchisq " REAL " (" COUNT " df)",
p0, res->chisq, df);
p0, SHOW(res->chisq), df);
p0 += chars;
}

View File

@ -1,8 +1,8 @@
/*
Suave.c
Subregion-adaptive Vegas Monte-Carlo integration
Subregion-adaptive Vegas Monte Carlo integration
by Thomas Hahn
last modified 17 Sep 13 th
last modified 28 Nov 14 th
*/
@ -15,64 +15,80 @@
/*********************************************************************/
Extern void EXPORT(Suave)(ccount ndim, ccount ncomp,
Integrand integrand, void *userdata,
Integrand integrand, void *userdata, cnumber nvec,
creal epsrel, creal epsabs,
cint flags, cint seed,
cnumber mineval, cnumber maxeval,
cnumber nnew, creal flatness,
cchar *statefile,
cnumber nnew, cnumber nmin, creal flatness,
cchar *statefile, Spin **pspin,
count *pnregions, number *pneval, int *pfail,
real *integral, real *error, real *prob)
{
This t;
VerboseInit();
t.ndim = ndim;
t.ncomp = ncomp;
t.integrand = integrand;
t.userdata = userdata;
t.nvec = nvec;
t.epsrel = epsrel;
t.epsabs = epsabs;
t.flags = flags;
t.flags = MaxVerbose(flags);
t.seed = seed;
t.mineval = mineval;
t.maxeval = maxeval;
t.nnew = nnew;
t.nmin = IMax(nmin, 2);
t.flatness = flatness;
t.statefile = statefile;
FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;)
*pfail = Integrate(&t, integral, error, prob);
*pnregions = t.nregions;
*pneval = t.neval;
WaitCores(&t, pspin);
}
/*********************************************************************/
Extern void EXPORT(suave)(ccount *pndim, ccount *pncomp,
Integrand integrand, void *userdata,
Integrand integrand, void *userdata, cnumber *pnvec,
creal *pepsrel, creal *pepsabs,
cint *pflags, cint *pseed,
cnumber *pmineval, cnumber *pmaxeval,
cnumber *pnnew, creal *pflatness,
cchar *statefile,
cnumber *pnnew, cnumber *pnmin, creal *pflatness,
cchar *statefile, Spin **pspin,
count *pnregions, number *pneval, int *pfail,
real *integral, real *error, real *prob, cint statefilelen)
{
This t;
VerboseInit();
t.ndim = *pndim;
t.ncomp = *pncomp;
t.integrand = integrand;
t.userdata = userdata;
t.nvec = *pnvec;
t.epsrel = *pepsrel;
t.epsabs = *pepsabs;
t.flags = *pflags;
t.flags = MaxVerbose(*pflags);
t.seed = *pseed;
t.mineval = *pmineval;
t.maxeval = *pmaxeval;
t.nnew = *pnnew;
t.nmin = IMax(*pnmin, 2);
t.flatness = *pflatness;
CString(t.statefile, statefile, statefilelen);
FORK_ONLY(t.spin = Invalid(pspin) ? NULL : *pspin;)
*pfail = Integrate(&t, integral, error, prob);
*pnregions = t.nregions;
*pneval = t.neval;
WaitCores(&t, pspin);
}

View File

@ -2,7 +2,7 @@
decl.h
Type declarations
this file is part of Suave
last modified 29 Jul 13 th
last modified 25 Nov 14 th
*/
@ -35,23 +35,24 @@ typedef struct {
typedef const Bounds cBounds;
typedef int (*Integrand)(ccount *, creal *, ccount *, real *,
void *, creal *, cint *);
void *, cnumber *, cint *, creal *, cint *);
typedef struct _this {
count ndim, ncomp;
#ifndef MLVERSION
Integrand integrand;
void *userdata;
number nvec;
#ifdef HAVE_FORK
int ncores, *child;
real *frame;
SHM_ONLY(int shmid;)
Spin *spin;
real *frame;
#endif
#endif
real epsrel, epsabs;
int flags, seed;
number mineval, maxeval;
number nnew;
number nnew, nmin;
real flatness;
cchar *statefile;
count nregions;

View File

@ -0,0 +1,29 @@
#--- vegas --------------------------------------------------------------------
#--- obj lib creation ---------------------------------------------------------
add_library(vegas OBJECT
Vegas.c
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
vegas BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../common>
)
#--- check for pre compile flags ----------------------------------------------
set(COMP_DEF "-DHAVE_CONFIG_H")
set(COMP_DEF ${COMP_DEF} "-DNOUNDERSCORE")
set(COMP_DEF ${COMP_DEF} "-Dcubafun_=libVegascubafun_")
target_compile_definitions(
vegas PRIVATE ${COMP_DEF}
)
#--- set compiler options -----------------------------------------------------
target_compile_options(
vegas PRIVATE -fPIC
)

View File

@ -2,7 +2,7 @@
Grid.c
utility functions for the Vegas grid
this file is part of Vegas
last modified 13 Dec 11 th
last modified 12 Mar 15 th
*/
@ -70,7 +70,7 @@ static void RefineGrid(cThis *t, Grid grid, Grid margsum)
real impfun = 0;
if( margsum[bin] > 0 ) {
creal r = margsum[bin]*norm;
avgperbin += impfun = pow((r - 1)/log(r), 1.5);
avgperbin += impfun = powx((r - 1)/log(r), 1.5);
}
imp[bin] = impfun;
}

Some files were not shown because too many files have changed in this diff Show More