11 Commits
v1.7 ... v1.7.2

47 changed files with 1034 additions and 158 deletions

View File

@ -5,30 +5,31 @@ if (CMAKE_VERSION GREATER_EQUAL 3.12)
cmake_policy(SET CMP0075 NEW)
endif (CMAKE_VERSION GREATER_EQUAL 3.12)
project(musrfit VERSION 1.7.0 LANGUAGES C CXX)
project(musrfit VERSION 1.7.2 LANGUAGES C CXX)
#--- musrfit specific options -------------------------------------------------
option(nexus "build optional NeXus support. Needed for ISIS" OFF)
option(ASlibs "build optional ASlibs" OFF)
option(BMWlibs "build optional BMWlibs" OFF)
option(BNMRlibs "build optional beta-NMR libs" OFF)
option(DummyUserFcn "build optional dummy user function" OFF)
option(qt_based_tools "try to install Qt based tools (musredit, musrWiz, musrStep, mupp)" ON)
option(try_OpenMP "try to use OpenMP if available" ON)
# define qt_version with possible values 'auto' or version '3', '4', '5'
# define qt_version with possible values 'auto' or version '3', '4', '5', '6'
set(qt_version AUTO CACHE STRING "provide a specific Qt version to be used.")
set_property(CACHE qt_version PROPERTY STRINGS AUTO 3 4 5)
set_property(CACHE qt_version PROPERTY STRINGS AUTO 3 4 5 6)
#--- set a default build type if none was specified ---------------------------
set(default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
endif ()
#--- perform some checks and generate the config.h ----------------------------
@ -82,6 +83,15 @@ if (ROOT_mathmore_FOUND)
include(${ROOT_USE_FILE})
endif (ROOT_mathmore_FOUND)
#--- the next check is need to set a flag, since root 6.24 (minuit2) breaks
#--- the backwards compatibility. ---------------------------------------------
if (ROOT_VERSION VERSION_LESS "6.23")
set(ROOT_GRTEQ_24 0)
else ()
set(ROOT_GRTEQ_24 1)
endif ()
set(ROOT_GRTEQ_24 ${ROOT_GRTEQ_24} CACHE INTERNAL "ROOT Version check")
#--- check for boost ----------------------------------------------------------
find_package(Boost REQUIRED
COMPONENTS
@ -119,7 +129,7 @@ if (qt_based_tools)
# check for any Qt, i.e. AUTO
if (qt_version STREQUAL AUTO)
# try Qt6
find_package(Qt6Core)
find_package(Qt6Core QUIET)
if (Qt6Core_FOUND)
find_package(Qt6Widgets CONFIG REQUIRED)
find_package(Qt6Xml CONFIG REQUIRED)
@ -129,7 +139,7 @@ if (qt_based_tools)
endif (Qt6Core_FOUND)
# try Qt5
if (NOT Qt6Core_FOUND)
find_package(Qt5Core)
find_package(Qt5Core QUIET)
if (Qt5Core_FOUND)
find_package(Qt5Widgets CONFIG REQUIRED)
find_package(Qt5Xml CONFIG REQUIRED)
@ -302,6 +312,9 @@ if (BNMRlibs)
else (BNMRlibs)
message(" BNMRlibs : no")
endif (BNMRlibs)
if (DummyUserFcn)
message(" PDummyUserFcn : yes")
endif (DummyUserFcn)
if (qt_based_tools)
if (Qt6Core_FOUND)

View File

@ -12,7 +12,19 @@ or
https://bitbucket.org/muonspin/musrfit/commits/all
Release of V1.7.0, 2021/03/30
Release of V1.7.2, 2021/04/16
=============================
add a full dummy user function class with a global part. This can be used as
a starting point to develop new polarization functions.
Currently no rge-handling present.
Release of V1.7.1, 2021/04/09
=============================
update of the docu. More version info. Dealing with the upcoming ROOT V6.24.
Release of V1.7.0, 2021/04/30
=============================
Centralize the rge-handling for user functions.

View File

@ -1,6 +1,10 @@
// config.h
#define PACKAGE_VERSION "@PROJECT_VERSION@"
#define ROOT_VERSION_USED "@ROOT_VERSION@"
// define to 1 if minor ROOT6 version is >= 24
#define ROOT_GRTEQ_24 @ROOT_GRTEQ_24@
// define to 1 if you have <alloca.h> and it should be used
#cmakedefine HAVE_ALLOCA_H 1

View File

@ -0,0 +1,18 @@
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Simple Example for a User Function *with* a Global Part
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
The source code is found under
<musrfit-dir>src/external/DummyUserFcn
For details see there.
This dummy user function implements an exp(-lambda*t)
in the global part. This is the most efficient way,
since the function time vector is only calculated once
when the parameter (lambda) changes. For all the
subsequent calls a lookup table is used to return the
value of the user function.

View File

@ -0,0 +1,73 @@
FeSe 9p4 TF100 p107apr09_sample*1p02
###############################################################
FITPARAMETER
# Nr. Name Value Step Pos_Error Boundaries
1 Asy 0.2622 -0.0014 0.0014 0 0.33
2 Rate 0.3188 -0.0044 0.0044
3 Field 97.853 -0.056 0.056 0 200
4 Phase_L 178.95 -0.41 0.41
5 Phase_R 1.75 -0.39 0.39
6 N0_L 1097.9 -1.0 1.0
7 N0_R 1159.7 -1.0 1.0
8 Bkg_L 54.47 -0.20 0.20
9 Bkg_R 46.70 -0.19 0.19
###############################################################
THEORY
asymmetry 1
userFcn libPDummyUserFcn PDummyUserFcn 2 (rate)
TFieldCos map1 fun1 (phase frequency)
###############################################################
FUNCTIONS
fun1 = par3 * gamma_mu
###############################################################
GLOBAL
fittype 0 (single histogram fit)
fit 0 8.2
packing 1
###############################################################
RUN ../data/deltat_pta_gpd_0423 PIE1 PSI PSI-BIN (name beamline institute data-file-format)
norm 6
backgr.fit 8
map 4 0 0 0 0 0 0 0 0 0
forward 1
data 165 7965
t0 162.0
RUN ../data/deltat_pta_gpd_0423 PIE1 PSI PSI-BIN (name beamline institute data-file-format)
norm 7
backgr.fit 9
map 5 0 0 0 0 0 0 0 0 0
forward 2
data 205 7965
t0 202.0
###############################################################
COMMANDS
SCALE_N0_BKG TRUE
MINIMIZE
MINOS
SAVE
###############################################################
PLOT 0 (single histo plot)
lifetimecorrection
runs 1 2
range 0.0 9.5 -0.3 0.3
view_packing 25
###############################################################
FOURIER
units Gauss # units either 'Gauss', 'Tesla', 'MHz', or 'Mc/s'
fourier_power 12
apodization NONE # NONE, WEAK, MEDIUM, STRONG
plot REAL # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE
phase par4 par5
range 0.0 200.0
###############################################################
STATISTIC --- 2015-01-05 14:09:47
chisq = 663.9, NDF = 515, chisq/NDF = 1.289169

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Acknowledgements &mdash; musrfit 1.6.5 documentation</title>
<title>Acknowledgements &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="Bugtracking" href="bugtracking.html" />
<link rel="prev" title="MusrRoot - an Extensible Open File Format for μSR" href="musr-root.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="musr-root.html" title="MusrRoot - an Extensible Open File Format for μSR"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -112,12 +112,12 @@ extremely competent way to deal with his projects as well as to deal with the ch
<li class="right" >
<a href="musr-root.html" title="MusrRoot - an Extensible Open File Format for μSR"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>any2many - a Universal μSR-file-format converter &mdash; musrfit 1.6.5 documentation</title>
<title>any2many - a Universal μSR-file-format converter &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="MusrRoot - an Extensible Open File Format for μSR" href="musr-root.html" />
<link rel="prev" title="msr2data - A Program for Automatically Processing Multiple musrfit msr Files" href="msr2data.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="msr2data.html" title="msr2data - A Program for Automatically Processing Multiple musrfit msr Files"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -102,12 +102,12 @@ For a detailed description see <a class="reference internal" href="user-manual.h
<li class="right" >
<a href="msr2data.html" title="msr2data - A Program for Automatically Processing Multiple musrfit msr Files"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Bugtracking &mdash; musrfit 1.6.5 documentation</title>
<title>Bugtracking &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="prev" title="Acknowledgements" href="acknowledgement.html" />
</head>
<body>
@ -37,7 +37,7 @@
<li class="right" >
<a href="acknowledgement.html" title="Acknowledgements"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -93,12 +93,12 @@ or send an e-mail to A. Suter at PSI.</p>
<li class="right" >
<a href="acknowledgement.html" title="Acknowledgements"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>How to Cite musrfit? &mdash; musrfit 1.6.5 documentation</title>
<title>How to Cite musrfit? &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="Tutorial for musrfit" href="tutorial.html" />
<link rel="prev" title="Welcome to the musrfit documentation!" href="index.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="index.html" title="Welcome to the musrfit documentation!"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -114,12 +114,12 @@
<li class="right" >
<a href="index.html" title="Welcome to the musrfit documentation!"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -7,7 +7,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index &mdash; musrfit 1.6.5 documentation</title>
<title>Index &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -15,7 +15,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -25,7 +25,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
</head>
<body>
<div class="related">
@ -34,7 +34,7 @@
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
accesskey="I">index</a></li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -795,6 +795,10 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="user-manual.html#index-78">rge-handler</a>
</dt>
<dt><a href="setup-standard.html#index-32">root-build-fink</a>
</dt>
@ -802,12 +806,12 @@
<dt><a href="setup-standard.html#index-16">root-build-linux</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="setup-standard.html#index-29">root-build-macports</a>
</dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="setup-standard.html#index-23">root-build-windows</a>
</dt>
@ -863,7 +867,7 @@
</dt>
<dt><a href="user-manual.html#index-78">technical-musrfit</a>
<dt><a href="user-manual.html#index-79">technical-musrfit</a>
</dt>
@ -990,12 +994,12 @@
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
>index</a></li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Mar 01, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome to the musrfit documentation! &mdash; musrfit 1.6.5 documentation</title>
<title>Welcome to the musrfit documentation! &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="#" />
<link rel="top" title="musrfit 1.7.1 documentation" href="#" />
<link rel="next" title="How to Cite musrfit?" href="cite.html" />
</head>
<body>
@ -37,7 +37,7 @@
<li class="right" >
<a href="cite.html" title="How to Cite musrfit?"
accesskey="N">next</a> |</li>
<li><a href="#">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="#">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -180,12 +180,12 @@
<li class="right" >
<a href="cite.html" title="How to Cite musrfit?"
>next</a> |</li>
<li><a href="#">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="#">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Mar 01, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>msr2data - A Program for Automatically Processing Multiple musrfit msr Files &mdash; musrfit 1.6.5 documentation</title>
<title>msr2data - A Program for Automatically Processing Multiple musrfit msr Files &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="any2many - a Universal μSR-file-format converter" href="any2many.html" />
<link rel="prev" title="mupp - μSR Parameter Plotter" href="mupp.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="mupp.html" title="mupp - μSR Parameter Plotter"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -434,12 +434,12 @@ fit serves as template for the second and so on. The template field stays empty
<li class="right" >
<a href="mupp.html" title="mupp - μSR Parameter Plotter"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>mupp - μSR Parameter Plotter &mdash; musrfit 1.6.5 documentation</title>
<title>mupp - μSR Parameter Plotter &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="msr2data - A Program for Automatically Processing Multiple musrfit msr Files" href="msr2data.html" />
<link rel="prev" title="musredit: the GUI Based Interface to musrfit" href="musredit.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="musredit.html" title="musredit: the GUI Based Interface to musrfit"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -324,12 +324,12 @@ SCRIPT COMMANDS:
<li class="right" >
<a href="musredit.html" title="musredit: the GUI Based Interface to musrfit"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MusrRoot - an Extensible Open File Format for μSR &mdash; musrfit 1.6.5 documentation</title>
<title>MusrRoot - an Extensible Open File Format for μSR &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="Acknowledgements" href="acknowledgement.html" />
<link rel="prev" title="any2many - a Universal μSR-file-format converter" href="any2many.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="any2many.html" title="any2many - a Universal μSR-file-format converter"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -923,12 +923,12 @@ the entry has been added. The last token, <tt class="docutils literal"><span cla
<li class="right" >
<a href="any2many.html" title="any2many - a Universal μSR-file-format converter"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>musredit: the GUI Based Interface to musrfit &mdash; musrfit 1.6.5 documentation</title>
<title>musredit: the GUI Based Interface to musrfit &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="mupp - μSR Parameter Plotter" href="mupp.html" />
<link rel="prev" title="Setting up musrfit / DKS: High Speed Fitting with GPUs" href="setup-dks.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="setup-dks.html" title="Setting up musrfit / DKS: High Speed Fitting with GPUs"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -550,12 +550,12 @@ the corresponding fit parameter value, except the phases where the step will be
<li class="right" >
<a href="setup-dks.html" title="Setting up musrfit / DKS: High Speed Fitting with GPUs"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

Binary file not shown.

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &mdash; musrfit 1.6.5 documentation</title>
<title>Search &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -25,7 +25,7 @@
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
@ -41,7 +41,7 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -89,12 +89,12 @@
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Mar 01, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

File diff suppressed because one or more lines are too long

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Setting up musrfit / DKS: High Speed Fitting with GPUs &mdash; musrfit 1.6.5 documentation</title>
<title>Setting up musrfit / DKS: High Speed Fitting with GPUs &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="musredit: the GUI Based Interface to musrfit" href="musredit.html" />
<link rel="prev" title="Setting up musrfit on Different Platforms" href="setup-standard.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="setup-standard.html" title="Setting up musrfit on Different Platforms"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -321,12 +321,12 @@ The only thing you need <tt class="docutils literal"><span class="pre">DKS</span
<li class="right" >
<a href="setup-standard.html" title="Setting up musrfit on Different Platforms"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Setting up musrfit on Different Platforms &mdash; musrfit 1.6.5 documentation</title>
<title>Setting up musrfit on Different Platforms &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="Setting up musrfit / DKS: High Speed Fitting with GPUs" href="setup-dks.html" />
<link rel="prev" title="Documentation of user libs (user functions)" href="user-libs.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="user-libs.html" title="Documentation of user libs (user functions)"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -1302,12 +1302,12 @@ $ musrview test-histo-ROOT-NPP.msr
<li class="right" >
<a href="user-libs.html" title="Documentation of user libs (user functions)"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Mar 01, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tutorial for musrfit &mdash; musrfit 1.6.5 documentation</title>
<title>Tutorial for musrfit &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="User manual" href="user-manual.html" />
<link rel="prev" title="How to Cite musrfit?" href="cite.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="cite.html" title="How to Cite musrfit?"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -443,12 +443,12 @@ For a complete description please refer to the manuals of <a class="reference in
<li class="right" >
<a href="cite.html" title="How to Cite musrfit?"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documentation of user libs (user functions) &mdash; musrfit 1.6.5 documentation</title>
<title>Documentation of user libs (user functions) &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="Setting up musrfit on Different Platforms" href="setup-standard.html" />
<link rel="prev" title="User manual" href="user-manual.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="user-manual.html" title="User manual"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -662,12 +662,12 @@ K(m)&amp;=\int_0^{\pi/2}\frac{\mathrm d\varphi}{\sqrt{1-m^2\sin^2{\varphi}}},\en
<li class="right" >
<a href="user-manual.html" title="User manual"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Jan 23, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>User manual &mdash; musrfit 1.6.5 documentation</title>
<title>User manual &mdash; musrfit 1.7.1 documentation</title>
<link rel="stylesheet" href="_static/nature.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@ -14,7 +14,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.6.5',
VERSION: '1.7.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
@ -24,7 +24,7 @@
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="top" title="musrfit 1.6.5 documentation" href="index.html" />
<link rel="top" title="musrfit 1.7.1 documentation" href="index.html" />
<link rel="next" title="Documentation of user libs (user functions)" href="user-libs.html" />
<link rel="prev" title="Tutorial for musrfit" href="tutorial.html" />
</head>
@ -41,7 +41,7 @@
<li class="right" >
<a href="tutorial.html" title="Tutorial for musrfit"
accesskey="P">previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
@ -2450,9 +2450,152 @@ parallelized and the operator() is expected to evaluate to reasonable values for
In case this cannot be ensured, the parallelization can be disabled by <em>&#8211;disable-omp</em> on the configure level of the program installation.</p>
</div>
</div>
<div class="section" id="rge-file-handler-for-low-energy-mgrsr">
<span id="rge-handler"></span><span id="index-78"></span><h3>rge-file handler for Low-Energy μSR<a class="headerlink" href="#rge-file-handler-for-low-energy-mgrsr" title="Permalink to this headline"></a></h3>
<p>In the case of LE-μSR, the muon stopping distribution might have a profound impact on the muon polarization function <span class="math">\(P(t)\)</span>. In case of transverse field μSR measurements it can be written as</p>
<div class="math">
\[P(t) = \int_0^\infty n(z) \cos(\gamma_\mu B(z) t + \varphi) \, dz\]</div>
<p>where <span class="math">\(n(z)\)</span> is the normaized muon stopping distribution obtained from the Monte-Carlo code <tt class="docutils literal"><span class="pre">TRIM.SP</span></tt>. Normalized means</p>
<div class="math">
\[\int_0^\infty n(z) \, dz = 1.\]</div>
<p><span class="math">\(\gamma_\mu = 2 \pi \times 135.54\)</span> MHz/T is the gyromagnetic ratio of the muon and <span class="math">\(\varphi\)</span>
is the initial phase of the muon spins with respect to the positron detector. Typically <span class="math">\(B(z)\)</span> is the function which needs to be dealt with in a specific user function. A simple example would be the Meissner screening of a superconductor, for which</p>
<div class="math">
\[B(z) = B_0\, \exp(-z/\lambda),\]</div>
<p>with <span class="math">\(B_0\)</span> being the applied magnetic field, and <span class="math">\(\lambda\)</span> is the magnetic penetration depth.</p>
<p>This means that one needs to deal with the <span class="math">\(n(z)\)</span> objects in all these user functions. <span class="math">\(n(z)\)</span> does not only depend on the depth, but also on the implantation energy <span class="math">\(E_{\rm impl}\)</span>. For a real experiment this means that one is calculating a collection (various energies) of muon stopping distribution profiles with <tt class="docutils literal"><span class="pre">TRIM.SP</span></tt>. In the language of <tt class="docutils literal"><span class="pre">TRIM.SP</span></tt>, these files are called rge-files.</p>
<p>Since this is often needed in a detailed analysis of LE-μSR spectra, there is a special rge-file handler class implemented which deals with the loading, normalization and interpolation of these <span class="math">\(n(z, E_{\rm impl})\)</span> objects. The essential user-interface of this class with the name <tt class="docutils literal"><span class="pre">PRgeHandler</span></tt> is given
here:</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">PRgeHandler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">TObject</span>
<span class="p">{</span>
<span class="k">public</span><span class="o">:</span>
<span class="n">PRgeHandler</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">fln</span><span class="o">=</span><span class="s">&quot;&quot;</span><span class="p">);</span>
<span class="k">virtual</span> <span class="o">~</span><span class="n">PRgeHandler</span><span class="p">()</span> <span class="p">{}</span>
<span class="k">virtual</span> <span class="kt">bool</span> <span class="n">IsValid</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">fValid</span><span class="p">;</span> <span class="p">}</span>
<span class="k">virtual</span> <span class="n">PRgeDataList</span> <span class="n">GetRgeData</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">fData</span><span class="p">;</span> <span class="p">}</span>
<span class="k">virtual</span> <span class="n">Double_t</span> <span class="n">GetZmax</span><span class="p">(</span><span class="k">const</span> <span class="n">Double_t</span> <span class="n">energy</span><span class="p">);</span>
<span class="k">virtual</span> <span class="n">Double_t</span> <span class="nf">GetZmax</span><span class="p">(</span><span class="k">const</span> <span class="n">Int_t</span> <span class="n">idx</span><span class="p">);</span>
<span class="k">virtual</span> <span class="n">Double_t</span> <span class="nf">Get_n</span><span class="p">(</span><span class="k">const</span> <span class="n">Double_t</span> <span class="n">energy</span><span class="p">,</span> <span class="k">const</span> <span class="n">Double_t</span> <span class="n">z</span><span class="p">);</span>
<span class="k">virtual</span> <span class="n">Double_t</span> <span class="nf">Get_n</span><span class="p">(</span><span class="k">const</span> <span class="n">Int_t</span> <span class="n">idx</span><span class="p">,</span> <span class="k">const</span> <span class="n">Double_t</span> <span class="n">z</span><span class="p">);</span>
<span class="k">virtual</span> <span class="n">Int_t</span> <span class="nf">GetEnergyIndex</span><span class="p">(</span><span class="k">const</span> <span class="n">Double_t</span> <span class="n">energy</span><span class="p">);</span>
<span class="k">private</span><span class="o">:</span>
<span class="kt">bool</span> <span class="n">fValid</span><span class="p">{</span><span class="nb">false</span><span class="p">};</span>
<span class="n">PRgeDataList</span> <span class="n">fData</span><span class="p">;</span>
<span class="k">virtual</span> <span class="kt">bool</span> <span class="nf">ReadRgeFile</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">fln</span><span class="p">,</span> <span class="n">PRgeData</span> <span class="o">&amp;</span><span class="n">data</span><span class="p">);</span>
<span class="p">};</span>
</pre></div>
</div>
<p>The rge-file objects are loaded internally (see below) and can easily be accessed via this interface. The <span class="math">\(n(z, E_{\rm impl})\)</span> data can either be accessed via <tt class="docutils literal"><span class="pre">Get_n(const</span> <span class="pre">Double_t</span> <span class="pre">energy,</span> <span class="pre">const</span> <span class="pre">Double_t</span> <span class="pre">z)</span></tt>, i.e. via the implantation energy (given in eV), or via <tt class="docutils literal"><span class="pre">Get_n(const</span> <span class="pre">Int_t</span> <span class="pre">idx,</span> <span class="pre">const</span> <span class="pre">Double_t</span> <span class="pre">z)</span></tt> with the index <tt class="docutils literal"><span class="pre">idx</span></tt> which is the energy index of the collection. Both this routines deliver <span class="math">\(n(z, E_{\rm impl})\)</span> in normalized form. The on via the energy index is slightly more efficient. The routine <tt class="docutils literal"><span class="pre">GetEnergyIndex(const</span> <span class="pre">Double_t</span> <span class="pre">energy)</span></tt> allows the get the proper energy index of the collection.</p>
<p>In order that class can find the rge-files at runtime, a xml-file is needed when calling the constructor. Very often, specific user-function need some additional input which is not delivered via the msr-files, but via a startup xml-file. In this case the rge-file will be just a part of the startup xml-file. For instance in the case of the Nonlocal Meissner screening user-function class, this looks like this</p>
<div class="highlight-xml"><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="nt">&lt;nonlocal</span> <span class="na">xmlns=</span><span class="s">&quot;http://nemu.web.psi.ch/musrfit/nonlocal&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;comment&gt;</span>
Fourier and TrimSp information
<span class="nt">&lt;/comment&gt;</span>
<span class="nt">&lt;nonlocal_par&gt;</span>
<span class="nt">&lt;fourier_points&gt;</span>262144<span class="nt">&lt;/fourier_points&gt;</span>
<span class="nt">&lt;/nonlocal_par&gt;</span>
<span class="nt">&lt;trim_sp&gt;</span>
<span class="nt">&lt;data_path&gt;</span>./profiles/<span class="nt">&lt;/data_path&gt;</span>
<span class="nt">&lt;rge_fln_pre&gt;</span>Sn_E<span class="nt">&lt;/rge_fln_pre&gt;</span>
<span class="nt">&lt;energy_list&gt;</span>
<span class="nt">&lt;energy&gt;</span>1000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>2000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>4000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>6000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>8000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>10000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>12000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>14100<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>18000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>22000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>25000<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;energy&gt;</span>27300<span class="nt">&lt;/energy&gt;</span>
<span class="nt">&lt;/energy_list&gt;</span>
<span class="nt">&lt;/trim_sp&gt;</span>
<span class="nt">&lt;/nonlocal&gt;</span>
</pre></div>
</div>
<p>The relevant portion for the rge-file handler class is starting with the xml tag <tt class="docutils literal"><span class="pre">&lt;trim_sp&gt;</span></tt> and contains four further tags:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">&lt;data_path&gt;</span></tt>: Here the path where to find the rge-files needs to be given</li>
<li><tt class="docutils literal"><span class="pre">&lt;rge_fln_pre&gt;</span></tt>: Start portion of the rge-file name.</li>
<li><tt class="docutils literal"><span class="pre">&lt;energy_list&gt;</span></tt>: This will embrace all the implantation energies available.</li>
<li><tt class="docutils literal"><span class="pre">&lt;energy&gt;</span></tt>: A single energy (in eV)</li>
</ul>
<p>In the given example the files are searched for in the sub-directory call <tt class="docutils literal"><span class="pre">profiles</span></tt> of the current directory. The rge-files have file names like
<tt class="docutils literal"><span class="pre">Sn_E1000.rge</span></tt>, <tt class="docutils literal"><span class="pre">Sn_E2000.rge</span></tt>, etc.</p>
<p>In the aforementioned Nonlocal Meissner screening class, in the constructor you will find the following invocation of the rge-handler object:</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">PNL_PippardFitterGlobal</span><span class="o">::</span><span class="n">PNL_PippardFitterGlobal</span><span class="p">()</span>
<span class="p">{</span>
<span class="p">...</span>
<span class="c1">// load all the TRIM.SP rge-files</span>
<span class="n">fRgeHandler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PRgeHandler</span><span class="p">(</span><span class="s">&quot;./nonlocal_startup.xml&quot;</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">fRgeHandler</span><span class="o">-&gt;</span><span class="n">IsValid</span><span class="p">())</span> <span class="p">{</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o">&lt;&lt;</span> <span class="s">&quot;&gt;&gt; PNL_PippardFitterGlobal::PNL_PippardFitterGlobal **PANIC ERROR**&quot;</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o">&lt;&lt;</span> <span class="s">&quot;&gt;&gt; rge data handler too unhappy. Will terminate unfriendly, sorry.&quot;</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="n">fValid</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">...</span>
<span class="p">}</span>
</pre></div>
</div>
<p>And in the <tt class="docutils literal"><span class="pre">operator()</span></tt> function call which calculates the muon spin polarization, it will look like this</p>
<div class="highlight-c++"><div class="highlight"><pre><span></span><span class="n">Double_t</span> <span class="n">PNL_PippardFitter</span><span class="o">::</span><span class="k">operator</span><span class="p">()(</span><span class="n">Double_t</span> <span class="n">t</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">Double_t</span><span class="o">&gt;</span> <span class="o">&amp;</span><span class="n">param</span><span class="p">)</span> <span class="k">const</span>
<span class="p">{</span>
<span class="p">...</span>
<span class="c1">// calculate field if parameter have changed</span>
<span class="n">fPippardFitterGlobal</span><span class="o">-&gt;</span><span class="n">CalculateField</span><span class="p">(</span><span class="n">param</span><span class="p">);</span>
<span class="n">Int_t</span> <span class="n">energyIndex</span> <span class="o">=</span> <span class="n">fPippardFitterGlobal</span><span class="o">-&gt;</span><span class="n">GetEnergyIndex</span><span class="p">(</span><span class="n">param</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">energyIndex</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// energy not found</span>
<span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o">&lt;&lt;</span> <span class="s">&quot;&gt;&gt; PNL_PippardFitter::operator() energy &quot;</span> <span class="o">&lt;&lt;</span> <span class="n">param</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="s">&quot; not found. Will terminate.&quot;</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
<span class="n">assert</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">...</span>
<span class="c1">// calcualte polarization</span>
<span class="n">Bool_t</span> <span class="n">done</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
<span class="n">Double_t</span> <span class="n">pol</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">dPol</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span>
<span class="n">Double_t</span> <span class="n">z</span><span class="o">=</span><span class="mf">0.0</span><span class="p">;</span>
<span class="n">Int_t</span> <span class="n">terminate</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">Double_t</span> <span class="n">dz</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">;</span>
<span class="k">do</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">z</span> <span class="o">&lt;</span> <span class="n">param</span><span class="p">[</span><span class="mi">8</span><span class="p">])</span> <span class="p">{</span> <span class="c1">// z &lt; dead-layer</span>
<span class="n">dPol</span> <span class="o">=</span> <span class="n">fPippardFitterGlobal</span><span class="o">-&gt;</span><span class="n">GetMuonStoppingDensity</span><span class="p">(</span><span class="n">energyIndex</span><span class="p">,</span> <span class="n">z</span><span class="p">)</span> <span class="o">*</span> <span class="n">cos</span><span class="p">(</span><span class="n">GAMMA_MU</span> <span class="o">*</span> <span class="n">param</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="o">*</span> <span class="n">t</span> <span class="o">+</span> <span class="n">param</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="o">*</span> <span class="n">DEGREE2RAD</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="n">dPol</span> <span class="o">=</span> <span class="n">fPippardFitterGlobal</span><span class="o">-&gt;</span><span class="n">GetMuonStoppingDensity</span><span class="p">(</span><span class="n">energyIndex</span><span class="p">,</span> <span class="n">z</span><span class="p">)</span> <span class="o">*</span> <span class="n">cos</span><span class="p">(</span><span class="n">GAMMA_MU</span> <span class="o">*</span> <span class="n">param</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="o">*</span> <span class="n">fPippardFitterGlobal</span><span class="o">-&gt;</span><span class="n">GetMagneticField</span><span class="p">(</span><span class="n">z</span><span class="o">-</span><span class="n">param</span><span class="p">[</span><span class="mi">8</span><span class="p">])</span> <span class="o">*</span> <span class="n">t</span> <span class="o">+</span> <span class="n">param</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="o">*</span> <span class="n">DEGREE2RAD</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">z</span> <span class="o">+=</span> <span class="n">dz</span><span class="p">;</span>
<span class="n">pol</span> <span class="o">+=</span> <span class="n">dPol</span><span class="p">;</span>
<span class="c1">// change in polarization is very small hence start termination counting</span>
<span class="k">if</span> <span class="p">(</span><span class="n">fabs</span><span class="p">(</span><span class="n">dPol</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">1.0e-9</span><span class="p">)</span> <span class="p">{</span>
<span class="n">terminate</span><span class="o">++</span><span class="p">;</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="n">terminate</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">terminate</span> <span class="o">&gt;</span> <span class="mi">10</span><span class="p">)</span> <span class="c1">// polarization died out hence one can stop</span>
<span class="n">done</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
<span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">done</span><span class="p">);</span>
<span class="k">return</span> <span class="n">pol</span><span class="o">*</span><span class="n">dz</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="technical-description-of-the-musrfit-framework">
<span id="technical-musrfit"></span><span id="index-78"></span><h2>Technical Description of the musrfit framework<a class="headerlink" href="#technical-description-of-the-musrfit-framework" title="Permalink to this headline"></a></h2>
<span id="technical-musrfit"></span><span id="index-79"></span><h2>Technical Description of the musrfit framework<a class="headerlink" href="#technical-description-of-the-musrfit-framework" title="Permalink to this headline"></a></h2>
<p>A technical description of the musrfit framework can be found on its own <a class="reference external" href="http://lmu.web.psi.ch/musrfit/technical/index.html">docu</a>.</p>
</div>
</div>
@ -2505,6 +2648,7 @@ In case this cannot be ensured, the parallelization can be disabled by <em>&#821
<li><a class="reference internal" href="#id38">User Functions</a><ul>
<li><a class="reference internal" href="#user-function-without-global-user-function-object-access">User Function without global user-function-object access</a></li>
<li><a class="reference internal" href="#user-function-with-global-user-function-object-access">User Function with global user-function-object access</a></li>
<li><a class="reference internal" href="#rge-file-handler-for-low-energy-mgrsr">rge-file handler for Low-Energy μSR</a></li>
</ul>
</li>
<li><a class="reference internal" href="#technical-description-of-the-musrfit-framework">Technical Description of the musrfit framework</a></li>
@ -2552,12 +2696,12 @@ In case this cannot be ensured, the parallelization can be disabled by <em>&#821
<li class="right" >
<a href="tutorial.html" title="Tutorial for musrfit"
>previous</a> |</li>
<li><a href="index.html">musrfit 1.6.5 documentation</a> &raquo;</li>
<li><a href="index.html">musrfit 1.7.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2021, Andreas Suter.
Last updated on Feb 26, 2021.
Last updated on Apr 09, 2021.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
</div>
</body>

View File

@ -197,7 +197,7 @@ int main(int argc, char *argv[])
any2many_syntax();
else if (strstr(argv[1], "--v")) {
#ifdef HAVE_CONFIG_H
std::cout << std::endl << "any2many version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
std::cout << std::endl << "any2many version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
#else
std::cout << std::endl << "any2many git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
#endif

View File

@ -159,6 +159,11 @@ target_include_directories(
PRgeHandler BEFORE PRIVATE $<BUILD_INTERFACE:${MUSRFIT_INC}>
)
#--- add ROOT Version >= 6.24 compile options if needed -----------------------
if (ROOT_GRTEQ_24)
target_compile_options(PMusr BEFORE PRIVATE "-DROOT_GRTEQ_24")
endif(ROOT_GRTEQ_24)
#--- add OpenMP compile options if needed -------------------------------------
if (OpenMP_FOUND)
target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS})

View File

@ -1840,7 +1840,11 @@ Bool_t PFitter::ExecutePrintLevel(UInt_t lineNo)
return false;
}
#ifdef ROOT_GRTEQ_24
ROOT::Minuit2::MnPrint::SetGlobalLevel(fPrintLevel);
#else
ROOT::Minuit2::MnPrint::SetLevel(fPrintLevel);
#endif
// clean up
if (tokens) {

View File

@ -6668,13 +6668,18 @@ void PMsrHandler::MakeDetectorGroupingString(TString str, PIntVector &group, TSt
str = "";
}
if (group.size()==0)
return;
UInt_t i=0, j=0;
do {
j = i;
while (group[j]+1 == group[j+1]) {
j++;
if (j == group.size()-1)
break;
if (j+1 < group.size()) {
while (group[j]+1 == group[j+1]) {
j++;
if (j == group.size()-1)
break;
}
}
if (j >= i+2) {

View File

@ -776,7 +776,7 @@ int main(int argc, char *argv[])
return 0;
} else if (!strcmp(argv[i], "--version") || !strcmp(argv[i], "-v")) {
#ifdef HAVE_CONFIG_H
std::cout << std::endl << "dump_header version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
std::cout << std::endl << "dump_header version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
#else
std::cout << std::endl << "dump_header git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
#endif

View File

@ -29,3 +29,7 @@ if (nexus)
add_subdirectory(nexus)
endif (nexus)
if (DummyUserFcn)
add_subdirectory(DummyUserFcn)
endif (DummyUserFcn)

View File

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

99
src/external/DummyUserFcn/README vendored Normal file
View File

@ -0,0 +1,99 @@
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Simple Example for a User Function *with* a Global Part
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
This is a full implementation of a user function with a global part.
For a general intro to user function, please check the manual under
http://lmu.web.psi.ch/musrfit/user/html/user-manual.html#id38
The implemented user function is
exp(-lambda*t)
with lambda, being the only parameter.
Short description of the PDummyUserFcn and PDummyUserFcnGlobal classes.
PDummyUserFcn:
-------------
This class derives from the PUserFcnBase which is necessary to make this
user function available to musrfit.
The three functions:
virtual Bool_t NeedGlobalPart() const { return true; }
virtual void SetGlobalPart(std::vector<void*> &globalPart, UInt_t idx);
virtual Bool_t GlobalPartIsValid() const;
are used to bind the global part of the user function.
The method
virtual Double_t operator()(Double_t t, const std::vector<Double_t> &param) const;
is called by musrfit when evaluate the function.
The private variables:
Bool_t fValid{true};
Bool_t fInvokedGlobal{false};
Int_t fIdxGlobal;
PDummyUserFcnGlobal *fDummyUserFcnGlobal{nullptr};
have the following purpose:
fValid is a boolean variable holding the state of the user function.
If true, it means that the user function is useable. In case
something would go wrong during the initialization stage fValid
is set to false, and no calculation will take place!
fInvokedGlobal is a boolean variable which is set to true is the global
part of the user function is properly invoked.
fIdxGlobal holds the index of the global user function part.
PDummyUserFcnGlobal:
-------------------
This class holds the gloabl user function part, which handles the actual
calculation of the user function.
CalculatePol(const std::vector<Double_t> &param) const; -> carries out the
necessary calculations of this user function. This is ONLY carried
out if the parameter set has changed!
GetPolValue(const Double_t t) const; -> This is used in the operator() of
the user function to get the value of the user function (here a
value of a polarization function exp()).
mutable std::vector<Double_t> fPreviousParam; -> holds the previous
parmeter set in order to check if a parameter set has changed.
mutable std::vector<Double_t> fPol; -> lookup table for the polarization
function for the current parameter set.
How to build:
------------
When configure musrfit, there is a switch DummyUserFcn available which
needs to be enabled (default: OFF), e.g.
cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -Dnexus=1 -DDummyUserFcn=1
Files:
-----
CMakeLists.txt <- this File is needed to allow to build an install
this dummy example with the cmake build system.
inc/PDummyUserFcn.h <- header file definig the needed classes for
the user function and its globale part.
inc/PDummyUserFcnLinkDef.h <- Needed as a glue to generate the necessary
root dictionaries.
src/CMakeLists.txt <- needed for the cmake build/install process.
src/PDummyUserFcn.cpp <- source code which implements all the necessary
parts of the user function.
src/PDummyUserFcn.pc.in <- cmake input file to generate the propoer
pkg-config file for the library

View File

@ -0,0 +1,81 @@
/***************************************************************************
PDummyUserFcn.h
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
***************************************************************************/
/***************************************************************************
* Copyright (C) 2013-2021 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef _PDUMMYUSERFNC_H_
#define _PDUMMYUSERFNC_H_
#include <vector>
#include "PUserFcnBase.h"
class PDummyUserFcnGlobal
{
public:
PDummyUserFcnGlobal();
virtual ~PDummyUserFcnGlobal();
Bool_t IsValid() { return fValid; }
virtual void CalculatePol(const std::vector<Double_t> &param) const;
virtual Double_t GetPolValue(const Double_t t) const;
private:
Bool_t fValid{true};
mutable std::vector<Double_t> fPreviousParam;
mutable Double_t fTimeStep{1.0e-3}; // time in (us), time step 1 (ns) here
mutable std::vector<Double_t> fPol;
ClassDef(PDummyUserFcnGlobal, 1)
};
class PDummyUserFcn : public PUserFcnBase
{
public:
PDummyUserFcn() {}
virtual ~PDummyUserFcn();
virtual Bool_t NeedGlobalPart() const { return true; }
virtual void SetGlobalPart(std::vector<void*> &globalPart, UInt_t idx);
virtual Bool_t GlobalPartIsValid() const;
virtual Double_t operator()(Double_t t, const std::vector<Double_t> &param) const;
private:
Bool_t fValid{true};
Bool_t fInvokedGlobal{false};
Int_t fIdxGlobal;
PDummyUserFcnGlobal *fDummyUserFcnGlobal{nullptr};
// definition of the class for the ROOT dictionary
ClassDef(PDummyUserFcn, 1)
};
#endif // _PDUMMYUSERFNC_H_

View File

@ -0,0 +1,39 @@
/***************************************************************************
PDummyUserFcnLinkDef.h
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
***************************************************************************/
/***************************************************************************
* Copyright (C) 2013-2021 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class PDummyUserFcnGlobal+;
#pragma link C++ class PDummyUserFcn+;
#endif

View File

@ -0,0 +1,78 @@
# - DummyUserFcn library --------------------------------------------------------
#--- generate necessary dictionaries ------------------------------------------
set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include)
set(DUMMY_USER_FUNC_INC ${CMAKE_CURRENT_SOURCE_DIR}/../inc)
# ROOT requires that the dictonary header files are found at configuration time.
# Hence, target_include_directories cannot be used here because, targets are
# setup only afterwards.
include_directories(${DUMMY_USER_FUNC_INC})
root_generate_dictionary(
PDummyUserFcnDict
PDummyUserFcn.h
OPTIONS
-I${FFTW3_INCLUDE_DIR}
-I${MUSRFIT_INC}
-I${DUMMY_USER_FUNC_INC}
-inlineInputHeader
LINKDEF ${DUMMY_USER_FUNC_INC}/PDummyUserFcnLinkDef.h
MODULE PDummyUserFcn
)
#--- create pkg-config info ---------------------------------------------------
set(prefix "${CMAKE_INSTALL_PREFIX}")
set(exec_prefix "\$\{prefix\}")
set(libdir "\$\{exec_prefix\}/lib")
set(includedir "\$\{prefix\}/include")
set(P_DUMMY_USER_FUNC_VERSION "1.0.0")
set(P_DUMMY_USER_FUNC_LIBRARY_NAME "PDummyUserFcn")
configure_file("PDummyUserFcn.pc.in" "PDummyUserFcn.pc" @ONLY)
#--- lib creation -------------------------------------------------------------
add_library(PDummyUserFcn SHARED
PDummyUserFcn.cpp
PDummyUserFcnDict.cxx
)
#--- set target properties, e.g. version --------------------------------------
set_target_properties(PDummyUserFcn
PROPERTIES
VERSION ${P_DUMMY_USER_FUNC_VERSION}
)
#--- make sure that the include directory is found ----------------------------
target_include_directories(
PDummyUserFcn BEFORE PRIVATE
$<BUILD_INTERFACE:${FFTW3_INCLUDE_DIR}>
$<BUILD_INTERFACE:${MUSRFIT_INC}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../inc>
)
#--- add library dependencies -------------------------------------------------
target_link_libraries(PDummyUserFcn ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} PUserFcnBase)
#--- install PDummyUserFcn solib -------------------------------------------------
install(TARGETS PDummyUserFcn DESTINATION lib)
#--- install root pcm's and rootmaps ------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libPDummyUserFcn_rdict.pcm
${CMAKE_CURRENT_BINARY_DIR}/libPDummyUserFcn.rootmap
DESTINATION lib
)
#--- install PDummyUserFcn header ------------------------------------------------
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/../inc/PDummyUserFcn.h
DESTINATION
include
)
#--- install pkg-config info --------------------------------------------------
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/PDummyUserFcn.pc
DESTINATION lib/pkgconfig
)

View File

@ -0,0 +1,227 @@
/***************************************************************************
PDummyUserFcn.cpp
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
***************************************************************************/
/***************************************************************************
* Copyright (C) 2009-2021 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include <cassert>
#include <cmath>
#include <iostream>
#include <TMath.h>
#include "PDummyUserFcn.h"
ClassImp(PDummyUserFcnGlobal)
//--------------------------------------------------------------------------
// Constructor
//--------------------------------------------------------------------------
/**
* <p>Here would go all the stuff which will be needed by the global part.
* For instance specific information which come from a startup XML file.
* This could be case if muon-stopping information is needed for the
* calculation, or any other user function specific stuff which is not
* part of the parameters which will be propagated from the msr-file.
*/
PDummyUserFcnGlobal::PDummyUserFcnGlobal()
{
// nothing needed here for the dummy
}
//--------------------------------------------------------------------------
// Destructor
//--------------------------------------------------------------------------
/**
*
*/
PDummyUserFcnGlobal::~PDummyUserFcnGlobal()
{
fPreviousParam.clear();
fPol.clear();
}
//--------------------------------------------------------------------------
// CalculatePol (public)
//--------------------------------------------------------------------------
/**
* <p>Calculates the polarization function for the dummy user function.
* For the Dummy this is just an exp(-lambda t), where lambda is comming
* from the param.
*
* \param param the parameter for this user function
*/
void PDummyUserFcnGlobal::CalculatePol(const std::vector<Double_t> &param) const
{
// param: [0] lambda
// check that param is new and hence a calculation is needed
Bool_t newParams = false;
if (fPreviousParam.size() == 0) {
for (UInt_t i=0; i<param.size(); i++)
fPreviousParam.push_back(param[i]);
newParams = true;
} else {
assert(param.size() == fPreviousParam.size());
for (UInt_t i=0; i<param.size(); i++) {
if (param[i] != fPreviousParam[i]) {
newParams = true;
break;
}
}
}
if (!newParams)
return;
// keep parameters
for (UInt_t i=0; i<param.size(); i++)
fPreviousParam[i] = param[i];
// calculate the "polarization" in the time interval t = [0, 20] us
Double_t dt = fTimeStep, t = 0.0;
Int_t noOfPoints = 20.0 / dt;
fPol.resize(noOfPoints); // this makes sure that the polarization vector is long enough
for (Int_t i=0; i<noOfPoints; i++) {
t = i*dt;
fPol[i] = exp(-param[0] * i * dt);
}
}
//--------------------------------------------------------------------------
// GetMagneticField
//--------------------------------------------------------------------------
/**
*
*/
Double_t PDummyUserFcnGlobal::GetPolValue(const Double_t t) const
{
Double_t result = -1.0;
if (t < 0)
return 1.0;
if (t >= 20.0)
return 0.0;
Int_t idx = (Int_t)(t/fTimeStep);
if ((idx >=0) && (idx < fPol.size()))
result = fPol[idx];
return result;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ClassImp(PDummyUserFcn)
//--------------------------------------------------------------------------
// Destructor
//--------------------------------------------------------------------------
/**
*
*/
PDummyUserFcn::~PDummyUserFcn()
{
if ((fDummyUserFcnGlobal != nullptr) && fInvokedGlobal) {
delete fDummyUserFcnGlobal;
fDummyUserFcnGlobal = nullptr;
}
}
//--------------------------------------------------------------------------
// SetGlobalPart (public)
//--------------------------------------------------------------------------
/**
* <p>
*
* <b>return:</b>
*
* \param globalPart
* \param idx
*/
void PDummyUserFcn::SetGlobalPart(std::vector<void*> &globalPart, UInt_t idx)
{
fIdxGlobal = static_cast<Int_t>(idx);
if ((Int_t)globalPart.size() <= fIdxGlobal) {
fDummyUserFcnGlobal = new PDummyUserFcnGlobal();
if (fDummyUserFcnGlobal == nullptr) {
fValid = false;
std::cerr << std::endl << ">> PDummyUserFcn::SetGlobalPart(): **ERROR** Couldn't invoke global user function object, sorry ..." << std::endl;
} else if (!fDummyUserFcnGlobal->IsValid()) {
fValid = false;
std::cerr << std::endl << ">> PDummyUserFcn::SetGlobalPart(): **ERROR** initialization of global user function object failed, sorry ..." << std::endl;
} else {
fValid = true;
fInvokedGlobal = true;
globalPart.resize(fIdxGlobal+1);
globalPart[fIdxGlobal] = dynamic_cast<PDummyUserFcnGlobal*>(fDummyUserFcnGlobal);
}
} else {
fValid = true;
fDummyUserFcnGlobal = (PDummyUserFcnGlobal*)globalPart[fIdxGlobal];
}
}
//--------------------------------------------------------------------------
// GlobalPartIsValid (public)
//--------------------------------------------------------------------------
/**
* <p>
*
* <b>return:</b>
*/
Bool_t PDummyUserFcn::GlobalPartIsValid() const
{
return (fValid && fDummyUserFcnGlobal->IsValid());
}
//--------------------------------------------------------------------------
// operator()
//--------------------------------------------------------------------------
/**
*
*/
Double_t PDummyUserFcn::operator()(Double_t t, const std::vector<Double_t> &param) const
{
// param: [0] lambda
assert(param.size() == 1);
// for negative time return polarization == 1
if (t <= 0.0)
return 1.0;
// calculate field if parameter have changed
fDummyUserFcnGlobal->CalculatePol(param);
// return the lookup table value
return fDummyUserFcnGlobal->GetPolValue(t);
}

View File

@ -0,0 +1,10 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: PDummyUserFcn
Description: C++ shared library providing the spin valve fitter class
Version: @P_DUMMY_USER_FUNC_VERSION@
Libs: -L${libdir} -l@P_DUMMY_USER_FUNC_LIBRARY_NAME@
Cflags: -I${includedir}

View File

@ -512,7 +512,7 @@ int main(int argc, char *argv[])
return 0;
} else if (!strcmp(argv[1], "--version")) {
#ifdef HAVE_CONFIG_H
std::cout << std::endl << "msr2data version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
std::cout << std::endl << "msr2data version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
#else
std::cout << std::endl << "msr2data git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
#endif

View File

@ -297,7 +297,7 @@ Int_t musrFT_parse_options(Int_t argc, Char_t *argv[], musrFT_startup_param &sta
tstr = argv[i];
if (tstr.BeginsWith("--version")) {
#ifdef HAVE_CONFIG_H
std::cout << std::endl << "musrFT version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
std::cout << std::endl << "musrFT version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
#else
std::cout << std::endl << "musrFT git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
#endif

View File

@ -1,9 +1,5 @@
#--- musredit for Qt > 5.0 ----------------------------------------------------
#--- check if Qt5WebEngine or Qt5WebKit is present ----------------------------
#find_package(Qt5WebEngine QUIET)
#find_package(Qt5WebKit QUIET)
set(qt_libs Qt5::Core Qt5::Widgets Qt5::Network Qt5::Xml Qt5::Svg Qt5::PrintSupport)
set(musredit_src
@ -110,35 +106,13 @@ else (APPLE)
)
endif (APPLE)
# set necessary tags depending if QtWebEngine, QtWebKit,
# or none of both are given
if (Qt5WebKit_FOUND)
target_compile_options(musredit
BEFORE PRIVATE
-DHAVE_QT_WEB_KIT
)
endif (Qt5WebKit_FOUND)
if (Qt5WebEngine_FOUND)
target_compile_options(musredit
BEFORE PRIVATE
-DHAVE_QT_WEB_ENGINE
)
endif (Qt5WebEngine_FOUND)
if (Qt5NoWeb)
target_compile_options(musredit
BEFORE PRIVATE
-DHAVE_QT_NO_WEB
)
endif (Qt5NoWeb)
target_include_directories(musredit
BEFORE PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../../..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../include>
)

View File

@ -27,6 +27,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "config.h"
#include "git-revision.h"
#include "PMusrEditAbout.h"
@ -40,6 +41,8 @@ PMusrEditAbout::PMusrEditAbout(QWidget *parent) : QDialog(parent)
fGitBranch_label->setText(QString("git-branch: %1").arg(GIT_BRANCH));
fGitRev_label->setText(QString("git-rev: %1").arg(GIT_CURRENT_SHA1));
fMusrfitVersion_label->setText(QString("musrfit-version: %1").arg(PACKAGE_VERSION));
fRootVersion_label->setText(QString("ROOT-version: %1").arg(ROOT_VERSION_USED));
setModal(true);
}

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>395</width>
<height>225</height>
<height>331</height>
</rect>
</property>
<property name="windowTitle">
@ -17,13 +17,13 @@
<iconset>
<normaloff>:/images/musrfit.xpm</normaloff>:/images/musrfit.xpm</iconset>
</property>
<widget class="QWidget" name="layoutWidget">
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>13</x>
<y>13</y>
<x>14</x>
<y>14</y>
<width>371</width>
<height>201</height>
<height>311</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@ -44,6 +44,26 @@ p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:24pt; font-weight:400; font-style:italic;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;musredit ...&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fMusrfitVersion_label">
<property name="font">
<font>
<weight>75</weight>
<italic>true</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>musrfit-version:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
@ -80,6 +100,23 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fRootVersion_label">
<property name="font">
<font>
<weight>75</weight>
<italic>true</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>ROOT-version:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fDetails_label">
<property name="text">

View File

@ -111,6 +111,7 @@ target_include_directories(musredit
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../../..>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../../include>
)

View File

@ -27,6 +27,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "config.h"
#include "git-revision.h"
#include "PMusrEditAbout.h"
@ -40,6 +41,8 @@ PMusrEditAbout::PMusrEditAbout(QWidget *parent) : QDialog(parent)
fGitBranch_label->setText(QString("git-branch: %1").arg(GIT_BRANCH));
fGitRev_label->setText(QString("git-rev: %1").arg(GIT_CURRENT_SHA1));
fMusrfitVersion_label->setText(QString("musrfit-version: %1").arg(PACKAGE_VERSION));
fRootVersion_label->setText(QString("ROOT-version: %1").arg(ROOT_VERSION_USED));
setModal(true);
}

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>395</width>
<height>225</height>
<height>331</height>
</rect>
</property>
<property name="windowTitle">
@ -17,13 +17,13 @@
<iconset>
<normaloff>:/images/musrfit.xpm</normaloff>:/images/musrfit.xpm</iconset>
</property>
<widget class="QWidget" name="layoutWidget">
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>13</x>
<y>13</y>
<x>14</x>
<y>14</y>
<width>371</width>
<height>201</height>
<height>311</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@ -44,6 +44,26 @@ p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:24pt; font-weight:400; font-style:italic;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;musredit ...&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fMusrfitVersion_label">
<property name="font">
<font>
<weight>75</weight>
<italic>true</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>musrfit-version:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
@ -80,6 +100,23 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fRootVersion_label">
<property name="font">
<font>
<weight>75</weight>
<italic>true</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>ROOT-version:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fDetails_label">
<property name="text">

View File

@ -464,7 +464,7 @@ int main(int argc, char *argv[])
if (argc == 2) {
if (!strcmp(argv[1], "--version")) {
#ifdef HAVE_CONFIG_H
std::cout << std::endl << "musrfit version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
std::cout << std::endl << "musrfit version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
#else
std::cout << std::endl << "musrfit git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
#endif

View File

@ -237,7 +237,7 @@ Int_t main(Int_t argc, Char_t *argv[])
for (int i=1; i<argc; i++) {
if (!strcmp(argv[i], "--version")) {
#ifdef HAVE_CONFIG_H
std::cout << std::endl << "musrt0 version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
std::cout << std::endl << "musrt0 version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
#else
std::cout << std::endl << "musrt0 git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
#endif

View File

@ -135,7 +135,7 @@ int main(int argc, char *argv[])
}
} else if (!strcmp(argv[i], "--version")) {
#ifdef HAVE_CONFIG_H
std::cout << std::endl << "musrview version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
std::cout << std::endl << "musrview version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << ", ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
#else
std::cout << std::endl << "musrview git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
#endif