101 Commits

Author SHA1 Message Date
5304f276d8 adds installation of musredit as a unix app 2026-03-13 15:20:31 +01:00
9083561e20 added PyScripts/nexus_muon_validator.py to nexus.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 21s
2026-03-07 14:50:57 +01:00
14d2648fc4 remove obsolate test/nexus
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 29s
2026-03-07 13:38:53 +01:00
f91bc12709 suppress warning missing deadtime correction if not relevant.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 29s
2026-03-03 08:52:19 +01:00
3174b320b2 fix linker errors: add HDF5 C++ lib and FFTW3 include paths
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 22s
- Add ${HDF5_LIBRARIES} to PMusr link dependencies so HDF5 C++ symbols
  (H5::DataType, H5::PredType, etc.) used in PRunDataHandler.cpp resolve.
- Add ${FFTW3_INCLUDE} to musrRootValidation and write_musrRoot_runHeader
  include paths; both pull in PMusr.h which transitively includes fftw3.h.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 11:21:01 +01:00
c062e0f4e9 add musrfitConfig.cmake, etc. for musrfit.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 30s
2026-03-01 09:35:34 +01:00
ed2451d657 adopted after deadtime correction offset fix.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 21s
2026-02-23 13:17:00 +01:00
a005e5750f fixed an index by one offset issue.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 21s
2026-02-23 13:02:46 +01:00
b29c7247e7 make sure that the requested pointer is not a nullptr.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 21s
2026-02-23 12:52:26 +01:00
92008a4e49 fix Boost_INCLUDE_DIR -> Boost_INCLUDE_DIRS
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 21s
2026-02-21 17:38:11 +01:00
49e355f58a updated the local user-docu.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 29s
2026-02-21 16:04:48 +01:00
901fda9298 adopted ChangeLog. Fixed a minor issue in PTextEdit. Adopted ctests for the new NeXus handling.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 29s
2026-02-21 15:32:03 +01:00
7115c0027c Merge branch 'nxs' into root6 2026-02-21 12:37:21 +01:00
7d5aaf6429 increased the version number of musrfit and libPMusr. 2026-02-21 07:45:25 +01:00
79b05cced7 adopted the PNeXus lib such that the class naming scheme is self-consistent. 2026-02-21 07:44:20 +01:00
08350a2fde warning that deadtime correction estimate is not yet implemented. I am not even sure this would be a good feature. 2026-02-21 07:19:42 +01:00
22b1ad7f2f full implementation of the deadtime correction from file for PRunAsymmetryRRF. 2026-02-21 07:15:44 +01:00
bb8bdafddd full implementation of the deadtime correction from file. 2026-02-21 07:10:48 +01:00
d5e305411f added a warning if deadtime correction cannot be carried out (missing parameters, etc.) 2026-02-21 07:09:36 +01:00
50187b0c65 add DeadTimeCorrection to PRunAsymmetry - no ADDRUN handling yet. 2026-02-20 19:47:21 +01:00
d7908573b8 PRunSingleHistoRRF: add DeadTimeCorrection, and improve ADDRUN readability 2026-02-20 19:01:33 +01:00
9aae350c13 move DeadTimeCorrection to PRunBase. Make ADDRUN part in PrepareData more readable. 2026-02-20 18:17:05 +01:00
390b9770ca add an ADDRUN example. 2026-02-20 16:14:13 +01:00
ba939574a4 added musrview png ref test via ctest
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 27s
2026-02-18 17:07:20 +01:00
c50e4a3a06 add ctest integration tests for musrfit maxLH/chisq validation
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 28s
Add a Python-based test script that runs musrfit -c on each example
msr-file, extracts the maxLH or chisq value, and checks it against
a reference value with a relative tolerance of 1e-4. Covers all 13
example msr-files (single histogram and asymmetry fits).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:05:24 +01:00
f00f188f0b filter out '\r' and '\n' from command string (macOS issue). 2026-02-13 12:56:50 +01:00
5a2f45c083 filter out '\r' and '\n' from command string (macOS issue).
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 27s
2026-02-13 12:46:16 +01:00
4136806847 better hdf4/5 include handling. 2026-02-11 16:05:02 +01:00
6a41458310 start working on the deadtime correction. 2026-02-08 15:34:22 +01:00
d70fd34345 improved NeXus docu. 2026-02-08 09:11:36 +01:00
3858cc723a improved docu for HDF4/5. 2026-02-07 21:43:34 +01:00
a6f5b956bf adopt HDF4 support for proper hierarchical writing of the data. 2026-02-07 21:26:35 +01:00
86ecfc84af fixed a copy/paste error. 2026-02-07 21:24:14 +01:00
8cb4fc7221 clean up HDF4 in PNeXus. First implementation for HDF4 IDF1/2 write. Compiles, but still some issues. 2026-02-07 20:54:09 +01:00
95d087164d first full mandatory HDF5 IDF V2 writer. 2026-02-07 20:17:23 +01:00
8f3ad0c61d PNeXus now handles std::vector<> attributes new correctly. HDF4/5 now is using int. 2026-02-07 20:00:27 +01:00
49d42c93ba more work on HDF5 IDF V2. 2026-02-07 19:34:26 +01:00
df379b834e first full version for HDF5 IDF V1 write. 2026-02-07 17:25:52 +01:00
3bb004ea2d more work on the NeXus write routines. 2026-02-07 11:31:11 +01:00
fc478d27c7 make sure that the config.h is accessible for the PMusr lib. 2026-02-07 11:29:48 +01:00
c690965025 add a function in the NeXus lib which gives the time in ISO8601. 2026-02-07 11:28:38 +01:00
300c9200df start implementing the NeXus write routines, needed by any2many. 2026-02-07 08:05:42 +01:00
4dcef1a835 add HDF4/HDF5 library version information, needed for writing. 2026-02-07 08:05:09 +01:00
4519a0b76e add more complete dump info for NeXus. 2026-02-06 18:08:37 +01:00
3aecdbf0a8 added the missing sample information when reading NeXus IDF V2. 2026-02-06 15:15:10 +01:00
dfa8852cfe removed debug tag. 2026-02-06 15:14:25 +01:00
29fbb4a62b replace the NeXus IDF 2 example. 2026-02-06 14:03:55 +01:00
de8b02b94d more complete doxygen docu. 2026-02-06 12:43:55 +01:00
dd2f743b3a added docu by Claude for PNeXus. 2026-02-06 08:45:58 +01:00
d5dbc12175 NeXus HDF4/HDF5 IDF V1: read 'frames_good' 2026-02-05 13:29:27 +01:00
643be9738f fixed wrong path in NeXus IDF V2. 2026-02-05 12:59:10 +01:00
88b5e492dd NeXus IDF V2 detector_1 -> instrument/detector_1 where possible. 2026-02-05 12:08:40 +01:00
810306cb2a first full IDF V2 implementation. 2026-02-05 10:59:15 +01:00
43cb8b2460 start with the implementation of NeXus IDF V2. 2026-02-04 19:48:38 +01:00
ceb9673330 read deadtime parameters for IDF V1. 2026-02-04 17:57:48 +01:00
da0b356e3b more work on the deadtime correction on the msr-file side. 2026-02-04 13:29:07 +01:00
b262ee33c5 start implementing with the deadtime correction, if present 2026-02-04 13:20:10 +01:00
12888be4c9 add deadtime correction related params. 2026-02-04 11:06:56 +01:00
867ac4895b switched to HDF4/HDF5 template loading in order to simplify the code. 2026-02-04 09:26:49 +01:00
a6c9120d06 check for IDF 1/2. 2026-02-03 17:38:56 +01:00
417901e271 HDF4 handling completed. 2026-02-03 16:17:06 +01:00
8d1dcef2de add more HDF4 header info: counts. 2026-02-03 08:03:13 +01:00
30fbd8eb67 fixed typo, and added file pointer checks. 2026-02-02 19:14:14 +01:00
76dbd757e3 dump_header can now handle HDF4/HDF5 NeXus files, without the NeXus library. 2026-02-02 19:08:12 +01:00
c894c21bf3 add more HDF4 header info. 2026-02-02 08:02:41 +01:00
008ca7210a add more HDF4 header info. 2026-02-01 19:49:55 +01:00
60f11dfc0e add more HDF4 header info. 2026-02-01 18:55:49 +01:00
3aaca28c87 start populating HDF4 header info. 2026-02-01 17:54:02 +01:00
d4f0855b19 fix git-revision.h generation: output to build tree and add missing dependencies
Generate git-revision.h into CMAKE_BINARY_DIR/src/ (which is in the
include path) instead of the source tree. Remove the header from
add_executable() source lists, and add missing add_dependencies on
git_revision for all Qt5/Qt6 targets.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 19:59:47 +01:00
9d173203ff fix git-revision.h generation: output to build tree and add missing dependencies
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 18s
Generate git-revision.h into CMAKE_BINARY_DIR/src/ (which is in the
include path) instead of the source tree. Remove the header from
add_executable() source lists, and add missing add_dependencies on
git_revision for all Qt5/Qt6 targets.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 19:52:16 +01:00
00c980af68 generate git-revision.h at build time instead of configure time
Replace execute_process with add_custom_target so the git revision
check runs on every build, not just on cmake configure.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 19:40:33 +01:00
fb9d6e917c proper TDirectory handling for the histos. 2026-01-29 19:40:20 +01:00
2eb0cf28d5 fixed missing TDirectory handling of RunSummary in dump_header.cpp 2026-01-29 19:40:10 +01:00
8b054b77b9 generate git-revision.h at build time instead of configure time
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 18s
Replace execute_process with add_custom_target so the git revision
check runs on every build, not just on cmake configure.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 19:35:20 +01:00
4e29ad6898 proper TDirectory handling for the histos.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 19s
2026-01-26 20:32:34 +01:00
4ac7a7d01c fixed missing TDirectory handling of RunSummary in dump_header.cpp
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 20s
2026-01-26 19:52:41 +01:00
65efb389c3 first test to read hdf4/hdf5 directly. 2026-01-25 16:20:10 +01:00
83c8f6630c 2nd spot for cmake version check for policy setting. 2026-01-25 14:50:23 +01:00
227bfb7419 2nd spot for cmake version check for policy setting.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 19s
2026-01-25 14:49:38 +01:00
70eb0397df cmake version check for policy setting. 2026-01-25 14:45:46 +01:00
3c02c6073a cmake version check for policy setting. 2026-01-25 14:43:49 +01:00
b3e4d247f0 add HDF4/HDF5 example programs. 2026-01-25 14:07:36 +01:00
6aaed94adf add doxygen file comment. 2026-01-25 12:05:04 +01:00
c3e9c03920 added HDF5 ISIS NeXus class handling. 2026-01-25 11:15:49 +01:00
909fa6519d added HDF4 ISIS NeXus class handling. 2026-01-25 10:51:23 +01:00
3eea73f07a stub for new NeXus file handling. Not much is working yet. 2026-01-25 08:26:43 +01:00
f66c832d56 updated the copyright info. 2026-01-25 07:45:44 +01:00
4de660788d updated the copyright info.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 26s
2026-01-25 07:42:29 +01:00
990e280c8f set cmake Boost find policy. Removed NeXus library find from cmake, since it will not be used anymore. 2026-01-25 07:28:47 +01:00
af3c8832fe set cmake Boost find policy.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 28s
2026-01-25 07:26:25 +01:00
7615e791d3 version update of the doxygen config file. 2026-01-24 18:30:18 +01:00
394ea01d37 further playing with the Prefs dialog. 2026-01-24 18:30:06 +01:00
d19d7b59c8 further playing with the Prefs dialog. 2026-01-24 18:29:46 +01:00
7dc0a237dc further playing with the Prefs dialog. 2026-01-24 18:29:37 +01:00
1b4b9cc238 increased size of prefs dialog, since it seems too small for the newest qt6 version, especially on macOS. 2026-01-24 18:29:28 +01:00
123acec405 version update of the doxygen config file.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 30s
2026-01-22 15:15:42 +01:00
eaa2ba8faf further playing with the Prefs dialog.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 18s
2026-01-21 12:19:34 +01:00
8b9ac6e5b1 further playing with the Prefs dialog.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 26s
2026-01-21 12:16:27 +01:00
2601e80c8a further playing with the Prefs dialog.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 19s
2026-01-21 11:20:08 +01:00
1b91d8b281 increased size of prefs dialog, since it seems too small for the newest qt6 version, especially on macOS.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 27s
2026-01-21 11:11:17 +01:00
db54db3394 more detailed NeXus support message.
All checks were successful
Build and Deploy Documentation / build-and-deploy (push) Successful in 18s
2026-01-16 18:00:39 +01:00
496 changed files with 17564 additions and 7902 deletions

View File

@@ -1,7 +1,12 @@
# - musrfit
cmake_minimum_required(VERSION 3.17)
project(musrfit VERSION 1.9.10 LANGUAGES C CXX)
# cmake: use BoostConfig.cmake instead of FindBoost
if (CMAKE_VERSION GREATER_EQUAL "3.3")
cmake_policy(SET CMP0167 NEW)
endif ()
project(musrfit VERSION 1.10.0 LANGUAGES C CXX)
#--- musrfit specific options -------------------------------------------------
option(nexus "build optional NeXus support. Needed for ISIS" OFF)
@@ -206,13 +211,40 @@ if (qt_based_tools)
endif (qt_version STREQUAL 3)
endif (qt_based_tools)
#--- if NeXus check also for HDF4, HDF5, and MXML -----------------------------
#--- if NeXus check also for HDF4 (optional), HDF5 ----------------------------
if (nexus)
find_package(HDF5 COMPONENTS CXX REQUIRED)
if (HAVE_HDF4)
find_package(HDF4 REQUIRED)
#--- check for HDF4 -----------------------------------------------------------
# Find HDF4 manually (pkg-config often doesn't have hdf4)
find_path(HDF4_INCLUDE_DIR
NAMES mfhdf.h
PATHS /usr/include /usr/local/include
PATH_SUFFIXES hdf
)
find_library(HDF4_DF_LIBRARY
NAMES df libdf
PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib
)
find_library(HDF4_MFHDF_LIBRARY
NAMES mfhdf libmfhdf
PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib
)
if (HDF4_INCLUDE_DIR AND HDF4_DF_LIBRARY AND HDF4_MFHDF_LIBRARY)
set(HDF4_FOUND TRUE)
set(HDF4_INCLUDE_DIRS ${HDF4_INCLUDE_DIR})
set(HDF4_LIBRARIES ${HDF4_MFHDF_LIBRARY} ${HDF4_DF_LIBRARY})
message(STATUS "Found HDF4: ${HDF4_INCLUDE_DIR}")
message(STATUS " HDF4 libraries: ${HDF4_LIBRARIES}")
else()
message(FATAL_ERROR "HDF4 library not found. Please install libhdf4-dev or hdf-devel")
endif()
add_definitions(-DHAVE_HDF4)
endif (HAVE_HDF4)
find_package(NEXUS REQUIRED)
add_definitions(-DPNEXUS_ENABLED)
endif (nexus)
@@ -234,13 +266,15 @@ endif ()
#--- start create git-revision.h ----------------------------------------------
if (IS_GIT_REPO)
execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/src/git_revision.sh)
add_custom_target(git_revision ALL
COMMAND sh ${CMAKE_SOURCE_DIR}/src/git_revision.sh ${CMAKE_BINARY_DIR}/src
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Checking git revision"
)
set(HAVE_GIT_REV_H "-DHAVE_GIT_REV_H")
set(GIT_REV_H "git-revision.h")
set(HAVE_GIT_REV_H "-DHAVE_GIT_REV_H")
else (IS_GIT_REPO)
set(HAVE_GIT_REV_H "")
set(GIT_REV_H "")
set(HAVE_GIT_REV_H "")
endif (IS_GIT_REPO)
#--- end create git-revision.h ------------------------------------------------
@@ -271,6 +305,10 @@ set(CMAKE_INSTALL_RPATH "${rpath}")
#--- propagate to the sub-directories -----------------------------------------
add_subdirectory(src)
#--- testing ------------------------------------------------------------------
enable_testing()
add_subdirectory(tests)
#--- write summary of the installation
cmake_host_system_information(RESULT PROCESSOR QUERY PROCESSOR_DESCRIPTION)
@@ -315,7 +353,6 @@ if (nexus)
message(" HDF4 not present.")
endif (HAVE_HDF4)
message(" HDF5 found in ${HDF5_INCLUDE_DIRS}, Version: ${HDF5_VERSION}")
message(" NeXus found in ${NEXUS_INCLUDE_DIR}, Version: ${NEXUS_VERSION_STRING}")
endif (nexus)
message("")
@@ -411,6 +448,35 @@ message("")
message("-------------------------------------------------------------------------")
message("")
#--- generate and install cmake package config files --------------------------
include(CMakePackageConfigHelpers)
configure_package_config_file(
${CMAKE_SOURCE_DIR}/cmake/musrfitConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/musrfitConfig.cmake
INSTALL_DESTINATION lib/cmake/musrfit
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/musrfitConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
install(
EXPORT musrfitTargets
FILE musrfitTargets.cmake
NAMESPACE musrfit::
DESTINATION lib/cmake/musrfit
)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/musrfitConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/musrfitConfigVersion.cmake
DESTINATION lib/cmake/musrfit
)
#--- cpack specific info ......................................................
file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} PROJECT_SOURCE_DIR_NATIVE)
file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} PROJECT_BINARY_DIR_NATIVE)

View File

@@ -12,6 +12,13 @@ or
https://bitbucket.org/muonspin/musrfit
Release of V1.10.0, 2026/02/21
==============================
ditch the use of the NeXus lib. NeXus files are now directly read via hdf4/5
add deadtime correction of pulsed sources, assuming the relevant parameters are
present in the file.
Release of V1.9.10, 2026/01/16
==============================

View File

@@ -17,7 +17,7 @@ set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/COPYING")
set (CPACK_RESOURCE_FILE_README "@PROJECT_SOURCE_DIR@/README.md")
set (CPACK_RESOURCE_FILE_WELCOME "@PROJECT_SOURCE_DIR@/cmake/welcome.txt")
set (CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "@CMAKE_INSTALL_PREFIX@;@CMAKE_INSTALL_PREFIX@/bin;@CMAKE_INSTALL_PREFIX@/include;@CMAKE_INSTALL_PREFIX@/share;@CMAKE_INSTALL_PREFIX@/lib64;@CMAKE_INSTALL_PREFIX@/lib;@CMAKE_INSTALL_PREFIX@/pkgconfig")
set (CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "@CMAKE_INSTALL_PREFIX@;@CMAKE_INSTALL_PREFIX@/bin;@CMAKE_INSTALL_PREFIX@/include;@CMAKE_INSTALL_PREFIX@/share;@CMAKE_INSTALL_PREFIX@/lib64;@CMAKE_INSTALL_PREFIX@/lib;@CMAKE_INSTALL_PREFIX@/pkgconfig;@CMAKE_INSTALL_PREFIX@/share/applications;@CMAKE_INSTALL_PREFIX@/share/icons;@CMAKE_INSTALL_PREFIX@/share/icons/hicolor;@CMAKE_INSTALL_PREFIX@/share/icons/hicolor/48x48;@CMAKE_INSTALL_PREFIX@/share/icons/hicolor/48x48/apps")
# we do not have any absolute paths, so do not need DESTDIR
set (CPACK_SET_DESTDIR "OFF")

View File

@@ -1,97 +0,0 @@
## Process this file with cmake
#=============================================================================
# NeXus - Neutron & X-ray Common Data Format
#
# CMakeLists for building the NeXus library and applications.
#
# Copyright (C) 2011 Stephen Rankin
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
# for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# For further information, see <http://www.nexusformat.org>
#
#
#=============================================================================
#------------------------------------------------------------------------------
# find the runtime binaries of the HDF4 library
#------------------------------------------------------------------------------
find_library(HDF4_DF_LIBRARY NAMES df hdf
HINTS ENV HDF4_ROOT
PATH_SUFFIXES hdf)
if(HDF4_DF_LIBRARY MATCHES HDF4_DF_LIBRARY-NOTFOUND)
message(FATAL_ERROR "Could not find HDF4 DF library!")
else()
get_filename_component(HDF4_LIBRARY_DIRS ${HDF4_DF_LIBRARY} PATH)
message(STATUS "Found HDF4 DF library: ${HDF4_DF_LIBRARY}")
message(STATUS "HDF4 libary path: ${HDF4_LIBRARY_DIRS}")
endif()
find_library(HDF4_MFHDF_LIBRARY NAMES mfhdf
HINTS ENV HDF4_ROOT
PATH_SUFFIXES hdf)
if(HDF4_MFHDF_LIBRARY MATCHES HDF4_MFHDF_LIBRARY-NOTFOUND)
message(FATAL_ERROR "Could not find HDF5 MFHDF library!")
else()
message(STATUS "Found HDF4 MFHDF library: ${HDF4_MFHDF_LIBRARY}")
endif()
#------------------------------------------------------------------------------
# find the HDF4 header file
#------------------------------------------------------------------------------
find_path(HDF4_INCLUDE_DIRS mfhdf.h
HINTS ENV HDF4_ROOT
PATH_SUFFIXES hdf)
if(HDF4_INCLUDE_DIRS MATCHES HDF4_INCLUDE_DIRS-NOTFOUND)
message(FATAL_ERROR "Could not find HDF4 header files")
else()
message(STATUS "Found HDF4 header files in: ${HDF4_INCLUDE_DIRS}")
endif()
#------------------------------------------------------------------------------
# search for additional packages required to link against HDF4
#------------------------------------------------------------------------------
find_package(JPEG REQUIRED)
#------------------------------------------------------------------------------
# add libraries to the link list for NAPI
#------------------------------------------------------------------------------
get_filename_component(LIB_EXT ${HDF4_DF_LIBRARY} EXT)
if(LIB_EXT MATCHES .a)
message(STATUS "HDF4 DF library is static")
list(APPEND NAPI_LINK_LIBS "-Wl,-whole-archive" ${HDF4_DF_LIBRARY} "-Wl,-no-whole-archive")
else()
list(APPEND NAPI_LINK_LIBS ${HDF4_DF_LIBRARY})
endif()
get_filename_component(LIB_EXT ${HDF4_MFHDF_LIBRARY} EXT)
if(LIB_EXT MATCHES .a)
message(STATUS "HDF4 MFHDF library is static")
list(APPEND NAPI_LINK_LIBS "-Wl,-whole-archive" ${HDF4_MFHDF_LIBRARY} "-Wl,-no-whole-archive")
else()
list(APPEND NAPI_LINK_LIBS ${HDF4_MFHDF_LIBRARY})
endif()
list(APPEND NAPI_LINK_LIBS jpeg)
include_directories ( SYSTEM ${HDF4_INCLUDE_DIRS} )
link_directories(${HDF4_LIBRARY_DIRS})

View File

@@ -1,34 +0,0 @@
# - 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)

View File

@@ -1,45 +0,0 @@
# - 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)

13
cmake/musredit.desktop Normal file
View File

@@ -0,0 +1,13 @@
[Desktop Entry]
Name=MuSRedit
Comment=editor and launcher for the musrfit data analysis
GenericName=musrfit editor
Exec=musredit %F
Icon=musredit
Terminal=false
Type=Application
StartupWMClass=MuSRedit
Categories=Science;DataEditing;
MimeType=text/plain;
Keywords=muSR;fitting;musrfit;physics;muon;
StartupNotify=true

View File

@@ -91,6 +91,8 @@ rm -rf $RPM_BUILD_ROOT
%_prefix/lib64/*
%license COPYING
%doc %_prefix/share/doc/musrfit
%{_datadir}/applications/musredit.desktop
%{_datadir}/icons/hicolor/48x48/apps/musredit.png

View File

@@ -0,0 +1,15 @@
# musrfitConfig.cmake.in
# CMake package configuration template for musrfit.
# Generated by configure_package_config_file().
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
find_dependency(ROOT REQUIRED COMPONENTS Gui MathMore Minuit2 XMLParser)
find_dependency(Boost REQUIRED COMPONENTS filesystem)
find_dependency(GSL REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/musrfitTargets.cmake")
check_required_components(musrfit)

View File

@@ -10,3 +10,10 @@ then
fi
/sbin/ldconfig
#update .desktop and icons
if command -v update-desktop-database &>/dev/null; then
update-desktop-database -q /usr/share/applications || true
fi
if command -v gtk-update-icon-cache &>/dev/null; then
gtk-update-icon-cache -q -t /usr/share/icons/hicolor || true
fi

View File

@@ -3,3 +3,11 @@
echo " >> musrfit post uninstall script started ..."
/sbin/ldconfig
#update .desktop and icons
if command -v update-desktop-database &>/dev/null; then
update-desktop-database -q /usr/share/applications || true
fi
if command -v gtk-update-icon-cache &>/dev/null; then
gtk-update-icon-cache -q -t /usr/share/icons/hicolor || true
fi

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,34 +1,34 @@
nc-ZnO T=80 F=69
Ag_T=100_F=20
###############################################################
FITPARAMETER
# No Name Value Step Pos_Error Boundaries
1 alpha 0.88008 -0.00063 0.00063
2 asym 0.1708 -0.0017 0.0017 0 0.3
3 phase 3.90 -0.38 0.38 0 100
4 field 71.003 -0.036 0.036 0 none
5 rate 0.1526 -0.0024 0.0024 0 100
6 beta 1.231 -0.046 0.047
1 alpha 1.02389 -0.00095 0.00095
2 asym 0.23641 -0.00097 0.00098 0 0.3
3 phase 0 0 none 0 100
4 field 20.301 -0.010 0.010 0 none
5 rate 0.0037 -0.0013 0.0013 0 100
###############################################################
THEORY
asymmetry 2
TFieldCos 3 fun1 (phase frequency)
generExpo 5 6 (rate exponent)
simplExpo 5 (rate)
###############################################################
FUNCTIONS
fun1 = gamma_mu * par4
###############################################################
RUN data/EMU00005989_v2 EMU ISIS NEXUS (name beamline institute data-file-format)
RUN data/emu00139040 EMU ISIS NEXUS (name beamline institute data-file-format)
fittype 2 (asymmetry fit)
alpha 1
map 0 0 0 0 0 0 0 0 0 0
forward 1-16
backward 17-32
forward 1-48
backward 49-96
backgr.fix 0 0
data 40 1500 40 1500
fit 0.2 14
data 10 2048 10 2048
deadtime-cor file
fit 0.144 14
packing 1
###############################################################
@@ -39,19 +39,19 @@ SAVE
###############################################################
FOURIER
units Gauss # units either 'Gauss', 'MHz', or 'Mc/s'
units Gauss # units either 'Gauss', 'Tesla', 'MHz', or 'Mc/s'
fourier_power 10
apodization STRONG # NONE, WEAK, MEDIUM, STRONG
plot REAL # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE
plot REAL # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE, PHASE_OPT_REAL
range 0 100
phase par2
###############################################################
PLOT 2 (asymmetry plot)
runs 1
range 0 14 -0.22 0.22
view_packing 5
range 0 14 -0.32 0.32
view_packing 10
###############################################################
STATISTIC --- 2012-03-20 10:28:41
chisq = 796.7, NDF = 846, chisq/NDF = 0.941749
STATISTIC --- 2026-02-23 13:12:14
chisq = 1159.8, NDF = 863, chisq/NDF = 1.343877

View File

@@ -1,49 +1,50 @@
nc-ZnO T=80 F=69
Ag_T=100_F=20
###############################################################
FITPARAMETER
# No Name Value Step Pos_Error Boundaries
1 zero 0 0 none
2 phase 2.81 -0.30 0.30 0 100
3 field 70.998 -0.025 0.025 0 none
4 asym 0.1700 -0.0011 0.0012 0 0.3
5 rate 0.1523 -0.0017 0.0017 0 100
6 beta 1.255 -0.033 0.033
7 Norm_L 2410.44 -0.83 0.83
8 BG_L 0 0 none 0 none
9 Norm_R 2121.43 -0.77 0.77 0 none
10 BG_R 0 0 none 0 none
11 relPhase 182.29 -0.31 0.31 0 none
1 phaseL 0 0 none
2 field 20.3381 -0.0085 0.0085 0 none
3 asym 0.23440 -0.00051 0.00051 0 0.3
4 rate 0.0234 -0.0041 0.0035 0 100
5 Norm_L 1151.30 -0.53 0.53
6 BG_L 0 0 none 0 none
7 Norm_R 1179.09 -0.59 0.58 0 none
8 BG_R 0 0 none 0 none
9 relPhase 178.57 -0.20 0.20 0 none
###############################################################
THEORY
asymmetry 4
generExpo 5 6 (rate exponent)
asymmetry 3
simpleGss 4 (rate)
TFieldCos fun1 fun2 (phase frequency)
###############################################################
FUNCTIONS
fun1 = par2 + map1
fun2 = gamma_mu * par3
fun1 = par1 + map1
fun2 = gamma_mu * par2
###############################################################
GLOBAL
fittype 0 (single histogram fit)
data 40 1500
fit 0.2 14
data 5 2048
t0 10.0
deadtime-cor file
fit 0.144 30
packing 1
###############################################################
RUN data/EMU00005989_v2 XXXX ISIS NEXUS (name beamline institute data-file-format)
RUN data/emu00139040 EMU ISIS NEXUS (name beamline institute data-file-format)
norm 5
backgr.fit 6
map 1 0 0 0 0 0 0 0 0 0
forward 1-48
#deadtime-cor file
RUN data/emu00139040 XXXX ISIS NEXUS (name beamline institute data-file-format)
norm 7
backgr.fit 8
map 1 0 0 0 0 0 0 0 0 0
forward 1-16
RUN data/EMU00005989_v2 XXXX ISIS NEXUS (name beamline institute data-file-format)
norm 9
backgr.fit 10
map 11 0 0 0 0 0 0 0 0 0
forward 17-32
map 9 0 0 0 0 0 0 0 0 0
forward 49-96
###############################################################
COMMANDS
@@ -59,15 +60,15 @@ fourier_power 11
apodization STRONG # NONE, WEAK, MEDIUM, STRONG
plot REAL # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE, PHASE_OPT_REAL
range 0 200
phase parR2 par11
phase parR1, par9
###############################################################
PLOT 0 (single histo plot)
lifetimecorrection
runs 1 2
range 0 14 -0.22 0.22
view_packing 2
range 0 20 -0.35 0.35
view_packing 10
###############################################################
STATISTIC --- 2019-03-12 18:08:05
maxLH = 2585.1, NDF = 1696, maxLH/NDF = 1.524236
STATISTIC --- 2026-02-23 13:09:55
maxLH = 4228.9, NDF = 3726, maxLH/NDF = 1.134977

View File

@@ -0,0 +1,78 @@
LSCO(x=0.125), T=45.00 K, E=2.97 keV, B=~4(G)/0.11(A), Tr/Sa=15.02/11.30 kV, RAL-RAR=-0.01 kV, SR=-45.00
###############################################################
FITPARAMETER
# Nr. Name Value Step Pos_Error Boundaries
1 Asy 0.14561 -0.00047 0.00047 0 0.5
2 Rate 0.1508 -0.0017 0.0017 0 10
3 Field 29.450 -0.027 0.027 0 none
4 N0_L 3076.3 -1.0 1.0
5 Bkg_L 12.882 -0.071 0.071
6 Phase_L -34.89 -0.31 0.31
7 alpha_LR 1.16481 -0.00055 0.00055
8 Bkg_R 17.876 -0.080 0.079
9 RelPhase_R 163.31 -0.31 0.31
10 Zero 0 0 none
###############################################################
THEORY
asymmetry 1
simplExpo 2 (rate)
TFieldCos fun3 fun1 (phase frequency)
###############################################################
FUNCTIONS
fun1 = par3 * gamma_mu
fun2 = par7 * par4
fun3 = par6 + map1
###############################################################
GLOBAL
data 2791 66601
fit 0.1 12
packing 50
###############################################################
RUN data/lem15_his_2992 MUE4 PSI MUSR-ROOT (name beamline institute data-file-format)
ADDRUN data/lem15_his_2993 MUE4 PSI MUSR-ROOT (name beamline institute data-file-format)
ADDRUN data/lem15_his_2994 MUE4 PSI MUSR-ROOT (name beamline institute data-file-format)
fittype 0 (single histogram fit)
norm 4
backgr.fit 5
map 10 0 0 0 0 0 0 0 0 0
forward 21 25
RUN data/lem15_his_2992 MUE4 PSI MUSR-ROOT (name beamline institute data-file-format)
ADDRUN data/lem15_his_2993 MUE4 PSI MUSR-ROOT (name beamline institute data-file-format)
ADDRUN data/lem15_his_2994 MUE4 PSI MUSR-ROOT (name beamline institute data-file-format)
fittype 0 (single histogram fit)
norm fun2
backgr.fit 8
map 9 0 0 0 0 0 0 0 0 0
forward 23 27
###############################################################
COMMANDS
MAX_LIKELIHOOD
MINIMIZE
MINOS
SAVE
###############################################################
PLOT 0 (single histo plot)
lifetimecorrection
runs 1 2
range 0 12 -0.2 0.2
view_packing 500
###############################################################
FOURIER
units Gauss # units either 'Gauss', 'Tesla', 'MHz', or 'Mc/s'
fourier_power 12
apodization STRONG # NONE, WEAK, MEDIUM, STRONG
plot REAL # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE, PHASE_OPT_REAL
phase par6
range 0 700
###############################################################
STATISTIC --- 2026-02-20 16:12:06
maxLH = 2888.7, NDF = 2429, maxLH/NDF = 1.189249

View File

@@ -741,14 +741,6 @@ abbr, acronym {
cursor: help;
}
.translated {
background-color: rgba(207, 255, 207, 0.2)
}
.untranslated {
background-color: rgba(255, 207, 207, 0.2)
}
/* -- code displays --------------------------------------------------------- */
pre {

View File

@@ -1,5 +1,5 @@
const DOCUMENTATION_OPTIONS = {
VERSION: '1.9.9',
VERSION: '1.10.0',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',

View File

@@ -6,26 +6,26 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.highlight .hll { background-color: #ffffcc }
.highlight { background: #eeffcc; }
.highlight .c { color: #408090; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .err { border: 1px solid #F00 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .o { color: #666 } /* Operator */
.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
.highlight .cs { color: #408090; background-color: #FFF0F0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gr { color: #F00 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #333333 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .go { color: #333 } /* Generic.Output */
.highlight .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .gt { color: #04D } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
@@ -33,43 +33,43 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #208050 } /* Literal.Number */
.highlight .s { color: #4070a0 } /* Literal.String */
.highlight .na { color: #4070a0 } /* Name.Attribute */
.highlight .s { color: #4070A0 } /* Literal.String */
.highlight .na { color: #4070A0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60add5 } /* Name.Constant */
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
.highlight .nc { color: #0E84B5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60ADD5 } /* Name.Constant */
.highlight .nd { color: #555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #D55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287e } /* Name.Function */
.highlight .nf { color: #06287E } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.highlight .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #bb60d5 } /* Name.Variable */
.highlight .nv { color: #BB60D5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .w { color: #BBB } /* Text.Whitespace */
.highlight .mb { color: #208050 } /* Literal.Number.Bin */
.highlight .mf { color: #208050 } /* Literal.Number.Float */
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
.highlight .sa { color: #4070A0 } /* Literal.String.Affix */
.highlight .sb { color: #4070A0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070A0 } /* Literal.String.Char */
.highlight .dl { color: #4070A0 } /* Literal.String.Delimiter */
.highlight .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070A0 } /* Literal.String.Double */
.highlight .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070A0 } /* Literal.String.Heredoc */
.highlight .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #C65D09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
.highlight .s1 { color: #4070A0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #06287e } /* Name.Function.Magic */
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
.highlight .fm { color: #06287E } /* Name.Function.Magic */
.highlight .vc { color: #BB60D5 } /* Name.Variable.Class */
.highlight .vg { color: #BB60D5 } /* Name.Variable.Global */
.highlight .vi { color: #BB60D5 } /* Name.Variable.Instance */
.highlight .vm { color: #BB60D5 } /* Name.Variable.Magic */
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */

View File

@@ -513,9 +513,11 @@ const Search = {
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
// find documents, if any, containing the query word in their text/title term indices
// use Object.hasOwnProperty to avoid mismatching against prototype properties
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
{ files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term },
{ files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title },
];
// add support for partial matches
if (word.length > 2) {
@@ -547,8 +549,9 @@ const Search = {
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
if (!scoreMap.has(file)) scoreMap.set(file, new Map());
const fileScores = scoreMap.get(file);
fileScores.set(word, record.score);
});
});
@@ -587,7 +590,7 @@ const Search = {
break;
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w)));
// add result to the result list
results.push([
docNames[file],

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Acknowledgements &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Acknowledgements &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -112,8 +112,8 @@ extremely competent way to deal with his projects as well as to deal with the ch
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>any2many - a Universal μSR-file-format converter &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>any2many - a Universal μSR-file-format converter &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -102,8 +102,8 @@ For a detailed description see <a class="reference internal" href="user-manual.h
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bugtracking &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Bugtracking &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -101,8 +101,8 @@ or send an e-mail to A. Suter at PSI.</p>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>How to Cite musrfit? &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>How to Cite musrfit? &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -114,8 +114,8 @@
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Short description and references to the supported file-formats &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Short description and references to the supported file-formats &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -415,8 +415,8 @@ Between detectors, there will be an empty line.</p>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -5,14 +5,14 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Index &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -273,9 +273,9 @@
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="setup-standard.html#index-13">gnu-linux</a>
<li><a href="setup-standard.html#index-12">gnu-linux</a>
</li>
<li><a href="setup-standard.html#index-14">gnu-linux-requirements</a>
<li><a href="setup-standard.html#index-13">gnu-linux-requirements</a>
</li>
</ul></td>
</tr></table>
@@ -289,7 +289,7 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="setup-standard.html#index-8">hdf5</a>
</li>
<li><a href="setup-standard.html#index-24">homebrew</a>
<li><a href="setup-standard.html#index-23">homebrew</a>
</li>
</ul></td>
</tr></table>
@@ -337,15 +337,13 @@
<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="setup-standard.html#index-21">macports</a>
<li><a href="setup-standard.html#index-20">macports</a>
</li>
<li><a href="user-manual.html#index-26">map</a>
</li>
<li><a href="file-formats.html#index-4">mdu-file-format</a>
</li>
<li><a href="user-manual.html#index-17">meta-information</a>
</li>
<li><a href="setup-standard.html#index-9">minixml</a>
</li>
<li><a href="user-manual.html#index-42">minuit2-command-overview</a>
</li>
@@ -419,27 +417,27 @@
</li>
<li><a href="musredit.html#index-0">musredit</a>
</li>
<li><a href="setup-standard.html#index-29">musredit-build-macos</a>
<li><a href="setup-standard.html#index-28">musredit-build-macos</a>
</li>
<li><a href="musredit.html#index-2">musredit-features</a>
</li>
<li><a href="setup-standard.html#index-20">musredit-install-linux</a>
<li><a href="setup-standard.html#index-19">musredit-install-linux</a>
</li>
<li><a href="musredit.html#index-1">musredit_startup</a>
</li>
<li><a href="user-manual.html#index-1">musrfit</a>
</li>
<li><a href="setup-standard.html#index-18">musrfit-build-cmake-linux</a>
<li><a href="setup-standard.html#index-17">musrfit-build-cmake-linux</a>
</li>
<li><a href="setup-standard.html#index-28">musrfit-build-cmake-macos</a>
<li><a href="setup-standard.html#index-27">musrfit-build-cmake-macos</a>
</li>
<li><a href="setup-standard.html#index-17">musrfit-build-linux</a>
<li><a href="setup-standard.html#index-16">musrfit-build-linux</a>
</li>
<li><a href="setup-standard.html#index-27">musrfit-build-macos</a>
<li><a href="setup-standard.html#index-26">musrfit-build-macos</a>
</li>
<li><a href="user-manual.html#index-44">musrfit-command-block-details</a>
</li>
<li><a href="setup-standard.html#index-19">musrfit-post-install-linux</a>
<li><a href="setup-standard.html#index-18">musrfit-post-install-linux</a>
</li>
<li><a href="user-manual.html#index-11">musrfit-startup</a>
</li>
@@ -487,15 +485,15 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="user-manual.html#index-73">negative-muon-musr-fit</a>
</li>
<li><a href="setup-standard.html#index-10">nexus</a>
<li><a href="setup-standard.html#index-9">nexus</a>
</li>
<li><a href="setup-standard.html#index-25">nexus-build-homebrew</a>
<li><a href="setup-standard.html#index-24">nexus-build-homebrew</a>
</li>
<li><a href="setup-standard.html#index-15">nexus-build-linux</a>
<li><a href="setup-standard.html#index-14">nexus-build-linux</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="setup-standard.html#index-22">nexus-build-macports</a>
<li><a href="setup-standard.html#index-21">nexus-build-macports</a>
</li>
<li><a href="file-formats.html#index-6">nexus-file-format</a>
</li>
@@ -511,7 +509,7 @@
<h2 id="O">O</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="setup-standard.html#index-12">os-restrictions</a>
<li><a href="setup-standard.html#index-11">os-restrictions</a>
</li>
</ul></td>
</tr></table>
@@ -539,7 +537,7 @@
<h2 id="Q">Q</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="setup-standard.html#index-11">qt</a>
<li><a href="setup-standard.html#index-10">qt</a>
</li>
</ul></td>
</tr></table>
@@ -549,13 +547,13 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="user-manual.html#index-79">rge-handler</a>
</li>
<li><a href="setup-standard.html#index-26">root-build-homebrew</a>
<li><a href="setup-standard.html#index-25">root-build-homebrew</a>
</li>
<li><a href="setup-standard.html#index-16">root-build-linux</a>
<li><a href="setup-standard.html#index-15">root-build-linux</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="setup-standard.html#index-23">root-build-macports</a>
<li><a href="setup-standard.html#index-22">root-build-macports</a>
</li>
<li><a href="setup-standard.html#index-5">root-cern</a>
</li>
@@ -669,8 +667,8 @@
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 09, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Welcome to the musrfit documentation! &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Welcome to the musrfit documentation! &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -106,7 +106,7 @@
</li>
<li class="toctree-l1"><a class="reference internal" href="user-libs.html">Documentation of user libs (user functions)</a><ul>
<li class="toctree-l2"><a class="reference internal" href="user-libs.html#meissner-profiles-vortex-lattice-related-functions-bmw-libs">Meissner-Profiles / Vortex-Lattice related functions (BMW libs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="user-libs.html#supeconducting-gap-integrals-to-calculate-1-lambda-2-vs-t">Supeconducting Gap-Integrals to calculate <span class="math notranslate nohighlight">\(1/\lambda^2\)</span> vs <span class="math notranslate nohighlight">\(T\)</span></a></li>
<li class="toctree-l2"><a class="reference internal" href="user-libs.html#superconducting-gap-integrals-to-calculate-1-lambda-2-vs-t">Superconducting Gap-Integrals to calculate <span class="math notranslate nohighlight">\(1/\lambda^2\)</span> vs <span class="math notranslate nohighlight">\(T\)</span></a></li>
<li class="toctree-l2"><a class="reference internal" href="user-libs.html#nonlocal-superconductivity-related-meissner-screening-functions-as-libs">Nonlocal superconductivity related Meissner screening functions (AS libs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="user-libs.html#depth-resolved-information-as-libs">Depth resolved information (AS libs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="user-libs.html#functions-to-analyze-bgr-nmr-data-bnmr-libs">Functions to analyze β-NMR data (BNMR libs)</a></li>
@@ -198,8 +198,8 @@
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 09, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>msr2data - A Program for Automatically Processing Multiple musrfit msr Files &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>msr2data - A Program for Automatically Processing Multiple musrfit msr Files &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -428,8 +428,8 @@ fit serves as template for the second and so on. The template field stays empty
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>mupp - μSR Parameter Plotter &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>mupp - μSR Parameter Plotter &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -308,8 +308,8 @@ SCRIPT COMMANDS:
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MusrRoot - an Extensible Open File Format for μSR &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>MusrRoot - an Extensible Open File Format for μSR &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -134,13 +134,20 @@ which allows to inspect these files. This browser (<code class="docutils literal
if they derive from <code class="docutils literal notranslate"><span class="pre">TObject</span></code>.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">MusrRoot</span></code> file format to be described below is only using a small subset of possible ROOT objects, namely:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">TFolder</span></code>: this are the top level objects in the <code class="docutils literal notranslate"><span class="pre">MusrRoot</span></code> file.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">TFolder</span></code>/<code class="docutils literal notranslate"><span class="pre">TDirectory</span></code>: this are the top level objects in the <code class="docutils literal notranslate"><span class="pre">MusrRoot</span></code> file.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">TH1F</span></code>: Hold the μ-decay-histograms.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">TObjArray</span></code>: Holding collection of header information.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">TObjArray</span></code>/<code class="docutils literal notranslate"><span class="pre">TDirectory</span></code>: Holding collection of header information.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">TObjString</span></code>: Holding the content of any header information.</p></li>
</ul>
<p>Since all these objects are deriving form <code class="docutils literal notranslate"><span class="pre">TObject</span></code>, they will be directly accessible via the <code class="docutils literal notranslate"><span class="pre">TBrowser</span></code>-object.
For instance, the μ-decay-histograms can be directly plotted, are even fitted, out of the box.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Since <code class="docutils literal notranslate"><span class="pre">TFolder</span></code> has bee marked as deprecated from the ROOT team, we
will gradually switch over to use <code class="docutils literal notranslate"><span class="pre">TDirectory</span></code> instead. This will have a minimal impact on
the following, as you will see. In the description to follow, the term “folder” will be used
synonymous with “directory”. Only if necessary it will be distinguished.</p>
</div>
</section>
<section id="id1">
<h2>MusrRoot an Extensible Open File Format for μSR<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
@@ -173,7 +180,7 @@ For instance, the μ-decay-histograms can be directly plotted, are even fitted,
in <code class="docutils literal notranslate"><span class="pre">C/C++</span></code> notation, starting with 1) is the histogram number. The title and name of the histogram (see description of the <code class="docutils literal notranslate"><span class="pre">TH1F</span></code> ROOT class) contains the label of the histogram, like top, forward, etc. How many of these histograms are present is accessible through the <code class="docutils literal notranslate"><span class="pre">RunInfo</span></code> folder in which the necessary header information are found (details see next sections). The folder <code class="docutils literal notranslate"><span class="pre">SCAnaModule</span></code> contains histograms of some of the slow-control parameters, as for instance the sample temperature versus time, the applied field versus time, etc. Again the label of the histogram will give more specific information about its content.</p>
<section id="run-information-contained-in-runheader">
<h3>Run Information Contained in <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code><a class="headerlink" href="#run-information-contained-in-runheader" title="Link to this heading"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code> contains all needed meta-information to describe a μSR-run. The list of the minimal number of required “folders” of the <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code> is given in the following structure:</p>
<p>The <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code> contains all needed meta-information to describe a μSR-run. The list of the minimal number of required “folders” of the <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code> is given in the following structure (<em>deprecated</em>):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">RunHeader</span> <span class="p">(</span><span class="n">TFolder</span><span class="p">)</span> <span class="o">---|</span>
<span class="o">|-</span> <span class="n">RunInfo</span> <span class="p">(</span><span class="n">TObjArray</span><span class="p">)</span>
<span class="o">|-</span> <span class="n">DetectorInfo</span> <span class="p">(</span><span class="n">TObjArray</span><span class="p">)</span>
@@ -182,8 +189,24 @@ in <code class="docutils literal notranslate"><span class="pre">C/C++</span></co
<span class="o">|-</span> <span class="n">BeamlineInfo</span> <span class="p">(</span><span class="n">TObjArray</span><span class="p">)</span>
</pre></div>
</div>
<p>In case it is already switched to <code class="docutils literal notranslate"><span class="pre">TDirectory</span></code>, it will look like this (default starting 2026):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">RunHeader</span> <span class="p">(</span><span class="n">TDirectory</span><span class="p">)</span> <span class="o">---|</span>
<span class="o">|-</span> <span class="n">RunInfo</span> <span class="p">(</span><span class="n">TDirectory</span><span class="p">)</span>
<span class="o">|-</span> <span class="n">DetectorInfo</span> <span class="p">(</span><span class="n">TDirectory</span><span class="p">)</span>
<span class="o">|-</span> <span class="n">SampleEnvironmentInfo</span> <span class="p">(</span><span class="n">TDirectory</span><span class="p">)</span>
<span class="o">|-</span> <span class="n">MagneticFieldEnvironmentInfo</span> <span class="p">(</span><span class="n">TDirectory</span><span class="p">)</span>
<span class="o">|-</span> <span class="n">BeamlineInfo</span> <span class="p">(</span><span class="n">TDirectory</span><span class="p">)</span>
</pre></div>
</div>
<p>In brackets the object type is given. <code class="docutils literal notranslate"><span class="pre">RunInfo</span></code> contains most information relevant for the user and will be itemized in <a class="reference internal" href="#musr-root-overview"><span class="std std-ref">RunInfo Overview</span></a> and <a class="reference internal" href="#run-info-required"><span class="std std-ref">RunInfo Required</span></a>. <code class="docutils literal notranslate"><span class="pre">DetectorInfo</span></code> contains detector specific information, like detector name, time zero bin, etc. (details is found under <a class="reference internal" href="#detector-info-required"><span class="std std-ref">DetectorInfo Required</span></a>). <code class="docutils literal notranslate"><span class="pre">SampleEnvironmentInfo</span></code> (details under <a class="reference internal" href="#sample-environment-info-required"><span class="std std-ref">SampleEnvironmentInfo Required</span></a>), and <code class="docutils literal notranslate"><span class="pre">MagneticFieldEnvironmentInfo</span></code> (details under <a class="reference internal" href="#magnetic-field-environment-info-required"><span class="std std-ref">MagneticFieldEnvironmentInfo Required</span></a>) store additional, more detailed information concerning the sample environment. <code class="docutils literal notranslate"><span class="pre">BeamlineInfo</span></code> stores beamline relevant information (details under <a class="reference internal" href="#beamline-info-required"><span class="std std-ref">BeamlineInfo Required</span></a>).</p>
<p>Before elaborating more on the required items within this structure, a few words on the ROOT types used here: <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code> is a <code class="docutils literal notranslate"><span class="pre">TFolder</span></code> object. All the “sub-directory” entries are of type <code class="docutils literal notranslate"><span class="pre">TObjArray</span></code> and collect items of type <code class="docutils literal notranslate"><span class="pre">TObjString</span></code> or other <code class="docutils literal notranslate"><span class="pre">TObjArray</span></code> (<em>i.e.</em> sub-directories and sub-sub-directories, etc.).</p>
<p>Before elaborating more on the required items within this structure, a few words on the ROOT types used here: <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code> is a <code class="docutils literal notranslate"><span class="pre">TFolder</span></code> (<em>deprecated</em>) or a <code class="docutils literal notranslate"><span class="pre">TDirectory</span></code> object.</p>
<ol class="arabic simple">
<li><p>In case of the <em>deprecated</em> <code class="docutils literal notranslate"><span class="pre">TFolder</span></code> <cite>RunHeader`</cite>, all the “sub-directory” entries are of type
<code class="docutils literal notranslate"><span class="pre">TObjArray</span></code> and collect items of type <code class="docutils literal notranslate"><span class="pre">TObjString</span></code> or other <code class="docutils literal notranslate"><span class="pre">TObjArray</span></code>
(<em>i.e.</em> sub-directories and sub-sub-directories, etc.).</p></li>
<li><p>In case the top entry <code class="docutils literal notranslate"><span class="pre">RunHeader</span></code> is a <code class="docutils literal notranslate"><span class="pre">TDirectory</span></code> object, all potential “sub-directories” are
indeed <code class="docutils literal notranslate"><span class="pre">TDirectory</span></code> objects as well. In this case, the data are represented by <code class="docutils literal notranslate"><span class="pre">TObjString</span></code> objects.</p></li>
</ol>
<section id="runinfo-overview">
<span id="musr-root-overview"></span><span id="index-1"></span><h4><code class="docutils literal notranslate"><span class="pre">RunInfo</span></code> Overview<a class="headerlink" href="#runinfo-overview" title="Link to this heading"></a></h4>
<table class="docutils align-default">
@@ -306,8 +329,47 @@ is introduced to deal with physical quantities. They always can be represented i
</div>
</li>
</ol>
<p>Not all of these values are needed to be given and depending on which are given, the representation in the <code class="docutils literal notranslate"><span class="pre">MusrRootv</span> <span class="pre">file</span> <span class="pre">will</span> <span class="pre">be</span> <span class="pre">different</span> <span class="pre">(handled</span> <span class="pre">by</span> <span class="pre">``TMusrRunHeader</span></code>). Examples are given in the comment column of the table above. For details see <a class="reference internal" href="#musr-run-physical-quantity"><span class="std std-ref">TMusrRunPhysicalQuantity - Possible Representations</span></a>.</p>
<p>A mock-up <code class="docutils literal notranslate"><span class="pre">TBrowser</span></code> print-out would look like the one shown in the following figure. You might notice, that at the end of each entry you find a <code class="docutils literal notranslate"><span class="pre">-&#64;X</span></code>, where <code class="docutils literal notranslate"><span class="pre">X</span></code> is a number. This is an encoding of the internal type of the entry and is the price to be payed not using derived types. The next section will explain this in much more detail.</p>
<p>Not all of these values are needed to be given and depending on which are given, the representation in the <code class="docutils literal notranslate"><span class="pre">MusrRoot</span></code> file will be different (handled by <code class="docutils literal notranslate"><span class="pre">TMusrRunHeader</span></code>). Examples are given in the comment column of the table above. For details see <a class="reference internal" href="#musr-run-physical-quantity"><span class="std std-ref">TMusrRunPhysicalQuantity - Possible Representations</span></a>.</p>
<p>A mock-up <code class="docutils literal notranslate"><span class="pre">TBrowser</span></code> print-out would look like the one shown in the following figure. You might notice, that at the end of each entry you find a <code class="docutils literal notranslate"><span class="pre">-&#64;X</span></code>, where <code class="docutils literal notranslate"><span class="pre">X</span></code> is a number. This is an encoding of the internal type of the entry and is the price to be payed not using derived types. Here is a table with the data representation</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>X</p></th>
<th class="head"><p>data type</p></th>
<th class="head"><p>comment</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>0</p></td>
<td><p>TString</p></td>
<td><p>default ROOT type</p></td>
</tr>
<tr class="row-odd"><td><p>1</p></td>
<td><p>Int_t</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p>2</p></td>
<td><p>Double_t</p></td>
<td></td>
</tr>
<tr class="row-odd"><td><p>3</p></td>
<td><p>TMusrRunPhysicalQuantity</p></td>
<td><p>TMusrRunHeader type</p></td>
</tr>
<tr class="row-even"><td><p>4</p></td>
<td><p>TStringVector</p></td>
<td><p>type cast to vector&lt;TString&gt;</p></td>
</tr>
<tr class="row-odd"><td><p>5</p></td>
<td><p>TIntVector</p></td>
<td><p>type cast to vector&lt;Int_T&gt;</p></td>
</tr>
<tr class="row-even"><td><p>6</p></td>
<td><p>TDoubleVector</p></td>
<td><p>type cast to vector&lt;Double_t&gt;</p></td>
</tr>
</tbody>
</table>
<p>The next section will explain this in much more detail.</p>
<img alt="_images/MusrRoot-RunInfo.png" src="_images/MusrRoot-RunInfo.png" />
<p><code class="docutils literal notranslate"><span class="pre">TMusrRunHeader</span></code> mock up. The red shaded entries are of type <code class="docutils literal notranslate"><span class="pre">TMusrRunPhysicalQuantity</span></code></p>
</section>
@@ -338,11 +400,11 @@ is derived which is extending the base class to the needs of the instrument.</p>
<section id="writing-a-musrroot-run-header">
<h4>Writing a MusrRoot Run Header<a class="headerlink" href="#writing-a-musrroot-run-header" title="Link to this heading"></a></h4>
<p>An example program <code class="docutils literal notranslate"><span class="pre">write_musrRoot_runHeader</span></code> which is writing a full run header is part of the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> package. Here I will concentrate just on the most essential parts. First one needs an instance of <code class="docutils literal notranslate"><span class="pre">TMusrRunHeader</span></code></p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">TMusrRunHeader</span><span class="w"> </span><span class="o">*</span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TMusrRunHeader</span><span class="p">();</span>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="p">();</span>
<span class="n">TMusrRunPhysicalQuantity</span><span class="w"> </span><span class="n">prop</span><span class="p">;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">header</span></code> is the instance of <code class="docutils literal notranslate"><span class="pre">TMusrRunHeader</span></code>. <code class="docutils literal notranslate"><span class="pre">prop</span></code> is an instance of <code class="docutils literal notranslate"><span class="pre">TMusrRunPhysicalQuantity</span></code> which will be needed further down in the description. In the next step some run header entries will be added</p>
<p><code class="docutils literal notranslate"><span class="pre">header</span></code> is the instance of <code class="docutils literal notranslate"><span class="pre">TMusrRunHeader</span></code>. Here the concept of a unique pointer (<code class="docutils literal notranslate"><span class="pre">std::unique_ptr</span></code>) has been used to ensure that no memory leaks are present. <code class="docutils literal notranslate"><span class="pre">prop</span></code> is an instance of <code class="docutils literal notranslate"><span class="pre">TMusrRunPhysicalQuantity</span></code> which will be needed further down in the description. In the next step some run header entries will be added</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;RunInfo/File Name&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;deltat_tdc_gps_2871.root&quot;</span><span class="p">);</span>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;RunInfo/Run Title&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;here comes the run title&quot;</span><span class="p">);</span>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;RunInfo/Run Number&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">2871</span><span class="p">);</span>
@@ -364,18 +426,52 @@ is derived which is extending the base class to the needs of the instrument.</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;DetectorInfo/Detector001/Time Zero Bin&quot;</span><span class="p">,</span><span class="w"> </span><span class="mf">3419.0</span><span class="p">);</span>
</pre></div>
</div>
<p>To write the whole run header into a file would look something like this:</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">TFile</span><span class="w"> </span><span class="o">*</span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TFile</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;RECREATE&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;write_musrRoot_runHeader&quot;</span><span class="p">);</span>
<p>To write the whole run header into a file would look something like this (<em>deprecated</em> <code class="docutils literal notranslate"><span class="pre">TFolder</span></code> version):</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// create TMusrRunHeader object</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="p">();</span>
<span class="c1">// set some stuff</span>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;DetectorInfo/Detector001/Time Zero Bin&quot;</span><span class="p">,</span><span class="w"> </span><span class="mf">3419.0</span><span class="p">);</span>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;Something/Somewhere/Strange&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Test String&quot;</span><span class="p">);</span>
<span class="c1">// add more stuff in the header (not shown)</span>
<span class="c1">// create TFile object. It is assumed the fileName is given</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;RECREATE&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;write_musrRoot_runHeader&quot;</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="o">-&gt;</span><span class="n">IsZombie</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">delete</span><span class="w"> </span><span class="n">f</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// create the needed TFolder object</span>
<span class="n">TFolder</span><span class="w"> </span><span class="o">*</span><span class="n">runHeader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TFolder</span><span class="p">(</span><span class="s">&quot;RunHeader&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;MusrRoot Run Header Info&quot;</span><span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TFolder</span><span class="o">&gt;</span><span class="w"> </span><span class="n">runHeader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TFolder</span><span class="o">&gt;</span><span class="p">(</span><span class="s">&quot;RunHeader&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;MusrRoot Run Header Info&quot;</span><span class="p">);</span>
<span class="c1">// create the &quot;folder&quot; structure</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">header</span><span class="o">-&gt;</span><span class="n">FillFolder</span><span class="p">(</span><span class="n">runHeader</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">runHeader</span><span class="o">-&gt;</span><span class="n">Write</span><span class="p">();</span><span class="w"> </span><span class="c1">// write run header to file</span>
<span class="p">}</span>
<span class="n">f</span><span class="o">-&gt;</span><span class="n">Close</span><span class="p">();</span>
</pre></div>
</div>
<p>In the <code class="docutils literal notranslate"><span class="pre">TDirectory</span></code> version it will look like this:</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// create TMusrRunHeader object</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="p">();</span>
<span class="c1">// set some stuff</span>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;DetectorInfo/Detector001/Time Zero Bin&quot;</span><span class="p">,</span><span class="w"> </span><span class="mf">3419.0</span><span class="p">);</span>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Set</span><span class="p">(</span><span class="s">&quot;Something/Somewhere/Strange&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Test String&quot;</span><span class="p">);</span>
<span class="c1">// add more stuff in the header (not shown)</span>
<span class="c1">// create TFile object. It is assumed the fileName is given</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;RECREATE&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;write_musrRoot_runHeader&quot;</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="o">-&gt;</span><span class="n">IsZombie</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// create the needed TDirectory object</span>
<span class="n">TDirectory</span><span class="o">*</span><span class="w"> </span><span class="n">runHeader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">f</span><span class="o">-&gt;</span><span class="n">mkdir</span><span class="p">(</span><span class="s">&quot;RunHeader&quot;</span><span class="p">);</span>
<span class="c1">// create the &quot;directory&quot; structure</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">header</span><span class="o">-&gt;</span><span class="n">FillFolder</span><span class="p">(</span><span class="n">runHeader</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">header</span><span class="o">-&gt;</span><span class="n">FillDirectory</span><span class="p">(</span><span class="n">runHeader</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">runHeader</span><span class="o">-&gt;</span><span class="n">Write</span><span class="p">();</span><span class="w"> </span><span class="c1">// write run header to file</span>
<span class="p">}</span>
@@ -385,41 +481,69 @@ is derived which is extending the base class to the needs of the instrument.</p>
</section>
<section id="reading-a-musrroot-run-header">
<h4>Reading a MusrRoot Run Header<a class="headerlink" href="#reading-a-musrroot-run-header" title="Link to this heading"></a></h4>
<p>The following code snippet shows how the extract the full run header from the <code class="docutils literal notranslate"><span class="pre">MusrRoot</span></code> file.</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">TFile</span><span class="w"> </span><span class="o">*</span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TFile</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;READ&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;read_musrRoot_runHeader&quot;</span><span class="p">);</span>
<p>The following code snippet shows how the extract the full run header from the <code class="docutils literal notranslate"><span class="pre">MusrRoot</span></code> file.
First in the <em>deprecate</em> <code class="docutils literal notranslate"><span class="pre">TFolder</span></code> version:</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// create TFile. It is assumed that fileName is present</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;READ&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;read_musrRoot_runHeader&quot;</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="o">-&gt;</span><span class="n">IsZombie</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">delete</span><span class="w"> </span><span class="n">f</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">TFolder</span><span class="w"> </span><span class="o">*</span><span class="n">runHeader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="c1">// get the TFolder object from the TFile</span>
<span class="n">TFolder</span><span class="w"> </span><span class="o">*</span><span class="n">runHeader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">nullptr</span><span class="p">;</span>
<span class="n">f</span><span class="o">-&gt;</span><span class="n">GetObject</span><span class="p">(</span><span class="s">&quot;RunHeader&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">runHeader</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">runHeader</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;&gt;&gt; **ERROR** Couldn&#39;t get top folder RunHeader&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">closeFile</span><span class="p">(</span><span class="n">f</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">runHeader</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="k">nullptr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;&gt;&gt; **ERROR** Couldn&#39;t get top folder RunHeader&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">TMusrRunHeader</span><span class="w"> </span><span class="o">*</span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TMusrRunHeader</span><span class="p">(</span><span class="n">fileName</span><span class="p">);</span>
<span class="c1">// create the TMusrRunHeader object</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="p">(</span><span class="n">fileName</span><span class="p">);</span>
<span class="c1">// fill the internal data structure of the TMusrRunHeader object</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">header</span><span class="o">-&gt;</span><span class="n">ExtractAll</span><span class="p">(</span><span class="n">runHeader</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;&gt;&gt; **ERROR** couldn&#39;t extract all RunHeader information&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">closeFile</span><span class="p">(</span><span class="n">f</span><span class="p">);</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;&gt;&gt; **ERROR** couldn&#39;t extract all RunHeader information&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">f</span><span class="o">-&gt;</span><span class="n">Close</span><span class="p">();</span>
<span class="k">delete</span><span class="w"> </span><span class="n">f</span><span class="p">;</span>
</pre></div>
</div>
<p>The routine <code class="docutils literal notranslate"><span class="pre">ExtractAll(TFolder</span> <span class="pre">*runHeader)</span></code> decodes all the <code class="docutils literal notranslate"><span class="pre">TObjString</span></code> objects and fills internal data structures. This means when reading a MusrRoot -file the above handling is always needed. After the <code class="docutils literal notranslate"><span class="pre">ExtractAll</span></code> call, parameters can be extracted via the getter routines available. For instance to read the Run Number, the code would look like</p>
<p>The same with the <code class="docutils literal notranslate"><span class="pre">TDirectory</span></code> version:</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="c1">// create TFile. It is assumed that fileName is present</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TFile</span><span class="o">&gt;</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;READ&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;read_musrRoot_runHeader&quot;</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="o">-&gt;</span><span class="n">IsZombie</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// get the TDirectory object from the TFile. Note: Here on the top level a TDirectoryFile is needed</span>
<span class="n">TDirectoryFile</span><span class="w"> </span><span class="o">*</span><span class="n">runHeader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">nullptr</span><span class="p">;</span>
<span class="n">f</span><span class="o">-&gt;</span><span class="n">GetObject</span><span class="p">(</span><span class="s">&quot;RunHeader&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">runHeader</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">runHeader</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="k">nullptr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;&gt;&gt; **ERROR** Couldn&#39;t get top folder RunHeader&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// create the TMusrRunHeader object</span>
<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">TMusrRunHeader</span><span class="o">&gt;</span><span class="p">(</span><span class="n">fileName</span><span class="p">);</span>
<span class="c1">// fill the internal data structure of the TMusrRunHeader object</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">header</span><span class="o">-&gt;</span><span class="n">ExtractAll</span><span class="p">(</span><span class="n">runHeader</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;&gt;&gt; **ERROR** couldn&#39;t extract all RunHeader information&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">f</span><span class="o">-&gt;</span><span class="n">Close</span><span class="p">();</span>
</pre></div>
</div>
<p>The overloaded routine <code class="docutils literal notranslate"><span class="pre">ExtractAll(TFolder</span> <span class="pre">*runHeader)</span></code> and <code class="docutils literal notranslate"><span class="pre">ExtractAll(TDirectory</span> <span class="pre">*runHeader)</span></code> decodes all the <code class="docutils literal notranslate"><span class="pre">TObjString</span></code> objects and fills internal data structures. This means when reading a MusrRoot -file the above handling is always needed. After the <code class="docutils literal notranslate"><span class="pre">ExtractAll</span></code> call, parameters can be extracted via the getter routines available. For instance to read the Run Number, the code would look like</p>
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="n">Bool_t</span><span class="w"> </span><span class="n">ok</span><span class="p">;</span>
<span class="n">Int_t</span><span class="w"> </span><span class="n">ival</span><span class="p">;</span>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Get</span><span class="p">(</span><span class="s">&quot;RunInfo/Run Number&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">ival</span><span class="p">,</span><span class="w"> </span><span class="n">ok</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ok</span><span class="p">)</span>
<span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Run Number: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">ival</span><span class="p">;</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Run Number: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">ival</span><span class="p">;</span>
<span class="k">else</span>
<span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;**ERROR** Couldn&#39;t obtain the &#39;Run Number&#39;.&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;**ERROR** Couldn&#39;t obtain the &#39;Run Number&#39;.&quot;</span><span class="p">;</span>
</pre></div>
</div>
<p>Reading a <code class="docutils literal notranslate"><span class="pre">TMusrRunPhysicalQuantity</span></code> object, <em>e.g.</em> the sample temperature looks like this</p>
@@ -427,11 +551,11 @@ is derived which is extending the base class to the needs of the instrument.</p>
<span class="n">header</span><span class="o">-&gt;</span><span class="n">Get</span><span class="p">(</span><span class="s">&quot;RunInfo/Sample Temperature&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">prop</span><span class="p">,</span><span class="w"> </span><span class="n">ok</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Sample Temperature: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetValue</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; +- &quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetError</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetUnit</span><span class="p">().</span><span class="n">Data</span><span class="p">();</span>
<span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;; SP: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetDemand</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;; &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetDescription</span><span class="p">().</span><span class="n">Data</span><span class="p">();</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;Sample Temperature: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetValue</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; +- &quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetError</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetUnit</span><span class="p">().</span><span class="n">Data</span><span class="p">();</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;; SP: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetDemand</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;; &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">prop</span><span class="p">.</span><span class="n">GetDescription</span><span class="p">().</span><span class="n">Data</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;**ERROR** Couldn&#39;t obtain the &#39;Sample Temperature&#39;.&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;**ERROR** Couldn&#39;t obtain the &#39;Sample Temperature&#39;.&quot;</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
@@ -887,8 +1011,8 @@ the entry has been added. The last token, <code class="docutils literal notransl
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>musredit: the GUI Based Interface to musrfit &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>musredit: the GUI Based Interface to musrfit &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -569,8 +569,8 @@ the corresponding fit parameter value, except the phases where the step will be
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

Binary file not shown.

View File

@@ -5,15 +5,15 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Search &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Search &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -104,8 +104,8 @@
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 09, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Setting up musrfit / DKS: High Speed Fitting with GPUs &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Setting up musrfit / DKS: High Speed Fitting with GPUs &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -319,8 +319,8 @@ The only thing you need <code class="docutils literal notranslate"><span class="
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Setting up musrfit on Different Platforms &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Setting up musrfit on Different Platforms &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
@@ -55,8 +55,8 @@
<li class="toctree-l2"><a class="reference internal" href="#gnu-linux">GNU/Linux</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#requirements">Requirements</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#everything-but-root-and-nexus">Everything but ROOT and NeXus</a></li>
<li class="toctree-l4"><a class="reference internal" href="#installation-of-nexus-requirements-optional">Installation of NeXus requirements (optional)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-16">ROOT</a></li>
<li class="toctree-l4"><a class="reference internal" href="#usage-of-nexus-requirements-optional">Usage of NeXus requirements (optional)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-15">ROOT</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#musrfit">musrfit</a><ul>
@@ -72,22 +72,22 @@
<li class="toctree-l2"><a class="reference internal" href="#ms-windows">MS Windows</a></li>
<li class="toctree-l2"><a class="reference internal" href="#mac-os-x-macos">Mac OS X / macOS</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#requirements-macports">Requirements (MacPorts)</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#index-22">Installation of NeXus requirements (optional)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-23">ROOT</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-21">Usage of NeXus requirements (optional)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-22">ROOT</a></li>
<li class="toctree-l4"><a class="reference internal" href="#notes-on-macos-catalina-and-newer">Notes on macOS Catalina and newer</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#requirements-homebrew">Requirements (Homebrew)</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#index-25">Installation of NeXus requirements (optional)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-26">ROOT</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-24">Usage of NeXus requirements (optional)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#index-25">ROOT</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#index-27">musrfit</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#index-28">musrfit build with cmake</a></li>
<li class="toctree-l3"><a class="reference internal" href="#index-26">musrfit</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#musrfit-build-cmake-macos">musrfit build with cmake</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id16">musrfit last step of the installation</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#index-29">musredit</a></li>
<li class="toctree-l3"><a class="reference internal" href="#index-28">musredit</a></li>
<li class="toctree-l3"><a class="reference internal" href="#musrgui-obsolete">musrgui (obsolete)</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id18">Check the installation</a></li>
</ul>
@@ -166,7 +166,7 @@ their header packages:</p>
</dl>
<p>Additionally, <em>only</em> if <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> should support reading of data files in the <cite>NeXus</cite> format the following libraries are needed:</p>
<dl class="simple" id="index-7">
<dt><strong>HDF4</strong></dt><dd><p>A library and multi-object file format for storing and managing data (see <a class="reference external" href="http://www.hdfgroup.org/products/hdf4/">HDF4</a>). <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> is “outdated” and its support will soon be dropped. The single only reason why it is still required is that ISIS is not able to cope to implement HDF5 V2 of the NeXus muon instrument specification which has been agreed in 2012!</p>
<dt><strong>HDF4</strong></dt><dd><p>A library and multi-object file format for storing and managing data (see <a class="reference external" href="http://www.hdfgroup.org/products/hdf4/">HDF4</a>). <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> is “outdated” but still in use.</p>
</dd>
</dl>
<dl class="simple" id="index-8">
@@ -174,23 +174,18 @@ their header packages:</p>
</dd>
</dl>
<dl class="simple" id="index-9">
<dt><strong>minixml</strong></dt><dd><p>A small <code class="docutils literal notranslate"><span class="pre">XML</span></code> library that can be used to read and write <code class="docutils literal notranslate"><span class="pre">XML</span></code> and <code class="docutils literal notranslate"><span class="pre">XML</span></code>-like data files. <em>Required version ≥ 2.2</em> (see <a class="reference external" href="http://www.minixml.org/">minixml</a>).
Currently the <code class="docutils literal notranslate"><span class="pre">MXML</span></code> support in <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> is broken and hence you will <strong>not</strong> need to install <code class="docutils literal notranslate"><span class="pre">minixml</span></code> for the time being.</p>
<dt><strong>NeXus</strong></dt><dd><p>A common data format for neutron, x-ray, and muon science. The NeXus library itself has been dropped by the muon community. Only the agreed ISIS IDF V1/2 documents are relevant.</p>
</dd>
</dl>
<p>If <em>optionally</em> the editor and graphical user interface <code class="docutils literal notranslate"><span class="pre">musredit</span></code> is going to be installed there is one further requirement:</p>
<dl class="simple" id="index-10">
<dt><strong>NeXus</strong></dt><dd><p>A common data format for neutron, x-ray, and muon science. <em>Required version ≥ 4.4</em> (see <a class="reference external" href="http://www.nexusformat.org/">NeXus</a>).</p>
</dd>
</dl>
<p>If <em>optionally</em> the editor and graphical user interface <code class="docutils literal notranslate"><span class="pre">musrgui</span></code> / <code class="docutils literal notranslate"><span class="pre">musredit</span></code> is going to be installed there is one further requirement:</p>
<dl class="simple" id="index-11">
<dt><strong>Qt</strong></dt><dd><p>A cross-platform application and user interface framework. <em>Required version ≥ 4.6</em> (musredit) (see <a class="reference external" href="http://qt.io/">Qt</a>). Currently the <strong>Qt5</strong> is still supported since some older distributions are not yet supporting Qt6. <strong>Qt6</strong> is the <em>main</em> development part. Should be available on all new major distributions.</p>
<dt><strong>Qt</strong></dt><dd><p>A cross-platform application and user interface framework. <em>Required version ≥ 5.0</em> (musredit) (see <a class="reference external" href="http://qt.io/">Qt</a>). Currently the <strong>Qt5</strong> is still supported since some older distributions are not yet supporting Qt6. <strong>Qt6</strong> is the <em>main</em> development part. Should be available on all new major distributions.</p>
</dd>
</dl>
<p>Each of the following sections focusing on the installation of <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> on the different operating systems will also give a brief introduction on the installation of the requirements before the actual musrfit installation is described.</p>
</section>
<section id="os-restrictions">
<span id="index-12"></span><h2>OS Restrictions<a class="headerlink" href="#os-restrictions" title="Link to this heading"></a></h2>
<span id="index-11"></span><h2>OS Restrictions<a class="headerlink" href="#os-restrictions" title="Link to this heading"></a></h2>
<p>Before the installation procedure will be described, please note the following restrictions:</p>
<dl class="simple">
<dt><strong>GNU/Linux</strong></dt><dd><p>No serious problems are currently known. Tested distributions: <a class="reference external" href="https://www.redhat.com/de/technologies/linux-platforms/enterprise-linux">RHEL</a> (also <a class="reference external" href="https://almalinux.org/">Alma</a>, <a class="reference external" href="https://rockylinux.org/">Rocky</a>), <a class="reference external" href="https://getfedora.org/">Fedora</a>,
@@ -207,9 +202,9 @@ Currently the <code class="docutils literal notranslate"><span class="pre">MXML<
</dl>
</section>
<section id="gnu-linux">
<span id="index-13"></span><span id="id1"></span><h2>GNU/Linux<a class="headerlink" href="#gnu-linux" title="Link to this heading"></a></h2>
<span id="index-12"></span><span id="id1"></span><h2>GNU/Linux<a class="headerlink" href="#gnu-linux" title="Link to this heading"></a></h2>
<section id="requirements">
<span id="gnu-linux-requirements"></span><span id="index-14"></span><h3>Requirements<a class="headerlink" href="#requirements" title="Link to this heading"></a></h3>
<span id="gnu-linux-requirements"></span><span id="index-13"></span><h3>Requirements<a class="headerlink" href="#requirements" title="Link to this heading"></a></h3>
<section id="everything-but-root-and-nexus">
<h4>Everything but ROOT and NeXus<a class="headerlink" href="#everything-but-root-and-nexus" title="Link to this heading"></a></h4>
<p>Depending on the GNU/Linux distribution chosen, the above mentioned software except <code class="docutils literal notranslate"><span class="pre">ROOT/CERN</span></code> and <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> should be available from
@@ -251,14 +246,12 @@ the installation would look like:</p>
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>
</section>
<section id="installation-of-nexus-requirements-optional">
<span id="index-15"></span><h4>Installation of NeXus requirements (optional)<a class="headerlink" href="#installation-of-nexus-requirements-optional" title="Link to this heading"></a></h4>
<section id="usage-of-nexus-requirements-optional">
<span id="index-14"></span><h4>Usage of NeXus requirements (optional)<a class="headerlink" href="#usage-of-nexus-requirements-optional" title="Link to this heading"></a></h4>
<p><em>Only</em> if <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> should support reading/writing data files in the <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> format the further required
software has to be set up. The required libraries and header files could either be available through the users
GNU/Linux distribution or if this is not the case, the packages can be installed from the source code. In principle
NeXus should support <code class="docutils literal notranslate"><span class="pre">MXML</span></code>, <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>, and <code class="docutils literal notranslate"><span class="pre">HDF5</span></code>. At the time of this writing, the <code class="docutils literal notranslate"><span class="pre">MXML</span></code> support in the
NeXus project is broken, and <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> is outdated on most platforms, yet since ISIS/RAL is still <strong>not</strong> up-to-date <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> still
needs to be dragged on (comment: if you are a ISIS user, please complain about <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>). Hence, the necessary packages to build <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> are <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> and <code class="docutils literal notranslate"><span class="pre">HDF5</span></code>. This means, for a rpm-package based distro try something like:</p>
GNU/Linux distribution or if this is not the case, the packages can be installed from the source code. The necessary packages
to build <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>-support for <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> are <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> and <code class="docutils literal notranslate"><span class="pre">HDF5</span></code>. This means, for a rpm-package based distro try something like:</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>yum<span class="w"> </span>install<span class="w"> </span>hdf-devel<span class="w"> </span>hdf5-devel
</pre></div>
@@ -270,28 +263,10 @@ needs to be dragged on (comment: if you are a ISIS user, please complain about <
</pre></div>
</div>
</div></blockquote>
<p><strong>Only NeXus Version ≥ 4.4 is support!</strong></p>
<p>Even though there might exist binary packages for the <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> library, it is best to build and
install it directly from the source code which can be found <a class="reference external" href="https://github.com/nexusformat/code">here</a>.</p>
<p>A brief instruction how to get <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> compiled from source (lines starting with # are comments <em>only</em>):</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>Downloads
$<span class="w"> </span><span class="c1"># create a directory for the NeXus source code</span>
$<span class="w"> </span>mkdir<span class="w"> </span>nexus
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>nexus
$<span class="w"> </span><span class="c1"># get the source code from the master repository</span>
$<span class="w"> </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/nexusformat/code.git
$<span class="w"> </span><span class="c1"># next we will build NeXus out-of-source</span>
$<span class="w"> </span>mkdir<span class="w"> </span>build
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
$<span class="w"> </span>cmake<span class="w"> </span>-DENABLE_HDF5<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DENABLE_HDF4<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DENABLE_MXML<span class="o">=</span><span class="m">0</span><span class="w"> </span>../code
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>./<span class="w"> </span>--clean-first
$<span class="w"> </span><span class="c1"># install needs either to be carried out as root or sudo depending on your linux flavour.</span>
$<span class="w"> </span>sudo<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>./
</pre></div>
</div>
<p>How <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>-support is enabled in <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> is described in the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> setup sections below: <a class="reference internal" href="#musrfit-build-cmake-linux"><span class="std std-ref">musrfit build with cmake</span></a>.</p>
</section>
<section id="index-16">
<span id="id4"></span><h4>ROOT<a class="headerlink" href="#index-16" title="Link to this heading"></a></h4>
<section id="index-15">
<span id="id4"></span><h4>ROOT<a class="headerlink" href="#index-15" title="Link to this heading"></a></h4>
<p>The ROOT framework may or may not be part of the GNU/Linux distribution. Some distributions are packing ROOT in a
manner incompatible with the way it is needed by <code class="docutils literal notranslate"><span class="pre">musrfit</span></code>, though the situation is improving. If you are
experienced enough you can try the packed ROOT version. Often ROOT is split in many sub-packages. Install the
@@ -364,7 +339,7 @@ $<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </
</section>
</section>
<section id="musrfit">
<span id="index-17"></span><h3>musrfit<a class="headerlink" href="#musrfit" title="Link to this heading"></a></h3>
<span id="index-16"></span><h3>musrfit<a class="headerlink" href="#musrfit" title="Link to this heading"></a></h3>
<p>When all required software has been set up you can proceed with the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> installatio. First, the most
recent source code should be downloaded. The preferred way of doing so is to clone the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> repository via git.
Assuming the code should be located in <code class="docutils literal notranslate"><span class="pre">$HOME/Apps</span></code> this is achieved most easily calling from the terminal</p>
@@ -390,20 +365,24 @@ will needed to switch branches first.</p>
$<span class="w"> </span>git<span class="w"> </span>pull
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
$<span class="w"> </span>xargs<span class="w"> </span>rm<span class="w"> </span>&lt;<span class="w"> </span>install_manifest.txt
$<span class="w"> </span>cmake<span class="w"> </span>../
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>./<span class="w"> </span>--clean-first
$<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>./
</pre></div>
</div>
<p>As an alternative (if git is not available), the source code can also be downloaded from the following web-page: <a class="reference external" href="https://bitbucket.org/muonspin/musrfit/downloads">musrfit at bitbucket</a></p>
<section id="musrfit-build-with-cmake">
<span id="index-18"></span><h4>musrfit build with cmake<a class="headerlink" href="#musrfit-build-with-cmake" title="Link to this heading"></a></h4>
<span id="musrfit-build-cmake-linux"></span><span id="index-17"></span><h4>musrfit build with cmake<a class="headerlink" href="#musrfit-build-with-cmake" title="Link to this heading"></a></h4>
<p>Currently the following configuration switches for <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> are available:</p>
<dl class="simple">
<dt><strong>-DCMAKE_INSTALL_PREFIX=&lt;prefix-path&gt;</strong></dt><dd><p>Specify the installation prefix, <em>i.e.</em> the place where <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> shall be installed, <em>e.g.</em> <code class="docutils literal notranslate"><span class="pre">$ROOTSYS</span></code> if already defined (by default: <code class="docutils literal notranslate"><span class="pre">/usr/local</span></code>).</p>
</dd>
<dt><strong>-Dnexus=&lt;value&gt;</strong></dt><dd><p>enable/disable the support of <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> data files (requires the <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>, <code class="docutils literal notranslate"><span class="pre">HDF5</span></code> and <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> libraries to be installed).
<dt><strong>-Dnexus=&lt;value&gt;</strong></dt><dd><p>enable/disable the support of <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> data files (requires at least the <code class="docutils literal notranslate"><span class="pre">HDF5</span></code> library to be installed).
&lt;value&gt;=1 enables <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>, &lt;value&gt;=0 disables <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>. The default setting, <em>i.e.</em> the switch is not provided is <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> support is disabled.</p>
</dd>
<dt><strong>-DHAVE_HDF4=&lt;value&gt;</strong></dt><dd><p>tell musrfit, whether <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>-support should include <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> as well. &lt;value&gt;=1 notifies the presence of <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>. This option is obviously
only relevant if <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> is enabled as well.</p>
</dd>
<dt><strong>-DASlibs=&lt;value&gt;</strong></dt><dd><p>enable/disable the <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code>. &lt;value&gt;=1 enables the <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code>, &lt;value&gt;=0 disables the <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code>. The default setting, <em>i.e.</em> the
switch is not provided is <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code> support is disabled. For details see Documentation of <a class="reference internal" href="user-libs.html#user-libs"><span class="std std-ref">user libs</span></a>.</p>
</dd>
@@ -424,11 +403,11 @@ If the value is set to <code class="docutils literal notranslate"><span class="p
</dl>
<p>Normally it should not be necessary to make use of any of the options except for specifying the installation path with <code class="docutils literal notranslate"><span class="pre">-DCMAKE_INSTALL_PREFIX</span></code>.
<code class="docutils literal notranslate"><span class="pre">musrfit</span></code> build with <code class="docutils literal notranslate"><span class="pre">cmake</span></code> takes the <code class="docutils literal notranslate"><span class="pre">out-of-source</span></code> approach. Therefore a typical configuration / make / install process including
<code class="docutils literal notranslate"><span class="pre">NeXus</span></code> support would look like</p>
<code class="docutils literal notranslate"><span class="pre">NeXus</span></code> support (including <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>) would look like</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span><span class="nv">$HOME</span>/Apps/musrfit
$<span class="w"> </span>mkdir<span class="w"> </span>build
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
$<span class="w"> </span>cmake<span class="w"> </span>../<span class="w"> </span>-DCMAKE_INSTALL_PREFIX<span class="o">=</span><span class="nv">$ROOTSYS</span><span class="w"> </span>-Dnexus<span class="o">=</span><span class="m">1</span>
$<span class="w"> </span>cmake<span class="w"> </span>../<span class="w"> </span>-DCMAKE_INSTALL_PREFIX<span class="o">=</span><span class="nv">$ROOTSYS</span><span class="w"> </span>-Dnexus<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DHAVE_HDF4<span class="o">=</span><span class="m">1</span>
<span class="c1"># below it is assumed that multiple cores are present, hence the -j8 option</span>
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>./<span class="w"> </span>--clean-first<span class="w"> </span>--<span class="w"> </span>-j8
$<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>./
@@ -437,7 +416,7 @@ $<span class="w"> </span>/sbin/ldconfig<span class="w">
</div>
</section>
<section id="musrfit-last-step-of-the-installation">
<span id="index-19"></span><h4>musrfit last step of the installation<a class="headerlink" href="#musrfit-last-step-of-the-installation" title="Link to this heading"></a></h4>
<span id="index-18"></span><h4>musrfit last step of the installation<a class="headerlink" href="#musrfit-last-step-of-the-installation" title="Link to this heading"></a></h4>
<p>In order to finish the installation of musrfit two more things should be done:</p>
<blockquote>
<div><ul>
@@ -455,7 +434,7 @@ detailed information on this XML file refer to the <a class="reference internal"
</section>
</section>
<section id="musredit">
<span id="index-20"></span><h3>musredit<a class="headerlink" href="#musredit" title="Link to this heading"></a></h3>
<span id="index-19"></span><h3>musredit<a class="headerlink" href="#musredit" title="Link to this heading"></a></h3>
<p>In the latest version of <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> the configure script tries to determine automatically the highest available <code class="docutils literal notranslate"><span class="pre">Qt</span></code> version.
In case this is found, the editor <code class="docutils literal notranslate"><span class="pre">musredit</span></code> is built already together with <code class="docutils literal notranslate"><span class="pre">musrfit</span></code>.</p>
</section>
@@ -504,9 +483,9 @@ directories like <code class="docutils literal notranslate"><span class="pre">..
<h2>Mac OS X / macOS<a class="headerlink" href="#mac-os-x-macos" title="Link to this heading"></a></h2>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>macOS 15 alias <strong>Sequoia</strong>: <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> is ready for <strong>Sequoia</strong> on Intel <strong>and</strong> Apple Silicon based macs, both running natively.
The <code class="docutils literal notranslate"><span class="pre">DKS</span></code> version of <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> for macOS <strong>Sequoia</strong> is ready as well.
This is true for the <em>Homebrew</em>, <em>MacPorts</em> still has some issues (as of 23.09.24). Typically this should be fixed in a month.</p>
<p>macOS 26 alias <strong>Tahoe</strong>: <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> is ready for <strong>Tahoe</strong> on Intel <strong>and</strong> Apple Silicon based macs, both running natively.
The <code class="docutils literal notranslate"><span class="pre">DKS</span></code> version of <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> for macOS <strong>Tahoe</strong> is ready as well.
This is true for the <em>Homebrew</em> (tested on Apple Silicon and <em>MacPorts</em> on Intel).</p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
@@ -525,7 +504,7 @@ unistall <code class="docutils literal notranslate"><span class="pre">musrfit</s
installation of <a class="reference external" href="https://www.macports.org/">MacPorts</a> / <a class="reference external" href="https://brew.sh/">Homebrew</a> , <code class="docutils literal notranslate"><span class="pre">ROOT</span></code>, and <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> from scratch!</p>
</div>
<section id="requirements-macports">
<span id="index-21"></span><h3>Requirements (MacPorts)<a class="headerlink" href="#requirements-macports" title="Link to this heading"></a></h3>
<span id="index-20"></span><h3>Requirements (MacPorts)<a class="headerlink" href="#requirements-macports" title="Link to this heading"></a></h3>
<p>Before proceeding with the usage of the <code class="docutils literal notranslate"><span class="pre">MacPorts</span></code> system first a few useful tools provided by Apple together
with OS X (on the installation DVD/CDs) should be installed:</p>
<blockquote>
@@ -581,34 +560,16 @@ add a new line pointing to your local copy, <em>e.g.</em></p>
</div>
<p>With <code class="docutils literal notranslate"><span class="pre">Qt6</span></code>, <code class="docutils literal notranslate"><span class="pre">musredit</span></code> will be installed. If it happens that you used <code class="docutils literal notranslate"><span class="pre">musrgui</span></code> in the past,
please change over to <code class="docutils literal notranslate"><span class="pre">musredit</span></code> since there will be no further development for <code class="docutils literal notranslate"><span class="pre">musrgui</span></code> anymore!</p>
<section id="index-22">
<span id="id6"></span><h4>Installation of NeXus requirements (optional)<a class="headerlink" href="#index-22" title="Link to this heading"></a></h4>
<section id="index-21">
<span id="id6"></span><h4>Usage of NeXus requirements (optional)<a class="headerlink" href="#index-21" title="Link to this heading"></a></h4>
<p><em>Only</em> if <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> should support reading data files in the <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> format the further required packages are set up:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>sudo<span class="w"> </span>port<span class="w"> </span>-v<span class="w"> </span>install<span class="w"> </span>hdf4<span class="w"> </span>hdf5
</pre></div>
</div>
<p><em>hdf4</em> is likely not available anymore.</p>
<p><strong>Only NeXus Version ≥ 4.4 is support!</strong></p>
<p>To get things compiled do:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="c1"># get and install NeXus</span>
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span><span class="nv">$HOME</span>/Applications
$<span class="w"> </span><span class="c1"># get the source code from the master repository</span>
$<span class="w"> </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/nexusformat/code.git<span class="w"> </span>nexus/code
$<span class="w"> </span><span class="c1"># next we will build NeXus out-of-source</span>
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>nexus
$<span class="w"> </span>mkdir<span class="w"> </span>build
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
$<span class="w"> </span><span class="c1"># in case hdf4 is present</span>
$<span class="w"> </span>cmake<span class="w"> </span>-DENABLE_HDF5<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DENABLE_HDF4<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DENABLE_MXML<span class="o">=</span><span class="m">0</span><span class="w"> </span>../code
$<span class="w"> </span><span class="c1"># in case hdf4 is **not** present</span>
$<span class="w"> </span>cmake<span class="w"> </span>-DENABLE_HDF5<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DENABLE_HDF4<span class="o">=</span><span class="m">0</span><span class="w"> </span>-DENABLE_MXML<span class="o">=</span><span class="m">0</span><span class="w"> </span>../code
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>./
$<span class="w"> </span>sudo<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>./
</pre></div>
</div>
<p>How <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>-support is enabled in <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> is described in the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> setup sections below: <a class="reference internal" href="#musrfit-build-cmake-macos"><span class="std std-ref">musrfit build with cmake</span></a>.</p>
</section>
<section id="index-23">
<span id="id7"></span><h4>ROOT<a class="headerlink" href="#index-23" title="Link to this heading"></a></h4>
<section id="index-22">
<span id="id7"></span><h4>ROOT<a class="headerlink" href="#index-22" title="Link to this heading"></a></h4>
<p><strong>The default ROOT version is based on ROOT 6.xx/yy!</strong></p>
<section id="root-installed-via-package-installer">
<h5>ROOT installed via package installer<a class="headerlink" href="#root-installed-via-package-installer" title="Link to this heading"></a></h5>
@@ -625,8 +586,8 @@ $<span class="w"> </span>sudo<span class="w"> </span>ln<span class="w"> </span>-
</pre></div>
</div>
</section>
<section id="root-installed-from-source">
<h5>ROOT installed from source<a class="headerlink" href="#root-installed-from-source" title="Link to this heading"></a></h5>
<section id="root-installed-from-source-recommended">
<h5>ROOT installed from source (<em>recommended</em>)<a class="headerlink" href="#root-installed-from-source-recommended" title="Link to this heading"></a></h5>
<p>The best way to get <code class="docutils literal notranslate"><span class="pre">ROOT</span></code> exactly the way needed for <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> is to install it from source.
Before describing it, please make sure that you have installed all required packages listed under
<a class="reference internal" href="#supported-operating-systems"><span class="std std-ref">Requested Software</span></a> (<em>e.g.</em> <code class="docutils literal notranslate"><span class="pre">fftw</span></code>, <code class="docutils literal notranslate"><span class="pre">gsl</span></code>, etc).</p>
@@ -719,7 +680,7 @@ but no proper fix is available. The workaround to get it right is to install the
</section>
</section>
<section id="requirements-homebrew">
<span id="index-24"></span><h3>Requirements (Homebrew)<a class="headerlink" href="#requirements-homebrew" title="Link to this heading"></a></h3>
<span id="index-23"></span><h3>Requirements (Homebrew)<a class="headerlink" href="#requirements-homebrew" title="Link to this heading"></a></h3>
<p>Before proceeding with the usage of <a class="reference external" href="https://brew.sh/">Homebrew</a>, first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed:</p>
<dl>
<dt><strong>Xcode</strong></dt><dd><p>Useful developer tools including for instance the GNU compiler collection. It can be installed via the Apple App store.
@@ -745,31 +706,23 @@ For example to install <code class="docutils literal notranslate"><span class="p
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>brew<span class="w"> </span>install<span class="w"> </span>cmake
</pre></div>
</div>
<section id="index-25">
<span id="id9"></span><h4>Installation of NeXus requirements (optional)<a class="headerlink" href="#index-25" title="Link to this heading"></a></h4>
<section id="index-24">
<span id="id9"></span><h4>Usage of NeXus requirements (optional)<a class="headerlink" href="#index-24" title="Link to this heading"></a></h4>
<p><em>Only</em> if <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> should support reading data files in the <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> format the further required
packages can be installed through Homebrew (Note: <code class="docutils literal notranslate"><span class="pre">hdf4</span></code> is not supported anymore):</p>
packages can be installed through Homebrew (Note: <code class="docutils literal notranslate"><span class="pre">hdf4</span></code> is not supported anymore, but you can install it from source):</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>brew<span class="w"> </span>install<span class="w"> </span>hdf5
</pre></div>
</div>
<p>Unfortunately, the <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> libraries have to be compiled and installed directly from
the source code. Given the respective version number 4.4 (which are subject to change with time)
this can be achieved for example by:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="c1"># build NeXus</span>
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>..
$<span class="w"> </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/nexusformat/code.git<span class="w"> </span>nexus/code
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>nexus
$<span class="w"> </span><span class="c1"># build NeXus out-of-source</span>
$<span class="w"> </span>mkdir<span class="w"> </span>build
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
$<span class="w"> </span>cmake<span class="w"> </span>../code<span class="w"> </span>-DENABLE_HDF5<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DENABLE_HDF4<span class="o">=</span><span class="m">0</span><span class="w"> </span>-DENABLE_MXML<span class="o">=</span><span class="m">0</span>
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>./<span class="w"> </span>--clean-first<span class="w"> </span>--<span class="w"> </span>-j8
$<span class="w"> </span>sudo<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>./
<p><code class="docutils literal notranslate"><span class="pre">HDF4</span></code> install from source code (do it only when you need it):</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>~/Applications
$<span class="w"> </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/HDFGroup/hdf4.git
</pre></div>
</div>
<p>Follow the build instructions which can be found under <code class="docutils literal notranslate"><span class="pre">hdf4/release_docs/USING_HDF4_CMake.txt</span></code>.</p>
<p>How <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>-support is enabled in <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> is described in the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> setup sections below: <a class="reference internal" href="#musrfit-build-cmake-macos"><span class="std std-ref">musrfit build with cmake</span></a>.</p>
</section>
<section id="index-26">
<span id="id10"></span><h4>ROOT<a class="headerlink" href="#index-26" title="Link to this heading"></a></h4>
<section id="index-25">
<span id="id10"></span><h4>ROOT<a class="headerlink" href="#index-25" title="Link to this heading"></a></h4>
<p><strong>The default ROOT version is based on ROOT 6.xx/yy!</strong></p>
<section id="root-installed-via-homebrew">
<h5>ROOT installed via Homebrew<a class="headerlink" href="#root-installed-via-homebrew" title="Link to this heading"></a></h5>
@@ -777,7 +730,7 @@ $<span class="w"> </span>sudo<span class="w"> </span>cmake<span class="w"> </spa
and can go straight the the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> setup below.</p>
</section>
<section id="id11">
<h5>ROOT installed from source<a class="headerlink" href="#id11" title="Link to this heading"></a></h5>
<h5>ROOT installed from source (<em>recommended</em>)<a class="headerlink" href="#id11" title="Link to this heading"></a></h5>
<p>The best way to get <code class="docutils literal notranslate"><span class="pre">ROOT</span></code> exactly the way needed for <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> is to install it from source.
Before describing it, please make sure that you have installed all required packages listed under
<a class="reference internal" href="#supported-operating-systems"><span class="std std-ref">Requested Software</span></a> (<em>e.g.</em> <code class="docutils literal notranslate"><span class="pre">fftw</span></code>, <code class="docutils literal notranslate"><span class="pre">gsl</span></code>, etc).</p>
@@ -839,11 +792,6 @@ into the file <code class="docutils literal notranslate"><span class="pre">~/.Ma
<span class="nb">export</span><span class="w"> </span><span class="nv">MUSRFITPATH</span><span class="o">=</span><span class="nv">$ROOTSYS</span>/bin
<span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="nv">$ROOTSYS</span>/bin:<span class="nv">$QTDIR</span>/bin:<span class="nv">$PATH</span>
<span class="nb">export</span><span class="w"> </span><span class="nv">DYLD_LIBRARY_PATH</span><span class="o">=</span><span class="nv">$ROOTSYS</span>/lib/root:/usr/local/lib:<span class="nv">$DYLD_LIBRARY_PATH</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>ROOTSYS<span class="w"> </span><span class="nv">$ROOTSYS</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>MUSRFITPATH<span class="w"> </span><span class="nv">$MUSRFITPATH</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>PATH<span class="w"> </span><span class="nv">$PATH</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>DYLD_LIBRARY_PATH<span class="w"> </span><span class="nv">$DYLD_LIBRARY_PATH</span>
</pre></div>
</div>
<p>If <code class="docutils literal notranslate"><span class="pre">ROOT</span></code> has been installed via source/compilation:</p>
@@ -851,22 +799,55 @@ launchctl<span class="w"> </span>setenv<span class="w"> </span>DYLD_LIBRARY_PATH
<span class="nb">export</span><span class="w"> </span><span class="nv">MUSRFITPATH</span><span class="o">=</span><span class="nv">$ROOTSYS</span>/bin
<span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="nv">$ROOTSYS</span>/bin:<span class="nv">$QTDIR</span>/bin:<span class="nv">$PATH</span>
<span class="nb">export</span><span class="w"> </span><span class="nv">LD_LIBRARY_PATH</span><span class="o">=</span><span class="nv">$ROOTSYS</span>/lib:/usr/local/lib:<span class="nv">$LD_LIBRARY_PATH</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>ROOTSYS<span class="w"> </span><span class="nv">$ROOTSYS</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>MUSRFITPATH<span class="w"> </span><span class="nv">$MUSRFITPATH</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>PATH<span class="w"> </span><span class="nv">$PATH</span>
launchctl<span class="w"> </span>setenv<span class="w"> </span>LD_LIBRARY_PATH<span class="w"> </span><span class="nv">$LD_LIBRARY_PATH</span>
</pre></div>
</div>
<p>After this you will need to “execute” <code class="docutils literal notranslate"><span class="pre">.zprofile</span></code> before proceeding:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">source</span><span class="w"> </span><span class="nv">$HOME</span>/.zprofile
</pre></div>
</div>
<p><strong>In addition:</strong> create the the file <code class="docutils literal notranslate"><span class="pre">musrfit.environment.plist</span></code> under <code class="docutils literal notranslate"><span class="pre">~/Library/LaunchAgents/</span></code> with the following content (example for <code class="docutils literal notranslate"><span class="pre">homebrew</span></code>):</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="cp">&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;</span>
<span class="nt">&lt;plist</span><span class="w"> </span><span class="na">version=</span><span class="s">&quot;1.0&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;dict&gt;</span>
<span class="w"> </span><span class="nt">&lt;key&gt;</span>Label<span class="nt">&lt;/key&gt;</span>
<span class="w"> </span><span class="nt">&lt;string&gt;</span>ch.psi.musrfit.environment<span class="nt">&lt;/string&gt;</span>
<span class="w"> </span><span class="nt">&lt;key&gt;</span>ProgramArguments<span class="nt">&lt;/key&gt;</span>
<span class="w"> </span><span class="nt">&lt;array&gt;</span>
<span class="w"> </span><span class="nt">&lt;string&gt;</span>sh<span class="nt">&lt;/string&gt;</span>
<span class="w"> </span><span class="nt">&lt;string&gt;</span>-c<span class="nt">&lt;/string&gt;</span>
<span class="w"> </span><span class="nt">&lt;string&gt;</span>
<span class="w"> </span>ROOTSYS=$HOME/Applications/root/root_exec
<span class="w"> </span>QTDIR=$(brew<span class="w"> </span>--prefix)/opt/qt@6
<span class="w"> </span>OpenMP_ROOT=$(brew<span class="w"> </span>--prefix)/opt/libomp
<span class="w"> </span>launchctl<span class="w"> </span>setenv<span class="w"> </span>ROOTSYS<span class="w"> </span>&quot;$ROOTSYS&quot;
<span class="w"> </span>launchctl<span class="w"> </span>setenv<span class="w"> </span>MUSRFITPATH<span class="w"> </span>&quot;$ROOTSYS/bin&quot;
<span class="w"> </span>launchctl<span class="w"> </span>setenv<span class="w"> </span>PATH<span class="w"> </span>&quot;$ROOTSYS/bin:$QTDIR/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin&quot;
<span class="w"> </span>launchctl<span class="w"> </span>setenv<span class="w"> </span>DYLD_LIBRARY_PATH<span class="w"> </span>&quot;$ROOTSYS/lib:/usr/local/lib&quot;
<span class="w"> </span>launchctl<span class="w"> </span>setenv<span class="w"> </span>OpenMP_ROOT<span class="w"> </span>&quot;$OpenMP_ROOT&quot;
<span class="w"> </span><span class="nt">&lt;/string&gt;</span>
<span class="w"> </span><span class="nt">&lt;/array&gt;</span>
<span class="w"> </span><span class="nt">&lt;key&gt;</span>RunAtLoad<span class="nt">&lt;/key&gt;</span>
<span class="w"> </span><span class="nt">&lt;true/&gt;</span>
<span class="nt">&lt;/dict&gt;</span>
<span class="nt">&lt;/plist&gt;</span>
</pre></div>
</div>
<p>and launch it <em>once</em> via</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>launchctl<span class="w"> </span>load<span class="w"> </span>~/Library/LaunchAgents/musrfit.environment.plist
</pre></div>
</div>
<p>If you use <code class="docutils literal notranslate"><span class="pre">macports</span></code>, replace in <code class="docutils literal notranslate"><span class="pre">musrfit.environment.plist</span></code> the lines for <code class="docutils literal notranslate"><span class="pre">QTDIR</span></code> and <code class="docutils literal notranslate"><span class="pre">OpenMP_ROOT</span></code> by</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">QTDIR</span><span class="o">=/</span><span class="n">opt</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">libexec</span><span class="o">/</span><span class="n">qt6</span>
<span class="n">OpenMP_ROOT</span><span class="o">=/</span><span class="n">opt</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">include</span><span class="o">/</span><span class="n">libomp</span>
</pre></div>
</div>
</section>
</section>
</section>
<section id="index-27">
<span id="id14"></span><h3>musrfit<a class="headerlink" href="#index-27" title="Link to this heading"></a></h3>
<section id="index-26">
<span id="id14"></span><h3>musrfit<a class="headerlink" href="#index-26" title="Link to this heading"></a></h3>
<p>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 <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> repository via git. Assuming the code should be located
in <code class="docutils literal notranslate"><span class="pre">~/Applications/musrfit</span></code> this is achieved most easily calling from the termin</p>
@@ -888,15 +869,18 @@ $<span class="w"> </span>git<span class="w"> </span>pull
</div>
<p>As an alternative (<em>if git is not available</em>), the source code can also be downloaded from the following
web-page: <a class="reference external" href="https://bitbucket.org/muonspin/musrfit/downloads">musrfit at bitbucket</a>.</p>
<section id="index-28">
<span id="id15"></span><h4>musrfit build with cmake<a class="headerlink" href="#index-28" title="Link to this heading"></a></h4>
<section id="musrfit-build-cmake-macos">
<span id="index-27"></span><span id="id15"></span><h4>musrfit build with cmake<a class="headerlink" href="#musrfit-build-cmake-macos" title="Link to this heading"></a></h4>
<p>Currently the following configuration switches for <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> are available:</p>
<dl class="simple">
<dt><strong>-DCMAKE_INSTALL_PREFIX=&lt;prefix-path&gt;</strong></dt><dd><p>Specify the installation prefix, <em>i.e.</em> the place where <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> shall be installed, <em>e.g.</em> <code class="docutils literal notranslate"><span class="pre">$ROOTSYS</span></code> if already defined (by default: <code class="docutils literal notranslate"><span class="pre">/usr/local</span></code>).</p>
</dd>
<dt><strong>-Dnexus=&lt;value&gt;</strong></dt><dd><p>enable/disable the support of <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> data files (requires the <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>, <code class="docutils literal notranslate"><span class="pre">HDF5</span></code> and <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> libraries to be installed).
<dt><strong>-Dnexus=&lt;value&gt;</strong></dt><dd><p>enable/disable the support of <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> data files (requires at least the <code class="docutils literal notranslate"><span class="pre">HDF5</span></code> library to be installed).
&lt;value&gt;=1 enables <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>, &lt;value&gt;=0 disables <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>. The default setting, <em>i.e.</em> the switch is not provided is <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> support is disabled.</p>
</dd>
<dt><strong>-DHAVE_HDF4=&lt;value&gt;</strong></dt><dd><p>tell musrfit, whether <code class="docutils literal notranslate"><span class="pre">NeXus</span></code>-support should include <code class="docutils literal notranslate"><span class="pre">HDF4</span></code> as well. &lt;value&gt;=1 notifies the presence of <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>. This option is obviously
only relevant if <code class="docutils literal notranslate"><span class="pre">NeXus</span></code> is enabled as well.</p>
</dd>
<dt><strong>-DASlibs=&lt;value&gt;</strong></dt><dd><p>enable/disable the <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code>. &lt;value&gt;=1 enables the <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code>, &lt;value&gt;=0 disables the <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code>. The default setting, <em>i.e.</em> the
switch is not provided is <code class="docutils literal notranslate"><span class="pre">ASlibs</span></code> support is disabled. For details see Documentation of <a class="reference internal" href="user-libs.html#user-libs"><span class="std std-ref">user libs</span></a>.</p>
</dd>
@@ -926,11 +910,11 @@ If the value is set to <code class="docutils literal notranslate"><span class="p
</pre></div>
</div>
<p>Therefore a typical configuration / make / install process including
<code class="docutils literal notranslate"><span class="pre">NeXus</span></code> support would look like</p>
<code class="docutils literal notranslate"><span class="pre">NeXus</span></code>-support (including <code class="docutils literal notranslate"><span class="pre">HDF4</span></code>-support) would look like</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span><span class="nv">$HOME</span>/Apps/musrfit
$<span class="w"> </span>mkdir<span class="w"> </span>build
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
$<span class="w"> </span>cmake<span class="w"> </span>../<span class="w"> </span>-DCMAKE_INSTALL_PREFIX<span class="o">=</span><span class="nv">$ROOTSYS</span><span class="w"> </span>-Dnexus<span class="o">=</span><span class="m">1</span>
$<span class="w"> </span>cmake<span class="w"> </span>../<span class="w"> </span>-DCMAKE_INSTALL_PREFIX<span class="o">=</span><span class="nv">$ROOTSYS</span><span class="w"> </span>-Dnexus<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DHAVE_HDF4<span class="o">=</span><span class="m">1</span>
<span class="c1"># below it is assumed that multiple cores are present, hence the -j8 option</span>
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>./<span class="w"> </span>--clean-first<span class="w"> </span>--<span class="w"> </span>-j8
$<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>./
@@ -947,7 +931,7 @@ The configuration, build, and install process might look like this:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span><span class="nv">$HOME</span>/Apps/musrfit
$<span class="w"> </span>mkdir<span class="w"> </span>build
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
$<span class="w"> </span>cmake<span class="w"> </span>../<span class="w"> </span>-DCMAKE_INSTALL_PREFIX<span class="o">=</span><span class="nv">$ROOTSYS</span><span class="w"> </span>-Dnexus<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DCMAKE_PREFIX_PATH<span class="o">=</span><span class="s2">&quot;/opt/local/libexec/qt6/lib/cmake;/opt/local/include/libomp&quot;</span>
$<span class="w"> </span>cmake<span class="w"> </span>../<span class="w"> </span>-DCMAKE_INSTALL_PREFIX<span class="o">=</span><span class="nv">$ROOTSYS</span><span class="w"> </span>-Dnexus<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DHAVE_HDF4<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DCMAKE_PREFIX_PATH<span class="o">=</span><span class="s2">&quot;/opt/local/libexec/qt6/lib/cmake;/opt/local/include/libomp&quot;</span>
<span class="c1"># below it is assumed that multiple cores are present, hence the -j8 option</span>
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>./<span class="w"> </span>--clean-first<span class="w"> </span>--<span class="w"> </span>-j8
$<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>./
@@ -972,8 +956,8 @@ detailed information on this XML file refer to the <a class="reference internal"
</ul>
</section>
</section>
<section id="index-29">
<span id="id17"></span><h3>musredit<a class="headerlink" href="#index-29" title="Link to this heading"></a></h3>
<section id="index-28">
<span id="id17"></span><h3>musredit<a class="headerlink" href="#index-28" title="Link to this heading"></a></h3>
<p>In the latest version of <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> the configure script tries to determine automatically the highest
available Qt version. In case this is found, the editor <code class="docutils literal notranslate"><span class="pre">musredit</span></code> is built already together with <code class="docutils literal notranslate"><span class="pre">musrfit</span></code>.</p>
</section>
@@ -1021,8 +1005,8 @@ $<span class="w"> </span>musrview<span class="w"> </span>test-histo-ROOT-NPP.msr
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Tutorial for musrfit &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Tutorial for musrfit &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -180,7 +180,7 @@ sample holder), each with an amplitude (parameters 10 and 13), a depolarization
</pre></div>
</div>
<p>The THEORY block is used to define a fit-parameter-dependent theory function used to model
the decay asymmetry. Different <a class="reference internal" href="user-manual.html#msr-theory-block"><span class="std std-ref">predefined</span></a> and <a class="reference internal" href="user-manual.html#id41"><span class="std std-ref">user-defined</span></a>
the decay asymmetry. Different <a class="reference internal" href="user-manual.html#msr-theory-block"><span class="std std-ref">predefined</span></a> and <a class="reference internal" href="user-manual.html#id47"><span class="std std-ref">user-defined</span></a>
functions can be combined here. Theory lines following each other are <em>multiplied</em> and the <strong>+</strong> sign
is used to add different (here: two) signal contributions. The numbers are the parameter numbers
according to the <code class="docutils literal notranslate"><span class="pre">FITPARAMETER</span> <span class="pre">block</span></code>. <code class="docutils literal notranslate"><span class="pre">map</span></code> and <code class="docutils literal notranslate"><span class="pre">fun</span></code> are used to refer to
@@ -439,8 +439,8 @@ For a complete description please refer to the manuals of <a class="reference in
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documentation of user libs (user functions) &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>Documentation of user libs (user functions) &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -60,7 +60,7 @@
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#supeconducting-gap-integrals-to-calculate-1-lambda-2-vs-t">Supeconducting Gap-Integrals to calculate <span class="math notranslate nohighlight">\(1/\lambda^2\)</span> vs <span class="math notranslate nohighlight">\(T\)</span></a></li>
<li class="toctree-l2"><a class="reference internal" href="#superconducting-gap-integrals-to-calculate-1-lambda-2-vs-t">Superconducting Gap-Integrals to calculate <span class="math notranslate nohighlight">\(1/\lambda^2\)</span> vs <span class="math notranslate nohighlight">\(T\)</span></a></li>
<li class="toctree-l2"><a class="reference internal" href="#nonlocal-superconductivity-related-meissner-screening-functions-as-libs">Nonlocal superconductivity related Meissner screening functions (AS libs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#depth-resolved-information-as-libs">Depth resolved information (AS libs)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#functions-to-analyze-bgr-nmr-data-bnmr-libs">Functions to analyze β-NMR data (BNMR libs)</a><ul>
@@ -120,7 +120,7 @@
<span id="index-2"></span><h3>libFitPofB<a class="headerlink" href="#libfitpofb" title="Link to this heading"></a></h3>
<section id="introduction">
<h4>Introduction<a class="headerlink" href="#introduction" title="Link to this heading"></a></h4>
<p><code class="docutils literal notranslate"><span class="pre">libFitPofB</span></code> is a collection of <code class="docutils literal notranslate"><span class="pre">C++</span></code> classes using the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> <a class="reference internal" href="user-manual.html#id41"><span class="std std-ref">user-functions</span></a>
<p><code class="docutils literal notranslate"><span class="pre">libFitPofB</span></code> is a collection of <code class="docutils literal notranslate"><span class="pre">C++</span></code> classes using the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> <a class="reference internal" href="user-manual.html#id47"><span class="std std-ref">user-functions</span></a>
interface in order to facilitate the usage in conjunction with <code class="docutils literal notranslate"><span class="pre">musrfit</span></code>. The classes contained in this
library generally implement calculations of one-dimensional static magnetic field distributions
<span class="math notranslate nohighlight">\(p(B)\)</span> which lead to the muon-spin depolarization functions</p>
@@ -425,8 +425,8 @@ The expected name of the <code class="docutils literal notranslate"><span class=
</section>
</section>
</section>
<section id="supeconducting-gap-integrals-to-calculate-1-lambda-2-vs-t">
<span id="gap-integral-libs"></span><span id="index-14"></span><h2>Supeconducting Gap-Integrals to calculate <span class="math notranslate nohighlight">\(1/\lambda^2\)</span> vs <span class="math notranslate nohighlight">\(T\)</span><a class="headerlink" href="#supeconducting-gap-integrals-to-calculate-1-lambda-2-vs-t" title="Link to this heading"></a></h2>
<section id="superconducting-gap-integrals-to-calculate-1-lambda-2-vs-t">
<span id="gap-integral-libs"></span><span id="index-14"></span><h2>Superconducting Gap-Integrals to calculate <span class="math notranslate nohighlight">\(1/\lambda^2\)</span> vs <span class="math notranslate nohighlight">\(T\)</span><a class="headerlink" href="#superconducting-gap-integrals-to-calculate-1-lambda-2-vs-t" title="Link to this heading"></a></h2>
<p>The details about the various superconducting gap-integrals are found in the
pdf-file <strong>GapIntegrals.pdf</strong> which can be found in the musrfit source under
<code class="docutils literal notranslate"><span class="pre">&lt;musrfit-dir&gt;/src/external/libGapIntegrals/</span></code>.</p>
@@ -546,7 +546,7 @@ rge-files (muon stoppping profiles). For this the library reads at start-up the
</section>
<section id="functions-to-analyze-bgr-nmr-data-bnmr-libs">
<span id="bnmr-libs"></span><span id="index-17"></span><h2>Functions to analyze β-NMR data (BNMR libs)<a class="headerlink" href="#functions-to-analyze-bgr-nmr-data-bnmr-libs" title="Link to this heading"></a></h2>
<p>This is a collection of <code class="docutils literal notranslate"><span class="pre">C++</span></code> classes using the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> <a class="reference internal" href="user-manual.html#id41"><span class="std std-ref">user-functions</span></a>
<p>This is a collection of <code class="docutils literal notranslate"><span class="pre">C++</span></code> classes using the <code class="docutils literal notranslate"><span class="pre">musrfit</span></code> <a class="reference internal" href="user-manual.html#id47"><span class="std std-ref">user-functions</span></a>
interface in order to facilitate the usage in conjunction with <code class="docutils literal notranslate"><span class="pre">musrfit</span></code>. It consists of two libraries:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">libBNMR</span></code> contains functions to fit spin lattice relaxation (SLR) data.</p></li>
@@ -784,8 +784,8 @@ K(m)&amp;=\int_0^{\pi/2}\frac{\mathrm d\varphi}{\sqrt{1-m^2\sin^2{\varphi}}},\en
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 07, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>User manual &mdash; musrfit 1.9.9 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<title>User manual &mdash; musrfit V1.10.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=7a5cd723" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=4320943d"></script>
<script src="_static/documentation_options.js?v=1d24b1d9"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
@@ -917,7 +917,7 @@ in case a <span class="math notranslate nohighlight">\(\chi^2\)</span> single-hi
<td></td>
</tr>
<tr class="row-odd"><td><p>internFld</p></td>
<td><p>if</p></td>
<td><p>ifld</p></td>
<td><p><span class="math notranslate nohighlight">\(\alpha (1), \varphi (^\circ)\)</span>, <span class="math notranslate nohighlight">\(\nu\)</span> (MHz), <span class="math notranslate nohighlight">\(\lambda_{\rm T} (\mu \mathrm{s}^{-1})\)</span>,<span class="math notranslate nohighlight">\(\lambda_{\rm L} (\mu \mathrm{s}^{-1})\)</span></p></td>
<td><dl class="simple">
<dt><span class="math notranslate nohighlight">\(\alpha \cos\left(2\pi\nu t + \frac{\pi \varphi}{180}\right) \exp(-\lambda_{\rm T}t) +\)</span></dt><dd><p><span class="math notranslate nohighlight">\(+ (1-\alpha) \exp(-\lambda_{\rm L} t)\)</span></p>
@@ -1245,6 +1245,7 @@ Therefore, this block is only present to potentially shorten the msr file and to
<li><p><code class="docutils literal notranslate"><span class="pre">data</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">t0</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">addt0</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">deadtime-cor</span></code> 0, 1, 2, 3</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">fit</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rrf_freq</span></code> for fittype 1, 3</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rrf_packing</span></code> for fittype 1, 3</p></li>
@@ -1594,6 +1595,14 @@ numbers or the name of the variables as given in the DB header.</p>
</dd>
</dl>
<span id="index-39"></span><dl id="msr-fit">
<dt><strong>deadtime-cor</strong></dt><dd><p>Allows for pulsed sources (currently test with ISIS NeXus files) to perform a deadtime correction on the data.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">deadtime</span><span class="o">-</span><span class="n">cor</span> <span class="n">file</span>
</pre></div>
</div>
<p>Allowed parameters are <code class="docutils literal notranslate"><span class="pre">no</span></code>, i.e. no deadtime correction; <code class="docutils literal notranslate"><span class="pre">file</span></code>, i.e. apply deadtime correction according to the
parameters <code class="docutils literal notranslate"><span class="pre">dead_time</span></code> and <code class="docutils literal notranslate"><span class="pre">good_frames</span></code> read from the NeXus file; <code class="docutils literal notranslate"><span class="pre">estimate</span></code> will allow in the future to estimate
the deadtime parameter directley (<em>not yet implemented</em>)</p>
</dd>
<dt><strong>fit</strong></dt><dd><p>The range of data that should be considered when the fitting is done. For the μSR fit types 0, 1, 2, 3, and 4 the
starting and end times are given in micro-seconds. For the non-μSR fit type 8 the starting and end points of the
fitting range are given in the units of the <em>x</em> data.</p>
@@ -2764,8 +2773,8 @@ The syntax here is attribute driven</p></li>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Andreas Suter.
<span class="lastupdated">Last updated on Jun 09, 2025.
<p>&#169; Copyright 2026, Andreas Suter.
<span class="lastupdated">Last updated on Feb 21, 2026.
</span></p>
</div>

View File

@@ -38,7 +38,7 @@ PROJECT_NAME = musrfit
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 1.9.9
PROJECT_NUMBER = 1.10.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -923,6 +923,18 @@ INPUT = musrfit.dox \
../src/classes/PUserFcn.cpp \
../src/external/MusrRoot/TMusrRunHeader.h \
../src/external/MusrRoot/TMusrRunHeader.cpp \
../src/external/nexus/PNeXus.h \
../src/external/nexus/PNeXus.cpp \
../src/external/MuSR_software/Class_MuSR_PSI/MuSR_td_PSI_bin.h \
../src/external/MuSR_software/Class_MuSR_PSI/MuSR_td_PSI_bin.cpp \
../src/external/mud/src/mud.h \
../src/external/mud/src/mud_all.c \
../src/external/mud/src/mud.c \
../src/external/mud/src/mud_encode.c \
../src/external/mud/src/mud_friendly.c \
../src/external/mud/src/mud_gen.c \
../src/external/mud/src/mud_new.c \
../src/external/mud/src/mud_tri_ti.c \
../src/addRun.cpp \
../src/any2many.cpp \
../src/dump_header.cpp \
@@ -2241,7 +2253,7 @@ INCLUDE_FILE_PATTERNS =
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED =
PREDEFINED = HAVE_HDF4
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The

View File

@@ -23,34 +23,35 @@ endif (nexus)
set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PMusr)
#--- add all executables ------------------------------------------------------
add_executable(addRun ${GIT_REV_H} addRun.cpp)
add_executable(addRun addRun.cpp)
target_compile_options(addRun BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(addRun
BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
)
target_link_libraries(addRun ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${Boost_LIBRARIES})
add_executable(any2many ${GIT_REV_H} any2many.cpp)
add_executable(any2many any2many.cpp)
target_compile_options(any2many BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(any2many
BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<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_REV_H} dump_header.cpp)
add_executable(dump_header dump_header.cpp)
target_compile_options(dump_header BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(dump_header
BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${NEXUS_INCLUDE_DIR}>
$<BUILD_INTERFACE:${HDF4_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${HDF5_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
@@ -62,7 +63,7 @@ target_include_directories(dump_header
)
target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(msr2data ${GIT_REV_H} msr2data.cpp)
add_executable(msr2data msr2data.cpp)
target_compile_options(msr2data BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(msr2data
BEFORE PRIVATE
@@ -76,22 +77,26 @@ target_link_libraries(msr2data ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(msr2msr msr2msr.cpp)
target_link_libraries(msr2msr ${ROOT_LIBRARIES})
add_executable(musrfit ${GIT_REV_H} musrfit.cpp)
add_executable(musrfit musrfit.cpp)
target_compile_options(musrfit BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(musrfit
BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<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})
if (OpenMP_CXX_FOUND)
target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} OpenMP::OpenMP_CXX)
else ()
target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
endif (OpenMP_CXX_FOUND)
add_executable(musrFT ${GIT_REV_H} musrFT.cpp)
add_executable(musrFT musrFT.cpp)
target_compile_options(musrFT BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(musrFT
BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${FFTW3_INCLUDE}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
@@ -99,33 +104,34 @@ target_include_directories(musrFT
)
target_link_libraries(musrFT FFTW3::FFTW3 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(musrRootValidation ${GIT_REV_H} musrRootValidation.cpp)
add_executable(musrRootValidation musrRootValidation.cpp)
target_compile_options(musrRootValidation BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(musrRootValidation
target_include_directories(musrRootValidation
BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
$<BUILD_INTERFACE:${FFTW3_INCLUDE}>
$<BUILD_INTERFACE:${LIBXML2_INCLUDE_DIR}>
)
target_link_libraries(musrRootValidation ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES})
add_executable(musrt0 ${GIT_REV_H} musrt0.cpp)
add_executable(musrt0 musrt0.cpp)
target_compile_options(musrt0 BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(musrt0
BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<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_REV_H} musrview.cpp)
add_executable(musrview musrview.cpp)
target_compile_options(musrview BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(musrview
BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${FFTW3_INCLUDE}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
@@ -133,18 +139,33 @@ target_include_directories(musrview
)
target_link_libraries(musrview FFTW3::FFTW3 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS})
add_executable(write_musrRoot_runHeader ${GIT_REV_H} write_musrRoot_runHeader.cpp)
add_executable(write_musrRoot_runHeader write_musrRoot_runHeader.cpp)
target_compile_options(write_musrRoot_runHeader BEFORE PRIVATE "-DHAVE_CONFIG_H" "${HAVE_GIT_REV_H}")
target_include_directories(write_musrRoot_runHeader
target_include_directories(write_musrRoot_runHeader
BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/include>
$<BUILD_INTERFACE:${FFTW3_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})
#--- ensure git-revision.h is regenerated before compiling --------------------
if (IS_GIT_REPO)
add_dependencies(addRun git_revision)
add_dependencies(any2many git_revision)
add_dependencies(dump_header git_revision)
add_dependencies(msr2data git_revision)
add_dependencies(musrfit git_revision)
add_dependencies(musrFT git_revision)
add_dependencies(musrRootValidation git_revision)
add_dependencies(musrt0 git_revision)
add_dependencies(musrview git_revision)
add_dependencies(write_musrRoot_runHeader git_revision)
endif (IS_GIT_REPO)
#--- installation info --------------------------------------------------------
install(
TARGETS

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -23,7 +23,7 @@ root_generate_dictionary(
PMsgBox.h
LINKDEF ${MUSRFIT_INC}/PMsgBoxLinkDef.h
OPTIONS
-I${Boost_INCLUDE_DIR} -I${FFTW3_INCLUDE} -I${MUSRFIT_INC}
-I${Boost_INCLUDE_DIRS} -I${FFTW3_INCLUDE} -I${MUSRFIT_INC}
-inlineInputHeader
MODULE PMsgBox
)
@@ -32,7 +32,7 @@ root_generate_dictionary(
PMusrCanvas.h
LINKDEF ${MUSRFIT_INC}/PMusrCanvasLinkDef.h
OPTIONS
-I${Boost_INCLUDE_DIR} -I${FFTW3_INCLUDE} -I${MUSRFIT_INC}
-I${Boost_INCLUDE_DIRS} -I${FFTW3_INCLUDE} -I${MUSRFIT_INC}
-inlineInputHeader
MODULE PMusrCanvas
)
@@ -41,7 +41,7 @@ root_generate_dictionary(
PMusrT0.h
LINKDEF ${MUSRFIT_INC}/PMusrT0LinkDef.h
OPTIONS
-I${Boost_INCLUDE_DIR} -I${FFTW3_INCLUDE} -I${MUSRFIT_INC}
-I${Boost_INCLUDE_DIRS} -I${FFTW3_INCLUDE} -I${MUSRFIT_INC}
-inlineInputHeader
MODULE PMusrT0
)
@@ -82,7 +82,7 @@ set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(MUSR_VERSION "1.7.0")
set(MUSR_VERSION "1.8.0")
set(MUSR_LIBRARY_NAME "PMusr")
configure_file("PMusr.pc.in" "PMusr.pc" @ONLY)
set(USERFCN_LIBRARY_NAME "PUserFcnBase")
@@ -129,15 +129,17 @@ add_library(PMusr SHARED
#--- make sure that the include directory is found ----------------------------
target_include_directories(
PMusr BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${FFTW3_INCLUDE}>
$<BUILD_INTERFACE:${NEXUS_INCLUDE_DIR}>
$<BUILD_INTERFACE:${HDF4_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${HDF5_INCLUDE_DIRS}>
$<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>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
)
add_library(PUserFcnBase SHARED
@@ -151,6 +153,7 @@ add_library(PRgeHandler SHARED
)
#--- set target properties, e.g. version --------------------------------------
target_compile_options(PMusr BEFORE PRIVATE "-DHAVE_CONFIG_H")
set_target_properties(PMusr
PROPERTIES
VERSION ${MUSR_VERSION}
@@ -172,7 +175,7 @@ target_include_directories(
target_include_directories(
PRgeHandler BEFORE PRIVATE
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
$<BUILD_INTERFACE:${Boost_INCLUDE_DIRS}>
$<BUILD_INTERFACE:${MUSRFIT_INC}>
)
@@ -193,23 +196,24 @@ set(DependOnLibs ${DependOnLibs} Class_MuSR_PSI)
if (nexus)
set(DependOnLibs ${DependOnLibs} ${LIBNEXUS_LIBRARY})
set(DependOnLibs ${DependOnLibs} PNeXus)
set(DependOnLibs ${DependOnLibs} ${HDF5_LIBRARIES})
endif (nexus)
if (OpenMP_FOUND)
set(DependOnLibs ${DependOnLibs} OpenMP::OpenMP_CXX)
endif (OpenMP_FOUND)
target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES})
target_link_libraries(PRgeHandler ${Boost_LIBRARIES} ${ROOT_LIBRARIES})
target_link_libraries(PMusr ${Boost_LIBRARIES} ${DependOnLibs})
target_link_libraries(PUserFcnBase PRIVATE ${ROOT_LIBRARIES})
target_link_libraries(PRgeHandler PRIVATE ${Boost_LIBRARIES} ${ROOT_LIBRARIES})
target_link_libraries(PMusr PRIVATE ${Boost_LIBRARIES} ${DependOnLibs})
#--- install PUserFcnBase solib -----------------------------------------------
install(TARGETS PUserFcnBase DESTINATION lib)
install(TARGETS PUserFcnBase EXPORT musrfitTargets DESTINATION lib)
#--- install PRgeHandler solib -----------------------------------------------
install(TARGETS PRgeHandler DESTINATION lib)
install(TARGETS PRgeHandler EXPORT musrfitTargets DESTINATION lib)
#--- install PMusr solib ------------------------------------------------------
install(TARGETS PMusr DESTINATION lib)
install(TARGETS PMusr EXPORT musrfitTargets DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2009-2025 by Bastian M. Wojek / Andreas Suter *
* Copyright (C) 2009-2026 by Bastian M. Wojek / Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -814,6 +814,10 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
fout.width(16);
fout << std::left << "packing";
fout << fGlobal.GetPacking() << std::endl;
} else if (sstr.BeginsWith("deadtime-cor")) {
fout.width(16);
fout << std::left << "deadtime-cor";
fout << fGlobal.GetDeadTimeCorrection() << std::endl;
} else {
fout << str.Data() << std::endl;
}
@@ -1157,6 +1161,10 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
fout.width(16);
fout << std::left << "packing";
fout << fRuns[runNo].GetPacking() << std::endl;
} else if (sstr.BeginsWith("deadtime-cor")) {
fout.width(16);
fout << std::left << "deadtime-cor";
fout << fRuns[runNo].GetDeadTimeCorrection() << std::endl;
} else {
fout << str.Data() << std::endl;
}
@@ -3334,6 +3342,20 @@ Bool_t PMsrHandler::HandleGlobalEntry(PMsrLines &lines)
error = true;
}
}
} else if (iter->fLine.BeginsWith("deadtime-cor", TString::kIgnoreCase)) { // deadtime correction
if (tokens->GetEntries() < 2) {
error = true;
} else {
ostr = dynamic_cast<TObjString*>(tokens->At(1));
str = ostr->GetString();
if (!str.CompareTo("no", TString::kIgnoreCase) ||
!str.CompareTo("file", TString::kIgnoreCase) ||
!str.CompareTo("estimate", TString::kIgnoreCase)) {
global.SetDeadTimeCorrection(str);
} else {
error = true;
}
}
}
// clean up
@@ -3931,6 +3953,27 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
}
}
// deadtime-correction -----------------------------------
if (iter->fLine.BeginsWith("deadtime-cor", TString::kIgnoreCase)) { // deadtime correction
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
if (tokens->GetEntries() < 2) {
error = true;
} else {
ostr = dynamic_cast<TObjString*>(tokens->At(1));
str = ostr->GetString();
if (!str.CompareTo("no", TString::kIgnoreCase) ||
!str.CompareTo("file", TString::kIgnoreCase) ||
!str.CompareTo("estimate", TString::kIgnoreCase)) {
param.SetDeadTimeCorrection(str);
} else {
error = true;
}
}
}
// xy-data -----------------------------------------------
if (line.BeginsWith("xy-data", TString::kIgnoreCase)) {

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -721,6 +721,22 @@ PRawRunDataSet* PRawRunData::GetDataSet(const UInt_t idx, Bool_t wantHistoNo)
return fData.GetSet(idx);
}
//--------------------------------------------------------------------------
// DeadTimeCorrectionReady (public)
//--------------------------------------------------------------------------
/**
* <p>Checks if deadtime correction information is sufficient to apply it.
* This means that fNumberOfGoodFrames must be present and the deadtime
* parameter vector.
*
* @return true if ready to apply deadtime correctio, false otherwise
*/
const Bool_t PRawRunData::DeadTimeCorrectionReady()
{
if ((fNumberOfGoodFrames > 0) && (fDeadTimeParam.size() > 0))
return true;
return false;
}
//--------------------------------------------------------------------------
// SetRingAnode (public)

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -712,16 +712,26 @@ Bool_t PRunAsymmetry::PrepareData()
forward[i].resize(runData->GetDataBin(forwardHistoNo[i])->size());
forward[i] = *runData->GetDataBin(forwardHistoNo[i]);
}
// check if a dead time correction has to be done
// this will be done automatically in the function itself, which also
// checks in the global and run section
DeadTimeCorrection(forward, forwardHistoNo);
backward.resize(backwardHistoNo.size()); // resize to number of groups
for (UInt_t i=0; i<backwardHistoNo.size(); i++) {
backward[i].resize(runData->GetDataBin(backwardHistoNo[i])->size());
backward[i] = *runData->GetDataBin(backwardHistoNo[i]);
}
// check if a dead time correction has to be done
// this will be done automatically in the function itself, which also
// checks in the global and run section
DeadTimeCorrection(backward, backwardHistoNo);
// check if addrun's are present, and if yes add data
// check if there are runs to be added to the current one
if (fRunInfo->GetRunNameSize() > 1) { // runs to be added present
PRawRunData *addRunData;
std::vector<PDoubleVector> addForward, addBackward;
for (UInt_t i=1; i<fRunInfo->GetRunNameSize(); i++) {
// get run to be added to the main one
addRunData = fRawData->GetRunData(*(fRunInfo->GetRunName(i)));
@@ -731,6 +741,22 @@ Bool_t PRunAsymmetry::PrepareData()
return false;
}
// dead time correction handling
addForward.clear();
addForward.resize(forwardHistoNo.size());
for (UInt_t j=0; j<forwardHistoNo.size(); j++) {
addForward[j].resize(addRunData->GetDataBin(forwardHistoNo[j])->size());
addForward[j] = *addRunData->GetDataBin(forwardHistoNo[j]);
}
DeadTimeCorrection(addForward, forwardHistoNo);
addBackward.clear();
addBackward.resize(backwardHistoNo.size());
for (UInt_t j=0; j<backwardHistoNo.size(); j++) {
addBackward[j].resize(addRunData->GetDataBin(backwardHistoNo[j])->size());
addBackward[j] = *addRunData->GetDataBin(backwardHistoNo[j]);
}
DeadTimeCorrection(addBackward, backwardHistoNo);
// add forward run
UInt_t addRunSize;
for (UInt_t k=0; k<forwardHistoNo.size(); k++) { // fill each group
@@ -739,7 +765,7 @@ Bool_t PRunAsymmetry::PrepareData()
// make sure that the index stays in the proper range
if ((static_cast<Int_t>(j)+static_cast<Int_t>(fAddT0s[i-1][2*k])-static_cast<Int_t>(fT0s[2*k]) >= 0) &&
(j+static_cast<Int_t>(fAddT0s[i-1][2*k])-static_cast<Int_t>(fT0s[2*k]) < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(forwardHistoNo[k])->at(j+static_cast<Int_t>(fAddT0s[i-1][2*k])-static_cast<Int_t>(fT0s[2*k]));
forward[k][j] += addForward[k][j+static_cast<Int_t>(fAddT0s[i-1][2*k])-static_cast<Int_t>(fT0s[2*k])];
}
}
}
@@ -751,7 +777,7 @@ Bool_t PRunAsymmetry::PrepareData()
// make sure that the index stays in the proper range
if ((static_cast<Int_t>(j)+static_cast<Int_t>(fAddT0s[i-1][2*k+1])-static_cast<Int_t>(fT0s[2*k+1]) >= 0) &&
(j+static_cast<Int_t>(fAddT0s[i-1][2*k+1])-static_cast<Int_t>(fT0s[2*k+1]) < addRunSize)) {
backward[k][j] += addRunData->GetDataBin(backwardHistoNo[k])->at(j+static_cast<Int_t>(fAddT0s[i-1][2*k+1])-static_cast<Int_t>(fT0s[2*k+1]));
backward[k][j] += addBackward[k][j+static_cast<Int_t>(fAddT0s[i-1][2*k+1])-static_cast<Int_t>(fT0s[2*k+1])];
}
}
}

View File

@@ -9,7 +9,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2018-2025 by Zaher Salman *
* Copyright (C) 2018-2026 by Zaher Salman *
* zaher.salman@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -707,16 +707,26 @@ Bool_t PRunAsymmetryRRF::PrepareData()
forward[i].resize(runData->GetDataBin(forwardHistoNo[i])->size());
forward[i] = *runData->GetDataBin(forwardHistoNo[i]);
}
// check if a dead time correction has to be done
// this will be done automatically in the function itself, which also
// checks in the global and run section
DeadTimeCorrection(forward, forwardHistoNo);
backward.resize(backwardHistoNo.size()); // resize to number of groups
for (UInt_t i=0; i<backwardHistoNo.size(); i++) {
backward[i].resize(runData->GetDataBin(backwardHistoNo[i])->size());
backward[i] = *runData->GetDataBin(backwardHistoNo[i]);
}
// check if a dead time correction has to be done
// this will be done automatically in the function itself, which also
// checks in the global and run section
DeadTimeCorrection(forward, forwardHistoNo);
// check if addrun's are present, and if yes add data
// check if there are runs to be added to the current one
if (fRunInfo->GetRunNameSize() > 1) { // runs to be added present
PRawRunData *addRunData;
std::vector<PDoubleVector> addForward, addBackward;
for (UInt_t i=1; i<fRunInfo->GetRunNameSize(); i++) {
// get run to be added to the main one
addRunData = fRawData->GetRunData(*(fRunInfo->GetRunName(i)));
@@ -726,6 +736,22 @@ Bool_t PRunAsymmetryRRF::PrepareData()
return false;
}
// dead time correction handling
addForward.clear();
addForward.resize(forwardHistoNo.size());
for (UInt_t j=0; j<forwardHistoNo.size(); j++) {
addForward[j].resize(addRunData->GetDataBin(forwardHistoNo[j])->size());
addForward[j] = *addRunData->GetDataBin(forwardHistoNo[j]);
}
DeadTimeCorrection(addForward, forwardHistoNo);
addBackward.clear();
addBackward.resize(backwardHistoNo.size());
for (UInt_t j=0; j<backwardHistoNo.size(); j++) {
addBackward[j].resize(addRunData->GetDataBin(backwardHistoNo[j])->size());
addBackward[j] = *addRunData->GetDataBin(backwardHistoNo[j]);
}
DeadTimeCorrection(addBackward, backwardHistoNo);
// add forward run
UInt_t addRunSize;
for (UInt_t k=0; k<forwardHistoNo.size(); k++) { // fill each group
@@ -733,7 +759,7 @@ Bool_t PRunAsymmetryRRF::PrepareData()
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 (((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]);
forward[k][j] += addForward[k][j+(Int_t)fAddT0s[i-1][2*k]-(Int_t)fT0s[2*k]];
}
}
}
@@ -744,7 +770,7 @@ Bool_t PRunAsymmetryRRF::PrepareData()
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 (((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]);
backward[k][j] += addBackward[k][j+(Int_t)fAddT0s[i-1][2*k+1]-(Int_t)fT0s[2*k+1]];
}
}
}

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -159,6 +159,71 @@ PRunBase::~PRunBase()
fFuncValues.clear();
}
//--------------------------------------------------------------------------
// DeadTimeCorrection (protected)
//--------------------------------------------------------------------------
/**
* \brief carry out dead time correction
*
* \param histos histograms to be corrected
* \param histoNo histogram numbers
*/
void PRunBase::DeadTimeCorrection(std::vector<PDoubleVector> &histos, PUIntVector &histoNo)
{
PRawRunData* runData = fRawData->GetRunData(*fRunInfo->GetRunName());
if (runData == nullptr) {
std::cerr << std::endl << "**WARNING** PRunBase::DeadTimeCorrection: couldn't get data from '" << *fRunInfo->GetRunName() << "'" << std::endl;
return;
}
bool checkDeadTime{false};
PMsrRunList *rl = fMsrInfo->GetMsrRunList();
for (unsigned int i=0; i<rl->size(); i++) {
if (!rl->at(i).GetFileFormat()->CompareTo("nexus", TString::kIgnoreCase)) {
checkDeadTime = true;
break;
}
}
if (!runData->DeadTimeCorrectionReady() && checkDeadTime) {
std::cerr << std::endl << "**WARNING** PRunBase::DeadTimeCorrection: missing input for dead time correction" << std::endl;
return;
}
// check if a dead time correction has to be done
// first check the global block
TString dtcg = fMsrInfo->GetMsrGlobal()->GetDeadTimeCorrection();
Int_t dtcg_tag = 0; // 0=no, 1=file, 2=estimate
if (dtcg.Contains("file", TString::kIgnoreCase)) {
dtcg_tag = 1;
} else if (dtcg.Contains("estimate", TString::kIgnoreCase)) {
dtcg_tag = 2;
}
// now check each run
TString dtcr{"no"};
Bool_t needToCheck{true};
for (UInt_t i=0; i<histoNo.size(); i++) {
dtcr = fRunInfo->GetDeadTimeCorrection();
if (dtcr.Contains("file", TString::kIgnoreCase) || (dtcg_tag != 0)) {
if (runData->DeadTimeCorrectionReady()) {
needToCheck = false;
// Dead time correction: n_true = n_obs / (1 - n_obs * t_dt / (good_frames * dt))
Double_t n_true;
Int_t gf = runData->GetNumberOfGoodFrames();
std::vector<float> t_dt = runData->GetDeadTimeParam();
for (UInt_t j=0; j<histos[i].size(); j++) {
n_true = histos[i][j] / (1.0 - histos[i][j] * t_dt[histoNo[i]-1] / (gf * fTimeResolution));
histos[i][j] = n_true;
}
}
}
if ((dtcr.Contains("estimate", TString::kIgnoreCase) || (dtcg_tag != 0)) && needToCheck) {
std::cerr << std::endl << "**INFO** deadtime correction estimate not yet implemented." << std::endl;
}
}
}
//--------------------------------------------------------------------------
// SetFitRange (public)

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -1069,10 +1069,16 @@ Bool_t PRunSingleHisto::PrepareData()
forward[i] = *runData->GetDataBin(histoNo[i]);
}
// check if a dead time correction has to be done
// this will be done automatically in the function itself, which also
// checks in the global and run section
DeadTimeCorrection(forward, histoNo);
// check if there are runs to be added to the current one
if (fRunInfo->GetRunNameSize() > 1) { // runs to be added present
PRawRunData *addRunData;
for (UInt_t i=1; i<fRunInfo->GetRunNameSize(); i++) {
std::vector<PDoubleVector> addForward;
for (UInt_t i=1; i<fRunInfo->GetRunNameSize(); i++) { // loop over all ADDRUN's
// get run to be added to the main one
addRunData = fRawData->GetRunData(*fRunInfo->GetRunName(i));
@@ -1082,15 +1088,23 @@ Bool_t PRunSingleHisto::PrepareData()
return false;
}
addForward.clear();
addForward.resize(histoNo.size()); // resize to number of groups
for (UInt_t j=0; j<histoNo.size(); j++) {
addForward[j].resize(addRunData->GetDataBin(histoNo[j])->size());
addForward[j] = *addRunData->GetDataBin(histoNo[j]);
}
DeadTimeCorrection(addForward, histoNo);
// add forward run
UInt_t addRunSize;
for (UInt_t k=0; k<histoNo.size(); k++) { // fill each group
addRunSize = addRunData->GetDataBin(histoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices
addRunSize = addForward[k].size();
for (UInt_t j=0; j<addRunSize; j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((static_cast<Int_t>(j)+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k]) >= 0) &&
(j+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k]) < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k]));
forward[k][j] += addForward[k][j+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k])];
}
}
}

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -767,6 +767,7 @@ Bool_t PRunSingleHistoRRF::PrepareData()
// check if there are runs to be added to the current one
if (fRunInfo->GetRunNameSize() > 1) { // runs to be added present
PRawRunData *addRunData;
std::vector<PDoubleVector> addForward;
for (UInt_t i=1; i<fRunInfo->GetRunNameSize(); i++) {
// get run to be added to the main one
@@ -777,15 +778,23 @@ Bool_t PRunSingleHistoRRF::PrepareData()
return false;
}
addForward.clear();
addForward.resize(histoNo.size()); // resize to number of groups
for (UInt_t j=0; j<histoNo.size(); j++) {
addForward[j].resize(addRunData->GetDataBin(histoNo[j])->size());
addForward[j] = *addRunData->GetDataBin(histoNo[j]);
}
DeadTimeCorrection(addForward, histoNo);
// add forward run
UInt_t addRunSize;
for (UInt_t k=0; k<histoNo.size(); k++) { // fill each group
addRunSize = addRunData->GetDataBin(histoNo[k])->size();
for (UInt_t j=0; j<addRunData->GetDataBin(histoNo[k])->size(); j++) { // loop over the bin indices
addRunSize = addForward[k].size();
for (UInt_t j=0; j<addRunSize; j++) { // loop over the bin indices
// make sure that the index stays in the proper range
if ((static_cast<Int_t>(j)+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k]) >= 0) &&
(j+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k]) < addRunSize)) {
forward[k][j] += addRunData->GetDataBin(histoNo[k])->at(j+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k]));
forward[k][j] += addForward[k][j+static_cast<Int_t>(fAddT0s[i-1][k])-static_cast<Int_t>(fT0s[k])];
}
}
}

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -37,6 +37,7 @@
#include <cstring>
#include <ctime>
#include <cassert>
#include <cstddef>
#include <iostream>
#include <fstream>
@@ -270,9 +271,14 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
}
// summary as well?
if (summary && (fileType == DH_MUSR_ROOT)) {
if (summary && ((fileType == DH_MUSR_ROOT) || (fileType == DH_MUSR_ROOT_DIR))) {
TObjArray *runSum=nullptr;
runSum = static_cast<TObjArray*>(folder->FindObject("RunSummary"));
if (fileType == DH_MUSR_ROOT) // TFolder
runSum = static_cast<TObjArray*>(folder->FindObject("RunSummary"));
else // TDirectory
f.GetObject("RunHeader/RunSummary", runSum);
if (!runSum) { // something is wrong!!
std::cerr << std::endl << "**ERROR** Couldn't obtain RunSummary " << fileName << std::endl;
f.Close();
@@ -360,15 +366,39 @@ int dump_header_root(const std::string fileName, const bool summary, const bool
int dump_header_nexus(const std::string fileName, const bool counts) {
#ifdef PNEXUS_ENABLED
std::unique_ptr<PNeXus> nxs_file = std::make_unique<PNeXus>(fileName.c_str());
nxs::HDFType type = nxs::checkHDFType(fileName);
if (nxs_file->IsValid(false)) {
nxs_file->Dump(counts);
} else {
std::cerr << std::endl;
std::cerr << "**ERROR** found invalid NeXus file." << std::endl;
std::cerr << std::endl;
return 1;
// check for type errors, missing enabled HDF4
switch (type) {
case nxs::HDFType::HDF4:
std::cout << std::endl << ">> PRunDataHandler::ReadNexusFile(): HDF4 file." << std::endl;
#ifndef HAVE_HDF4
std::cerr << std::endl << ">> PRunDataHandler::ReadNexusFile(): **ERROR**, HDF4 is not enabled." << std::endl;
return 1;
#endif
break;
case nxs::HDFType::HDF5:
std::cout << std::endl << ">> PRunDataHandler::ReadNexusFile(): HDF5 file." << std::endl;
break;
case nxs::HDFType::Unknown:
std::cerr << std::endl << ">> PRunDataHandler::ReadNexusFile(): Not a valid NeXus file." << std::endl;
return 1;
}
if (type == nxs::HDFType::HDF4) {
#ifdef HAVE_HDF4
std::unique_ptr<nxH4::PNeXus> nxs_file = std::make_unique<nxH4::PNeXus>(fileName);
if (nxs_file == nullptr) {
std::cerr << std::endl << "**ERROR** allocation of nxH4::PNeXus object failed." << std::endl;
}
nxs_file->Dump();
#endif
} else { // HDF5
std::unique_ptr<nxH5::PNeXus> nxs_file = std::make_unique<nxH5::PNeXus>(fileName);
if (nxs_file == nullptr) {
std::cerr << std::endl << "**ERROR** allocation of nxH5::PNeXus object failed." << std::endl;
}
nxs_file->Dump();
}
#else
std::cout << std::endl << "NeXus not enabled, hence the header information cannot be dumped." << std::endl << std::endl;

View File

@@ -11,7 +11,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter, Bastian M. Wojek *
* Copyright (C) 2007-2026 by Andreas Suter, Bastian M. Wojek *
* *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -11,7 +11,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter, Bastian M. Wojek *
* Copyright (C) 2007-2026 by Andreas Suter, Bastian M. Wojek *
* *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2013-2025 by Andreas Suter *
* Copyright (C) 2013-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2013-2025 by Andreas Suter *
* Copyright (C) 2013-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2009-2025 by Andreas Suter *
* Copyright (C) 2009-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2013-2025 by Andreas Suter *
* Copyright (C) 2013-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2013-2025 by Andreas Suter *
* Copyright (C) 2013-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2009-2025 by Andreas Suter *
* Copyright (C) 2009-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2025 by Andreas Suter *
* Copyright (C) 2011-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2025 by Andreas Suter *
* Copyright (C) 2011-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2025 by Andreas Suter *
* Copyright (C) 2011-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2025 by Andreas Suter *
* Copyright (C) 2011-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -10,7 +10,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2025 by Andreas Suter *
* Copyright (C) 2011-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2009-2025 by Andreas Suter *
* Copyright (C) 2009-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2011-2025 by Andreas Suter *
* Copyright (C) 2011-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

View File

@@ -28,7 +28,7 @@ set_target_properties(Class_MuSR_PSI
)
#--- install Class_MuSR_PSI solib ---------------------------------------------
install(TARGETS Class_MuSR_PSI DESTINATION lib)
install(TARGETS Class_MuSR_PSI EXPORT musrfitTargets DESTINATION lib)
#--- install MuSR_td_PSI_bin header -------------------------------------------
install(FILES MuSR_td_PSI_bin.h DESTINATION include)

View File

@@ -46,7 +46,7 @@ set_target_properties(TMusrRunHeader
target_link_libraries(TMusrRunHeader ${ROOT_LIBRARIES})
#--- install TMusrRunHeader solib ---------------------------------------------
install(TARGETS TMusrRunHeader DESTINATION lib)
install(TARGETS TMusrRunHeader EXPORT musrfitTargets DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(

View File

@@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2025 by Andreas Suter *
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *

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