diff --git a/doc/html/.buildinfo b/doc/html/.buildinfo index d9aec41f..d4a54165 100644 --- a/doc/html/.buildinfo +++ b/doc/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 4e935cd35ad4b5e15fdb7bfc2da9495e +config: 429dcaf60d751fc64b55c07d7174ea6f tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/doc/html/_downloads/c06f924ba301a43e83dbbdfcfaf54ada/Makefile.TMyLibrary b/doc/html/_downloads/c06f924ba301a43e83dbbdfcfaf54ada/Makefile.TMyLibrary deleted file mode 100644 index 73a85c8e..00000000 --- a/doc/html/_downloads/c06f924ba301a43e83dbbdfcfaf54ada/Makefile.TMyLibrary +++ /dev/null @@ -1,60 +0,0 @@ -#--------------------------------------------------- -# get compilation flags from root-config - -ROOTCFLAGS = $(shell $(ROOTSYS)/bin/root-config --cflags) - -#--------------------------------------------------- - -OS = LINUX -CXX = g++ -CXXFLAGS = -O3 -Wall -Wno-trigraphs -fPIC -LOCALINCLUDE = . -ROOTINCLUDE = $(ROOTSYS)/include -INCLUDES = -I$(LOCALINCLUDE) -I$(ROOTINCLUDE) -LD = g++ -LDFLAGS = -SOFLAGS = -O -shared - -# the output from the root-config script: -CXXFLAGS += $(ROOTCFLAGS) -LDFLAGS += - -# some definitions: headers (used to generate *Dict* stuff), sources, objects,... -OBJS = -OBJS += TMyFunction.o TMyLibraryDict.o - -SHLIB = libTMyLibrary.so - -# make the shared lib: -# -all: $(SHLIB) - -$(SHLIB): $(OBJS) - @echo "---> Building shared library $(SHLIB) ..." - /bin/rm -f $(SHLIB) - $(LD) $(OBJS) $(SOFLAGS) -o $(SHLIB) - @echo "done" - -# clean up: remove all object file (and core files) -# semicolon needed to tell make there is no source -# for this target! -# -clean:; @rm -f $(OBJS) *Dict* core* - @echo "---> removing $(OBJS)" - -# -$(OBJS): %.o: %.cpp - $(CXX) $(INCLUDES) $(CXXFLAGS) -c $< - -# Generate the ROOT CINT dictionary - -TMyLibraryDict.cpp: TMyFunction.h TMyLibraryLinkDef.h - @echo "Generating dictionary $@..." - rootcint -f $@ -c -p -I$(ROOTINCLUDE) $^ - -install: all - @echo "Installing shared lib: libTApproximation.so" -ifeq ($(OS),LINUX) - cp -pv $(SHLIB) $(ROOTSYS)/lib - cp -pv $(LOCALINCLUDE)/*.h $(ROOTSYS)/include -endif diff --git a/doc/html/_static/alert_info_32.png b/doc/html/_static/alert_info_32.png index 05b4fe89..ea4d1baf 100644 Binary files a/doc/html/_static/alert_info_32.png and b/doc/html/_static/alert_info_32.png differ diff --git a/doc/html/_static/alert_warning_32.png b/doc/html/_static/alert_warning_32.png index f13611cd..a687c3dc 100644 Binary files a/doc/html/_static/alert_warning_32.png and b/doc/html/_static/alert_warning_32.png differ diff --git a/doc/html/_static/basic.css b/doc/html/_static/basic.css index 967e36ce..19ced105 100644 --- a/doc/html/_static/basic.css +++ b/doc/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -52,6 +52,8 @@ div.sphinxsidebar { width: 230px; margin-left: -100%; font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; } div.sphinxsidebar ul { @@ -80,13 +82,21 @@ div.sphinxsidebar input { } div.sphinxsidebar #searchbox input[type="text"] { - width: 170px; + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; } div.sphinxsidebar #searchbox input[type="submit"] { - width: 30px; + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; } + img { border: 0; max-width: 100%; @@ -124,6 +134,8 @@ ul.keywordmatches li.goodmatch a { table.contentstable { width: 90%; + margin-left: auto; + margin-right: auto; } table.contentstable p.biglink { @@ -151,9 +163,14 @@ table.indextable td { vertical-align: top; } -table.indextable dl, table.indextable dd { +table.indextable ul { margin-top: 0; margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; } table.indextable tr.pcap { @@ -185,8 +202,27 @@ div.genindex-jumpbox { padding: 0.4em; } +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + /* -- general body styles --------------------------------------------------- */ +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + a.headerlink { visibility: hidden; } @@ -197,7 +233,10 @@ h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, -dt:hover > a.headerlink { +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { visibility: visible; } @@ -209,10 +248,6 @@ div.body td { text-align: left; } -.field-list ul { - padding-left: 1em; -} - .first { margin-top: 0 !important; } @@ -314,6 +349,18 @@ table.docutils { border-collapse: collapse; } +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + table.docutils td, table.docutils th { padding: 1px 8px 1px 5px; border-top: 0; @@ -322,10 +369,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.field-list td, table.field-list th { - border: 0 !important; -} - table.footnote td, table.footnote th { border: 0 !important; } @@ -344,6 +387,46 @@ table.citation td { border-bottom: none; } +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + /* -- other body styles ----------------------------------------------------- */ ol.arabic { @@ -384,28 +467,27 @@ dd { margin-left: 30px; } -dt:target, .highlighted { +dt:target, span.highlighted { background-color: #fbe54e; } +rect.highlighted { + fill: #fbe54e; +} + dl.glossary dt { font-weight: bold; font-size: 1.1em; } -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - .optional { font-size: 1.3em; } +.sig-paren { + font-size: larger; +} + .versionmodified { font-style: italic; } @@ -456,6 +538,13 @@ pre { overflow-y: hidden; /* fixes display issues on Chrome browsers */ } +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + td.linenos pre { padding: 5px 0px; border: 0; @@ -471,22 +560,51 @@ table.highlighttable td { padding: 0 0.5em 0 0.5em; } -tt.descname { +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } -tt.descclassname { +code.descclassname { background-color: transparent; } -tt.xref, a tt { +code.xref, a code { background-color: transparent; font-weight: bold; } -h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { background-color: transparent; } @@ -518,6 +636,16 @@ span.eqno { float: right; } +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + /* -- printout stylesheet --------------------------------------------------- */ @media print { diff --git a/doc/html/_static/bg-page.png b/doc/html/_static/bg-page.png index c6f3bc47..fe0a6dc8 100644 Binary files a/doc/html/_static/bg-page.png and b/doc/html/_static/bg-page.png differ diff --git a/doc/html/_static/bullet_orange.png b/doc/html/_static/bullet_orange.png index ad5d02f3..1cb8097c 100644 Binary files a/doc/html/_static/bullet_orange.png and b/doc/html/_static/bullet_orange.png differ diff --git a/doc/html/_static/comment-bright.png b/doc/html/_static/comment-bright.png index 551517b8..15e27edb 100644 Binary files a/doc/html/_static/comment-bright.png and b/doc/html/_static/comment-bright.png differ diff --git a/doc/html/_static/comment-close.png b/doc/html/_static/comment-close.png index 09b54be4..4d91bcf5 100644 Binary files a/doc/html/_static/comment-close.png and b/doc/html/_static/comment-close.png differ diff --git a/doc/html/_static/comment.png b/doc/html/_static/comment.png index 92feb52b..dfbc0cbd 100644 Binary files a/doc/html/_static/comment.png and b/doc/html/_static/comment.png differ diff --git a/doc/html/_static/css/badge_only.css b/doc/html/_static/css/badge_only.css new file mode 100644 index 00000000..323730ae --- /dev/null +++ b/doc/html/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} diff --git a/doc/html/_static/css/theme.css b/doc/html/_static/css/theme.css new file mode 100644 index 00000000..7fd30269 --- /dev/null +++ b/doc/html/_static/css/theme.css @@ -0,0 +1,9 @@ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#6f6f6f;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#b3b3b3}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-size:12px;line-height:normal}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:400;src:local("Inconsolata"),local("Inconsolata-Regular"),url(../fonts/Inconsolata-Regular.ttf) format("truetype")}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:700;src:local("Inconsolata Bold"),local("Inconsolata-Bold"),url(../fonts/Inconsolata-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(../fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(../fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:italic;font-weight:400;src:local("Lato Italic"),local("Lato-Italic"),url(../fonts/Lato-Italic.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:italic;font-weight:700;src:local("Lato Bold Italic"),local("Lato-BoldItalic"),url(../fonts/Lato-BoldItalic.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:local("Roboto Slab Regular"),local("RobotoSlab-Regular"),url(../fonts/RobotoSlab-Regular.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:local("Roboto Slab Bold"),local("RobotoSlab-Bold"),url(../fonts/RobotoSlab-Bold.ttf) format("truetype")} + +.wy-nav-content { + max-width: none; +} + diff --git a/doc/html/_static/doctools.js b/doc/html/_static/doctools.js index c5455c90..d8928926 100644 --- a/doc/html/_static/doctools.js +++ b/doc/html/_static/doctools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for all documentation. * - * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -45,7 +45,7 @@ jQuery.urlencode = encodeURIComponent; * it will always return arrays of strings for the value parts. */ jQuery.getQueryParameters = function(s) { - if (typeof s == 'undefined') + if (typeof s === 'undefined') s = document.location.search; var parts = s.substr(s.indexOf('?') + 1).split('&'); var result = {}; @@ -66,31 +66,81 @@ jQuery.getQueryParameters = function(s) { * span elements with the given class name. */ jQuery.fn.highlightText = function(text, className) { - function highlight(node) { - if (node.nodeType == 3) { + function highlight(node, addItems) { + if (node.nodeType === 3) { var val = node.nodeValue; var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { - var span = document.createElement("span"); - span.className = className; + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } span.appendChild(document.createTextNode(val.substr(pos, text.length))); node.parentNode.insertBefore(span, node.parentNode.insertBefore( document.createTextNode(val.substr(pos + text.length)), node.nextSibling)); node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } } } else if (!jQuery(node).is("button, select, textarea")) { jQuery.each(node.childNodes, function() { - highlight(this); + highlight(this, addItems); }); } } - return this.each(function() { - highlight(this); + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; }; +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + /** * Small JavaScript module for the documentation. */ @@ -100,27 +150,28 @@ var Documentation = { this.fixFirefoxAnchorBug(); this.highlightSearchWords(); this.initIndexTable(); + }, /** * i18n support */ TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, LOCALE : 'unknown', // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) gettext : function(string) { var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated == 'undefined') + if (typeof translated === 'undefined') return string; - return (typeof translated == 'string') ? translated : translated[0]; + return (typeof translated === 'string') ? translated : translated[0]; }, ngettext : function(singular, plural, n) { var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated == 'undefined') + if (typeof translated === 'undefined') return (n == 1) ? singular : plural; return translated[Documentation.PLURALEXPR(n)]; }, @@ -152,6 +203,7 @@ var Documentation = { /** * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 */ fixFirefoxAnchorBug : function() { if (document.location.hash && $.browser.mozilla) @@ -190,7 +242,7 @@ var Documentation = { var src = $(this).attr('src'); var idnum = $(this).attr('id').substr(7); $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) == 'minus.png') + if (src.substr(-9) === 'minus.png') $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); else $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); @@ -222,11 +274,34 @@ var Documentation = { var path = document.location.pathname; var parts = path.split(/\//); $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this == '..') + if (this === '..') parts.pop(); }); var url = parts.join('/'); return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); } }; @@ -235,4 +310,4 @@ _ = Documentation.gettext; $(document).ready(function() { Documentation.init(); -}); +}); \ No newline at end of file diff --git a/doc/html/_static/documentation_options.js b/doc/html/_static/documentation_options.js index bcac069a..3086870d 100644 --- a/doc/html/_static/documentation_options.js +++ b/doc/html/_static/documentation_options.js @@ -1,12 +1,9 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '1.7.6', + VERSION: '1.8.2', LANGUAGE: 'None', COLLAPSE_INDEX: false, - BUILDER: 'html', FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false + SOURCELINK_SUFFIX: '.txt' }; \ No newline at end of file diff --git a/doc/html/_static/down-pressed.png b/doc/html/_static/down-pressed.png index 6f7ad782..5756c8ca 100644 Binary files a/doc/html/_static/down-pressed.png and b/doc/html/_static/down-pressed.png differ diff --git a/doc/html/_static/down.png b/doc/html/_static/down.png index 3003a887..1b3bdad2 100644 Binary files a/doc/html/_static/down.png and b/doc/html/_static/down.png differ diff --git a/doc/html/_static/file.png b/doc/html/_static/file.png index d18082e3..a858a410 100644 Binary files a/doc/html/_static/file.png and b/doc/html/_static/file.png differ diff --git a/doc/html/_static/fonts/Inconsolata-Bold.ttf b/doc/html/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 00000000..9addc892 Binary files /dev/null and b/doc/html/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/doc/html/_static/fonts/Inconsolata-Regular.ttf b/doc/html/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 00000000..592ccd20 Binary files /dev/null and b/doc/html/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/doc/html/_static/fonts/Lato-Bold.ttf b/doc/html/_static/fonts/Lato-Bold.ttf new file mode 100644 index 00000000..ef5ae3b4 Binary files /dev/null and b/doc/html/_static/fonts/Lato-Bold.ttf differ diff --git a/doc/html/_static/fonts/Lato-BoldItalic.ttf b/doc/html/_static/fonts/Lato-BoldItalic.ttf new file mode 100644 index 00000000..664cd02c Binary files /dev/null and b/doc/html/_static/fonts/Lato-BoldItalic.ttf differ diff --git a/doc/html/_static/fonts/Lato-Italic.ttf b/doc/html/_static/fonts/Lato-Italic.ttf new file mode 100644 index 00000000..b23256ff Binary files /dev/null and b/doc/html/_static/fonts/Lato-Italic.ttf differ diff --git a/doc/html/_static/fonts/Lato-Regular.ttf b/doc/html/_static/fonts/Lato-Regular.ttf new file mode 100644 index 00000000..adbfc467 Binary files /dev/null and b/doc/html/_static/fonts/Lato-Regular.ttf differ diff --git a/doc/html/_static/fonts/RobotoSlab-Bold.ttf b/doc/html/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/doc/html/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/doc/html/_static/fonts/RobotoSlab-Regular.ttf b/doc/html/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/doc/html/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/doc/html/_static/fonts/fontawesome-webfont.eot b/doc/html/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/doc/html/_static/fonts/fontawesome-webfont.eot differ diff --git a/doc/html/_static/fonts/fontawesome-webfont.svg b/doc/html/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/doc/html/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/html/_static/fonts/fontawesome-webfont.ttf b/doc/html/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/doc/html/_static/fonts/fontawesome-webfont.ttf differ diff --git a/doc/html/_static/fonts/fontawesome-webfont.woff b/doc/html/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/doc/html/_static/fonts/fontawesome-webfont.woff differ diff --git a/doc/html/_static/fonts/fontawesome-webfont.woff2 b/doc/html/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/doc/html/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/doc/html/_static/haiku.css b/doc/html/_static/haiku.css index 25f6e590..75af2a5c 100644 --- a/doc/html/_static/haiku.css +++ b/doc/html/_static/haiku.css @@ -16,7 +16,7 @@ * Braden Ewing * Humdinger * - * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -307,7 +307,7 @@ td { vertical-align: top; } -tt { +code { background-color: #e2e2e2; font-size: 1.0em; font-family: monospace; @@ -368,4 +368,9 @@ div.viewcode-block:target { border-bottom: 1px solid #ac9; margin: -1px -10px; padding: 0 12px; +} + +/* math display */ +div.math p { + text-align: center; } \ No newline at end of file diff --git a/doc/html/_static/jquery-3.5.1.js b/doc/html/_static/jquery-3.2.1.js similarity index 81% rename from doc/html/_static/jquery-3.5.1.js rename to doc/html/_static/jquery-3.2.1.js index 50937333..d2d8ca47 100644 --- a/doc/html/_static/jquery-3.5.1.js +++ b/doc/html/_static/jquery-3.2.1.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v3.5.1 + * jQuery JavaScript Library v3.2.1 * https://jquery.com/ * * Includes Sizzle.js @@ -9,7 +9,7 @@ * Released under the MIT license * https://jquery.org/license * - * Date: 2020-05-04T22:49Z + * Date: 2017-03-20T18:59Z */ ( function( global, factory ) { @@ -47,16 +47,13 @@ var arr = []; +var document = window.document; + var getProto = Object.getPrototypeOf; var slice = arr.slice; -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - +var concat = arr.concat; var push = arr.push; @@ -74,72 +71,16 @@ var ObjectFunctionString = fnToString.call( Object ); var support = {}; -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { + function DOMEval( code, doc ) { doc = doc || document; - var i, val, - script = doc.createElement( "script" ); + var script = doc.createElement( "script" ); script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } doc.head.appendChild( script ).parentNode.removeChild( script ); } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} /* global Symbol */ // Defining this global in .eslintrc.json would create a danger of using the global // unguarded in another place, it seems safer to define global only for this module @@ -147,7 +88,7 @@ function toType( obj ) { var - version = "3.5.1", + version = "3.2.1", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -155,6 +96,19 @@ var // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); }; jQuery.fn = jQuery.prototype = { @@ -221,18 +175,6 @@ jQuery.fn = jQuery.prototype = { return this.eq( -1 ); }, - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); @@ -267,7 +209,7 @@ jQuery.extend = jQuery.fn.extend = function() { } // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { target = {}; } @@ -284,28 +226,25 @@ jQuery.extend = jQuery.fn.extend = function() { // Extend the base object for ( name in options ) { + src = target[ name ]; copy = options[ name ]; - // Prevent Object.prototype pollution // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { + if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject( copy ) || ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + } else { - clone = src; + clone = src && jQuery.isPlainObject( src ) ? src : {}; } - copyIsArray = false; // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); @@ -336,6 +275,28 @@ jQuery.extend( { noop: function() {}, + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + isPlainObject: function( obj ) { var proto, Ctor; @@ -358,6 +319,9 @@ jQuery.extend( { }, isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 var name; for ( name in obj ) { @@ -366,10 +330,27 @@ jQuery.extend( { return true; }, - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, each: function( obj, callback ) { @@ -393,6 +374,13 @@ jQuery.extend( { return obj; }, + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; @@ -479,12 +467,43 @@ jQuery.extend( { } // Flatten any nested arrays - return flat( ret ); + return concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support @@ -496,7 +515,7 @@ if ( typeof Symbol === "function" ) { // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { +function( i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); @@ -507,9 +526,9 @@ function isArrayLike( obj ) { // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); + type = jQuery.type( obj ); - if ( isFunction( obj ) || isWindow( obj ) ) { + if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } @@ -518,16 +537,17 @@ function isArrayLike( obj ) { } var Sizzle = /*! - * Sizzle CSS Selector Engine v2.3.5 + * Sizzle CSS Selector Engine v2.3.3 * https://sizzlejs.com/ * - * Copyright JS Foundation and other contributors + * Copyright jQuery Foundation and other contributors * Released under the MIT license - * https://js.foundation/ + * http://jquery.org/license * - * Date: 2020-03-14 + * Date: 2016-08-08 */ -( function( window ) { +(function( window ) { + var i, support, Expr, @@ -558,7 +578,6 @@ var i, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), - nonnativeSelectorCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; @@ -567,71 +586,61 @@ var i, }, // Instance methods - hasOwn = ( {} ).hasOwnProperty, + hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, - pushNative = arr.push, + push_native = arr.push, push = arr.push, slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native // https://jsperf.com/thor-indexof-vs-for/5 indexOf = function( list, elem ) { var i = 0, len = list.length; for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { + if ( list[i] === elem ) { return i; } } return -1; }, - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), @@ -642,19 +651,16 @@ var i, "TAG": new RegExp( "^(" + identifier + "|[*])" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, - rhtml = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, @@ -667,21 +673,18 @@ var i, // CSS escapes // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : high < 0 ? + // BMP codepoint String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, @@ -697,8 +700,7 @@ var i, } // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; } // Other potentially-special ASCII characters get backslash-escaped @@ -713,9 +715,9 @@ var i, setDocument(); }, - inDisabledFieldset = addCombinator( + disabledAncestor = addCombinator( function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + return elem.disabled === true && ("form" in elem || "label" in elem); }, { dir: "parentNode", next: "legend" } ); @@ -723,20 +725,18 @@ var i, // Optimize for push.apply( _, NodeList ) try { push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), + (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); - // Support: Android<4.0 // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { - pushNative.apply( target, slice.call( els ) ); + push_native.apply( target, slice.call(els) ); } : // Support: IE<9 @@ -744,9 +744,8 @@ try { function( target, els ) { var j = target.length, i = 0; - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} + while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; @@ -770,21 +769,24 @@ function Sizzle( selector, context, results, seed ) { // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { - setDocument( context ); + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { // ID selector - if ( ( m = match[ 1 ] ) ) { + if ( (m = match[1]) ) { // Document context if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { + if ( (elem = context.getElementById( m )) ) { // Support: IE, Opera, Webkit // TODO: identify versions @@ -803,7 +805,7 @@ function Sizzle( selector, context, results, seed ) { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && + if ( newContext && (elem = newContext.getElementById( m )) && contains( context, elem ) && elem.id === m ) { @@ -813,12 +815,12 @@ function Sizzle( selector, context, results, seed ) { } // Type selector - } else if ( match[ 2 ] ) { + } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); @@ -828,62 +830,50 @@ function Sizzle( selector, context, results, seed ) { // Take advantage of querySelectorAll if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - // Support: IE 8 only + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + } else if ( context.nodeName.toLowerCase() !== "object" ) { - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); + groups[i] = "#" + nid + " " + toSelector( groups[i] ); } newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; } - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } } } } @@ -904,14 +894,12 @@ function createCache() { var keys = []; function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries delete cache[ keys.shift() ]; } - return ( cache[ key + " " ] = value ); + return (cache[ key + " " ] = value); } return cache; } @@ -930,19 +918,17 @@ function markFunction( fn ) { * @param {Function} fn Passed the created element and returns a boolean result */ function assert( fn ) { - var el = document.createElement( "fieldset" ); + var el = document.createElement("fieldset"); try { return !!fn( el ); - } catch ( e ) { + } catch (e) { return false; } finally { - // Remove from its parent by default if ( el.parentNode ) { el.parentNode.removeChild( el ); } - // release memory in IE el = null; } @@ -954,11 +940,11 @@ function assert( fn ) { * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), + var arr = attrs.split("|"), i = arr.length; while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; + Expr.attrHandle[ arr[i] ] = handler; } } @@ -980,7 +966,7 @@ function siblingCheck( a, b ) { // Check if b follows a if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { + while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } @@ -1008,7 +994,7 @@ function createInputPseudo( type ) { function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; + return (name === "input" || name === "button") && elem.type === type; }; } @@ -1051,7 +1037,7 @@ function createDisabledPseudo( disabled ) { // Where there is no isDisabled, check manually /* jshint -W018 */ elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; + disabledAncestor( elem ) === disabled; } return elem.disabled === disabled; @@ -1073,21 +1059,21 @@ function createDisabledPseudo( disabled ) { * @param {Function} fn */ function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { + return markFunction(function( argument ) { argument = +argument; - return markFunction( function( seed, matches ) { + return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); } } - } ); - } ); + }); + }); } /** @@ -1108,13 +1094,10 @@ support = Sizzle.support = {}; * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** @@ -1127,11 +1110,7 @@ setDocument = Sizzle.setDocument = function( node ) { doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } @@ -1140,14 +1119,10 @@ setDocument = Sizzle.setDocument = function( node ) { docElem = document.documentElement; documentIsHTML = !isXML( document ); - // Support: IE 9 - 11+, Edge 12 - 18+ + // Support: IE 9-11, Edge // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { // Support: IE 11, Edge if ( subWindow.addEventListener ) { @@ -1159,36 +1134,25 @@ setDocument = Sizzle.setDocument = function( node ) { } } - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) - support.attributes = assert( function( el ) { + support.attributes = assert(function( el ) { el.className = "i"; - return !el.getAttribute( "className" ); - } ); + return !el.getAttribute("className"); + }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); // Support: IE<9 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); @@ -1197,38 +1161,38 @@ setDocument = Sizzle.setDocument = function( node ) { // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programmatically-set names, // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { + support.getById = assert(function( el ) { docElem.appendChild( el ).id = expando; return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); + }); // ID filter and find if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { + Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { - return elem.getAttribute( "id" ) === attrId; + return elem.getAttribute("id") === attrId; }; }; - Expr.find[ "ID" ] = function( id, context ) { + Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var elem = context.getElementById( id ); return elem ? [ elem ] : []; } }; } else { - Expr.filter[ "ID" ] = function( id ) { + Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); + elem.getAttributeNode("id"); return node && node.value === attrId; }; }; // Support: IE 6 - 7 only // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { + Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var node, i, elems, elem = context.getElementById( id ); @@ -1236,7 +1200,7 @@ setDocument = Sizzle.setDocument = function( node ) { if ( elem ) { // Verify the id attribute - node = elem.getAttributeNode( "id" ); + node = elem.getAttributeNode("id"); if ( node && node.value === id ) { return [ elem ]; } @@ -1244,8 +1208,8 @@ setDocument = Sizzle.setDocument = function( node ) { // Fall back on getElementsByName elems = context.getElementsByName( id ); i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); if ( node && node.value === id ) { return [ elem ]; } @@ -1258,7 +1222,7 @@ setDocument = Sizzle.setDocument = function( node ) { } // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? + Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); @@ -1273,13 +1237,12 @@ setDocument = Sizzle.setDocument = function( node ) { var elem, tmp = [], i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { + while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } @@ -1291,7 +1254,7 @@ setDocument = Sizzle.setDocument = function( node ) { }; // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } @@ -1312,14 +1275,10 @@ setDocument = Sizzle.setDocument = function( node ) { // See https://bugs.jquery.com/ticket/13378 rbuggyQSA = []; - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - + assert(function( el ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, @@ -1333,98 +1292,78 @@ setDocument = Sizzle.setDocument = function( node ) { // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + if ( el.querySelectorAll("[msallowcapture^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { + if ( !el.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); + rbuggyQSA.push("~="); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); } // Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibling-combinator selector` fails if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); + rbuggyQSA.push(".#.+[+~]"); } + }); - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { + assert(function( el ) { el.innerHTML = "" + ""; // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); + var input = document.createElement("input"); input.setAttribute( "type", "hidden" ); el.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { + if ( el.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + if ( el.querySelectorAll(":enabled").length !== 2 ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Support: IE9-11+ // IE's :disabled selector does not pick up the children of disabled fieldsets docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + if ( el.querySelectorAll(":disabled").length !== 2 ) { rbuggyQSA.push( ":enabled", ":disabled" ); } - // Support: Opera 10 - 11 only // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); } - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { + docElem.msMatchesSelector) )) ) { + assert(function( el ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( el, "*" ); @@ -1433,11 +1372,11 @@ setDocument = Sizzle.setDocument = function( node ) { // Gecko does not error, returns false instead matches.call( el, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); - } ); + }); } - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ @@ -1454,11 +1393,11 @@ setDocument = Sizzle.setDocument = function( node ) { adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); + )); } : function( a, b ) { if ( b ) { - while ( ( b = b.parentNode ) ) { + while ( (b = b.parentNode) ) { if ( b === a ) { return true; } @@ -1487,11 +1426,7 @@ setDocument = Sizzle.setDocument = function( node ) { } // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected @@ -1499,24 +1434,13 @@ setDocument = Sizzle.setDocument = function( node ) { // Disconnected nodes if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } @@ -1529,7 +1453,6 @@ setDocument = Sizzle.setDocument = function( node ) { return compare & 4 ? -1 : 1; } : function( a, b ) { - // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; @@ -1545,14 +1468,8 @@ setDocument = Sizzle.setDocument = function( node ) { // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ + return a === document ? -1 : + b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? @@ -1566,32 +1483,26 @@ setDocument = Sizzle.setDocument = function( node ) { // Otherwise we need full lists of their ancestors for comparison cur = a; - while ( ( cur = cur.parentNode ) ) { + while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; - while ( ( cur = cur.parentNode ) ) { + while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { + while ( ap[i] === bp[i] ) { i++; } return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : + siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : 0; }; @@ -1603,10 +1514,16 @@ Sizzle.matches = function( expr, elements ) { }; Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && + !compilerCache[ expr + " " ] && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { @@ -1615,46 +1532,32 @@ Sizzle.matchesSelector = function( elem, expr ) { // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { return ret; } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } + } catch (e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; }; Sizzle.contains = function( context, elem ) { - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { + if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { + if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : @@ -1664,13 +1567,13 @@ Sizzle.attr = function( elem, name ) { val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? + (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); + return (sel + "").replace( rcssescape, fcssescape ); }; Sizzle.error = function( msg ) { @@ -1693,7 +1596,7 @@ Sizzle.uniqueSort = function( results ) { results.sort( sortOrder ); if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { + while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } @@ -1721,21 +1624,17 @@ getText = Sizzle.getText = function( elem ) { nodeType = elem.nodeType; if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - + while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { - // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); @@ -1744,7 +1643,6 @@ getText = Sizzle.getText = function( elem ) { } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } - // Do not include comment or processing instruction nodes return ret; @@ -1772,21 +1670,19 @@ Expr = Sizzle.selectors = { preFilter: { "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) @@ -1797,25 +1693,22 @@ Expr = Sizzle.selectors = { 7 sign of y-component 8 y of y-component */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + match[1] = match[1].toLowerCase(); + if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); + if ( !match[3] ) { + Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); } return match; @@ -1823,28 +1716,26 @@ Expr = Sizzle.selectors = { "PSEUDO": function( match ) { var excess, - unquoted = !match[ 6 ] && match[ 2 ]; + unquoted = !match[6] && match[2]; - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - + (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) @@ -1857,9 +1748,7 @@ Expr = Sizzle.selectors = { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? - function() { - return true; - } : + function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; @@ -1869,16 +1758,10 @@ Expr = Sizzle.selectors = { var pattern = classCache[ className + " " ]; return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); }, "ATTR": function( name, operator, check ) { @@ -1894,8 +1777,6 @@ Expr = Sizzle.selectors = { result += ""; - /* eslint-disable max-len */ - return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : @@ -1904,12 +1785,10 @@ Expr = Sizzle.selectors = { operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; - /* eslint-enable max-len */ - }; }, - "CHILD": function( type, what, _argument, first, last ) { + "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; @@ -1921,7 +1800,7 @@ Expr = Sizzle.selectors = { return !!elem.parentNode; } : - function( elem, _context, xml ) { + function( elem, context, xml ) { var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, @@ -1935,7 +1814,7 @@ Expr = Sizzle.selectors = { if ( simple ) { while ( dir ) { node = elem; - while ( ( node = node[ dir ] ) ) { + while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { @@ -1943,7 +1822,6 @@ Expr = Sizzle.selectors = { return false; } } - // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } @@ -1959,22 +1837,22 @@ Expr = Sizzle.selectors = { // ...in a gzip-friendly way node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); + outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); + (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; - while ( ( node = ++nodeIndex && node && node[ dir ] || + while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { + (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { @@ -1984,18 +1862,16 @@ Expr = Sizzle.selectors = { } } else { - // Use previously-cached element index if available if ( useCache ) { - // ...in a gzip-friendly way node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); + outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); + (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; @@ -2005,10 +1881,9 @@ Expr = Sizzle.selectors = { // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : @@ -2017,13 +1892,12 @@ Expr = Sizzle.selectors = { // Cache the index of each encountered element if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); + outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); + (outerCache[ node.uniqueID ] = {}); uniqueCache[ type ] = [ dirruns, diff ]; } @@ -2044,7 +1918,6 @@ Expr = Sizzle.selectors = { }, "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters @@ -2064,15 +1937,15 @@ Expr = Sizzle.selectors = { if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { + markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); } - } ) : + }) : function( elem ) { return fn( elem, 0, args ); }; @@ -2083,10 +1956,8 @@ Expr = Sizzle.selectors = { }, pseudos: { - // Potentially complex pseudos - "not": markFunction( function( selector ) { - + "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators @@ -2095,40 +1966,39 @@ Expr = Sizzle.selectors = { matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { + markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); } } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; + }) : + function( elem, context, xml ) { + input[0] = elem; matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[ 0 ] = null; + input[0] = null; return !results.pop(); }; - } ), + }), - "has": markFunction( function( selector ) { + "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; - } ), + }), - "contains": markFunction( function( text ) { + "contains": markFunction(function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; - } ), + }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value @@ -2138,26 +2008,25 @@ Expr = Sizzle.selectors = { // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { + if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { - if ( ( elemLang = documentIsHTML ? + if ( (elemLang = documentIsHTML ? elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; - } ), + }), // Miscellaneous "target": function( elem ) { @@ -2170,9 +2039,7 @@ Expr = Sizzle.selectors = { }, "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties @@ -2180,20 +2047,16 @@ Expr = Sizzle.selectors = { "disabled": createDisabledPseudo( true ), "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { - // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions elem.parentNode.selectedIndex; } @@ -2202,7 +2065,6 @@ Expr = Sizzle.selectors = { // Contents "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) @@ -2216,7 +2078,7 @@ Expr = Sizzle.selectors = { }, "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); + return !Expr.pseudos["empty"]( elem ); }, // Element/input types @@ -2240,62 +2102,57 @@ Expr = Sizzle.selectors = { // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection - "first": createPositionalPseudo( function() { + "first": createPositionalPseudo(function() { return [ 0 ]; - } ), + }), - "last": createPositionalPseudo( function( _matchIndexes, length ) { + "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; - } ), + }), - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; - } ), + }), - "even": createPositionalPseudo( function( matchIndexes, length ) { + "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - } ), + }), - "odd": createPositionalPseudo( function( matchIndexes, length ) { + "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - } ), + }), - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; - } ), + }), - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; - } ) + }) } }; -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; +Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { @@ -2326,39 +2183,37 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { while ( soFar ) { // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; + soFar = soFar.slice( match[0].length ) || soFar; } - groups.push( ( tokens = [] ) ); + groups.push( (tokens = []) ); } matched = false; // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { + if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); - tokens.push( { + tokens.push({ value: matched, - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); + type: match[0].replace( rtrim, " " ) + }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { matched = match.shift(); - tokens.push( { + tokens.push({ value: matched, type: type, matches: match - } ); + }); soFar = soFar.slice( matched.length ); } } @@ -2375,7 +2230,6 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { soFar.length : soFar ? Sizzle.error( selector ) : - // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; @@ -2385,7 +2239,7 @@ function toSelector( tokens ) { len = tokens.length, selector = ""; for ( ; i < len; i++ ) { - selector += tokens[ i ].value; + selector += tokens[i].value; } return selector; } @@ -2398,10 +2252,9 @@ function addCombinator( matcher, combinator, base ) { doneName = done++; return combinator.first ? - // Check against closest ancestor/preceding element function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { + while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } @@ -2416,7 +2269,7 @@ function addCombinator( matcher, combinator, base ) { // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { + while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; @@ -2424,29 +2277,27 @@ function addCombinator( matcher, combinator, base ) { } } } else { - while ( ( elem = elem[ dir ] ) ) { + while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + outerCache = elem[ expando ] || (elem[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); if ( skip && skip === elem.nodeName.toLowerCase() ) { elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && + } else if ( (oldCache = uniqueCache[ key ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); + return (newCache[ 2 ] = oldCache[ 2 ]); } else { - // Reuse newcache so results back-propagate to previous elements uniqueCache[ key ] = newCache; // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } @@ -2462,20 +2313,20 @@ function elementMatcher( matchers ) { function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { + if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : - matchers[ 0 ]; + matchers[0]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); + Sizzle( selector, contexts[i], results ); } return results; } @@ -2488,7 +2339,7 @@ function condense( unmatched, map, filter, context, xml ) { mapped = map != null; for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { + if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { @@ -2508,18 +2359,14 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } - return markFunction( function( seed, results, context, xml ) { + return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? @@ -2527,7 +2374,6 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS elems, matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? @@ -2551,8 +2397,8 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } @@ -2560,27 +2406,25 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - + if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); + temp.push( (matcherIn[i] = elem) ); } } - postFinder( null, ( matcherOut = [] ), temp, xml ); + postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - seed[ temp ] = !( results[ temp ] = elem ); + seed[temp] = !(results[temp] = elem); } } } @@ -2598,14 +2442,14 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS push.apply( results, matcherOut ); } } - } ); + }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) @@ -2617,43 +2461,38 @@ function matcherFromTokens( tokens ) { }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? + (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { + if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } @@ -2674,40 +2513,28 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { unmatched = seed && [], setMatched = [], contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; + outermostContext = context === document || context || outermost; } // Add elements passing elementMatchers directly to results // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { + if ( !context && elem.ownerDocument !== document ) { setDocument( elem ); xml = !documentIsHTML; } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { results.push( elem ); break; } @@ -2719,9 +2546,8 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // Track unmatched elements for set filters if ( bySet ) { - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { + if ( (elem = !matcher && elem) ) { matchedCount--; } @@ -2745,17 +2571,16 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { + while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); } } } @@ -2796,14 +2621,13 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { cached = compilerCache[ selector + " " ]; if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); + cached = matcherFromTokens( match[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { @@ -2812,10 +2636,7 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { } // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; @@ -2835,7 +2656,7 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + match = !seed && tokenize( (selector = compiled.selector || selector) ); results = results || []; @@ -2844,12 +2665,11 @@ select = Sizzle.select = function( selector, context, results, seed ) { if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; @@ -2862,22 +2682,20 @@ select = Sizzle.select = function( selector, context, results, seed ) { } // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { - token = tokens[ i ]; + token = tokens[i]; // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { + if ( Expr.relative[ (type = token.type) ] ) { break; } - if ( ( find = Expr.find[ type ] ) ) { - + if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); @@ -2908,7 +2726,7 @@ select = Sizzle.select = function( selector, context, results, seed ) { // One-time assignments // Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function @@ -2919,59 +2737,58 @@ setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - +support.sortDetached = assert(function( el ) { // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); // Support: IE<8 // Prevent attribute/property "interpolation" // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { +if ( !assert(function( el ) { el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { + return el.firstChild.getAttribute("href") === "#" ; +}) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } - } ); + }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { +if ( !support.attributes || !assert(function( el ) { el.innerHTML = ""; el.firstChild.setAttribute( "value", "" ); return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { +}) ) { + addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } - } ); + }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? + (val = elem.getAttributeNode( name )) && val.specified ? val.value : - null; + null; } - } ); + }); } return Sizzle; -} )( window ); +})( window ); @@ -3031,9 +2848,11 @@ var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>| +var risSimple = /^.[^:#\[\.,]*$/; + // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { + if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { return !!qualifier.call( elem, i, elem ) !== not; } ); @@ -3053,8 +2872,16 @@ function winnow( elements, qualifier, not ) { } ); } - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); } jQuery.filter = function( expr, elems, not ) { @@ -3175,7 +3002,7 @@ var rootjQuery, for ( match in context ) { // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { + if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes @@ -3218,7 +3045,7 @@ var rootjQuery, // HANDLE: $(function) // Shortcut for document ready - } else if ( isFunction( selector ) ) { + } else if ( jQuery.isFunction( selector ) ) { return root.ready !== undefined ? root.ready( selector ) : @@ -3340,7 +3167,7 @@ jQuery.each( { parents: function( elem ) { return dir( elem, "parentNode" ); }, - parentsUntil: function( elem, _i, until ) { + parentsUntil: function( elem, i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { @@ -3355,10 +3182,10 @@ jQuery.each( { prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, - nextUntil: function( elem, _i, until ) { + nextUntil: function( elem, i, until ) { return dir( elem, "nextSibling", until ); }, - prevUntil: function( elem, _i, until ) { + prevUntil: function( elem, i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { @@ -3368,24 +3195,18 @@ jQuery.each( { return siblings( elem.firstChild ); }, contents: function( elem ) { - if ( elem.contentDocument != null && + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); + return jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { @@ -3539,11 +3360,11 @@ jQuery.Callbacks = function( options ) { ( function add( args ) { jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { + if ( jQuery.isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { // Inspect recursively add( arg ); @@ -3658,11 +3479,11 @@ function adoptValue( value, resolve, reject, noValue ) { try { // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { method.call( value ).done( resolve ).fail( reject ); // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { method.call( value, resolve, reject ); // Other non-thenables @@ -3717,17 +3538,17 @@ jQuery.extend( { var fns = arguments; return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { + jQuery.each( tuples, function( i, tuple ) { // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; // deferred.progress(function() { bind to newDefer or newDefer.notify }) // deferred.done(function() { bind to newDefer or newDefer.resolve }) // deferred.fail(function() { bind to newDefer or newDefer.reject }) deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { + if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .progress( newDefer.notify ) .done( newDefer.resolve ) @@ -3781,7 +3602,7 @@ jQuery.extend( { returned.then; // Handle a returned thenable - if ( isFunction( then ) ) { + if ( jQuery.isFunction( then ) ) { // Special processors (notify) just wait for resolution if ( special ) { @@ -3877,7 +3698,7 @@ jQuery.extend( { resolve( 0, newDefer, - isFunction( onProgress ) ? + jQuery.isFunction( onProgress ) ? onProgress : Identity, newDefer.notifyWith @@ -3889,7 +3710,7 @@ jQuery.extend( { resolve( 0, newDefer, - isFunction( onFulfilled ) ? + jQuery.isFunction( onFulfilled ) ? onFulfilled : Identity ) @@ -3900,7 +3721,7 @@ jQuery.extend( { resolve( 0, newDefer, - isFunction( onRejected ) ? + jQuery.isFunction( onRejected ) ? onRejected : Thrower ) @@ -3940,15 +3761,8 @@ jQuery.extend( { // fulfilled_callbacks.disable tuples[ 3 - i ][ 2 ].disable, - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock + tuples[ 0 ][ 2 ].lock ); } @@ -4018,7 +3832,7 @@ jQuery.extend( { // Use .then() to unwrap secondary thenables (cf. gh-3000) if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { return master.then(); } @@ -4146,7 +3960,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { bulk = key == null; // Sets many values - if ( toType( key ) === "object" ) { + if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { access( elems, fn, i, key[ i ], true, emptyGet, raw ); @@ -4156,7 +3970,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { } else if ( value !== undefined ) { chainable = true; - if ( !isFunction( value ) ) { + if ( !jQuery.isFunction( value ) ) { raw = true; } @@ -4170,7 +3984,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { // ...except when executing function values } else { bulk = fn; - fn = function( elem, _key, value ) { + fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } @@ -4198,23 +4012,6 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { return len ? fn( elems[ 0 ], key ) : emptyGet; }; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} var acceptData = function( owner ) { // Accepts only: @@ -4277,14 +4074,14 @@ Data.prototype = { // Handle: [ owner, key, value ] args // Always use camelCase key (gh-2257) if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; + cache[ jQuery.camelCase( data ) ] = value; // Handle: [ owner, { properties } ] args } else { // Copy the properties one-by-one to the cache object for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; } } return cache; @@ -4294,7 +4091,7 @@ Data.prototype = { this.cache( owner ) : // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; }, access: function( owner, key, value ) { @@ -4342,9 +4139,9 @@ Data.prototype = { // If key is an array of keys... // We always set camelCase keys, so remove that. - key = key.map( camelCase ); + key = key.map( jQuery.camelCase ); } else { - key = camelCase( key ); + key = jQuery.camelCase( key ); // If a key with the spaces exists, use it. // Otherwise, create an array by matching non-whitespace @@ -4490,7 +4287,7 @@ jQuery.fn.extend( { if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); + name = jQuery.camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } @@ -4694,26 +4491,6 @@ var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } var isHiddenWithinTree = function( elem, el ) { // isHiddenWithinTree might be called from jQuery#filter function; @@ -4728,15 +4505,37 @@ var isHiddenWithinTree = function( elem, el ) { // Support: Firefox <=43 - 45 // Disconnected elements can have computed display: none, so first confirm that elem is // in the document. - isAttached( elem ) && + jQuery.contains( elem.ownerDocument, elem ) && jQuery.css( elem, "display" ) === "none"; }; +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, + var adjusted, + scale = 1, maxIterations = 20, currentValue = tween ? function() { @@ -4749,39 +4548,35 @@ function adjustCSS( elem, prop, valueParts, tween ) { unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && rcssNum.exec( jQuery.css( elem, prop ) ); if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; + // Make sure we update the tween properties later on + valueParts = valueParts || []; + // Iteratively approximate from a nonzero starting point initialInUnit = +initial || 1; - while ( maxIterations-- ) { + do { - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); } if ( valueParts ) { @@ -4897,47 +4692,18 @@ jQuery.fn.extend( { } ); var rcheckableType = ( /^(?:checkbox|radio)$/i ); -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - // We have to close these tags to support XHTML (#13200) var wrapMap = { + // Support: IE <=9 only + option: [ 1, "" ], + // XHTML parsers do not magically insert elements in the // same way that tag soup parsers do. So we cannot shorten // this by omitting or other required elements. @@ -4949,14 +4715,12 @@ var wrapMap = { _default: [ 0, "", "" ] }; +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - function getAll( context, tag ) { @@ -5000,7 +4764,7 @@ function setGlobalEval( elems, refElements ) { var rhtml = /<|&#?\w+;/; function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, + var elem, tmp, tag, wrap, contains, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, @@ -5012,7 +4776,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { if ( elem || elem === 0 ) { // Add nodes directly - if ( toType( elem ) === "object" ) { + if ( jQuery.type( elem ) === "object" ) { // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit @@ -5064,13 +4828,13 @@ function buildFragment( elems, context, scripts, selection, ignored ) { continue; } - attached = isAttached( elem ); + contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( fragment.appendChild( elem ), "script" ); // Preserve script evaluation history - if ( attached ) { + if ( contains ) { setGlobalEval( tmp ); } @@ -5089,6 +4853,34 @@ function buildFragment( elems, context, scripts, selection, ignored ) { } +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + var rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, @@ -5102,19 +4894,8 @@ function returnFalse() { return false; } -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - // Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 +// See #13393 for more info function safeActiveElement() { try { return document.activeElement; @@ -5197,8 +4978,8 @@ jQuery.event = { special, handlers, type, namespaces, origType, elemData = dataPriv.get( elem ); - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { return; } @@ -5222,7 +5003,7 @@ jQuery.event = { // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); + events = elemData.events = {}; } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { @@ -5380,15 +5161,12 @@ jQuery.event = { dispatch: function( nativeEvent ) { + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + var i, j, ret, matched, handleObj, handlerQueue, args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event @@ -5417,10 +5195,9 @@ jQuery.event = { while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; @@ -5509,7 +5286,7 @@ jQuery.event = { enumerable: true, configurable: true, - get: isFunction( hook ) ? + get: jQuery.isFunction( hook ) ? function() { if ( this.originalEvent ) { return hook( this.originalEvent ); @@ -5544,51 +5321,39 @@ jQuery.event = { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, click: { - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; }, - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack + // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); + return nodeName( event.target, "a" ); } }, @@ -5605,93 +5370,6 @@ jQuery.event = { } }; -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - jQuery.removeEvent = function( elem, type, handle ) { // This "if" is needed for plain objects @@ -5743,7 +5421,7 @@ jQuery.Event = function( src, props ) { } // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); + this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; @@ -5804,7 +5482,6 @@ jQuery.each( { shiftKey: true, view: true, "char": true, - code: true, charCode: true, key: true, keyCode: true, @@ -5851,33 +5528,6 @@ jQuery.each( { } }, jQuery.event.addProp ); -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - // Create mouseenter/leave events using mouseover/out and event-time checks // so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout @@ -5963,13 +5613,21 @@ jQuery.fn.extend( { var - // Support: IE <=10 - 11, Edge 12 - 13 only + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml = /\s*$/g; // Prefer a tbody over its parent table for containing new rows @@ -5977,7 +5635,7 @@ function manipulationTarget( elem, content ) { if ( nodeName( elem, "table" ) && nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + return jQuery( ">tbody", elem )[ 0 ] || elem; } return elem; @@ -5989,8 +5647,10 @@ function disableScript( elem ) { return elem; } function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; } else { elem.removeAttribute( "type" ); } @@ -5999,7 +5659,7 @@ function restoreScript( elem ) { } function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; if ( dest.nodeType !== 1 ) { return; @@ -6007,11 +5667,13 @@ function cloneCopyEvent( src, dest ) { // 1. Copy private data: events, handlers, etc. if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); events = pdataOld.events; if ( events ) { - dataPriv.remove( dest, "handle events" ); + delete pdataCur.handle; + pdataCur.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { @@ -6047,22 +5709,22 @@ function fixInput( src, dest ) { function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays - args = flat( args ); + args = concat.apply( [], args ); var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[ 0 ], - valueIsFunction = isFunction( value ); + isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || + if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return collection.each( function( index ) { var self = collection.eq( index ); - if ( valueIsFunction ) { + if ( isFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); @@ -6116,16 +5778,14 @@ function domManip( collection, args, callback, ignored ) { !dataPriv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + if ( node.src ) { // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); } } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); } } } @@ -6147,7 +5807,7 @@ function remove( elem, selector, keepData ) { } if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { setGlobalEval( getAll( node, "script" ) ); } node.parentNode.removeChild( node ); @@ -6159,13 +5819,13 @@ function remove( elem, selector, keepData ) { jQuery.extend( { htmlPrefilter: function( html ) { - return html; + return html.replace( rxhtmlTag, "<$1>" ); }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { var i, l, srcElements, destElements, clone = elem.cloneNode( true ), - inPage = isAttached( elem ); + inPage = jQuery.contains( elem.ownerDocument, elem ); // Fix IE cloning issues if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && @@ -6405,6 +6065,8 @@ jQuery.each( { return this.pushStack( ret ); }; } ); +var rmargin = ( /^margin/ ); + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); var getStyles = function( elem ) { @@ -6421,29 +6083,6 @@ var getStyles = function( elem ) { return view.getComputedStyle( elem ); }; -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - ( function() { @@ -6457,35 +6096,25 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); return; } - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "box-sizing:border-box;" + + "position:relative;display:block;" + "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); var divStyle = window.getComputedStyle( div ); pixelPositionVal = divStyle.top !== "1%"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Support: Android 4.0 - 4.3 only // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; documentElement.removeChild( container ); @@ -6494,12 +6123,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); div = null; } - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, container = document.createElement( "div" ), div = document.createElement( "div" ); @@ -6514,55 +6138,26 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, pixelPosition: function() { computeStyleTests(); return pixelPositionVal; }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, reliableMarginLeft: function() { computeStyleTests(); return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; } } ); } )(); @@ -6585,7 +6180,7 @@ function curCSS( elem, name, computed ) { if ( computed ) { ret = computed.getPropertyValue( name ) || computed[ name ]; - if ( ret === "" && !isAttached( elem ) ) { + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { ret = jQuery.style( elem, name ); } @@ -6594,7 +6189,7 @@ function curCSS( elem, name, computed ) { // but width seems to be reliably pixels. // This is against the CSSOM draft spec: // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { // Remember the original values width = style.width; @@ -6641,13 +6236,30 @@ function addGetHookIf( conditionFn, hookFn ) { } -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; +var -// Return a vendor-prefixed property or undefined + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property function vendorPropName( name ) { + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + // Check for vendor prefixed names var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), i = cssPrefixes.length; @@ -6660,34 +6272,17 @@ function vendorPropName( name ) { } } -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; + return ret; } - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { +function setPositiveNumber( elem, value, subtract ) { // Any relative (+/-) values have already been // normalized at this point @@ -6699,146 +6294,87 @@ function setPositiveNumber( _elem, value, subtract ) { value; } -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; } for ( ; i < 4; i += 2 ) { - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); } - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { + if ( isBorderBox ) { - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); } - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } } else { - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } } - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; + return val; } -function getWidthOrHeight( elem, dimension, extra ) { +function getWidthOrHeight( elem, name, extra ) { // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; } - // Normalize "" and auto + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra val = parseFloat( val ) || 0; - // Adjust for the element's box model + // Use the active box-sizing model to add/subtract irrelevant styles return ( val + - boxModelAdjustment( + augmentWidthOrHeight( elem, - dimension, + name, extra || ( isBorderBox ? "border" : "content" ), valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val + styles ) ) + "px"; } @@ -6868,13 +6404,6 @@ jQuery.extend( { "flexGrow": true, "flexShrink": true, "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, "lineHeight": true, "opacity": true, "order": true, @@ -6886,7 +6415,9 @@ jQuery.extend( { // Add in properties whose names you wish to fix before // setting or getting the value - cssProps: {}, + cssProps: { + "float": "cssFloat" + }, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { @@ -6898,7 +6429,7 @@ jQuery.extend( { // Make sure that we're working with the right name var ret, type, hooks, - origName = camelCase( name ), + origName = jQuery.camelCase( name ), isCustomProp = rcustomProp.test( name ), style = elem.style; @@ -6930,9 +6461,7 @@ jQuery.extend( { } // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { + if ( type === "number" ) { value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); } @@ -6968,7 +6497,7 @@ jQuery.extend( { css: function( elem, name, extra, styles ) { var val, num, hooks, - origName = camelCase( name ), + origName = jQuery.camelCase( name ), isCustomProp = rcustomProp.test( name ); // Make sure that we're working with the right name. We don't @@ -7006,8 +6535,8 @@ jQuery.extend( { } } ); -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { get: function( elem, computed, extra ) { if ( computed ) { @@ -7023,52 +6552,29 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) { // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); + return getWidthOrHeight( elem, name, extra ); } ) : - getWidthOrHeight( elem, dimension, extra ); + getWidthOrHeight( elem, name, extra ); } }, set: function( elem, value, extra ) { var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 + styles ); - } // Convert to pixels if value adjustment is needed if ( subtract && ( matches = rcssNum.exec( value ) ) && ( matches[ 3 ] || "px" ) !== "px" ) { - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); + elem.style[ name ] = value; + value = jQuery.css( elem, name ); } return setPositiveNumber( elem, value, subtract ); @@ -7112,7 +6618,7 @@ jQuery.each( { } }; - if ( prefix !== "margin" ) { + if ( !rmargin.test( prefix ) ) { jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; } } ); @@ -7222,9 +6728,9 @@ Tween.propHooks = { // Use .style if available and use plain properties where available. if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { tween.elem[ tween.prop ] = tween.now; @@ -7283,7 +6789,7 @@ function createFxNow() { window.setTimeout( function() { fxNow = undefined; } ); - return ( fxNow = Date.now() ); + return ( fxNow = jQuery.now() ); } // Generate parameters to create a standard animation @@ -7387,10 +6893,9 @@ function defaultPrefilter( elem, props, opts ) { // Restrict "overflow" and "display" styles during box animations if ( isBox && elem.nodeType === 1 ) { - // Support: IE <=9 - 11, Edge 12 - 15 + // Support: IE <=9 - 11, Edge 12 - 13 // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. + // from identically-valued overflowX and overflowY opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; // Identify a display type, preferring old show/hide data over the CSS cascade @@ -7498,7 +7003,7 @@ function propFilter( props, specialEasing ) { // camelCase, specialEasing and expand cssHook pass for ( index in props ) { - name = camelCase( index ); + name = jQuery.camelCase( index ); easing = specialEasing[ name ]; value = props[ index ]; if ( Array.isArray( value ) ) { @@ -7623,9 +7128,9 @@ function Animation( elem, properties, options ) { for ( ; index < length; index++ ) { result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); if ( result ) { - if ( isFunction( result.stop ) ) { + if ( jQuery.isFunction( result.stop ) ) { jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); + jQuery.proxy( result.stop, result ); } return result; } @@ -7633,7 +7138,7 @@ function Animation( elem, properties, options ) { jQuery.map( props, createTween, animation ); - if ( isFunction( animation.opts.start ) ) { + if ( jQuery.isFunction( animation.opts.start ) ) { animation.opts.start.call( elem, animation ); } @@ -7666,7 +7171,7 @@ jQuery.Animation = jQuery.extend( Animation, { }, tweener: function( props, callback ) { - if ( isFunction( props ) ) { + if ( jQuery.isFunction( props ) ) { callback = props; props = [ "*" ]; } else { @@ -7698,9 +7203,9 @@ jQuery.Animation = jQuery.extend( Animation, { jQuery.speed = function( speed, easing, fn ) { var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { complete: fn || !fn && easing || - isFunction( speed ) && speed, + jQuery.isFunction( speed ) && speed, duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing }; // Go to the end state if fx are off @@ -7727,7 +7232,7 @@ jQuery.speed = function( speed, easing, fn ) { opt.old = opt.complete; opt.complete = function() { - if ( isFunction( opt.old ) ) { + if ( jQuery.isFunction( opt.old ) ) { opt.old.call( this ); } @@ -7779,7 +7284,7 @@ jQuery.fn.extend( { clearQueue = type; type = undefined; } - if ( clearQueue ) { + if ( clearQueue && type !== false ) { this.queue( type || "fx", [] ); } @@ -7862,7 +7367,7 @@ jQuery.fn.extend( { } } ); -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { var cssFn = jQuery.fn[ name ]; jQuery.fn[ name ] = function( speed, easing, callback ) { return speed == null || typeof speed === "boolean" ? @@ -7891,7 +7396,7 @@ jQuery.fx.tick = function() { i = 0, timers = jQuery.timers; - fxNow = Date.now(); + fxNow = jQuery.now(); for ( ; i < timers.length; i++ ) { timer = timers[ i ]; @@ -8083,7 +7588,7 @@ boolHook = { } }; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { var getter = attrHandle[ name ] || jQuery.find.attr; attrHandle[ name ] = function( elem, name, isXML ) { @@ -8244,7 +7749,7 @@ jQuery.each( [ // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace function stripAndCollapse( value ) { var tokens = value.match( rnothtmlwhite ) || []; return tokens.join( " " ); @@ -8255,30 +7760,20 @@ function getClass( elem ) { return elem.getAttribute && elem.getAttribute( "class" ) || ""; } -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - jQuery.fn.extend( { addClass: function( value ) { var classes, elem, cur, curValue, clazz, j, finalValue, i = 0; - if ( isFunction( value ) ) { + if ( jQuery.isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); } ); } - classes = classesToArray( value ); + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; - if ( classes.length ) { while ( ( elem = this[ i++ ] ) ) { curValue = getClass( elem ); cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); @@ -8307,7 +7802,7 @@ jQuery.fn.extend( { var classes, elem, cur, curValue, clazz, j, finalValue, i = 0; - if ( isFunction( value ) ) { + if ( jQuery.isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); } ); @@ -8317,9 +7812,9 @@ jQuery.fn.extend( { return this.attr( "class", "" ); } - classes = classesToArray( value ); + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; - if ( classes.length ) { while ( ( elem = this[ i++ ] ) ) { curValue = getClass( elem ); @@ -8349,14 +7844,13 @@ jQuery.fn.extend( { }, toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); + var type = typeof value; - if ( typeof stateVal === "boolean" && isValidValue ) { + if ( typeof stateVal === "boolean" && type === "string" ) { return stateVal ? this.addClass( value ) : this.removeClass( value ); } - if ( isFunction( value ) ) { + if ( jQuery.isFunction( value ) ) { return this.each( function( i ) { jQuery( this ).toggleClass( value.call( this, i, getClass( this ), stateVal ), @@ -8368,12 +7862,12 @@ jQuery.fn.extend( { return this.each( function() { var className, i, self, classNames; - if ( isValidValue ) { + if ( type === "string" ) { // Toggle individual class names i = 0; self = jQuery( this ); - classNames = classesToArray( value ); + classNames = value.match( rnothtmlwhite ) || []; while ( ( className = classNames[ i++ ] ) ) { @@ -8432,7 +7926,7 @@ var rreturn = /\r/g; jQuery.fn.extend( { val: function( value ) { - var hooks, ret, valueIsFunction, + var hooks, ret, isFunction, elem = this[ 0 ]; if ( !arguments.length ) { @@ -8461,7 +7955,7 @@ jQuery.fn.extend( { return; } - valueIsFunction = isFunction( value ); + isFunction = jQuery.isFunction( value ); return this.each( function( i ) { var val; @@ -8470,7 +7964,7 @@ jQuery.fn.extend( { return; } - if ( valueIsFunction ) { + if ( isFunction ) { val = value.call( this, i, jQuery( this ).val() ); } else { val = value; @@ -8612,24 +8106,18 @@ jQuery.each( [ "radio", "checkbox" ], function() { // Return jQuery for attributes-only inclusion -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; jQuery.extend( jQuery.event, { trigger: function( event, data, elem, onlyHandlers ) { - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + var i, cur, tmp, bubbleType, ontype, handle, special, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - cur = lastElement = tmp = elem = elem || document; + cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { @@ -8681,7 +8169,7 @@ jQuery.extend( jQuery.event, { // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { @@ -8701,15 +8189,13 @@ jQuery.extend( jQuery.event, { // Fire handlers on the event path i = 0; while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; + event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); @@ -8735,7 +8221,7 @@ jQuery.extend( jQuery.event, { // Call a native DOM method on the target with the same name as the event. // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; @@ -8746,17 +8232,7 @@ jQuery.extend( jQuery.event, { // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - jQuery.event.triggered = undefined; if ( tmp ) { @@ -8802,6 +8278,31 @@ jQuery.fn.extend( { } ); +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + // Support: Firefox <=44 // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 @@ -8820,10 +8321,7 @@ if ( !support.focusin ) { jQuery.event.special[ fix ] = { setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, + var doc = this.ownerDocument || this, attaches = dataPriv.access( doc, fix ); if ( !attaches ) { @@ -8832,7 +8330,7 @@ if ( !support.focusin ) { dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { - var doc = this.ownerDocument || this.document || this, + var doc = this.ownerDocument || this, attaches = dataPriv.access( doc, fix ) - 1; if ( !attaches ) { @@ -8848,7 +8346,7 @@ if ( !support.focusin ) { } var location = window.location; -var nonce = { guid: Date.now() }; +var nonce = jQuery.now(); var rquery = ( /\?/ ); @@ -8906,7 +8404,7 @@ function buildParams( prefix, obj, traditional, add ) { } } ); - } else if ( !traditional && toType( obj ) === "object" ) { + } else if ( !traditional && jQuery.type( obj ) === "object" ) { // Serialize object item. for ( name in obj ) { @@ -8928,7 +8426,7 @@ jQuery.param = function( a, traditional ) { add = function( key, valueOrFunction ) { // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? + var value = jQuery.isFunction( valueOrFunction ) ? valueOrFunction() : valueOrFunction; @@ -8936,10 +8434,6 @@ jQuery.param = function( a, traditional ) { encodeURIComponent( value == null ? "" : value ); }; - if ( a == null ) { - return ""; - } - // If an array was passed in, assume that it is an array of form elements. if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { @@ -8980,7 +8474,7 @@ jQuery.fn.extend( { rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); } ) - .map( function( _i, elem ) { + .map( function( i, elem ) { var val = jQuery( this ).val(); if ( val == null ) { @@ -9050,7 +8544,7 @@ function addToPrefiltersOrTransports( structure ) { i = 0, dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - if ( isFunction( func ) ) { + if ( jQuery.isFunction( func ) ) { // For each dataType in the dataTypeExpression while ( ( dataType = dataTypes[ i++ ] ) ) { @@ -9442,14 +8936,12 @@ jQuery.extend( { if ( !responseHeaders ) { responseHeaders = {}; while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; } } - match = responseHeaders[ key.toLowerCase() + " " ]; + match = responseHeaders[ key.toLowerCase() ]; } - return match == null ? null : match.join( ", " ); + return match == null ? null : match; }, // Raw string @@ -9524,7 +9016,7 @@ jQuery.extend( { if ( s.crossDomain == null ) { urlAnchor = document.createElement( "a" ); - // Support: IE <=8 - 11, Edge 12 - 15 + // Support: IE <=8 - 11, Edge 12 - 13 // IE throws exception on accessing the href property if url is malformed, // e.g. http://example.com:80x/ try { @@ -9582,8 +9074,8 @@ jQuery.extend( { // Remember the hash so we can put it back uncached = s.url.slice( cacheURL.length ); - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + // If data is available, append data to url + if ( s.data ) { cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; // #9682: remove data so that it's not used in an eventual retry @@ -9593,8 +9085,7 @@ jQuery.extend( { // Add or update anti-cache param if needed if ( s.cache === false ) { cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; } // Put hash and anti-cache on the URL that will be requested (gh-1732) @@ -9727,11 +9218,6 @@ jQuery.extend( { response = ajaxHandleResponses( s, jqXHR, responses ); } - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - // Convert no matter what (that way responseXXX fields are always set) response = ajaxConvert( s, response, jqXHR, isSuccess ); @@ -9822,11 +9308,11 @@ jQuery.extend( { } } ); -jQuery.each( [ "get", "post" ], function( _i, method ) { +jQuery.each( [ "get", "post" ], function( i, method ) { jQuery[ method ] = function( url, data, callback, type ) { // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { + if ( jQuery.isFunction( data ) ) { type = type || callback; callback = data; data = undefined; @@ -9843,17 +9329,8 @@ jQuery.each( [ "get", "post" ], function( _i, method ) { }; } ); -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - -jQuery._evalUrl = function( url, options, doc ) { +jQuery._evalUrl = function( url ) { return jQuery.ajax( { url: url, @@ -9863,16 +9340,7 @@ jQuery._evalUrl = function( url, options, doc ) { cache: true, async: false, global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } + "throws": true } ); }; @@ -9882,7 +9350,7 @@ jQuery.fn.extend( { var wrap; if ( this[ 0 ] ) { - if ( isFunction( html ) ) { + if ( jQuery.isFunction( html ) ) { html = html.call( this[ 0 ] ); } @@ -9908,7 +9376,7 @@ jQuery.fn.extend( { }, wrapInner: function( html ) { - if ( isFunction( html ) ) { + if ( jQuery.isFunction( html ) ) { return this.each( function( i ) { jQuery( this ).wrapInner( html.call( this, i ) ); } ); @@ -9928,10 +9396,10 @@ jQuery.fn.extend( { }, wrap: function( html ) { - var htmlIsFunction = isFunction( html ); + var isFunction = jQuery.isFunction( html ); return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); } ); }, @@ -10023,8 +9491,7 @@ jQuery.ajaxTransport( function( options ) { return function() { if ( callback ) { callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; if ( type === "abort" ) { xhr.abort(); @@ -10064,7 +9531,7 @@ jQuery.ajaxTransport( function( options ) { // Listen to events xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + errorCallback = xhr.onerror = callback( "error" ); // Support: IE 9 only // Use onreadystatechange to replace onabort @@ -10155,21 +9622,24 @@ jQuery.ajaxPrefilter( "script", function( s ) { // Bind script tag hack transport jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { + // This transport only deals with cross domain requests + if ( s.crossDomain ) { var script, callback; return { send: function( _, complete ) { - script = jQuery( " - - - - - + + + + + + + + - - -

- musrfit 1.8.0 documentation

-

Acknowledgements

-
-
- -

- «  MusrRoot - an Extensible Open File Format for μSR -   ::   - Contents -   ::   - Bugtracking  » -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+

Acknowledgements

Bastian M. Wojek
-
I am very much indebted to BMW for his rigorous testing of musrfit, his many useful suggestions, contributions, and for the -largest part of the user manual of musrfit which makes it accessible to a broader audience! Many thanks Bastian!
+
I am very much indebted to BMW for his rigorous testing of musrfit, his many useful suggestions, contributions, and for the +largest part of the user manual of musrfit which makes it accessible to a broader audience! Many thanks Bastian!
Uldis Locans
-
I am very much indebted to Uldis work on DKS enabling the GPU support for musrfit. His kind, calm, and +
I am very much indebted to Uldis work on DKS enabling the GPU support for musrfit. His kind, calm, and extremely competent way to deal with his projects as well as to deal with the chaos of physicists way to think is admirable. Many thanks Uldis!
Zaher Salman
-
Thanks for his beta-NMR and web-interface contributions to musrfit!
+
Thanks for his beta-NMR and web-interface contributions to musrfit!
Robert Scheuermann
-
Thanks for his constant contructive input on musrfit!
+
Thanks for his constant contructive input on musrfit!
-
-
+
+ +
+ + +
- - +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/any2many.html b/doc/html/any2many.html index a5b02f8b..32ca7d49 100644 --- a/doc/html/any2many.html +++ b/doc/html/any2many.html @@ -1,76 +1,236 @@ - - - - + + + + + + + + + any2many - a Universal μSR-file-format converter — musrfit 1.8.2 documentation + + + + + + + + + + + - any2many - a Universal μSR-file-format converter — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

- musrfit 1.8.0 documentation

-

any2many - a Universal μSR-file-format converter

-
-
- -

- «  msr2data - A Program for Automatically Processing Multiple musrfit msr Files -   ::   - Contents -   ::   - MusrRoot - an Extensible Open File Format for μSR  » -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • any2many - a Universal μSR-file-format converter
  • + + +
  • + + + View page source + + +
  • + +
+ + +
+
+
+
+

any2many - a Universal μSR-file-format converter

-

any2many allows to convert most μSR-file-formats from one to the other. -For a detailed description see here.

+

any2many allows to convert most μSR-file-formats from one to the other. +For a detailed description see here.

-
-
+
+ +
+ + +
- - +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/bugtracking.html b/doc/html/bugtracking.html index 2ec94b3b..9f4592b7 100644 --- a/doc/html/bugtracking.html +++ b/doc/html/bugtracking.html @@ -1,49 +1,161 @@ - - - - + + + + + + + + + Bugtracking — musrfit 1.8.2 documentation + + + + + + + + + + + - Bugtracking — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - - -
- -

- «  Acknowledgements -   ::   - Contents -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+

Bugtracking

For reporting bugs or requesting new features and improvements please use @@ -52,21 +164,71 @@ or send an e-mail to A. Suter at PSI.

-
-
+
+ +
+ + +
- - +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/cite.html b/doc/html/cite.html index 2a435cc8..57d09b68 100644 --- a/doc/html/cite.html +++ b/doc/html/cite.html @@ -1,88 +1,248 @@ - - - - + + + + + + + + + How to Cite musrfit? — musrfit 1.8.2 documentation + + + + + + + + + + + - How to Cite musrfit? — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

- musrfit 1.8.0 documentation

-

How to Cite musrfit?

-
-
- -

- «  Welcome to the musrfit documentation! -   ::   - Contents -   ::   - Tutorial for musrfit  » -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+
-

How to Cite musrfit?

-

Since quite some effort is going into the development and maintenance of the musrfit package, you should at least acknowledge it in your publication if you have used it to analyze your data. Even better of course is to cite it properly by the reference given beneath

+

How to Cite musrfit?

+

Since quite some effort is going into the development and maintenance of the musrfit package, you should at least acknowledge it in your publication if you have used it to analyze your data. Even better of course is to cite it properly by the reference given beneath

-

The GPU high speed musrfit version is utilizing DKS. In case you are using this version, please also add the following citations

+

The GPU high speed musrfit version is utilizing DKS. In case you are using this version, please also add the following citations

-
-
+
+ +
+ + +
- - +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/genindex.html b/doc/html/genindex.html index b5d04e79..ee9e98a1 100644 --- a/doc/html/genindex.html +++ b/doc/html/genindex.html @@ -1,47 +1,159 @@ - - - - - + + + + + + + + + + Index — musrfit 1.8.2 documentation + + + + + + + + + + + - Index — musrfit 1.8.0 documentation + + + + + + + + + + + + + + + + + +
+ - - - - - - - - - - - - -
+ +
+
+ + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + + + +
  • + +
+ + +
+
+
+
+

Index

@@ -72,889 +184,582 @@

Symbols

- +
- -
1D-London-Meissner -
- -

A

- - + +
- -
acknowledgment -
- - -
addrun -
- - -
addRunApp -
- - -
addt0-asymmetry -
- - -
addt0-single-histo -
- -
- -
alpha-beta -
- - -
any2many, [1] -
- - -
asymmetry-fit -
- - -
asymmetry-rrf-fit -
- -

B

- - + +
- -
backgr.fit -
- - -
backgr.fix -
- - -
background-asymmetry -
- - -
background-single-histo -
- - -
BMW-libs -
- -
- -
BMWlibs-XML -
- - -
bnmr-asymmetry-fit -
- - -
BNMR-libs -
- - -
boost-c++ -
- - -
bugtracking -
- -

C

- - + +
- -
cite -
- -
- -
cuda-install -
- -

D

- - + +
- -
data-asymmetry -
- - -
data-single-histo -
- - -
dks -
- - -
dks-command-overview -
- - -
dks-install -
- -
- -
dks-opencl-macOS -
- - -
dks-setup-amd-graphic-card -
- - -
dks-setup-tesla -
- - -
dump_header -
- -

E

- +
- -
ExpRlx -
- -

F

- - + +
- -
fftw -
- - -
fink -
- - -
fit -
- - -
fit-types -
- - -
fittype -
- - -
forward -
- - -
forward-backward -
- - -
fourier-block-apodization -
- -
- -
fourier-block-dc-corrected -
- - -
fourier-block-fourier_power -
- - -
fourier-block-phase -
- - -
fourier-block-plot -
- - -
fourier-block-range -
- - -
fourier-block-range_for_phase_correction -
- - -
fourier-block-units -
- -

G

- - + +
- -
gnu-gsl -
- - -
gnu-linux -
- -
- -
gnu-linux-requirements -
- -

H

- - + +
- -
hdf4 -
- -
- -
hdf5 -
- -

I

- - + +
- -
Ianiso -
- -
- -
Iax -
- -

L

- - + +
- -
libBNMR -
- - -
libFitPofB -
- - -
libLineProfile -
- - -
libxml2 -
- - -
lifetime -
- -
- -
LineGauss -
- - -
LineLaplace -
- - -
LineLorentzian -
- - -
LineSkewLorentzian -
- - -
LineSkewLorentzian2 -
- -

M

- - + +
- -
macports -
- - -
map -
- - -
meta-information -
- - -
minixml -
- - -
minuit2-command-overview -
- - -
msr-commands-block -
- - -
msr-commands-block-dks -
- - -
msr-file-format -
- - -
msr-fitparameter-block -
- - -
msr-fourier-block -
- - -
msr-functions-block -
- - -
msr-global-block -
- - -
msr-plot-block -
- - -
msr-plot-block-lifetimecorrection -
- - -
msr-plot-block-logx -
- - -
msr-plot-block-logy -
- - -
msr-plot-block-range -
- - -
msr-plot-block-rrf_freq -
- - -
msr-plot-block-rrf_packing -
- - -
msr-plot-block-rrf_phase -
- - -
msr-plot-block-runs -
- - -
msr-plot-block-sub_ranges -
- - -
msr-plot-block-use_fit_ranges -
- - -
msr-plot-block-view_packing -
- - -
msr-run-block -
- - -
msr-statistc-block -
- - -
msr-theory-block -
- - -
msr-title-block -
- - -
msr2-data-global-mode -
- - -
msr2data -
- - -
msr2data-global-extended -
- - -
msr2data-global-param-extraction -
- - -
msr2msr -
- - -
mupp -
- -
- -
mupp-gui -
- - -
mupp-scripting -
- - -
mupp-usage -
- - -
musredit -
- - -
musredit-build-macos -
- - -
musredit-features -
- - -
musredit-install-linux -
- - -
musredit_startup -
- - -
musrfit -
- - -
musrfit-build-cmake-linux -
- - -
musrfit-build-cmake-macos -
- - -
musrfit-build-linux -
- - -
musrfit-build-macos -
- - -
musrfit-command-block-details -
- - -
musrfit-post-install-linux -
- - -
musrfit-startup -
- - -
musrFT -
- - -
musrFT-key-shortcuts -
- - -
MusrRoot -
- - -
MusrRoot-Overview -
- - -
MusrRoot-TMusrRunPhysicalQuantity -
- - -
MusrRoot-Validation -
- - -
musrStep -
- - -
musrt0 -
- - -
musrview -
- - -
musrview-key-shortcuts -
- - -
musrWiz -
- - -
musrWiz-Create -
- - -
musrWiz-FitInfo -
- - -
musrWiz-FitParam -
- - -
musrWiz-Functions -
- - -
musrWiz-Introduction -
- - -
musrWiz-Maps -
- - -
musrWiz-Theory -
- -

N

- - + +
- -
negative-muon-musr-fit -
- - -
nexus -
- - -
nexus-build-fink -
- - -
nexus-build-linux -
- -
- -
nexus-build-macports -
- - -
non-musr-fit -
- - -
norm -
- -

O

- +
- -
os-restrictions -
- -

P

- - + +
- -
packing -
- - -
PowderLineAsymGss -
- - -
PowderLineAsymLor -
- -
- -
PowderLineAxialGss -
- - -
PowderLineAxialLor -
- -

Q

- +
- -
qt -
- -
    +
  • qt +
  • +

R

- - + +
- -
rge-handler -
- - -
root-build-fink -
- - -
root-build-linux -
- -
- -
root-build-macports -
- - -
root-cern -
- -

S

- - + +
- -
setup -
- - -
SExpRlx -
- - -
single-histogram-fit -
- -
- -
single-histogram-rrf-fit -
- - -
SLR -
- - -
supported-operating-systems -
- -

T

- - + +
- -
t0-asymmetry -
- - -
t0-single-histo -
- - -
technical-musrfit -
- - -
TLondon1D1L -
- -
- -
TLondon1D2L -
- - -
TLondon1D3L -
- - -
TLondon1DHS -
- - -
tutorial -
- -

U

- - + +
- -
user-functions -
- - -
user-functions-with-global-part -
- - -
user-functions-without-global-part -
- -
- -
user-libs -
- - -
user-manual -
- -

V

- - + +
- -
Vortex-Analytic-GL -
- - -
Vortex-Gaussian-CutOff -
- - -
Vortex-London-modified -
- -
- -
Vortex-Numeric-GL -
- - -
Vortex-State-Isotropic -
- -

X

- +
- -
xy-data -
- -
-
-
- -

- Contents -

+
+ +
+
+ -
+
- + Built with Sphinx using a theme provided by Read the Docs. + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html index 3a7380cc..f29c5d4f 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -1,55 +1,167 @@ - - - - + + + + + + + + + Welcome to the musrfit documentation! — musrfit 1.8.2 documentation + + + + + + + + + + + - Welcome to the musrfit documentation! — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

- musrfit 1.8.0 documentation

-

Welcome to the musrfit documentation!

-
-
- -

- Contents -   ::   - How to Cite musrfit?  » -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + +
- - +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/msr2data.html b/doc/html/msr2data.html index 0c6a4566..66d4b200 100644 --- a/doc/html/msr2data.html +++ b/doc/html/msr2data.html @@ -1,56 +1,181 @@ - - - - + + + + + + + + + msr2data - A Program for Automatically Processing Multiple musrfit msr Files — musrfit 1.8.2 documentation + + + + + + + + + + + - msr2data - A Program for Automatically Processing Multiple musrfit msr Files — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

- musrfit 1.8.0 documentation

-

msr2data - A Program for Automatically Processing Multiple musrfit msr Files

-
-
- -

- «  mupp - μSR Parameter Plotter -   ::   - Contents -   ::   - any2many - a Universal μSR-file-format converter  » -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • msr2data - A Program for Automatically Processing Multiple musrfit msr Files
  • + + +
  • + + + View page source + + +
  • + +
+ + +
+
+
+
+
-

msr2data - A Program for Automatically Processing Multiple musrfit msr Files

-

msr2data (originally written by B. M. Wojek) is a program implemented in C++. Its purpose is -to process multiple msr files (input files for musrfit) with the same parameters and summarize the fitting +

msr2data - A Program for Automatically Processing Multiple musrfit msr Files

+

msr2data (originally written by B. M. Wojek) is a program implemented in C++. Its purpose is +to process multiple msr files (input files for musrfit) with the same parameters and summarize the fitting results either in a TRIUMF DB [1] or a column ASCII file. This allows essentially to

  1. Collect the fit parameters.
  2. @@ -60,60 +185,60 @@ results either in a TRIUMF DB [1]For an abridged description of this format see here. The DB files -produced by msr2data can be viewed for instance with mupp or μView see here, however, -they are not completely backward-compatible to the original db language since the parameter names can be longer than five or +produced by msr2data can be viewed for instance with mupp or μView see here, however, +they are not completely backward-compatible to the original db language since the parameter names can be longer than five or six characters! In order to establish this backward compatibility (if needed) the user has to ensure the correct length of the parameter names in the msr files!

    Basic Types of Usage

    -

    Apart from numerous optional parameters that might be set, in principle there are four different ways of calling msr2data. +

    Apart from numerous optional parameters that might be set, in principle there are four different ways of calling msr2data. These differ in how the list of runs which should be processed is supplied:

    msr2data <run> <extension> [optional parameters]
    A single run number.
    msr2data <firstRunNo> <lastRunNo> <extension> [optional parameters]
    -
    An interval of run numbers is specified through the first and the last run number. The condition <firstRunNo> < <lastRunNo> is not necessary.
    +
    An interval of run numbers is specified through the first and the last run number. The condition <firstRunNo> < <lastRunNo> is not necessary.
    msr2data [ <runList> ] <extension> [optional parameters]
    -

    Where <runList> is one or a combination of the following:

    +

    Where <runList> is one or a combination of the following:

      -
    1. <run0>, <run1>, <run2>, ... <runN> : run numbers, e.g. 123 124,
    2. -
    3. <run0>-<runN> : a range, e.g. 123-125 -> 123 124 125,
    4. -
    5. <run0>:<runN>:<step> : a sequence, e.g. 123:127:2 -> 123 125 127. <step> has to be a positive integer.
    6. -
    7. A <runList> can also combine (1)-(3), e.g. 123 128-130 133, etc.
    8. +
    9. <run0>, <run1>, <run2>, ... <runN> : run numbers, e.g. 123 124,
    10. +
    11. <run0>-<runN> : a range, e.g. 123-125 -> 123 124 125,
    12. +
    13. <run0>:<runN>:<step> : a sequence, e.g. 123:127:2 -> 123 125 127. <step> has to be a positive integer.
    14. +
    15. A <runList> can also combine (1)-(3), e.g. 123 128-130 133, etc.
    msr2data <runListFileName> <extension> [optional parameters]
    -
    An ASCII file containing a list of run numbers and optional external parameters is passed to msr2data. For the structure of the ASCII file -see below.
    +
    An ASCII file containing a list of run numbers and optional external parameters is passed to msr2data. For the structure of the ASCII file +see below.
    -

    All four basic types of calling msr2data contain the mandatory file-name <extension> passed right after the list of runs. The meaning of -this <extension> should become clear after giving examples for all four cases:

    -
    $ msr2data 8472 _tf_h13
    +

    All four basic types of calling msr2data contain the mandatory file-name <extension> passed right after the list of runs. The meaning of +this <extension> should become clear after giving examples for all four cases:

    +
    $ msr2data 8472 _tf_h13
     
    -

    generates the DB file out.db (can be changed by using the -o option) from 8472_tf_h13.msr.

    -
    $ msr2data 8472 8474 _tf_h13
    +

    generates the DB file out.db (can be changed by using the -o option) from 8472_tf_h13.msr.

    +
    $ msr2data 8472 8474 _tf_h13
     
    -

    generates the DB file out.db (can be changed by using the -o option) from 8472_tf_h13.msr, 8473_tf_h13.msr, and 8474_tf_h13.msr.

    -
    $ msr2data [8472 8470] _tf_h13
    +

    generates the DB file out.db (can be changed by using the -o option) from 8472_tf_h13.msr, 8473_tf_h13.msr, and 8474_tf_h13.msr.

    +
    $ msr2data [8472 8470] _tf_h13
     
    -

    generates the DB file out.db (can be changed by using the -o option) from 8472_tf_h13.msr and 8470_tf_h13.msr.

    -
    $ msr2data [8470:8474:2] _tf_h13
    +

    generates the DB file out.db (can be changed by using the -o option) from 8472_tf_h13.msr and 8470_tf_h13.msr.

    +
    $ msr2data [8470:8474:2] _tf_h13
     
    -

    generates the DB file out.db (can be changed by using the -o option) from 8470_tf_h13.msr, 8472_tf_h13.msr, and 8474_tf_h13.msr.

    +

    generates the DB file out.db (can be changed by using the -o option) from 8470_tf_h13.msr, 8472_tf_h13.msr, and 8474_tf_h13.msr.

    Run List File Structure

    -
    $ msr2data run.list _tf_h13
    +
    $ msr2data run.list _tf_h13
     
    -

    generates the DB file out.db (can be changed by using the -o option) from all runs listed in the ASCII file run.list in the working directory. -In this file it is also possible to include external parameters which should be put in the resulting DB file. The structure of the run.list is the following:

    -
    RUN VAR1 VAR2 VAR3 ...
    +

    generates the DB file out.db (can be changed by using the -o option) from all runs listed in the ASCII file run.list in the working directory. +In this file it is also possible to include external parameters which should be put in the resulting DB file. The structure of the run.list is the following:

    +
    RUN VAR1 VAR2 VAR3 ...
     8460 200 27.1 46.2 ...
     8472 205 27.1 46.3 ...
     8453 210 27.2 45.9 ...
    @@ -123,18 +248,18 @@ In this file it is also possible to include external parameters which s
     

    The first not commented and not empty line determines the parameter names and labels and has to be present!

    -

    It is allowed to add comments (with a preceding ‘#’) or empty lines to the run-list file.

    +

    It is allowed to add comments (with a preceding ‘#’) or empty lines to the run-list file.

    The following should be mentioned together with the above examples:

      -
    • The output files in the examples above are only newly created if they did not exist before invoking msr2data. +

    • The output files in the examples above are only newly created if they did not exist before invoking msr2data. If the files were already present the msr file data would be appended!

    • If the files have been newly created, also the DB file header is written. If the files were present before, only -the data blocks are appended. The output of the header can either be forced or completely suppressed with the header -and noheader options as shall be seen later.

      +the data blocks are appended. The output of the header can either be forced or completely suppressed with the header +and noheader options as shall be seen later.

    • -
    • If the musrfit output files do not have an <extension> as specified above like 8472.msr one has to call msr2data like in the following example:

      -
      $ msr2data 8472 8460 ""
      +
    • If the musrfit output files do not have an <extension> as specified above like 8472.msr one has to call msr2data like in the following example:

      +
      $ msr2data 8472 8460 ""
       
    • @@ -143,7 +268,7 @@ and noheader options

      Optional Parameters

      -

      As mentioned already above there are some optional parameters which change the behavior of msr2data and can be passed in any order. Here is a complete list:

      +

      As mentioned already above there are some optional parameters which change the behavior of msr2data and can be passed in any order. Here is a complete list:

      data
      The output file format is changed to a simple column ASCII file (default output file name: out.dat).
      @@ -153,79 +278,79 @@ and noheader options
      Force the output of the file header even if the output file was present before.
      noheader
      The output of the file header is suppressed—also if the output file is newly created. -If either both or none of the header options are given, msr2data writes the file header only to new files +If either both or none of the header options are given, msr2data writes the file header only to new files and it solely appends the data blocks to an existing output file assuming that the header is present already.
      nosummary
      There will be no attempt to read additional information like the temperature or the applied magnetic field from the data files even if these information were present there.
      paramList <param>
      -
      option used to select the parameters which shall be exported. <param> is a list of parameter numbers to be exported. -Allowed lists are: <startNo>-<endNo>, e.g. 1-16 will export parameters 1 to 16. Space separated numbers, e.g.: 1 3 5. -A combination of both is possible, e.g. 1-16 19 31 62, and so on.
      +
      option used to select the parameters which shall be exported. <param> is a list of parameter numbers to be exported. +Allowed lists are: <startNo>-<endNo>, e.g. 1-16 will export parameters 1 to 16. Space separated numbers, e.g.: 1 3 5. +A combination of both is possible, e.g. 1-16 19 31 62, and so on.
      -o<outputFileName>, -o <outputFileName>
      -
      The processed data will be written to the file <outputFileName> instead of the default out.db or out.dat. -If <outputFileName> is equal to none (case-insensitive) the parameter data are not appended to any output file.
      +
      The processed data will be written to the file <outputFileName> instead of the default out.db or out.dat. +If <outputFileName> is equal to none (case-insensitive) the parameter data are not appended to any output file.
      fit
      -
      Additionally to the final data collection msr2data will invoke musrfit to fit the specified runs. +
      Additionally to the final data collection msr2data will invoke musrfit to fit the specified runs. All msr files are assumed to be present, none is newly generated!
      fit-<template>[!]
      -
      Additionally to the final data collection msr2data will generate msr files for the runs specified in the list -of runs and invoke musrfit for performing fits of the data. As template for the first run the file -<template><extension>.msr (or if not available: <template><extension>.mlog) is used; the subsequent input -files will be created using the msr output of the last processed runs (“chain fit”). However, if for all runs only -the given template should be used one has to append an exclamation mark (!) to the <template>.
      +
      Additionally to the final data collection msr2data will generate msr files for the runs specified in the list +of runs and invoke musrfit for performing fits of the data. As template for the first run the file +<template><extension>.msr (or if not available: <template><extension>.mlog) is used; the subsequent input +files will be created using the msr output of the last processed runs (“chain fit”). However, if for all runs only +the given template should be used one has to append an exclamation mark (!) to the <template>.
      msr-<template>
      -
      The same as fit-<template>[!], without calling musrfit and the final data collection, i.e. only the msr files for the given runs are generated.
      +
      The same as fit-<template>[!], without calling musrfit and the final data collection, i.e. only the msr files for the given runs are generated.
      -k
      -
      If specified together with the fit-<template> option, the - -keep-mn2-output option is passed to musrfit. +
      If specified together with the fit-<template> option, the - -keep-mn2-output option is passed to musrfit. In the case no fits should be done, this option is ignored.
      -t
      -
      In case this option is given additionally to the fit-<template> option, musrfit is called with -the - -title-from-data-file option. If no fitting is done, this option is ignored.
      +
      In case this option is given additionally to the fit-<template> option, musrfit is called with +the - -title-from-data-file option. If no fitting is done, this option is ignored.

      Examples:

      In order to illustrate the usage of these parameters a few examples with explanations are given below:

      -
      $ msr2data 8400 8460 _tf_h13 -oABC.db fit-8472
      +
      $ msr2data 8400 8460 _tf_h13 -oABC.db fit-8472
       
      -

      Using 8472_tf_h13.msr as first template, msr2data generates subsequent msr input files 8400_tf_h13.msr through 8460_tf_h13.msr, -calls musrfit to perform a fit of these files and collects the results of the fits together with the DB header in the new file ABC.db. -Additionally, some information about external parameters like the temperature will be passed to ABC.db if it is present in the data files.

      -
      $ msr2data [8500 8502-8504 8507] _zf fit-8472 noheader nosummary -o DEF.db
      +

      Using 8472_tf_h13.msr as first template, msr2data generates subsequent msr input files 8400_tf_h13.msr through 8460_tf_h13.msr, +calls musrfit to perform a fit of these files and collects the results of the fits together with the DB header in the new file ABC.db. +Additionally, some information about external parameters like the temperature will be passed to ABC.db if it is present in the data files.

      +
      $ msr2data [8500 8502-8504 8507] _zf fit-8472 noheader nosummary -o DEF.db
       
      -

      Using 8472_zf.msr as first template, msr2data generates subsequent msr input files 8500_zf.msr, 8502_zf.msr, 8503_zf.msr, -8504_zf.msr, and 8507_zf.msr, calls musrfit to perform a fit of these files and collects the results of the fits in the file DEF.db +

      Using 8472_zf.msr as first template, msr2data generates subsequent msr input files 8500_zf.msr, 8502_zf.msr, 8503_zf.msr, +8504_zf.msr, and 8507_zf.msr, calls musrfit to perform a fit of these files and collects the results of the fits in the file DEF.db without writing the DB file header or attempting to read additional information from the data files.

      -
      $ msr2data 8595 8585 "" noheader fit-8472! -oGHI.dat data nosummary -k
      +
      $ msr2data 8595 8585 "" noheader fit-8472! -oGHI.dat data nosummary -k
       
      -

      Using 8472.msr as template for all runs, msr2data generates the msr input files 8595.msr through 8585.msr, calls musrfit with -the option --keep-mn2-ouput to perform a fit of these files and collects the results of the fits in the column-structured ASCII file GHI.dat +

      Using 8472.msr as template for all runs, msr2data generates the msr input files 8595.msr through 8585.msr, calls musrfit with +the option --keep-mn2-ouput to perform a fit of these files and collects the results of the fits in the column-structured ASCII file GHI.dat without writing any file header or attempting to read additional information from the data files.

      -
      $ msr2data 8472 8475 "" fit -o none
      +
      $ msr2data 8472 8475 "" fit -o none
       
      -

      Take the given msr files 8472.msr through 8475.msr and call musrfit without finally summarizing the results.

      -
      $ msr2data 8472 8475 _tf_h13 msr-8471!
      +

      Take the given msr files 8472.msr through 8475.msr and call musrfit without finally summarizing the results.

      +
      $ msr2data 8472 8475 _tf_h13 msr-8471!
       
      -

      Using 8471_tf_h13.msr as template for all runs, msr2data generates the msr input files 8472_tf_h13.msr through 8475_tf_h13.msr. +

      Using 8471_tf_h13.msr as template for all runs, msr2data generates the msr input files 8472_tf_h13.msr through 8475_tf_h13.msr. No fitting will be performed and no DB or ASCII output will be generated!

      -
      $ msr2data [8472 8475-8479] _tf_h13 paramList 1-16 data -o bestData.dat
      +
      $ msr2data [8472 8475-8479] _tf_h13 paramList 1-16 data -o bestData.dat
       
      -

      Will collect the parameters 1 to 16 from the msr-files 8472_tf_h13.msr, 8475_tf_h13.msr, 8476_tf_h13.msr, 8477_tf_h13.msr, 8478_tf_h13.msr, -and 8479_tf_h13.msr and write these parameters into a column like output file bestData.dat.

      +

      Will collect the parameters 1 to 16 from the msr-files 8472_tf_h13.msr, 8475_tf_h13.msr, 8476_tf_h13.msr, 8477_tf_h13.msr, 8478_tf_h13.msr, +and 8479_tf_h13.msr and write these parameters into a column like output file bestData.dat.

      The Global Mode

      -

      Apart from all the options described above there is another program option: global. -This option changes the general behavior of msr2data in that way that instead of processing one msr file for each +

      Apart from all the options described above there is another program option: global. +This option changes the general behavior of msr2data in that way that instead of processing one msr file for each run it combines all specified runs in one single msr file with the possibility to define common parameters for all runs as well as run-specific parameters. When writing the obtained parameters to a DB file or a column-structured ASCII file that single msr file is read and the parameters valid for each run are extracted. The global option can be -used in conjunction with any of the described invocations of msr2data and together with all options stated above.

      +used in conjunction with any of the described invocations of msr2data and together with all options stated above.

      File Generation

      The general idea of this mode is to generate a global msr file on the basis of a working single-run msr file. For this @@ -233,48 +358,48 @@ purpose a single-run template containing information about common and run-specif parameters are identified through their parameter names:

      run-specific parameters
      -
      these parameters are tagged with the current run number in the format %0Xu, i.e. X digits with leading zeros, -at the end of the parameter name, e.g. for a 4-digit-formatted run number alpha0123 if the run number was 123 or -for a 8-digit-formatted run number alpha00123456 if the run number was 123456. X has to be at least 4.
      +
      these parameters are tagged with the current run number in the format %0Xu, i.e. X digits with leading zeros, +at the end of the parameter name, e.g. for a 4-digit-formatted run number alpha0123 if the run number was 123 or +for a 8-digit-formatted run number alpha00123456 if the run number was 123456. X has to be at least 4.
      common parameters
      all parameters that are not run specific
      -

      The FITPARAMETER block of an exemplary template file 8472_example.msr could therefore look like:

      -
      FITPARAMETER
      -#       No   Name      Value     Step        Pos_Error    Boundaries
      -        1    Phase     35.8359   -3.94496    3.93749
      -        2    Asy8472   0.04501   -0.00208    0.00211      0       0.33
      -        3    Field     143.212   -0.27960    0.27885      100     200
      -        4    Rate8472  0.14245   -0.02501    0.02279      0       1
      +

      The FITPARAMETER block of an exemplary template file 8472_example.msr could therefore look like:

      +
      FITPARAMETER
      +#       No   Name      Value     Step        Pos_Error    Boundaries
      +        1    Phase     35.8359   -3.94496    3.93749
      +        2    Asy8472   0.04501   -0.00208    0.00211      0       0.33
      +        3    Field     143.212   -0.27960    0.27885      100     200
      +        4    Rate8472  0.14245   -0.02501    0.02279      0       1
       

      Here the parameters 2 and 4 would be treated as run-specific whereas the parameters 1 and 3 would be common to the original and all newly added runs.

      -

      Normally, within the template file there should not appear explicitly any run-specific parameters in the THEORY and -FUNCTIONS blocks. If however, those parameters are met, msr2data will try to substitute them by mapped parameters -and add them accordingly to the map contained in each RUN block.

      -

      When msr2data is called to generate a global msr file, e.g.

      -
      $ msr2data 8471 8470 _example msr-8472 global
      +

      Normally, within the template file there should not appear explicitly any run-specific parameters in the THEORY and +FUNCTIONS blocks. If however, those parameters are met, msr2data will try to substitute them by mapped parameters +and add them accordingly to the map contained in each RUN block.

      +

      When msr2data is called to generate a global msr file, e.g.

      +
      $ msr2data 8471 8470 _example msr-8472 global
       
      -

      a new msr file 8471+global_example.msr is created. As can be seen in the example, the name of the global msr file always starts with the -first specified run number followed by the +global identifier and the template <extension>. The example’s global FITPARAMETER block would be:

      -
      FITPARAMETER
      -#       No   Name      Value     Step        Pos_Error    Boundaries
      +

      a new msr file 8471+global_example.msr is created. As can be seen in the example, the name of the global msr file always starts with the +first specified run number followed by the +global identifier and the template <extension>. The example’s global FITPARAMETER block would be:

      +
      FITPARAMETER
      +#       No   Name      Value     Step        Pos_Error    Boundaries
       
      -# Common parameters for all runs
      +# Common parameters for all runs
       
      -        1    Phase     35.8359   -3.94496    3.93749
      -        2    Field     143.212   -0.27960    0.27885      100     200
      +        1    Phase     35.8359   -3.94496    3.93749
      +        2    Field     143.212   -0.27960    0.27885      100     200
       
      -# Specific parameters for run 8471
      +# Specific parameters for run 8471
       
      -        3    Asy8471   0.04501   -0.00208    0.00211      0       0.33
      -        4    Rate8471  0.14245   -0.02501    0.02279      0       1
      +        3    Asy8471   0.04501   -0.00208    0.00211      0       0.33
      +        4    Rate8471  0.14245   -0.02501    0.02279      0       1
       
      -# Specific parameters for run 8470
      +# Specific parameters for run 8470
       
      -        5    Asy8470   0.04501   -0.00208    0.00211      0       0.33
      -        6    Rate8470  0.14245   -0.02501    0.02279      0       1
      +        5    Asy8470   0.04501   -0.00208    0.00211      0       0.33
      +        6    Rate8470  0.14245   -0.02501    0.02279      0       1
       

      This shows that the fit parameters are reorganized in a way that the common parameters appear at the beginning of the parameter list and they are @@ -289,7 +414,7 @@ created — for each run as many as found for the template run.

      Parameter Extraction

      After fitting some model to the specified data the fit parameters can be extracted from the global msr file to a DB or column-structured ASCII file; -as usual this includes also parameters stored in the run data files or externally specified parameters given in a run-list file. +as usual this includes also parameters stored in the run data files or externally specified parameters given in a run-list file. In order to reach this goal the global msr file has to obey certain rules:

      • The order of the parameters has to match the one described above, meaning the common parameters are listed first followed by @@ -297,35 +422,35 @@ the same number of parameters specific to each run tagged by the according run n having the same order as the specified list of runs.
      • The RUN blocks have to be ordered according to the list of runs to be processed.
      -

      Following these rules – which is achieved most easily by generating the global msr file using msr2data as shown above – the parameters can be extracted e.g. like

      -
      $ msr2data 8471 8470 _example global data -o globalFit.dat
      +

      Following these rules – which is achieved most easily by generating the global msr file using msr2data as shown above – the parameters can be extracted e.g. like

      +
      $ msr2data 8471 8470 _example global data -o globalFit.dat
       
      -

      This will read in the file 8471+global_example.msr, extract for each run all relevant parameters from the msr file as well as -from the according data files (if available) and append all of them in columns to the ASCII file globalFit.dat.

      +

      This will read in the file 8471+global_example.msr, extract for each run all relevant parameters from the msr file as well as +from the according data files (if available) and append all of them in columns to the ASCII file globalFit.dat.

      The Extended Global Mode

      If a new global input file is generated, it is also possible to do an automatic pre-analysis for each single run using the specified template first; afterwards the run-specific parameters of these single-run msr files are collected into the global msr file. In special cases this might be useful -to obtain a better set of starting values for the parameters, however, in most cases it will not replace the “manual review” of the generated global +to obtain a better set of starting values for the parameters, however, in most cases it will not replace the “manual review” of the generated global input file. The option is activated by choosing the keyword global+. For example

      -
      $ msr2data 8471 8470 _example global+ msr-8472
      +
      $ msr2data 8471 8470 _example global+ msr-8472
       
      -

      Here, 8472_example.msr is first used as template to generate the file 8471-OneRunFit_example.msr, then musrfit is called for it, the result -is used to generate 8470-OneRunFit_example.msr and musrfit is called for that file. Finally, the global fit file 8471+global_example.msr is -produced — including the fit results of the OneRunFit files for the run-specific parameters.

      +

      Here, 8472_example.msr is first used as template to generate the file 8471-OneRunFit_example.msr, then musrfit is called for it, the result +is used to generate 8470-OneRunFit_example.msr and musrfit is called for that file. Finally, the global fit file 8471+global_example.msr is +produced — including the fit results of the OneRunFit files for the run-specific parameters.

      By appending an exclamation mark ! to the global+ option, the given template will be used for every new file generation (similar to the fit option explained before). The +[!] extension will be ignored, if no new global input file is generated. The single run msr files are not deleted at the moment. The information contained in them might be useful for some people. Of course the data can also -be collected by msr2data. E.g. in order to produce a DB file OneRunFits.db one could call

      -
      $ msr2data 8471 8470 -OneRunFit_example -o OneRunFits.db
      +be collected by msr2data. E.g. in order to produce a DB file OneRunFits.db one could call

      +
      $ msr2data 8471 8470 -OneRunFit_example -o OneRunFits.db
       

      Note

      -

      Please be aware that the program in this mode always generates new single-run msr files and always calls musrfit for them. In case there are +

      Please be aware that the program in this mode always generates new single-run msr files and always calls musrfit for them. In case there are already single-run fits present, these cannot be used in conjunction with this option. The program on purpose behaves in this way in order to ensure the file integrity and correct parameter order within these files.

      @@ -335,54 +460,104 @@ the file integrity and correct parameter order within these files.

      Known Limitations

      • The indexing run number of the msr file has to be at the begin of every filename.
      • -
      • Within the data file name the RUN# has the format %0Xu, i.e. X digits with leading zeros, and has to be the rightmost number given in this -format in the file name. X has to be at least 4. The highest treatable run number is \(2^{32}-1 = 4294967295\).
      • -
      • In order to keep msr2data working properly the msr files should only contain one STATISTIC block at the end of the file and one FITPARAMETER block -right after the TITLE — musrfit itself allows to have more creative msr files...
      • -
      • The msr-file generation from a template takes only care of runs given on the first line of a RUN block. ADDRUN statements are simply -copied! Since this is most probably not what one likes to do, it is suggested not to use the fit-<template> and msr-<template> options if +
      • Within the data file name the RUN# has the format %0Xu, i.e. X digits with leading zeros, and has to be the rightmost number given in this +format in the file name. X has to be at least 4. The highest treatable run number is \(2^{32}-1 = 4294967295\).
      • +
      • In order to keep msr2data working properly the msr files should only contain one STATISTIC block at the end of the file and one FITPARAMETER block +right after the TITLE — musrfit itself allows to have more creative msr files…
      • +
      • The msr-file generation from a template takes only care of runs given on the first line of a RUN block. ADDRUN statements are simply +copied! Since this is most probably not what one likes to do, it is suggested not to use the fit-<template> and msr-<template> options if ADDRUN statements were present in the template file.
      • -
      • msr2data will write only up to two successive empty lines in newly generated msr files. In case more subsequent empty lines are encountered in a template file, +
      • msr2data will write only up to two successive empty lines in newly generated msr files. In case more subsequent empty lines are encountered in a template file, these are not copied! Actually, this measure is not a limitation but has been introduced to keep the msr files in a reasonable shape.

      The Graphical User Interface for msr2data Provided by musredit

      -

      musredit, designed especially for the manipulation of musrfit msr files and graphical front ends to musrfit, offer an almost -self-explanatory graphical user interface to msr2data depicted below:

      -
        -
      1. and 2. Choose one of the ways to specify your list of runs as described under basic usage.
      2. +

        musredit, designed especially for the manipulation of musrfit msr files and graphical front ends to musrfit, offer an almost +self-explanatory graphical user interface to msr2data depicted below:

        +_images/msr2data-GUI.svg
          +
        1. and 2. Choose one of the ways to specify your list of runs as described under basic usage.
          -
        1. Give the file extension here, e.g. _zf for files like 8472_zf.msr. If the files do not have an extension this -field stays empty. musredit takes care of passing the “” to msr2data as mentioned above.
        2. -
        3. Activates the fit-<template> option if <template> is entered. In case the option Chain Fit is not set the +
        4. Give the file extension here, e.g. _zf for files like 8472_zf.msr. If the files do not have an extension this +field stays empty. musredit takes care of passing the “” to msr2data as mentioned above.
        5. +
        6. Activates the fit-<template> option if <template> is entered. In case the option Chain Fit is not set the given template will be used for the input-file generation for all runs to be fitted — otherwise the output of the first fit serves as template for the second and so on. The template field stays empty if no fits should be performed!
        7. -
        8. Activates the -o <outputFileName> option if <outputFileName> is entered. If nothing is entered the default output file out.db or out.dat is used.
        9. +
        10. Activates the -o <outputFileName> option if <outputFileName> is entered. If nothing is entered the default output file out.db or out.dat is used.
        -

        The options tags correspond essentially to the description in optional parameters.

        +

        The options tags correspond essentially to the description in optional parameters.

      -
      -
      +
      + +
      + + +
      - - +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/mupp.html b/doc/html/mupp.html index 85619877..cda8c6c5 100644 --- a/doc/html/mupp.html +++ b/doc/html/mupp.html @@ -1,60 +1,178 @@ - - - - + + + + + + + + + mupp - μSR Parameter Plotter — musrfit 1.8.2 documentation + + + + + + + + + + + - mupp - μSR Parameter Plotter — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

- musrfit 1.8.0 documentation

-

mupp - μSR Parameter Plotter

-
-
- -

- «  musredit: the GUI Based Interface to musrfit -   ::   - Contents -   ::   - msr2data - A Program for Automatically Processing Multiple musrfit msr Files  » -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+

mupp - μSR Parameter Plotter

-

mupp is a little helper program which allows to quickly plot a collection of msr-file parameters, -as for instance generated by msr2data. It can handle db- and dat-files. -Also a collection of msr-files can be invoked. mupp is heavily inspired by μView (see +

mupp is a little helper program which allows to quickly plot a collection of msr-file parameters, +as for instance generated by msr2data. It can handle db- and dat-files. +Also a collection of msr-files can be invoked. mupp is heavily inspired by μView (see here).

-

mupp can be operated from within as graphical user interface or via a command line scripting interface. -The mupp GUI can be invoked either directly from the command line or from within musredit.

+

mupp can be operated from within as graphical user interface or via a command line scripting interface. +The mupp GUI can be invoked either directly from the command line or from within musredit.

Each collection bundles a number of runs, where a run is a single μSR measurement. A run is analyzed by a number of parameters (defined in the msr-files), and complemented by additional physical parameters as the temperature, magnetic field, implantation energy, etc. @@ -62,56 +180,56 @@ Hence parameters can be seen as vectors and can be plot against each other.

The Graphical User Interface

A typical setting could look like this

-
    -
  1. shows the list of loaded collections. A collection is defined as db- or dat-file (typically the -output from msr2data). If you call the open-dialog and select a collection of -msr-files, mupp will call msr2data and tries to generate a collection on-the-fly.

    +_images/mupp-gui-0.svg
      +
    1. shows the list of loaded collections. A collection is defined as db- or dat-file (typically the +output from msr2data). If you call the open-dialog and select a collection of +msr-files, mupp will call msr2data and tries to generate a collection on-the-fly.

    2. in this list, the data-tags of the currently selected collection is presented. The data-tags can be -directly dragged over to the x- and y-axis list. Another way is to select the data-tag -wished and click add X to add the selected data-tag to the x-axis list. Analogous it is done -for the y-axis.

      +directly dragged over to the x- and y-axis list. Another way is to select the data-tag +wished and click add X to add the selected data-tag to the x-axis list. Analogous it is done +for the y-axis.

    3. -
    4. x-axis list. The labels are followed by (-X-) where the number X corresponds to the +

    5. x-axis list. The labels are followed by (-X-) where the number X corresponds to the selection it corresponds to. The numbering of the collection is as given in the collection list.

    6. -
    7. y-axis list. The labels are followed by (-X-) where the number X corresponds to the +

    8. y-axis list. The labels are followed by (-X-) where the number X corresponds to the selection it corresponds to. The numbering of the collection is as given in the collection list.

    9. -
    10. add X allows to add the currently selected data-tag to the x-axis list.

      +
    11. add X allows to add the currently selected data-tag to the x-axis list.

    12. -
    13. add Y allows to add the currently selected data-tag to the y-axis list.

      +
    14. add Y allows to add the currently selected data-tag to the y-axis list.

    15. -
    16. remove X will remove the selected x-axis tag.

      +
    17. remove X will remove the selected x-axis tag.

    18. -
    19. remove Y will remove the selected y-axis tag.

      +
    20. remove Y will remove the selected y-axis tag.

    21. Often one would like to compare trends of different settings. In the above example each collections holds an energy scans for a given temperature. Each collection is measured at a different temperature. -Now, instead of adding x- and y-axis tags for each collection, you can do the following: -you add x- and y-axis data-tags for the first collection. Afterwards you select all the other -collections of interest and click on Add Ditto. mupp will then add the corresponding -x- and y-axis data-tags accordingly. This is less error prone and quicker!

      +Now, instead of adding x- and y-axis tags for each collection, you can do the following: +you add x- and y-axis data-tags for the first collection. Afterwards you select all the other +collections of interest and click on Add Ditto. mupp will then add the corresponding +x- and y-axis data-tags accordingly. This is less error prone and quicker!

    22. -
    23. Clicking the Plot button will invoke mupp_plot (a ROOT based application) which will +

    24. Clicking the Plot button will invoke mupp_plot (a ROOT based application) which will present the data, as shown here

      - +_images/mupp-plot-0.svg
    25. -
    26. Remove Collection: will remove the selected collection

      +
    27. Remove Collection: will remove the selected collection

    28. -
    29. Refresh Collection: will reload the collection (db- or dat-file). This is often useful +

    30. Refresh Collection: will reload the collection (db- or dat-file). This is often useful during beamtime where the collection is growing run-by-run.

    31. Command history window.

    32. This is the script command line. Currently it allows to perform the tasks without mouse gambling. -In the future much more commands are planed. See the Help / Cmd's for the currently available +In the future much more commands are planed. See the Help / Cmd's for the currently available commands.

    Define Variable Dialog

    -
      +_images/mupp-add-var.svg
      1. Variable text edit window.
      2. Collection link window.
      3. Shows the parameters of the selected collection.
      4. @@ -121,54 +239,54 @@ commands.

        A variable defined here is a mathematical expression defined by parameters of loaded collections. Since a parameter also has an associated error, also newly defined variables always need to be defined together with a corresponding error variable. If the name of a variable is defined -as SigmaSC_10 (see the above snapshot), the error variable need to be named as SigmaSC_10Err.

        -

        Currently the following mathematical functions are defined: max, min, abs, sin, cos, -tan, exp, log, ln, pow.

        +as SigmaSC_10 (see the above snapshot), the error variable need to be named as SigmaSC_10Err.

        +

        Currently the following mathematical functions are defined: max, min, abs, sin, cos, +tan, exp, log, ln, pow.

The Scripting Interface

-

mupp can also be operated in a scripting like manner. The use cases are plot updates during run time, -or web-based interaction which requests figures. A script is invoked by the command line option -s (see -mupp command line summary. Currently the following scripting commands are available:

+

mupp can also be operated in a scripting like manner. The use cases are plot updates during run time, +or web-based interaction which requests figures. A script is invoked by the command line option -s (see +mupp command line summary. Currently the following scripting commands are available:

loadPath <dir>
-
set the load path to <dir>. Bash variables like $HOME are accepted. This is the path where to look for collection files (db- and dat-files).
+
set the load path to <dir>. Bash variables like $HOME are accepted. This is the path where to look for collection files (db- and dat-files).
load <coll>
-
will load the collection <coll>.
+
will load the collection <coll>.
selectAll
will select all loaded collections. This means every plot of variable x/y will be carried out to ALL collections.
select <nn>
-
selects collection <nn>, where <nn> is either the number of the collections, or its name, e.g. +
selects collection <nn>, where <nn> is either the number of the collections, or its name, e.g. select YBCO-40nm-T5K-FC150mT-Escan.db.
x <label>
-
add <label> as a x-variable. Only one is allowed.
+
add <label> as a x-variable. Only one is allowed.
y <label(s)>
-
add <label(s)> as y-variable. Multiple labels are possible.
+
add <label(s)> as y-variable. Multiple labels are possible.
norm
this will normalize all the y-variables by their maximum.
savePath <dir>
-
set the save path to <dir>. The place where the macros, and/or the plot output will be saved.
+
set the save path to <dir>. The place where the macros, and/or the plot output will be saved.
plot <fln>
-
where <fln> is the file name with extension under which the plot should be saved.
+
where <fln> is the file name with extension under which the plot should be saved.
macro <fln>
-
where <fln> is the file name under which the root macro should be saved.
+
where <fln> is the file name under which the root macro should be saved.
var <var_name> = <expr>

defines a variable. <expr> is a mathematical expression where collection variables are addressed -via the ‘$’, e.g. dataT is addressed by $dataT, etc. An example:

-

var invT = 1000.0 / $dataT

+via the ‘$’, e.g. dataT is addressed by $dataT, etc. An example:

+

var invT = 1000.0 / $dataT

Each variable has to be accompanied by its error variable. An error variable -is defined by the <var_name> followed by Err +is defined by the <var_name> followed by Err For the above example the error variable is

-

var invTErr = $invT * $dataTErr / $dataT

+

var invTErr = $invT * $dataTErr / $dataT

col <nn> : <var_name>
links <var_name> to the collection <nn>, where <nn> is the number of the collection as defined by the order of load, starting with 0.
-

An example script file sigmaSC-vs-temp.txt might look like this:

-
# This is a comment
+

An example script file sigmaSC-vs-temp.txt might look like this:

+
# This is a comment
 # Script: sigmaSC-vs-temp.txt
 
 loadPath ./
@@ -216,7 +334,7 @@ macro SigmaSCVsTemp.C
 

The Usage Summary

-
usage: mupp [OPTIONS] [[--path <fit-param-path>] <fit-param-file-names>]
+
usage: mupp [OPTIONS] [[--path <fit-param-path>] <fit-param-file-names>]
 
 OPTIONS:
   -h, --help: this help
@@ -263,23 +381,73 @@ SCRIPT COMMANDS:
 
-
-
+
+ +
+ + +
- - +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/musr-root.html b/doc/html/musr-root.html index 64021976..8d6fd36c 100644 --- a/doc/html/musr-root.html +++ b/doc/html/musr-root.html @@ -1,127 +1,263 @@ - - - - + + + + + + + + + MusrRoot - an Extensible Open File Format for μSR — musrfit 1.8.2 documentation + + + + + + + + + + + - MusrRoot - an Extensible Open File Format for μSR — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

- musrfit 1.8.0 documentation

-

MusrRoot - an Extensible Open File Format for μSR

-
-
- -

- «  any2many - a Universal μSR-file-format converter -   ::   - Contents -   ::   - Acknowledgements  » -

+ + + + + + + + +
+ + + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • MusrRoot - an Extensible Open File Format for μSR
  • + + +
  • + + + View page source + + +
  • + +
+ + +
+
+
+
+

MusrRoot - an Extensible Open File Format for μSR

Until 2011 different μSR file formats were used within PSI. The bulk-μSR instruments were -writing their data in the PSI-BIN file format, which is a fixed binary format with rather stringent +writing their data in the PSI-BIN file format, which is a fixed binary format with rather stringent limitations. The LE-μSR (LEM) instrument was using a ROOT (CERN) based file format which was tightly tailored to the special needs of the LEM instrument. This situation was unsatisfactorily and hence it -was decided to move forward to a open file format called MusrRoot to be described in the following.

+was decided to move forward to a open file format called MusrRoot to be described in the following.

Some Basics Concerning ROOT Files

The μSR data acquisition systems at PSI are utilizing MIDAS (see Midas Home Page). The MIDAS analyzer, which is responsible to build histograms, especially the μSR decay histograms, makes it very easy to build ROOT (see ROOT/CERN home page ) histogram objects (these -are TH1F objects for μSR decay histograms). ROOT is a C++ object-oriented data mining and -analysis frame work. These histograms can be collected and saved in ROOT files (TFile). In order to ease +are TH1F objects for μSR decay histograms). ROOT is a C++ object-oriented data mining and +analysis frame work. These histograms can be collected and saved in ROOT files (TFile). In order to ease the understanding of the upcoming definitions, a few ROOT related things shall be summaries here. For details concerning the ROOT frame work documentation please check ROOT/CERN Users Guide(s) and ROOT/CERN Reference Guide.

-

ROOT files (TFile) are binary files which can hold any kind of objects. A TFile is organized similarly -to a directory structure of an operating system. Within the ROOT framework, there is a TFile browser available -which allows to inspect these files. This browser (TBrowser) will show all object saved in the TFile directly, -if they derive from TObject.

-

The MusrRoot file format to be described below is only using a small subset of possible ROOT objects, namely:

+

ROOT files (TFile) are binary files which can hold any kind of objects. A TFile is organized similarly +to a directory structure of an operating system. Within the ROOT framework, there is a TFile browser available +which allows to inspect these files. This browser (TBrowser) will show all object saved in the TFile directly, +if they derive from TObject.

+

The MusrRoot file format to be described below is only using a small subset of possible ROOT objects, namely:

    -
  • TFolder: this are the top level objects in the MusrRoot file.
  • -
  • TH1F: Hold the μ-decay-histograms.
  • -
  • TObjArray: Holding collection of header information.
  • -
  • TObjString: Holding the content of any header information.
  • +
  • TFolder: this are the top level objects in the MusrRoot file.
  • +
  • TH1F: Hold the μ-decay-histograms.
  • +
  • TObjArray: Holding collection of header information.
  • +
  • TObjString: Holding the content of any header information.
-

Since all these objects are deriving form TObject, they will be directly accessible via the TBrowser-object. +

Since all these objects are deriving form TObject, they will be directly accessible via the TBrowser-object. For instance, the μ-decay-histograms can be directly plotted, are even fitted, out of the box.

MusrRoot an Extensible Open File Format for μSR

As mentioned before, ROOT files are open-file-format files meaning that they can contain more entries (and most probably will) than the ones specified in the following. The specified ones will be the mandatory ones for all instruments. Before defining all mandatory entries, the MusrRoot file structure shall be sketched.

The MusrRoot file structure looks like:

-
histos ---|
-          |- DecayAnaModule ---|
-          |                    |- hDecay001
-          |                    |- hDecay002
-          |                    ...
-          |
-          |- SCAnaModule ---|
-          ...               |- hSampleTemperature
-                            |- hSampleMagneticField
-                            ...
-RunHeader ---|
-             |- RunInfo
-             |- DetectorInfo ---|
-             |                  |- Detector001
-             |                  |- Detector002
-             |                  ...
-             |
-             |- SampleEnvironmentInfo
-             |- MagneticFieldEnvironmentInfo
-             |- BeamlineInfo
-             ...
+
histos ---|
+          |- DecayAnaModule ---|
+          |                    |- hDecay001
+          |                    |- hDecay002
+          |                    ...
+          |
+          |- SCAnaModule ---|
+          ...               |- hSampleTemperature
+                            |- hSampleMagneticField
+                            ...
+RunHeader ---|
+             |- RunInfo
+             |- DetectorInfo ---|
+             |                  |- Detector001
+             |                  |- Detector002
+             |                  ...
+             |
+             |- SampleEnvironmentInfo
+             |- MagneticFieldEnvironmentInfo
+             |- BeamlineInfo
+             ...
 
-

where hDecay001, etc. are ROOT histograms (to be more specific: TH1F), containing the μSR decay histograms. There can be as many as needed, especially there is no limitation about their length. The histogram object names will be hDecayXXX, where XXX (leading zero int, i.e. %03d -in C/C++ notation, starting with ‘1’) is the histogram number. The title and name of the histogram (see description of the TH1F ROOT class) contains the label of the histogram, like ‘top’, ‘forward’, etc. How many of these histograms are present is accessible through the RunInfo folder in which the necessary header information are found (details see next sections). The folder SCAnaModule 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.

+

where hDecay001, etc. are ROOT histograms (to be more specific: TH1F), containing the μSR decay histograms. There can be as many as needed, especially there is no limitation about their length. The histogram object names will be hDecayXXX, where XXX (leading zero int, i.e. %03d +in C/C++ notation, starting with ‘1’) is the histogram number. The title and name of the histogram (see description of the TH1F ROOT class) contains the label of the histogram, like ‘top’, ‘forward’, etc. How many of these histograms are present is accessible through the RunInfo folder in which the necessary header information are found (details see next sections). The folder SCAnaModule 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.

-

Run Information Contained in RunHeader

-

The RunHeader contains all needed meta-information to describe a μSR-run. The list of the minimal number of required “folders” of the RunHeader is given in the following structure:

-
RunHeader (TFolder) ---|
-                       |- RunInfo (TObjArray)
-                       |- DetectorInfo (TObjArray)
-                       |- SampleEnvironmentInfo (TObjArray)
-                       |- MagneticFieldEnvironmentInfo (TObjArray)
-                       |- BeamlineInfo (TObjArray)
+

Run Information Contained in RunHeader

+

The RunHeader contains all needed meta-information to describe a μSR-run. The list of the minimal number of required “folders” of the RunHeader is given in the following structure:

+
RunHeader (TFolder) ---|
+                       |- RunInfo (TObjArray)
+                       |- DetectorInfo (TObjArray)
+                       |- SampleEnvironmentInfo (TObjArray)
+                       |- MagneticFieldEnvironmentInfo (TObjArray)
+                       |- BeamlineInfo (TObjArray)
 
-

In brackets the object type is given. RunInfo contains most information relevant for the user and will be itemized in RunInfo Overview and RunInfo Required. DetectorInfo contains detector specific information, like detector name, time zero bin, etc. (details is found under DetectorInfo Required). SampleEnvironmentInfo (details under SampleEnvironmentInfo Required), and MagneticFieldEnvironmentInfo (details under MagneticFieldEnvironmentInfo Required) store additional, more detailed information concerning the sample environment. BeamlineInfo stores beamline relevant information (details under BeamlineInfo Required).

-

Before elaborating more on the required items within this structure, a few words on the ROOT types used here: RunHeader is a TFolder object. All the “sub-directory” entries are of type TObjArray and collect items of type TObjString or other TObjArray (i.e. sub-directories and sub-sub-directories, etc.).

+

In brackets the object type is given. RunInfo contains most information relevant for the user and will be itemized in RunInfo Overview and RunInfo Required. DetectorInfo contains detector specific information, like detector name, time zero bin, etc. (details is found under DetectorInfo Required). SampleEnvironmentInfo (details under SampleEnvironmentInfo Required), and MagneticFieldEnvironmentInfo (details under MagneticFieldEnvironmentInfo Required) store additional, more detailed information concerning the sample environment. BeamlineInfo stores beamline relevant information (details under BeamlineInfo Required).

+

Before elaborating more on the required items within this structure, a few words on the ROOT types used here: RunHeader is a TFolder object. All the “sub-directory” entries are of type TObjArray and collect items of type TObjString or other TObjArray (i.e. sub-directories and sub-sub-directories, etc.).

-

RunInfo Overview

+

RunInfo Overview

@@ -136,122 +272,122 @@ in C/C++ notation, st - - + + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - + - +
VersionTStringGIT version of TMusrRunHeaderTStringGIT version of TMusrRunHeader
Generic Validator URLTStringURL of the generic MusrRoot validation xsd-file.TStringURL of the generic MusrRoot validation xsd-file.
Specific Validator URLTStringTString URL of the instrument specific validation xsd-file.
GeneratorTStringProgram which wrote the MusrRoot file, e.g. nemu_analyzerTStringProgram which wrote the MusrRoot file, e.g. nemu_analyzer
File NameTStringFile name of the MusrRoot file, e.g. deltat_tdc_gps_4295.rootTStringFile name of the MusrRoot file, e.g. deltat_tdc_gps_4295.root
Run TitleTString TString 
Run NumberInt_t Int_t 
Run Start TimeTStringTString ISO 8601 date time
Run Stop TimeTStringTString ISO 8601 date time
Run DurationTMusrRunPhysicalQuantityTMusrRunPhysicalQuantity run duration in sec
LaboratoryTStringTString e.g. PSI
InstrumentTStringTString e.g. GPS
Muon Beam MomentumTMusrRunPhysicalQuantityTMusrRunPhysicalQuantity e.g. 28.1 MeV/c
Muon SpeciesTStringTString positive, or negative muon
Muon SourceTStringe.g. Target E - Low Energy Muons or “Target M” ...TStringe.g. Target E - Low Energy Muons or “Target M” …
SetupTString TString 
CommentTString TString 
Sample NameTString TString 
Sample TemperatureTMusrRunPhysicalQuantityTMusrRunPhysicalQuantity e.g. 3.21 +- 0.05 K; SP: 3.2; CF1
Sample Magnetic FieldTMusrRunPhysicalQuantityTMusrRunPhysicalQuantity e.g. 350.002 +- 0.005 G; SP: 350; WXY
No of HistosInt_t Int_t 
Time ResolutionTMusrRunPhysicalQuantityTMusrRunPhysicalQuantity e.g. 0.1953125 ns
RedGreen OffsetsTIntVectorTIntVector e.g. 0; 20
-

These entries should be clear except for the RedGreen Offsets and the column “Internal Type” which shortly will be discussed before specifying the content of the other required folders.

+

These entries should be clear except for the RedGreen Offsets and the column “Internal Type” which shortly will be discussed before specifying the content of the other required folders.

    -
  1. RedGreen Offsets: in case experiments are performed with external stimuli, there will be a collection of related histograms. +

  2. RedGreen Offsets: in case experiments are performed with external stimuli, there will be a collection of related histograms. For instance for electrical field experiments, there will be histograms for field on/off, doubling the number of needed histograms. -In order to distinguish them easier in the data file, the RedGreen Offsets were introduced. One selection of histograms +In order to distinguish them easier in the data file, the RedGreen Offsets were introduced. One selection of histograms (assuming for the moment 8 detectors) will be numbered from 1 to 8 (lets say the field off ones). The other set of histograms (field on in this example) will then start with 21 through 28 (see table above). The same will be true for the detector information -(see DetectorInfo Required). The entry No of Histos will only give 8 for the given example, -meaning that red/green multiplication is defined rather via RedGreen Offsets than the number of histograms.

    +(see DetectorInfo Required). The entry No of Histos will only give 8 for the given example, +meaning that red/green multiplication is defined rather via RedGreen Offsets than the number of histograms.

  3. -
  4. Internal Types: in order to ease the handling of the MusrRoot run header, a class TMusrRunHeader is available which deals -with it. The “Internal Type” specified, corresponds to the internal representation in within this class. In the MusrRoot file -these entries are all saved as browsable ROOT strings (TObjStringv). The only special type is ``TMusrRunPhysicalQuantity which +

  5. Internal Types: in order to ease the handling of the MusrRoot run header, a class TMusrRunHeader is available which deals +with it. The “Internal Type” specified, corresponds to the internal representation in within this class. In the MusrRoot file +these entries are all saved as browsable ROOT strings (TObjStringv). The only special type is ``TMusrRunPhysicalQuantity which is introduced to deal with physical quantities. They always can be represented in the following way:

    -
    <property name> <value> +- <estimated error> <unit>; SP: <demand>; <description>
    +
    <property name> <value> +- <estimated error> <unit>; SP: <demand>; <description>
     
-

Not all of these values are needed to be given and depending on which are given, the representation in the MusrRootv file will be different (handled by ``TMusrRunHeader). Examples are given in the comment column of the table above. For details see TMusrRunPhysicalQuantity - Possible Representations.

-

A mock-up TBrowser 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 -@X, where X 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.

+

Not all of these values are needed to be given and depending on which are given, the representation in the MusrRootv file will be different (handled by ``TMusrRunHeader). Examples are given in the comment column of the table above. For details see TMusrRunPhysicalQuantity - Possible Representations.

+

A mock-up TBrowser 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 -@X, where X 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.

_images/MusrRoot-RunInfo.png -

TMusrRunHeader mock up. The red shaded entries are of type TMusrRunPhysicalQuantity

+

TMusrRunHeader mock up. The red shaded entries are of type TMusrRunPhysicalQuantity

@@ -263,35 +399,35 @@ is introduced to deal with physical quantities. They always can be represented i is derived which is extending the base class to the needs of the instrument.
  • The base class is defined in a more abstract way, and some external, text-based description is given which defines the details of the instrument.
  • -

    Even though the first approach is very clean, it would mean a lot of maintenance work. The 2nd approach is slightly more demanding for the handling class (TMusrRunHeader and helper classes), but having the advantage of easy maintainability and expandability. The idea is that all header information can be classified into 7 groups (see previous and following section(s))

    +

    Even though the first approach is very clean, it would mean a lot of maintenance work. The 2nd approach is slightly more demanding for the handling class (TMusrRunHeader and helper classes), but having the advantage of easy maintainability and expandability. The idea is that all header information can be classified into 7 groups (see previous and following section(s))

      -
    1. Strings, represented by TString
    2. -
    3. Integers, represented by Int_t
    4. -
    5. Floating point numbers, represented by Double_t
    6. -
    7. Physical quantities, represented by TMusrRunPhysicalQuantity - Possible Representations
    8. -
    9. Collection of strings, represented by TStringVector
    10. -
    11. Collection of integers, represented by TIntVector
    12. -
    13. Collection of floating point numbers, represented by TDoubleVector
    14. +
    15. Strings, represented by TString
    16. +
    17. Integers, represented by Int_t
    18. +
    19. Floating point numbers, represented by Double_t
    20. +
    21. Physical quantities, represented by TMusrRunPhysicalQuantity - Possible Representations
    22. +
    23. Collection of strings, represented by TStringVector
    24. +
    25. Collection of integers, represented by TIntVector
    26. +
    27. Collection of floating point numbers, represented by TDoubleVector
    -

    These properties can be collected by themselves in form of vectors. This way any needed information can be written into the ROOT file. The class TMusrRunHeader is implementing this run header concept. In following section code snippets will be discussed, showing how this is used on level of the MIDAS analyzer, musrfit reader routine, and any2many conversion routines. The section Validation will discuss how to validate MusrRoot files.

    +

    These properties can be collected by themselves in form of vectors. This way any needed information can be written into the ROOT file. The class TMusrRunHeader is implementing this run header concept. In following section code snippets will be discussed, showing how this is used on level of the MIDAS analyzer, musrfit reader routine, and any2many conversion routines. The section Validation will discuss how to validate MusrRoot files.

    User Interface for MusrRoot Run Header

    -

    There are two things needed to deal with the MusrRoot run header, namely writing it and reading it. I will start with the writing as will be done in the MIDAS analyzer.

    +

    There are two things needed to deal with the MusrRoot run header, namely writing it and reading it. I will start with the writing as will be done in the MIDAS analyzer.

    Writing a MusrRoot Run Header

    -

    An example program write_musrRoot_runHeader which is writing a full run header is part of the musrfit package. Here I will concentrate just on the most essential parts. First one needs an instance of TMusrRunHeader

    -
    TMusrRunHeader *header = new TMusrRunHeader();
    +

    An example program write_musrRoot_runHeader which is writing a full run header is part of the musrfit package. Here I will concentrate just on the most essential parts. First one needs an instance of TMusrRunHeader

    +
    TMusrRunHeader *header = new TMusrRunHeader();
     TMusrRunPhysicalQuantity prop;
     
    -

    header is the instance of TMusrRunHeader. prop is an instance of TMusrRunPhysicalQuantity which will be needed further down in the description. In the next step some run header entries will be added

    -
    header->Set("RunInfo/File Name", "deltat_tdc_gps_2871.root");
    +

    header is the instance of TMusrRunHeader. prop is an instance of TMusrRunPhysicalQuantity which will be needed further down in the description. In the next step some run header entries will be added

    +
    header->Set("RunInfo/File Name", "deltat_tdc_gps_2871.root");
     header->Set("RunInfo/Run Title", "here comes the run title");
     header->Set("RunInfo/Run Number", 2871);
     
    -

    Adding information is done via the multiple overloaded Set(<pathName>,<value>) method. Here <pathName> is a string representing the “path” like representation in the MusrRoot file structure, followed by the “value” to be set, e.g. “=File Name=”. <value> can be any of the types listed at the beginning of Sec. TMusrRunHeader Concept. Here a few examples how to set TMusrRunPhysicalQuantity.

    -
    prop.Set("Sample Temperature", 3.2, 3.21, 0.05, "K", "CF1");
    +

    Adding information is done via the multiple overloaded Set(<pathName>,<value>) method. Here <pathName> is a string representing the “path” like representation in the MusrRoot file structure, followed by the “value” to be set, e.g. “=File Name=”. <value> can be any of the types listed at the beginning of Sec. TMusrRunHeader Concept. Here a few examples how to set TMusrRunPhysicalQuantity.

    +
    prop.Set("Sample Temperature", 3.2, 3.21, 0.05, "K", "CF1");
     header->Set("RunInfo/Sample Temperature", prop);
     
     prop.Set("Time Resolution", 0.1953125, "ns", "TDC 9999");
    @@ -301,13 +437,13 @@ is derived which is extending the base class to the needs of the instrument.header->Set("SampleEnvironmentInfo/CF3", prop);
     
    -

    Here TMusrRunPhysicalQuantity objects are fed via the use of the overloaded set-method. For details see TMusrRunPhysicalQuantity - Possible Representations.

    -

    To set some property within “sub-sub-directories” it would like this:

    -
    header->Set("DetectorInfo/Detector001/Time Zero Bin", 3419.0);
    +

    Here TMusrRunPhysicalQuantity objects are fed via the use of the overloaded set-method. For details see TMusrRunPhysicalQuantity - Possible Representations.

    +

    To set some property within “sub-sub-directories” it would like this:

    +
    header->Set("DetectorInfo/Detector001/Time Zero Bin", 3419.0);
     

    To write the whole run header into a file would look something like this:

    -
    TFile *f = new TFile(fileName, "RECREATE", "write_musrRoot_runHeader");
    +
    TFile *f = new TFile(fileName, "RECREATE", "write_musrRoot_runHeader");
     if (f->IsZombie()) {
       delete f;
       return -1;
    @@ -327,8 +463,8 @@ is derived which is extending the base class to the needs of the instrument.
     

    Reading a MusrRoot Run Header

    -

    The following code snippet shows how the extract the full run header from the MusrRoot file.

    -
    TFile *f = new TFile(fileName, "READ", "read_musrRoot_runHeader");
    +

    The following code snippet shows how the extract the full run header from the MusrRoot file.

    +
    TFile *f = new TFile(fileName, "READ", "read_musrRoot_runHeader");
     if (f->IsZombie()) {
       delete f;
       return -1;
    @@ -354,8 +490,8 @@ is derived which is extending the base class to the needs of the instrument.delete f;
     
    -

    The routine ExtractAll(TFolder *runHeader) decodes all the TObjString objects and fills internal data structures. This means when reading a MusrRoot -file the above handling is always needed. After the ExtractAll call, parameters can be extracted via the getter routines available. For instance to read the Run Number, the code would look like

    -
    Bool_t ok;
    +

    The routine ExtractAll(TFolder *runHeader) decodes all the TObjString objects and fills internal data structures. This means when reading a MusrRoot -file the above handling is always needed. After the ExtractAll call, parameters can be extracted via the getter routines available. For instance to read the Run Number, the code would look like

    +
    Bool_t ok;
     Int_t ival;
     header->Get("RunInfo/Run Number", ival, ok);
     if (ok)
    @@ -364,8 +500,8 @@ is derived which is extending the base class to the needs of the instrument.cout << endl << "**ERROR** Couldn't obtain the 'Run Number'.";
     
    -

    Reading a TMusrRunPhysicalQuantity object, e.g. the sample temperature looks like this

    -
    TMusrRunPhysicalQuantity prop;
    +

    Reading a TMusrRunPhysicalQuantity object, e.g. the sample temperature looks like this

    +
    TMusrRunPhysicalQuantity prop;
     
     header->Get("RunInfo/Sample Temperature", prop, ok);
     if (ok) {
    @@ -381,22 +517,22 @@ is derived which is extending the base class to the needs of the instrument.
     

    Validation of a MusrRoot File

    -

    Since MusrRoot is an open and extensible file format a mechanism is needed to validate that a given file is indeed holding the minimum of required entries. To check this the following scheme is implemented in the program musrRootValidation:

    +

    Since MusrRoot is an open and extensible file format a mechanism is needed to validate that a given file is indeed holding the minimum of required entries. To check this the following scheme is implemented in the program musrRootValidation:

    _images/MusrRootValidationScheme.png -

    MusrRoot validation scheme

    -

    In the following this validation scheme will be discussed as it is implemented in musrRootValidation:

    +

    MusrRoot validation scheme

    +

    In the following this validation scheme will be discussed as it is implemented in musrRootValidation:

      -
    1. It is checked if the given file name is a TFile
    2. +
    3. It is checked if the given file name is a TFile
    4. The file structure is recursively parsed and mapped into an temporary XML file. XML is used since there are ample of parser and validation frameworks at hand. For details check any decent -book about XML. Here the libxml2 is used, because also ROOT is requiring it.
    5. -
    6. In a next step the XML file (holding the structure of the supposed MusrRoot file is validated -against a XML schema. The minimum of required entries is described by MusrRoot.xsd which is -part of musrfit but also available from the PSI/LMU web-page.
    7. +book about XML. Here the libxml2 is used, because also ROOT is requiring it. +
    8. In a next step the XML file (holding the structure of the supposed MusrRoot file is validated +against a XML schema. The minimum of required entries is described by MusrRoot.xsd which is +part of musrfit but also available from the PSI/LMU web-page.
    9. If the schema validation is successful additional semantic checks (like is the number of decay histograms the same as the number of detector entries, etc.) will be preformed.
    -

    This validation scheme is useful for people which define instrument specific extensions of the base MusrRoot, as for instance the LEM instrument at PSI. It is also useful for people writing file converters in order to cross check if the generated file is valid.

    +

    This validation scheme is useful for people which define instrument specific extensions of the base MusrRoot, as for instance the LEM instrument at PSI. It is also useful for people writing file converters in order to cross check if the generated file is valid.

    @@ -415,97 +551,97 @@ histograms the same as the number of detector entries, etc.) will be preformed.< Version -TString -GIT version of TMusrRunHeader +TString +GIT version of TMusrRunHeader Generic Validator URL -TString -URL of the generic MusrRoot validation xsd-file. +TString +URL of the generic MusrRoot validation xsd-file. e.g. http://lmu.web.psi.ch/facilities/software/MusrRoot/Validation/MusrRoot.xsd Specific Validator URL -TString +TString URL of the instrument specific validation xsd-file. e.g. for LEM: http://lmu.web.psi.ch/facilities/software/MusrRoot/Validation/MusrRootLEM.xsd Generator -TString -Program which wrote the MusrRoot file, e.g. nemu_analyzer +TString +Program which wrote the MusrRoot file, e.g. nemu_analyzer File Name -TString -File name of the MusrRoot file, e.g. deltat_tdc_gps_4295.root +TString +File name of the MusrRoot file, e.g. deltat_tdc_gps_4295.root Run Title -TString -  +TString +  Run Number -Int_t -  +Int_t +  Run Start Time -TString +TString ISO 8601 date time Run Stop Time -TString +TString ISO 8601 date time Run Duration -TMusrRunPhysicalQuantity +TMusrRunPhysicalQuantity run duration in sec Laboratory -TString +TString e.g. PSI Instrument -TString +TString e.g. GPS Muon Beam Momentum -TMusrRunPhysicalQuantity +TMusrRunPhysicalQuantity e.g. 28.1 MeV/c Muon Species -TString +TString poitive or negative muon Muon Source -TString -e.g. “Target E - Low Energy Muons” or “Target M” ... +TString +e.g. “Target E - Low Energy Muons” or “Target M” … Setup -TString -  +TString +  Comment -TString -  +TString +  Sample Name -TString -  +TString +  Sample Temperature -TMusrRunPhysicalQuantity +TMusrRunPhysicalQuantity e.g. 3.21 +- 0.05 K; SP: 3.2; CF1 Sample Magnetic Field -TMusrRunPhysicalQuantity +TMusrRunPhysicalQuantity e.g. 350.002 +- 0.005 G; SP: 350; WEW No of Histos -Int_t -  +Int_t +  Time Resolution -TMusrRunPhysicalQuantity +TMusrRunPhysicalQuantity e.g. 0.1953125 ns RedGreen Offsets -TIntVector +TIntVector e.g. 0; 20 @@ -513,16 +649,16 @@ histograms the same as the number of detector entries, etc.) will be preformed.<

    DetectorInfo (Required)

    -

    The DetectorInfo is organized in a sub-tree like

    -
    DetectorInfo ---|
    -                |- Detector001
    -                |- Detector002
    -                ...
    +

    The DetectorInfo is organized in a sub-tree like

    +
    DetectorInfo ---|
    +                |- Detector001
    +                |- Detector002
    +                ...
     
    -

    For each histogram in the histos/DecayAnaModule corresponds detector entry here.

    -

    The numbering of the detectors has to correspond the its histogram, e.g. hDecay023 <=> Detector023, i.e. potentially discontinuous to show red / green breaks.

    -

    Detector<XXX> has the elements

    +

    For each histogram in the histos/DecayAnaModule corresponds detector entry here.

    +

    The numbering of the detectors has to correspond the its histogram, e.g. hDecay023 <=> Detector023, i.e. potentially discontinuous to show red / green breaks.

    +

    Detector<XXX> has the elements

    @@ -537,30 +673,30 @@ histograms the same as the number of detector entries, etc.) will be preformed.< - + - + +number in the histos/DecayAnaModule sub-tree. - + - - + + - - + + - - + +
    NameTStringTString detector name, e.g. Left-NPP
    Histo NumberInt_tInt_t histogram number. This number corresponds to the histogram -number in the histos/DecayAnaModule sub-tree.
    Histo LengthInt_tInt_t length of the histogram (in bins)
    Time Zero BinDouble_tThe type is Double_t since for the high-field spectrometer -at PSI an Int_t representation would be not good enough.Double_tThe type is Double_t since for the high-field spectrometer +at PSI an Int_t representation would be not good enough.
    First Good BinInt_t Int_t 
    Last Good BinInt_t Int_t 
    @@ -582,8 +718,8 @@ at PSI an Int_t repre Cryo -TString -name of the used cryostat/oven, e.g. Konti-2 +TString +name of the used cryostat/oven, e.g. Konti-2 @@ -605,8 +741,8 @@ at PSI an Int_t repre Magnet Name -TString -name of the used magnet, e.g. WEW. +TString +name of the used magnet, e.g. WEW. In case of ZF measurements, there might be an entry like ZF. @@ -629,8 +765,8 @@ In case of ZF measurements, there might be an entry like ZF. Name -TString -name of the beamline, e.g. piM3.2 +TString +name of the beamline, e.g. piM3.2 @@ -638,49 +774,49 @@ In case of ZF measurements, there might be an entry like ZF.

    Exhaustive MusrRoot Tree Including Everything Required

    Here it is assumed that there are hypothetical red / green data with electric field on/off and light on/off, -and hence 4 data sets per detector, and 8 detectors of the instrument: left/forward, top/forward, right/forward, -bottom/forward, left/backward, top/backward, right/backward, bottom/backward. To show the whole +and hence 4 data sets per detector, and 8 detectors of the instrument: left/forward, top/forward, right/forward, +bottom/forward, left/backward, top/backward, right/backward, bottom/backward. To show the whole tree structure, it will be split in the representation afterwards, but keep in mind: this will be all part of a -single MusrRoot file. I will add comments in the tree structure by the symbol #. Lets start with the μSR data histograms:

    -
    histos -|
    -        |- DecayAnaModule -|
    -                           |- hDecay001 # left/forward, electric field off, light off
    -                           |- hDecay002 # top/forward, electric field off, light off
    -                           |- hDecay003 # right/forward, electric field off, light off
    -                           |- hDecay004 # bottom/forward, electric field off, light off
    -                           ...
    -                           |- hDecay007 # right/backward, electric field off, light off
    -                           |- hDecay008 # bottom/backward, electric field off, light off
    -                           |- hDecay011 # left/forward, electric field on, light off
    -                           |- hDecay012 # top/forward, electric field on, light off
    -                           |- hDecay013 # right/forward, electric field on, light off
    -                           |- hDecay014 # bottom/forward, electric field on, light off
    -                           ...
    -                           |- hDecay017 # right/backward, electric field on, light off
    -                           |- hDecay018 # bottom/backward, electric field on, light off
    -                           |- hDecay021 # left/forward, electric field off, light on
    -                           |- hDecay022 # top/forward, electric field off, light on
    -                           |- hDecay023 # right/forward, electric field off, light on
    -                           |- hDecay024 # bottom/forward, electric field off, light on
    -                           ...
    -                           |- hDecay027 # right/backward, electric field off, light on
    -                           |- hDecay028 # bottom/backward, electric field off, light on
    -                           |- hDecay031 # left/forward, electric field on, light on
    -                           |- hDecay032 # top/forward, electric field on, light on
    -                           |- hDecay033 # right/forward, electric field on, light on
    -                           |- hDecay034 # bottom/forward, electric field on, light on
    -                           ...
    -                           |- hDecay037 # right/backward, electric field on, light on
    -                           |- hDecay038 # bottom/backward, electric field on, light on
    -                           ...
    +single MusrRoot file. I will add comments in the tree structure by the symbol #. Lets start with the μSR data histograms:

    +
    histos -|
    +        |- DecayAnaModule -|
    +                           |- hDecay001 # left/forward, electric field off, light off
    +                           |- hDecay002 # top/forward, electric field off, light off
    +                           |- hDecay003 # right/forward, electric field off, light off
    +                           |- hDecay004 # bottom/forward, electric field off, light off
    +                           ...
    +                           |- hDecay007 # right/backward, electric field off, light off
    +                           |- hDecay008 # bottom/backward, electric field off, light off
    +                           |- hDecay011 # left/forward, electric field on, light off
    +                           |- hDecay012 # top/forward, electric field on, light off
    +                           |- hDecay013 # right/forward, electric field on, light off
    +                           |- hDecay014 # bottom/forward, electric field on, light off
    +                           ...
    +                           |- hDecay017 # right/backward, electric field on, light off
    +                           |- hDecay018 # bottom/backward, electric field on, light off
    +                           |- hDecay021 # left/forward, electric field off, light on
    +                           |- hDecay022 # top/forward, electric field off, light on
    +                           |- hDecay023 # right/forward, electric field off, light on
    +                           |- hDecay024 # bottom/forward, electric field off, light on
    +                           ...
    +                           |- hDecay027 # right/backward, electric field off, light on
    +                           |- hDecay028 # bottom/backward, electric field off, light on
    +                           |- hDecay031 # left/forward, electric field on, light on
    +                           |- hDecay032 # top/forward, electric field on, light on
    +                           |- hDecay033 # right/forward, electric field on, light on
    +                           |- hDecay034 # bottom/forward, electric field on, light on
    +                           ...
    +                           |- hDecay037 # right/backward, electric field on, light on
    +                           |- hDecay038 # bottom/backward, electric field on, light on
    +                           ...
     

    Comments: as can be seen the histograms are continuous numbered until there is a red / green mode switch where -the histogram number “jumps” (e.g. from 008 to 011). In order to fill in the different red / green +the histogram number “jumps” (e.g. from 008 to 011). In order to fill in the different red / green histograms an offset is added (here 10, 20, and 30).

    -

    Next the whole RunHeader. Here the information will be grouped in different folders collecting related information, +

    Next the whole RunHeader. Here the information will be grouped in different folders collecting related information, like general run info, detector info, sample and magnetic field environment info, beamline info, etc.

    -
    RunInfo:
    +
    RunInfo:
       000 - Version: $Id: TMusrRunHeader.cpp 5092 2012-03-13 07:47:00Z nemu $ -@0
       001 - Generic Validator URL: http://lmu.web.psi.ch/facilities/software/MusrRoot/Validation/MusrRoot.xsd -@0
       002 - Specific Validator URL: http://lmu.web.psi.ch/facilities/software/MusrRoot/Validation/MusrRootLEM.xsd -@0
    @@ -758,109 +894,159 @@ RunSummary:
       ...
     
    -

    Comment: the last sub-tree RunSummary is not following TMusrRunHeader rule <number> - <label>: <value> -@<type>. -It is added in the instrument analyzer directly by other means than the TMusrRunHeader::Set-method. This is no problem! -Since RunSummary is not part of the required MusrRoot-file. One is quite free in adding any ROOT based information here.

    +

    Comment: the last sub-tree RunSummary is not following TMusrRunHeader rule <number> - <label>: <value> -@<type>. +It is added in the instrument analyzer directly by other means than the TMusrRunHeader::Set-method. This is no problem! +Since RunSummary is not part of the required MusrRoot-file. One is quite free in adding any ROOT based information here.

    TMusrRunPhysicalQuantity - Possible Representations

    A physical property can be described as

    -
    <property name>: <value> +- <estimated error> <unit>; SP: <demand>; <description>
    +
    <property name>: <value> +- <estimated error> <unit>; SP: <demand>; <description>
     
    -

    where <property name> is the name of the quantity, e.g. Sample Temperature, <value> the value -of the quantity, <estimated error> the error estimate, e.g. the standard deviation, <unit> the unit, -e.g. K, <demand> a demand value, e.g. the set point of the temperature. <description> is a +

    where <property name> is the name of the quantity, e.g. Sample Temperature, <value> the value +of the quantity, <estimated error> the error estimate, e.g. the standard deviation, <unit> the unit, +e.g. K, <demand> a demand value, e.g. the set point of the temperature. <description> is a possible additional comment for this quantity.

    Note

    Not all of these quantities are always needed. The list of handled combination are given -hereafter together with the C++ code snipped how to set it. It is assumed that TMusrRunPhysicalQuantity prop; +hereafter together with the C++ code snipped how to set it. It is assumed that TMusrRunPhysicalQuantity prop; is somewhere defined.

    Possibility 1

    -
    <property name>: <value> <unit> [; <description>]
    +
    <property name>: <value> <unit> [; <description>]
     

    Code snippet:

    -
    prop.Set("Muon Beam Momentum", 28.1, "MeV/c");
    +
    prop.Set("Muon Beam Momentum", 28.1, "MeV/c");
     header->Set("RunInfo/Muon Beam Momentum", prop);
     
     prop.Set("Time Resolution", 0.1953125, "ns", "TDC 9999");
     header->Set("RunInfo/Time Resolution", prop);
     
    -

    Result in the RunHeader/RunInfo:

    -
    011 - Muon Beam Momentum: 28.1 MeV/c -@3
    -013 - Time Resolution: 0.1953125 ns; TDC 9999 -@3
    +

    Result in the RunHeader/RunInfo:

    +
    011 - Muon Beam Momentum: 28.1 MeV/c -@3
    +013 - Time Resolution: 0.1953125 ns; TDC 9999 -@3
     
    -

    The number on front of the token (e.g. 011 in front of Muon Beam Momentum) will depend on the position where -the entry has been added. The last token, -@3, is the encoding of the type: here TMusrRunPhysicalQuantity.

    +

    The number on front of the token (e.g. 011 in front of Muon Beam Momentum) will depend on the position where +the entry has been added. The last token, -@3, is the encoding of the type: here TMusrRunPhysicalQuantity.

    Possibility 2

    -
    <property name>: <val> +- <err> <unit>[; <description>]
    +
    <property name>: <val> +- <err> <unit>[; <description>]
     

    Code snippet:

    -
    prop.Set("CF3", MRH_UNDEFINED, 3.27, 0.09, "K", "strange temperature");
    +
    prop.Set("CF3", MRH_UNDEFINED, 3.27, 0.09, "K", "strange temperature");
     header->Set("SampleEnvironmentInfo/CF3", prop);
     
    -

    Result in the RunHeader/SampleEnvironmentInfo:

    -
    033 - CF3: 3.27 +- 0.09 K; strange temperature -@3
    +

    Result in the RunHeader/SampleEnvironmentInfo:

    +
    033 - CF3: 3.27 +- 0.09 K; strange temperature -@3
     

    Possibility 3

    -
    <property name>: <val> <unit>; SP: <demand>[; <description>]
    +
    <property name>: <val> <unit>; SP: <demand>[; <description>]
     

    Code snippet:

    -
    prop.Set("CF4", 3.25, 3.28, "K");
    +
    prop.Set("CF4", 3.25, 3.28, "K");
     header->Set("SampleEnvironmentInfo/CF4", prop);
     
     prop.Set("CF5", 3.26, 3.29, "K", "another strange temperature");
     header->Set("SampleEnvironmentInfo/CF5", prop);
     
    -

    Result in the RunHeader/SampleEnvironmentInfo:

    -
    034 - CF4: 3.28 K; SP: 3.25 -@3
    -035 - CF5: 3.29 K; SP: 3.26; another strange temperature -@3
    +

    Result in the RunHeader/SampleEnvironmentInfo:

    +
    034 - CF4: 3.28 K; SP: 3.25 -@3
    +035 - CF5: 3.29 K; SP: 3.26; another strange temperature -@3
     

    Possibility 4

    -
    <property name>: <value> +- <estimated error> <unit>; SP: <demand>; <description>
    +
    <property name>: <value> +- <estimated error> <unit>; SP: <demand>; <description>
     

    Code snippet:

    -
    prop.Set("Sample Magnetic Field", 350.0, 350.002, 0.005, "G", "WXY");
    +
    prop.Set("Sample Magnetic Field", 350.0, 350.002, 0.005, "G", "WXY");
     header->Set("RunInfo/Sample Magnetic Field", prop);
     
    -

    Result in the RunHeader/SampleEnvironmentInfo:

    -
    017 - Sample Magnetic Field: 350.002 +- 0.005 G; SP: 350.0; WXY -@3
    +

    Result in the RunHeader/SampleEnvironmentInfo:

    +
    017 - Sample Magnetic Field: 350.002 +- 0.005 G; SP: 350.0; WXY -@3
     
    -
    -
    +
    + +
    + + +
    - - +
    + +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/musredit.html b/doc/html/musredit.html index 2ba3fdd4..f4ed3aaa 100644 --- a/doc/html/musredit.html +++ b/doc/html/musredit.html @@ -1,204 +1,334 @@ - - - - + + + + + + + + + musredit: the GUI Based Interface to musrfit — musrfit 1.8.2 documentation + + + + + + + + + + + - musredit: the GUI Based Interface to musrfit — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

    - musrfit 1.8.0 documentation

    -

    musredit: the GUI Based Interface to musrfit

    -
    -
    - -

    - «  Setting up musrfit / DKS: High Speed Fitting with GPU’s -   ::   - Contents -   ::   - mupp - μSR Parameter Plotter  » -

    + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    +
    -

    musredit: the GUI Based Interface to musrfit

    +

    musredit: the GUI Based Interface to musrfit

    Introduction

    -

    musredit is an editor which also provide a graphical user interface to the programs contained in the musrfit suite and are intended -to help the user handle musrfit msr files. It is implemented in C++ and use the Qt framework. musredit is based on Qt 4.6, Qt 5.6 (or above), or Qt6.x. -The Qt 5.6 and Qt 6.x version of musredit will be actively developed, whereas the Qt 4.x version will only get bug fixing and eventually will be dropped. -On this documentation page only the features related to musrfit are described — the basic editor functions which should be self-explanatory are not. -musrgui is an outdated early version of musredit and will not described anymore. If still in use, the user is urged to switch to musredit.

    +

    musredit is an editor which also provide a graphical user interface to the programs contained in the musrfit suite and are intended +to help the user handle musrfit msr files. It is implemented in C++ and use the Qt framework. musredit is based on Qt 4.6, Qt 5.6 (or above), or Qt6.x. +The Qt 5.6 and Qt 6.x version of musredit will be actively developed, whereas the Qt 4.x version will only get bug fixing and eventually will be dropped. +On this documentation page only the features related to musrfit are described — the basic editor functions which should be self-explanatory are not. +musrgui is an outdated early version of musredit and will not described anymore. If still in use, the user is urged to switch to musredit.

    Note

    -

    Before going on using musredit it is strongly recommended to read the manual of musrfit first!

    +

    Before going on using musredit it is strongly recommended to read the manual of musrfit first!

    Available Executable, Configuration Files and their Basic Usage

    musredit (musrgui)

    -

    musredit (musrgui) is the editor executable. If called from within a shell it accepts a few optional parameters:

    +

    musredit (musrgui) is the editor executable. If called from within a shell it accepts a few optional parameters:

    <msr-files>
    -
    File names of the msr files that should be opened in separate editor tabs on startup of musredit.
    +
    File names of the msr files that should be opened in separate editor tabs on startup of musredit.
    - -help
    Displays a small help notice in the shell explaining the basic usage of the program.
    - -version
    -
    Prints the version number of musredit.
    +
    Prints the version number of musredit.

    If called without any parameters an empty editor window opens.

    musredit_startup.xml

    -

    musredit_startup.xml is the configuration file located under $HOME\.musrfit\musredit. It is also possible to have another version +

    musredit_startup.xml is the configuration file located under $HOME\.musrfit\musredit. It is also possible to have another version of this file in the working directory which then will be used!

    -

    In this file the following XML tags are allowed to define settings and might proof useful for all users of musredit:

    +

    In this file the following XML tags are allowed to define settings and might proof useful for all users of musredit:

    <general></general>

    set the default paths to executable and files in this environment

    <exec_path>PATH_TO_EXEC</exec_path>
    -
    set the path PATH_TO_EXEC where the executable musrfit, musrview, musrt0, etc. can be found (inside the <general> environment)
    +
    set the path PATH_TO_EXEC where the executable musrfit, musrview, musrt0, etc. can be found (inside the <general> environment)
    <default_save_path>SAVE_PATH</default_save_path>
    -
    specify the path SAVE_PATH where musredit point by default when opening and saving msr files (inside the <general> environment). Default is the current directory.
    +
    specify the path SAVE_PATH where musredit point by default when opening and saving msr files (inside the <general> environment). Default is the current directory.
    <msr_default_file_path>MSR_DEF_PATH</msr_default_file_path>
    -
    set the path MSR_DEF_PATH where the default msr files provided by musredit are stored (inside the <general> environment)
    +
    set the path MSR_DEF_PATH where the default msr files provided by musredit are stored (inside the <general> environment)
    <timeout>3600</timeout>
    -
    timeout in seconds after which musrview canvas will automatically quit. A value of 0 or -a negative number will keep the musrview canvas open without self-determination.
    +
    timeout in seconds after which musrview canvas will automatically quit. A value of 0 or +a negative number will keep the musrview canvas open without self-determination.
    <keep_minuit2_output>y/n</keep_minuit2_output>
    -
    flag indicating if the MINUIT2 output shall be kept per msr-file (‘y’) or only for the current msr-file (‘n’).
    +
    flag indicating if the MINUIT2 output shall be kept per msr-file (‘y’) or only for the current msr-file (‘n’).
    <dump_ascii>y/n</dump_ascii>
    -
    flag indicating if musrfit shall dump fit data into ascii format. See help of musrfit.
    +
    flag indicating if musrfit shall dump fit data into ascii format. See help of musrfit.
    <dump_root>y/n</dump_root>
    -
    flag indicating if musrfit shall dump fit data into root format. See help of musrfit.
    +
    flag indicating if musrfit shall dump fit data into root format. See help of musrfit.
    <title_from_data_file>y/n</title_from_data_file>
    -
    specify if musrfit should be called with the -t option by default (inside the <general> environment)
    +
    specify if musrfit should be called with the -t option by default (inside the <general> environment)
    <chisq_pre_run_block>y/n</chisq_pre_run_block>
    flag indicating if per-run chisq shall be written into the msr-output-file.
    <estimate_n0>y/n</estimate_n0>
    -
    flag indicating if for a single histogram fit \(N_0\) shall be estimated before the fit procedure starts.
    +
    flag indicating if for a single histogram fit \(N_0\) shall be estimated before the fit procedure starts.
    <musrview_show_fourier>y/n</musrview_show_fourier>
    -
    flag indicating if musrview will directly present the Fourier transform rather than the time domain data.
    +
    flag indicating if musrview will directly present the Fourier transform rather than the time domain data.
    <musrview_show_avg>y/n</musrview_show_avg>
    -
    flag indicating if musrview will directly present averaged data, typically used for Fourier power spectra.
    +
    flag indicating if musrview will directly present averaged data, typically used for Fourier power spectra.
    <enable_musrt0>y/n</enable_musrt0>
    -
    specify if musrt0 can be called from within musredit (inside the <general> environment)
    +
    specify if musrt0 can be called from within musredit (inside the <general> environment)
    <font_settings></font_settings>

    set the default font in this environment

    <font_name>FONT</font_name>
    -
    specify the name of the font FONT to be used by default in musredit (inside the <font_settings> environment)
    +
    specify the name of the font FONT to be used by default in musredit (inside the <font_settings> environment)
    <font_size>N</font_size>
    -
    specify the size N of the font to be used by default in musredit (inside the <font_settings> environment)
    +
    specify the size N of the font to be used by default in musredit (inside the <font_settings> environment)
    <msr_file_defaults></msr_file_defaults>

    put the default settings for newly created msr files in this environment

    <beamline>BL</beamline>
    -
    set the name of the muon beamline BL here (inside a <msr_file_defaults> environment)
    +
    set the name of the muon beamline BL here (inside a <msr_file_defaults> environment)
    <institute>INST</institute>
    -
    set the name of the facility INST where the beamline BL is located. Valid settings are PSI, RAL, JPARC, and TRIUMF (inside a <msr_file_defaults> environment)
    +
    set the name of the facility INST where the beamline BL is located. Valid settings are PSI, RAL, JPARC, and TRIUMF (inside a <msr_file_defaults> environment)
    <file_format>FF</file_format>
    -
    specify the default data file format FF here. Valid formats are NEXUS, MUSR-ROOT, ROOT-NPP, ROOT-PPC, PSI-BIN, PSI-MDU, MDU-ASCII, WKM, MUD, ASCII, and DB (inside a <msr_file_defaults> environment)
    +
    specify the default data file format FF here. Valid formats are NEXUS, MUSR-ROOT, ROOT-NPP, ROOT-PPC, PSI-BIN, PSI-MDU, MDU-ASCII, WKM, MUD, ASCII, and DB (inside a <msr_file_defaults> environment)
    <lifetime_correction>y/n</lifetime_correction>
    -
    choose if by default the lifetimecorrection option should be set (inside a <msr_file_defaults> environment)
    +
    choose if by default the lifetimecorrection option should be set (inside a <msr_file_defaults> environment)
    <msr2data_defaults></msr2data_defaults>
    -

    define the default options for calling msr2data in this environment; the options set here are ticked by default in the graphical interface of musredit.

    +

    define the default options for calling msr2data in this environment; the options set here are ticked by default in the graphical interface of musredit.

    <chain_fit>y/n</chain_fit>
    -
    (un)set the chain fit (!) option (inside a <msr2data_defaults> environment)
    +
    (un)set the chain fit (!) option (inside a <msr2data_defaults> environment)
    <write_data_header>y/n</write_data_header>
    -
    (un)set the noheader option (inside a <msr2data_defaults> environment)
    +
    (un)set the noheader option (inside a <msr2data_defaults> environment)
    <ignore_data_header_info>y/n</ignore_data_header_info>
    -
    (un)set the nosummary option (inside a <msr2data_defaults> environment)
    +
    (un)set the nosummary option (inside a <msr2data_defaults> environment)
    <keep_minuit2_output>y/n</keep_minuit2_output>
    -
    (un)set the -k option (inside a <msr2data_defaults> environment)
    +
    (un)set the -k option (inside a <msr2data_defaults> environment)
    <write_column_data>y/n</write_column_data>
    -
    (un)set the data option (inside a <msr2data_defaults> environment)
    +
    (un)set the data option (inside a <msr2data_defaults> environment)
    <create_msr_file_only>y/n</create_msr_file_only>
    -
    (un)set the msr option in case a template run is specified (inside a <msr2data_defaults> environment)
    +
    (un)set the msr option in case a template run is specified (inside a <msr2data_defaults> environment)
    <fit_only>y/n</fit_only>
    -
    (un)set the fit option in case no template run is specified (inside a <msr2data_defaults> environment)
    +
    (un)set the fit option in case no template run is specified (inside a <msr2data_defaults> environment)
    <global>y/n</global>
    -
    (un)set the global option (inside a <msr2data_defaults> environment)
    +
    (un)set the global option (inside a <msr2data_defaults> environment)
    <global_plus>y/n</global_plus>
    -
    (un)set the global+ option (inside a <msr2data_defaults> environment)
    +
    (un)set the global+ option (inside a <msr2data_defaults> environment)
    <recreate_data_file>y/n</recreate_data_file>
    -
    (un)set the musredit option for recreating the output file (inside a <msr2data_defaults> environment)
    +
    (un)set the musredit option for recreating the output file (inside a <msr2data_defaults> environment)
    <open_file_after_fitting>y/n</open_file_after_fitting>
    -
    (un)set the musredit option for opening msr files after fitting (inside a <msr2data_defaults> environment)
    +
    (un)set the musredit option for opening msr files after fitting (inside a <msr2data_defaults> environment)
    -

    Additionally, there are some settings defined in this XML file which should be only changed by experienced users who like to add new features to musredit:

    +

    Additionally, there are some settings defined in this XML file which should be only changed by experienced users who like to add new features to musredit:

    <help_section></help_section>

    define various help messages in this environment

    <musr_web_X>LINK</musr_web_X>
    -
    define the LINK to the help page musr_web_X, where X is main, title, parameters, theory, functions, run, -command, fourier, plot, statistics, msr2data, or musrFT (inside a <help_section> environment)
    +
    define the LINK to the help page musr_web_X, where X is main, title, parameters, theory, functions, run, +command, fourier, plot, statistics, msr2data, or musrFT (inside a <help_section> environment)
    <func_pixmap_path>PIX_PATH</func_pixmap_path>
    -
    set the path PIX_PATH to LaTeX pixmaps visualizing the various supported theory functions
    +
    set the path PIX_PATH to LaTeX pixmaps visualizing the various supported theory functions
    <theory_functions></theory_functions>
    -

    define the functions for a msr file’s THEORY block according to the correct syntax in this environment

    +

    define the functions for a msr file’s THEORY block according to the correct syntax in this environment

    <func></func>
    -

    specify a function here (inside a <theory_functions> environment)

    +

    specify a function here (inside a <theory_functions> environment)

    <name>NAME</name>
    -
    the NAME of the function in the msr file (inside a <func> environment)
    +
    the NAME of the function in the msr file (inside a <func> environment)
    <comment>COMMENT</comment>
    -
    description of the used parameters (inside a <func> environment)
    +
    description of the used parameters (inside a <func> environment)
    <label>LABEL</label>
    -
    LABEL of the function in the musredit menu (inside a <func> environment)
    +
    LABEL of the function in the musredit menu (inside a <func> environment)
    <pixmap>PIXMAP</pixmap>
    -
    LaTeX picture used to describe the function and stored in the PIX_PATH (inside a <func> environment)
    +
    LaTeX picture used to describe the function and stored in the PIX_PATH (inside a <func> environment)
    <params>N</params>
    -
    number of parameters N used by the function (inside a <func> environment)
    +
    number of parameters N used by the function (inside a <func> environment)
    -

    An example of the musredit_startup.xml looks like:

    -
    <?xml version="1.0" encoding="UTF-8"?>
    +

    An example of the musredit_startup.xml looks like:

    +
    <?xml version="1.0" encoding="UTF-8"?>
     <musredit_startup xmlns="http://lmu.web.psi.ch/musrfit/user/MUSR/MusrGui.html">
       <comment>
         This is handling default setting parameters for the musredit.
    @@ -282,105 +412,105 @@ a negative number will keep the m
     

    musredit Features

    -

    The features of musrfit which can be accessed by the graphical front ends musredit will be described in the following. All functions +

    The features of musrfit which can be accessed by the graphical front ends musredit will be described in the following. All functions can either be called by choosing them from the MusrFit menu, by clicking the respective button in the MusrFit bar, or by using a keyboard shortcut.

    musrWiz

    -

    musrWiz is a helper programs which allows to create a msr-file from scratch without too much a priori knowledge. For details see musrWiz.

    +
    _images/musrWiz.svg

    musrWiz is a helper programs which allows to create a msr-file from scratch without too much a priori knowledge. For details see musrWiz.

    Calculate Chisq

    -

    Calls musrfit with the option -c, i.e. calculates the \(\chi^2\) or log max-likelihood for the active msr file tab. Shortcut-key: Alt+C. +

    _images/musrchisq.svg

    Calls musrfit with the option -c, i.e. calculates the \(\chi^2\) or log max-likelihood for the active msr file tab. Shortcut-key: Alt+C. The equivalent call on the command line would be

    -
    $ musrfit -c <msr-file>
    +
    $ musrfit -c <msr-file>
     

    Fit

    -

    Calls musrfit for fitting of the active msr file in the currently active tab. Shortcut-key: Alt+F. +

    _images/musrfit.svg

    Calls musrfit for fitting of the active msr file in the currently active tab. Shortcut-key: Alt+F. The equivalent call on the command line could look like

    -
    $ musrfit <msr-file> [optional parameters]
    +
    $ musrfit <msr-file> [optional parameters]
     
    -

    The optional parameters may be chosen under Preferences. For further information refer to the manual of musrfit.

    +

    The optional parameters may be chosen under Preferences. For further information refer to the manual of musrfit.

    Swap Msr <-> Mlog

    -

    Swap the msr and mlog files. E.g., for a file called 8472_zf.msr, this is copied to 8472_zf.mlog and vice versa. Shortcut-key: Alt+S.

    +
    _images/musrswap.svg

    Swap the msr and mlog files. E.g., for a file called 8472_zf.msr, this is copied to 8472_zf.mlog and vice versa. Shortcut-key: Alt+S.

    Set Steps

    -

    musrStep allows to adjust the step size, i.e. the initial steps for the fitter. Shortcut-key: Alt+P.

    +
    _images/musrStep.svg

    musrStep allows to adjust the step size, i.e. the initial steps for the fitter. Shortcut-key: Alt+P.

    Msr2Data

    -

    Opens a graphical interface to the msr2data program described in detail in its own manual. Shortcut-key: Alt+2.

    +
    _images/msr2data.svg

    Opens a graphical interface to the msr2data program described in detail in its own manual. Shortcut-key: Alt+2.

    mupp

    -

    Application which allows to plot *.db and *.dat parameter files. Shortcut-key: Alt+U. -For a detailed description see the mupp docu.

    +
    _images/mupp.svg

    Application which allows to plot *.db and *.dat parameter files. Shortcut-key: Alt+U. +For a detailed description see the mupp docu.

    View

    -

    Calls musrview from the active tab of musredit. For more details see the musrview docu. Shortcut-key: Alt+V. +

    _images/musrview.svg

    Calls musrview from the active tab of musredit. For more details see the musrview docu. Shortcut-key: Alt+V. The equivalent call on the command line could look like

    -
    $ musrview <msr-file> [optional parameters]
    +
    $ musrview <msr-file> [optional parameters]
     

    T0

    -

    Calls musrt0 which allows to set the T0 values for all the runs. For more details see the musrt0 docu. +

    _images/musrt0-icon.svg

    Calls musrt0 which allows to set the T0 values for all the runs. For more details see the musrt0 docu. The equivalent call on the command line could look like

    -
    $ musrt0 <msr-file> [optional parameters]
    +
    $ musrt0 <msr-file> [optional parameters]
     

    Raw Fourier

    -

    Calls musrFT which allows to perform a Fourier transform of the raw data. For more details see the musrFT docu. +

    _images/musrFT.svg

    Calls musrFT which allows to perform a Fourier transform of the raw data. For more details see the musrFT docu. The equivalent call on the command line could look like

    -
    $ musrFT <msr-file> [optional parameters]
    +
    $ musrFT <msr-file> [optional parameters]
     

    Preferences

    -

    Opens a window in which the optional parameters that should be passed to musrfit can be chosen. -For further information refer to the manual of musrfit.

    +
    _images/musrprefs.svg

    Opens a window in which the optional parameters that should be passed to musrfit can be chosen. +For further information refer to the manual of musrfit.

    Dump Header

    -

    Opens a file dialog which allows to select a μSR data file. When this file can be read, the run header info is dumped into a dialog window. -Essentially this calls dump_header internally.

    +
    _images/musrdump.svg

    Opens a file dialog which allows to select a μSR data file. When this file can be read, the run header info is dumped into a dialog window. +Essentially this calls dump_header internally.

    musrWiz

    -

    musrWiz is a helper program which allows to easily create the necessary msr-file needed as an input for musrfit. -musrWiz is still in it’s early stage; not all options are already implemented and here and there you will likely find some bugs. -From musredit it can be accessed via the MusrFit menu or the wand

    -

    The musrWiz GUI is organized in a couple of different dialogues which some information needs to be provided by the user. +

    musrWiz is a helper program which allows to easily create the necessary msr-file needed as an input for musrfit. +musrWiz is still in it’s early stage; not all options are already implemented and here and there you will likely find some bugs. +From musredit it can be accessed via the MusrFit menu or the wand

    +_images/musredit-musrWiz.svg

    The musrWiz GUI is organized in a couple of different dialogues which some information needs to be provided by the user. In the following these different dialogues will be discussed briefly.

    musrWiz-Introduction

    The introduction dialogue

    -
      +_images/musrWiz-Intro.svg
      1. an explicit msr-file name can be provided here. More often the msr-file name is generated out of the run number.
      2. year of the run data.
      3. run number. If no explicit msr-file is provided, the run number together with fit type and type of measurement will be used to generate the msr-file name.
      4. -
      5. from the pull down menu the institute (for which a necessary xml-file is provided) has to be choosen.
      6. +
      7. from the pull down menu the institute (for which a necessary xml-file is provided) has to be choosen.
      8. from the pull down menu the the instrument can be chosen.
      9. -
      10. the fit type has to be chosen. Possible fit types are: Single Histo / Single Histo RRF / Asymmetry / Asymmetry RRF / Mu Minus / None muSR
      11. -
      12. type of measurement is essentially needed for the grouping of the detectors. Possible are: ZF for zero field measurements / TF for transverse field measurements / LF for longitudinal field measurements. +
      13. the fit type has to be chosen. Possible fit types are: Single Histo / Single Histo RRF / Asymmetry / Asymmetry RRF / Mu Minus / None muSR
      14. +
      15. type of measurement is essentially needed for the grouping of the detectors. Possible are: ZF for zero field measurements / TF for transverse field measurements / LF for longitudinal field measurements. Depending on the choice and instrument some additional question might be asked, e.g. which magnet has been used.
      16. -
      17. T0‘s: this last menu defines from where to get the t0’s. The options are: from data file, i.e. the t0 are assumed to be correctly set -in the provided data file call musrT0, i.e. after the msr-file is generated, musrt0 will be called which allows the user to find the -proper t0 from the prompt peak enter here will provide a pop-up menu where the t0 parameter can be given explicitly.
      18. +
      19. T0’s: this last menu defines from where to get the t0’s. The options are: from data file, i.e. the t0 are assumed to be correctly set +in the provided data file call musrT0, i.e. after the msr-file is generated, musrt0 will be called which allows the user to find the +proper t0 from the prompt peak enter here will provide a pop-up menu where the t0 parameter can be given explicitly.
      -

      If all this information have been provided Next> will lead you the the theory dialogue.

      +

      If all this information have been provided Next> will lead you the the theory dialogue.

    musrWiz - Theory

    @@ -390,59 +520,59 @@ proper t0 from the prompt peak en within the template almost everything is already pre-defined. The disadvantage is that you are not free in setting up your theory function as you would like to have.
  • freely write your theory function. The advantage here is that you can customize your theory function at your needs. -This will come at the cost that you also will need to define maps, functions, etc. yourself. The good thing +This will come at the cost that you also will need to define maps, functions, etc. yourself. The good thing though is that at the very end you can save this as a template for future re-use.
  • First the template path will be described. The theory dialogue looks like this

    -
      +_images/musrWiz-Theory.svg
      1. This is a text edit field were you can enter the theory fit function as you would like to have it. In the example -given the theory reads \(p1 \exp(-p2\, t) \cos(2 \pi\, f1 + m1)\), where pX stands for parameter, fX for function, -mX for map, and X for the corresponding number.
      2. -
      3. The Clear All button will clear whatever you entered in the text field above.
      4. +given the theory reads \(p1 \exp(-p2\, t) \cos(2 \pi\, f1 + m1)\), where pX stands for parameter, fX for function, +mX for map, and X for the corresponding number. +
      5. The Clear All button will clear whatever you entered in the text field above.
      6. This pull-down menu allows to select a theory function which will be added to the text field above by pressing -the Add button. Pre defined theory function starting with a T are templates rather than only theory function strings.
      7. -
      8. The Add button is used to add the chosen theory function / template from the pull-down menu to its left.
      9. -
      10. The Check button is used to make a syntactical check of whatever is written in the text edit field.
      11. +the Add button. Pre defined theory function starting with a T are templates rather than only theory function strings. +
      12. The Add button is used to add the chosen theory function / template from the pull-down menu to its left.
      13. +
      14. The Check button is used to make a syntactical check of whatever is written in the text edit field.

    musrWiz - Functions

    In the Functions dialogue all the necessary functions can be entered. A function operates only on fitting parameters. This is different to the theory function which operates on the fitting parameters and the time. The dialogue looks like this

    -
      +_images/musrWiz-Functions.svg
      1. a text edit field in which the various needed functions can be entered. In case a template theory is used, the appropriate function should be shown here and no editing will be needed here.
      2. -
      3. pressing Show Theory button will pop-up a little window showing the previously entered theory function. This is handy when defining its own theory, i.e. not working with a template.
      4. +
      5. pressing Show Theory button will pop-up a little window showing the previously entered theory function. This is handy when defining its own theory, i.e. not working with a template.
      -
    +_images/musrWiz-Functions-and-Theory.svg

    musrWiz - Maps

    -

    The map dialogue will list the maps previously used in the theory and functions blocks/dialogues before. Again, if a template is used, nothing needs to be entered here.

    +_images/musrWiz-Maps.svg

    The map dialogue will list the maps previously used in the theory and functions blocks/dialogues before. Again, if a template is used, nothing needs to be entered here.

      -
    1. The Show Theory button allows to show the currently defined theory and the functions.
    2. +
    3. The Show Theory button allows to show the currently defined theory and the functions.

    musrWiz - Fit Parameters

    -

    In the fit parameter dialogue all parameter names can be defined. Furthermore the starting values for the parameters, the step +_images/musrWiz-FitParam.svg

    In the fit parameter dialogue all parameter names can be defined. Furthermore the starting values for the parameters, the step (initial step size for the parameter fit), and any boundaries can be defined here.

      -
    1. The Show Theory button allows to show the currently defined theory and the functions.
    2. +
    3. The Show Theory button allows to show the currently defined theory and the functions.

    musrWiz - Fit Info

    -

    Collects all the musrfit and MINUIT2 specific fit commands.

    -
      +

      Collects all the musrfit and MINUIT2 specific fit commands.

      +_images/musrWiz-FitInfo.svg
      1. allows to define the time fit range (start time, end time).
      2. packing defines how many bins of the original data shall be combined (added, also called re-binning).
      3. -
      4. in this text field to fitting commands are given (see the MINUIT and musrfit manual for details).
      5. +
      6. in this text field to fitting commands are given (see the MINUIT and musrfit manual for details).

    musrWiz - Create

    Collects the last necessary information before creating the msr-file.

    -
      -
    1. shows the path where the msr-file will be saved. If you would like to save it somewhere else press the Save As (msr-file path) button.
    2. +_images/musrWiz-Create.svg
        +
      1. shows the path where the msr-file will be saved. If you would like to save it somewhere else press the Save As (msr-file path) button.
      2. pressing this button will allow you to find the path where to save the msr-file.
      3. pressing this button will save to current configuration as a template for future re-use.
      @@ -450,50 +580,100 @@ This is different to the theory function which operates on the fitting parameter

    musrStep

    -

    musrStep is a little helper program which allows to reset the initial step size. This sometimes comes very handy if working on an instrument +

    musrStep is a little helper program which allows to reset the initial step size. This sometimes comes very handy if working on an instrument with many detectors after a fit slightly went wrong leaving you with a far too small initial step size for further iterations. To edit all the steps -individually is tedious and error prone. Here musrStep can help.

    -

    When invoking musrStep the above dialogue will popup

    +individually is tedious and error prone. Here musrStep can help.

    +_images/musrStep-GUI.svg

    When invoking musrStep the above dialogue will popup

    1. shows the relevant parts of the FITPARAMETER block. The only editable column is step.
    2. -
    3. Check Specific will popup a dialogue where a template string can be entered, e.g. Asym. As a result all fit parameters containing the template string will be selected.
    4. -
    5. Check All will select all fit parameters.
    6. -
    7. Uncheck All will unselect all fit parameters.
    8. -
    9. Modify Automatic will change all the step values automatically. It basically sets all the step sizes to 1% of +
    10. Check Specific will popup a dialogue where a template string can be entered, e.g. Asym. As a result all fit parameters containing the template string will be selected.
    11. +
    12. Check All will select all fit parameters.
    13. +
    14. Uncheck All will unselect all fit parameters.
    15. +
    16. Modify Automatic will change all the step values automatically. It basically sets all the step sizes to 1% of the corresponding fit parameter value, except the phases where the step will be set to a value of 5 degrees.
    17. -
    18. Modify Selected will start the dialogue shown beneath. Follow the description there.
    19. -
    20. Save&Quit will save the current step values, close the dialogue and reload the modified msr-file.
    21. -
    22. Cancel will cancel the musrStep dialogue without modifying anything.
    23. +
    24. Modify Selected will start the dialogue shown beneath. Follow the description there.
    25. +
    26. Save&Quit will save the current step values, close the dialogue and reload the modified msr-file.
    27. +
    28. Cancel will cancel the musrStep dialogue without modifying anything.
    -

    When clicking on Modify Selected the above dialogue will be presented. It allows to manipulate all selected fit parameter step values according to the following rules

    +_images/musrStep-Modify-Selected.svg

    When clicking on Modify Selected the above dialogue will be presented. It allows to manipulate all selected fit parameter step values according to the following rules

      -
    1. Scale by Factor will scale the step value by the factor given in the field (2). If the Absolute Value check box is selected, rather than scaling the factor value will be used to modify the step value.
    2. +
    3. Scale by Factor will scale the step value by the factor given in the field (2). If the Absolute Value check box is selected, rather than scaling the factor value will be used to modify the step value.
    4. scaling factor or absolute value to modify the step values of the selected fit parameters.
    5. -
    6. checking the Absolute Value check box will change the meaning from Scale by Factor to Copy Factor Value.
    7. -
    8. Scale Automatically will modify the step values of the selected fit parameters according to the rules described before.
    9. -
    10. Cancel will cancel the dialogue.
    11. +
    12. checking the Absolute Value check box will change the meaning from Scale by Factor to Copy Factor Value.
    13. +
    14. Scale Automatically will modify the step values of the selected fit parameters according to the rules described before.
    15. +
    16. Cancel will cancel the dialogue.
    -
    -
    +
    + +
    + + +
    - - +
    + +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/objects.inv b/doc/html/objects.inv index a3225345..784c0c78 100644 Binary files a/doc/html/objects.inv and b/doc/html/objects.inv differ diff --git a/doc/html/search.html b/doc/html/search.html index d63b4cb7..aae2e53d 100644 --- a/doc/html/search.html +++ b/doc/html/search.html @@ -1,31 +1,231 @@ - - - - + + + + + + + + + Search — musrfit 1.8.2 documentation + + + + + + + + + + + - Search — musrfit 1.8.0 documentation + + + + + + + + + + + + + + + + + +
    + - - + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      +
    • Docs »
    • + +
    • Search
    • + + +
    • + + + +
    • + +
    + + +
    +
    +
    +
    + + + + +
    + +
    + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2022, Andreas Suter. + Last updated on Dec 12, 2022. + +

    +
    + Built with Sphinx using a theme provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + - - - - - - + + + + + + + + + + + + + + @@ -33,59 +233,6 @@ - - - -
    - -

    - Contents -

    -
    -
    - - -

    Search

    -
    - -

    - Please activate JavaScript to enable the search - functionality. -

    -
    -

    - From here you can search these documents. Enter your search - words into the box below and click "search". Note that the search - function will automatically search for all of the words. Pages - containing fewer words won't appear in the result list. -

    -
    - - - -
    - -
    - -
    - -
    -
    - -

    - Contents -

    - -
    - - - + \ No newline at end of file diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js index 21fc0122..67d1ba28 100644 --- a/doc/html/searchindex.js +++ b/doc/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({filenames:["acknowledgement","any2many","bugtracking","cite","index","msr2data","mupp","musr-root","musredit","setup-dks","setup-standard","tutorial","user-libs","user-manual"],titles:["Acknowledgements","any2many - a Universal \u03bcSR-file-format converter","Bugtracking","How to Cite musrfit?","Welcome to the musrfit documentation!","msr2data - A Program for Automatically Processing Multiple musrfit msr Files","mupp - \u03bcSR Parameter Plotter","MusrRoot - an Extensible Open File Format for \u03bcSR","musredit: the GUI Based Interface to musrfit","Setting up musrfit / DKS: High Speed Fitting with GPU’s","Setting up musrfit on Different Platforms","Tutorial for musrfit","Documentation of user libs (user functions)","User manual"],terms:{"\u03b1":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03b2":[],"\u03b4":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03b7":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03b5":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03b3":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03b9":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03ba":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c7":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03bb":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03bc":[12,6,10,7,3,0,8,11,13,4,5,1,9],"\u03bd":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03bf":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c9":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c0":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c6":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c8":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c1":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c2":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c3":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c4":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03b8":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03c5":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03be":[12,10,7,3,0,8,11,13,5,1,6,9],"\u03b6":[12,10,7,3,0,8,11,13,5,1,6,9],bastian:0,wojek:[5,3,0],veri:[10,7,11,0,8,13],much:[7,13,0,8,6],indebt:0,bmw:[],rigor:0,test:[13,0,8,10],musrfit:[],mani:[12,10,7,13,0,8,5],suggest:[5,0,10],contribut:[12,13,11,0,6],largest:0,part:[12,10,7,3,0,8,11,13],user:[],manual:[],which:[12,10,7,11,0,8,13,5,6,9],make:[10,7,13,0,8,9],access:[],broader:0,audienc:0,thank:0,uldi:0,locan:[3,0,9],work:[12,10,7,13,0,8,5,9],enabl:[],gpu:[],support:[],kind:[7,0,12],calm:0,extrem:0,compet:0,wai:[12,10,7,11,0,8,13,5,6,9],deal:[12,10,7,11,0,13,9],project:[0,10],well:[12,10,13,11,0,5,9],chao:0,physicist:0,think:0,admir:0,zaher:0,salman:[0,12],beta:[],nmr:[],web:[10,7,13,0,8,6],interfac:[],robert:0,scheuermann:0,constant:[13,11,0],contruct:0,input:[13,11,0,8,5],allow:[12,10,7,13,8,5,1,6,9],most:[12,10,7,13,5,1,9],from:[],other:[10,7,11,13,1,6,9],detail:[],descript:[],see:[12,10,7,11,13,8,5,1,6,9],here:[10,7,11,13,8,5,1,6,9],report:[2,13,10],bug:[2,8,10],request:[10,2,11,13,6],"new":[10,2,7,11,8,13,5],featur:[],improv:[2,12,10],pleas:[12,10,2,3,7,11,13,5],bitbucket:[2,13,10],repo:[2,10,9],prefer:[2,13,8,10],send:[2,13],mail:2,suter:[2,3,9],psi:[12,10,2,7,11,8,13,9],sinc:[10,7,3,11,13,5,6,9],quit:[10,7,3,13,8],some:[],effort:3,develop:[],mainten:[7,3],packag:[],you:[10,7,3,13,8,6,9],should:[12,10,7,3,11,8,13,5,6,9],least:[5,3,13,11],your:[10,13,3,8,5,9],"public":[13,3,12,10],have:[12,10,7,3,11,8,13,5,9],analyz:[],data:[],even:[10,7,3,13,5],better:[5,3,13],cours:[5,3,13],properli:[5,3,13,9],refer:[12,10,7,3,11,8,13,9],given:[12,10,7,3,11,8,13,5,6,9],beneath:[3,8],free:[12,10,7,3,13,8],platform:[],independ:[13,3,12],framework:[],analysi:[12,10,7,3,11,13,5,9],physic:[7,3,13,6,9],procedia:3,http:[12,10,7,3,13,8,9],doi:3,org:[3,10],phpro:3,high:[],speed:[],version:[12,10,7,3,13,8,6,9],util:[7,3,13,9],"case":[12,10,7,3,11,8,13,5,6,9],thi:[12,10,7,3,11,8,13,5,6,9],also:[12,10,7,3,11,8,13,5,6,9],add:[10,7,3,11,8,13,5,6,9],follow:[12,10,7,3,11,8,13,5,6,9],citat:3,adelmann:3,dynam:[3,9],kernel:[3,9],schedul:[3,9],comput:[3,10,9],commun:3,cpc:3,real:[13,3,11,9],time:[12,10,7,3,11,8,13,6,9],paramet:[],fit:[],imag:[13,3,11],reconstruct:3,graphic:[],process:[],unit:[7,3,13,11],conf:[3,10,9],proc:3,jpscp:3,tutori:[],singl:[],histogram:[],asymmteri:[],introduct:[],avail:[],execut:[],configur:[],basic:[],usag:[],msr:[],type:[],"function":[],technic:[],lib:[],meissner:[],profil:[],vortex:[],lattic:[],relat:[],nonloc:[],superconduct:[],screen:[],bnmr:[],set:[],differ:[],oper:[],system:[],softwar:[],requir:[],restrict:[],gnu:[],linux:[],window:[],mac:[],maco:[],tesla:[],k40c:[],nvidia:[],amd:[],card:[],radeon:[],"390x":[],opencl:[],musredit:[],gui:[],base:[],musrwiz:[],musrstep:[],mupp:[],plotter:[],script:[],summari:[],msr2data:[],program:[],automat:[],multipl:[],option:[],global:[],mode:[],known:[],limit:[],provid:[],musrroot:[],extens:[],open:[],concern:[],root:[],tmusrrunhead:[],concept:[],runinfo:[],detectorinfo:[],sampleenvironmentinfo:[],magneticfieldenvironmentinfo:[],beamlineinfo:[],exhaust:[],tree:[],includ:[],everyth:[],tmusrrunphysicalquant:[],possibl:[],represent:[],index:[5,13,4],search:[13,10,4],page:[10,7,11,8,4,9],origin:[5,12,8,13],written:[12,7,11,13,8,5],implement:[12,10,7,13,8,5,9],purpos:[5,11,13],same:[12,10,7,11,13,5,6,9],summar:[5,11],result:[12,7,11,13,8,5],either:[12,10,13,11,8,5,6],triumf:[5,11,13,8],column:[7,11,13,8,5],ascii:[12,13,11,8,5],essenti:[5,7,8,13],collect:[12,10,7,11,13,8,5,6],old:[5,13,10],abridg:5,produc:[5,11,13],can:[12,10,7,11,13,8,5,6,9],view:[],instanc:[10,7,13,5,6],howev:[10,13,11,5,9],thei:[10,7,11,13,5,9],complet:[12,10,11,5,9],backward:[5,7,13],compat:[5,13,9],languag:[5,13],name:[12,7,11,13,8,5,6,9],longer:5,than:[10,7,11,13,8,5],five:[5,11],six:5,charact:[5,13],order:[12,10,7,13,5,6,9],establish:5,need:[12,10,7,11,13,8,5,6,9],ensur:[5,13],correct:[10,13,11,8,5],length:[5,7,12],apart:[5,12,10],numer:[5,12,10],might:[12,10,7,13,8,5,6],principl:[5,12,10],four:[5,13],call:[12,10,7,11,13,8,5,6],suppli:[5,12,13,9],number:[12,10,7,11,13,8,5,6,9],firstrunno:5,lastrunno:5,interv:[5,13],specifi:[12,10,7,11,13,8,5],through:[12,10,7,11,13,5],first:[12,10,7,11,13,8,5,6,9],last:[],condit:[5,12,13],necessari:[10,7,11,13,8,5],runlist:[5,13],where:[12,10,7,11,13,8,5,6,9],combin:[7,11,13,8,5],run0:[5,13],run1:[5,13],run2:[5,13],runn:[5,13],rang:[],step:[],sequenc:[5,11,13],posit:[5,11,7,13],integ:[5,7,13],etc:[10,7,13,8,5,6,9],runlistfilenam:5,contain:[],extern:[5,7,13,12],pass:[5,13,8],below:[12,10,7,11,13,5],all:[10,7,11,13,8,5,6,9],mandatori:[5,7,13,12],right:[12,10,7,11,13,5],after:[10,7,11,13,8,5,9],mean:[12,10,7,11,13,8,5,6,9],becom:[5,10],clear:[5,7,8,13],give:[10,7,11,13,5],exampl:[12,10,7,11,13,8,5,6],"_tf_h13":5,out:[10,7,11,13,8,5,6,9],chang:[10,13,8,5,9],"8472_tf_h13":5,"8473_tf_h13":5,"8474_tf_h13":5,"8470_tf_h13":5,directori:[12,10,7,11,13,8,5,9],put:[5,13,8,10],var1:5,var2:5,var3:5,comment:[10,7,13,8,5,6,9],empti:[5,13,8,6],line:[12,10,7,11,13,8,5,6],determin:[],label:[12,7,13,8,5,6],present:[12,10,7,11,13,8,5,6,9],preced:5,mention:[12,10,7,13,5],togeth:[10,7,11,13,8,5,6],abov:[12,10,7,11,13,8,5,6,9],output:[12,13,11,8,5,6],onli:[12,10,7,11,13,8,5,6,9],newli:[5,11,8,6],creat:[],did:[5,10],exist:[5,13,10],befor:[12,10,7,11,13,8,5,9],invok:[5,13,8,6],were:[5,7,8,13],alreadi:[10,13,8,5,6,9],would:[12,10,7,11,13,8,5,6,9],append:[5,13,10],been:[12,10,7,11,13,8,5],header:[],block:[],forc:[5,13],suppress:5,nohead:[5,8],shall:[12,10,7,11,13,8,5],seen:[5,11,7,6],later:[5,11,13,10],like:[12,10,7,13,8,5,6,9],behavior:[5,13],ani:[10,7,11,13,8,5,9],simpl:[12,10,13,11,5],"default":[10,13,8,5,9],dat:[12,13,11,8,5,6],delet:[5,7],inform:[],both:[5,12,13,10],none:[5,11,13,8],write:[],sole:[5,13],assum:[12,10,7,11,13,8,5,9],nosummari:[5,8],attempt:5,read:[],addit:[12,10,7,11,13,8,5,6,9],temperatur:[7,11,13,5,6],appli:[12,10,7,11,13,5,6],magnet:[12,7,13,8,5,6],field:[],paramlist:5,param:[5,13,8,6],select:[10,7,11,13,8,5,6,9],"export":[10,13,11,5,9],startno:5,endno:5,space:[5,12,13,10],separ:[10,13,11,8,5],outputfilenam:[5,13],instead:[12,10,13,5,6,9],equal:[5,11,13],insensit:5,addition:[10,13,11,8,5],"final":[12,10,13,11,5],templat:[5,11,13,8],perform:[10,7,11,13,8,5,6],mlog:[5,13,8],subsequ:[5,13],chain:[5,8],exclam:5,mark:[5,13],without:[],keep:[5,7,8,13],mn2:[5,13],done:[12,10,7,11,13,5,6,9],ignor:[5,13,6],titl:[],illustr:[5,13],few:[10,7,13,8,5],explan:[5,13],oabc:5,"8400_tf_h13":5,"8460_tf_h13":5,abc:5,about:[10,7,11,13,5],"_zf":5,def:5,"8472_zf":[5,8],"8500_zf":5,"8502_zf":5,"8503_zf":5,"8504_zf":5,"8507_zf":5,oghi:5,ouput:5,ghi:5,take:[12,10,13,11,5],"8471_tf_h13":5,"8475_tf_h13":5,bestdata:5,"8476_tf_h13":5,"8477_tf_h13":5,"8478_tf_h13":5,"8479_tf_h13":5,describ:[12,10,7,11,13,8,5,9],anoth:[10,7,13,8,5,6],each:[12,10,7,11,13,5,6],defin:[],common:[5,13,10],specif:[12,10,7,11,13,8,5],when:[12,10,7,11,13,8,5],obtain:[5,7,13,12],valid:[],conjunct:[5,12,13],invoc:[5,13],state:[],idea:[5,11,7,13],basi:5,identifi:[5,13],tag:[12,10,13,11,8,5,6],current:[12,10,7,13,8,5,6,9],"0xu":5,digit:[5,13],lead:[12,7,13,8,5],zero:[7,11,13,8,5],end:[10,7,11,13,8,5,6],alpha0123:5,alpha00123456:5,fitparamet:[],exemplari:[5,13],"8472_exampl":5,could:[12,10,13,8,5,6,9],therefor:[12,10,13,11,5],look:[12,10,7,13,8,5,6,9],valu:[10,7,11,13,8,5,9],pos_error:[5,11,13],boundari:[12,13,11,8,5],phase:[12,13,11,8,5],asy8472:5,rate8472:5,treat:[5,10],wherea:[5,13,8],normal:[10,13,11,5,6],within:[12,10,7,11,13,8,5,6],appear:[5,13],explicitli:[5,13,8],theori:[],those:5,met:5,"try":[5,13,10],substitut:[5,11,13,10],them:[12,7,11,13,8,5],map:[],accordingli:[5,11,10,6],"_exampl":5,global_exampl:5,alwai:[12,7,13,5,6],start:[10,7,11,13,8,5,6,9],asy8471:5,rate8471:5,asy8470:5,rate8470:5,show:[7,11,13,8,5,6],reorgan:5,begin:[5,7,13,10],copi:[5,13,8,10],found:[12,10,7,11,13,8,5,9],dure:[12,10,13,5,6],affect:5,occurr:[5,10],awar:[5,13],fact:5,propag:5,model:[],usual:[5,12,13],store:[12,10,7,8,5],reach:[5,13],goal:[5,13],obei:[5,13],certain:[5,12],rule:[5,7,8,13],match:[5,13],accord:[10,13,11,8,5],achiev:[5,11,10],easili:[10,13,8,5,9],shown:[7,11,13,8,5,6],globalfit:5,relev:[7,11,13,8,5],pre:[5,8],afterward:[12,10,7,13,5,6,9],special:[5,7,13],replac:[5,13,10],review:5,activ:[5,12,8,10],choos:[12,10,13,11,8,5],keyword:[5,13],onerunfit_exampl:5,onerunfit:5,everi:[5,13,10,6],similar:[5,10],explain:[12,10,7,11,13,8,5,9],moment:[5,7,12,10],peopl:[5,7,10],cannot:[5,12,13],behav:[5,12],integr:[5,12],filenam:[5,7,13,6],rightmost:5,highest:[5,10],treatabl:5,statist:[],itself:[5,11],more:[10,7,11,13,8,5,6,9],creativ:5,care:[5,13,10],addrun:[],statement:[5,13],simpli:[5,13,10],probabl:[5,7,10],what:[12,10,13,11,5,9],two:[12,10,7,11,13,8,5],success:[7,11,13,5,6],encount:5,actual:[5,12,13,10],measur:[12,7,11,13,8,5,6],introduc:[10,7,11,13,5],reason:[5,11,13,10],shape:[5,12,13],design:[5,10],especi:[12,7,13,5,9],manipul:[5,13,8],front:[5,11,7,8],offer:[5,11,13],almost:[5,13,8],self:[5,8],explanatori:[5,8],depict:[5,13],under:[10,7,13,8,5,6,9],stai:5,enter:[5,8,10,9],otherwis:[5,13,10,9],serv:[5,11,13],second:[12,13,11,8,5],noth:[5,7,8,13],correspond:[10,7,11,13,8,5,6],littl:[13,8,10,6],helper:[10,7,13,8,6],quickli:[6,9],plot:[],handl:[12,10,7,13,8,6],heavili:[12,6],inspir:6,via:[],command:[],directli:[10,7,13,8,6],bundl:6,complement:6,implant:[13,11,12,6],energi:[],henc:[10,7,11,13,6,9],vector:[7,12,13,6],against:[7,6],typic:[10,13,8,6,9],load:[13,12,6],tri:[13,10,6],fly:[11,6],drag:[11,10,6],over:[13,10,6],axi:[12,7,11,13,6],wish:[13,6],click:[13,8,6],analog:6,remov:[13,6],often:[13,8,10,6],compar:[13,10,6,9],trend:6,hold:[7,13,6],scan:[13,6],now:[10,13,11,6,9],interest:[13,10,6],ditto:6,less:[13,6],error:[12,10,7,11,13,8,6,9],prone:[8,6,9],quicker:[13,6],button:[13,11,8,6],mupp_plot:6,applic:[12,10,13,8,6,9],refresh:6,reload:[8,6],beamtim:6,grow:6,histori:6,task:6,mous:[13,6],gambl:6,futur:[8,6],plane:6,help:[10,13,8,6,9],cmd:[13,6],text:[7,11,13,8,6],edit:[10,7,11,8,6],link:[13,8,10,6],check:[],pars:[7,6],mathemat:[13,10,6],express:[13,6],associ:[13,6],sigmasc_10:6,snapshot:[11,6],sigmasc_10err:6,max:[13,8,6],min:[13,6],sin:[13,6],tan:[13,6],exp:[13,6],log:[13,12,8,6],pow:[13,6],manner:[10,6],updat:[10,13,11,6,9],interact:[13,11,12,6],figur:[7,13,6],loadpath:6,dir:6,path:[10,7,11,13,8,6,9],bash:[10,6],home:[12,10,7,13,8,6,9],accept:[13,8,6],coll:6,selectal:6,carri:[13,10,6],ybco:6,"40nm":6,t5k:6,fc150mt:6,escan:6,norm:[13,11,6],maximum:[13,11,6],savepath:6,save:[12,10,7,11,13,8,6],place:[13,11,10,6],macro:6,fln:[13,6],"var":6,var_nam:6,expr:6,address:[13,6],datat:6,invt:6,accompani:6,err:[7,6],invterr:6,dataterr:6,col:6,sigmasc:6,temp:[12,6],txt:[10,6],e3p8kev:6,b10mt:6,tscan:6,b150mt:6,"10mt":6,sigma:6,nuclear:6,sigmaerr:6,"150mt":6,sigmasc_150:6,sigmasc_150err:6,doesn:[6,9],next:[12,10,7,13,8,6,9],pdf:[13,6],png:[13,8,6],jpg:[13,6],sigmascvstemp:6,further:[],refin:6,"true":[7,12,13,6],best:[12,10,7,13,6],ever:[7,6],row:6,until:[7,11,13],bulk:[],instrument:[7,13,8,10],bin:[10,7,11,13,8],fix:[10,7,11,13,8],binari:[7,10],rather:[7,13,8],stringent:7,lem:[7,12,13],cern:[7,13,10],tightli:7,tailor:7,situat:[7,13,10],unsatisfactorili:7,decid:[7,13,10],move:[7,11,13,10],forward:[7,11,13,9],acquisit:7,mida:7,respons:[7,13,9],build:[],decai:[7,11,13],easi:[7,8],object:[],th1f:7,orient:[7,12],mine:7,frame:[7,13,9],tfile:7,eas:[7,13,10],understand:[7,13],upcom:7,definit:[7,11,13],thing:[10,7,13,8,9],guid:[7,13,9],organ:[7,13,8],similarli:[7,13],browser:7,inspect:7,tbrowser:7,deriv:[7,13],tobject:[7,13],small:[12,10,7,13,8,9],subset:[7,13],tfolder:7,top:7,level:[7,13],tobjarrai:7,tobjstr:7,content:[7,13,10],form:[12,10,7,11,13,9],box:[7,13,8,9],entri:[7,13],sketch:[7,13],histo:[10,7,11,13,8],decayanamodul:7,hdecay001:7,hdecay002:7,scanamodul:7,hsampletemperatur:7,hsamplemagneticfield:7,detector001:7,detector002:7,hdecayxxx:7,xxx:7,"int":7,"03d":7,notat:[7,13],"class":[7,12,13],folder:7,section:[7,13,10],slow:7,control:[7,13,9],sampl:[7,11,12,9],versu:7,again:[10,7,13,8,9],meta:[7,13],minim:[12,10,7,11,13],bracket:7,item:[7,13],detector:[12,7,11,13,8],environ:[],beamlin:[7,11,13,8],elabor:[7,9],word:7,sub:[7,11,13,10],intern:[7,13,8],tstring:7,git:[7,13,10,9],url:7,xsd:7,wrote:7,nemu_analyz:7,deltat_tdc_gps_4295:7,int_t:[7,13],iso:7,date:[7,11,13,10],stop:[7,13],durat:7,sec:[7,13],laboratori:7,muon:[],beam:[7,13],momentum:[7,11,12],mev:7,speci:7,neg:[],sourc:[],target:7,low:[],setup:[7,13,10,9],cf1:7,wxy:7,resolut:[7,12],redgreen:[7,13],offset:[7,13],tintvector:7,except:[7,13,8,10],shortli:[7,13],discuss:[7,13,8,9],experi:[7,13],stimuli:7,electr:7,off:[7,13],doubl:[7,13],distinguish:7,easier:[7,10],let:7,sai:7,red:[10,7,11,13,9],green:[7,11,13],browsabl:7,string:[7,13,8,10],tobjstringv:7,quantiti:7,repres:[7,11,13],properti:[7,13],estim:[7,12,8,13],demand:[7,13],depend:[12,10,7,11,13,8,9],musrrootv:7,mock:7,print:[7,13,8],notic:[7,13,8],find:[10,7,13,8,9],encod:[12,10,7,13,8],price:7,pai:7,shade:7,"import":[7,13],approach:[7,13,10],standard:[7,13,10,9],"abstract":[7,13],though:[7,8,10],clean:[7,10,9],lot:[7,13],"2nd":7,slightli:[10,7,13,8,9],advantag:[7,13,8],maintain:7,expand:[7,13],classifi:7,group:[7,13,8,10],previou:[7,13,10],"float":7,point:[12,10,7,11,13,8],double_t:[7,13],tstringvector:7,tdoublevector:7,themselv:[7,12],code:[12,10,7,11,13,9],snippet:[7,13],reader:7,routin:[7,12,13,10],convers:[7,13],write_musrroot_runhead:7,full:[7,11,13,10],concentr:7,just:[12,10,7,13,9],prop:7,down:[7,11,13,8],deltat_tdc_gps_2871:7,come:[7,8,10],overload:7,pathnam:7,method:[7,13],tdc:[7,13],cf3:7,mrh_undefin:7,strang:7,fed:[7,13],whole:7,someth:[7,13,10,9],recreat:[7,8],iszombi:7,"return":[7,13],info:[],fillfold:7,close:[7,13,8,10],read_musrroot_runhead:7,getobject:7,cerr:[7,13],endl:[7,13],couldn:[7,13],get:[10,7,13,8,9],closefil:7,extractal:7,decod:7,fill:[7,11,13],getter:7,bool_t:[7,13],ival:[7,13],cout:[7,13],els:[7,13,8,10],getvalu:7,geterror:7,getunit:7,getdemand:7,getdescript:7,mechan:[7,13],inde:7,minimum:7,scheme:7,musrrootvalid:7,recurs:7,temporari:7,xml:[],ampl:[7,13],parser:[7,10],hand:[7,13],decent:7,book:7,libxml2:[7,10],becaus:[7,8],suppos:[7,13],schema:7,lmu:[7,8],semant:7,preform:7,cross:[7,13,10],facil:[7,13,8],musrrootlem:7,poitiv:7,wew:7,hdecay023:7,detector023:7,potenti:[],discontinu:7,"break":7,element:7,left:[7,12,8],npp:[10,7,11,13,8],spectromet:[7,11,13,9],good:[7,13,8,10],enough:[7,13,10],cryo:7,cryostat:7,oven:7,konti:7,pim3:[7,11,13],hypothet:7,light:7,per:[7,13,8],bottom:7,split:[7,13,10],mind:7,symbol:[7,13,10],hdecay003:7,hdecay004:7,hdecay007:7,hdecay008:7,hdecay011:7,hdecay012:7,hdecay013:7,hdecay014:7,hdecay017:7,hdecay018:7,hdecay021:7,hdecay022:7,hdecay024:7,hdecay027:7,hdecay028:7,hdecay031:7,hdecay032:7,hdecay033:7,hdecay034:7,hdecay037:7,hdecay038:7,continu:7,"switch":[10,7,13,8,9],jump:[7,13],cpp:[7,13],"00z":7,nemu:[7,13,10],lem12_his_0234:7,said:7,detector038:7,insert:7,x123:7,perp:7,spin:[7,11,12,13],mue4:[7,13,8],scalerinfo:7,runsummari:7,wed:7,oct:7,lco:7,wtf:7,kev:[7,12,13],ledb:7,buc:7,euc:7,event:[7,11],event_0:7,mcp1:7,event_1:7,mcp2:7,event_2:7,lemusr:7,problem:[],deviat:[7,13],hereaft:7,snip:7,somewher:[7,8,10],token:[7,13],val:[7,13],cf4:7,cf5:7,editor:[11,8,10],suit:[13,11,12,8],intend:[13,8,10],qt6:[8,10],eventu:[11,8],drop:[8,10],outdat:[13,8,10],earli:[13,8],anymor:[8,10],still:[13,12,8,10],urg:8,strongli:[13,8,10],recommend:[12,8],shell:[13,8,10],tab:[13,8],startup:[],displai:[13,12,8],locat:[12,10,13,11,8],proof:8,exec_path:8,path_to_exec:8,musrview:[],musrt0:[],insid:[13,12,8],default_save_path:8,save_path:8,msr_default_file_path:8,msr_def_path:8,timeout:[13,8],canva:[13,11,8],keep_minuit2_output:8,flag:[13,8],minuit2:[],kept:[13,8],dump_ascii:8,dump:[13,8],dump_root:8,title_from_data_fil:8,chisq_pre_run_block:8,chisq:[13,11,8],estimate_n0:8,procedur:[12,10,13,11,8],musrview_show_fouri:8,fourier:[],transform:[12,10,13,11,8],domain:[13,11,8],musrview_show_avg:8,averag:[13,12,8],power:[10,13,11,8,9],spectra:[13,8],enable_musrt0:8,font_set:8,font:8,font_nam:8,font_siz:8,size:[13,8],msr_file_default:8,institut:[13,11,8],inst:[13,8],ral:[8,10],jparc:8,file_format:[13,8],nexu:[],musr:[13,8],ppc:[13,11,8],mdu:[13,11,8],wkm:[13,11,8],mud:[13,11,8],lifetime_correct:8,lifetimecorrect:[13,8],msr2data_default:8,tick:8,chain_fit:8,write_data_head:8,ignore_data_header_info:8,write_column_data:8,create_msr_file_onli:8,fit_onli:8,global_plu:8,recreate_data_fil:8,open_file_after_fit:8,experienc:[8,10],who:8,help_sect:8,variou:[13,8,10],messag:[13,8],musr_web_x:8,main:[11,8,10],musrft:[],func_pixmap_path:8,pix_path:8,latex:8,pixmap:8,visual:[11,8],theory_funct:8,syntax:[13,8],func:8,menu:[13,11,8],pictur:8,utf:[13,12,8,10],xmln:[13,8],html:8,usr:[13,8,10],local:[12,8,10,9],share:[13,8,10,9],doc:[13,11,8,10],chisq_per_run_block:8,recent_fil:8,path_file_nam:8,musr_web_main:8,musr_web_titl:8,thetitl:8,musr_web_paramet:8,thefitparameterblock:8,musr_web_theori:8,thetheoryblock:8,musr_web_funct:8,thefunctionsblock:8,musr_web_run:8,therunblock:8,musr_web_command:8,thecommandsblock:8,musr_web_fouri:8,thefourierblock:8,musr_web_plot:8,theplotblock:8,musr_web_statist:8,thestatisticblock:8,musr_web_msr2data:8,musr_web_musrft:8,a_2:8,"3_musrft":8,monospac:8,latex_imag:8,asymmetri:[],statgsskt:[13,8],rate:[13,11,12,8],"static":[12,8],gauss:[13,11,12,8],respect:[12,10,13,11,8],bar:[13,8],keyboard:[11,8],shortcut:[],scratch:[8,10],too:[13,8,10],priori:8,knowledg:8,calcul:[13,11,12,8],likelihood:[13,12,8],kei:[],alt:8,equival:[13,8],mai:[13,8,10],chosen:[13,8,10],swap:[13,8],vice:[13,8],versa:[13,8],adjust:[13,11,8,10],initi:[12,10,13,11,8],fitter:8,own:[13,8],docu:[13,8,9],raw:[13,8],dump_head:[],stage:[13,8],wand:8,coupl:[13,8,10,9],dialogu:8,briefli:[8,10],explicit:[13,8],year:[13,8,9],pull:[8,10],choosen:8,rrf:[],minu:8,transvers:[13,11,8],longitudin:8,choic:[13,8,10],question:[13,8],ask:[8,10],correctli:[13,11,8],proper:[13,8,10,9],prompt:[13,8,10,9],peak:[13,12,8],pop:8,disadvantag:8,freeli:8,custom:[13,8],cost:8,yourself:8,stand:[8,9],whatev:[8,9],press:[13,11,8],syntact:8,appropri:[8,9],previous:8,handi:8,furthermor:[13,8,10],pack:[13,11,8,10],minuit:[13,12,8],reset:[13,8],sometim:[13,8],went:[8,10],wrong:8,leav:8,far:[13,8],iter:[13,12,8],individu:[13,8],tediou:[12,8],popup:8,asym:8,uncheck:8,unselect:8,modifi:[12,8],degre:[13,11,8],cancel:8,anyth:[13,8],scale:[13,8],factor:[13,8],absolut:[13,11,8,10],explor:9,hal:[13,9],memo:[13,9],rotat:[13,11,9],tremend:[10,9],muonium:[13,9],appl:[10,9],cpu:[13,10,9],straight:9,multi:[13,10,9],thread:[13,10,9],openmp:[13,10,9],shop:9,bui:9,gamer:9,sure:[13,10,9],server:9,suffici:[12,9],strong:[13,11,9],yet:[12,10,13,11,9],fall:[13,9],back:[13,9],conceptu:9,latest:[10,9],hardwar:9,crunch:9,readi:[13,10,9],acceler:[13,9],termin:[13,11,10,9],lspci:9,grep:9,corpor:9,gk110bgl:9,rev:[13,12,9],recogn:9,download:[10,9],center:[12,9],hat:[10,9],enterpris:9,rhel:[10,9],rpm:[10,9],diag:9,rhel7:9,x86_64:9,conflict:9,nouveau:9,reboot:9,machin:[12,10,9],omit:[13,10,9],thin:[12,9],host:9,incorpor:9,paper:9,wiki:9,brief:[13,10,9],clone:[10,9],got:9,consist:[13,12,9],gitlab:[13,10,9],uldis_l:9,mkdir:[10,9],denable_musr:9,dcmake_install_prefix:[10,9],exec:9,non:[],librari:[13,12,10,9],"super":9,sbin:[10,9],ldconfig:[10,9],ld_library_path:[10,9],launchctl:[10,9],setenv:[10,9],checkout:[10,9],branch:[10,9],dks6:9,ddk:9,disabl:[13,10,9],rootsi:[10,9],daslib:[10,9],dbmwlib:[10,9],dnexu:[10,9],lookup:9,superus:[10,9],vga:9,advanc:9,micro:[13,9],devic:9,inc:9,ati:9,hawaii:9,grenada:9,"290x":9,amdgpu:9,pro:[10,9],unpack:9,tar:[13,10,9],jxvf:9,blabla:9,usermod:9,video:9,technolog:9,materi:9,leverag:9,amp:9,xvjf:9,sdkinstal:9,linux64:9,bz2:[13,9],opt:[13,10,9],amdappsdk:9,note:[],instruct:[13,10,9],compil:[13,10,9],xcode:[10,9],deliv:[13,9],easiest:[10,9],involv:[12,9],demonstr:10,"while":[13,10],brave:10,virtual:[13,10],encourag:10,gcc:[13,10],tool:[13,10],pkg:10,config:10,boost:10,spirit:10,scientif:[13,12,10],effici:[13,12,10],fftw:10,fast:10,discret:[11,10],toolkit:10,gnome:10,hdf4:[13,10],manag:10,soon:10,why:[13,10],isi:[13,10],abl:10,cope:10,hdf5:[13,10],agre:10,minixml:10,mxml:10,broken:10,neutron:10,rai:10,scienc:10,qt5:10,kick:10,wide:10,focus:10,seriou:10,distribut:[],fedora:10,debian:10,ubuntu:10,mint:10,opensus:10,manjaro:10,arm:10,nativ:10,microsoft:10,distributor:10,taken:[13,10],dev:[13,10],devel:10,trick:10,never:10,qt4:10,deprec:[],yum:10,gsl:10,qtwebkit:10,epel:10,releas:[13,10],qtbase:10,qtsvg:10,dpkg:10,apt:10,libboost:10,libgsl:10,libfftw3:10,libqt4:10,libqtwebkit:10,qtbase5:10,libqt5svg5:10,qtbase6:10,libqt6svg6:10,everyon:10,know:10,himself:10,doe:[13,10],websit:10,engin:10,complain:10,distro:10,hdf:10,deb:10,libhdf4:10,libhdf5:10,master:10,repositori:10,github:10,com:10,nexusformat:10,denable_hdf5:10,denable_hdf4:10,denable_mxml:10,sudo:10,flavour:[13,10],incompat:10,guess:[13,10],warn:[13,10],upgrad:10,recompil:10,redhat:10,libx11:10,libxft:10,libxpm:10,libxext:10,want:[13,10],systemat:10,term:10,offici:10,root_build:10,dgminim:10,dasimag:10,dmathmor:10,dminuit2:10,dxml:10,root_exec:10,multicor:10,miss:[13,10],told:10,luke_skywalk:10,echo:10,bashrc:10,bash_profil:10,restart:10,onc:[13,11,12,10],proce:[11,10],installatio:10,recent:[13,10],muonspin:10,root6:10,legaci:10,newer:10,dec:10,xarg:10,install_manifest:10,altern:[13,10],prefix:10,aslib:10,bmwlib:10,dbnmrlib:10,bnmrlib:10,dqt_based_tool:10,dqt_version:10,auto:10,dtry_openmp:10,core:[13,10],finish:[11,10],musrfitpath:10,musrfit_startup:[],built:[13,10],higher:10,qt3:10,qmake:10,uic:10,quick:[13,10],successfulli:[13,10],hasn:[],adventur:10,advic:10,wonder:10,occur:10,great:[],gain:[],nice:12,unix:10,fine:10,revis:[13,10],fulfil:10,a2p:[],autoconf:10,automak:10,passwd:[],binutil:[],bison:[],bzip2:[],colorgcc:[],coreutil:[],curl:[],cygutil:[],editright:[],fftw3:[12,10],findutil:[],flex:[],adob:[],dpi100:[],dpi75:[],alia:10,bitstream:[],ibm:[],type1:[],sun:[],misc:[],xfree86:[],fontconfig:[],freeglut:[],gawk:[],gcc4:[],fortran:[],gccmakedep:[],gettext:[],ghostscript:[],std:13,giflib:[],gmp:[],groff:[],gzip:[],inputproto:[],jasper:[],jpeg:[],lapack:[],libbz2_1:[],libcharset1:[],libcurl4:[],libfftw3_3:[],libgcc1:[],libgd:[],libgif:[],libgl:[],libgl1:[],libglu:[],libglu1:[],libglut:[],libglut3:[],libgmp:[],libgmp3:[],libgomp1:[],libic:[],libice6:[],libjpeg:10,libjpeg62:[],liblapack:[],libmpfr:[],libmpfr1:[],libncurs:[],libncurses9:[],libosmesa:[],libosmesa7:[],libpng:[],libpng14:[],libreadline6:[],libsm:[],libsm6:[],libssh2_1:[],libstdc:[],libtiff:[],libtiff5:[],libtool:10,libx11_6:[],libxau:[],libxau6:[],libxaw7:[],libxcb:[],xlib:[],libxcursor:[],libxcursor1:[],libxdmcp:[],libxdmcp6:[],libxext6:[],libxfix:[],libxfixes3:[],libxfont:[],libxfont1:[],libxft2:[],libxi:[],libxi6:[],libxkbfile1:[],libxmu:[],libxmu6:[],libxpm4:[],libxrend:[],libxrender1:[],libxt:[],libxt6:[],login:10,makedepend:[],man:[],mpfr:[],nano:[],opengl:[],openssh:[],openssl:[],pdftk:[],perl:[],ping:[],psutil:[],python:[],readlin:[],rebas:[],rgb:13,rsync:10,sed:[],subvers:[],tcltk:[],terminfo:[],unzip:[],vim:[],w32api:[],icon:[13,11],xauth:[],xextproto:[],xfontsel:[],xinit:[],xkbcomp:[],xkeyboard:[],xkill:[],xlogo:[],xlsfont:[],xorg:[],xproto:[],xrdb:[],xrefresh:[],xset:[],xterm:[],zip:[],zlib:[],zlib0:[],libqt3support4:[],libqtassistantclient4:[],libqtcore4:[],libqtdbus4:[],libqtdesigner4:[],libqtgui4:[],libqthelp4:[],libqtnetwork4:[],libqtopengl4:[],libqtscript4:[],libqtscripttools4:[],libqtsql4:[],libqtsvg4:[],libqttest4:[],libqtwebkit4:[],libqtxml4:[],libqtxmlpatterns4:[],posix:[],convent:12,hard:[],drive:[],network:[],cygdriv:[],stick:[],had:[],x_yy_z:10,"1_33_1":[],librpc:[],sunrpc:[],www:[12,10],hdfgroup:[],ftp:[],src:10,jpegsrc:[],v6b:[],precompil:[],xzf:[],root_v5:[],win32gcc:[],due:[13,12,10],visit:[],gminim:[],asimag:[],mathmor:[],prepar:10,accomplish:10,usernam:10,qtdir:10,i686:[],reopen:[],readili:[],startxwinrc:[],status_access_viol:[],ash:[],rebaseal:[],resolv:[],administr:[],privileg:[],big:[],sur:[],intel:10,silicon:10,aspect:10,happen:10,extent:10,emploi:10,emphas:10,rout:10,sierra:10,mojav:10,unistal:10,proceed:10,dvd:10,xcodebuild:10,licens:[13,10],x11:10,leopard:10,snow:10,xquartz:10,newest:10,port:10,selfupd:10,remark:[13,10],synchron:10,frequent:10,servic:10,firewal:10,svn:10,trunk:10,dport:10,sync:10,pkgconfig:10,past:10,lazi:10,dmg:10,writ:10,root_v6:10,macosx64:10,clang91:10,owner:10,life:[13,11,10],chown:10,chgrp:10,staff:10,exactli:[13,10],dopengl:10,dbuiltin_glew:10,wisdom:[12,10],harder:10,adopt:[13,10],parenthes:[13,10],macosx:10,plist:10,doctyp:10,dtd:10,propertylist:10,dict:10,qt3mac:10,stumbl:10,smooth:10,zsh:10,zprofil:10,nuisanc:10,workaround:10,fail:[13,10],trigger:10,crash:10,stabl:10,crypto:10,unstabl:10,finkcommand:10,boost1:10,nopython:10,shlib:10,libtool2:10,bit:10,earlier:10,"1_63_0":10,cpp11:10,unfortun:10,subject:10,musredit_qt5:10,skip:10,circumst:10,finder:10,dyld_library_path:10,mgui:10,differenti:[13,11],diamagnet:[11,12],approxim:11,geometri:11,parallel:[13,11,12],positron:[13,11,12],counter:[13,11],detect:11,precess:11,"3110_tutori":11,conveni:11,underli:11,divid:[11,12],xyz:11,normup:11,bgup:11,phaseup:11,normdown:11,bgdown:11,phasedown:11,normright:11,bgright:11,phaseright:11,asymsig1:11,ratesig1:11,fieldsig1:11,asymsig2:11,ratesig2:11,fieldsig2:11,uncertainti:[11,12],asymmetr:11,lower:[13,11],upper:[13,11],background:[13,11],uncorrel:11,three:[13,11,12],remain:11,signal:[13,11,12],holder:11,amplitud:11,depolar:[13,11,12],simplexpo:[13,11],tfieldco:[13,11],map1:[13,11],fun1:[13,11],frequenc:[13,11,12],simplegss:[13,11],fun2:[13,11],predefin:[13,11],multipli:[13,11],sign:11,fun:11,interrel:11,gamma_mu:[13,11],par12:[13,11],par15:11,altogeth:[13,11],deltat_pta_gps_3110:11,fittyp:[13,11],backgr:[13,11],map2:[13,11],map3:11,undefin:11,exce:11,mino:[13,11,12],mhz:[13,11,12],fourier_pow:[13,11],apod:[13,11],weak:[13,11],medium:[13,11],real_and_imag:[13,11],par3:[13,11],imaginari:[13,11],drawn:[13,11],abscissa:[13,11],ordin:[13,11],use_fit_rang:[13,11],third:[13,11,12],ndf:11,freedom:[13,11],converg:[13,11,12],blue:[13,11],count:[13,11],zoom:[13,11],graph:[13,11],around:[13,11],cursor:[13,11],suitabl:11,repeat:[13,11],comma:[13,11],between:[13,11,12],"short":[13,11],conclud:11,attent:[13,11,12],"3111_tutori":11,"3114_tutori":11,"_tutori":11,dark:11,theme:11,facilit:12,gyromagnet:[13,12],ratio:[13,12],smu:12,outlin:12,literatur:12,reli:12,repeatedli:12,sizabl:12,worth:12,maxim:[13,12],trial:12,deserv:12,effect:[13,12],shift:[13,12],advis:12,prove:12,appreci:12,induct:12,vari:[13,12],dimens:12,incid:12,simul:12,trim:[13,12],arrai:12,total:[13,12],thick:12,solv:12,equat:[13,12],layer:[13,12],account:[13,12],superfluid:12,macroscop:12,dover:12,adjac:12,penetr:[13,12],depth:[13,12],constitu:12,half:12,film:12,userfcn:[13,12],tlondon1dh:12,deg:12,dead:[13,12],tlondon1d1l:12,fraction:[13,12],substrat:12,bilay:12,heterostructur:12,tlondon1d2l:12,trilay:12,tlondon1d3l:12,investig:12,flux:12,probe:12,randomli:12,spatial:12,seri:12,reciproc:12,coeffici:[13,12],coher:[13,12],gaussian:12,cutoff:12,brandt:12,phy:[13,12],riseman:[13,12],analyt:12,ginzburg:12,landau:12,yaouanc:[13,12],dalma:[13,12],réotier:[13,12],bessel:[13,12],region:[13,12],triangular:12,grid:12,inter:12,distanc:12,tbulktrivortexlondon:12,tbulktrivortexml:12,tbulktrivortexagl:12,tbulktrivortexngl:12,migrad:[13,12],proven:12,larg:[13,12],futil:12,strategi:[13,12],max_likelihood:[13,12],hess:[13,12],bmw_startup:12,debug:[13,12],one_or_zero:12,deactiv:12,path_to_fil:12,invalid:12,delta_t:12,rest:12,microsecond:12,delta_b:12,resb:12,vortexlattic:12,n_vortexgrid:12,data_path:[13,12],data_path_prefix:12,n_theori:12,invers:12,energy_list:[13,12],energy_label:12,rge:[],expect:[13,12],belong:12,wordsofwisdom:12,trimsp:[13,12],"02_0":12,"03_0":12,"03_6":12,"05_0":12,"05_3":12,relax:[13,12],slr:12,reson:[13,12],lineshap:12,puls:[13,12],evolut:12,prl:12,lifetim:[13,12],exponenti:[13,12],exprlx:12,stretch:12,sexprlx:12,expon:[13,12],chemic:12,anisotropi:12,powder:12,mehr:12,solid:[13,12],springer:12,axial:12,symmetr:12,observ:12,paralel:12,perpendicular:12,symmetri:12,anisotrop:12,along:[13,12],loss:12,ellipt:12,linegauss:12,fwhm:12,height:12,lorentzian:12,linelorentzian:12,laplacian:12,linelaplac:12,skew:12,lineskewlorentzian:12,width:[13,12],lineskewlorentzian2:12,convolut:12,powderlineaxiallor:12,powderlineaxialgss:12,powderlineasymlor:12,princip:12,powderlineasymgss:12,gpl:13,philosophi:13,abil:13,fcn:13,sever:13,correl:13,renam:13,msr_file_without_extens:13,msr_file:13,maxlh:13,estimaten0:13,timeout_tag:13,overwrit:13,prevent:13,orphan:13,jam:13,"8472_tf_histo":13,avg:13,one_to_on:13,graphic_format_extens:13,session:13,"8472_0":13,gif:13,svg:13,xpm:13,"8472_x":13,experiment:13,action:13,canvas:13,toggl:13,spectrum:13,area:13,hair:13,color:13,consid:13,feed:13,exit:13,"3310_0":13,subtract:13,fopt:13,neither:13,nor:13,pad:13,angular:13,interpret:13,lem15_his_01234:13,rebin:13,fudg:13,elimin:13,sens:13,tweak:13,tdc_hifi_2014_00153:13,mnsi:13,"50k":13,unzoom:13,crosshair:13,gett0frompromptpeak:13,firstgoodbinoffset:13,argument:13,channel:13,interrupt:13,msr_file_in:13,msr_file_out:13,parc:13,wors:13,aim:13,idf1:13,idf2:13,nexus1:13,nexus2:13,flexibl:13,filenamelist:13,lem10_his_0111:13,lem10_his_0113:13,run3:13,runstart:13,runend:13,rrrr:13,rrrrrr:13,yyyi:13,tell:13,unless:13,sent:13,stdout:13,compress:13,absent:13,lem10_his_0123:13,lem10_his_0123_v2:13,idf:13,deltat_tdc_gps_:13,d2001:13,deltat_tdc_gps_0123:13,deltat_tdc_gps_0137:13,deltat_tdc_alc_:13,rrr:13,spit:13,psi_gps_:13,psi_:13,"_gps_":13,psi_gps_run_100to117:13,archiv:13,lem10_his_0012:13,rebin25:13,lem10_his_0123_rebin25:13,runno:13,fileformat:13,pta:13,ltf:13,dolli:13,gpd:13,hifi:13,tdc_hifi_2015_00123:13,construct:13,path_to_data:13,write_per_run_block_chisq:13,pearson:13,fourier_set:13,phase_incr:13,phincr:13,increment:13,optim:13,root_set:13,marker_list:13,marker:13,color_list:13,intranet:13,mnt:13,unlik:13,headlin:13,style:13,lower_boundari:13,upper_boundari:13,init:13,alpha:13,asi:13,freq:13,constrain:13,semi:13,par:13,asy1:13,rate1:13,asy2:13,field2:13,rate2:13,whitespac:13,avoid:13,whenev:13,abbr:13,"const":13,generexpo:13,stg:13,statgssktlf:13,sgktlf:13,dyngssktlf:13,dgktlf:13,statexpkt:13,sekt:13,statexpktlf:13,sektlf:13,dynexpktlf:13,dektlf:13,combilgkt:13,lgkt:13,strkt:13,skt:13,spinglass:13,spg:13,rdanisohf:13,rahf:13,internfld:13,internbsl:13,internfldgk:13,ifgk:13,internfldl:13,ifll:13,abragam:13,skewedgss:13,skg:13,staticnkzf:13,snkzf:13,staticnktf:13,snktf:13,dynamicnkzf:13,dnkzf:13,dynamicnktf:13,dnktf:13,muminusexptf:13,mmsetf:13,polynom:13,hayano:13,conden:13,matter:13,keren:13,uemura:13,crook:13,cywinski:13,turner:13,harshman:13,kornilov:13,pomjakushin:13,letter:13,larkin:13,physica:13,condens:13,noak:13,kalviu:13,oxford:13,simplifi:13,formula:13,ident:13,compact:13,difficulti:13,simultan:13,funx:13,complic:13,dictionari:13,libmylibrari:13,tmyfunct:13,auxiliari:13,arithmet:13,divis:13,aco:13,asin:13,atan:13,cosh:13,sinh:13,tanh:13,acosh:13,asinh:13,atanh:13,sqrt:13,parx:13,par5:13,mapi:13,mainli:13,denot:13,frac1:13,shorten:13,logic:13,whether:13,fire:13,addt0:13,rrf_freq:13,rrf_pack:13,rrf_phase:13,exact:13,pie3:13,particular:13,run_file_nam:13,record:13,digress:13,musrfulldatapath:13,colon:13,smith:13,lem07_his_2018:13,musrfulldatapathtoken:13,runnam:13,ext:13,lem07_2018_rb1_npp:13,d2007:13,deltat_pta_gps_2650:13,d2010:13,deltat_tdc_gpd_8472:13,mue1:13,beauti:13,muminu:13,t0addrun1:13,t0addrun2:13,t0addrun1forward:13,t0addrun1backward:13,t0addrun2forward:13,t0addrun2backward:13,sum:13,onlin:13,angl:13,nanosecond:13,fun3:13,transfer:13,ten:13,indicationg:13,helic:13,opposit:13,fgb:13,lgb:13,larger:13,direct:13,span:13,meaningless:13,nearli:13,simplex:13,genuin:13,multidimension:13,slower:13,revert:13,linear:13,matrix:13,covari:13,batch:13,obsol:13,compatibilti:13,print_level:13,mnplot:13,contour:13,pari:13,restor:13,fit_rang:13,scale_n0_bkg:13,sector:13,speedup:13,khrono:13,anywher:13,optimum:13,list_of_param_to_be_fix:13,freq1:13,freq2:13,complex:13,flavor:13,n00:13,n01:13,n10:13,n11:13,nn0:13,nn1:13,inlin:13,fals:13,footnot:13,bigger:13,phd:13,thesi:13,ubc:13,val0:13,sep:13,val1:13,valn:13,parx0:13,parx1:13,parxn:13,par7:13,par17:13,par22:13,par27:13,par32:13,par37:13,par42:13,par47:13,par52:13,par57:13,par62:13,par67:13,par72:13,par77:13,par82:13,fcp:13,bcp:13,relative_bcp:13,parrx0:13,rel:13,summ:13,parxj:13,parr:13,obvious:13,offest:13,range_for_phase_correct:13,par8:13,nsec:13,sub_rang:13,view_pack:13,logx:13,logarithm:13,logi:13,khz:13,par4:13,downward:13,upward:13,unwant:13,rid:13,filter:13,kaiser:13,tricki:13,compon:13,ideal:13,uncontrol:13,ghost:13,imperfect:13,distort:13,dispers:13,fold:13,substanti:13,urgent:13,infer:13,math:13,mathrm:13,theoret:13,rearrang:13,unbin:13,histogramm:13,reserv:13,helec:13,plug:13,simpler:13,although:13,declar:13,puserfcnbas:13,evalu:13,cassert:13,cmath:13,namespac:13,constructor:13,destructor:13,classdef:13,destroi:13,peculiar:13,ness:13,introductori:13,topic:13,const_correct:13,herein:13,classimp:13,assert:13,arg:13,linkdef:13,tmylibrarylinkdef:13,ifdef:13,"__cint__":13,pragma:13,endif:13,wise:13,makefil:13,attach:13,tmylibrari:13,libtmylibrari:13,sensibl:13,bluish:13,node:13,uf1:13,uf2:13,entiti:13,ineffici:13,ufx:13,g_ufx:13,consum:13,abrikosov:13,cycl:13,thu:13,overhead:13,tmyglobalfunct:13,isvalid:13,fvalid:13,fprevparam:13,"void":13,calcsomethingcpuexpens:13,liklei:13,getwhatisneed:13,privat:13,needglobalpart:13,setglobalpart:13,globalpart:13,uint_t:13,idx:13,globalpartisvalid:13,finvokedglob:13,fidxglob:13,fglobaluserfcn:13,static_cast:13,sorri:13,resiz:13,pointer:13,dynamic_cast:13,retriev:13,pseudo:13,increas:13,safeti:13,safe:13,omp:13,profound:13,impact:13,polar:13,normaiz:13,mont:13,carlo:13,dealt:13,interpol:13,prgehandl:13,bool:13,prgedatalist:13,getrgedata:13,fdata:13,getzmax:13,get_n:13,getenergyindex:13,readrgefil:13,prgedata:13,runtim:13,nonlocal_par:13,fourier_point:13,trim_sp:13,rge_fln_pr:13,sn_e:13,portion:13,embrac:13,sn_e1000:13,sn_e2000:13,aforement:13,pnl_pippardfitterglob:13,frgehandl:13,nonlocal_startup:13,panic:13,unhappi:13,unfriendli:13,pnl_pippardfitt:13,fpippardfitterglob:13,calculatefield:13,energyindex:13,calcualt:13,pol:13,dpol:13,getmuonstoppingdens:13,degree2rad:13,getmagneticfield:13,fab:13,filesystem:10,vaild:13,monterei:10,wsl:10,virtualbox:10,alik:10,usage0:13,usage1:13,options1:13,usage2:13,options2:13,inputfil:13,separt:13,correspon:13,flame:13,iii:13,deltat_tdc_gps_4324:13,deltat_tdc_gps_4325:13,deduc:13,option1:13,option2:13,run_name_templ:13,instrument_nam:13,fragment:13,"_his_":13,rrrrr:13,d2019:13,lem19_his_0123:13},objects:{},objtypes:{},objnames:{},titleterms:{acknowledg:0,any2mani:[13,1],univers:1,"\u03bcsr":[12,7,13,1,6],file:[12,7,11,13,8,5,1],format:[7,13,1],convert:1,bugtrack:2,how:3,cite:3,musrfit:[10,13,3,11,8,4,5,9],welcom:4,document:[12,4],indic:4,tabl:4,msr2data:[5,11,13],program:5,automat:5,process:[5,11],multipl:[5,11],msr:[5,11,13],basic:[5,7,8,13],type:[5,13],usag:[5,13,8,6],run:[5,7,13],list:5,structur:5,option:[5,10],paramet:[5,8,6],global:[5,13],mode:5,gener:[5,13],extract:5,extend:5,known:5,limit:5,graphic:[5,6,9],user:[12,7,13,5,6],interfac:[5,7,8,6],provid:5,musredit:[5,8,10],mupp:6,plotter:6,defin:6,variabl:[10,6],dialog:6,script:6,summari:6,musrroot:7,extens:[7,13],open:7,some:7,concern:7,root:[7,10],inform:7,contain:7,runhead:7,runinfo:7,overview:[7,13],tmusrrunhead:7,concept:7,header:7,write:7,read:[7,11],valid:7,requir:[7,10],detectorinfo:7,sampleenvironmentinfo:7,magneticfieldenvironmentinfo:7,beamlineinfo:7,exhaust:7,tree:7,includ:7,everyth:[7,10],tmusrrunphysicalquant:7,possibl:7,represent:7,gui:8,base:8,introduct:[13,12,8],avail:[13,8],execut:[13,8],configur:[13,8],musrgui:[8,10],musredit_startup:8,xml:[13,12,8],featur:8,musrwiz:8,theori:[13,8],"function":[13,12,8],map:[13,8],fit:[13,11,8,9],info:8,creat:8,musrstep:8,set:[10,9],high:9,speed:9,gpu:[13,9],tesla:9,k40c:9,nvidia:9,driver:9,instal:[10,9],cuda:9,via:[10,9],cmake:[10,9],amd:9,card:9,radeon:9,"390x":9,app:9,softwar:[10,9],develop:9,kit:9,sdk:9,enabl:[13,9],opencl:[13,9],support:[13,10,9],maco:[10,9],differ:10,platform:10,oper:10,system:10,restrict:10,gnu:10,linux:10,nexu:10,build:10,last:10,step:10,depreci:[],check:10,window:10,cygwin:[],potenti:[],problem:[],mac:10,macport:10,packag:10,from:10,sourc:10,environ:10,note:10,catalina:10,fink:10,obsolet:10,tutori:11,singl:[13,11],histogram:[13,11],determin:11,data:[11,12],rang:11,musrt0:[13,11],model:[11,12],view:11,musrview:[13,11],further:11,asymmteri:11,lib:12,meissner:12,profil:12,vortex:12,lattic:12,relat:12,bmw:12,libfitpofb:12,dimension:12,london:12,state:12,isotrop:12,superconductor:12,bulk:12,field:12,distribut:12,mix:12,startup:12,nonloc:12,superconduct:12,screen:12,analyz:12,"\u03b2":12,nmr:[13,12],bnmr:12,libbnmr:12,liblineprofil:12,manual:13,kei:13,shortcut:13,musrft:13,msr2msr:13,dump_head:13,musrfit_startup:13,descript:13,titl:13,fitparamet:13,block:13,command:13,minuit2:13,detail:13,fourier:13,plot:13,statist:13,rrf:13,asymmetri:13,neg:13,muon:13,beta:13,non:13,without:13,object:13,access:13,rge:13,handler:13,low:13,energi:13,technic:13,framework:13,deprec:10,addrun:13},envversion:43}) \ No newline at end of file +Search.setIndex({docnames:["acknowledgement","any2many","bugtracking","cite","index","msr2data","mupp","musr-root","musredit","setup-dks","setup-standard","tutorial","user-libs","user-manual"],envversion:53,filenames:["acknowledgement.rst","any2many.rst","bugtracking.rst","cite.rst","index.rst","msr2data.rst","mupp.rst","musr-root.rst","musredit.rst","setup-dks.rst","setup-standard.rst","tutorial.rst","user-libs.rst","user-manual.rst"],objects:{},objnames:{},objtypes:{},terms:{"00z":7,"02_0":12,"03_0":12,"03_6":12,"03d":7,"05_0":12,"05_3":12,"0xu":5,"10mt":6,"150mt":6,"290x":9,"2nd":7,"3110_tutori":11,"3111_tutori":11,"3114_tutori":11,"3310_0":13,"390x":4,"3_musrft":8,"40nm":6,"50k":13,"8400_tf_h13":5,"8460_tf_h13":5,"8470_tf_h13":5,"8471_tf_h13":5,"8472_0":13,"8472_exampl":5,"8472_tf_h13":5,"8472_tf_histo":13,"8472_x":13,"8472_zf":[5,8],"8473_tf_h13":5,"8474_tf_h13":5,"8475_tf_h13":5,"8476_tf_h13":5,"8477_tf_h13":5,"8478_tf_h13":5,"8479_tf_h13":5,"8500_zf":5,"8502_zf":5,"8503_zf":5,"8504_zf":5,"8507_zf":5,"\u03b1":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03b2":[0,1,3,4,5,6,7,8,9,10,11,13],"\u03b3":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03b4":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03b5":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03b6":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03b7":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03b8":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03b9":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03ba":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03bb":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03bc":[0,1,3,4,5,6,7,8,9,10,11,12,13],"\u03bcsr":9,"\u03bd":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03be":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03bf":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c0":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c1":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c2":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c3":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c4":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c5":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c6":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c7":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c8":[0,1,3,5,6,7,8,9,10,11,12,13],"\u03c9":[0,1,3,5,6,7,8,9,10,11,12,13],"abstract":[7,13],"break":7,"case":[3,5,6,7,8,9,10,11,12,13],"class":[7,12,13],"const":13,"default":[5,8,9,10,13],"export":[5,9,10,11,13],"final":[5,10,11,12,13],"float":7,"function":[4,5,6,9,10,11],"import":[7,13],"int":7,"new":[2,5,7,8,10,11,13],"public":[3,10,12,13],"r\u00e9otier":[12,13],"return":[7,13],"short":[11,13],"static":[8,12],"super":9,"switch":[7,8,9,10,13],"true":[6,7,12,13],"try":[5,10,13],"var":6,"void":13,"while":[10,13],Adding:7,And:13,CDs:10,DKS:[0,3,4,10],For:[1,2,5,6,7,8,9,10,11,12,13],GPS:[7,11],His:0,Its:[5,13],JPS:3,NXS:13,Not:7,One:[7,10,11,13],That:13,The:[3,4,7,8,9,10],Their:12,Then:[10,13],There:[5,7,8,9,13],These:[5,7,11,13],Used:13,Useful:[10,13],Using:[3,5,9,13],Will:[5,10,13],With:[10,13],__cint__:13,_exampl:5,_gps_:13,_his_:13,_tf_h13:5,_tutori:11,_zf:5,a_2:8,abbr:13,abc:5,abil:13,abl:10,about:[5,7,10,11,13],abov:[5,6,7,8,9,10,11,12,13],abragam:13,abridg:5,abrikosov:13,abs:6,abscissa:[11,13],absent:13,absolut:[8,10,11,13],acceler:[9,13],accept:[6,8,13],access:[0,7,8,9],accompani:6,accomplish:10,accord:[5,8,10,11,13],accordingli:[5,6,10,11],account:[12,13],achiev:[5,10,11],acknowledg:[3,4,12],aco:13,acosh:13,acpect:10,acquisit:7,action:13,activ:[5,8,10,12],actual:[5,10,12,13],add:[3,5,6,7,8,9,10,11,13],added:[5,7,8,9,10,13],adding:[6,7,13],addit:[5,6,7,8,9,10,11,12,13],addition:[5,8,10,11,13],address:[6,13],addrun:5,addt0:13,adelmann:3,adjac:12,adjust:[8,10,11,13],admir:0,adopt:[10,13],advanc:9,advantag:[7,8,13],adventur:10,advic:10,advis:12,affect:5,aforement:13,afs:13,after:[5,7,8,9,10,11,13],afterward:[5,6,7,9,10,12,13],again:[7,8,9,10,13],against:[6,7],agre:10,aim:13,alia:10,alik:10,all:[5,6,7,8,9,10,11,13],allow:[1,5,6,7,8,9,10,12,13],almost:[5,8,13],along:[12,13],alpha00123456:5,alpha0123:5,alpha:13,alreadi:[5,6,8,9,10,13],also:[3,5,6,7,8,9,10,11,12,13],alt:8,altern:[10,13],although:13,altogeth:[11,13],alwai:[5,6,7,12,13],amd:[4,13],amdappsdk:9,amdgpu:9,amp:9,ampl:[7,13],amplitud:11,analog:6,analysi:[3,5,7,9,10,11,12,13],analyt:12,analyz:[3,4,6,7,9,11,13],angl:13,angular:13,ani:[5,7,8,9,10,11,13],anisotrop:12,anisotropi:12,anoth:[5,6,7,8,10,13],any2mani:[4,7],anymor:[8,10],anyth:[8,13],anywher:13,apart:[5,10,12],apod:[11,13],app:10,appear:[5,13],append:[5,10,13],appl:[9,10],appli:[5,6,7,11,12,13],applic:[6,8,9,10,12,13],appreci:12,approach:[7,10,13],appropri:[8,9],approxim:11,apt:10,archiv:13,area:13,arg:13,argument:13,arithmet:13,arm:10,around:[11,13],arrai:12,ascii:[5,8,11,12,13],asi:13,asin:13,asinh:13,ask:[8,10],aslib:10,assert:13,associ:[6,13],assum:[5,7,8,9,10,11,12,13],asy1:13,asy2:13,asy8470:5,asy8471:5,asy8472:5,asym:8,asymmetr:11,asymmetri:[8,11,12],asymmteri:4,asymsig1:11,asymsig2:11,atan:13,atanh:13,ati:9,attach:13,attempt:5,attent:[11,12,13],attribut:13,audienc:0,auto:10,autoconf:10,automak:10,automat:[4,6,8,10,13],auxiliari:13,avail:[4,5,6,7,9,10,11,12],averag:[8,12,13],avg:13,avoid:13,awar:[5,13],axes:12,axi:[6,7,11,12,13],axial:12,b10mt:6,b150mt:6,back:[9,13],backgr:[11,13],background:[11,13],backward:[5,7,13],bar:[8,13],base:[4,5,6,7,9,10,11,13],bash:[6,10],bash_profil:10,bashrc:10,basi:5,basic:[4,10,11,12],bastian:0,batch:13,bcp:13,beam:[7,13],beamlin:[7,8,11,13],beamlineinfo:4,beamtim:6,beauti:13,becaus:[7,8],becom:[5,10],been:[5,7,8,10,11,12,13],befor:[5,7,8,9,10,11,12,13],begin:[5,7,10,13],behav:[5,12],behavior:[5,13],being:[6,10,13],belong:12,below:[5,7,10,11,12,13],beneath:[3,8],bessel:[12,13],best:[6,7,10,12,13],bestdata:5,beta:0,better:[3,5,13],between:[11,12,13],bgdown:11,bgright:11,bgup:11,bigger:13,bilay:12,bin:[7,8,10,11,13],binari:[7,10],bitbucket:[2,10,13],blabla:9,block:[5,8,10,11,12],blue:[11,13],bluish:13,bmw:[0,4],bmw_startup:12,bmwlib:10,bnmr:4,bnmrlib:10,book:7,bool:13,bool_t:[7,13],boost:10,both:[5,10,12,13],bottom:7,boundari:[5,8,11,12,13],box:[7,8,9,13],bracket:7,branch:[9,10],brandt:12,brave:10,brew:10,brief:[9,10,13],briefli:[8,10],broader:0,broken:10,browsabl:7,browser:7,buc:7,bug:[2,8,10],bugtrack:4,bui:9,build:[7,9,13],built:[10,13],bulk:[7,13],bundl:6,button:[6,8,11,13],bz2:[9,13],calcsomethingcpuexpens:13,calcualt:13,calcul:[8,11,12,13],calculatefield:13,call:[5,6,7,8,10,11,12,13],calm:0,can:[5,6,7,8,9,10,11,12,13],cancel:8,cannot:[5,12,13],canva:[8,11,13],canvas:13,card:[4,13],care:[5,10,13],carlo:13,carri:[6,10,13],cassert:13,center:[9,12],cern:[7,10,13],cerr:[7,13],certain:[5,12],cf1:7,cf3:7,cf4:7,cf5:7,chain:[5,8],chain_fit:8,chang:[5,8,9,10,13],channel:13,chao:0,charact:[5,13],check:[6,7,8,9,12,13],checkout:[9,10],chemic:12,chgrp:10,chisq:[8,11,13],chisq_per_run_block:8,chisq_pre_run_block:8,choic:[8,10,13],choos:[5,8,10,11,12,13],choosen:8,chosen:[8,10,13],chown:10,circumst:10,citat:3,cite:4,clang91:10,classdef:13,classifi:7,classimp:13,clean:[7,9,10],clear:[5,7,8,13],click:[6,8,13],clone:[9,10],close:[7,8,13],closefil:7,cmath:13,cmd:[6,13],code:[7,9,10,11,12,13],coeffici:[12,13],coher:[12,13],col:6,coll:6,collect:[5,6,7,8,10,11,12,13],colon:13,color:13,color_list:13,column:[5,7,8,11,13],com:10,combilgkt:13,combin:[5,7,8,11,13],come:[7,8,10],comma:[11,13],command:[6,8,9,10,11,12],comment:[5,6,7,8,9,10,13],common:[5,10,13],commun:3,compact:13,compar:[6,9,10,13],compat:[5,9,13],compatibilti:13,compet:0,compil:[9,10,13],complain:10,complement:6,complet:[5,9,10,11,12],complex:13,complic:13,compon:13,compress:13,comput:[3,9,10],concentr:7,concept:4,conceptu:9,concern:[4,12,13],conclud:11,conden:13,condens:13,condit:[5,12,13],conf:[3,9,10],config:10,configur:[4,9,10,12],conflict:9,conjunct:[5,12,13],consid:13,consist:[9,12,13],const_correct:13,constant:[0,11,13],constitu:12,constrain:13,construct:13,constructor:13,consum:13,contain:[5,8,10,11,12,13],content:[7,10,13],continu:7,contour:13,contribut:[0,6,11,12,13],control:[7,9,13],contruct:0,conveni:11,convent:12,converg:[11,12,13],convers:[7,13],convert:[4,7,13],convolut:12,cope:10,copi:[5,8,10,13],core:[10,13],corpor:9,correct:[5,8,11,13],correctli:[8,11,13],correl:13,correspon:13,correspond:[5,6,7,8,10,11,13],cos:[6,13],cosh:13,cost:8,could:[5,6,8,9,10,12,13],couldn:[7,13],count:[11,13],counter:[11,13],coupl:[8,9,10,13],cours:[3,5,13],cout:[7,13],covari:13,cpc:3,cpp:[7,13],cpu:[9,10,13],crash:10,creat:[5,6,7,9,10,11,13],create_msr_file_onli:8,creativ:5,crook:13,cross:[7,10,13],crosshair:13,crunch:9,cryo:7,cryostat:7,cuda:13,current:[5,6,7,8,9,10,12,13],cursor:[11,13],custom:[8,13],cutoff:12,cycl:13,cygwin:10,cywinski:13,d2001:13,d2007:13,d2010:13,d2019:13,dalma:[12,13],dark:11,dasimag:10,daslib:[9,10],dat:[5,6,8,11,12,13],data:[3,4,5,6,7,8,9,10,13],data_path:[12,13],data_path_prefix:12,datat:6,dataterr:6,date:[7,10,11,13],dbmwlib:[9,10],dbnmrlib:10,dbuiltin_glew:10,dcmake_install_prefix:[9,10],ddk:9,deactiv:12,dead:[12,13],deal:[0,7,9,10,11,12,13],dealt:13,deb:10,debian:10,debug:[12,13],dec:10,decai:[7,11,13],decayanamodul:7,decent:7,decid:[7,10,13],declar:13,decod:7,deduc:13,def:5,default_save_path:8,defin:[5,7,8,10,11,12,13],definit:[7,11,13],deg:12,degre:[8,11,13],degree2rad:13,dektlf:13,delet:[5,7],deliv:[9,13],delta_b:12,delta_t:12,deltat_pta_gps_2650:13,deltat_pta_gps_3110:11,deltat_tdc_alc_:13,deltat_tdc_gpd_8472:13,deltat_tdc_gps_0123:13,deltat_tdc_gps_0137:13,deltat_tdc_gps_2871:7,deltat_tdc_gps_4295:7,deltat_tdc_gps_4324:13,deltat_tdc_gps_4325:13,deltat_tdc_gps_:13,demand:[7,13],demonstr:10,denable_hdf4:10,denable_hdf5:10,denable_musr:9,denable_mxml:10,denot:13,depend:[7,8,9,10,11,12,13],depict:[5,13],depolar:[11,12,13],depth:[12,13],deriv:[7,13],describ:[5,7,8,9,10,11,12,13],descript:[1,4,5,7,8,9,10,11],deserv:12,design:[5,10],destroi:13,destructor:13,detail:[1,7,8,9,10,11,12],detect:11,detector001:7,detector002:7,detector023:7,detector038:7,detector:[7,8,11,12,13],detectorinfo:4,determin:[5,8,10,13],dev:[10,13],devel:10,develop:[3,8,10,13],deviat:[7,13],devic:9,dgktlf:13,dgminim:10,diag:9,dialog:8,dialogu:8,diamagnet:[11,12],dict:10,dictionari:13,did:5,died:13,differ:[4,5,6,7,8,9,11,12,13],differenti:[11,13],difficulti:13,digit:[5,13],digress:13,dimens:12,dir:6,direct:13,directli:[6,7,8,10,13],directori:[5,7,8,9,10,11,12,13],disabl:[9,10,13],disadvantag:8,discontinu:7,discret:[10,11],discuss:[7,8,9,13],dispers:13,displai:[8,12,13],distanc:[12,13],distinguish:7,distort:13,distribut:[10,11,13],distributor:10,distro:10,ditto:6,divid:[11,12],divis:13,dks6:9,dmathmor:10,dmg:10,dminuit2:10,dnexu:[9,10],dnktf:13,dnkzf:13,doc:[8,10,11,13],doctyp:10,docu:[8,9,13],document:[7,8,9,10,13],doe:[10,13],doesn:[6,9],doi:3,doing:10,dolli:13,domain:[8,11,13],done:[5,6,7,9,10,11,12,13],dopengl:10,doubl:[7,13],double_t:[7,13],dover:12,down:[7,8,11,13],download:[9,10],downward:13,dpkg:10,dpol:13,dport:10,dqt_based_tool:10,dqt_version:10,drag:[6,10,11],drawn:[11,13],driven:13,drop:[8,10],dtd:10,dtry_openmp:10,due:[12,13],dump:[8,13],dump_ascii:8,dump_head:8,dump_root:8,durat:7,dure:[5,6,10,12,13],dvd:10,dxml:10,dyld_library_path:10,dynam:[3,9],dynamic_cast:13,dynamicnktf:13,dynamicnkzf:13,dynexpktlf:13,dyngssktlf:13,e3p8kev:6,each:[5,6,7,10,11,12,13],earli:[8,13],eas:[7,10,13],easi:[7,8],easier:[7,10],easiest:[9,10],easili:[5,8,9,10,13],echo:10,edit:[6,7,8,10,11],editor:[8,10,11],effect:[12,13],effici:[10,12,13],effort:3,either:[5,6,8,10,11,12,13],elabor:[7,9],electr:7,element:7,elimin:13,ellipt:12,els:[7,8,10,13],embrac:13,emphas:10,emploi:10,empti:[5,6,8,13],enabl:[0,10],enable_musrt0:8,encod:[7,8,10,12,13],encount:5,encourag:10,end:[5,6,7,8,10,11,13],endif:13,endl:[7,13],endno:5,energi:[6,7,12],energy_label:12,energy_list:[12,13],energy_vect:13,energy_vector:13,energyindex:13,engin:10,enough:[7,10,13],ensur:[5,13],enter:[5,8,9,10],enterpris:9,entiti:13,entri:[7,13],environ:[7,8,12,13],epel:10,eps:13,equal:[5,11,13],equat:[12,13],equival:[8,13],err:[6,7],error:[6,7,8,9,10,11,12,13],escan:6,especi:[5,7,9,12,13],essenti:[5,7,8,10,13],establish:5,estim:[7,8,12,13],estimate_n0:8,estimaten0:13,etc:[5,6,7,8,9,10,13],euc:7,evalu:13,even:[3,5,7,10,13],event:[7,11],event_0:7,event_1:7,event_2:7,eventu:[8,11],ever:[6,7],everi:[5,6,10,13],everyon:10,everyth:[4,8],evolut:12,exact:13,exactli:[10,13],exampl:[5,6,7,8,10,11,12,13],exce:11,except:[7,8,10,13],exclam:5,exec:9,exec_path:8,execut:[4,9,10,11],exemplari:[5,13],exhaust:4,exist:[5,10,13],exit:13,exp:[6,13],expand:[7,13],expect:[12,13],experi:[7,13],experienc:[8,10],experiment:13,explain:[5,7,8,9,10,11,12,13],explan:[5,13],explanatori:[5,8],explicit:[8,13],explicitli:[5,8,13],explor:9,expon:[12,13],exponenti:[12,13],expr:6,express:[6,13],exprlx:12,ext:13,extend:[7,13],extens:[4,5,6],extent:10,extern:[5,7,12,13],extract:[7,9,11,13],extractal:7,extrem:0,fab:13,facil:[7,8,13],facilit:12,fact:5,factor:[8,13],fail:[10,13],fall:[9,13],fals:13,far:[8,13],fast:10,fc150mt:6,fcn:13,fcp:13,fdata:13,featur:[2,4,11,12,13],fed:[7,13],fedora:10,feed:13,few:[5,7,8,10,13],fftw3:12,fftw:10,fgb:13,fglobaluserfcn:13,fidxglob:13,field2:13,field:[5,6,7,8,9,11,13],fieldsig1:11,fieldsig2:11,figur:[6,7,13],file:[4,6,9,10],file_format:[8,13],fileformat:13,filenam:[5,6,7,13],filenamelist:13,filesystem:10,fill:[7,11,13],fillfold:7,film:12,filter:13,find:[7,8,9,10,13],finder:10,fine:10,finish:[10,11],finvokedglob:13,fire:13,firewal:10,first:[5,6,7,8,9,10,11,12,13],firstgoodbinoffset:13,firstrunno:5,fit:[3,4,5,6,7,12],fit_onli:8,fit_rang:13,fitparamet:[5,8,11],fitter:8,fittyp:[11,13],five:[5,11],fix:[7,8,10,11,13],flag:[8,13],flame:13,flavor:13,flavour:[10,13],flexibl:13,fln:[6,13],flux:12,fly:[6,11],focus:10,fold:13,folder:7,follow:[3,5,6,7,8,9,10,11,12,13],font:8,font_nam:8,font_set:8,font_siz:8,footnot:13,fopt:13,forc:[5,13],form:[7,9,10,11,12,13],format:[4,5,6,8,10,11,12],formula:[10,13],forward:[7,9,11,13],found:[5,7,8,9,10,11,12,13],four:[5,13],fourier:[8,10,11,12],fourier_point:13,fourier_pow:[11,13],fourier_set:13,fpippardfitterglob:13,fprevparam:13,frac1:13,fraction:[12,13],fragment:13,frame:[7,9,13],framework:[3,4,7,8,9,10],free:[3,7,8,10,12,13],freedom:[11,13],freeli:8,freq1:13,freq2:13,freq:13,frequenc:[11,12,13],frequent:10,frgehandl:13,from:[1,5,6,7,8,9,11,12,13],front:[5,7,8,11],fudg:13,fulfil:10,full:[7,10,11,13],fun1:[11,13],fun2:[11,13],fun3:13,fun:11,func:8,func_pixmap_path:8,funx:13,further:[6,7,8,10,12,13],furthermor:[8,10,13],futil:12,futur:[6,8],fvalid:13,fwhm:12,g_ufx:13,gambl:6,gamer:9,gamma_mu:[11,13],gauss:[8,11,12,13],gaussian:12,gcc:[10,13],gener:[6,7,8,10,11,12],generexpo:13,genuin:13,geometri:11,get:[7,8,9,10,13],get_n:13,getdemand:7,getdescript:7,getenergyindex:13,geterror:7,getmagneticfield:13,getmuonstoppingdens:13,getobject:7,getrgedata:13,gett0frompromptpeak:13,getter:7,getunit:7,getvalu:7,getwhatisneed:13,getzmax:13,ghi:5,ghost:13,gif:13,ginzburg:12,git:[7,9,10,13],github:10,gitlab:[9,10,13],give:[5,7,10,11,13],given:[3,5,6,7,8,9,10,11,12,13],gk110bgl:9,global:[4,8,9],global_exampl:5,global_plu:8,globalfit:5,globalpart:13,globalpartisvalid:13,gnome:10,gnu:[4,13],goal:[5,13],going:[3,8,9,10],good:[7,8,10,13],got:9,gpd:13,gpl:13,gps:13,gpu:[0,3,4],graph:[11,13],graphic:[3,4,8,10,13],graphic_format_extens:13,green:[7,11,13],grenada:9,grep:9,grid:12,group:[7,8,10,13],grow:6,gsl:10,guess:[10,13],gui:[4,6,10,13],guid:[7,9,13],gyromagnet:[12,13],hair:13,hal:[9,13],half:12,hand:[7,13],handi:8,handl:[6,7,8,12,13],happen:10,harder:10,hardwar:9,harshman:13,has:[5,6,7,8,10,11,12,13],hat:[9,10],have:[3,5,7,8,9,10,11,12,13],hawaii:9,hayano:13,hdecay001:7,hdecay002:7,hdecay003:7,hdecay004:7,hdecay007:7,hdecay008:7,hdecay011:7,hdecay012:7,hdecay013:7,hdecay014:7,hdecay017:7,hdecay018:7,hdecay021:7,hdecay022:7,hdecay023:7,hdecay024:7,hdecay027:7,hdecay028:7,hdecay031:7,hdecay032:7,hdecay033:7,hdecay034:7,hdecay037:7,hdecay038:7,hdecayxxx:7,hdf4:[10,13],hdf5:[10,13],hdf:10,header:[5,8,10,13],headlin:13,heavili:[6,12],height:12,helec:13,helic:13,help:[6,8,9,10,13],help_sect:8,helper:[6,7,8,10,13],henc:[6,7,9,10,11,13],here:[1,5,6,7,8,9,10,11,13],hereaft:7,herein:13,hess:[12,13],heterostructur:12,hifi:13,high:[3,4,7,10,12,13],higher:10,highest:[5,10],himself:10,his:[0,13],histo:[7,8,10,11,13],histogram:[4,7,8,9],histogramm:13,histori:6,hold:[6,7,13],holder:11,home:[6,7,8,9,10,12,13],host:9,how:[4,5,7,8,9,10,13],howev:[5,9,10,11,13],hsamplemagneticfield:7,hsampletemperatur:7,html:8,http:[3,7,8,9,10,12,13],hypothet:7,icon:[11,13],idea:[5,7,11,13],ideal:13,ident:13,identifi:[5,13],idf1:13,idf2:13,idf:13,idx:13,ifdef:13,ifgk:13,ifll:13,ignor:[5,6,13],ignore_data_header_info:8,iii:13,illustr:[5,13],imag:[3,11,13],imaginari:[11,13],impact:13,imperfect:13,implant:[6,11,12,13],implement:[5,7,8,9,10,12,13],improv:[2,10,12],inc:9,incid:12,includ:[4,5,9,10,11,13],incompat:10,incorpor:9,increas:13,increment:13,inde:7,indebt:0,independ:[3,12,13],index:[4,5,13],indic:[8,11,13],indicationg:13,individu:[8,13],induct:12,ineffici:13,infer:13,info:[7,13],inform:[5,8,10,11,12,13],init:13,initi:[8,10,11,12,13],inlin:13,input:[0,5,8,11,13],inputfil:13,insensit:5,insert:7,insid:[8,12,13],inspect:7,inspir:6,inst:[8,13],instal:13,install_manifest:10,installatio:10,instanc:[5,6,7,10,13],instead:[5,6,9,10,12,13],institut:[8,11,13],instruct:[9,10,13],instrument:[7,8,10,13],instrument_nam:13,int_t:[7,13],integ:[5,7,13],integr:[5,12],intel:10,intend:[8,10,13],inter:12,interact:[6,11,12,13],interest:[6,10,13],interfac:[0,4,9,10,12,13],intern:[7,8,13],internbsl:13,internfld:13,internfldgk:13,internfldl:13,interpol:13,interpret:13,interrel:11,interrupt:13,interv:[5,13],intranet:13,introduc:[5,7,10,11,13],introduct:[4,10,11],introductori:13,invalid:12,invers:12,investig:12,invoc:[5,13],invok:[5,6,8,13],involv:[9,12],invt:6,invterr:6,isi:[10,13],iso:7,isvalid:13,iszombi:7,item:[7,13],iter:[8,12,13],its:[6,7,8,10,13],itself:[5,11],ival:[7,13],jam:13,jparc:8,jpg:[6,13],jpscp:3,jump:[7,13],just:[7,9,10,12,13],jxvf:9,k40c:[4,13],kaiser:13,kalviu:13,keep:[5,7,8,13],keep_minuit2_output:8,kei:[8,10],kept:[8,13],keren:13,kernel:[3,9],kev:[7,12,13],keyboard:[8,11],keyword:[5,13],khrono:13,khz:13,kick:10,kind:[0,7,12],know:10,knowledg:8,known:[4,10,13],konti:7,kornilov:13,label:[5,6,7,8,12,13],laboratori:7,landau:12,languag:[5,13],laplacian:12,larg:[12,13],larger:13,largest:0,larkin:13,last:[5,7,8,11,13],lastrunno:5,later:[5,11,13],latest:[9,10],latex:8,latex_imag:8,lattic:[4,13],launchctl:[9,10],layer:[12,13],lazi:10,lco:7,ld_library_path:[9,10],ldconfig:[9,10],lead:[5,7,8,12,13],least:[3,5,11,13],leav:8,ledb:7,left:[7,8,12],legaci:10,lem07_2018_rb1_npp:13,lem07_his_2018:13,lem10_his_0012:13,lem10_his_0111:13,lem10_his_0113:13,lem10_his_0123:13,lem10_his_0123_rebin25:13,lem10_his_0123_v2:13,lem12_his_0234:7,lem15_his_01234:13,lem19_his_0123:13,lem:[7,12,13],lemusr:7,length:[5,7,12],leopard:10,less:[6,13],let:7,letter:13,level:[7,13],leverag:9,lgb:13,lgkt:13,lib:[4,9,10],libboost:10,libfftw3:10,libgsl:10,libhdf4:10,libhdf5:10,libmylibrari:13,libqt4:10,libqt5svg5:10,libqt6svg6:10,libqtwebkit:10,librari:[9,10,12,13],libtmylibrari:13,libtool:10,libx11:10,libxext:10,libxft:10,libxml2:[7,10],libxpm:10,licens:[10,13],life:[10,11,13],lifetim:[12,13],lifetime_correct:8,lifetimecorrect:[8,13],light:7,like:[5,6,7,8,9,10,12,13],likelihood:[8,12,13],liklei:13,limit:[4,7,11,12,13],line:[5,6,7,8,10,11,12,13],linear:13,linegauss:12,linelaplac:12,linelorentzian:12,lineshap:12,lineskewlorentzian2:12,lineskewlorentzian:12,link:[6,8,13],linkdef:13,linux64:9,linux:[4,9,13],list:[6,7,8,9,10,11,13],list_of_param_to_be_fix:13,literatur:12,littl:[6,8,10,13],lmu:[7,8],load:[6,12,13],loadpath:6,local:[8,9,10,12],locan:[0,3,9],locat:[8,10,11,12,13],log:[6,8,12,13],logarithm:13,logi:13,logic:13,login:10,logx:13,longer:5,longitudin:8,look:[5,6,7,8,9,10,12,13],lookup:9,lorentzian:12,loss:12,lot:[7,13],low:[7,12],lower:[11,13],lower_boundari:13,lspci:9,ltf:13,luke_skywalk:10,mac:4,machin:[9,10,12],maco:[4,13],macosx64:10,macosx:10,macro:6,macroscop:12,magnet:[5,6,7,8,12,13],magneticfieldenvironmentinfo:4,mai:[8,10,13],mail:2,main:[8,10,11],mainli:13,maintain:7,mainten:[3,7],make:[0,7,8,9,10,13],makefil:13,manag:10,mandatori:[5,7,12,13],mani:[0,5,7,8,10,12,13],manipul:[5,8,13],manjaro:10,manner:[6,10],manual:[0,4,5,8,9,10,11],map1:[11,13],map2:[11,13],map3:11,map:[5,7,11],mapi:13,mark:[5,13],marker:13,marker_list:13,master:10,match:[5,13],materi:9,math:13,mathemat:[6,10,13],mathrm:13,matrix:13,matter:13,max:[6,8,13],max_likelihood:[12,13],maxim:[12,13],maximum:[6,11,13],maxlh:13,mcp1:7,mcp2:7,mdu:[8,11,13],mean:[5,6,7,8,9,10,11,12,13],meaningless:13,measur:[5,6,7,8,11,12,13],mechan:[7,13],medium:[11,13],mehr:12,meissner:[4,13],memo:[9,13],mention:[5,7,10,12,13],menu:[8,11,13],messag:[8,13],met:5,meta:[7,13],method:[7,13],mev:7,mgui:10,mhz:[11,12,13],micro:[9,13],microsecond:12,microsoft:10,mida:7,might:[5,6,7,8,10,12,13],migrad:[12,13],min:[6,13],mind:7,mine:7,minim:[7,10,11,12,13],minimum:7,minixml:10,mino:[11,12,13],mint:10,minu:8,minuit2:8,minuit:[8,12,13],miss:[10,13],mkdir:[9,10],mlog:[5,8,13],mmsetf:13,mn2:[5,13],mnplot:13,mnsi:13,mnt:13,mock:7,mode:[4,7,13],model:[5,10,13],modifi:[8,12],mojav:10,moment:[5,7,10,12],momentum:[7,11,12],monospac:8,mont:13,more:[5,6,7,8,9,10,11,13],most:[1,5,7,9,10,12,13],mous:[6,13],move:[7,10,11,13],mrh_undefin:7,msr2data:[4,6,8,12],msr2data_default:8,msr:[4,6,8,10,12],msr_def_path:8,msr_default_file_path:8,msr_file:13,msr_file_default:8,msr_file_in:13,msr_file_out:13,msr_file_without_extens:13,much:[0,6,7,8,13],mud:[8,11,13],mue1:13,mue4:[7,8,13],multi:[9,10,13],multicor:10,multidimension:13,multipl:[4,6,7,10,13],multipli:[11,13],muminu:13,muminusexptf:13,muon:[7,8,10,11,12],muonium:[9,13],muonspin:10,mupp:[4,5,8,10,11],mupp_plot:6,musr:[8,13],musr_web_command:8,musr_web_fouri:8,musr_web_funct:8,musr_web_main:8,musr_web_msr2data:8,musr_web_musrft:8,musr_web_paramet:8,musr_web_plot:8,musr_web_run:8,musr_web_statist:8,musr_web_theori:8,musr_web_titl:8,musr_web_x:8,musredit:[4,6,11,13],musredit_qt5:10,musrfit:[0,7,12],musrfit_startup:10,musrfitpath:10,musrft:[8,11],musrfulldatapath:13,musrfulldatapathtoken:13,musrroot:[4,13],musrrootlem:7,musrrootv:7,musrrootvalid:7,musrstep:[4,10],musrt0:8,musrview:[8,10],musrview_show_avg:8,musrview_show_fouri:8,musrwiz:[4,10],mxml:10,n00:13,n01:13,n10:13,n11:13,n_theori:12,n_vortexgrid:12,name:[5,6,7,8,9,11,12,13],namespac:13,nanosecond:13,nativ:10,ndf:11,nearli:13,necessari:[5,7,8,10,11,13],need:[5,6,7,8,9,10,11,12,13],needglobalpart:13,neg:[7,8,11],neither:13,nemu:[7,10,13],nemu_analyz:7,ness:13,neutron:10,never:10,newest:10,newli:[5,6,8,11],next:[6,7,8,9,10,12,13],nexu:[8,11,13],nexus1:13,nexus2:13,nexusformat:10,nice:12,nmr:[0,4],nn0:13,nn1:13,noak:13,node:13,nohead:[5,8],non:[9,12],none:[5,8,11,13],nonloc:[4,13],nonlocal_par:13,nonlocal_startup:13,nor:13,norm:[6,11,13],normaiz:13,normal:[5,6,10,11,13],normdown:11,normright:11,normup:11,nosummari:[5,8],notat:[7,13],note:[9,12,13],noth:[5,7,8,13],notic:[7,8,13],nouveau:9,now:[6,9,10,11,13],npp:[7,8,10,11,13],nsec:13,nuclear:6,nuisanc:10,number:[5,6,7,8,9,10,11,12,13],numer:[5,10,12],nvidia:[4,13],nxs:13,oabc:5,obei:[5,13],object:[7,10],observ:12,obsol:13,obsolet:13,obtain:[5,7,12,13],obvious:13,occur:10,occurr:[5,10],oct:7,off:[7,13],offer:[5,11,13],offest:13,offici:10,offset:[7,13],often:[6,8,10,13],oghi:5,old:[5,10,13],older:10,omit:[9,10,13],omp:13,onc:[10,11,12,13],one:[1,5,6,7,10,11,12,13],one_or_zero:12,one_to_on:13,onerunfit:5,onerunfit_exampl:5,ones:[5,7,10,13],onli:[5,6,7,8,9,10,11,12,13],onlin:13,open:[4,6,8,10,11,13],open_file_after_fit:8,opencl:4,openmp:[9,10,13],opensus:10,oper:[4,6,7,8,9,11,13],opposit:13,opt:[9,10],optim:13,optimum:13,option1:13,option2:13,option:[4,6,8,11,12,13],options1:13,options2:13,order:[5,6,7,9,10,12,13],ordin:[11,13],org:[3,10],organ:[7,8,13],orient:[7,12],origin:[5,8,12,13],orphan:13,other:[1,6,7,9,10,11,13],otherwis:[5,9,10,13],ouput:5,out:[5,6,7,8,9,10,11,13],outdat:[8,10,13],outlin:12,output:[5,6,8,11,12,13],outputfilenam:[5,13],oven:7,over:[6,10,13],overhead:13,overload:7,overwrit:13,own:[8,13],owner:10,oxford:13,pack:[8,10,11,13],packag:[3,7],pad:13,page:[4,7,8,9,10,11],pai:7,panic:13,paper:9,par12:[11,13],par15:11,par17:13,par22:13,par27:13,par32:13,par37:13,par3:[11,13],par42:13,par47:13,par4:13,par52:13,par57:13,par5:13,par62:13,par67:13,par72:13,par77:13,par7:13,par82:13,par8:13,par:13,paralel:12,parallel:[11,12,13],param:[5,6,8,13],paramet:[3,4,7,9,11,12,13],paramlist:5,parc:13,parenthes:[10,13],pari:13,parr:13,parrx0:13,pars:[6,7],parser:[7,10],part:[0,3,7,8,10,11,12,13],particular:13,parx0:13,parx1:13,parx:13,parxj:13,parxn:13,pass:[5,8,13],past:10,path:[6,7,8,9,10,11,13],path_file_nam:8,path_to_data:13,path_to_exec:8,path_to_fil:12,pathnam:7,pdf:[6,13],peak:[8,12,13],pearson:13,peculiar:13,penetr:[12,13],peopl:[5,7,10],per:[7,8,13],perform:[5,6,7,8,10,11,13],perp:7,perpendicular:12,phase:[5,8,11,12,13],phase_incr:13,phasedown:11,phaseright:11,phaseup:11,phd:13,philosophi:13,phincr:13,phpro:3,phy:[12,13],physic:[3,6,7,9,13],physica:13,physicist:0,pictur:8,pie3:13,pim3:[7,11,13],pix_path:8,pixmap:8,pkg:10,pkgconfig:10,place:[6,10,11,13],plane:6,platform:[3,4,9],pleas:[2,3,5,7,10,11,12,13],plist:10,plot:[6,7,8,11],plotter:4,plug:13,png:[6,8,13],pnl_pippardfitt:13,pnl_pippardfitterglob:13,point:[7,8,10,11,12,13],pointer:13,poitiv:7,pol:13,polar:13,polynom:13,pomjakushin:13,pop:8,popup:8,port:10,portion:13,pos_error:[5,11,13],posit:[5,7,11,13],positron:[11,12,13],possibl:[4,5,6,8,10,11,13],potenti:[7,10,13],pow:[6,13],powder:12,powderlineasymgss:12,powderlineasymlor:12,powderlineaxialgss:12,powderlineaxiallor:12,power:[8,9,10,11,13],ppc:[8,11,13],pragma:13,pre:[5,8],preced:5,precess:11,predefin:[11,13],prefer:[2,8,10,13],prefix:10,preform:7,prepar:10,present:[5,6,7,8,9,10,11,12,13],press:[8,11,13],prevent:13,previou:[7,10,13],previous:8,prgedata:13,prgedatalist:13,prgehandl:13,price:7,princip:12,principl:[5,10,12],print:[7,8,13],print_level:13,priori:8,privat:13,prl:12,pro:[9,10],probabl:[5,7,10],probe:12,problem:[7,10,13],proc:3,proce:[10,11],procedia:3,procedur:[8,10,11,12,13],proceed:10,process:[3,4,10,12,13],produc:[5,11,13],profil:[4,9,10,13],profound:13,program:[4,6,7,8,10,11,13],project:[0,10],prompt:[8,9,10,13],prone:[6,8,9],proof:8,prop:7,propag:5,proper:[8,9,10,13],properli:[3,5,9,13],properti:[7,13],propertylist:10,prove:12,proven:12,provid:[4,8,9,10,11,13],pseudo:13,psi:[2,7,8,9,10,11,12,13],psi_:13,psi_gps_:13,psi_gps_run_100to117:13,pta:13,pull:[8,10],puls:[12,13],purpos:[5,11,13],puserfcnbas:13,put:[5,8,10,13],qmake:10,qt3:10,qt3mac:10,qt4:10,qt5:10,qt6:[8,10],qtbase5:10,qtbase6:10,qtbase:10,qtdir:10,qtsvg:10,qtwebkit:10,quantiti:7,question:[8,13],quick:[10,13],quicker:[6,13],quickli:[6,9],quit:[3,7,8,10,13],radeon:4,rahf:13,rai:10,ral:[8,10],randomli:12,rang:[5,8,13],range_for_phase_correct:13,rate1:13,rate2:13,rate8470:5,rate8471:5,rate8472:5,rate:[8,11,12,13],ratesig1:11,ratesig2:11,rather:[7,8,13],ratio:[12,13],raw:[8,13],rdanisohf:13,reach:[5,13],read:[5,8,10,12,13],read_musrroot_runhead:7,reader:7,readi:[9,10,13],readrgefil:13,real:[3,9,11,13],real_and_imag:[11,13],rearrang:13,reason:[5,10,11,13],rebin25:13,rebin:13,reboot:9,recent:[10,13],recent_fil:8,reciproc:12,recogn:9,recommend:[8,12],recompil:10,reconstruct:3,record:13,recreat:[7,8],recreate_data_fil:8,recurs:7,red:[7,9,10,11,13],redgreen:[7,13],redhat:10,refer:[3,7,8,9,10,11,12,13],refin:6,refresh:6,region:[12,13],rel:13,relat:[4,7,8,10,13],relative_bcp:13,relax:[12,13],releas:[10,13],relev:[5,7,8,11,13],reli:12,reload:[6,8],remain:11,remark:[10,13],remov:[6,13],renam:13,reorgan:5,repeat:[11,13],repeatedli:12,replac:[5,10,13],repo:[2,9,10],report:[2,10,13],repositori:10,repres:[7,11,13],represent:[4,13],request:[2,6,10,11,13],requir:[4,9,12,13],resb:12,reserv:13,reset:[8,13],resiz:13,resolut:[7,12],reson:[12,13],respect:[8,10,11,12,13],respons:[7,9,13],rest:12,restart:10,restor:13,restrict:[4,13],result:[5,7,8,11,12,13],retriev:13,rev:[9,12,13],revert:13,review:5,revis:13,rgb:13,rge:12,rge_fln_pr:13,rhel7:9,rhel:[9,10],rid:13,right:[5,7,10,11,12,13],rightmost:5,rigor:0,riseman:[12,13],robert:0,root6:10,root:[4,6,8,9,11,13],root_build:10,root_exec:10,root_set:13,root_v6:10,rootsi:[9,10],rotat:[9,11,13],rout:10,routin:[7,10,12,13],row:6,rpm:[9,10],rrf:[8,9],rrf_freq:13,rrf_pack:13,rrf_phase:13,rrr:13,rrrr:13,rrrrr:13,rrrrrr:13,rsync:10,rule:[5,7,8,13],run0:[5,13],run1:[5,13],run2:[5,13],run3:13,run:[6,8,9,10,11],run_file_nam:13,run_name_templ:13,runend:13,runinfo:4,runlist:[5,13],runlistfilenam:5,runn:[5,13],runnam:13,runno:13,runstart:13,runsummari:7,runtim:13,safe:13,safeti:13,sai:7,said:7,salman:[0,12],same:[5,6,7,9,10,11,12,13],sampl:[7,9,11,12],sampleenvironmentinfo:4,save:[6,7,8,10,11,12,13],save_path:8,savepath:6,sbin:[9,10],scale:[8,13],scale_n0_bkg:13,scalerinfo:7,scan:[6,13],scanamodul:7,schedul:[3,9],schema:7,scheme:7,scheuermann:0,scienc:10,scientif:[10,12,13],scratch:[8,10],screen:[4,13],script:[4,10],sdkinstal:9,search:[4,10,13],sec:[7,13],second:[5,8,11,12,13],section:[7,10,13],sector:13,see:[1,5,6,7,8,9,10,11,12,13],seen:[5,6,7,11],sekt:13,sektlf:13,select:[5,6,7,8,9,10,11,13],selectal:6,self:[5,8],selfupd:10,semant:7,semi:13,send:[2,13],sens:13,sensibl:13,sent:13,sep:13,separ:[5,8,10,11,13],separt:13,sequenc:[5,11,13],seri:12,seriou:10,serv:[5,11,13],server:9,servic:10,session:13,set:[4,5,6,7,8,11,12,13],setenv:[9,10],setglobalpart:13,setup:[7,9,10,13],sever:13,sexprlx:12,sgktlf:13,shade:7,shall:[5,7,8,10,11,12,13],shape:[5,12,13],share:[8,9,13],shell:[8,10,13],shift:[12,13],shop:9,shortcut:[8,11],shorten:13,shortli:[7,13],should:[3,5,6,7,8,9,10,11,12,13],show:[5,6,7,8,11,13],shown:[5,6,7,8,11,13],sierra:10,sigma:6,sigmaerr:6,sigmasc:6,sigmasc_10:6,sigmasc_10err:6,sigmasc_150:6,sigmasc_150err:6,sigmascvstemp:6,sign:11,signal:[11,12,13],silicon:10,similar:[5,10],similarli:[7,13],simpl:[5,10,11,12,13],simplegss:[11,13],simpler:13,simplex:13,simplexpo:[11,13],simpli:[5,10,13],simplifi:13,simul:12,simultan:13,sin:[6,13],sinc:[3,5,6,7,9,10,11,13],singl:[4,5,6,7,8,9,10],sinh:13,situat:[7,10,13],six:5,sizabl:12,size:[8,13],sketch:[7,13],skew:12,skewedgss:13,skg:13,skip:10,skt:13,slightli:[7,8,9,10,13],slow:7,slower:13,slr:12,small:[7,8,9,10,12,13],smith:13,smooth:10,smu:12,sn_e1000:13,sn_e2000:13,sn_e:13,snapshot:[6,11],snip:7,snippet:[7,13],snktf:13,snkzf:13,snow:10,softwar:[4,7,13],sole:[5,13],solid:[12,13],solv:12,some:[3,4,5,8,9,10,11,12,13],someth:[7,9,10,13],sometim:[8,13],somewher:[7,8,10],soon:10,sorri:13,sourc:[7,9,11,12,13],space:[5,10,12,13],span:13,spatial:12,speci:7,special:[5,7,13],specif:[5,7,8,10,11,12,13],specifi:[5,7,8,10,11,12,13],spectra:[8,13],spectromet:[7,9,11,13],spectrum:13,speed:[3,4,10,13],speedup:13,spg:13,spin:[7,11,12,13],spinglass:13,spirit:10,spit:13,split:[7,10,13],springer:12,sqrt:13,src:10,staff:10,stage:[8,13],stai:5,stand:[8,9],standard:[7,9,10,13],start:[5,6,7,8,9,10,11,13],startno:5,startup:[8,13],state:[5,11,13],statement:[5,13],statexpkt:13,statexpktlf:13,statgsskt:[8,13],statgssktlf:13,static_cast:13,staticnktf:13,staticnkzf:13,statist:[5,8,11],std:13,stdout:13,step:[5,7,8,9,11,12,13],stg:13,still:[8,10,12,13],stimuli:7,stop:[7,13],store:[5,7,8,10,12],straight:[9,10],strang:7,strategi:[12,13],stretch:12,string:[7,8,10,13],stringent:7,strkt:13,strong:[9,11,13],strongli:[8,10,13],structur:[7,11,13],stumbl:10,style:13,sub:[7,10,11,13],sub_rang:13,subject:10,subsequ:[5,13],subset:[7,13],substanti:13,substitut:[5,11,13],substrat:12,subtract:13,success:[5,6,7,11,13],successfulli:[10,13],sudo:10,suffici:[9,12],suggest:[0,5,10],suit:[8,11,12,13],suitabl:11,sum:13,summ:13,summar:[5,11],summari:[4,7,9,13],superconduct:4,superconductor:13,superfluid:12,superus:[9,10],suppli:[5,9,12,13],support:[0,4,6,8],suppos:[7,13],suppress:5,sure:[9,10,13],suter:[2,3,9],svg:13,svn:10,swap:[8,13],symbol:[7,13],symmetr:12,symmetri:12,sync:10,synchron:10,syntact:8,syntax:[8,13],system:[4,7,9,13],systemat:10,t0addrun1:13,t0addrun1backward:13,t0addrun1forward:13,t0addrun2:13,t0addrun2backward:13,t0addrun2forward:13,t5k:6,tab:[8,13],tabl:[7,9,13],tag:[5,6,8,10,11,12,13],tailor:7,take:[5,10,11,12,13],taken:[10,13],tan:[6,13],tanh:13,tar:[9,13],target:7,task:6,tbrowser:7,tbulktrivortexagl:12,tbulktrivortexlondon:12,tbulktrivortexml:12,tbulktrivortexngl:12,tdc:[7,13],tdc_hifi_2014_00153:13,tdc_hifi_2015_00123:13,tdoublevector:7,technic:4,technolog:9,tediou:[8,12],tell:13,temp:[6,12],temperatur:[5,6,7,11,13],templat:[5,8,11,13],temporari:7,ten:13,term:10,termin:[9,10,11,13],tesla:[4,13],test:[0,8,10,13],text:[6,7,8,11,13],tfieldco:[11,13],tfile:7,tfolder:7,th1f:7,than:[5,7,8,10,11,13],thank:0,thecommandsblock:8,thefitparameterblock:8,thefourierblock:8,thefunctionsblock:8,thei:[5,7,9,10,11,13],them:[5,7,8,11,12,13],theme:11,themselv:[7,12],theoret:13,theori:[5,9,11,12],theory_funct:8,theplotblock:8,therefor:[5,10,11,12,13],therunblock:8,thesi:13,thestatisticblock:8,thetheoryblock:8,thetitl:8,thi:[3,5,6,7,8,9,10,11,12,13],thick:12,thin:[9,12],thing:[7,8,9,10,13],think:0,third:[11,12,13],those:5,though:[7,8,10],thread:[9,10,13],three:[11,12,13],through:[5,7,10,11,12,13],thu:13,tick:8,tightli:7,time:[3,6,7,8,9,10,11,12,13],timeout:[8,13],timeout_tag:13,tintvector:7,titl:[5,7,8,11],title_from_data_fil:8,tlondon1d1l:12,tlondon1d2l:12,tlondon1d3l:12,tlondon1dh:12,tmusrrunhead:4,tmusrrunphysicalquant:4,tmyfunct:13,tmyglobalfunct:13,tmylibrari:13,tmylibrarylinkdef:13,tobjarrai:7,tobject:[7,13],tobjstr:7,tobjstringv:7,tocdepth:[],togeth:[5,6,7,8,10,11,13],toggl:13,token:[7,13],told:10,too:[8,10,13],tool:[10,13],toolkit:10,top:7,topic:13,total:[12,13],transfer:13,transform:[8,10,11,12,13],transvers:[8,11,13],treat:[5,10],treatabl:5,tree:[4,10,13],tremend:[9,10],trend:6,tri:[6,10,13],trial:12,triangular:12,trick:10,tricki:13,trigger:10,trilay:12,trim:[12,13],trim_sp:13,trimsp:[12,13],triumf:[5,8,11,13],trunk:10,tscan:6,tstring:7,tstringvector:7,turner:13,tutori:4,tweak:13,two:[5,7,8,10,11,12,13],txt:[6,10],type:[4,7,8,10,11,12],typic:[6,8,9,10,13],ubc:13,ubuntu:10,uemura:13,uf1:13,uf2:13,ufx:13,uic:10,uint_t:13,uldi:0,uldis_l:9,unbin:13,uncertainti:[11,12],uncheck:8,uncontrol:13,uncorrel:11,undefin:11,under:[5,6,7,8,9,10,13],underli:11,understand:[7,13],unfortun:10,unfriendli:13,unhappi:13,unistal:10,unit:[3,7,11,13],univers:4,unix:10,unless:13,unlik:13,unpack:9,unsatisfactorili:7,unselect:8,until:[7,11,13],unwant:13,unzoom:13,upcom:7,updat:[6,9,10,11,13],upgrad:10,upper:[11,13],upper_boundari:13,upward:13,urg:8,urgent:13,url:7,usag:[4,9,10,12],usage0:13,usage1:13,usage2:13,use:[2,5,6,7,8,9,10,11,12,13],use_fit_rang:[11,13],used:[3,5,6,7,8,9,10,11,12,13],useful:[0,5,6,7,8,10,11,12,13],user:[0,4,8,9,10,11],userfcn:[12,13],usermod:9,usernam:10,uses:[10,13],using:[3,5,7,8,9,10,12,13],usr:[8,10,13],usual:[5,12,13],utf:[8,10,12,13],util:[3,7,9,13],vaild:13,val0:13,val1:13,val:[7,13],valid:[5,6,8,12,13],valn:13,valu:[5,7,8,9,10,11,13],var1:5,var2:5,var3:5,var_nam:6,vari:[12,13],variabl:13,variou:[8,10,13],vector:[6,7,12,13],ventura:10,veri:[0,7,8,10,11,13],versa:[8,13],version:[3,6,7,8,9,10,12,13],versu:7,vga:9,via:[6,7,8,13],vice:[8,13],video:9,view:[5,6,8,13],view_pack:13,virtual:[10,13],virtualbox:10,visual:[8,11],vortex:[4,13],vortexlattic:12,wai:[0,5,6,7,8,9,10,11,12,13],wand:8,want:[10,13],warn:[10,13],weak:[11,13],web:[0,6,7,8,10,13],websit:10,wed:7,well:[0,5,9,10,11,12,13],went:[8,10],were:[5,7,8,13],wew:7,what:[5,9,10,11,12,13],whatev:[8,9],when:[5,7,8,10,11,12,13],whenev:13,where:[5,6,7,8,9,10,11,12,13],wherea:[5,8,13],whether:13,which:[0,5,6,7,8,9,10,11,12,13],whitespac:13,who:8,whole:7,why:[10,13],wide:10,width:[12,13],wiki:9,window:[4,6,8,11,13],wisdom:[10,12],wise:13,wish:[6,13],within:[5,6,7,8,10,11,12,13],without:[5,6,8,9,10,12],wkm:[8,11,13],wojek:[0,3,5],wonder:10,word:7,wordsofwisdom:12,work:[0,5,7,8,9,10,12,13],workaround:10,wors:13,worth:12,would:[5,6,7,8,9,10,11,12,13],writ:10,write:[5,8,10,13],write_column_data:8,write_data_head:8,write_musrroot_runhead:7,write_per_run_block_chisq:13,written:[5,7,8,11,12,13],wrong:8,wrote:7,wsl:10,wtf:7,www:[10,12],wxy:7,x11:10,x123:7,x86_64:9,xarg:10,xcode:[9,10],xcodebuild:10,xml:[7,10],xmln:[8,13],xpm:13,xquartz:10,xsd:7,xvjf:9,xxx:7,xyz:11,yaouanc:[12,13],ybco:6,year:[8,9,13],yes:[10,13],yet:[9,10,11,12,13],you:[3,6,7,8,9,10,13],your:[3,5,8,9,10,13],yourself:8,yum:10,yyyi:13,zaher:0,zero:[5,7,8,11,13],zoom:[11,13],zprofil:10,zsh:10},titles:["Acknowledgements","any2many - a Universal \u03bcSR-file-format converter","Bugtracking","How to Cite musrfit?","Welcome to the musrfit documentation!","msr2data - A Program for Automatically Processing Multiple musrfit msr Files","mupp - \u03bcSR Parameter Plotter","MusrRoot - an Extensible Open File Format for \u03bcSR","musredit: the GUI Based Interface to musrfit","Setting up musrfit / DKS: High Speed Fitting with GPU\u2019s","Setting up musrfit on Different Platforms","Tutorial for musrfit","Documentation of user libs (user functions)","User manual"],titleterms:{"390x":9,"\u03b2":12,"\u03bcsr":[1,6,7,12,13],"function":[8,12,13],DKS:[9,13],One:12,The:[5,6,11,12,13],access:13,acknowledg:0,addrun:13,amd:9,analyz:12,any2mani:[1,13],app:9,asymmetri:13,asymmteri:11,automat:5,avail:[8,13],base:8,basic:[5,7,8,13],beamlineinfo:7,beta:13,block:13,bmw:12,bnmr:12,bugtrack:2,build:10,bulk:12,card:9,catalina:10,check:10,cite:3,cmake:[9,10],command:13,concept:7,concern:7,configur:[8,13],contain:7,convert:1,creat:8,cuda:9,data:[11,12],defin:6,deprec:10,descript:13,detail:13,detectorinfo:7,determin:11,develop:9,dialog:6,differ:10,dimension:12,distribut:12,document:[4,12],driver:9,dump_head:13,enabl:[9,13],energi:13,environ:10,everyth:[7,10],execut:[8,13],exhaust:7,extend:5,extens:[7,13],extract:5,featur:8,field:12,file:[1,5,7,8,11,12,13],fit:[8,9,11,13],fitparamet:13,format:[1,7,13],fourier:13,framework:13,from:10,further:11,gener:[5,13],global:[5,13],gnu:10,gpu:[9,13],graphic:[5,6,9],gui:8,handler:13,header:7,high:9,histogram:[11,13],homebrew:10,how:3,includ:7,indic:4,info:8,inform:7,instal:[9,10],interfac:[5,6,7,8],introduct:[8,12,13],isotrop:12,k40c:9,kei:13,kit:9,known:5,last:10,lattic:12,lib:12,libbnmr:12,libfitpofb:12,liblineprofil:12,limit:5,linux:10,list:5,london:12,low:13,mac:10,maco:[9,10],macport:10,magneticfieldenvironmentinfo:7,manual:13,map:[8,13],meissner:12,minuit2:13,mix:12,mode:5,model:[11,12],msr2data:[5,11,13],msr2msr:13,msr:[5,11,13],multipl:[5,11],muon:13,mupp:6,musredit:[5,8,10],musredit_startup:8,musrfit:[3,4,5,8,9,10,11,13],musrfit_startup:13,musrft:13,musrgui:[8,10],musrroot:7,musrstep:8,musrt0:[11,13],musrview:[11,13],musrwiz:8,neg:13,newer:10,nexu:10,nmr:[12,13],non:13,nonloc:12,note:10,nvidia:9,object:13,obsolet:10,open:7,opencl:[9,13],oper:10,option:[5,10],overview:[7,13],packag:10,paramet:[5,6,8],platform:10,plot:13,plotter:6,possibl:7,process:[5,11],profil:12,program:5,provid:5,radeon:9,rang:11,read:[7,11],relat:12,represent:7,requir:[7,10],restrict:10,rge:13,root:[7,10],rrf:13,run:[5,7,13],runhead:7,runinfo:7,sampleenvironmentinfo:7,screen:12,script:6,sdk:9,set:[9,10],shortcut:13,singl:[11,13],softwar:[9,10],some:7,sourc:10,speed:9,startup:12,state:12,statist:13,step:10,structur:5,summari:6,superconduct:12,superconductor:12,support:[9,10,13],system:10,tabl:4,technic:13,tesla:9,theori:[8,13],titl:13,tmusrrunhead:7,tmusrrunphysicalquant:7,tree:7,tutori:11,type:[5,13],univers:1,usag:[5,6,8,13],user:[5,6,7,12,13],using:11,valid:7,variabl:[6,10],via:[9,10],view:11,vortex:12,welcom:4,window:10,without:13,write:7,xml:[8,12,13]}}) \ No newline at end of file diff --git a/doc/html/setup-dks.html b/doc/html/setup-dks.html index 716b7d05..50a166e2 100644 --- a/doc/html/setup-dks.html +++ b/doc/html/setup-dks.html @@ -1,63 +1,192 @@ - - - - + + + + + + + + + Setting up musrfit / DKS: High Speed Fitting with GPU’s — musrfit 1.8.2 documentation + + + + + + + + + + + - Setting up musrfit / DKS: High Speed Fitting with GPU’s — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

    - musrfit 1.8.0 documentation

    -

    Setting up musrfit / DKS: High Speed Fitting with GPU’s

    -
    -
    - -

    - «  Setting up musrfit on Different Platforms -   ::   - Contents -   ::   - musredit: the GUI Based Interface to musrfit  » -

    + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • Docs »
    • + +
    • Setting up musrfit / DKS: High Speed Fitting with GPU’s
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    +
    -

    Setting up musrfit / DKS: High Speed Fitting with GPU’s

    -

    In the years 2016/2017 we explored ways to speed up current fitting frameworks, especially musrfit. -This allows now to analyze histogram sets of high field spectrometers like HAL-9500 at PSI without +

    Setting up musrfit / DKS: High Speed Fitting with GPU’s

    +

    In the years 2016/2017 we explored ways to speed up current fitting frameworks, especially musrfit. +This allows now to analyze histogram sets of high field spectrometers like HAL-9500 at PSI without the error-prone RRF fitting (see U. Locans and A. Suter, musrfit - Real Time Parameter Fitting Using GPU, and the -Memo from A. Suter, “Rotating Reference Frame Fits”, in the musrfit source code). At the same time +Memo from A. Suter, “Rotating Reference Frame Fits”, in the musrfit source code). At the same time it can help to speed-up elaborate global fits tremendously, and dealing properly with muonium. It also allows Apple macOS users to speed up their fitting code on the CPU. Currently it is not straight forward -to get musrfit multi-threaded under macOS since Apple doesn’t be default support OpenMP. DKS -enables musrfit to utilize OpenCL instead which is present on macOS by default.

    +to get musrfit multi-threaded under macOS since Apple doesn’t be default support OpenMP. DKS +enables musrfit to utilize OpenCL instead which is present on macOS by default.

    Warning

    Before you run into the shop to buy a gamer graphic card or a Tesla card, make sure that you have an @@ -65,35 +194,35 @@ appropriate server with a sufficiently strong power supply!

    Note

    -

    However, the current musrfit/DKS version doesn’t yet support all theory functions on the GPU. -In case the theory function is not yet available for the GPU, musrfit will fall back to the CPU implementation.

    +

    However, the current musrfit/DKS version doesn’t yet support all theory functions on the GPU. +In case the theory function is not yet available for the GPU, musrfit will fall back to the CPU implementation.

    -

    Conceptually the setup of musrfit/DKS is as following:

    +

    Conceptually the setup of musrfit/DKS is as following:

    1. install the latest hardware driver for your graphic card.
    2. -
    3. install the GPU SDK which enables number crunching (CUDA for NVIDIA, OpenCL for AMD)
    4. -
    5. install DKS
    6. -
    7. install the musrfit version which is DKS ready
    8. +
    9. install the GPU SDK which enables number crunching (CUDA for NVIDIA, OpenCL for AMD)
    10. +
    11. install DKS
    12. +
    13. install the musrfit version which is DKS ready
    -

    In the following the description for the installation of musrfit/DKS for the following systems will be discussed in some more detail:

    +

    In the following the description for the installation of musrfit/DKS for the following systems will be discussed in some more detail:

    • NVIDIA Tesla K40c
    • AMD Graphic Card (Radeon R9 390X)
    • -
    • macOS in order to get OpenCL support
    • +
    • macOS in order to get OpenCL support
    -

    The usage of musrfit with GPU acceleration and OpenCL support is described in the -User manual of the μSR data analysis software musrfit. The additional -musrfit/DKS are found here.

    +

    The usage of musrfit with GPU acceleration and OpenCL support is described in the +User manual of the μSR data analysis software musrfit. The additional +musrfit/DKS are found here.

    -

    Setting up musrfit/DKS for a Tesla K40c (NVIDIA)

    +

    Setting up musrfit/DKS for a Tesla K40c (NVIDIA)

    It is assumed that the Tesla K40c is already physically installed on your system. For now I only will discuss to set it up for a Linux based system. In order to check that your operating systems see the card, enter the following command in the terminal:

    -
    $ lspci | grep NVIDIA
    +
    $ lspci | grep NVIDIA
     

    The response should look something like

    -
    05:00.0 3D controller: NVIDIA Corporation GK110BGL [Tesla K40c] (rev a1)
    +
    05:00.0 3D controller: NVIDIA Corporation GK110BGL [Tesla K40c] (rev a1)
     

    which means that the OS physically recognizes your card.

    @@ -101,25 +230,25 @@ see the card, enter the following command in the terminal:

    Driver Installation for the Tesla K40c

    Next, you will need to download and install the driver for your card. Select the proper operating system, card, etc. from the NVIDIA download center. At PSI -we are running currently Red Hat Enterprise Linux 7.x (RHEL) for which we will get a rpm (something like -nvidia-diag-driver-local-repo-rhel7-375.66-1.x86_64.rpm). Install it and make sure there is no conflict +we are running currently Red Hat Enterprise Linux 7.x (RHEL) for which we will get a rpm (something like +nvidia-diag-driver-local-repo-rhel7-375.66-1.x86_64.rpm). Install it and make sure there is no conflict with the nouveau driver of the system.

    Installation of CUDA

    Download the CUDA SDK form NVIDIA for your system. Again, -for the RHEL 7.x this is an rpm. After the installation of the rpm you should reboot your machine. -Afterwards you are ready for the installation of DKS.

    +for the RHEL 7.x this is an rpm. After the installation of the rpm you should reboot your machine. +Afterwards you are ready for the installation of DKS.

    Installation of DKS

    -

    For the following list of commands the '$' will be given as the command prompt. Do not enter it! -Also some comments will be added starting with a '#' which can be omitted. They are only there to -explain what is going on. DKS stands for Dynamical Kernel Scheduler and provides a thin interface -allowing host applications to incorporate GPU’s and other hardware accelerators.

    -

    Details can be found in the papers listed here, or on the DKS wiki page.

    +

    For the following list of commands the '$' will be given as the command prompt. Do not enter it! +Also some comments will be added starting with a '#' which can be omitted. They are only there to +explain what is going on. DKS stands for Dynamical Kernel Scheduler and provides a thin interface +allowing host applications to incorporate GPU’s and other hardware accelerators.

    +

    Details can be found in the papers listed here, or on the DKS wiki page.

    In brief the installation should be something like this:

    -
    # go to whatever directory you would like to clone/install DKS
    +
    # go to whatever directory you would like to clone/install DKS
     # For macOS DKS will likely to got to $HOME/Applications to be consistent with the musrfit docu for macOS
     $ cd $HOME/Apps
     $ git clone https://gitlab.psi.ch/uldis_l/DKS.git
    @@ -131,16 +260,16 @@ $ cmake --build ./ --clean-first
     $ make install
     
    -

    Since DKS is installed in a non-standard path, a couple of additional small steps are required. +

    Since DKS is installed in a non-standard path, a couple of additional small steps are required. This will be different for Linux compared to macOS.

    For Linux:

    -

    add the DKS library path to /etc/ld.so.conf.d/musrfit-x86_64.conf and execute as super user

    -
    $ /sbin/ldconfig
    +

    add the DKS library path to /etc/ld.so.conf.d/musrfit-x86_64.conf and execute as super user

    +
    $ /sbin/ldconfig
     

    For macOS:

    -

    add the DKS path to $HOME/.profile:

    -
    export DKS=$HOME/Applications/DKS/exec
    +

    add the DKS path to $HOME/.profile:

    +
    export DKS=$HOME/Applications/DKS/exec
     export LD_LIBRARY_PATH=$DKS/lib:$LD_LIBRARY_PATH
     
     launchctl setenv DKS $DKS
    @@ -150,10 +279,10 @@ launchctl setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH
     

    Installation of musrfit for DKS

    -

    Most of the installation steps are the same as described for musrfit without GPU support. -Here only the differences are explained. First checkout musrfit, then you will need to +

    Most of the installation steps are the same as described for musrfit without GPU support. +Here only the differences are explained. First checkout musrfit, then you will need to switch the working branch which is done by

    -
    $ cd $HOME/Apps/musrfit
    +
    $ cd $HOME/Apps/musrfit
     $ git checkout dks6
     
    @@ -162,19 +291,19 @@ $ git checkout dks6

    There is on more configuration switch

    -Ddks=<value>
    -
    it allows to enable/disable DKS support. The default is <value>=1, i.e. enabled. To disable use <value>=0.
    +
    it allows to enable/disable DKS support. The default is <value>=1, i.e. enabled. To disable use <value>=0.

    For a typical setup on a RHEL or macOS system it could look like this

    -
    $ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -DASlibs=1 -DBMWlibs=1 -Dnexus=1 -Ddks=1
    +
    $ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -DASlibs=1 -DBMWlibs=1 -Dnexus=1 -Ddks=1
     

    After

    -
    $ cmake --build ./ --clean-first -- -j8
    +
    $ cmake --build ./ --clean-first -- -j8
     $ make install
     

    and updating the shared library lookup table (only needed for Linux)

    -
    $ /sbin/ldconfig # as superuser / root
    +
    $ /sbin/ldconfig # as superuser / root
     

    you are done with the setup.

    @@ -182,7 +311,7 @@ $ make install
    -

    Setting up musrfit/DKS for a AMD Graphic Card (Radeon R9 390X)

    +

    Setting up musrfit/DKS for a AMD Graphic Card (Radeon R9 390X)

    Driver Installation for an AMD Graphic Card, e.g. Radeon R9 390X

    This will depend slightly on the AMD Card and operating system. Here I will summaries how it was done @@ -190,85 +319,135 @@ on a RHEL (Linux) system using a Radeon R9 390X.

    It is assumed that the Radeon R9 390X is already physically installed on your system. For now I only will discuss to set it up for a Linux based system. In order to check that your operating systems see the card, enter the following command in the terminal:

    -
    $ lspci | grep AMD
    +
    $ lspci | grep AMD
     

    The response should look something like

    -
    84:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii XT / Grenada XT [Radeon R9 290X/390X] (rev 80)
    +
    84:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii XT / Grenada XT [Radeon R9 290X/390X] (rev 80)
     

    which means that the OS physically recognizes your card.

    For RHEL7.x the AMDGPU-PRO driver should be used. It can be downloaded from AMD. Unpack the driver

    -
    $ tar -Jxvf amdgpu-pro-17.10-414273.tar.xz
    +
    $ tar -Jxvf amdgpu-pro-17.10-414273.tar.xz
     $ cd amdgpu-pro-17.10-414273
     

    Install the driver as root

    -
    $ ./amdgpu-pro-install --compute -y
    +
    $ ./amdgpu-pro-install --compute -y
     

    Here I assume that the AMD graphic card is only used for computation. You need to add the following command in order that the user blabla (change this to the appropriate user name) can access the GPU (otherwise only root works):

    -
    $ /sbin/usermod -a -G video blabla
    +
    $ /sbin/usermod -a -G video blabla
     

    Reboot the machine.

    -

    AMD APP Software Development Kit (SDK) to enable OpenCL support

    +

    AMD APP Software Development Kit (SDK) to enable OpenCL support

    The AMD APP Software Development Kit (SDK) is a complete development platform created by AMD to allow you to quickly and easily develop applications accelerated by AMD APP technology. The SDK provides samples, documentation, -and other materials to quickly get you started leveraging accelerated compute using OpenCL or C++ AMP in your -C/C++ applications.

    +and other materials to quickly get you started leveraging accelerated compute using OpenCL or C++ AMP in your +C/C++ applications.

    Download the AMD APP SDK 3.0 from AMD-SDK.

    Extract the installer

    -
    $ tar -xvjf AMD-APP-SDKInstaller-v3.0.130.136-GA-linux64.tar.bz2
    +
    $ tar -xvjf AMD-APP-SDKInstaller-v3.0.130.136-GA-linux64.tar.bz2
     

    Run the installer

    -
    $ ./AMD-APP-SDK-v3.0.130.136-GA-linux64.sh
    +
    $ ./AMD-APP-SDK-v3.0.130.136-GA-linux64.sh
     
    -

    This will install the AMD APP SDK to /opt/AMDAPPSDK-3.0/ where you can find the OpenCL include +

    This will install the AMD APP SDK to /opt/AMDAPPSDK-3.0/ where you can find the OpenCL include and library files, as well as documentation and sample code. The install guide for AMD OpenCL SDK can be found at AMD SDK Installation Notes.

    Installation of DKS and musrfit

    -

    To install DKS and musrfit follow the instructions above.

    +

    To install DKS and musrfit follow the instructions above.

    -

    Setting up musrfit/DKS for macOS for OpenCL support

    -

    Since Apple is not providing an out-of-the-box OpenMP support on their macOS compiler framework (Xcode), -typically musrfit is just running single threaded. Here DKS can help since it delivers OpenCL -support which is present on macOS. Hence, if you would like to run musrfit multi-threaded the easiest -way is to use DKS.

    +

    Setting up musrfit/DKS for macOS for OpenCL support

    +

    Since Apple is not providing an out-of-the-box OpenMP support on their macOS compiler framework (Xcode), +typically musrfit is just running single threaded. Here DKS can help since it delivers OpenCL +support which is present on macOS. Hence, if you would like to run musrfit multi-threaded the easiest +way is to use DKS.

    Since there is no graphic card involved, you do not need any graphic card driver of additional SDK. -The only thing you need DKS and the proper musrfit version.

    -

    The installation instruction for DKS/musrfit can be found here.

    +The only thing you need DKS and the proper musrfit version.

    +

    The installation instruction for DKS/musrfit can be found here.

    -
    -
    +
    + +
    + + +
    - - +
    + +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/setup-standard.html b/doc/html/setup-standard.html index e245d05f..c9772ca5 100644 --- a/doc/html/setup-standard.html +++ b/doc/html/setup-standard.html @@ -1,65 +1,219 @@ - - - - + + + + + + + + + Setting up musrfit on Different Platforms — musrfit 1.8.2 documentation + + + + + + + + + + + - Setting up musrfit on Different Platforms — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

    - musrfit 1.8.0 documentation

    -

    Setting up musrfit on Different Platforms

    -
    -
    - -

    - «  Documentation of user libs (user functions) -   ::   - Contents -   ::   - Setting up musrfit / DKS: High Speed Fitting with GPU’s  » -

    + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    +
    -

    Setting up musrfit on Different Platforms

    +

    Setting up musrfit on Different Platforms

    Supported Operating Systems and Software Requirements

    This page is intended to demonstrate for the interested user which steps are necessary to set up the free software -μSR data analysis framework musrfit. While the preferred way is to run the software on GNU/Linux or MacOS X/macOS, with some restrictions +μSR data analysis framework musrfit. While the preferred way is to run the software on GNU/Linux or MacOS X/macOS, with some restrictions it can also be set up under MS Windows (cygwin, only for the very brave, probably it is easier for most MS Windows users to install a Virtual Machine running Linux).

    Note

    In case musrfit should be installed according to the description found on this page, the user is strongly encouraged to read completely each section dealing with the present installation step before starting the installation process!

    -

    Apart from GCC, the GNU Compiler Collection (gcc, g++), the build tool cmake is needed. Furthermore the helper +

    Apart from GCC, the GNU Compiler Collection (gcc, g++), the build tool cmake is needed. Furthermore the helper tool pkg-config needs to be in place, and musrfit requires the installation of a few open-source libraries and programs including their header packages:

    @@ -68,11 +222,11 @@ their header packages:

    GNU Scientific Library
    -
    A numerical C and C++ library which provides efficient implementations of various mathematical routines. Required version ≥ 1.9 (see GNU Scientific Library).
    +
    A numerical C and C++ library which provides efficient implementations of various mathematical routines. Required version ≥ 1.9 (see GNU Scientific Library).
    FFTW
    -
    A C implementation for the fast computation of discrete Fourier transforms. Required version ≥ 3.1 (see FFTW).
    +
    A C implementation for the fast computation of discrete Fourier transforms. Required version ≥ 3.1 (see FFTW).
    ROOT
    @@ -80,12 +234,12 @@ their header packages:

    libxml2
    -
    The XML C parser and toolkit of gnome. Required version ≥ 2.0 (see libxml2).
    +
    The XML C parser and toolkit of gnome. Required version ≥ 2.0 (see libxml2).
    -

    Additionally, only if musrfit should support reading of data files in the NeXus format the following libraries are needed:

    +

    Additionally, only if musrfit should support reading of data files in the NeXus format the following libraries are needed:

    HDF4
    -
    A library and multi-object file format for storing and managing data (see HDF4). HDF4 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!
    +
    A library and multi-object file format for storing and managing data (see HDF4). HDF4 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!
    HDF5
    @@ -93,19 +247,19 @@ their header packages:

    minixml
    -
    A small XML library that can be used to read and write XML and XML-like data files. Required version ≥ 2.2 (see minixml). -Currently the MXML support in NeXus is broken and hence you will not need to install minixml for the time being.
    +
    A small XML library that can be used to read and write XML and XML-like data files. Required version ≥ 2.2 (see minixml). +Currently the MXML support in NeXus is broken and hence you will not need to install minixml for the time being.
    NeXus
    A common data format for neutron, x-ray, and muon science. Required version ≥ 4.4 (see NeXus).
    -

    If optionally the editor and graphical user interface musrgui / musredit is going to be installed there is one further requirement:

    +

    If optionally the editor and graphical user interface musrgui / musredit is going to be installed there is one further requirement:

    Qt
    A cross-platform application and user interface framework. Required version ≥ 4.6 (musredit) (see Qt). Currently the Qt5 is the main development part. Qt6 just kicked in, but is not widely available yet.
    -

    Each of the following sections focusing on the installation of musrfit on the different operating systems will also give a brief introduction on the installation of the requirements before the actual musrfit installation is described.

    +

    Each of the following sections focusing on the installation of musrfit on the different operating systems will also give a brief introduction on the installation of the requirements before the actual musrfit installation is described.

    OS Restrictions

    @@ -116,9 +270,9 @@ Currently the MXML su Debian, Ubuntu, Mint, openSUSE, and manjaro <https://de.manjaro.org/>.
    Mac OS X/macOS
    -
    No serious problems are currently known for macOS ≥ 10.6. musrfit is ARM M1 ready.
    +
    No serious problems are currently known for macOS ≥ 10.6. musrfit is ARM M1 ready.
    MS Windows
    -

    Native MS Windows support is currently not available. Potential ways to get musrfit running are:

    +

    Native MS Windows support is currently not available. Potential ways to get musrfit running are:

    • via installation of Linux via the Microsoft App store for Windows 10/11 (see Install Linux on Windows with WSL).
    • via installation of the virtual machine on which you install Linux (probably the easiest for most Windows users).
    • @@ -132,69 +286,69 @@ and manjaro <https://de.manjaro.org/>.

    Requirements

    Everything but ROOT and NeXus

    -

    Depending on the GNU/Linux distribution chosen, the above mentioned software – except ROOT/CERN and NeXus – should be available from +

    Depending on the GNU/Linux distribution chosen, the above mentioned software – except ROOT/CERN and NeXus – should be available from the distributor and could be easily installed in the form of binary packages. If done in this way there should be taken care of installing both, the libraries and the header (dev, devel) files.

    On a Red Hat Linux (or other RPM-package base Linux distributions) system the following command executed as superuser -from the shell will do the trick (never type the ‘$’ it is the shell prompt of your system):

    +from the shell will do the trick (never type the ‘$’ it is the shell prompt of your system):

    For Qt4 (deprecated):

    -
    $ yum install git cmake boost-devel gsl-devel fftw-devel libxml2-devel qt-devel qtwebkit-devel
    +
    $ yum install git cmake boost-devel gsl-devel fftw-devel libxml2-devel qt-devel qtwebkit-devel
     

    For Qt5/Qt6:

    -
    $ yum install epel-release
    +
    $ yum install epel-release
     $ yum install git cmake boost-devel gsl-devel fftw-devel libxml2-devel qt5-qtbase-devel qt5-qtsvg-devel
     
    -

    If using Qt6 replace qt5-qtbase-devel qt5-qtsvg-devel by qt6-qtbase-devel qt6-qtsvg-devel

    +

    If using Qt6 replace qt5-qtbase-devel qt5-qtsvg-devel by qt6-qtbase-devel qt6-qtsvg-devel

    When dealing with a distribution that uses the dpkg/apt package manager like Debian or Ubuntu the installation would look like:

    For Qt4 (deprecated):

    -
    $ apt-get install git cmake libboost-dev libboost-filesystem-dev libboost-system-dev libgsl-dev libfftw3-dev libxml2-dev libqt4-dev libqtwebkit-dev
    +
    $ apt-get install git cmake libboost-dev libboost-filesystem-dev libboost-system-dev libgsl-dev libfftw3-dev libxml2-dev libqt4-dev libqtwebkit-dev
     

    For Qt5/Qt6:

    -
    $ apt-get install git cmake libboost-dev libboost-filesystem-dev libboost-system-dev libgsl-dev libfftw3-dev libxml2-dev qt5-default qtbase5-dev libqt5svg5-dev
    +
    $ apt-get install git cmake libboost-dev libboost-filesystem-dev libboost-system-dev libgsl-dev libfftw3-dev libxml2-dev qt5-default qtbase5-dev libqt5svg5-dev
     
    -

    If using Qt6 replace qt5-default qtbase5-dev libqt5svg5-dev by qt6-default qtbase6-dev libqt6svg6-dev

    +

    If using Qt6 replace qt5-default qtbase5-dev libqt5svg5-dev by qt6-default qtbase6-dev libqt6svg6-dev

    Everyone should know best himself which is the way to install distribution software on the chosen distribution.

    In case the distribution does not include the required software it has to be compiled from the source files. This means either to download the source code from the corresponding website, or to clone the git repo. If you need to follow this line, please check the install details of the corresponding package.

    -

    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”...

    +

    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”…

    Installation of NeXus requirements (optional)

    -

    Only if musrfit should support reading/writing data files in the NeXus format the further required -software has to be set up. The required libraries and header files could either be available through the user’s +

    Only if musrfit should support reading/writing data files in the NeXus format the further required +software has to be set up. The required libraries and header files could either be available through the user’s GNU/Linux distribution or if this is not the case, the packages can be installed from the source code. In principle -NeXus should support MXML, HDF4, and HDF5. At the time of this writing, the MXML support in the -NeXus project is broken, and HDF4 is outdated on most platforms, yet since ISIS/RAL is still not up-to-date HDF4 still -needs to be dragged on (comment: if you are a ISIS user, please complain about HDF4). Hence, the necessary packages to build NeXus are HDF4 and HDF5. This means, for a rpm-package based distro try something like:

    +NeXus should support MXML, HDF4, and HDF5. At the time of this writing, the MXML support in the +NeXus project is broken, and HDF4 is outdated on most platforms, yet since ISIS/RAL is still not up-to-date HDF4 still +needs to be dragged on (comment: if you are a ISIS user, please complain about HDF4). Hence, the necessary packages to build NeXus are HDF4 and HDF5. This means, for a rpm-package based distro try something like:

    -
    $ yum install hdf-devel hdf5-devel
    +
    $ yum install hdf-devel hdf5-devel
     

    and on a deb-package based distro try something like:

    -
    $ apt-get install libhdf4-dev libhdf5-dev
    +
    $ apt-get install libhdf4-dev libhdf5-dev
     

    Only NeXus Version ≥ 4.4 is support!

    -

    Even though there might exist binary packages for the NeXus library, it is best to build and +

    Even though there might exist binary packages for the NeXus library, it is best to build and install it directly from the source code which can be found here.

    -

    A brief instruction how to get NeXus compiled from source (lines starting with ‘#’ are comments only):

    -
    $ cd Downloads
    +

    A brief instruction how to get NeXus compiled from source (lines starting with ‘#’ are comments only):

    +
    $ cd Downloads
     $ # create a directory for the NeXus source code
     $ mkdir nexus
     $ cd nexus
    @@ -213,25 +367,25 @@ $ sudo make install
     

    ROOT

    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 musrfit, though the situation is improving. If you are +manner incompatible with the way it is needed by musrfit, 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 necessary ones (guess from the description below). One Warning: if the ROOT packages are upgraded after a -yum update (apt-get update; apt-get upgrade) you might need to recompile musrfit. If you are not sure about +yum update (apt-get update; apt-get upgrade) you might need to recompile musrfit. If you are not sure about all this: install ROOT from source. Before installing ROOT from source you will need to install some additional header packages.

    -

    For RPM based systems (RedHat, Fedora, etc) this will likely to be libX11-devel, libXft-devel, libXpm-devel, and libXext-devel:

    -
    $ yum install libX11-devel libXft-devel libXpm-devel libXext-devel
    +

    For RPM based systems (RedHat, Fedora, etc) this will likely to be libX11-devel, libXft-devel, libXpm-devel, and libXext-devel:

    +
    $ yum install libX11-devel libXft-devel libXpm-devel libXext-devel
     
    -

    For a dpkg/apt based system (Debian, Ubuntu, etc) this will likely to be libx11-dev, libxft-dev, libxpm-dev, and libxext-dev:

    -
    $ apt-get install libx11-dev libxft-dev libxpm-dev libxext-dev
    +

    For a dpkg/apt based system (Debian, Ubuntu, etc) this will likely to be libx11-dev, libxft-dev, libxpm-dev, and libxext-dev:

    +
    $ apt-get install libx11-dev libxft-dev libxpm-dev libxext-dev
     
    -

    Also make sure that you have installed all required packages listed under Required Software (e.g. fftw, gsl, etc).

    -

    In the following it is assumed that ROOT shall be installed under $HOME/Apps. If you want to install +

    Also make sure that you have installed all required packages listed under Required Software (e.g. fftw, gsl, etc).

    +

    In the following it is assumed that ROOT shall be installed under $HOME/Apps. If you want to install it somewhere else, just systematically replace the related terms of the following description. For the -following list of commands the ‘$’ will be given, the command prompt. Do not enter it! Also some comments will -be added starting with a ‘#’ which can be omitted. They are only there to explain what is going on.

    -
    $ cd $HOME
    +following list of commands the ‘$’ will be given, the command prompt. Do not enter it! Also some comments will
    +be added starting with a ‘#’ which can be omitted. They are only there to explain what is going on.

    +
    $ cd $HOME
     $ # creat the Apps directory if not already present
     $ mkdir Apps
     $ cd Apps
    @@ -254,27 +408,27 @@ $ # as a last step of the ROOT build process we need to install
     $ make install
     
    -

    What is still missing is that the system should be told where to find the ROOT installation, therefore the following is suggested:

    +

    What is still missing is that the system should be told where to find the ROOT installation, therefore the following is suggested:

      -
    • As superuser create a file /etc/ld.so.conf.d/cern-root.conf where the path to the lib directory of ROOT is -added and call /sbin/ldconfig afterwards. In the example mentioned above one way of doing this is -(<home> has to be the path to your home, e.g. /home/luke_skywalker):

      -
      $ echo "<home>/Apps/root/root_exec/lib" >> /etc/ld.so.conf.d/cern-root.conf
      +
    • As superuser create a file /etc/ld.so.conf.d/cern-root.conf where the path to the lib directory of ROOT is +added and call /sbin/ldconfig afterwards. In the example mentioned above one way of doing this is +(<home> has to be the path to your home, e.g. /home/luke_skywalker):

      +
      $ echo "<home>/Apps/root/root_exec/lib" >> /etc/ld.so.conf.d/cern-root.conf
       $ /sbin/ldconfig
       
    • -
    • Additionally, as normal user one should append the following lines to the ~/.bashrc and/or ~/.bash_profile -(~./profile on Debian like systems, and then either restart the shell or call the same commands once more from +

    • Additionally, as normal user one should append the following lines to the ~/.bashrc and/or ~/.bash_profile +(~./profile on Debian like systems, and then either restart the shell or call the same commands once more from the shell) in order to change some path-setting environment variables:

      -
      $ export ROOTSYS=$HOME/Apps/root/root_exec
      +
      $ export ROOTSYS=$HOME/Apps/root/root_exec
       $ export PATH=$ROOTSYS/bin:$PATH
       

    If an update of ROOT is needed, simple do the following:

    -
    $ cd $HOME/Apps/root
    +
    $ cd $HOME/Apps/root
     $ git pull
     $ cd root_build
     $ cmake --build ./ --clean-first
    @@ -284,28 +438,28 @@ $ cmake --build ./ --clean-first
     

    musrfit

    -

    When all required software has been set up you can proceed with the musrfit installatio. First, the most -recent source code should be downloaded. The preferred way of doing so is to clone the musrfit repository via git. -Assuming the code should be located in $HOME/Apps this is achieved most easily calling from the terminal

    -
    $ cd $HOME/Apps
    +

    When all required software has been set up you can proceed with the musrfit installatio. First, the most +recent source code should be downloaded. The preferred way of doing so is to clone the musrfit repository via git. +Assuming the code should be located in $HOME/Apps this is achieved most easily calling from the terminal

    +
    $ cd $HOME/Apps
     $ git clone https://bitbucket.org/muonspin/musrfit.git
     $ cd musrfit
     

    or

    -
    $ cd $HOME/Apps
    +
    $ cd $HOME/Apps
     $ git clone git://gitlab.psi.ch/nemu/musrfit.git
     $ cd musrfit
     

    Note

    -

    after cloning the musrfit repo you will automatically be on the -root6 branch. If you want to get legacy ROOT 5.34.xx support, you +

    after cloning the musrfit repo you will automatically be on the +root6 branch. If you want to get legacy ROOT 5.34.xx support, you will needed to switch branches first.

    Update: If a local repository clone is already present (it needs to be newer than Dec. 2016), one can update it using:

    -
    $ cd $HOME/Apps/musrfit
    +
    $ cd $HOME/Apps/musrfit
     $ git pull
     $ cd build
     $ xargs rm < install_manifest.txt
    @@ -316,35 +470,35 @@ $ make install
     

    As an alternative (if git is not available), the source code can also be downloaded from the following web-page: musrfit at bitbucket

    musrfit build with cmake

    -

    Currently the following configuration switches for musrfit are available:

    +

    Currently the following configuration switches for musrfit are available:

    -DCMAKE_INSTALL_PREFIX=<prefix-path>
    -
    Specify the installation prefix, i.e. the place where musrfit shall be installed, e.g. $ROOTSYS if already defined (by default: /usr/local).
    +
    Specify the installation prefix, i.e. the place where musrfit shall be installed, e.g. $ROOTSYS if already defined (by default: /usr/local).
    -Dnexus=<value>
    -
    enable/disable the support of NeXus data files (requires the HDF4, HDF5 and NeXus libraries to be installed). -<value>=1 enables NeXus, <value>=0 disables NeXus. The default setting, i.e. the switch is not provided is NeXus support is disabled.
    +
    enable/disable the support of NeXus data files (requires the HDF4, HDF5 and NeXus libraries to be installed). +<value>=1 enables NeXus, <value>=0 disables NeXus. The default setting, i.e. the switch is not provided is NeXus support is disabled.
    -DASlibs=<value>
    -
    enable/disable the ASlibs. <value>=1 enables the ASlibs, <value>=0 disables the ASlibs. The default setting, i.e. the -switch is not provided is ASlibs support is disabled. For details see Documentation of user libs.
    +
    enable/disable the ASlibs. <value>=1 enables the ASlibs, <value>=0 disables the ASlibs. The default setting, i.e. the +switch is not provided is ASlibs support is disabled. For details see Documentation of user libs.
    -DBMWlibs=<value>
    -
    enable/disable the BMWlibs. <value>=1 enables the BMWlibs, <value>=0 disables the BMWlibs. The default setting, i.e. the -switch is not provided is BMWlibs support is disabled. For details see Documentation of user libs.
    +
    enable/disable the BMWlibs. <value>=1 enables the BMWlibs, <value>=0 disables the BMWlibs. The default setting, i.e. the +switch is not provided is BMWlibs support is disabled. For details see Documentation of user libs.
    -DBNMRlibs=<value>
    -
    enable/disable the BNMRlibs. <value>=1 enables the BNMRlibs, <value>=0 disables the BNMRlibs. The default setting, -i.e. the switch is not provided is BNMRlibs support is disabled.
    +
    enable/disable the BNMRlibs. <value>=1 enables the BNMRlibs, <value>=0 disables the BNMRlibs. The default setting, +i.e. the switch is not provided is BNMRlibs support is disabled.
    -Dqt_based_tools=<value>
    -
    Will try to get musredit, musrWiz, musrStep, and mupp installed, if Qt is found. +
    Will try to get musredit, musrWiz, musrStep, and mupp installed, if Qt is found. By default this is enabled. Again <value>=0 means disabled, <value>=1 enabled.
    -Dqt_version=<value>
    -
    Allows to specify which Qt version shall be tried. <value> can take the values: AUTO, 3, 4, 5, 6. -If the value is set to AUTO, this highest installed version is chosen, otherwise the specified version is used.
    +
    Allows to specify which Qt version shall be tried. <value> can take the values: AUTO, 3, 4, 5, 6. +If the value is set to AUTO, this highest installed version is chosen, otherwise the specified version is used.
    -Dtry_OpenMP=<value>
    -
    Will check if OpenMP support is possible, and if yes use it. The default is enabled
    +
    Will check if OpenMP support is possible, and if yes use it. The default is enabled
    -

    Normally it should not be necessary to make use of any of the options except for specifying the installation path with -DCMAKE_INSTALL_PREFIX. -musrfit build with cmake takes the out-of-source approach. Therefore a typical configuration / make / install process including -NeXus support would look like

    -
    $ cd $HOME/Apps/musrfit
    +

    Normally it should not be necessary to make use of any of the options except for specifying the installation path with -DCMAKE_INSTALL_PREFIX. +musrfit build with cmake takes the out-of-source approach. Therefore a typical configuration / make / install process including +NeXus support would look like

    +
    $ cd $HOME/Apps/musrfit
     $ mkdir build
     $ cd build
     $ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -Dnexus=1
    @@ -360,15 +514,15 @@ $ /sbin/ldconfig                                  # (as superus
     

    In order to finish the installation of musrfit two more things should be done:

      -
    • Define the MUSRFITPATH environment variable containing the path to the musrfit executables and XML files. -E.g. if the location of the example above is used append the following line to the ~/.bashrc and -~/.bash_profile (and then either restart the shell, source the file, or call the same commands once more from the shell):

      -
      export MUSRFITPATH=$ROOTSYS/bin
      +
    • Define the MUSRFITPATH environment variable containing the path to the musrfit executables and XML files. +E.g. if the location of the example above is used append the following line to the ~/.bashrc and +~/.bash_profile (and then either restart the shell, source the file, or call the same commands once more from the shell):

      +
      export MUSRFITPATH=$ROOTSYS/bin
       
    • -
    • Adjust the paths where musrfit will search for data files in the installed musrfit_startup.xml. For -detailed information on this XML file refer to the manual.

      +
    • Adjust the paths where musrfit will search for data files in the installed musrfit_startup.xml. For +detailed information on this XML file refer to the manual.

    @@ -376,25 +530,25 @@ detailed information on this XML file refer to the

    musredit

    -

    In the latest version of musrfit the configure script tries to determine automatically the highest available Qt version. -In case this is found, the editor musredit is built already together with musrfit.

    +

    In the latest version of musrfit the configure script tries to determine automatically the highest available Qt version. +In case this is found, the editor musredit is built already together with musrfit.

    musrgui (deprecated)

    -

    If Qt4.6 or higher is not available but Qt3 is set up musrgui can be installed. For this please -follow the instructions for the musredit installation where simply every musredit occurrence has to -be replaced by musrgui. If there are problems during the qmake step, e.g. -“uic: File generated with too old version of Qt Designer”, this most probably means the Qt4 version of qmake -is being used. In order to use the Qt3 version it should be enough to specify the full path to its location -when calling it. Within the most GNU/Linux distributions this location will be something like /usr/lib/qt-3.3/bin/qmake.

    +

    If Qt4.6 or higher is not available but Qt3 is set up musrgui can be installed. For this please +follow the instructions for the musredit installation where simply every musredit occurrence has to +be replaced by musrgui. If there are problems during the qmake step, e.g. +“uic: File generated with too old version of Qt Designer”, this most probably means the Qt4 version of qmake +is being used. In order to use the Qt3 version it should be enough to specify the full path to its location +when calling it. Within the most GNU/Linux distributions this location will be something like /usr/lib/qt-3.3/bin/qmake.

    Check the installation

    In order to perform a quick test for finding out if the installation has been completed successfully, a few msr files -together with the corresponding data files can be found in the musrfit source tree at doc/examples/. -If musrgui has been installed, just open one of the test-*.msr files in the editor and test the musrfit +together with the corresponding data files can be found in the musrfit source tree at doc/examples/. +If musrgui has been installed, just open one of the test-*.msr files in the editor and test the musrfit functionalities. Otherwise, if only the terminal should be used, as an initial test for instance the following could be done:

    -
    $ cd $HOME/Apps/musrfit/doc/examples
    +
    $ cd $HOME/Apps/musrfit/doc/examples
     $ musrview test-histo-ROOT-NPP.msr
     
    @@ -405,7 +559,7 @@ $ musrview test-histo-ROOT-NPP.msr

    Note

    For adventurous guys using Windows 10/11, there is the possibility to activate the built in Ubuntu bash-shell. It allows -to install musrfit as described in the Linux section. For details to setup the Linux sub-system for MS Windows +to install musrfit as described in the Linux section. For details to setup the Linux sub-system for MS Windows see Install Linux on Windows with WSL.

    @@ -415,45 +569,45 @@ Linux / ROOT / musrfit from the default MS Windows system.

    Note

    -

    One more advice: Please never try to install either ROOT or musrfit from or to a directory containing spaces +

    One more advice: Please never try to install either ROOT or musrfit from or to a directory containing spaces in the absolute path or in case you do, do not wonder if some errors occur! msr files, however, might be saved in such -directories like ...\My Documents\...

    +directories like ...\My Documents\...

    Mac OS X / macOS

    Note

    -

    macOS 12 alias Monterey: musrfit is ready for Monterey on Intel and M1 (Apple Silicon) based macs, both running natively. -The DKS version of musrfit for macOS Monterey is ready as well.

    +

    macOS 13 alias Ventura: musrfit is ready for Ventura on Intel and M1 (Apple Silicon) based macs, both running natively. +The DKS version of musrfit for macOS Ventura is ready as well.

    Note

    -

    macOS Catalina is slightly different in some aspects, so if it happens that you have it installed, please -first check Notes on macOS Catalina before you proceed.

    +

    Starting from macOS Catalina some acpects are slightly different compared to older macOS versions, so if it happens that you have installed +one of these last versions, please first check Notes on macOS Catalina and newer before you proceed.

    With Mac OS X / macOS the situation is up to some extent similar like on MS Windows but still different since Mac OS X is a UNIX system. The similarity is that also on OS X a helping framework — either MacPorts -or Fink — which provides open-source software is employed to fulfill the basic software requirements of musrfit. -In the following, both possibilities (using MacPorts or Fink) are described but it is emphasized here that +or Homebrew — which provides open-source software is employed to fulfill the basic software requirements of musrfit. +In the following, both possibilities (using MacPorts or Homebrew) are described but it is emphasized here that it should be followed only one of the possible routes .

    Warning

    -

    If you decide to upgrade your macOS, e.g. from High Sierra to Mojave, you will typically need to -unistall musrfit, ROOT, and MacPorts / Fink first, do the upgrade of the macOS and start the -installation of MacPorts / Fink , ROOT, and musrfit from scratch!

    +

    If you decide to upgrade your macOS, e.g. from High Sierra to Mojave, you will typically need to +unistall musrfit, ROOT, and MacPorts / Homebrew first, do the upgrade of the macOS and start the +installation of MacPorts / Homebrew , ROOT, and musrfit from scratch!

    Requirements (MacPorts)

    -

    Before proceeding with the usage of the MacPorts system first a few useful tools provided by Apple together +

    Before proceeding with the usage of the MacPorts system first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed:

    Xcode

    Useful developer tools including for instance the GNU compiler collection. It can be installed via the Apple App store. -Starting from XCode ≥ 4.3 the command line tools need to be installed manually. The necessary command line tools +Starting from XCode ≥ 4.3 the command line tools need to be installed manually. The necessary command line tools can be installed via the following commands entered in the terminal

    -
    $ xcode-select --install
    +
    $ xcode-select --install
     $ sudo xcodebuild -license
     
    @@ -463,14 +617,14 @@ $ sudo xcodebuild -license
    X11
    The X-window system is automatically installed on 10.5 Leopard and 10.6 Snow Leopard. For some other versions you also -will need to install XQuartz. If ROOT runs without XQuartz do not +will need to install XQuartz. If ROOT runs without XQuartz do not install it.
    -

    After installing the Xcode tools go to the MacPorts install page, download +

    After installing the Xcode tools go to the MacPorts install page, download the installer for your system and follow the installation instructions on the page. By default the MacPorts system will be -installed in /opt/local. To be sure that the newest version of the software is used a MacPorts upgrade should be performed +installed in /opt/local. To be sure that the newest version of the software is used a MacPorts upgrade should be performed by typing in a terminal:

    -
    $ sudo port -v selfupdate
    +
    $ sudo port -v selfupdate
     

    Remark: MacPorts uses rsync in order to synchronize the list of available packages. It frequently @@ -478,38 +632,38 @@ happens that this service is blocked by firewalls. In this case it should be pos repository and do the synchronization. If this step becomes necessary (and only then) it can be done in the following way:

    1. Get a local version of the repository:

      -
      $ svn co http://svn.macports.org/repository/macports/trunk/dports ~/dports
      +
      $ svn co http://svn.macports.org/repository/macports/trunk/dports ~/dports
       
    2. -
    3. Edit the file /opt/local/etc/macports/sources.conf: At the end of the file, comment the line beginning with rsync:// and +

    4. Edit the file /opt/local/etc/macports/sources.conf: At the end of the file, comment the line beginning with rsync:// and add a new line pointing to your local copy, e.g.

      -
      file:///Users/username/dports
      +
      file:///Users/username/dports
       
    5. Synchronize the packages:

      -
      $ sudo port -v -d sync
      +
      $ sudo port -v -d sync
       

    Then the MacPorts system should be set up and can be used to install additional software.

    The installation of the software mentioned above is then done in the terminal:

    -
    $ sudo port -v install pkgconfig autoconf automake libtool cmake fftw-3 fftw-3-single gsl boost libxml2 qt5 qt5-qtsvg
    +
    $ sudo port -v install pkgconfig autoconf automake libtool cmake fftw-3 fftw-3-single gsl boost libxml2 qt5 qt5-qtsvg
     
    -

    With Qt5, musredit will be installed. If it happens that you used musrgui in the past, -please change over to musredit since there will be no further development for musrgui anymore!

    +

    With Qt5, musredit will be installed. If it happens that you used musrgui in the past, +please change over to musredit since there will be no further development for musrgui anymore!

    Installation of NeXus requirements (optional)

    -

    Only if musrfit should support reading data files in the NeXus format the further required packages are set up:

    -
    $ sudo port -v install hdf4 hdf5
    +

    Only if musrfit should support reading data files in the NeXus format the further required packages are set up:

    +
    $ sudo port -v install hdf4 hdf5
     

    Only NeXus Version ≥ 4.4 is support!

    To get things compiled do:

    -
    $ # get and install NeXus
    +
    $ # get and install NeXus
     $ cd $HOME/Applications
     $ # get the source code from the master repository
     $ git clone https://github.com/nexusformat/code.git nexus/code
    @@ -528,13 +682,13 @@ $ sudo make install
     

    The default ROOT version is based on ROOT 6.xx/yy!

    ROOT installed via package installer
    -

    The lazy way to get ROOT installed is via package installer. If your macOS is directly supported -by the ROOT people you can download the package installer from the ROOT download page. -Choose the latest ROOT release and download you macOS version dmg-file, e.g. for macOS 10.13 (High Sierra) -it is at the time of writting root_v6.16.00.macosx64-10.13-clang91.dmg. After the installation -ROOT will be installed under /Application as owner root. In order to ease your life for the -steps to follow and assuming you are the only guy working on your Mac, you could change the owner and group of the ROOT directory:

    -
    $ cd /Applications
    +

    The lazy way to get ROOT installed is via package installer. If your macOS is directly supported +by the ROOT people you can download the package installer from the ROOT download page. +Choose the latest ROOT release and download you macOS version dmg-file, e.g. for macOS 10.13 (High Sierra) +it is at the time of writting root_v6.16.00.macosx64-10.13-clang91.dmg. After the installation +ROOT will be installed under /Application as owner root. In order to ease your life for the +steps to follow and assuming you are the only guy working on your Mac, you could change the owner and group of the ROOT directory:

    +
    $ cd /Applications
     $ sudo chown -R <username> root_v6.22.00
     $ sudo chgrp -R staff root_v6.22.00
     $ sudo ln -s root_v6.22.00 root
    @@ -543,14 +697,14 @@ $ sudo ln -s root_v6.22.00 root
     
    ROOT installed from source
    -

    The best way to get ROOT exactly the way needed for musrfit is to install it from source. +

    The best way to get ROOT exactly the way needed for musrfit is to install it from source. Before describing it, please make sure that you have installed all required packages listed under -Requested Software (e.g. fftw, gsl, etc).

    -

    For the following it is assumed that ROOT shall be installed under $HOME/Applications. If you want +Requested Software (e.g. fftw, gsl, etc).

    +

    For the following it is assumed that ROOT shall be installed under $HOME/Applications. If you want to install it somewhere else, just systematically replace the related terms of the following description. -For the following list of commands the ‘$’ will be given, the command prompt. Do not enter it! Also some -comments will be added starting with a ‘#’ which can be omitted. They are only there to explain what is going on.

    -
    $ cd $HOME/Applications
    +For the following list of commands the ‘$’ will be given, the command prompt. Do not enter it! Also some
    +comments will be added starting with a ‘#’ which can be omitted. They are only there to explain what is going on.

    +
    $ cd $HOME/Applications
     $ git clone http://github.com/root-project/root.git
     $ cd root
     $ git tag -l
    @@ -577,12 +731,12 @@ $ make install
     

    Since Apple in its wisdom decided that programs started from a shell are treated differently than Apps if it is coming to system variables, we need to work harder compared to a Linux system.

    For Mac OS X < 10.8:

    -

    In order to finalize the ROOT installation and to prepare already the installation of musrfit and musredit +

    In order to finalize the ROOT installation and to prepare already the installation of musrfit and musredit this is a good time for setting necessary environment variables for the use in Mac OS X. Here it assumed that you -installed ROOT from source. If you downloaded the binary package, you will need to adopt the paths accordingly. +installed ROOT from source. If you downloaded the binary package, you will need to adopt the paths accordingly. Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation) -into the file ~/.MacOSX/environment.plist and re-login:

    -
    <?xml version="1.0" encoding="UTF-8"?>
    +into the file ~/.MacOSX/environment.plist and re-login:

    +
    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
     <dict>
    @@ -597,8 +751,8 @@ into the file ~/.MacOSX/environme
     

    For Mac OS X ≥ 10.8:

    -

    One needs to add some system variables in ~/.profile:

    -
    export ROOTSYS=$HOME/Applications/root/root_exec
    +

    One needs to add some system variables in ~/.profile:

    +
    export ROOTSYS=$HOME/Applications/root/root_exec
     export MUSRFITPATH=$ROOTSYS/bin
     export PATH=$ROOTSYS/bin:$QTDIR/bin:$PATH
     export DYLD_LIBRARY_PATH=$ROOTSYS/lib:$DYLD_LIBRARY_PATH
    @@ -609,25 +763,25 @@ launchctl setenv PATH $PATH
     launchctl setenv DYLD_LIBRARY_PATH $DYLD_LIBRARY_PATH
     
    -

    After this you will need to “execute” .profile or .zprofile before proceeding:

    -
    $ source $HOME/.profile
    +

    After this you will need to “execute” .profile or .zprofile before proceeding:

    +
    $ source $HOME/.profile
     
    -
    -

    Notes on macOS Catalina

    -

    Apple introduced a couple of changes on macOS Catalina compared to its previous versions of macOS which might +

    +

    Notes on macOS Catalina and newer

    +

    Apple introduced a couple of changes starting from macOS Catalina compared to its previous versions of macOS which might be a stumble block. Here I very briefly try to add some notes in order to get a smooth installation for -musrfit.

    +musrfit.

    1. You should switch from the bash to the zsh. Please check, e.g. Moving to zsh.

    2. -
    3. Instead of .profile you will need to setup a .zprofile.

      +
    4. Instead of .profile you will need to setup a .zprofile.

    5. -
    6. macports: currently there is a little nuisance with the fftw-3 port. My bug report is already out since a while +

    7. macports: currently there is a little nuisance with the fftw-3 port. My bug report is already out since a while but no proper fix is available. The workaround to get it right is to install the port from source which is done by

      -
      $ port -s install fftw-3
      +
      $ port -s install fftw-3
       

      If you fail to do so, you might trigger a crash in the Fourier transform for 2^N, N=12.

      @@ -635,82 +789,51 @@ but no proper fix is available. The workaround to get it right is to install the
    -
    -

    Requirements (Fink)

    -

    Before proceeding with the usage of the Fink system first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed:

    +
    +

    Requirements (Homebrew)

    +

    Before proceeding with the usage of Homebrew, first a few useful tools provided by Apple together with OS X (on the installation DVD/CDs) should be installed:

    Xcode

    Useful developer tools including for instance the GNU compiler collection. It can be installed via the Apple App store. -Starting from XCode ≥ 4.3 the command line tools need to be installed manually. The necessary command line tools +Starting from XCode ≥ 4.3 the command line tools need to be installed manually. The necessary command line tools can be installed via the following commands entered in the terminal

    -
    $ xcode-select --install
    +
    $ xcode-select --install
     $ sudo xcodebuild -license
     
    X11
    The X-window system is automatically installed on 10.5 Leopard and 10.6 Snow Leopard. For some other versions you also -will need to install XQuartz. If ROOT runs without XQuartz do not +will need to install XQuartz. If ROOT runs without XQuartz do not install it.
    -

    After installing the Xcode tools go to the Fink download page, -download the installer for your system and follow the installation instructions on the page. By default the Fink system is -installed under /sw. After the basic setup make sure that in /sw/etc/fink.conf the line starting with Trees reads like:

    -
    Trees: local/main stable/main stable/crypto unstable/main
    +

    After installing the Xcode tools go to the Homebrew page, and follow the installation instructions there.

    +

    The essential packages (called formulae) which you will need to install are

    +
    cmake boost gsl fftw qt6 root
     
    -

    After applying the changes above to the configuration file, the Fink core system should be upgraded to its newest version by typing in a terminal:

    -
    $ sudo fink selfupdate
    +

    For example to install cmake this is done the following way:

    +
    $ brew install cmake
     
    -

    Then the Fink system should be set up and can be used to install additional software. -The Fink installer package also contains a graphical user interface called FinkCommander and it is -suggested to use that for installing the following packages (or packages with revisions close to the following) — it -is necessary to compile a few packages from source since no binary packages are available, however, this is done -automatically by the FinkCommander after you have chosen the software packages for installation:

    -
    autoconf automake cmake boost1.63-nopython boost1.63.nopython-shlibs fftw3 fftw3-shlibs gsl gsl-shlibs
    -libtool2 libtool2-shlibs libxml2 libxml2-bin libxml2-shlibs pkgconfig qt5-mac-qtbase qt5-mac-qtbase-dev-tools
    -qt5-mac-qtsvg qt5-mac-qtsvg-shlibs
    -
    -
    -

    Under OS X 10.6 Snow Leopard it will not be possible to install qt3mac since the system is by default a 64-bit -system and the old qt3-mac depends on software which is only available for 32-bit systems. It is suggested to -install qt5-mac instead and use musredit.

    -

    Also, due to some not fulfilled dependencies, it might not be possible to install FFTW3 through Fink. In this case -(and ONLY in THIS case) simply download the FFTW3 source code from its download page and install it from a terminal -using the following commands (for the FFTW version 3.x.y):

    -
    $ tar xz fftw-3.x.y
    -$ cd fftw-3.x.y
    -$ ./configure --enable-single --enable-shared --enable-threads --prefix=/usr/local
    -$ make
    -$ sudo make install
    -
    -
    -

    Since later on the boost header files should be used and in the standard Fink installation these are found at a version -specific location, the later handling will be easier if a symbolic link to this files is created now in the terminal -(if it did not exist earlier), e.g.:

    -
    $ ln -sf /sw/include/boost-x_yy_z/boost /sw/include/boost
    -
    -
    -

    where x_yy_z has to be substituted by the correct version number, e.g. 1_63_0.

    Installation of NeXus requirements (optional)

    -

    Only if musrfit should support reading data files in the NeXus format the further required -packages can be installed through Fink (check for the most recent versions):

    -
    libjpeg hdf hdf5-cpp11 hdf5-cpp11-shlibs
    +

    Only if musrfit should support reading data files in the NeXus format the further required +packages can be installed through Homebrew (Note: hdf4 is not supported anymore):

    +
    $ brew install hdf5
     
    -

    Unfortunately, the NeXus libraries have to be compiled and installed directly from +

    Unfortunately, the NeXus 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:

    -
    $ # build NeXus
    +
    $ # build NeXus
     $ cd ..
     $ git clone https://github.com/nexusformat/code.git nexus/code
     $ cd nexus
     $ # build NeXus out-of-source
     $ mkdir build
     $ cd build
    -$ cmake ../code -DENABLE_HDF5=1 -DENABLE_HDF4=1 -DENABLE_MXML=0
    +$ cmake ../code -DENABLE_HDF5=1 -DENABLE_HDF4=0 -DENABLE_MXML=0
     $ cmake --build ./ --clean-first -- -j8
     $ sudo make install
     
    @@ -719,37 +842,27 @@ $ sudo make install

    ROOT

    The default ROOT version is based on ROOT 6.xx/yy!

    +
    +
    ROOT installed via Homebrew
    +

    If you have installed ROOT via the Homebrew formula, you are done with the ROOT part here +and can go straight the the musrfit setup below.

    +
    -
    ROOT installed via package installer
    -

    The lazy way to get ROOT installed is via package installer. If your macOS is directly supported -by the ROOT people you can download the package installer from the ROOT download page. -Choose the latest ROOT release and download you macOS version dmg-file, e.g. for macOS 10.13 (High Sierra) -it is at the time of writting root_v6.16.00.macosx64-10.13-clang91.dmg. After the installation -ROOT will be installed under /Application as owner root. In order to ease your life for the -steps to follow and assuming you are the only guy working on your Mac, you could change the owner and group of the ROOT directory:

    -
    $ cd /Applications
    -$ sudo chown -R <username> root_v6.16.00
    -$ sudo chgrp -R staff root_v6.16.00
    -$ sudo ln -s root_v6.16.00 root
    -
    -
    -
    -
    -
    ROOT installed from source
    -

    The best way to get ROOT exactly the way needed for musrfit is to install it from source. +

    ROOT installed from source
    +

    The best way to get ROOT exactly the way needed for musrfit is to install it from source. Before describing it, please make sure that you have installed all required packages listed under -Requested Software (e.g. fftw, gsl, etc).

    -

    For the following it is assumed that ROOT shall be installed under $HOME/Applications. If you want +Requested Software (e.g. fftw, gsl, etc).

    +

    For the following it is assumed that ROOT shall be installed under $HOME/Applications. If you want to install it somewhere else, just systematically replace the related terms of the following description. -For the following list of commands the ‘$’ will be given, the command prompt. Do not enter it! Also some -comments will be added starting with a ‘#’ which can be omitted. They are only there to explain what is going on.

    -
    $ cd $HOME/Applications
    +For the following list of commands the ‘$’ will be given, the command prompt. Do not enter it! Also some
    +comments will be added starting with a ‘#’ which can be omitted. They are only there to explain what is going on.

    +
    $ cd $HOME/Applications
     $ git clone http://github.com/root-project/root.git
     $ cd root
     $ git tag -l
     $ # git tag -l will list all available tags. In the next command choose the tag v6-xx-yy
    -$ # where xx is the highest listed number, e.g. v6-22-06
    -$ git checkout -b v6-22-06 v6-22-06
    +$ # where xx is the highest listed number, e.g. v6-26-04
    +$ git checkout -b v6-26 v6-26-04
     $ # now ROOT is ready to be configured. Below you will find the minimal ROOT configuration needed.
     $ # We will use the cmake out-of-source approach here.
     $ mkdir root_build
    @@ -765,17 +878,17 @@ $ make install
     

    For further details see Installing ROOT from Source.

    -
    -
    Setting up Environment Variables for ROOT and musrfit
    +
    +
    Setting up Environment Variables for ROOT and musrfit

    Since Apple in its wisdom decided that programs started from a shell are treated differently than Apps if it is coming to system variables, we need to work harder compared to a Linux system.

    For Mac OS X < 10.8:

    -

    In order to finalize the ROOT installation and to prepare already the installation of musrfit and musredit +

    In order to finalize the ROOT installation and to prepare already the installation of musrfit and musredit this is a good time for setting necessary environment variables for the use in Mac OS X. Here it assumed that you -installed ROOT from source. If you downloaded the binary package, you will need to adopt the paths accordingly. +installed ROOT from source. If you downloaded the binary package, you will need to adopt the paths accordingly. Put the following lines (without the comments in parentheses and with the paths adjusted to your local installation) -into the file ~/.MacOSX/environment.plist and re-login:

    -
    <?xml version="1.0" encoding="UTF-8"?>
    +into the file ~/.MacOSX/environment.plist and re-login:

    +
    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
     <dict>
    @@ -790,8 +903,21 @@ into the file ~/.MacOSX/environme
     

    For Mac OS X ≥ 10.8:

    -

    One needs to add some system variables in ~/.profile:

    -
    export ROOTSYS=$HOME/Applications/root/root_exec
    +

    One needs to add some system variables in ~/.profile:

    +

    If ROOT has been installed via Homebrew:

    +
    export ROOTSYS=/usr/local
    +export MUSRFITPATH=$ROOTSYS/bin
    +export PATH=$ROOTSYS/bin:$QTDIR/bin:$PATH
    +export DYLD_LIBRARY_PATH=$ROOTSYS/lib/root:$DYLD_LIBRARY_PATH
    +
    +launchctl setenv ROOTSYS $ROOTSYS
    +launchctl setenv MUSRFITPATH $MUSRFITPATH
    +launchctl setenv PATH $PATH
    +launchctl setenv DYLD_LIBRARY_PATH $DYLD_LIBRARY_PATH
    +
    +
    +

    If ROOT has been installed via source/compilation:

    +
    export ROOTSYS=$HOME/Applications/root/root_exec
     export MUSRFITPATH=$ROOTSYS/bin
     export PATH=$ROOTSYS/bin:$QTDIR/bin:$PATH
     export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH
    @@ -802,67 +928,67 @@ launchctl setenv PATH $PATH
     launchctl setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH
     
    -

    After this you will need to “execute” .profile before proceeding:

    -
    $ source $HOME/.profile
    +

    After this you will need to “execute” .zprofile before proceeding:

    +
    $ source $HOME/.zprofile
     
    -

    musrfit

    +

    musrfit

    First, the most recent source code should be downloaded. First, the most recent source code should be downloaded. -The preferred way of doing so is to clone the musrfit repository via git. Assuming the code should be located -in ~/Applications/musrfit this is achieved most easily calling from the termin

    -
    $ cd ~/Applications
    +The preferred way of doing so is to clone the musrfit repository via git. Assuming the code should be located
    +in ~/Applications/musrfit this is achieved most easily calling from the termin

    +
    $ cd ~/Applications
     $ git clone https://bitbucket.org/muonspin/musrfit.git
     $ cd musrfit
     

    or

    -
    $ cd ~/Applications
    +
    $ cd ~/Applications
     $ git clone git://gitlab.psi.ch/nemu/musrfit.git
     $ cd musrfit
     

    If a local repository clone is already present, one can update it using:

    -
    $ cd ~/Applications/musrfit
    +
    $ cd ~/Applications/musrfit
     $ git pull
     

    As an alternative (if git is not available), the source code can also be downloaded from the following web-page: musrfit at bitbucket.

    -

    musrfit build with cmake

    -

    Currently the following configuration switches for musrfit are available:

    +

    musrfit build with cmake

    +

    Currently the following configuration switches for musrfit are available:

    -DCMAKE_INSTALL_PREFIX=<prefix-path>
    -
    Specify the installation prefix, i.e. the place where musrfit shall be installed, e.g. $ROOTSYS if already defined (by default: /usr/local).
    +
    Specify the installation prefix, i.e. the place where musrfit shall be installed, e.g. $ROOTSYS if already defined (by default: /usr/local).
    -Dnexus=<value>
    -
    enable/disable the support of NeXus data files (requires the HDF4, HDF5 and NeXus libraries to be installed). -<value>=1 enables NeXus, <value>=0 disables NeXus. The default setting, i.e. the switch is not provided is NeXus support is disabled.
    +
    enable/disable the support of NeXus data files (requires the HDF4, HDF5 and NeXus libraries to be installed). +<value>=1 enables NeXus, <value>=0 disables NeXus. The default setting, i.e. the switch is not provided is NeXus support is disabled.
    -DASlibs=<value>
    -
    enable/disable the ASlibs. <value>=1 enables the ASlibs, <value>=0 disables the ASlibs. The default setting, i.e. the -switch is not provided is ASlibs support is disabled. For details see Documentation of user libs.
    +
    enable/disable the ASlibs. <value>=1 enables the ASlibs, <value>=0 disables the ASlibs. The default setting, i.e. the +switch is not provided is ASlibs support is disabled. For details see Documentation of user libs.
    -DBMWlibs=<value>
    -
    enable/disable the BMWlibs. <value>=1 enables the BMWlibs, <value>=0 disables the BMWlibs. The default setting, i.e. the -switch is not provided is BMWlibs support is disabled. For details see Documentation of user libs.
    +
    enable/disable the BMWlibs. <value>=1 enables the BMWlibs, <value>=0 disables the BMWlibs. The default setting, i.e. the +switch is not provided is BMWlibs support is disabled. For details see Documentation of user libs.
    -DBNMRlibs=<value>
    -
    enable/disable the BNMRlibs. <value>=1 enables the BNMRlibs, <value>=0 disables the BNMRlibs. The default setting, -i.e. the switch is not provided is BNMRlibs support is disabled.
    +
    enable/disable the BNMRlibs. <value>=1 enables the BNMRlibs, <value>=0 disables the BNMRlibs. The default setting, +i.e. the switch is not provided is BNMRlibs support is disabled.
    -Dqt_based_tools=<value>
    -
    Will try to get musredit, musrWiz, musrStep, and mupp installed, if Qt is found. +
    Will try to get musredit, musrWiz, musrStep, and mupp installed, if Qt is found. By default this is enabled. Again <value>=0 means disabled, <value>=1 enabled.
    -Dqt_version=<value>
    -
    Allows to specify which Qt version shall be tried. <value> can take the values: AUTO, 3, 4, 5, 6. -If the value is set to AUTO, this highest installed version is chosen, otherwise the specified version is used.
    +
    Allows to specify which Qt version shall be tried. <value> can take the values: AUTO, 3, 4, 5, 6. +If the value is set to AUTO, this highest installed version is chosen, otherwise the specified version is used.
    -Dtry_OpenMP=<value>
    -
    Will check if OpenMP support is possible, and if yes use it. The default is enabled
    +
    Will check if OpenMP support is possible, and if yes use it. The default is enabled
    -

    Normally it should not be necessary to make use of any of the options except for specifying the installation path with -DCMAKE_INSTALL_PREFIX. -musrfit build with cmake takes the out-of-source approach. Therefore a typical configuration / make / install process including -NeXus support would look like

    -
    $ cd $HOME/Apps/musrfit
    +

    Normally it should not be necessary to make use of any of the options except for specifying the installation path with -DCMAKE_INSTALL_PREFIX. +musrfit build with cmake takes the out-of-source approach. Therefore a typical configuration / make / install process including +NeXus support would look like

    +
    $ cd $HOME/Apps/musrfit
     $ mkdir build
     $ cd build
     $ cmake ../ -DCMAKE_INSTALL_PREFIX=$ROOTSYS -Dnexus=1
    @@ -873,67 +999,67 @@ $ /sbin/ldconfig                                  # (as superus
     
    -
    -

    musrfit last step of the installation

    -

    In order to finish the installation of musrfit two more things should be done:

    +
    +

    musrfit last step of the installation

    +

    In order to finish the installation of musrfit two more things should be done:

      -
    • Define the MUSRFITPATH environment variable containing the path to the musrfit executables and XML files. -E.g. if the location of the example above is used append the following line to the ~/.bashrc and ~/.bash_profile +
    • Define the MUSRFITPATH environment variable containing the path to the musrfit executables and XML files. +E.g. if the location of the example above is used append the following line to the ~/.bashrc and ~/.bash_profile (and then either restart the shell or call the same commands once more from the shell):
    -
    export MUSRFITPATH=$ROOTSYS/bin
    +
    export MUSRFITPATH=$ROOTSYS/bin
     
      -
    • Adjust the paths where musrfit will search for data files in the installed musrfit_startup.xml. For -detailed information on this XML file refer to the manual.
    • +
    • Adjust the paths where musrfit will search for data files in the installed musrfit_startup.xml. For +detailed information on this XML file refer to the manual.
    -

    musredit

    -

    In the latest version of musrfit the configure script tries to determine automatically the highest -available Qt version. In case this is found, the editor musredit is built already together with musrfit. +

    musredit

    +

    In the latest version of musrfit the configure script tries to determine automatically the highest +available Qt version. In case this is found, the editor musredit is built already together with musrfit. If not, try the following:

    -
    $ cd $HOME/Apps/musrfit/src/musredit_qt5
    +
    $ cd $HOME/Apps/musrfit/src/musredit_qt5
     $ # for some distributions you will need qmake-qt5 for the next command
     $ qmake musredit.pro
     
    -

    If everything went fine, musredit can be compiled and installed:

    -
    $ make
    +

    If everything went fine, musredit can be compiled and installed:

    +
    $ make
     $ make install
     
    -

    In case one does not like the executable musredit to be copied to the default installation directory -$ROOTSYS/bin the last make install can be skipped and the executable can be copied somewhere else instead.

    +

    In case one does not like the executable musredit to be copied to the default installation directory +$ROOTSYS/bin the last make install can be skipped and the executable can be copied somewhere else instead.

    musrgui (obsolete)

    -

    If Qt3 is set up the installation of the musrfit editor can be done as follows from within the shell:

    -
    $ cd ~/Applications/musrfit/src/musrgui
    +

    If Qt3 is set up the installation of the musrfit editor can be done as follows from within the shell:

    +
    $ cd ~/Applications/musrfit/src/musrgui
     $ qmake musrgui.pro
     $ make
     $ make install
     
    -

    The last command copies musrgui.app to the standard program directory /Applications.

    -

    Under some circumstances it might happen, that if musrgui was called from Finder the necessary libraries -for executing musrfit could not be found. In that case, the only workaround for the moment is to export -the environment variable DYLD_LIBRARY_PATH in the shell and call musrgui from a terminal! In order to -accomplish that, add the following lines to ~/.profile and call musrgui with the specified command:

    -
    export DYLD_LIBRARY_PATH=/opt/root-system/lib:/sw/lib:$DYLD_LIBRARY_PATH
    +

    The last command copies musrgui.app to the standard program directory /Applications.

    +

    Under some circumstances it might happen, that if musrgui was called from Finder the necessary libraries +for executing musrfit could not be found. In that case, the only workaround for the moment is to export +the environment variable DYLD_LIBRARY_PATH in the shell and call musrgui from a terminal! In order to +accomplish that, add the following lines to ~/.profile and call musrgui with the specified command:

    +
    export DYLD_LIBRARY_PATH=/opt/root-system/lib:/sw/lib:$DYLD_LIBRARY_PATH
     alias mgui='/Applications/musrgui.app/Contents/MacOS/musrgui'
     
    -
    -

    Check the installation

    +
    +

    Check the installation

    In order to perform a quick test for finding out if the installation has been completed successfully, a few msr -files together with the corresponding data files can be found in the musrfit source tree at doc/examples/. -If musrgui has been installed, just open one of the test-*.msr files in the editor and test the musrfit +files together with the corresponding data files can be found in the musrfit source tree at doc/examples/. +If musrgui has been installed, just open one of the test-*.msr files in the editor and test the musrfit functionalities. Otherwise, if only the terminal should be used, as an initial test for instance the following could be done:

    -
    $ cd ~/Applications/musrfit/doc/examples
    +
    $ cd ~/Applications/musrfit/doc/examples
     $ musrview test-histo-ROOT-NPP.msr
     
    @@ -942,23 +1068,73 @@ $ musrview test-histo-ROOT-NPP.msr
    -
    -
    +
    + +
    + + +
    - - +
    + +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/tutorial.html b/doc/html/tutorial.html index 7d8c580f..9337d18b 100644 --- a/doc/html/tutorial.html +++ b/doc/html/tutorial.html @@ -1,291 +1,413 @@ - - - - + + + + + + + + + Tutorial for musrfit — musrfit 1.8.2 documentation + + + + + + + + + + + - Tutorial for musrfit — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

    - musrfit 1.8.0 documentation

    -

    Tutorial for musrfit

    -
    -
    - -

    - «  How to Cite musrfit? -   ::   - Contents -   ::   - User manual  » -

    + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    +
    -

    Tutorial for musrfit

    +

    Tutorial for musrfit

    Single-histogram-fit tutorial

    The μSR-data-analysis process using musrfit is based on so-called msr files. These files contain all information needed for the analysis such as names of the data files, a theory function, fit and plot parameters, and so on. It is the idea of this page to explain the basic use of an msr file and the different programs -of the musrfit suite using the example of a single-histogram fit to time-differential transverse-field -μSR data. For a complete description of all options please refer to the manual.

    +of the musrfit suite using the example of a single-histogram fit to time-differential transverse-field +μSR data. For a complete description of all options please refer to the manual.

    The example deals with a diamagnetic sample that has been measured in an applied field of approximately 150 G in -the GPS spectrometer at PSI using the “transverse geometry”. +the GPS spectrometer at PSI using the “transverse geometry”. In this geometry the muon spin is rotated about 50° up and the field is applied parallel to the muon momentum. Hence, the relevant positron counters (to detect the spin precession) are placed above (histogram 3), below (histogram 4) and right of (histogram 5) the sample. The run numbers start from 3110.

    -

    To analyze these data (in a simple way) one starts out from the msr file 3110_tutorial.msr provided together -with the source-code distribution in the sub-directory doc/examples/. This ASCII file can be edited using any -text editor. For convenience the editor musredit is provided which offer some msr-file-specific functionalities +

    To analyze these data (in a simple way) one starts out from the msr file 3110_tutorial.msr provided together +with the source-code distribution in the sub-directory doc/examples/. This ASCII file can be edited using any +text editor. For convenience the editor musredit is provided which offer some msr-file-specific functionalities and additionally serve as front ends to the underlying programs. In the following it is assumed that the file is -open within musredit.

    +open within musredit.

    The msr file

    -

    The msr file itself is divided into different blocks; a full description of the format can be found here. -In the file 3110_tutorial.msr these blocks are successively:

    -

    The title

    -
    sample XYZ
    +

    The msr file itself is divided into different blocks; a full description of the format can be found here. +In the file 3110_tutorial.msr these blocks are successively:

    +

    The title

    +
    sample XYZ
     

    A descriptive title of the file.

    -

    The FITPARAMETER block

    -
    FITPARAMETER
    -#    No Name        Value     Step        Pos_Error   Boundaries
    -      1 NormUp      4500      5           none        0       none
    -      2 BgUp        200       1           none        0       none
    -      3 PhaseUp     15        1           none
    +

    The FITPARAMETER block

    +
    FITPARAMETER
    +#    No Name        Value     Step        Pos_Error   Boundaries
    +      1 NormUp      4500      5           none        0       none
    +      2 BgUp        200       1           none        0       none
    +      3 PhaseUp     15        1           none
     
    -      4 NormDown    4500      5           none        0       none
    -      5 BgDown      200       1           none        0       none
    -      6 PhaseDown   195       1           none
    +      4 NormDown    4500      5           none        0       none
    +      5 BgDown      200       1           none        0       none
    +      6 PhaseDown   195       1           none
     
    -      7 NormRight   600       5           none        0       none
    -      8 BgRight     40        1           none        0       none
    -      9 PhaseRight  285       1           none
    +      7 NormRight   600       5           none        0       none
    +      8 BgRight     40        1           none        0       none
    +      9 PhaseRight  285       1           none
     
    -     10 AsymSig1    0.17      0.01        none        0       0.33
    -     11 RateSig1    2.5       0.1         none        0       none
    -     12 FieldSig1   100       1           none
    +     10 AsymSig1    0.17      0.01        none        0       0.33
    +     11 RateSig1    2.5       0.1         none        0       none
    +     12 FieldSig1   100       1           none
     
    -     13 AsymSig2    0.02      0.01        none        0       0.33
    -     14 RateSig2    0.5       0.1         none
    -     15 FieldSig2   150       1           none
    +     13 AsymSig2    0.02      0.01        none        0       0.33
    +     14 RateSig2    0.5       0.1         none
    +     15 FieldSig2   150       1           none
     

    The list of parameters used in the theory function to describe the set of data. Each parameter has a number, a name, an initial value and an initial step (for the fitting process). If a parameter should be fixed, the initial step is set to 0. After a fit (see below), this block contains the determined parameter values -and uncertainties (in the Step column). If asymmetric errors are determined, these -will be listed in the Step column (negative) and the Pos_Error column (positive). +and uncertainties (in the Step column). If asymmetric errors are determined, these +will be listed in the Step column (negative) and the Pos_Error column (positive). Optionally, lower and upper boundaries for the parameters can be specified as shown above.

    The meaning of the parameters above is explained in the following:

    -

    Since a single-histogram fit should be done, some +

    Since a single-histogram fit should be done, some histogram-specific parameters are needed. These are a normalization constant (parameter 1), a parameter describing the background of uncorrelated events (parameter 2) and the initial phase of the spin precession with respect to the detector (parameter 3). As stated above, -there are three histograms containing useful information (“Up”, “Down”, “Right”); hence, +there are three histograms containing useful information (“Up”, “Down”, “Right”); hence, this set of parameters has to be present for each of them (parameters 1–9). The remaining parameters are used to model the decay asymmetry which is assumed to be equal for all histograms. In this example one has two signals (e.g. from the sample and the sample holder), each with an amplitude (parameters 10 and 13), a depolarization rate (parameters 11 and 14) and a mean field (here given in Gauss, parameters 12 and 15).

    -

    The THEORY block

    -
    THEORY
    -asymmetry     10
    -simplExpo     11          (rate)
    -TFieldCos   map1  fun1       (phase frequency)
    -+
    -asymmetry     13
    -simpleGss     14          (rate)
    -TFieldCos   map1  fun2       (phase frequency)
    +

    The THEORY block

    +
    THEORY
    +asymmetry     10
    +simplExpo     11          (rate)
    +TFieldCos   map1  fun1       (phase frequency)
    ++
    +asymmetry     13
    +simpleGss     14          (rate)
    +TFieldCos   map1  fun2       (phase frequency)
     

    The THEORY block is used to define a fit-parameter-dependent theory function used to model -the decay asymmetry. Different predefined and user-defined +the decay asymmetry. Different predefined and user-defined functions can be combined here. Theory lines following each other are multiplied and the + sign is used to add different (here: two) signal contributions. The numbers are the parameter numbers -according to the FITPARAMETER block. map and fun are used to refer to +according to the FITPARAMETER block. map and fun are used to refer to histogram-dependent parameters and to interrelate fit parameters, respectively (see below).

    -

    The FUNCTIONS block

    -
    FUNCTIONS
    +

    The FUNCTIONS block

    +
    FUNCTIONS
     fun1 = gamma_mu * par12
     fun2 = gamma_mu * par15
     

    Here functions interrelating different fit parameters and predefined constants can be defined for -the use in the THEORY block. In the example, the functions are used to calculate the -muon-spin-precession frequencies for the given fields [\(\nu = \gamma_\mu B / (2\pi)\)]. One +the use in the THEORY block. In the example, the functions are used to calculate the +muon-spin-precession frequencies for the given fields [\(\nu = \gamma_\mu B / (2\pi)\)]. One function is used for each signal. Altogether, the theory function defined above is -\(A(t) = p_{10} e^{-p_{11} t} \cos(\varphi_i \pi/180 + \gamma_\mu p_{12} t) + p_{13} e^{-(p_{14} t)^2/2} \cos(\varphi_i \pi/180 + \gamma_\mu p_{15} t)\), where the p are the parameters in the FITPARAMETER block and \(\varphi_i = p_3, p_6, p_9\) +\(A(t) = p_{10} e^{-p_{11} t} \cos(\varphi_i \pi/180 + \gamma_\mu p_{12} t) + p_{13} e^{-(p_{14} t)^2/2} \cos(\varphi_i \pi/180 + \gamma_\mu p_{15} t)\), where the p are the parameters in the FITPARAMETER block and \(\varphi_i = p_3, p_6, p_9\) depending on the histogram as shall be seen later.

    -

    The RUN block

    -
    RUN data/deltat_pta_gps_3110 PIM3 PSI PSI-BIN   (name beamline institute data-file-format)
    -fittype         0         (single histogram fit)
    -norm            1
    -backgr.fit      2
    -map             3    0    0    0    0    0    0    0    0    0
    -forward         3
    -data            1       8000
    -t0              1
    -fit             0       4.9
    -packing         20
    +

    The RUN block

    +
    RUN data/deltat_pta_gps_3110 PIM3 PSI PSI-BIN   (name beamline institute data-file-format)
    +fittype         0         (single histogram fit)
    +norm            1
    +backgr.fit      2
    +map             3    0    0    0    0    0    0    0    0    0
    +forward         3
    +data            1       8000
    +t0              1
    +fit             0       4.9
    +packing         20
     

    The RUN blocks are used to collect information on the data to be analyzed. Specifically, these are:

    -
    RUN data/deltat_pta_gps_3110 PIM3 PSI PSI-BIN   (name beamline institute data-file-format)
    +
    RUN data/deltat_pta_gps_3110 PIM3 PSI PSI-BIN   (name beamline institute data-file-format)
     

    The path to the data file and the file format (NEXUS, ROOT-NPP, ROOT-PPC, PSI-BIN, PSI-MDU, WKM, MUD, MDU-ASCII).

    -
    fittype         0         (single histogram fit)
    +
    fittype         0         (single histogram fit)
     

    the fit type (0 = single-histogram fit)

    -
    norm            1
    +
    norm            1
     

    the number of the fit parameter representing the normalization constant

    -
    backgr.fit      2
    +
    backgr.fit      2
     

    the number of the fit parameter representing the background

    -
    map             3    0    0    0    0    0    0    0    0    0
    +
    map             3    0    0    0    0    0    0    0    0    0
     
    -

    the definition of the maps used in the THEORY block — RUN-block-specific +

    the definition of the maps used in the THEORY block — RUN-block-specific parameters are given here; in this example, map1 is substituted by parameter 3 -in the THEORY block for this RUN block and map2, map3, and so on are undefined.

    -
    forward         3
    +in the THEORY block for this RUN block and map2, map3, and so on are undefined.

    +
    forward         3
     
    -

    the histogram number; in this example 3 corresponds to the histogram of the “Up” positron counter

    -
    data            1        8000
    +

    the histogram number; in this example 3 corresponds to the histogram of the “Up” positron counter

    +
    data            1        8000
     
    -

    start and end bins of the range containing useful data in the histogram (to be adjusted, e.g. by using musrt0, see below)

    -
    t0              1
    +

    start and end bins of the range containing useful data in the histogram (to be adjusted, e.g. by using musrt0, see below)

    +
    t0              1
     
    -

    histogram bin corresponding to the time zero (muon implantation time) (to be adjusted, e.g. by musrt0, see below)

    -
    fit             0       4.9
    +

    histogram bin corresponding to the time zero (muon implantation time) (to be adjusted, e.g. by musrt0, see below)

    +
    fit             0       4.9
     

    start and end times (in μs) defining the fit range. In case the fit range exceeds the range of useful data (specified above using the data tag), eventually this data range is used as fit range.

    -
    packing         20
    +
    packing         20
     

    the packing of the histograms (in histogram bins)

    Since the data of three histograms is to be analyzed, the file contains not only one but three RUN blocks — each defining the histogram-specific information following the example given above.

    -

    The COMMAND block

    -
    COMMANDS
    +

    The COMMAND block

    +
    COMMANDS
     MINIMIZE
     MINOS
     SAVE
     
    -

    In the COMMANDS block, a sequence of operations that should be performed is defined. -Here, the requested operations are the minimization of \(\chi^2\) (MINIMIZE), the +

    In the COMMANDS block, a sequence of operations that should be performed is defined. +Here, the requested operations are the minimization of \(\chi^2\) (MINIMIZE), the calculation of asymmetric errors (MINOS) as well as saving the found parameter values and uncertainties to the msr file (SAVE). A full description of the possible commands can -be found here.

    -

    The FOURIER block

    -
    FOURIER
    -units            Gauss   # units either 'Gauss', 'MHz', or 'Mc/s'
    -fourier_power    10
    -apodization      WEAK    # NONE, WEAK, MEDIUM, STRONG
    -plot             POWER   # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE
    -phase            par3
    -range            0.0    600.0
    +be found here.

    +

    The FOURIER block

    +
    FOURIER
    +units            Gauss   # units either 'Gauss', 'MHz', or 'Mc/s'
    +fourier_power    10
    +apodization      WEAK    # NONE, WEAK, MEDIUM, STRONG
    +plot             POWER   # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE
    +phase            par3
    +range            0.0    600.0
     
    -

    The FOURIER block is used to define basic settings for the Fourier transform available -in musrview. These are:

    +

    The FOURIER block is used to define basic settings for the Fourier transform available +in musrview. These are:

    -
    units            Gauss   # units either 'Gauss', 'MHz', or 'Mc/s'
    +
    units            Gauss   # units either 'Gauss', 'MHz', or 'Mc/s'
     

    the units of the Fourier domain

    -
    fourier_power    10
    +
    fourier_power    10
     
    -

    the number of data points used for the discrete transform, here \(2^{10}=1024\).

    -
    apodization      WEAK    # NONE, WEAK, MEDIUM, STRONG
    +

    the number of data points used for the discrete transform, here \(2^{10}=1024\).

    +
    apodization      WEAK    # NONE, WEAK, MEDIUM, STRONG
     
    -

    the apodization to be used

    -
    plot             POWER   # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE
    +

    the apodization to be used

    +
    plot             POWER   # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE
     

    what should be plotted (real part, imaginary part, and so on)

    -
    phase            par3
    +
    phase            par3
     

    the initial phase of the input data is given here in degrees. Optionally, a phase parameter -from the FITPARAMETER block can be given, here par3 takes the value of parameter 3.

    -
    range            0.0    600.0
    +from the FITPARAMETER block can be given, here par3 takes the value of parameter 3.

    +
    range            0.0    600.0
     

    the start and end points of the range of the Fourier transform in the units specified above

    -

    The PLOT block

    -
    PLOT 0   (single histo plot)
    -runs     1   2
    -range    0   4  -0.2   0.2
    +

    The PLOT block

    +
    PLOT 0   (single histo plot)
    +runs     1   2
    +range    0   4  -0.2   0.2
     
    -

    The PLOT block defines which data (corresponding to the given RUN blocks) is plotted when -musrview is called. In the given example, a canvas would be drawn containing -the (life-time-corrected) data of the first two RUN blocks (“Up” and “Down” positron counters). +

    The PLOT block defines which data (corresponding to the given RUN blocks) is plotted when +musrview is called. In the given example, a canvas would be drawn containing +the (life-time-corrected) data of the first two RUN blocks (“Up” and “Down” positron counters). The abscissa would range from 0 to 4 μs, the axis of ordinates from -0.2 to 0.2. -It is possible to define more than one PLOT block. Each PLOT block corresponds to a -separate canvas. Therefore, the second PLOT block in the file

    -
    PLOT 0   (single histo plot)
    -runs     3
    -use_fit_ranges
    +It is possible to define more than one PLOT block. Each PLOT block corresponds to a
    +separate canvas. Therefore, the second PLOT block in the file

    +
    PLOT 0   (single histo plot)
    +runs     3
    +use_fit_ranges
     
    -

    produces an additional window containing the (not life-time-corrected) data of the third RUN block -(“Right” positron counter). The abscissa ranges from 0 to 4.9 μs (according to the fit range given -in the RUN block).

    -

    The STATISTIC block

    -
    STATISTIC --- 2011-07-09 10:58:44
    -chisq = 1348.1764, NDF = 1146, chisq/NDF = 1.176419
    +

    produces an additional window containing the (not life-time-corrected) data of the third RUN block +(“Right” positron counter). The abscissa ranges from 0 to 4.9 μs (according to the fit range given +in the RUN block).

    +

    The STATISTIC block

    +
    STATISTIC --- 2011-07-09 10:58:44
    +chisq = 1348.1764, NDF = 1146, chisq/NDF = 1.176419
     

    This block is the last block of a msr file. It contains some information on the fit: the -date and time as well as the absolute and normalized values of \(\chi^2\) and the +date and time as well as the absolute and normalized values of \(\chi^2\) and the number of degrees of freedom in the fit. These information only have a meaning if the fitting procedure has been executed at least once and the fit has converged!

    @@ -293,9 +415,9 @@ least once and the fit has converged!

    Determine t0 and the data range using musrt0

    Before the given model can be fitted to the data, the data ranges and time zeros of the different -RUN blocks have to be set correctly. This can be achieved using musrt0. -Starting this program by selecting the musrt0 button in musredit or calling from a terminal

    -
    $ musrt0 3110_tutorial.msr
    +RUN blocks have to be set correctly. This can be achieved using musrt0.
    +Starting this program by selecting the musrt0 button in musredit or calling from a terminal

    +
    $ musrt0 3110_tutorial.msr
     

    opens an interactive window plotting the data of the first RUN block:

    @@ -310,65 +432,65 @@ when the cursor is found at a suitable location:

    _images/tutorial-musrt0-2.png

    After all lines have been adjusted for the first histogram, one can go on to the second by pressing q. This procedure is repeated until all ranges have been set correctly. When finished with the last histogram -the new t0 and data-range values will be written to the msr file. A full description of musrt0 can be -found here.

    +the new t0 and data-range values will be written to the msr file. A full description of musrt0 can be +found here.

    -

    Fit the model to the data using musrfit

    +

    Fit the model to the data using musrfit

    Now that the basics of the msr file have been introduced and the necessary adjustments have been done one -can proceed with fitting the specified model to the data. This is done by selecting the musrfit icon -in musredit or calling from a terminal

    -
    $ musrfit 3110_tutorial.msr
    +can proceed with fitting the specified model to the data. This is done by selecting the musrfit icon
    +in musredit or calling from a terminal

    +
    $ musrfit 3110_tutorial.msr
     

    After the fitting procedure has finished the msr file is updated and contains the newly determined values of the fit parameters.

    -

    View the data and the fit using musrview

    -

    The data and the corresponding fit can be visualized by choosing the musrview icon in musredit or +

    View the data and the fit using musrview

    +

    The data and the corresponding fit can be visualized by choosing the musrview icon in musredit or calling from a terminal

    -
    $ musrview 3110_tutorial.msr
    +
    $ musrview 3110_tutorial.msr
     

    This creates the windows according to the given PLOT blocks in the msr file:

    _images/tutorial-musrview-1.png -

    The basic features of musrview can be found in the Musrfit menu. They include:

    +

    The basic features of musrview can be found in the Musrfit menu. They include:

    • export the shown data and the model to an ASCII file with comma-separated values
    • presenting the difference between the shown data and the model (keyboard shortcut: d)
    • calculate and show the Fourier transform of the shown data (keyboard shortcut: f), e.g. for -the asymmetry of the “Up” and “Down” detectors:
    • +the asymmetry of the “Up” and “Down” detectors:
    _images/tutorial-musrview-FT.png
    -

    Process multiple msr files using msr2data

    -

    This short introduction is concluded by calling attention to the program msr2data. -As the name indicates the main purpose of this program is to extract the FITPARAMETER block +

    Process multiple msr files using msr2data

    +

    This short introduction is concluded by calling attention to the program msr2data. +As the name indicates the main purpose of this program is to extract the FITPARAMETER block information from multiple msr files with the same structure and to summarize them in a single -ASCII file (either in TRIUMF DB format or simple columns). However, as described in detail +ASCII file (either in TRIUMF DB format or simple columns). However, as described in detail in the manual, it is not only possible to collect data from msr files but also to create new -msr files from a template and to process these files using musrfit on the fly.

    +msr files from a template and to process these files using musrfit on the fly.

    Assuming the successive runs 3111 through 3114 can be analyzed using the same model introduced above for run 3110 (e.g. in the case one has done measurements at different temperatures) one can -use the file 3110_tutorial.msr as template, generate the files 3111_tutorial.msr through -3114_tutorial.msr with the corresponding updates in the RUN blocks, call for each one musrfit +use the file 3110_tutorial.msr as template, generate the files 3111_tutorial.msr through +3114_tutorial.msr with the corresponding updates in the RUN blocks, call for each one musrfit and finally summarize the FITPARAMETER block information of all processed files in an ASCII output -file tutorial-T-dependence.dat (simple columns). If further information on the temperature or the +file tutorial-T-dependence.dat (simple columns). If further information on the temperature or the applied field is available in the data files these will be included as well in the resulting ASCII file. From the terminal this would be done as follows:

    -
    $ msr2data 3110 3114 _tutorial fit-3110 -o tutorial-T-dependence.dat data
    +
    $ msr2data 3110 3114 _tutorial fit-3110 -o tutorial-T-dependence.dat data
     
    -

    To achieve the same in musredit (in this snapshot in the dark theme) one selects the msr2data icon and fills the form accordingly:

    +

    To achieve the same in musredit (in this snapshot in the dark theme) one selects the msr2data icon and fills the form accordingly:

    _images/tutorial-musredit-msr2data.png

    Further reading

    -

    This page only summarizes the very basic features and options of the programs contained in the musrfit suite. -For a complete description please refer to the manuals of musrfit (including musrview, -musrt0, and musrFT), mupp, musredit, and msr2data.

    +

    This page only summarizes the very basic features and options of the programs contained in the musrfit suite. +For a complete description please refer to the manuals of musrfit (including musrview, +musrt0, and musrFT), mupp, musredit, and msr2data.

    @@ -378,23 +500,73 @@ For a complete description please refer to the manuals of +
    + +
    + + +
    - - +
    + +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/user-libs.html b/doc/html/user-libs.html index e22c1c06..7907d493 100644 --- a/doc/html/user-libs.html +++ b/doc/html/user-libs.html @@ -1,52 +1,186 @@ - - - - + + + + + + + + + Documentation of user libs (user functions) — musrfit 1.8.2 documentation + + + + + + + + + + + - Documentation of user libs (user functions) — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - -

    - musrfit 1.8.0 documentation

    -

    Documentation of user libs (user functions)

    -
    -
    - -

    - «  User manual -   ::   - Contents -   ::   - Setting up musrfit on Different Platforms  » -

    + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    +

    Documentation of user libs (user functions)

    + +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/html/user-manual.html b/doc/html/user-manual.html index 7af6869d..d4d96055 100644 --- a/doc/html/user-manual.html +++ b/doc/html/user-manual.html @@ -1,138 +1,311 @@ - - - - + + + + + + + + + User manual — musrfit 1.8.2 documentation + + + + + + + + + + + - User manual — musrfit 1.8.0 documentation - - - - - - - - - - + + + + + + + + - - - -
    - -

    - «  Tutorial for musrfit -   ::   - Contents -   ::   - Documentation of user libs (user functions)  » -

    + + + + + + + + +
    + + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    +

    User manual

    Introduction

    -

    musrfit is a software tool for analyzing time-differential μSR data. The program suite is free software and licensed under the GNU GPL version 2 or any later version (at your option). It is implemented in C++/ROOT and uses the MINUIT2 libraries developed at CERN for fitting data. Installation instructions for GNU/Linux, MS Windows, and macOS can be found under musrfit setup. Recent changes of the program can be followed on the git, either bitbucket or gitlab.

    +

    musrfit is a software tool for analyzing time-differential μSR data. The program suite is free software and licensed under the GNU GPL version 2 or any later version (at your option). It is implemented in C++/ROOT and uses the MINUIT2 libraries developed at CERN for fitting data. Installation instructions for GNU/Linux, MS Windows, and macOS can be found under musrfit setup. Recent changes of the program can be followed on the git, either bitbucket or gitlab.

    Available Executables, Configuration Files and their Basic Usage

    -

    The philosophy is that users, based on their abilities or preferences, can work on the command line are in a more GUI based setting. Here, the command line based tools will be described. The GUI based parts are described in the musredit.

    +

    The philosophy is that users, based on their abilities or preferences, can work on the command line are in a more GUI based setting. Here, the command line based tools will be described. The GUI based parts are described in the musredit.

    musrfit

    -

    musrfit is the actual fitting program. It defines the FCN routine passed to MINUIT2 and performs \(\chi^2\) or log-max-likelihood fitting. If called from within a shell it accepts several parameters:

    +

    musrfit is the actual fitting program. It defines the FCN routine passed to MINUIT2 and performs \(\chi^2\) or log-max-likelihood fitting. If called from within a shell it accepts several parameters:

    <msr-file>
    filename of the msr input file defining all the details needed for performing a fit to a specified set of data. This is the only mandatory parameter.
    -
    -k, –keep-mn2-output
    -
    selects the option for keeping the output of MINUIT2 including the correlation coefficients between different parameters and renaming the files MINUIT2.OUTPUT and MINUIT2.root to <msr_file_without_extension>-mn2.output and <msr_file_without_extension>-mn2.root, respectively, e.g. <msr_file> = 8472.msr will result in 8472-mn2.output, 8472-mn2.root.
    -
    -c, –chisq-only
    -
    Instead of fitting the model, musrfit calculates \(\chi^2\) or max. log-likelihood, maxLH, only once and sends the result to the standard output if called with this option. This is e.g. useful for the adjustment of the initial values of the fit parameters.
    -
    -t, –title-from-data-file
    -
    If this option is given musrfit will replace the title in the <msr_file> by the run title in the data file of the first run appearing in a RUN block. In case there is no run title in the data file no substitution is done.
    -
    -e, –estimateN0
    -
    estimate \(N_0\) for single histogram fits.
    -
    -p, –per-run-block-chisq
    +
    -k, –keep-mn2-output
    +
    selects the option for keeping the output of MINUIT2 including the correlation coefficients between different parameters and renaming the files MINUIT2.OUTPUT and MINUIT2.root to <msr_file_without_extension>-mn2.output and <msr_file_without_extension>-mn2.root, respectively, e.g. <msr_file> = 8472.msr will result in 8472-mn2.output, 8472-mn2.root.
    +
    -c, –chisq-only
    +
    Instead of fitting the model, musrfit calculates \(\chi^2\) or max. log-likelihood, maxLH, only once and sends the result to the standard output if called with this option. This is e.g. useful for the adjustment of the initial values of the fit parameters.
    +
    -t, –title-from-data-file
    +
    If this option is given musrfit will replace the title in the <msr_file> by the run title in the data file of the first run appearing in a RUN block. In case there is no run title in the data file no substitution is done.
    +
    -e, –estimateN0
    +
    estimate \(N_0\) for single histogram fits.
    +
    -p, –per-run-block-chisq
    will write per run block chisq/maxLH into the msr-file.
    -
    -n, –no-of-cores-avail
    +
    -n, –no-of-cores-avail
    print out how many cores are available (only vaild for OpenMP)
    -
    -u, –use-no-of-threads <number>
    +
    -u, –use-no-of-threads <number>
    <number>: number of threads to be used (OpenMP). Needs to be <= max. number of cores. If OpenMP is enable, the maximal number of cores is used, if it is not limited by this option.
    -
    –dump <type>
    +
    –dump <type>
    is writing a data file with the fit data and the theory; <type> can be ascii (data in columns) or root (data in ROOT histograms).
    -
    –timeout <timeout_tag>
    -
    overwrites the predefined timeout of 3600 sec. <timeout_tag> \(\leq\) 0 means the timeout facility is not enabled. <timeout_tag> > 0, e.g. nn will set the timeout to nn (sec). If during a fit this timeout is reached, musrfit will terminate. This is used to prevent orphan musrfit processes to jam the system.
    -
    –help
    +
    –timeout <timeout_tag>
    +
    overwrites the predefined timeout of 3600 sec. <timeout_tag> \(\leq\) 0 means the timeout facility is not enabled. <timeout_tag> > 0, e.g. nn will set the timeout to nn (sec). If during a fit this timeout is reached, musrfit will terminate. This is used to prevent orphan musrfit processes to jam the system.
    +
    –help
    displays a small help notice in the shell explaining the basic usage of the program.
    -
    –version
    -
    prints the version number of musrfit
    +
    –version
    +
    prints the version number of musrfit

    If called with a msr input file, e.g.

    -
    $ musrfit 8472.msr
    +
    $ musrfit 8472.msr
     
    -

    the fit described in the input file will be executed and the results will be written to a mlog output file, in the example 8472.mlog. When the fitting has terminated the msr file and the mlog file are swapped, so that the resultant parameter values can be found in the msr file and the mlog file contains a copy of the input file. The format of the mlog file is the same as that of the msr file. For a detailed description of the msr file format refer to the corresponding section.

    +

    the fit described in the input file will be executed and the results will be written to a mlog output file, in the example 8472.mlog. When the fitting has terminated the msr file and the mlog file are swapped, so that the resultant parameter values can be found in the msr file and the mlog file contains a copy of the input file. The format of the mlog file is the same as that of the msr file. For a detailed description of the msr file format refer to the corresponding section.

    Another example:

    -
    $ musrfit -c -e 8472_tf_histo.msr
    +
    $ musrfit -c -e 8472_tf_histo.msr
     
    -

    This will calculate the chisq/maxLH of the run 8472 after estimating the \(N_0\).

    +

    This will calculate the chisq/maxLH of the run 8472 after estimating the \(N_0\).

    musrview

    -

    musrview is an interactive graphical user interface for the presentation of the analyzed data and the corresponding fits. If called from within a shell it accepts the following parameters:

    +

    musrview is an interactive graphical user interface for the presentation of the analyzed data and the corresponding fits. If called from within a shell it accepts the following parameters:

    <msr_file>
    name of the msr input or output file to be displayed. This is the only mandatory parameter.
    -
    –help
    +
    –help
    displays a small help notice in the shell explaining the basic usage of the program.
    -
    –version
    -
    prints the version number of musrview.
    -
    -f, –fourier
    +
    –version
    +
    prints the version number of musrview.
    +
    -f, –fourier
    will directly present the Fourier transform of the <msr_file> with Fourier options as defined in the <msr_file>.
    -
    -a, –avg
    +
    -a, –avg
    will directly present the averaged data/Fourier of the <msr_file>.
    -
    -1, –one_to_one
    +
    -1, –one_to_one
    calculate the theory points only at the data points.
    -
    –<graphic_format_extension>
    +
    –<graphic_format_extension>
    will produce a graphics output file without starting a ROOT session. The filename is based on the name of the <msr_file>, e.g. 8472.msr will result in 8472_0.png. -Supported values for <graphic_format_extension> are eps, pdf, gif, jpg, png, svg, xpm, and, root.
    -
    –ascii
    +Supported values for <graphic_format_extension> are eps, pdf, gif, jpg, png, svg, xpm, and, root. +
    –ascii
    will generate an ascii dump of the data and theory as plotted.
    -
    –timeout <timeout>
    -
    <timeout> given in seconds after which musrview terminates. If <timeout> \(\leq\) 0, no timeout will take place. Default for <timeout> is 0.
    +
    –timeout <timeout>
    +
    <timeout> given in seconds after which musrview terminates. If <timeout> \(\leq\) 0, no timeout will take place. Default for <timeout> is 0.
    -

    If called with a msr file and the --<graphic_format_extension> option, e.g.

    -
    $ musrview 8472.msr --jpg
    +

    If called with a msr file and the --<graphic_format_extension> option, e.g.

    +
    $ musrview 8472.msr --jpg
     
    -

    for each PLOT block in the the msr file a file 8472_X.jpg is produced where X counts the PLOT blocks starting from zero.

    +

    for each PLOT block in the the msr file a file 8472_X.jpg is produced where X counts the PLOT blocks starting from zero.

    If called only with a msr file, e.g.

    -
    $ musrview 8472.msr
    +
    $ musrview 8472.msr
     
    -

    a ROOT canvas is drawn; it contains all experimental data and fits specified in the PLOT block of the msr file. For a description of the various plotting types refer to the corresponding section.

    +

    a ROOT canvas is drawn; it contains all experimental data and fits specified in the PLOT block of the msr file. For a description of the various plotting types refer to the corresponding section.

    Another example:

    -
    $ musrview 8472_tf_histo.msr -f -a
    +
    $ musrview 8472_tf_histo.msr -f -a
     

    will show the averaged Fourier transform of the data of run 8472.

    @@ -160,7 +333,7 @@ Supported values for <graphic_
    a
    show the average of the presented data, e.g. the averaged Fourier power spectra of various detectors.
    u
    -
    reset the plotting range to the area given in the msr file (“un-zoom”).
    +
    reset the plotting range to the area given in the msr file (“un-zoom”).
    c
    toggles between normal and cross-hair cursor.
    t
    @@ -170,85 +343,85 @@ Supported values for <graphic_

    musrFT

    -

    musrFT is an interactive graphical user interface for the presentation of Fourier transforms of raw μSR histograms. It’s purpose is to get a quick overview for high TF-field data, as found e.g. at the HAL-9500 instrument at PSI. It Fourier transforms the raw histogram data, i.e. \(N(t)\) rather than \(A(t)\), and hence shows the lifetime contribution of the muon decay. This is no problem for large enough fields, but will be a severe problem at very low fields. musrFT is still in its early stage and should be considered a beta-version.

    +

    musrFT is an interactive graphical user interface for the presentation of Fourier transforms of raw μSR histograms. It’s purpose is to get a quick overview for high TF-field data, as found e.g. at the HAL-9500 instrument at PSI. It Fourier transforms the raw histogram data, i.e. \(N(t)\) rather than \(A(t)\), and hence shows the lifetime contribution of the muon decay. This is no problem for large enough fields, but will be a severe problem at very low fields. musrFT is still in its early stage and should be considered a beta-version.

    If called from within a shell it accepts the following parameters:

    Input Files
    <msr_files>
    -
    msr-file name(s). These msr-files are used for the Fourier transform. It can be a list of msr-files, e.g. musrFT 3110.msr 3111.msr
    -
    -df, –data-file <data-file>
    -
    This allows to feed only μSR data file(s) to perform the Fourier transform. Since the extended <msr-file> information are missing, they will need to be provided by to options, or musrFT tries to guess, based on musrfit_startup.xml settings.
    +
    msr-file name(s). These msr-files are used for the Fourier transform. It can be a list of msr-files, e.g. musrFT 3110.msr 3111.msr
    +
    -df, –data-file <data-file>
    +
    This allows to feed only μSR data file(s) to perform the Fourier transform. Since the extended <msr-file> information are missing, they will need to be provided by to options, or musrFT tries to guess, based on musrfit_startup.xml settings.
    Options
    -
    –help
    +
    –help
    display a help and exit.
    -
    –version
    +
    –version
    output version information and exit.
    -
    -g, –graphic-format <graphic-format-extension>
    -
    will produce a graphic-output-file without starting a root session. The name is based either on the <msr-file> or the <data-file>, e.g. 3310.msr -> 3310_0.png. Supported graphic-format-extension: eps, pdf, gif, jpg, png, svg, xpm, and root.
    -
    –dump <fln>
    +
    -g, –graphic-format <graphic-format-extension>
    +
    will produce a graphic-output-file without starting a root session. The name is based either on the <msr-file> or the <data-file>, e.g. 3310.msr -> 3310_0.png. Supported graphic-format-extension: eps, pdf, gif, jpg, png, svg, xpm, and root.
    +
    –dump <fln>
    rather than starting a root session and showing Fourier graphs of the data, it will output the Fourier data in an ascii file <fln>.
    -
    -br, –background-range <start> <end>
    +
    -br, –background-range <start> <end>
    background interval used to estimate the background to be subtracted before the Fourier transform. <start>, <end> to be given in bins.
    -
    -bg, –background
    +
    -bg, –background
    gives the background explicit for each histogram.
    -
    -fo, –fourier-option <fopt>
    -
    <fopt> can be ‘real‘, ‘imag‘, ‘real+imag‘, ‘power‘, or ‘phase‘. If this is not defined (neither on the command line nor in the musrfit_startup.xml) ‘power‘ will be used.
    -
    -ap, –apodization <val>
    -
    <val> can be either ‘none‘, ‘weak‘, ‘medium‘, ‘strong‘. Default will be ‘none‘.
    -
    -fp, –fourier-power <N>
    -
    <N> being the Fourier power, i.e. 2^<N> used for zero padding. Default is -1, i.e. no zero padding will be performed.
    -
    -u, –units <units>
    -
    <units> is used to define the abscissa of the Fourier transform. One may choose between the fields (Gauss) or (Tesla), the frequency (MHz), and the angular-frequency domain (Mc/s). Default will be ‘MHz‘.
    -
    -ph, –phase <val>
    -
    defines the initial phase <val>. This only is of concern for ‘real‘, ‘imag‘, and ‘real+imag‘. Default will be 0.0.
    -
    -fr, –fourier-range <start> <end>
    +
    -fo, –fourier-option <fopt>
    +
    <fopt> can be ‘real’, ‘imag’, ‘real+imag’, ‘power’, or ‘phase’. If this is not defined (neither on the command line nor in the musrfit_startup.xml) ‘power’ will be used.
    +
    -ap, –apodization <val>
    +
    <val> can be either ‘none’, ‘weak’, ‘medium’, ‘strong’. Default will be ‘none’.
    +
    -fp, –fourier-power <N>
    +
    <N> being the Fourier power, i.e. 2^<N> used for zero padding. Default is -1, i.e. no zero padding will be performed.
    +
    -u, –units <units>
    +
    <units> is used to define the abscissa of the Fourier transform. One may choose between the fields (Gauss) or (Tesla), the frequency (MHz), and the angular-frequency domain (Mc/s). Default will be ‘MHz’.
    +
    -ph, –phase <val>
    +
    defines the initial phase <val>. This only is of concern for ‘real’, ‘imag’, and ‘real+imag’. Default will be 0.0.
    +
    -fr, –fourier-range <start> <end>
    Fourier range. <start>, <end> are interpreted in the units given. Default will be -1.0 for both which means, take the full Fourier range.
    -
    -tr, –time-range <start> <end>
    +
    -tr, –time-range <start> <end>
    time domain range to be used for Fourier transform. <start>, <end> are to be given in (μs). If nothing is provided, the full time range found in the data file(s) will be used.
    -
    –histo <list>
    -
    give the <list> of histograms to be used for the Fourier transform. E.g. musrFT -df lem15_his_01234.root --histo 1 3, will only be needed together with the option --data-file. If multiple data files are given, <list> will apply to all data-files given. If --histo is not given, all histos of a data file will be used. <list> can be anything like: 2 3 6, or 2-17, or 1-6 9, etc.
    -
    -a, –average
    +
    –histo <list>
    +
    give the <list> of histograms to be used for the Fourier transform. E.g. musrFT -df lem15_his_01234.root --histo 1 3, will only be needed together with the option --data-file. If multiple data files are given, <list> will apply to all data-files given. If --histo is not given, all histos of a data file will be used. <list> can be anything like: 2 3 6, or 2-17, or 1-6 9, etc.
    +
    -a, –average
    show the average of all ALL Fourier transformed data.
    -
    -ad, –average-per-data-set
    +
    -ad, –average-per-data-set
    show the average of per-data-set Fourier transformed data.
    - -t0 <list>
    -
    A list of t0’s can be provided. This in conjunction with --data-file and --fourier-option real allows to get the proper initial phase if t0’s are known. If a single t0 for multiple histos is given, it is assume, that this t0 is common to all histos. Example: musrFT -df lem15_his_01234.root -fo real --t0 2750 --histo 1 3.
    -
    -pa, –packing <N>
    +
    A list of t0’s can be provided. This in conjunction with --data-file and --fourier-option real allows to get the proper initial phase if t0’s are known. If a single t0 for multiple histos is given, it is assume, that this t0 is common to all histos. Example: musrFT -df lem15_his_01234.root -fo real --t0 2750 --histo 1 3.
    +
    -pa, –packing <N>
    if <N> (an integer), the time domain data will first be packed/rebinned by <N>.
    -
    –title <title>
    +
    –title <title>
    give a global title for the plot.
    -
    –create-msr-file <fln>
    +
    –create-msr-file <fln>
    creates a msr-file based on the command line options provided. This will help on the way to a full fitting model.
    -
    -lc, –lifetimecorrection <fudge>
    +
    -lc, –lifetimecorrection <fudge>
    try to eliminate the muon life time decay. Only makes sense for low transverse fields. <fudge> is a tweaking factor (scaling factor for the estimated t0) and should be kept around 1.0.
    -
    –timeout <timeout>
    -
    <timeout> given in seconds after which musrFT terminates. If <timeout> \(\leq\) 0, no timeout will take place. Default <timeout> is 3600 sec.
    +
    –timeout <timeout>
    +
    <timeout> given in seconds after which musrFT terminates. If <timeout> \(\leq\) 0, no timeout will take place. Default <timeout> is 3600 sec.

    Example 1

    -
    $ musrFT -df tdc_hifi_2014_00153.mdu --title "MnSi" -tr 0 10 -fr 7.0 7.6 -u Tesla --histo 2-17 -a
    +
    $ musrFT -df tdc_hifi_2014_00153.mdu --title "MnSi" -tr 0 10 -fr 7.0 7.6 -u Tesla --histo 2-17 -a
     
    -

    will take time range from t=0..10 μs, will show the Fourier transform in units of Tesla from B=7.0..7.6 Tesla of the detectors 2-17. Rather than showing the 16 individual Fourier transforms, the average of all Fourier spectra will be shown. t0’s will be guessed by the maximum of the time domain histogram (assuming a prompt peak!!).

    +

    will take time range from t=0..10 μs, will show the Fourier transform in units of Tesla from B=7.0..7.6 Tesla of the detectors 2-17. Rather than showing the 16 individual Fourier transforms, the average of all Fourier spectra will be shown. t0’s will be guessed by the maximum of the time domain histogram (assuming a prompt peak!!).

    Example 2

    -
    $ musrFT -df tdc_hifi_2014_00153.mdu -tr 0 10 -fr 7.0 7.6 -u Tesla --histo 2-17 --title "MnSi average, T=50K, B=7.5T" -a -g pdf
    +
    $ musrFT -df tdc_hifi_2014_00153.mdu -tr 0 10 -fr 7.0 7.6 -u Tesla --histo 2-17 --title "MnSi average, T=50K, B=7.5T" -a -g pdf
     
    -

    as Example 1 but rather than showing an interactive GUI, the output will be dumped into a pdf-file. The file name will be tdc_hifi_2014_00153.pdf.

    +

    as Example 1 but rather than showing an interactive GUI, the output will be dumped into a pdf-file. The file name will be tdc_hifi_2014_00153.pdf.

    Example 3

    -
    $ musrFT -df tdc_hifi_2014_00153.mdu -tr 0 10 -fr 7.0 7.6 -u Tesla --histo 2-17 --title "MnSi average, T=50K, B=7.5T" -a --dump MnSi.dat
    +
    $ musrFT -df tdc_hifi_2014_00153.mdu -tr 0 10 -fr 7.0 7.6 -u Tesla --histo 2-17 --title "MnSi average, T=50K, B=7.5T" -a --dump MnSi.dat
     
    -

    as Example 1 but rather than showing an interactive GUI, the output will be dumped into the ascii file MnSi.dat.

    -

    Within the drawn canvas all standard actions applicable to ROOT canvases might be performed. In the menu bar the MusrFT menu can be found. From there some musrFT-specific actions might be taken

    +

    as Example 1 but rather than showing an interactive GUI, the output will be dumped into the ascii file MnSi.dat.

    +

    Within the drawn canvas all standard actions applicable to ROOT canvases might be performed. In the menu bar the MusrFT menu can be found. From there some musrFT-specific actions might be taken

    Fourier
    -
    allows to switch between different Fourier transform representations ‘Power‘, ‘Real‘, ...
    +
    allows to switch between different Fourier transform representations ‘Power’, ‘Real’, …
    Average
    toggle between the current view and the averaged data view.
    Average per Data Set
    @@ -267,7 +440,7 @@ Supported values for <graphic_
    d
    toggle between average per data set and single Fourier histos, e.g. the averaged Fourier power spectra of various detectors for the different data sets given.
    u
    -
    reset the plotting range to the area given in the msr-file or the form the command line (“unzoom”).
    +
    reset the plotting range to the area given in the msr-file or the form the command line (“unzoom”).
    c
    toggles between normal and crosshair cursor.
    @@ -275,31 +448,31 @@ Supported values for <graphic_

    musrt0

    -

    musrt0 is a user interface allowing to determine t0 and the time windows of data and background needed to be specified in the RUN blocks of the msr file. It can be operated either as an interactive program or in a non-interactive mode. In the non-interactive mode it accepts the following parameters:

    +

    musrt0 is a user interface allowing to determine t0 and the time windows of data and background needed to be specified in the RUN blocks of the msr file. It can be operated either as an interactive program or in a non-interactive mode. In the non-interactive mode it accepts the following parameters:

    <msr_file>
    name of an msr file.
    -
    -g, –getT0FromPromptPeak [<firstGoodBinOffset>]
    -
    tries to estimate t0 from the prompt peak (maximum entry) in each histogram and writes the corresponding values to the t0 lines in the RUN blocks of the msr file. If an optional number <firstGoodBinOffset> is given, the lower limit of the data range will be set to t0 + <firstGoodBinOffset>.
    -
    –timeout <timeout>
    -
    <timeout> given in seconds after which musrview terminates. If <timeout> \(\leq\) 0, no timeout will take place. Default for <timeout> is 0.
    -
    –help
    +
    -g, –getT0FromPromptPeak [<firstGoodBinOffset>]
    +
    tries to estimate t0 from the prompt peak (maximum entry) in each histogram and writes the corresponding values to the t0 lines in the RUN blocks of the msr file. If an optional number <firstGoodBinOffset> is given, the lower limit of the data range will be set to t0 + <firstGoodBinOffset>.
    +
    –timeout <timeout>
    +
    <timeout> given in seconds after which musrview terminates. If <timeout> \(\leq\) 0, no timeout will take place. Default for <timeout> is 0.
    +
    –help
    displays a small help notice in the shell explaining the basic usage of the program.
    -
    –version
    +
    –version
    prints the version number of musrt0.
    -

    The interactive mode of musrt0 is started if the program is called with a sole msr-file argument, e.g.

    -
    $ musrt0 8472.msr
    +

    The interactive mode of musrt0 is started if the program is called with a sole msr-file argument, e.g.

    +
    $ musrt0 8472.msr
     
    -

    Then a ROOT canvas depicting the histogram of the data set mentioned first in the RUN blocks block is drawn in different colors:

    +

    Then a ROOT canvas depicting the histogram of the data set mentioned first in the RUN blocks block is drawn in different colors:

    _images/musrt0.png

    The colors of the data points represent the choice of the time windows of data (blue) and background (red), as well as t0 (green line). In order to change these ranges the mouse cross-hair is moved to a channel of choice and one of the following keys is pressed:

    q
    close the currently open histogram and opens the next (see also below) .
    Q
    -
    quit musrt0 without writing into the msr file.
    +
    quit musrt0 without writing into the msr file.
    z
    zoom into the region about the t0.
    u
    @@ -317,35 +490,35 @@ Supported values for <graphic_
    D
    set the upper limit of the data range bin.
    -

    When all channels have been set correctly for the first histogram, pressing of the key q opens the subsequent histogram listed in a RUN block and the respective channels can be updated there. This procedure is repeated until all histograms given in the RUN blocks are processed.

    -

    Using the key Q, musrt0 can be interrupted. No changes to the msr file are applied in this case.

    -

    Closing a window by clicking the X button (close icon) is equivalent to pressing Q, i.e. musrt0 is simply terminated.

    +

    When all channels have been set correctly for the first histogram, pressing of the key q opens the subsequent histogram listed in a RUN block and the respective channels can be updated there. This procedure is repeated until all histograms given in the RUN blocks are processed.

    +

    Using the key Q, musrt0 can be interrupted. No changes to the msr file are applied in this case.

    +

    Closing a window by clicking the X button (close icon) is equivalent to pressing Q, i.e. musrt0 is simply terminated.

    msr2msr

    -

    msr2msr is a small utility for converting existing WKM msr files into musrfit msr files. It accepts the following parameters:

    +

    msr2msr is a small utility for converting existing WKM msr files into musrfit msr files. It accepts the following parameters:

    <msr_file_in>
    input WKM msr file (mandatory first parameter).
    <msr_file_out>
    converted output musrfit msr file (mandatory second parameter).
    -
    –help
    +
    –help
    displays a small help notice in the shell explaining the basic usage of the program.

    A typical example then looks like:

    -
    $ msr2msr 8472-WKM.msr 8472-musrfit.msr
    +
    $ msr2msr 8472-WKM.msr 8472-musrfit.msr
     
    -

    If the input file has already the musrfit msr file structure, the output file will be just a copy of the input file.

    +

    If the input file has already the musrfit msr file structure, the output file will be just a copy of the input file.

    msr2data

    -

    For details concerning msr2data see the section msr2data.

    +

    For details concerning msr2data see the section msr2data.

    any2many

    -

    any2many is a μSR data file converter. Currently different facilities (PSI, TRIUMF, ISIS, J-PARC) are saving their μSR data files in different formats, or even worse some instruments are using other μSR data formats than others. The aim of any2many is that these files can be converted into each other. Of course only a subset of header information can be converted.

    -

    Currently any2many can convert the following μSR data file formats:

    +

    any2many is a μSR data file converter. Currently different facilities (PSI, TRIUMF, ISIS, J-PARC) are saving their μSR data files in different formats, or even worse some instruments are using other μSR data formats than others. The aim of any2many is that these files can be converted into each other. Of course only a subset of header information can be converted.

    +

    Currently any2many can convert the following μSR data file formats:

    input formats
    MusrRoot, PSI-BIN (PSI bulk), ROOT (PSI LEM), MUD (TRIUMF), NeXus IDF1 and NeXus IDF2 (ISIS), PSI-MDU (PSI bulk internal only), WKM (outdated ascii file format).
    @@ -355,99 +528,99 @@ Supported values for <graphic_

    Since the goal was to create a very flexible converter tool, it has ample of options which will listed below, followed by many examples showing how to use it. The options:

    -f <filenameList-input>
    -
    where <filenameList-input> is a space separated list of file names (not starting with a ‘-‘), e.g. 2010/lem10_his_0111.root 2010/lem10_his_0113.root.
    +
    where <filenameList-input> is a space separated list of file names (not starting with a ‘-‘), e.g. 2010/lem10_his_0111.root 2010/lem10_his_0113.root.
    -o <outputFileName>
    this option allows to given an output-file-name for the converted file. This option only makes sense if <filenameList-input> is a single input-file-name!
    -r <runList-input>
    where <runList-input> is a list of run numbers separated by spaces of the form: <run1> <run2> <run3> etc., or a sequence of runs <runStart>-<runEnd>, e.g. 111-123. This option cannot be combined with -f and vice versa.
    -t <in-template> <out-template>
    -
    where <in-/out-template> are templates to generate real file names from run numbers. The following template tags can be used: [yy] for year, and [rrrr] for the run number. If the run number tag is used, the number of ‘r’ will give the number of digits used with leading zeros, e.g. [rrrrrr] and run 123 will result in 000123. Similarly [yyyy] will result in something like 1999, whereas [yy] into something like 99. For more details best check the examples below.
    +
    where <in-/out-template> are templates to generate real file names from run numbers. The following template tags can be used: [yy] for year, and [rrrr] for the run number. If the run number tag is used, the number of ‘r’ will give the number of digits used with leading zeros, e.g. [rrrrrr] and run 123 will result in 000123. Similarly [yyyy] will result in something like 1999, whereas [yy] into something like 99. For more details best check the examples below.
    -c <in-Format> <out-Format>
    -
    this is used to tell any2many what is the input-file-format and into which output-file-format the data shall be converted. The possible input-/output-file-formats are listed above.
    +
    this is used to tell any2many what is the input-file-format and into which output-file-format the data shall be converted. The possible input-/output-file-formats are listed above.
    -h
    -
    This option is for MusrRoot input files only! Select the the histo groups to be exported. is a space separated list of the histo group, e.g. -h 0, 20 will try to export the histo 0 (NPP) and 20 (PPC). A histo-group is defined via the RedGreen offset in the MusrRoot file format. It is used e.g. in red/green mode measurements. If this option is omitted in a conversion from MusrRoot to something, the first group will be exported only!
    +
    This option is for MusrRoot input files only! Select the the histo groups to be exported. is a space separated list of the histo group, e.g. -h 0, 20 will try to export the histo 0 (NPP) and 20 (PPC). A histo-group is defined via the RedGreen offset in the MusrRoot file format. It is used e.g. in red/green mode measurements. If this option is omitted in a conversion from MusrRoot to something, the first group will be exported only!
    -p <output-path>
    where <output-path> is the output path for the converted files. If no <output-path> is given, the current directory will be used, unless the option -s is used.
    -y <year>
    -
    here a <year> in the form yy or yyyy can be given. If this is the case, any automatic file name generation which needs a year will use this given one.
    +
    here a <year> in the form yy or yyyy can be given. If this is the case, any automatic file name generation which needs a year will use this given one.
    -s
    with this option the output data file will be sent to the stdout. It is intended to be used together with web applications.
    -rebin <n>
    where <n> is the number of bins to be packed/rebinned.
    -z [g|b] <compressed>
    -
    where <compressed> is the output file name (without extension) of the compressed data collection, and ‘g’ will result in .tar.gz, and ‘b’ in .tar.bz2 files.
    -
    –help
    +
    where <compressed> is the output file name (without extension) of the compressed data collection, and ‘g’ will result in .tar.gz, and ‘b’ in .tar.bz2 files.
    +
    –help
    displays a help notice in the shell explaining the basic usage of the program.
    -
    –version
    -
    shows the current version of any2many.
    +
    –version
    +
    shows the current version of any2many.

    If the template option -t is absent, the output file name will be generated according to the input data file name (not possible with <runList-input>), and the output data format.

    Here now a couple of examples which should help to understand the switches.

    -
    $ any2many -f 2010/lem10_his_0123.root -c ROOT ASCII -rebin 25
    +
    $ any2many -f 2010/lem10_his_0123.root -c ROOT ASCII -rebin 25
     
    -

    Will take the LEM ROOT file 2010/lem10_his_0123.root rebin it by 25 and convert it to ASCII. The output file name will be lem10_his_0123.ascii, and the file will be saved in the current directory. The data in lem10_his_0123.ascii are written in columns.

    -
    $ any2many -f 2010/lem10_his_0123.root -c ROOT NEXUS2-HDF5 -o 2010/lem10_his_0123_v2.nxs
    +

    Will take the LEM ROOT file 2010/lem10_his_0123.root rebin it by 25 and convert it to ASCII. The output file name will be lem10_his_0123.ascii, and the file will be saved in the current directory. The data in lem10_his_0123.ascii are written in columns.

    +
    $ any2many -f 2010/lem10_his_0123.root -c ROOT NEXUS2-HDF5 -o 2010/lem10_his_0123_v2.nxs
     
    -

    Will take the LEM ROOT file 2010/lem10_his_0123.root and convert it to NeXus IDF V2. The output file name will be lem10_his_0123_v2.nxs, and will be saved in the current directory.

    -
    $ any2many -r 123 137 -c PSI-BIN MUD -t d[yyyy]/deltat_tdc_gps_[rrrr].bin [rrrrrr].msr -y 2001
    +

    Will take the LEM ROOT file 2010/lem10_his_0123.root and convert it to NeXus IDF V2. The output file name will be lem10_his_0123_v2.nxs, and will be saved in the current directory.

    +
    $ any2many -r 123 137 -c PSI-BIN MUD -t d[yyyy]/deltat_tdc_gps_[rrrr].bin [rrrrrr].msr -y 2001
     
    -

    Will take the run 123 and 137, will generate the input file names: d2001/deltat_tdc_gps_0123.bin and d2001/deltat_tdc_gps_0137.bin, read these files, and convert them to the output files with names 000123.msr` and `000137.msr, respectively.

    -
    $ any2many -r 100-117 -c PSI-MDU ASCII -t d[yyyy]/deltat_tdc_alc_[rrrr].mdu [rrr].ascii -y 2011 -s
    +

    Will take the run 123 and 137, will generate the input file names: d2001/deltat_tdc_gps_0123.bin and d2001/deltat_tdc_gps_0137.bin, read these files, and convert them to the output files with names 000123.msr` and `000137.msr, respectively.

    +
    $ any2many -r 100-117 -c PSI-MDU ASCII -t d[yyyy]/deltat_tdc_alc_[rrrr].mdu [rrr].ascii -y 2011 -s
     

    Will take the runs 100 through 117 and convert the PSI-MDU input files to ASCII output and instead of saving them into a file, they will be spit to the standard output.

    -
    $ any2many -r 100-117 -c NEXUS ROOT -t d[yyyy]/psi_gps_[rrrr].NXS psi_[yyyy]_gps_[rrrr].root -z b psi_gps_run_100to117
    +
    $ any2many -r 100-117 -c NEXUS ROOT -t d[yyyy]/psi_gps_[rrrr].NXS psi_[yyyy]_gps_[rrrr].root -z b psi_gps_run_100to117
     
    -

    Will take the runs 100 through 117 and convert the NeXus input files to ROOT output. Afterwards these new files will be collected in a compressed archive psi_gps_run_100to117.tar.bz2.

    -
    $ any2many -f 2010/lem10_his_0123.root 2010/lem10_his_0012.root -c ROOT ROOT -rebin 25
    +

    Will take the runs 100 through 117 and convert the NeXus input files to ROOT output. Afterwards these new files will be collected in a compressed archive psi_gps_run_100to117.tar.bz2.

    +
    $ any2many -f 2010/lem10_his_0123.root 2010/lem10_his_0012.root -c ROOT ROOT -rebin 25
     
    -

    Will read the two files 2010/lem10_his_0123.root and 2010/lem10_his_0012.root, rebin them with 25 and export them as LEM ROOT files with adding rebin25 to the name, e.g. 2010/lem10_his_0123_rebin25.root.

    +

    Will read the two files 2010/lem10_his_0123.root and 2010/lem10_his_0012.root, rebin them with 25 and export them as LEM ROOT files with adding rebin25 to the name, e.g. 2010/lem10_his_0123_rebin25.root.

    dump_header

    -

    dump_header is a little program which tries to read a μSR data file and sends the relevant information (required header info, start of the histos, etc.) to the standard output. Currently the following μSR data file formats are supported: MusrROOT, ROOT (old LEM format), PSI-BIN, PSI-MDU, NeXus (IDF1 and IDF2), MUD, and WKM.

    +

    dump_header is a little program which tries to read a μSR data file and sends the relevant information (required header info, start of the histos, etc.) to the standard output. Currently the following μSR data file formats are supported: MusrROOT, ROOT (old LEM format), PSI-BIN, PSI-MDU, NeXus (IDF1 and IDF2), MUD, and WKM.

    -
    -rn, –runNo <runNo>
    +
    -rn, –runNo <runNo>
    run number of the header to be dumped.
    -
    -fn, –fileName <fileName>
    +
    -fn, –fileName <fileName>
    muSR data file name.
    -
    -ff, –fileFormat <fileFormat>
    +
    -ff, –fileFormat <fileFormat>
    where <fileFormat> is one of the above listed ones.
    -
    -y, –year <year>
    +
    -y, –year <year>
    <year> has to be a 4 digit value, e.g. 2005, if provided it is used to generate the file name for the given <runNo>, otherwise the current year is used. If a file name is given, this option has no effect.
    -
    -s, –summary
    +
    -s, –summary
    this option is used for LE-μSR data sets only. It will, additionally to the header information, print the summary file content.
    -
    –psi-bulk <opt>
    -
    where <opt> consists of two items: (i) pta or tdc, (ii) the instrument name, i.e. gps, ltf, dolly, gpd, or hifi. This is needed in combination with the file formats PSI-BIN and PSI-MDU when providing a run number.
    -
    -h, –help
    +
    -i –instrument <inst>
    +
    where <inst> is the requested instrument name, i.e. lem (default), gps, ltf, dolly, gpd, or hifi.
    +
    -h, –help
    will show a short help.
    -
    -v, –version
    +
    -v, –version
    will print the current version.

    Examples:

    -
    $ dump_header -fn tdc_hifi_2015_00123.mdu -y 2015
    +
    $ dump_header -fn tdc_hifi_2015_00123.mdu -y 2015
     

    will dump the header information for the run 123 of the HAL-9500 instrument of the year 2015.

    -
    $ dump_header -rn 123 -ff PSI-MDU --psi-bulk tdc hifi -y 2015
    +
    $ dump_header -rn 123 -ff PSI-MDU --psi-bulk tdc hifi -y 2015
     

    the same as the previous example, except that the file name is constructed via the number and the additionally provided information.

    -
    $ dump_header -rn 3456 -s
    +
    $ dump_header -rn 3456 -s
     

    Will dump the LEM header information of run 3456 including the content of the run summary file.

    addRun

    -

    addRun allows to add the histograms of various runs and save the result in a file. +

    addRun allows to add the histograms of various runs and save the result in a file. This can be done either by a list of runs (option1), or by a run file (option2).

    -
    usage0: addRun [--help | -h] | [--version | -v]
    +
    usage0: addRun [--help | -h] | [--version | -v]
     usage1: addRun <options1> -rl <runList>
     usage2: addRun <options2> -in <inputFile>
     
    @@ -500,30 +673,30 @@ usage2: addRun <options2> -in <inputFile>
     

    musrfit_startup.xml

    -

    musrfit_startup.xml is a configuration file located at $HOME\.musrfit. In this file the following XML tags are allowed to define settings:

    +

    musrfit_startup.xml is a configuration file located at $HOME\.musrfit. In this file the following XML tags are allowed to define settings:

    <data_path>PATH_TO_DATA</data_path>
    -
    add the new path PATH_TO_DATA where musrfit and musrview will search for data files.
    -
    <run_name_template inst=”instrument_name”>template</run_name_template>
    -

    instrument_name is the name of the instrument, e.g. gps. template allows to generate the potential path fragment where to search for files. -These path fragments are added to all present data_path. This is used e.g. by addRun in order to find runs. To illustrate this here an example:

    -

    d%yyyy%/tdc/lem%yy%_his_%rrrr%.root.

    -

    %yyyy% will be replaced by the provided year (4 digits, e.g. 2020). %yy% will be replaced by the provided year (2 digits, e.g. 18). -%rrrr% will be replaced by the run number. Here 4 r are given, hence the run 123 will be replaced to 0123, i.e. leading zero’s will be added. -For the given example %rrrrr% would be replaced to 00123 etc.

    +
    add the new path PATH_TO_DATA where musrfit and musrview will search for data files.
    +
    <run_name_template inst=”instrument_name”>template</run_name_template>
    +

    instrument_name is the name of the instrument, e.g. gps. template allows to generate the potential path fragment where to search for files. +These path fragments are added to all present data_path. This is used e.g. by addRun in order to find runs. To illustrate this here an example:

    +

    d%yyyy%/tdc/lem%yy%_his_%rrrr%.root.

    +

    %yyyy% will be replaced by the provided year (4 digits, e.g. 2020). %yy% will be replaced by the provided year (2 digits, e.g. 18). +%rrrr% will be replaced by the run number. Here 4 r are given, hence the run 123 will be replaced to 0123, i.e. leading zero’s will be added. +For the given example %rrrrr% would be replaced to 00123 etc.

    If the year is 2019 and the run 123, the above template would be expanded to

    -

    d2019/tdc/lem19_his_0123.root.

    +

    d2019/tdc/lem19_his_0123.root.

    <write_per_run_block_chisq>y/n</write_per_run_block_chisq>
    -
    if enabled \(\chi^2\) for each RUN block will be written to the STATISTIC block of the resulting msr file. Additionally, -in case a \(\chi^2\) single-histogram fit is done, also Pearson’s \(\chi^2\) will be added.
    +
    if enabled \(\chi^2\) for each RUN block will be written to the STATISTIC block of the resulting msr file. Additionally, +in case a \(\chi^2\) single-histogram fit is done, also Pearson’s \(\chi^2\) will be added.
    <fourier_settings></fourier_settings>
    -

    set the default parameters for the Fourier transform in musrview. For further details refer to the description of the FOURIER block in the msr file.

    +

    set the default parameters for the Fourier transform in musrview. For further details refer to the description of the FOURIER block in the msr file.

    <units>UNITS</units>
    specify the units of the frequency or field-domain. Valid units are Gauss, MHz and Mc/s (inside a <fourier_settings> environment).
    <fourier_power>n</fourier_power>
    -
    specify the number of points \(2^n (n < 21)\) to be used for the Fourier transform (inside a <fourier_settings> environment).
    +
    specify the number of points \(2^n (n < 21)\) to be used for the Fourier transform (inside a <fourier_settings> environment).
    <apodization>APOD</apodization>
    set the default apodization method. Valid apodizations are none, weak, medium, and strong (inside a <fourier_settings> environment).
    <plot>PLOT</plot>
    @@ -538,14 +711,14 @@ in case a \(\chi^2\) single-histogram fit is done, als

    change the default ROOT settings.

    <marker_list></marker_list>
    -

    specify the order in which musrview should use markers when plotting data (inside a <root_settings> environment).

    +

    specify the order in which musrview should use markers when plotting data (inside a <root_settings> environment).

    <marker>X</marker>
    use the ROOT marker number X (inside a <marker_list> environment).
    <color_list></color_list>
    -

    specify the order in which musrview should use colors when plotting data (inside a <root_settings> environment).

    +

    specify the order in which musrview should use colors when plotting data (inside a <root_settings> environment).

    <color>R,G,B</color>
    use the RGB coded color (inside a <color_list> environment).
    @@ -555,7 +728,7 @@ in case a \(\chi^2\) single-histogram fit is done, als

    An example would look like:

    -
    <?xml version="1.0" encoding="UTF-8"?>
    +
    <?xml version="1.0" encoding="UTF-8"?>
     <musrfit xmlns="https://intranet.psi.ch/MUSR/MusrFit">
         <data_path>/mnt/data/nemu/his</data_path>
         <write_per_run_block_chisq>y</write_per_run_block_chisq>
    @@ -590,7 +763,7 @@ in case a \(\chi^2\) single-histogram fit is done, als
     

    Description of the msr File Format

    -

    The programs are using an input file to control their action. This input file has the extension .msr (msr file). The msr file is built up from different blocks. Each block starts with a keyword and is, with the exception of the title, terminated by an empty line. Comments start with the character #. The various input blocks are described below.

    +

    The programs are using an input file to control their action. This input file has the extension .msr (msr file). The msr file is built up from different blocks. Each block starts with a keyword and is, with the exception of the title, terminated by an empty line. Comments start with the character #. The various input blocks are described below.

    The Title

    The first line of the msr file is the title line. Unlike all the other input blocks, it does not start with a block keyword. It is just a simple text line, in which any information can be placed. The title text will be used in the graphical representation of the data as a headline.

    @@ -598,38 +771,38 @@ in case a \(\chi^2\) single-histogram fit is done, als

    The FITPARAMETER Block

    The FITPARAMETER block is used to define the fit parameters in a MINUIT typical style. There are various possible parameter definitions which are listed here:

    -
    1. <no> <name> <value> <step>
    -2. <no> <name> <value> <step> <lower_boundary> <upper_boundary>
    -3. <no> <name> <value> <step> <pos_error> <lower_boundary> <upper_boundary>
    +
    1. <no> <name> <value> <step>
    +2. <no> <name> <value> <step> <lower_boundary> <upper_boundary>
    +3. <no> <name> <value> <step> <pos_error> <lower_boundary> <upper_boundary>
     

    where <no> is the parameter number, <name> is the parameter name [1], <value> is the initial guess of the parameter, <step> the inital step width, <lower/upper_boundary> is the lower/upper boundary for the parameter [2].

    In the output file, <value> will be the MINUIT fit value, <step> will contain the error estimate (or the negative error estimate if MINOS was successfully used), <pos_error> will have the value none if MINOS has not been used, otherwise it will show the positive error estimate.

    A typical example looks like this:

    -
    FITPARAMETER
    -#       No   Name      Value     Step       Pos_Error    Boundaries
    -        1   alpha     1          0.02       none         0       1.8
    -        2   asy       0.1042     0.004713   none         0       0.33
    -        3   phase     15         1.0        none
    -        4   freq      0.9        0.0379     none
    -        5   rate      0.03       0.00579    none
    +
    FITPARAMETER
    +#       No   Name      Value     Step       Pos_Error    Boundaries
    +        1   alpha     1          0.02       none         0       1.8
    +        2   asy       0.1042     0.004713   none         0       0.33
    +        3   phase     15         1.0        none
    +        4   freq      0.9        0.0379     none
    +        5   rate      0.03       0.00579    none
     

    There is also the possibility to constrain the parameters to semi-defined intervals (like par > a or par < b). The syntax is as follows:

    -
    FITPARAMETER
    -#       No   Name      Value     Step       Pos_Error    Boundaries
    -# Specify only a lower boundary for the parameter
    -        1   Asy1      0.04501   -0.00208    0.00211      0       none
    +
    FITPARAMETER
    +#       No   Name      Value     Step       Pos_Error    Boundaries
    +# Specify only a lower boundary for the parameter
    +        1   Asy1      0.04501   -0.00208    0.00211      0       none
     
    -# Specify only an upper boundary for the parameter
    -        2   Rate1     0.14245   -0.02501    0.02279      none    10
    +# Specify only an upper boundary for the parameter
    +        2   Rate1     0.14245   -0.02501    0.02279      none    10
     
    -# Specify lower and upper boundaries for the parameter
    -        3   Asy2      0.14501   -0.00208    0.00211      0       0.33
    +# Specify lower and upper boundaries for the parameter
    +        3   Asy2      0.14501   -0.00208    0.00211      0       0.33
     
    -# Do not specify boundaries at all
    -        4   Field2    343.212   -2.27960    2.27885
    -        5   Rate2     0.42045   -0.02501    0.02279      none    none
    +# Do not specify boundaries at all
    +        4   Field2    343.212   -2.27960    2.27885
    +        5   Rate2     0.42045   -0.02501    0.02279      none    none
     

    Notes

    @@ -670,229 +843,229 @@ in case a \(\chi^2\) single-histogram fit is done, als c const(1) const -  +  asymmetry a A(1) -\(A\) -  +\(A\) +  simplExpo se -\(\lambda (\mu \mathrm{s}^{-1})\) -\(\exp(-\lambda t)\) -  +\(\lambda (\mu \mathrm{s}^{-1})\) +\(\exp(-\lambda t)\) +  generExpo ge -\(\lambda (\mu \mathrm{s}^{-1}) \beta(1)\) -\(\exp\left[-(\lambda t)^\beta\right]\) -  +\(\lambda (\mu \mathrm{s}^{-1}) \beta(1)\) +\(\exp\left[-(\lambda t)^\beta\right]\) +  simpleGss sg -\(\sigma (\mu \mathrm{s}^{-1})\) -\(\exp\left[-\frac{1}{2} (\sigma t)^2\right]\) -  +\(\sigma (\mu \mathrm{s}^{-1})\) +\(\exp\left[-\frac{1}{2} (\sigma t)^2\right]\) +  statGssKT stg -\(\sigma (\mu \mathrm{s}^{-1})\) -\(\frac{1}{3} + \frac{2}{3} \left[ 1 - (\sigma t)^2\right] \exp\left[-\frac{1}{2} (\sigma t)^2\right]\) -  +\(\sigma (\mu \mathrm{s}^{-1})\) +\(\frac{1}{3} + \frac{2}{3} \left[ 1 - (\sigma t)^2\right] \exp\left[-\frac{1}{2} (\sigma t)^2\right]\) +  statGssKTLF sgktlf -\(\nu\) (MHz), \(\sigma (\mu \mathrm{s}^{-1})\) +\(\nu\) (MHz), \(\sigma (\mu \mathrm{s}^{-1})\)
    -
    \(G_{\rm G}^{\rm LF}(t) = 1-\frac{2\sigma^2}{(2\pi\nu)^2} \left[ 1-\exp\left(- \frac{1}{2}\sigma^2t^2\right)\cos(2\pi\nu t)\right]\)
    -
    \(+ \frac{2\sigma^4}{(2\pi\nu)^3} \int_0^t \exp\left(- \frac{1}{2}\sigma^2\tau^2\right) \sigma(2\pi\nu\tau) d\tau\)
    +
    \(G_{\rm G}^{\rm LF}(t) = 1-\frac{2\sigma^2}{(2\pi\nu)^2} \left[ 1-\exp\left(- \frac{1}{2}\sigma^2t^2\right)\cos(2\pi\nu t)\right]\)
    +
    \(+ \frac{2\sigma^4}{(2\pi\nu)^3} \int_0^t \exp\left(- \frac{1}{2}\sigma^2\tau^2\right) \sigma(2\pi\nu\tau) d\tau\)
    [3] dynGssKTLF dgktlf -\(\nu\) (MHz), \(\sigma (\mu \mathrm{s}^{-1})\), \(\Gamma\) (MHz) +\(\nu\) (MHz), \(\sigma (\mu \mathrm{s}^{-1})\), \(\Gamma\) (MHz)
    -
    \(\frac{1}{2\pi i} \int_{\gamma+i\infty}^{\gamma-i\infty} \frac{f_{\rm G}(s+\Gamma)}{1-\Gamma f_{\rm G}(s+\Gamma)} \exp(s t) ds\),
    -
    where \(f_{\rm G}(s) = \int_0^\infty G_{\rm G}^{\rm LF}(t) \exp(-s t) dt\)
    +
    \(\frac{1}{2\pi i} \int_{\gamma+i\infty}^{\gamma-i\infty} \frac{f_{\rm G}(s+\Gamma)}{1-\Gamma f_{\rm G}(s+\Gamma)} \exp(s t) ds\),
    +
    where \(f_{\rm G}(s) = \int_0^\infty G_{\rm G}^{\rm LF}(t) \exp(-s t) dt\)
    [4] statExpKT sekt -\(\lambda (\mu \mathrm{s}^{-1})\) -\(\frac{1}{3} + \frac{2}{3} \left[ 1 - \lambda t\right] \exp(-\lambda t)\) +\(\lambda (\mu \mathrm{s}^{-1})\) +\(\frac{1}{3} + \frac{2}{3} \left[ 1 - \lambda t\right] \exp(-\lambda t)\) [5] statExpKTLF sektlf -\(\nu\) (MHz), \(a (\mu \mathrm{s}^{-1})\) +\(\nu\) (MHz), \(a (\mu \mathrm{s}^{-1})\)
    -
    \(1 - \frac{a}{2\pi\nu} j_1(2\pi\nu t) \exp(-a t)\)
    -
    \(- \left(\frac{a}{2\pi\nu}\right)^2 \left[j_0(2\pi\nu t)\exp(-a t)-1\right]\) -\(- a \left[1+\left(\frac{a}{2\pi\nu}\right)^2\right] \int_0^t \exp(-a\tau) j_0(2\pi\nu\tau) d\tau = G_{\rm L}^{\rm LF}(t)\)
    +
    \(1 - \frac{a}{2\pi\nu} j_1(2\pi\nu t) \exp(-a t)\)
    +
    \(- \left(\frac{a}{2\pi\nu}\right)^2 \left[j_0(2\pi\nu t)\exp(-a t)-1\right]\) +\(- a \left[1+\left(\frac{a}{2\pi\nu}\right)^2\right] \int_0^t \exp(-a\tau) j_0(2\pi\nu\tau) d\tau = G_{\rm L}^{\rm LF}(t)\)
    [6] dynExpKTLF dektlf -\(\nu\) (MHz), \(a (\mu \mathrm{s}^{-1})\), \(\Gamma\) (MHz) +\(\nu\) (MHz), \(a (\mu \mathrm{s}^{-1})\), \(\Gamma\) (MHz)
    -
    \(\frac{1}{2\pi i} \int_{\gamma+i\infty}^{\gamma-i\infty} \frac{f_{\rm L}(s+\Gamma)}{1-\Gamma f_{\rm L}(s+\Gamma)} \exp(s t) ds\),
    -
    where \(f_{\rm L}(s) = \int_0^\infty G_{\rm L}^{\rm LF}(t) \exp(-s t) dt\)
    +
    \(\frac{1}{2\pi i} \int_{\gamma+i\infty}^{\gamma-i\infty} \frac{f_{\rm L}(s+\Gamma)}{1-\Gamma f_{\rm L}(s+\Gamma)} \exp(s t) ds\),
    +
    where \(f_{\rm L}(s) = \int_0^\infty G_{\rm L}^{\rm LF}(t) \exp(-s t) dt\)
    [7] combiLGKT lgkt -\(\lambda (\mu \mathrm{s}^{-1})\), \(\sigma (\mu \mathrm{s}^{-1})\) -\(\frac{1}{3} + \frac{2}{3} (1 - \sigma^2 t^2 -\lambda t) \exp\left(-\frac{\sigma^2 t^2}{2}-\lambda t\right)\) -  +\(\lambda (\mu \mathrm{s}^{-1})\), \(\sigma (\mu \mathrm{s}^{-1})\) +\(\frac{1}{3} + \frac{2}{3} (1 - \sigma^2 t^2 -\lambda t) \exp\left(-\frac{\sigma^2 t^2}{2}-\lambda t\right)\) +  strKT skt -\(\sigma (\mu \mathrm{s}^{-1}),~\beta(1)\) -\(\frac{1}{3} + \frac{2}{3} \left[ 1 - (\sigma t)^\beta\right] \exp\left[-(\sigma t)^\beta / \beta \right]\) +\(\sigma (\mu \mathrm{s}^{-1}),~\beta(1)\) +\(\frac{1}{3} + \frac{2}{3} \left[ 1 - (\sigma t)^\beta\right] \exp\left[-(\sigma t)^\beta / \beta \right]\) [8] spinGlass spg -\(\lambda (\mu \mathrm{s}^{-1})\), \(\gamma (\mu \mathrm{s}^{-1})\), \(q (1)\) +\(\lambda (\mu \mathrm{s}^{-1})\), \(\gamma (\mu \mathrm{s}^{-1})\), \(q (1)\)
    -
    \(\frac{1}{3} \exp\left(-\sqrt{\Omega t}\right) +\)
    -
    \(+ \frac{2}{3} \left(1 - \frac{q\lambda^2 t^2}{\sqrt{\Omega t+ q\lambda^2 t^2}}\right) \exp(-\sqrt{\Omega t + q \lambda^2 t^2})\), -\(\Omega t = \frac{4 \lambda^2 (1-q) t}{\gamma}\)
    +
    \(\frac{1}{3} \exp\left(-\sqrt{\Omega t}\right) +\)
    +
    \(+ \frac{2}{3} \left(1 - \frac{q\lambda^2 t^2}{\sqrt{\Omega t+ q\lambda^2 t^2}}\right) \exp(-\sqrt{\Omega t + q \lambda^2 t^2})\), +\(\Omega t = \frac{4 \lambda^2 (1-q) t}{\gamma}\)
    -  +  rdAnisoHf rahf -\(\nu\) (MHz), \(\lambda (\mu \mathrm{s}^{-1})\) +\(\nu\) (MHz), \(\lambda (\mu \mathrm{s}^{-1})\)
    -
    \(\frac{1}{6} (1-\nu t/2) \exp(-\nu t/2) +\)
    -
    \(+ \frac{1}{3} (1 - \nu t/4) \exp(-\frac{\nu t + 2.44949 \lambda t}{4})\)
    +
    \(\frac{1}{6} (1-\nu t/2) \exp(-\nu t/2) +\)
    +
    \(+ \frac{1}{3} (1 - \nu t/4) \exp(-\frac{\nu t + 2.44949 \lambda t}{4})\)
    [9] TFieldCos tf -\(\varphi (^\circ), \nu\) (MHz) -\(\cos\left(2\pi\nu t + \frac{\pi \varphi}{180}\right)\) -  +\(\varphi (^\circ), \nu\) (MHz) +\(\cos\left(2\pi\nu t + \frac{\pi \varphi}{180}\right)\) +  internFld if -\(\alpha (1), \varphi (^\circ)\), \(\nu\) (MHz), \(\lambda_{\rm T} (\mu \mathrm{s}^{-1})\),\(\lambda_{\rm L} (\mu \mathrm{s}^{-1})\) +\(\alpha (1), \varphi (^\circ)\), \(\nu\) (MHz), \(\lambda_{\rm T} (\mu \mathrm{s}^{-1})\),\(\lambda_{\rm L} (\mu \mathrm{s}^{-1})\)
    -
    \(\alpha \cos\left(2\pi\nu t + \frac{\pi \varphi}{180}\right) \exp(-\lambda_{\rm T}t) +\)
    -
    \(+ (1-\alpha) \exp(-\lambda_{\rm L} t)\)
    +
    \(\alpha \cos\left(2\pi\nu t + \frac{\pi \varphi}{180}\right) \exp(-\lambda_{\rm T}t) +\)
    +
    \(+ (1-\alpha) \exp(-\lambda_{\rm L} t)\)
    -  +  Bessel b -\(\varphi (^\circ), \nu\) (MHz) -\(j_0\left(2\pi\nu t + \frac{\pi \varphi}{180}\right)\) -  +\(\varphi (^\circ), \nu\) (MHz) +\(j_0\left(2\pi\nu t + \frac{\pi \varphi}{180}\right)\) +  internbsl ib -\(\alpha (1), \varphi (^\circ)\), \(\nu\) (MHz), \(\lambda_{\rm T} (\mu \mathrm{s}^{-1})\),\(\lambda_{\rm L} (\mu \mathrm{s}^{-1})\) +\(\alpha (1), \varphi (^\circ)\), \(\nu\) (MHz), \(\lambda_{\rm T} (\mu \mathrm{s}^{-1})\),\(\lambda_{\rm L} (\mu \mathrm{s}^{-1})\)
    -
    \(\alpha j_0\left(2\pi\nu t + \frac{\pi \varphi}{180}\right) \exp(-\lambda_{\rm T}t) +\)
    -
    \(+ (1-\alpha) \exp(-\lambda_{\rm L} t)\)
    +
    \(\alpha j_0\left(2\pi\nu t + \frac{\pi \varphi}{180}\right) \exp(-\lambda_{\rm T}t) +\)
    +
    \(+ (1-\alpha) \exp(-\lambda_{\rm L} t)\)
    -  +  internFldGK ifgk -\(\alpha (1), \nu\) (MHz), \(\sigma (\mu \mathrm{s}^{-1})\), \(\lambda (\mu\mathrm{s}^{-1}), \beta (1)\) +\(\alpha (1), \nu\) (MHz), \(\sigma (\mu \mathrm{s}^{-1})\), \(\lambda (\mu\mathrm{s}^{-1}), \beta (1)\)
    -
    \(\alpha\left[\cos(2\pi\nu t)-\frac{\sigma^2 t}{2\pi\nu}\sin(2\pi\nu t)\right]\exp(-\sigma^2 t^2/2)+\)
    -
    \(+ (1-\alpha) \exp(-(\lambda t)^\beta)\)
    +
    \(\alpha\left[\cos(2\pi\nu t)-\frac{\sigma^2 t}{2\pi\nu}\sin(2\pi\nu t)\right]\exp(-\sigma^2 t^2/2)+\)
    +
    \(+ (1-\alpha) \exp(-(\lambda t)^\beta)\)
    [10] internFldLL ifll -\(\alpha (1), \nu\) (MHz), \(a (\mu \mathrm{s}^{-1})\), \(\lambda (\mu\mathrm{s}^{-1}), \beta (1)\) +\(\alpha (1), \nu\) (MHz), \(a (\mu \mathrm{s}^{-1})\), \(\lambda (\mu\mathrm{s}^{-1}), \beta (1)\)
    -
    \(\alpha\left[\cos(2\pi\nu t)-\frac{a}{2\pi\nu}\sin(2\pi\nu t)\right]\exp(-a t)+\)
    -
    \(+ (1-\alpha) \exp(-(\lambda t)^\beta)\)
    +
    \(\alpha\left[\cos(2\pi\nu t)-\frac{a}{2\pi\nu}\sin(2\pi\nu t)\right]\exp(-a t)+\)
    +
    \(+ (1-\alpha) \exp(-(\lambda t)^\beta)\)
    [11] abragam ab -\(\sigma (\mu \mathrm{s}^{-1})\), \(\gamma\) (MHz) -\(\exp\left[-\frac{\sigma^2}{\gamma^2} (e^{-\gamma t} - 1 + \gamma t)\right]\) -  +\(\sigma (\mu \mathrm{s}^{-1})\), \(\gamma\) (MHz) +\(\exp\left[-\frac{\sigma^2}{\gamma^2} (e^{-\gamma t} - 1 + \gamma t)\right]\) +  skewedGss skg -\(\varphi (^\circ), \nu\) (MHz) \(\sigma_{+} (\mu \mathrm{s}^{-1})\), \(\sigma_{-} (\mu \mathrm{s}^{-1})\) +\(\varphi (^\circ), \nu\) (MHz) \(\sigma_{+} (\mu \mathrm{s}^{-1})\), \(\sigma_{-} (\mu \mathrm{s}^{-1})\)
    -
    \(\frac{\sigma_{-}}{\sigma_{+}+\sigma_{-}} \exp\left[\frac{\sigma_{-}^2 t^2}{2}\right] \left\{\cos(2\pi\nu t + \frac{\pi\varphi}{180}) + \sin(2\pi\nu t + \frac{\pi\varphi}{180}) \mathrm{Erfi}\left(\frac{\sigma_{-} t}{\sqrt{2}}\right)\right\} +\)
    -
    \(+ \frac{\sigma_{+}}{\sigma_{+}+\sigma_{-}} \exp\left[\frac{\sigma_{+}^2 t^2}{2}\right] \left\{\cos(2\pi\nu t + \frac{\pi\varphi}{180}) - \sin(2\pi\nu t + \frac{\pi\varphi}{180}) \mathrm{Erfi}\left(\frac{\sigma_{+} t}{\sqrt{2}}\right)\right\}\)
    +
    \(\frac{\sigma_{-}}{\sigma_{+}+\sigma_{-}} \exp\left[\frac{\sigma_{-}^2 t^2}{2}\right] \left\{\cos(2\pi\nu t + \frac{\pi\varphi}{180}) + \sin(2\pi\nu t + \frac{\pi\varphi}{180}) \mathrm{Erfi}\left(\frac{\sigma_{-} t}{\sqrt{2}}\right)\right\} +\)
    +
    \(+ \frac{\sigma_{+}}{\sigma_{+}+\sigma_{-}} \exp\left[\frac{\sigma_{+}^2 t^2}{2}\right] \left\{\cos(2\pi\nu t + \frac{\pi\varphi}{180}) - \sin(2\pi\nu t + \frac{\pi\varphi}{180}) \mathrm{Erfi}\left(\frac{\sigma_{+} t}{\sqrt{2}}\right)\right\}\)
    [12] staticNKZF snkzf -\(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\) -\(\frac{1}{3} + \frac{2}{3}\left(\frac{1}{1+R_b^2\Delta_0^2 t^2}\right)^{3/2} \left(1 - \frac{\Delta_0^2 t^2}{1+R_b^2\Delta_0^2 t^2}\right) \exp\left[-\frac{\Delta_0^2 t^2}{2(1+R_b^2\Delta_0^2 t^2)}\right]\) +\(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\) +\(\frac{1}{3} + \frac{2}{3}\left(\frac{1}{1+R_b^2\Delta_0^2 t^2}\right)^{3/2} \left(1 - \frac{\Delta_0^2 t^2}{1+R_b^2\Delta_0^2 t^2}\right) \exp\left[-\frac{\Delta_0^2 t^2}{2(1+R_b^2\Delta_0^2 t^2)}\right]\) [13] staticNKTF snktf -\(\varphi (^\circ), \nu\) (MHz), \(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\) -\(\sqrt{\frac{1}{1+R_b^2 \Delta_0^2 t^2}} \exp\left[-\frac{\Delta_0^2 t^2}{2(1+R_b^2 \Delta_0^2 t^2)}\right] \cos(2\pi\nu t + \varphi)\) +\(\varphi (^\circ), \nu\) (MHz), \(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\) +\(\sqrt{\frac{1}{1+R_b^2 \Delta_0^2 t^2}} \exp\left[-\frac{\Delta_0^2 t^2}{2(1+R_b^2 \Delta_0^2 t^2)}\right] \cos(2\pi\nu t + \varphi)\) see [13] dynamicNKZF dnkzf -\(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\), \(\nu_c\) (MHz) +\(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\), \(\nu_c\) (MHz)
    -
    \(\sqrt{\frac{1}{1+4 R_b^2 \Delta_0^2 \Theta(t)}} \exp\left[-\frac{2\Delta_0^2 \Theta(t)}{1+4 R_b^2 \Delta_0^2 \Theta(t)}\right]\),
    -
    \(\Theta(t) = \frac{\exp(-\nu_c t) -1 -\nu_c t}{\nu_c^2}\)
    +
    \(\sqrt{\frac{1}{1+4 R_b^2 \Delta_0^2 \Theta(t)}} \exp\left[-\frac{2\Delta_0^2 \Theta(t)}{1+4 R_b^2 \Delta_0^2 \Theta(t)}\right]\),
    +
    \(\Theta(t) = \frac{\exp(-\nu_c t) -1 -\nu_c t}{\nu_c^2}\)
    see [13] dynamicNKTF dnktf -\(\varphi (^\circ), \nu\) (MHz), \(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\), \(\nu_c\) (MHz) +\(\varphi (^\circ), \nu\) (MHz), \(\Delta_0 (\mu \mathrm{s}^{-1})\), \(R_b = \Delta_{\rm GbG}/\Delta_0 (1)\), \(\nu_c\) (MHz)
    -
    \(\sqrt{\frac{1}{1+2 R_b^2 \Delta_0^2 \Theta(t)}} \exp\left[-\frac{\Delta_0^2 \Theta(t)}{1+2 R_b^2 \Delta_0^2 \Theta(t)}\right] \cos(2\pi\nu t + \varphi)\),
    -
    \(\Theta(t) = \frac{\exp(-\nu_c t) -1 -\nu_c t}{\nu_c^2}\)
    +
    \(\sqrt{\frac{1}{1+2 R_b^2 \Delta_0^2 \Theta(t)}} \exp\left[-\frac{\Delta_0^2 \Theta(t)}{1+2 R_b^2 \Delta_0^2 \Theta(t)}\right] \cos(2\pi\nu t + \varphi)\),
    +
    \(\Theta(t) = \frac{\exp(-\nu_c t) -1 -\nu_c t}{\nu_c^2}\)
    see [13] muMinusExpTF mmsetf -\(N_0 (1), \tau (\mu \mathrm{s}^{-1})\), \(A (1), \lambda (\mu \mathrm{s}^{-1})\), \(\varphi (^\circ), \nu\) (MHz) -\(N_0 \exp(-t/\tau) \left[ 1 + A \exp(-\lambda t) \cos(2 \pi \nu t + \varphi) \right]\) +\(N_0 (1), \tau (\mu \mathrm{s}^{-1})\), \(A (1), \lambda (\mu \mathrm{s}^{-1})\), \(\varphi (^\circ), \nu\) (MHz) +\(N_0 \exp(-t/\tau) \left[ 1 + A \exp(-\lambda t) \cos(2 \pi \nu t + \varphi) \right]\) [14] polynom p -\(t_0 ([t]), a_0 (1)\), \(a_1 (t), \ldots, a_n (1)\) -\(\sum_{k=0}^n a_k (t-t_0)^k\) -  +\(t_0 ([t]), a_0 (1)\), \(a_1 (t), \ldots, a_n (1)\) +\(\sum_{k=0}^n a_k (t-t_0)^k\) +  @@ -900,7 +1073,7 @@ in case a \(\chi^2\) single-histogram fit is done, als - +
    [3]R.S. Hayano et al., Phys. Rev. B 20, 850 (1979). – not DKS ready.
    [3]R.S. Hayano et al., Phys. Rev. B 20, 850 (1979). – not DKS ready.
    @@ -908,25 +1081,25 @@ in case a \(\chi^2\) single-histogram fit is done, als +A. Keren, Phys. Rev. B 50, 10039 (1994). – not DKS ready.
    [4]R.S. Hayano et al., Phys. Rev. B 20, 850 (1979)., P. Dalmas de Réotier and A. Yaouanc, J. Phys.: Condens. Matter 4, 4533 (1992)., -A. Keren, Phys. Rev. B 50, 10039 (1994). – not DKS ready.
    - +
    [5]Y.J. Uemura et al., Phys. Rev. B 31, 546 (1985). – not DKS ready.
    [5]Y.J. Uemura et al., Phys. Rev. B 31, 546 (1985). – not DKS ready.
    - +
    [6]Y.J. Uemura et al., Phys. Rev. B 31, 546 (1985). – not DKS ready.
    [6]Y.J. Uemura et al., Phys. Rev. B 31, 546 (1985). – not DKS ready.
    - +
    [7]R.S. Hayano et al., Phys. Rev. B 20, 850 (1979)., P. Dalmas de Réotier and A. Yaouanc, J. Phys.: Condens. Matter 4, 4533 (1992). – not DKS ready.
    [7]R.S. Hayano et al., Phys. Rev. B 20, 850 (1979)., P. Dalmas de Réotier and A. Yaouanc, J. Phys.: Condens. Matter 4, 4533 (1992). – not DKS ready.
    @@ -945,35 +1118,35 @@ in case a \(\chi^2\) single-histogram fit is done, als +In the original work, \(\alpha=2/3,\, \lambda=0,\, \beta=1\). If you find values strongly deviating from these values you should question your analysis approach.
    [10]E.I. Kornilov and V.Yu. Pomjakushin, Physics Letters A 153, 364, (1991). -In the original work, \(\alpha=2/3,\, \lambda=0,\, \beta=1\). If you find values strongly deviating from these values you should question your analysis approach.
    +In the original work, \(\alpha=2/3,\, \lambda=0,\, \beta=1\). If you find values strongly deviating from these values you should question your analysis approach.
    [11]M.I. Larkin et al., Physica B: Condensed Matter 289-290, 153 (2000). -In the original work, \(\alpha=2/3,\, \lambda=0,\, \beta=1\). If you find values strongly deviating from these values you should question your analysis approach.
    - +
    [12]see memonot DKS ready.
    [12]see memonot DKS ready.
    +A. Yaouanc and P. Dalmas de Réotier “Muon Spin Rotation, Relaxation, and Resonance” Oxford Scientific Publication; +simplifying the original formulae by eliminating \(\Delta_{\rm eff}\) via the identity +\(\Delta_{\rm eff}^2 = (1+R_b^2)\Delta_0\).
    [13]D.R. Noakes and G.M. Kalvius, Phys. Rev. B 56, 2352 (1997); -A. Yaouanc and P. Dalmas de Réotier “Muon Spin Rotation, Relaxation, and Resonance” Oxford Scientific Publication; -simplifying the original formulae by eliminating \(\Delta_{\rm eff}\) via the identity -\(\Delta_{\rm eff}^2 = (1+R_b^2)\Delta_0\).
    - +
    [14]This function is explicit for \(\mu^-\)! Do not try to use it for \(\mu^+\)!
    [14]This function is explicit for \(\mu^-\)! Do not try to use it for \(\mu^+\)!
    @@ -986,36 +1159,36 @@ Maps allow exactly to deal with this difficulty. An example could be a temperature scan, where the parameters (asymmetry, depolarization rates, etc.) will depend on the temperature.

    In order to handle such situations, a mapping of parameters in the THEORY block is possible. That means, instead of a parameter number, -the mapping of the parameter is given. The definition of the mapping block is part of the RUN block and will be described there. +the mapping of the parameter is given. The definition of the mapping block is part of the RUN block and will be described there. For example

    -
    THEORY
    -asymmetry 2
    -simplExpo 3
    -TFieldCos map1 5
    +
    THEORY
    +asymmetry 2
    +simplExpo 3
    +TFieldCos map1 5
     
    -

    means that the phase parameter of TFieldCos will be mapped to RUN block, and hence every detector will have its individual phase.

    +

    means that the phase parameter of TFieldCos will be mapped to RUN block, and hence every detector will have its individual phase.

    Functions

    -

    Yet another useful feature is the possibility to define functions in the FUNCTIONS block. -Within the THEORY block these functions can be addressed as funX, where ‘X’ is the function number, e.g. fun2. +

    Yet another useful feature is the possibility to define functions in the FUNCTIONS block. +Within the THEORY block these functions can be addressed as funX, where ‘X’ is the function number, e.g. fun2. Whereas the theory is operating on the parameters and the time, functions currently can only operate on the parameters.

    User Functions

    -

    In the case complicated and not predefined functions are needed to fit data, musrfit offers the possibility to implement external functions -and introduce them to musrfit through the ROOT dictionary mechanism. The detailed rules these user-defined functions have to obey will be discussed -in the according section. Here only the syntax for the msr file is provided. To call a user function in the THEORY block the -keyword userFcn is used. It is followed by the name of the shared library which holds the C++ class where the function is implemented and the name of +

    In the case complicated and not predefined functions are needed to fit data, musrfit offers the possibility to implement external functions +and introduce them to musrfit through the ROOT dictionary mechanism. The detailed rules these user-defined functions have to obey will be discussed +in the according section. Here only the syntax for the msr file is provided. To call a user function in the THEORY block the +keyword userFcn is used. It is followed by the name of the shared library which holds the C++ class where the function is implemented and the name of the class. Finally, all parameters are given in the order needed by the class. Of course it is also possible to use mapped parameters or functions instead of specifying the parameters directly.

    A THEORY block including a user function may then look like

    -
    THEORY
    -asymmetry 1
    -userFcn libMyLibrary.so TMyFunction 2 3 4 map1 fun1
    -+
    -...
    +
    THEORY
    +asymmetry 1
    +userFcn libMyLibrary.so TMyFunction 2 3 4 map1 fun1
    ++
    +...
     
    @@ -1023,29 +1196,29 @@ userFcn libMyLibrary.so TMyFunction 2 3 4 map1 fun1

    The FUNCTIONS Block

    Here some auxiliary functions can be defined. These functions can currently only operate on the defined parameters, and some meta information from the data files. -They can be used in the THEORY block and for three specific cases in the RUN block (norm, alpha, and beta). +They can be used in the THEORY block and for three specific cases in the RUN block (norm, alpha, and beta). Supported is the use of basic arithmetic:

    -
    \(+\)
    +
    \(+\)
    Addition
    -
    \(-\)
    +
    \(-\)
    Subtraction
    -
    \(*\)
    +
    \(*\)
    Multiplication
    -
    \(/\)
    +
    \(/\)
    Division
    -
    \(()\)
    +
    \(()\)
    The standard use of parentheses

    The following functions are built-in and can be used in a function definition: cos(), sin(), tan(), acos(), asin(), atan(), cosh(), sinh(), tanh(), acosh(), asinh(), atanh(), exp(), log(), ln(), sqrt(), pow(base, exponent).

    Furthermore, some constants are predefined and might also be used:

      -
    • gamma_mu = \(\gamma_\mu/(2\pi) = 0.0135538817~\mathrm{MHz/G}\)
    • -
    • pi = \(\pi = 3.14159265358979323846\)
    • +
    • gamma_mu = \(\gamma_\mu/(2\pi) = 0.0135538817~\mathrm{MHz/G}\)
    • +
    • pi = \(\pi = 3.14159265358979323846\)
    -

    The fit parameters are accessed either directly through parX, where ‘X’ is the number of the parameter in the FITPARAMETER block, -e.g. par5 or through a mapping with mapY, where ‘Y’ specifies the mapping number in the RUN block as explained below.

    +

    The fit parameters are accessed either directly through parX, where ‘X’ is the number of the parameter in the FITPARAMETER block, +e.g. par5 or through a mapping with mapY, where ‘Y’ specifies the mapping number in the RUN block as explained below.

    The available meta information form the data files are:

    @@ -1063,7 +1236,7 @@ acosh(), asinh(), atanh(), exp(), log(), ln(), sqrt(), pow(base, exponent) - + @@ -1077,138 +1250,138 @@ acosh(), asinh(), atanh(), exp(), log(), ln(), sqrt(), pow(base, exponent)
    Field B or b (G)  
    Energy En or en
    -

    The defined functions are denoted as funX, where ‘X’ is the function number, i.e. fun1, fun2, etc. and have to be placed separately on one -line each. Afterwards they can be used in the THEORY block.

    -

    It follows an example to illustrate the usage of functions in the THEORY block. The total asymmetry of a signal +

    The defined functions are denoted as funX, where ‘X’ is the function number, i.e. fun1, fun2, etc. and have to be placed separately on one +line each. Afterwards they can be used in the THEORY block.

    +

    It follows an example to illustrate the usage of functions in the THEORY block. The total asymmetry of a signal consisting of two parts should be a fit parameter. The fraction of each of the parts will then be expressed as a function of the total asymmetry.

    -
    FITPARAMETER
    -#       No   Name      Value     Step       Pos_Error    Boundaries
    -        1   alpha     1          0.02       none         0       1.8
    -        2   phase     15         1.0        none
    -        3   asy       0.2542     0.004713   none         0       0.33
    -        4   rate1     15         1.0        none         0       none
    -        5   frac1     0.33       0.0379     none         0       1
    -        6   rate2     0.13       0.00579    none         0       10
    +
    FITPARAMETER
    +#       No   Name      Value     Step       Pos_Error    Boundaries
    +        1   alpha     1          0.02       none         0       1.8
    +        2   phase     15         1.0        none
    +        3   asy       0.2542     0.004713   none         0       0.33
    +        4   rate1     15         1.0        none         0       none
    +        5   frac1     0.33       0.0379     none         0       1
    +        6   rate2     0.13       0.00579    none         0       10
     
    -###############################################################
    -THEORY
    -asymmetry   fun1
    -simplExpo      4                   (rate)
    -+
    -asymmetry   fun2
    -simplExpo      6                   (rate)
    +###############################################################
    +THEORY
    +asymmetry   fun1
    +simplExpo      4                   (rate)
    ++
    +asymmetry   fun2
    +simplExpo      6                   (rate)
     
    -###############################################################
    -FUNCTIONS
    -fun1 = par3 * par5
    -fun2 = par3 * ( 1.0 - par5 )
    +###############################################################
    +FUNCTIONS
    +fun1 = par3 * par5
    +fun2 = par3 * ( 1.0 - par5 )
     

    The GLOBAL Block

    -

    The GLOBAL block is used to collect data which otherwise need to be specified in every single run entry of the RUN block. +

    The GLOBAL block is used to collect data which otherwise need to be specified in every single run entry of the RUN block. Therefore, this block is only present to potentially shorten the msr file and to ease the handling for the user. The logic will by like that:

      -
    1. check if the property is found in the RUN block.
    2. -
    3. if not present in the RUN block, check whether it is present in the GLOBAL block.
    4. +
    5. check if the property is found in the RUN block.
    6. +
    7. if not present in the RUN block, check whether it is present in the GLOBAL block.
    8. if still not found, try the data file.
    9. if still not found, either try to estimate it, or fire an error message.
    -

    This means that an entry present in the RUN block will overwrite a setting from the GLOBAL block.

    +

    This means that an entry present in the RUN block will overwrite a setting from the GLOBAL block.

    Currently the supported GLOBAL block entries are:

      -
    • fittype
    • -
    • data
    • -
    • t0
    • -
    • addt0
    • -
    • fit
    • -
    • rrf_freq for fittype 1, 3
    • -
    • rrf_packing for fittype 1, 3
    • -
    • rrf_phase for fittype 1, 3
    • -
    • packing for fittype 0, 2, 4, 5
    • +
    • fittype
    • +
    • data
    • +
    • t0
    • +
    • addt0
    • +
    • fit
    • +
    • rrf_freq for fittype 1, 3
    • +
    • rrf_packing for fittype 1, 3
    • +
    • rrf_phase for fittype 1, 3
    • +
    • packing for fittype 0, 2, 4, 5
    -

    For a detailed discussion of these entries see the section RUN block.

    +

    For a detailed discussion of these entries see the section RUN block.

    The single histo RRF fit and asymmetry RRF fit related entries (fittype 1 and 3 only) have the following syntax:

    rrf_freq

    Defines the RRF frequency. The exact syntax is rrf_freq <value> <unit> where <value> is the value, and <unit> can be MHz, Mc, and T. An example:

    -
    rrf_freq 7.2 T
    +
    rrf_freq 7.2 T
     
    rrf_packing

    for fittype 1 and fittype 3 rather than giving packing, rrf_packing <pack> has to be provided, e.g.

    -
    rrf_packing 150
    +
    rrf_packing 150
     
    rrf_phase

    an optional additional RRF phase can be provided (if not provided, the RRF phase will be 0.0). Syntax: rrf_phase <phase>, where the value <phase> is given in degree. Example:

    -
    rrf_phase 45
    +
    rrf_phase 45
     

    An example snippet with, and without GLOBAL section.

    With GLOBAL block:

    -
    ...
    -###############################################################
    -GLOBAL
    -fittype         0         (single histogram fit)
    -fit             0.0005  10
    -packing         5
    +
    ...
    +###############################################################
    +GLOBAL
    +fittype         0         (single histogram fit)
    +fit             0.0005  10
    +packing         5
     
    -###############################################################
    -RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    -map             5    6    7    0    0    0    0    0    0    0    0
    -norm            8
    -backgr.fit      9
    -forward         2
    -data            20120   409500
    -t0              20108.0
    -#--------------------------------------------------------------
    -RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    -map            10   11   12    0    0    0    0    0    0    0    0
    -norm            13
    -backgr.fit      14
    -forward         3
    -data            20111   409500
    -t0              20088.0
    -#--------------------------------------------------------------
    -RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    -...
    +###############################################################
    +RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    +map             5    6    7    0    0    0    0    0    0    0    0
    +norm            8
    +backgr.fit      9
    +forward         2
    +data            20120   409500
    +t0              20108.0
    +#--------------------------------------------------------------
    +RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    +map            10   11   12    0    0    0    0    0    0    0    0
    +norm            13
    +backgr.fit      14
    +forward         3
    +data            20111   409500
    +t0              20088.0
    +#--------------------------------------------------------------
    +RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    +...
     

    Without GLOBAL block:

    -
    ...
    -###############################################################
    -RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    -fittype         0         (single histogram fit)
    -map             5    6    7    0    0    0    0    0    0    0    0
    -norm            8
    -backgr.fit      9
    -forward         2
    -data            20120   409500
    -t0              20108.0
    -fit             0.0005  10
    -packing         5
    -#--------------------------------------------------------------
    -RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    -fittype         0         (single histogram fit)
    -map            10   11   12    0    0    0    0    0    0    0    0
    -norm            13
    -backgr.fit      14
    -forward         3
    -data            20111   409500
    -t0              20088.0
    -fit             0.0005  10
    -packing         5
    -#--------------------------------------------------------------
    -RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    -fittype         0         (single histogram fit)
    -... and many more detectors here ...
    +
    ...
    +###############################################################
    +RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    +fittype         0         (single histogram fit)
    +map             5    6    7    0    0    0    0    0    0    0    0
    +norm            8
    +backgr.fit      9
    +forward         2
    +data            20120   409500
    +t0              20108.0
    +fit             0.0005  10
    +packing         5
    +#--------------------------------------------------------------
    +RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    +fittype         0         (single histogram fit)
    +map            10   11   12    0    0    0    0    0    0    0    0
    +norm            13
    +backgr.fit      14
    +forward         3
    +data            20111   409500
    +t0              20088.0
    +fit             0.0005  10
    +packing         5
    +#--------------------------------------------------------------
    +RUN data/tdc_hifi_2014_00153 PIE3 PSI PSI-MDU   (name beamline institute data-file-format)
    +fittype         0         (single histogram fit)
    +... and many more detectors here ...
     
    @@ -1217,7 +1390,7 @@ fittype 0 (single histogram fit)

    The RUN block is used to collect the data needed for a particular run to be fitted. This includes the run name, fit type, data format, etc. The RUN block is slightly differently organized than the other blocks. The information is collected via labels followed by the information. Each run to be fitted has its own RUN block. A RUN block starts with a run-file line which has the structure

    -
    RUN <run_file_name> <beamline> <facility> <file_format>
    +
    RUN <run_file_name> <beamline> <facility> <file_format>
     

    where

    @@ -1252,58 +1425,58 @@ a short digression is needed.

    Where is musrfit looking for data files? There is a specific order how this is done:

    1. Check if the file is found in the current directory
    2. -
    3. Check if the path (or multiple paths) was (were) given in the XML startup file.
    4. -
    5. Check if there is a system variable MUSRFULLDATAPATH. This system variable can contain multiple search paths separated by colons, e.g.
    6. +
    7. Check if the path (or multiple paths) was (were) given in the XML startup file.
    8. +
    9. Check if there is a system variable MUSRFULLDATAPATH. This system variable can contain multiple search paths separated by colons, e.g.
    -
    $ export MUSRFULLDATAPATH=/mnt/data/nemu/wkm/:/mnt/data/nemu/his/:/afs/psi.ch/user/s/smith/
    +
    $ export MUSRFULLDATAPATH=/mnt/data/nemu/wkm/:/mnt/data/nemu/his/:/afs/psi.ch/user/s/smith/
     
      -
    1. Construct the search path from the RUN-block information in the following way: Based on the RUN line in the RUN block, default paths will be generated, e.g. for

      -
      RUN 2007/lem07_his_2018 MUE4 PSI ROOT-NPP
      +
    2. Construct the search path from the RUN-block information in the following way: Based on the RUN line in the RUN block, default paths will be generated, e.g. for

      +
      RUN 2007/lem07_his_2018 MUE4 PSI ROOT-NPP
       

      the generated search path will look like

      -
      musrFullDataPathToken/DATA/Facility/Beamline/runName.ext
      +
      musrFullDataPathToken/DATA/Facility/Beamline/runName.ext
       
      -

      where musrFullDataPathToken is extracted from the MUSRFULLDATAPATH token by token, for the above example this might lead to the path

      +

      where musrFullDataPathToken is extracted from the MUSRFULLDATAPATH token by token, for the above example this might lead to the path

    -
    /afs/psi.ch/user/s/smith/DATA/PSI/MUE4/2007/lem07_his_2018.root
    +
    /afs/psi.ch/user/s/smith/DATA/PSI/MUE4/2007/lem07_his_2018.root
     

    Here are some valid examples for the first line of a RUN block:

    -
    RUN 2007/lem07_his_2018 MUE4 PSI ROOT-NPP
    -RUN 2007/lem07_2018_rb1_npp MUE4 PSI WKM
    -RUN d2007/deltat_pta_gps_2650 PIM3 PSI PSI-BIN
    -RUN d2010/tdc/deltat_tdc_gpd_8472 MUE1 PSI PSI-BIN
    -RUN beautiful-data MUE4 PSI DB
    +
    RUN 2007/lem07_his_2018 MUE4 PSI ROOT-NPP
    +RUN 2007/lem07_2018_rb1_npp MUE4 PSI WKM
    +RUN d2007/deltat_pta_gps_2650 PIM3 PSI PSI-BIN
    +RUN d2010/tdc/deltat_tdc_gpd_8472 MUE1 PSI PSI-BIN
    +RUN beautiful-data MUE4 PSI DB
     

    After this short digression back to the RUN-block description.

    In order to describe the operations needed for fitting and plotting, quite some information are needed. These information are following the RUN statement and are listed below. Depending on the fit type these information vary and hence it is indicated for which fit/plot type the information is applicable

    ADDRUN <run_file_name> <beamline> <facility> <file_format> (optional)
    -

    If an ADDRUN is just following after a RUN statement, these runs will be added. More than one ADDRUN statements are possible, i.e. adding up as many runs as wished. It is also possible to add runs with different file formats. If the t0’s are given in the data files, the ADDRUN statement is all what is needed, otherwise just add the t0’s with the addt0 statement.

    -

    For a Single Histogram Fit or a MuMinus Fit it will be

    -
    addt0 t0AddRun1
    -addt0 t0AddRun2
    -etc.
    +

    If an ADDRUN is just following after a RUN statement, these runs will be added. More than one ADDRUN statements are possible, i.e. adding up as many runs as wished. It is also possible to add runs with different file formats. If the t0’s are given in the data files, the ADDRUN statement is all what is needed, otherwise just add the t0’s with the addt0 statement.

    +

    For a Single Histogram Fit or a MuMinus Fit it will be

    +
    addt0 t0AddRun1
    +addt0 t0AddRun2
    +etc.
     
    -

    For an Asymmetry Fit this reads

    -
    addt0 t0AddRun1Forward t0AddRun1Backward
    -addt0 t0AddRun2Forward t0AddRun2Backward
    -etc.
    +

    For an Asymmetry Fit this reads

    +
    addt0 t0AddRun1Forward t0AddRun1Backward
    +addt0 t0AddRun2Forward t0AddRun2Backward
    +etc.
     
    -

    How will the background and data ranges be handled in this situation? First, the ADDRUN’s will be shifted in time such that all the t0’s have the same channel/bin number. Subsequently, the runs will be added. The background/data range is applied to this summed up new histogram.

    -

    ADDRUN is not available for the fit type Non-muSR Fit.

    +

    How will the background and data ranges be handled in this situation? First, the ADDRUN’s will be shifted in time such that all the t0’s have the same channel/bin number. Subsequently, the runs will be added. The background/data range is applied to this summed up new histogram.

    +

    ADDRUN is not available for the fit type Non-muSR Fit.

    @@ -1325,62 +1498,62 @@ etc.
    8
    Non-μSR Fit
    -

    The description of these fit types can be found in the corresponding section. Example:

    -
    fittype 0
    +

    The description of these fit types can be found in the corresponding section. Example:

    +
    fittype 0
     
    alpha, beta (fit type 2, 3, 5)
    -

    These parameters are used to correct the asymmetry for different detector efficiencies, solid angles and initial asymmetries. They are defined as \(\alpha = N_{0,b}/N_{0,f}\) and \(\beta = A_{0,b}/A_{0,f}\). If the parameters are not specified in the RUN block, for each one the value of 1 is assumed (for fittype 5, alpha is estimated from the ratio of \(\sum_i \left( N_{\mathrm{bp}}(i)+N_{\mathrm{bm}}(i) \right)\) and \(\sum_i \left( N_{\mathrm{fp}}(i)+N_{\mathrm{fm}}(i) \right)\)). Both, alpha as well as beta can be expressed through a function. Example for alpha with fit parameter number 1:

    -
    alpha 1
    +

    These parameters are used to correct the asymmetry for different detector efficiencies, solid angles and initial asymmetries. They are defined as \(\alpha = N_{0,b}/N_{0,f}\) and \(\beta = A_{0,b}/A_{0,f}\). If the parameters are not specified in the RUN block, for each one the value of 1 is assumed (for fittype 5, alpha is estimated from the ratio of \(\sum_i \left( N_{\mathrm{bp}}(i)+N_{\mathrm{bm}}(i) \right)\) and \(\sum_i \left( N_{\mathrm{fp}}(i)+N_{\mathrm{fm}}(i) \right)\)). Both, alpha as well as beta can be expressed through a function. Example for alpha with fit parameter number 1:

    +
    alpha 1
     
    -

    Example for an alpha defined via function number 1:

    -
    alpha fun1
    +

    Example for an alpha defined via function number 1:

    +
    alpha fun1
     
    norm (fit type 0)
    -

    Number of the fit parameter that represents the normalization constant \(N_0\) of the histogram; the value of this parameter is given either per nanosecond or per bin (see below). -It is possible to substitute the parameter number by a function, for instance to relate \(N_0\)‘s of different histograms through an \(\alpha\) -parameter. Example for a norm defined by fit parameter number 12:

    -
    norm 12
    +

    Number of the fit parameter that represents the normalization constant \(N_0\) of the histogram; the value of this parameter is given either per nanosecond or per bin (see below). +It is possible to substitute the parameter number by a function, for instance to relate \(N_0\)‘s of different histograms through an \(\alpha\) +parameter. Example for a norm defined by fit parameter number 12:

    +
    norm 12
     
    -

    Example for a norm defined via function number 3:

    -
    norm fun3
    +

    Example for a norm defined via function number 3:

    +
    norm fun3
     
    backgr.fit (fit type 0)
    -
    Parameter number specifying the constant background in a histogram. Its value is given either per nanosecond or per bin (see below). If this keyword is present, +
    Parameter number specifying the constant background in a histogram. Its value is given either per nanosecond or per bin (see below). If this keyword is present, any information on a background line are ignored.
    lifetime (fit type 0)
    -
    Fit parameter representing the lifetime of the muon. If it is not specified the value \(\tau_\mu=2.197019~ \mu\mathrm{s}\) is used in the calculations.
    +
    Fit parameter representing the lifetime of the muon. If it is not specified the value \(\tau_\mu=2.197019~ \mu\mathrm{s}\) is used in the calculations.
    lifetimecorrection (fit type 0) obsolete
    -
    Does not accept any arguments. If present, the output in musrview is corrected for the exponential decay of the muon. This item is obsolete in the RUN block -and will be transferred to the PLOT block, which allows switching between histogram view and asymmetry view much quicker.
    +
    Does not accept any arguments. If present, the output in musrview is corrected for the exponential decay of the muon. This item is obsolete in the RUN block +and will be transferred to the PLOT block, which allows switching between histogram view and asymmetry view much quicker.
    map
    On this line the mapping of run-dependent parameters is done. Parameter numbers given here may be accessed through map1, map2, etc. in the -THEORY and FUNCTIONS blocks (see also maps). The first ten maps +THEORY and FUNCTIONS blocks (see also maps). The first ten maps are always present and have the value 0 if not used; however, the total number of maps is not restricted!
    forward (fit type 0, 1, 4)

    Number of the histogram in the data file to be processed. If histograms shall be grouped, all the numbers which shall be grouped. Examples:

    -
    forward 3       # no grouping, take histogram number 3
    -forward 1 2     # group histogram number 1 and 2
    -forward 1-10 12 # group histograms with numbers from 1 to 10 and additionally histogram 12
    +
    forward 3       # no grouping, take histogram number 3
    +forward 1 2     # group histogram number 1 and 2
    +forward 1-10 12 # group histograms with numbers from 1 to 10 and additionally histogram 12
     
    @@ -1388,37 +1561,37 @@ forward 1-10 12 # group histograms with numbers from 1 to 10 and additionally hi
    forward, backward (fit types 2, 3)

    Numbers of the histograms in the data file that should be taken to calculate the asymmetry. If histograms shall be grouped, all the numbers which shall be grouped. Examples:

    -
    # build forward/backward asymmetry with histogram 1 and 3
    -forward  1
    -backward 3
    -# build forward/backward asymmetry with groupings 1+2+3 and 7+8+9
    -forward   1 2 3
    -backward  7 8 9
    -# build forward/backward asymmetry with groupings 1+2+3 and 7+8+9 (alternative notation)
    -forward   1-3
    -backward  7-9
    +
    # build forward/backward asymmetry with histogram 1 and 3
    +forward  1
    +backward 3
    +# build forward/backward asymmetry with groupings 1+2+3 and 7+8+9
    +forward   1 2 3
    +backward  7 8 9
    +# build forward/backward asymmetry with groupings 1+2+3 and 7+8+9 (alternative notation)
    +forward   1-3
    +backward  7-9
     
    forward, backward (fit type 5)

    Numbers of the histograms in the data file that should be taken to calculate the asymmetry. Two forward and backward histograms should be given indicationg positive and negative helicities. The asymmetry from opposite helicities will be subtracted. Examples:

    -
    # build forward/backward asymmetry with histogram 1 and 3 then subtract asymmetry built with histograms 2 and 4
    -forward  1 2
    -backward 3 4
    +
    # build forward/backward asymmetry with histogram 1 and 3 then subtract asymmetry built with histograms 2 and 4
    +forward  1 2
    +backward 3 4
     
    backgr.fix (fit types 0, 1, 2, 3, 5)
    -
    A fixed constant background in counts per nanosecond or per bin (see below) may be given at this point. -The background is specified for all histograms in the order \(B_f B_b [B_r B_l]\). If this keyword is present, any information on a background line is ignored.
    +
    A fixed constant background in counts per nanosecond or per bin (see below) may be given at this point. +The background is specified for all histograms in the order \(B_f B_b [B_r B_l]\). If this keyword is present, any information on a background line is ignored.
    background (fit type 0, 1)

    The numbers of the first and the last channel of an interval from which the constant background should be calculated are specified here. In case histograms are being grouped, the specified channels are interpreted with respect to the first histogram. Example:

    -
    background  100  18000
    +
    background  100  18000
     
    @@ -1426,9 +1599,9 @@ In case histograms are being grouped, the specified channels are interpreted wit
    background (fit types 2, 3, 5)

    The numbers of the first and the last channel of an interval from which the constant background should be calculated are specified here. -For all the histograms this is done together in the following order: \(k_{f,\rm first} k_{f,\rm last} k_{b,\rm first} k_{b, \rm last} [k_{r,\rm first} k_{r,\rm last} k_{l,\rm first} k_{l,\rm last}]\). +For all the histograms this is done together in the following order: \(k_{f,\rm first} k_{f,\rm last} k_{b,\rm first} k_{b, \rm last} [k_{r,\rm first} k_{r,\rm last} k_{l,\rm first} k_{l,\rm last}]\). In case histograms are being grouped, the specified channels are interpreted with respect to the first histograms. Example:

    -
    background  61  184   57  145
    +
    background  61  184   57  145
     
    @@ -1437,8 +1610,8 @@ In case histograms are being grouped, the specified channels are interpreted wit
    data (fit type 0, 1, 4)

    The numbers of the first and the last channel of an interval from which the data is taken are specified here. In case histograms are being grouped, the specified channels are interpreted with respect to the first histogram. -Typically these channels are referred to as first good bin / last good bin (fgb/lgb). Example:

    -
    data  165   7965
    +Typically these channels are referred to as first good bin / last good bin (fgb/lgb). Example:

    +
    data  165   7965
     
    @@ -1447,9 +1620,9 @@ Typically these channels are referred to as data (fit type 2, 3, 5)

    The numbers of the first and the last channel of an interval from which the data is taken are specified here. Typically these channels are referred to as first good bin / last good bin (fgb/lgb). For all the histograms this is -done together in the following order: \(k_{f,\rm first} k_{f,\rm last} k_{b,\rm first} k_{b, \rm last} [k_{r,\rm first} k_{r,\rm last} k_{l,\rm first} k_{l,\rm last}]\). +done together in the following order: \(k_{f,\rm first} k_{f,\rm last} k_{b,\rm first} k_{b, \rm last} [k_{r,\rm first} k_{r,\rm last} k_{l,\rm first} k_{l,\rm last}]\). In case histograms are being grouped, the specified channels are interpreted with respect to the first histograms. Example:

    -
    data  207   7994    167   8009
    +
    data  207   7994    167   8009
     
    @@ -1457,32 +1630,32 @@ In case histograms are being grouped, the specified channels are interpreted wit
    t0 (fit type 0, 1, 4)

    The number of the time-zero channel of the histogram. Example:

    -
    t0 3419        # t0 channel = 3419
    -t0 3419 3434   # t0 channels for groupings: forward f1 f2. 3419 t0 for f1, 3434 t0 for f2.
    +
    t0 3419        # t0 channel = 3419
    +t0 3419 3434   # t0 channels for groupings: forward f1 f2. 3419 t0 for f1, 3434 t0 for f2.
     
    t0 (fit type 2, 3, 5)
    -

    The numbers of time-zero channels of the histograms in the order \(t_{0,f} t_{0,b}\). For fit type 5, the time-zero is the channel of the start of beam pulse. Example:

    -
    t0 3419 3418           # t0 channels: forward (3419), backward (3418)
    -t0 3419 3418 3417 3416 # t0 channels (assuming forward f1 f2, backward b1 b2): forward (3419, f1), backward (3418, b1); forward (3417, f2), backward (3416, b2)
    +

    The numbers of time-zero channels of the histograms in the order \(t_{0,f} t_{0,b}\). For fit type 5, the time-zero is the channel of the start of beam pulse. Example:

    +
    t0 3419 3418           # t0 channels: forward (3419), backward (3418)
    +t0 3419 3418 3417 3416 # t0 channels (assuming forward f1 f2, backward b1 b2): forward (3419, f1), backward (3418, b1); forward (3417, f2), backward (3416, b2)
     
    addt0 (fit type 0, 1, 4)
    -
    The number of the time-zero channel of the histogram. If grouping of histograms is present (see forward) the -same syntax as for t0 applies. If one addt0 is given, the total number of addt0’s needs to be equal to -the total number of ADDRUN‘s!
    +
    The number of the time-zero channel of the histogram. If grouping of histograms is present (see forward) the +same syntax as for t0 applies. If one addt0 is given, the total number of addt0’s needs to be equal to +the total number of ADDRUN’s!
    addt0 (fit type 2, 3, 5)
    -
    The numbers of time-zero channels of the histograms in the order \(t_{0,f} t_{0,b} [t_{0,r} t_{0,l}]\). -If grouping of histograms is present (see forward) the same syntax as for t0 applies. -If one addt0 is given, the total number of addt0’s needs to be equal to the total number of ADDRUN‘s!
    +
    The numbers of time-zero channels of the histograms in the order \(t_{0,f} t_{0,b} [t_{0,r} t_{0,l}]\). +If grouping of histograms is present (see forward) the same syntax as for t0 applies. +If one addt0 is given, the total number of addt0’s needs to be equal to the total number of ADDRUN’s!
    xy-data (fit type 8)
    @@ -1497,19 +1670,19 @@ starting and end times are given in micro-seconds. For the non-μSR fit type 8 t fitting range are given in the units of the x data.

    In case the fit range specified here is larger than the data range (in any direction), the data range will be used as fit range.

    An example for a μSR fit:

    -
    fit 0.1 8.5
    +
    fit 0.1 8.5
     

    Which means that the fitting window will span from 0.1 to 8.5 micro-seconds.

    Another possibility for the μSR fits is to give the fit range in bins, rather than time. The syntax is then:

    -
    fit fgb+<n0> lgb-<n1>,
    +
    fit fgb+<n0> lgb-<n1>,
     
    -

    where fgb and lgb are label tags which refer to the ‘first good bin’ and the ‘last good bin’ defined -either in the data tag of the run block, data file, are estimated based on T0. -<n0> and <n1> are offsets (given in bins) allowing to change the fit window compared to the data window. +

    where fgb and lgb are label tags which refer to the ‘first good bin’ and the ‘last good bin’ defined +either in the data tag of the run block, data file, are estimated based on T0. +<n0> and <n1> are offsets (given in bins) allowing to change the fit window compared to the data window. An example:

    -
    fit fgb+150 lgb-1332
    +
    fit fgb+150 lgb-1332
     
    @@ -1522,9 +1695,9 @@ For the single histogram RRF fit (fittype 1) and asymmetry RRF fit (fittype 3) t

    The COMMANDS Block

    -

    The COMMANDS block is used to specify the commands which are passed from musrfit to MINUIT2. The supported commands -after the COMMANDS keyword are listed in the two tables below (Minuit2 Command Overview and DKS Command Overview) -and further described in musrfit Command Block Details.

    +

    The COMMANDS block is used to specify the commands which are passed from musrfit to MINUIT2. The supported commands +after the COMMANDS keyword are listed in the two tables below (Minuit2 Command Overview and DKS Command Overview) +and further described in musrfit Command Block Details.

    Minuit2 Command Overview

    @@ -1573,29 +1746,29 @@ correlations and non-linearities. - - +COVARIANCE MATRIX, +CORRELATION COEFFICIENTS, etc. + - + - + - +\(\chi^2\). + +SCAN needs to be followed by +the command MNPLOT. +CONTOURS needs to be followed +by the command MNPLOT. - +SCAN and CONTOURS. + - +\(\mu^+\). + - +\(\mu^+\). + - + - + - + - - +
    [15]
    SAVEWrites the MINUIT2.OUTPUT and -MINUIT2.root files which +Writes the MINUIT2.OUTPUT and +MINUIT2.root files which contained detailed information about the fit, like the -COVARIANCE MATRIX, -CORRELATION COEFFICIENTS, etc.  
    SET BATCH Obsolate. Only present for backward compatibilty.  
    END RETURN Obsolete. Only present for backward compatibility.  
    MAX_LIKELIHOOD If present, use max. log likelihood rather than the default -\(\chi^2\).see musrfit Command Block Detailssee musrfit Command Block Details
    PRINT_LEVEL Prints more or less messages to the @@ -1604,65 +1777,65 @@ stdout. Allowed values: 0-3
    SCAN A command line based option, which -allows to scan \(\chi^2\) by +allows to scan \(\chi^2\) by vary a single parameter. -SCAN needs to be followed by -the command MNPLOT. [15]
    CONTOURS A command line based option. It allows to plot the contour of parX vs parY. -CONTOURS needs to be followed -by the command MNPLOT. [15]
    MNPLOT Helper command for the commands -SCAN and CONTOURS.  
    FIX Allows to fix parameters on the command level. It can help to guide a complicated fit (e.g. muonium -\(\mu^+\).see musrfit Command Block Detailssee musrfit Command Block Details
    RELEASE Allows to release parameters on the command level which have been fixed before. It can help to guide a complicated fit (e.g. muonium -\(\mu^+\).see musrfit Command Block Detailssee musrfit Command Block Details
    RESTORE Releases all fixed parameters.see musrfit Command Block Detailssee musrfit Command Block Details
    FIT_RANGE Allows to change the fit range on the command level. This might be helpful in conjunction with multiple signals in the spectrum.see musrfit Command Block Detailssee musrfit Command Block Details
    SCALE_N0_BKG For histogram fits only. If set true (default), it will -scale \(N_0\) to 1/ns, -Otherwise \(N_0\) is given in +scale \(N_0\) to 1/ns, +Otherwise \(N_0\) is given in counts.see musrfit Command Block Detailssee musrfit Command Block Details
    SECTORAllows to output \(\chi^2\) or +Allows to output \(\chi^2\) or maxLH values for a sub-range of the fitted time range. Used for statistical analysis only.see musrfit Command Block Detailssee musrfit Command Block Details
    @@ -1723,118 +1896,118 @@ powerful AMD graphics card in place. -
    [16]Standard musrfit as well as DKS support OpenMP. +
    [16]Standard musrfit as well as DKS support OpenMP. It allows to use all your threads of your CPU(s) during the minimization.
    - +
    [17]This is only supported for the DKS version of musrfit. For details about -CUDA see NVIDIA.
    [17]This is only supported for the DKS version of musrfit. For details about +CUDA see NVIDIA.
    - +
    [18](1, 2) This is only supported for the DKS version of musrfit. For details about -OpenCL see the Khronos Group.
    [18](1, 2) This is only supported for the DKS version of musrfit. For details about +OpenCL see the Khronos Group.
    -

    musrfit Command Block Details

    +

    musrfit Command Block Details

    A standard COMMANDS block then looks like this:

    -
    COMMANDS
    +
    COMMANDS
     MINIMIZE
     MINOS
     SAVE
     

    Additional to the commands listed above also the command MAX_LIKELIHOOD is valid. This keyword can be placed anywhere in -the block and switches from the default \(\chi^2\) minimization to the log likelihood maximization which can be advantageous +the block and switches from the default \(\chi^2\) minimization to the log likelihood maximization which can be advantageous if one is dealing with low-statistics data.

    -

    Furthermore, it is possible to call the MINUIT2 methods SCAN and CONTOURS together with MNPLOT. +

    Furthermore, it is possible to call the MINUIT2 methods SCAN and CONTOURS together with MNPLOT. Exemplary invocations are as follows:

    -
    COMMANDS
    -SCAN 7
    -MNPLOT
    +
    COMMANDS
    +SCAN 7
    +MNPLOT
     

    or

    -
    COMMANDS
    -MINIMIZE
    -CONTOURS 8 9
    -MNPLOT
    -SAVE
    +
    COMMANDS
    +MINIMIZE
    +CONTOURS 8 9
    +MNPLOT
    +SAVE
     
    -

    Sometimes it is necessary to guide MINUIT2 to the global optimum. For this purpose it is useful to have the commands +

    Sometimes it is necessary to guide MINUIT2 to the global optimum. For this purpose it is useful to have the commands FIX <list_of_param_to_be_fixed>, RELEASE <list_of_param_to_be_fixed>, and RESTORE at hand. <list_of_param_to_be_fixed> is a list of the parameters to be fixed/released. It is a space- or comma-separated list of either parameter numbers and/or parameter names. RESTORE releases all the fixed parameters. A typical example could look like:

    -
    COMMANDS
    -FIX Freq1, Freq2
    -MINIMIZE
    -RESTORE
    -MINIMIZE
    -MINOS
    -SAVE
    +
    COMMANDS
    +FIX Freq1, Freq2
    +MINIMIZE
    +RESTORE
    +MINIMIZE
    +MINOS
    +SAVE
     

    It is important to understand that before MINOS is called, all the fixed parameters need to be released and another minimizer command (MINIMIZE, MIGRAD, or SIMPLEX) needs to be in place, otherwise musrfit will assume that the still fixed parameters have to be handled as constant parameters, i.e. setting the <step> value of the parameter to zero.

    For even more complex fitting the additional command FIT_RANGE [RESET | tstart tend | ts1 te1 -ts2 te2 ... tsn ten ] is provided. It allows to change the fit range during different iterations. +ts2 te2 … tsn ten ] is provided. It allows to change the fit range during different iterations. The command FIT_RANGE tstart tend changes the current fit range for all the runs present in the msr file. -FIT_RANGE RESET will restore to the original fit ranges as provided in the RUN block. If for each run of the +FIT_RANGE RESET will restore to the original fit ranges as provided in the RUN block. If for each run of the msr file an individual fit range should be used, the third option applies. Here n has to correspond to the number of runs in the RUN block.

    As for the run block, there is a 2nd flavor how the FIT_RANGE can be changed, namely giving the fit range in bins, -i.e. FIT_RANGE [ RESET | fgb+<n0> lgb-<n1> | fgb+<n00> lgb-<n01> fgb+<n10> lgb-<n11> ... fgb+<nN0> lgb-<nN1> ] where N is the number of available run blocks. -The idea is inline with the above syntax and the syntax describe for the fit range (fit) of the RUN block.

    +i.e. FIT_RANGE [ RESET | fgb+<n0> lgb-<n1> | fgb+<n00> lgb-<n01> fgb+<n10> lgb-<n11> … fgb+<nN0> lgb-<nN1> ] where N is the number of available run blocks. +The idea is inline with the above syntax and the syntax describe for the fit range (fit) of the RUN block.

    A typical example could look like:

    -
    COMMANDS
    -FIT_RANGE 0.0 0.8
    -MINIMIZE
    -FIT_RANGE RESET
    -MINIMIZE
    -MINOS
    -SAVE
    +
    COMMANDS
    +FIT_RANGE 0.0 0.8
    +MINIMIZE
    +FIT_RANGE RESET
    +MINIMIZE
    +MINOS
    +SAVE
     

    or

    -
    COMMANDS
    -FIT_RANGE fgb+15 lgb-1332 fgb+17 lgb-1330
    -MINIMIZE
    -FIT_RANGE RESET
    -MINIMIZE
    -MINOS
    -SAVE
    +
    COMMANDS
    +FIT_RANGE fgb+15 lgb-1332 fgb+17 lgb-1330
    +MINIMIZE
    +FIT_RANGE RESET
    +MINIMIZE
    +MINOS
    +SAVE
     

    The command SCALE_N0_BKG TRUE | FALSE is only used in conjunction with single-histogram fits. The default is SCALE_N0_BKG TRUE which will result in a scaling of N(t) such that it is given in ns-1, whereas with SCALE_N0_BKG FALSE no scaling is performed and N(t) will be given in bin-1. If the command is not present at all, it will be interpreted as if SCALE_N0_BKG TRUE was present.

    -

    For “debug” purposes it is possible to force MINUIT2 to print out additional information. The COMMAND block command is PRINT_LEVEL <n>, +

    For “debug” purposes it is possible to force MINUIT2 to print out additional information. The COMMAND block command is PRINT_LEVEL <n>, where <n> can have the values 0,1,2, or 3. A typical example could look like:

    -
    COMMANDS
    -MIGRAD
    -SAVE
    -PRINT_LEVEL 2
    -MINOS
    -SAVE
    +
    COMMANDS
    +MIGRAD
    +SAVE
    +PRINT_LEVEL 2
    +MINOS
    +SAVE
     

    Here the MINOS command will print out lot of additional information to the standard output. Notice there are 2 SAVE commands here. This will write the result of MIGRAD to the MINUIT2.OUTPUT file and at the end append the MINOS results to this file.

    -

    The command SECTOR <list-of-sector-times>, where <list-of-sector-times> is a list of time values (space or comma separated) which have to range between the fit-start-time and the fit-end-time, allows to report \(\chi^2\) and maxLH values for sub-intervals of the given fit-range. Its only purpose is for a statistical analysis of complicated fits. The results will be written to the MINUIT2.OUTPUT file.

    +

    The command SECTOR <list-of-sector-times>, where <list-of-sector-times> is a list of time values (space or comma separated) which have to range between the fit-start-time and the fit-end-time, allows to report \(\chi^2\) and maxLH values for sub-intervals of the given fit-range. Its only purpose is for a statistical analysis of complicated fits. The results will be written to the MINUIT2.OUTPUT file.

    An example might look like this (assuming a fit-range from 0.005 to 10 us):

    -
    COMMANDS
    -MINIMIZE
    -MINOS
    -SECTOR 5.0, 7.5, 9.0
    -SAVE
    +
    COMMANDS
    +MINIMIZE
    +MINOS
    +SECTOR 5.0, 7.5, 9.0
    +SAVE
     

    Note: If a fit is invoked, the sector command results will only be written to file, if the fit has converged!

    @@ -1868,16 +2041,16 @@ SAVE

    OpenMP is the default if none of these tags are found in the COMMANDS block.

    -

    In case the defined THEORY is not ready to run on the accelerator, musrfit will fall back to the default behavior. -In the THEORY table all the functions which are currently not GPU ready are labeled by “not DKS ready” in the reference column or corresponding footnote.

    +

    In case the defined THEORY is not ready to run on the accelerator, musrfit will fall back to the default behavior. +In the THEORY table all the functions which are currently not GPU ready are labeled by “not DKS ready” in the reference column or corresponding footnote.

    The FOURIER Block

    -

    If a Fourier transform is carried out the results are plotted within musrview. As input data the actual data shown in musrview is used, -i.e. the currently time range shown in musrview! In the FOURIER block of the msr file all necessary parameters for calculating and presenting -the Fourier transform of the data specified in the PLOT block is given. If the FOURIER block is not present in the msr file, -either the parameters set in the XML startup file or the system defaults are taken when the Fourier transform is performed. +

    If a Fourier transform is carried out the results are plotted within musrview. As input data the actual data shown in musrview is used, +i.e. the currently time range shown in musrview! In the FOURIER block of the msr file all necessary parameters for calculating and presenting +the Fourier transform of the data specified in the PLOT block is given. If the FOURIER block is not present in the msr file, +either the parameters set in the XML startup file or the system defaults are taken when the Fourier transform is performed. The block starts with the FOURIER keyword and may contain the following entries on the successive lines:

    units
    @@ -1891,29 +2064,29 @@ the input data vector is filled with zeros until the number of requested points
    dc-corrected
    -
    a flag to remove a potential DC-offset of the signal. Allowed entries are dc-corrected true | 1 | false | 0.
    +
    a flag to remove a potential DC-offset of the signal. Allowed entries are dc-corrected true | 1 | false | 0.
    apodization

    Here is decided if the data should be apodized before the Fourier transform is performed and if yes, which apodization should be used (for further details about apodization of μSR data refer to the PhD thesis of T.M. Riseman (UBC)). The argument to be put after the keyword is therefore one of the following: NONE, WEAK, MEDIUM or STRONG. If the data should be apodized, they are manipulated as follows: each data value is multiplied by the function

    -
    +
    \[\sum_{k=0}^4 c_k \left(\frac{i}{n}\right)^{2k},\]

    where i is the data-point index and n is the total number of data points. The coefficients cj for the different apodizations are given by:

    WEAK
    -
    \(c_0 = 1.0,\, c_1 = -1.319391,\, c_2 = 0.703484,\, c_3=c_4=0.0\)
    +
    \(c_0 = 1.0,\, c_1 = -1.319391,\, c_2 = 0.703484,\, c_3=c_4=0.0\)
    MEDIUM
    -
    \(c_0 = 1.0,\, c_1 = -1.831292,\, c_2 = 0.983734,\, c_3=c_4=0.0\)
    +
    \(c_0 = 1.0,\, c_1 = -1.831292,\, c_2 = 0.983734,\, c_3=c_4=0.0\)
    STRONG
    -
    \(c_0 = 1.0,\, c_1 = -2.708894,\, c_2 = 2.953575,\, c_3=-1.599128,\, c_4=0.399782\)
    +
    \(c_0 = 1.0,\, c_1 = -2.708894,\, c_2 = 2.953575,\, c_3=-1.599128,\, c_4=0.399782\)
    plot
    -

    At this point it is possible to set the part of the Fourier-transformed data which should be plotted by default if the Fourier transform is done by pressing the f-key in musrview. +

    At this point it is possible to set the part of the Fourier-transformed data which should be plotted by default if the Fourier transform is done by pressing the f-key in musrview. The argument may be one of the following:

    real
    @@ -1936,46 +2109,46 @@ or the number of phases have to correspond to the number of runs in the plot blo

    Currently there are three options:

    1. The phases for each run/detector are given explicitly, i.e.

      -
      phase val0 sep val1 sep ... sep valN
      +
      phase val0 sep val1 sep ... sep valN
       
      -

      where val0, val1, etc. are explicitly given phases (i.e. doubles), and sep is one of the following allowed separators: space, ,, ;, or tab. +

      where val0, val1, etc. are explicitly given phases (i.e. doubles), and sep is one of the following allowed separators: space, ,, ;, or tab. For example

      -
      phase   -3.2, 175.9
      +
      phase   -3.2, 175.9
       
    2. -
    3. The phases for each run/detector are given as phase parameter from the FITPARAMETER block, e.g. par3, which would +

    4. The phases for each run/detector are given as phase parameter from the FITPARAMETER block, e.g. par3, which would take the value of parameter number 3. More explicitly

      -
      phase parX0 sep parX1 sep ... sep parXN
      +
      phase parX0 sep parX1 sep ... sep parXN
       

      where the same rules applies as for explicit phase values. An example could look like this

      -
      phase par7, par12, par17, par22, par27, par32, par37, par42, par47, par52, par57, par62, par67, par72, par77, par82
      +
      phase par7, par12, par17, par22, par27, par32, par37, par42, par47, par52, par57, par62, par67, par72, par77, par82
       

      One might prefer to express the phases in respect to a reference counter, e.g. the forward counter is the reference counter phase (fcp) whereas the backward counter phase (bcp) is expressed as bcp = fcp + relative_bcp. If the fitting is done along these lines, the phases in the Fourier block can be expressed the following way

      -
      phase parRX0 sep parX1 sep ... sep parXN
      +
      phase parRX0 sep parX1 sep ... sep parXN
       
      -

      which means that X0 is the reference phase, and all the other phases are relative phases in respect to X0, i.e. the absolut phase of -Xj would be the summ of the values of parX0 and parXj etc. The reference phase in the list is marked by parR rather than par. +

      which means that X0 is the reference phase, and all the other phases are relative phases in respect to X0, i.e. the absolut phase of +Xj would be the summ of the values of parX0 and parXj etc. The reference phase in the list is marked by parR rather than par. Obviously only one reference phase can be defined!

    5. Often the phases in the parameter block follow a clear list structure. This allows to write the Fourier phase parameters in a more compact form

      -
      phase par(X0, offset, #param)
      +
      phase par(X0, offset, #param)
       
      -

      with X0 the first phase parameter index, offset being the offset to the next phase parameter, and #param being the number of phase parameters to be used. +

      with X0 the first phase parameter index, offset being the offset to the next phase parameter, and #param being the number of phase parameters to be used. This means that the previous example can be compacted to

      -
      phase par(7, 5, 16)
      +
      phase par(7, 5, 16)
       

      As in the phase parameter list examples before, also here a reference phase with relative phases might be wished. Differently to the phase parameter list example, the first parameter number will be the reference phase. The compact notation here is

      -
      phase parR(X0, offest, #param)
      +
      phase parR(X0, offest, #param)
       
    6. @@ -1984,7 +2157,7 @@ list example, the first parameter number will be the reference phase. The compac
    range_for_phase_correction
    -
    An interval in Fourier space given in units as define with the ‘units’ tag, or the tag ‘all’ in which case the range given under ‘range’ will be used. +
    An interval in Fourier space given in units as define with the ‘units’ tag, or the tag ‘all’ in which case the range given under ‘range’ will be used. The given interval will be used for an automatic phasing of the real Fourier transform. This will allow to add real Fourier spectra coherently.
    @@ -1992,28 +2165,28 @@ The given interval will be used for an automatic phasing of the real Fourier tra
    The plotting range is set here. The interval is specified through its start and end points given in the units set after the units tag.

    Altogether, a possible FOURIER block might look like that:

    -
    FOURIER
    -units Mc/s
    -fourier_power 12
    -apodization NONE
    -plot real_and_imag
    -phase par5, par8
    -range 0.0 17.03
    +
    FOURIER
    +units Mc/s
    +fourier_power 12
    +apodization NONE
    +plot real_and_imag
    +phase par5, par8
    +range 0.0 17.03
     

    The PLOT Block

    -

    The PLOT block is intended to collect all the information needed for the graphical presentation of the data and fits using musrview. -The PLOT keyword at the beginning of the block is followed by a number which indicates the plot type. The plot types have to match the fit types. +

    The PLOT block is intended to collect all the information needed for the graphical presentation of the data and fits using musrview. +The PLOT keyword at the beginning of the block is followed by a number which indicates the plot type. The plot types have to match the fit types. Additionally, it is possible to provide information using the following keywords:

    lifetimecorrection
    -
    Does not accept any arguments. If present, the output in musrview is corrected for the exponential decay of the muon. Only relevant for (type 0).
    +
    Does not accept any arguments. If present, the output in musrview is corrected for the exponential decay of the muon. Only relevant for (type 0).
    runs
    -
    The numbers of the runs to be plotted have to be put here. The runs are numbered according to their appearance in the RUN block. +
    The numbers of the runs to be plotted have to be put here. The runs are numbered according to their appearance in the RUN block. The numbers is either a space separated list of numbers, an interval e.g. 1-16, or a combination of both.
    @@ -2035,9 +2208,9 @@ micro-seconds and the N in counts (types 0-4) or in counts/nsec (type 0

    Here it is possible to define the plotting range for each run individually. For the different plot types the command has the structure:

    fit type 0-4 without lifetimecorrection:
    -
    t1min t1max t2min t2max ... tnmin tnmax [ Nmin N max ] (n = the number of runs to be plotted)
    +
    t1min t1max t2min t2maxtnmin tnmax [ Nmin N max ] (n = the number of runs to be plotted)
    fit type 0-3 with lifetimecorrection:
    -
    t1min t1max t2min t2max ... tnmin tnmax [ Amin A max ] (n = the number of runs to be plotted)
    +
    t1min t1max t2min t2maxtnmin tnmax [ Amin A max ] (n = the number of runs to be plotted)
    fit type 8:
    not yet implemented
    @@ -2065,11 +2238,11 @@ micro-seconds and the N in counts (types 0-4) or in counts/nsec (type 0
    rrf_freq value unit
    -
    This entry provides the RRF “frequency” given by the value and the unit which can be: kHz, MHz, Mc/s, G, or T.
    +
    This entry provides the RRF “frequency” given by the value and the unit which can be: kHz, MHz, Mc/s, G, or T.
    rrf_phase value
    -
    A phase of the RRF can be provided, either as a value in degrees, or as a parX, e.g. par4, where ‘X’ is supposed to be the phase parameter number in the FITPARAMETER block.
    +
    A phase of the RRF can be provided, either as a value in degrees, or as a parX, e.g. par4, where ‘X’ is supposed to be the phase parameter number in the FITPARAMETER block.
    Notes:
    • If no plot range is given at all, the fit range of the first run also serves as time window for the plot.
    • @@ -2079,34 +2252,34 @@ micro-seconds and the N in counts (types 0-4) or in counts/nsec (type 0

    A typical PLOT block could look like

    -
    ###############################################################
    -PLOT 0   (single histo plot)
    -lifetimecorrection
    -runs    1-16
    -range   0   9.07   -0.5   0.5
    +
    ###############################################################
    +PLOT 0   (single histo plot)
    +lifetimecorrection
    +runs    1-16
    +range   0   9.07   -0.5   0.5
     

    A few comments concerning the rotating reference frame (rrf) plot option: the idea of the rrf is to transform a high frequency μSR spectrum into a low frequency spectrum. This is essentially done by multiplying the original asymmetry -\(A(t)\) by \(\cos(\omega_{\rm rrf} t + \phi_{\rm rrf})\). This leads to two frequency shifted copies of the original -\(A(t)\), one shifted downwards in frequency by \(\omega_{\rm rrf}\) (the wanted one) and one upwards (the unwanted one). +\(A(t)\) by \(\cos(\omega_{\rm rrf} t + \phi_{\rm rrf})\). This leads to two frequency shifted copies of the original +\(A(t)\), one shifted downwards in frequency by \(\omega_{\rm rrf}\) (the wanted one) and one upwards (the unwanted one). In order to get rid of the upward shifted spectrum, the rrf_packing is used, we just over-bin the high frequency copy. The theory, however, is filtered via Kaiser filter. Here a short example:

    -
    ###############################################################
    -PLOT 1   (single histo RRF plot)
    -runs     1
    -range    0   10   -0.3   0.3
    -rrf_freq 13900 G
    -rrf_packing 75
    +
    ###############################################################
    +PLOT 1   (single histo RRF plot)
    +runs     1
    +range    0   10   -0.3   0.3
    +rrf_freq 13900 G
    +rrf_packing 75
     

    The STATISTIC Block

    The STATISTIC block is the last block of a msr file. It contains some information on the fit: the date and time as well as -the absolute and normalized values of \(\chi^2\) and the number of degrees of freedom in the fit. -If enabled in the XML file for \(\chi^2\)-single-histogram fits also Pearson’s -\(\chi^2\) will be written to the STATISTIC block.

    +the absolute and normalized values of \(\chi^2\) and the number of degrees of freedom in the fit. +If enabled in the XML file for \(\chi^2\)-single-histogram fits also Pearson’s +\(\chi^2\) will be written to the STATISTIC block.

    These information only have a meaning if the fitting procedure has been executed at least once and the fit has converged!

    @@ -2115,79 +2288,79 @@ If enabled in the XML

    Single Histogram Fit (fit type 0)

    The single-histogram fit (fit type 0) is used to fit a function directly to the raw data using

    -
    +
    \[N(t) = N_0 e^{-t/\tau_\mu} [ 1 + A(t) ] + N_{\rm bkg}\]
    The parameters are given by:
      -
    • \(N(t)\): rebinned decay histograms
    • -
    • \(N_0\): normalization constant of the histogram (RUN block: norm)
    • -
    • \(\tau_\mu\): lifetime of the muon (RUN block: lifetime)
    • -
    • \(N_{\rm bkg}\): constant background (RUN block: backgr.fit, backgr.fix, or background)
    • -
    • \(A(t)\): decay asymmetry/depolarization function as given in the THEORY block)
    • +
    • \(N(t)\): rebinned decay histograms
    • +
    • \(N_0\): normalization constant of the histogram (RUN block: norm)
    • +
    • \(\tau_\mu\): lifetime of the muon (RUN block: lifetime)
    • +
    • \(N_{\rm bkg}\): constant background (RUN block: backgr.fit, backgr.fix, or background)
    • +
    • \(A(t)\): decay asymmetry/depolarization function as given in the THEORY block)
    -

    In the plot type 0 without lifetimecorrection the rebinned histogram and the function N(t) written above are presented. +

    In the plot type 0 without lifetimecorrection the rebinned histogram and the function N(t) written above are presented. If the option lifetimecorrection is set in the PLOT block the asymmetry is plotted:

    -
    +
    \[A(t) = \frac{N(t) - N_{\rm bkg}}{N_0} e^{+t/\tau_\mu} - 1\]

    Single Histogram RRF Fit (fit type 1)

    -

    The single-histogram RRF fit (fit type 1) is used to fit the rotating reference frame asymmetry \(A_{\rm rrf}(t)\) extracted from the raw data. +

    The single-histogram RRF fit (fit type 1) is used to fit the rotating reference frame asymmetry \(A_{\rm rrf}(t)\) extracted from the raw data. The currently implemented version will fail at low fields/frequencies (for about < 1 Tesla). The same is true, if multiple frequencies with large -enough separation are present, e.g. when dealing with muonium. \(A_{\rm rrf}(t)\) is estimated the following way (for more details see the +enough separation are present, e.g. when dealing with muonium. \(A_{\rm rrf}(t)\) is estimated the following way (for more details see the RRF memo (<musrfit>/doc/memos/rrf/rrf-notes.pdf)):

      -
    1. define the background \(N_{\rm bkg}\), and subtract it from the raw histogram.
    2. -
    3. calculate the property \(M(t) = [N(t)-N_{\rm bkg}] \exp(+t/\tau)\).
    4. -
    5. estimate \(N_0\). This is the most tricky part. From this calculate \(A(t) = M(t)/N_0 -1\).
    6. -
    7. now the RRF transformation takes place: \(A_{\rm rrf}(t) = 2 \cos(\omega_{\rm rrf} t + \phi_{\rm rrf}) A(t)\). -In Fourier space this is leading to \([A(\omega-\omega_{\rm rrf})+A(\omega+\omega_{\rm rrf})]\).
    8. -
    9. in order to get rid if the \(A(\omega+\omega_{\rm rrf})\) component, \(A_{\rm rrf}(t)\) is over-binned -by the rrf_packing. This results in a signal \(\langle A_{\rm rrf}(t) \rangle_{p}\) -which ideally is \(A(t)\) shifted down in frequency by \(\omega_{\rm rrf}\).
    10. +
    11. define the background \(N_{\rm bkg}\), and subtract it from the raw histogram.
    12. +
    13. calculate the property \(M(t) = [N(t)-N_{\rm bkg}] \exp(+t/\tau)\).
    14. +
    15. estimate \(N_0\). This is the most tricky part. From this calculate \(A(t) = M(t)/N_0 -1\).
    16. +
    17. now the RRF transformation takes place: \(A_{\rm rrf}(t) = 2 \cos(\omega_{\rm rrf} t + \phi_{\rm rrf}) A(t)\). +In Fourier space this is leading to \([A(\omega-\omega_{\rm rrf})+A(\omega+\omega_{\rm rrf})]\).
    18. +
    19. in order to get rid if the \(A(\omega+\omega_{\rm rrf})\) component, \(A_{\rm rrf}(t)\) is over-binned +by the rrf_packing. This results in a signal \(\langle A_{\rm rrf}(t) \rangle_{p}\) +which ideally is \(A(t)\) shifted down in frequency by \(\omega_{\rm rrf}\).

    The single histogram RRF fit was introduced for online analysis only. It is leading to many uncontrolled effects like ghost lines due to imperfection -of the \(N_0\) estimate, line shape distortion due to dispersive filtering originating from the packing, back folding problems if -\(\omega_{\rm rrf}\) is not properly chosen, the error estimates on the fitted parameters is substantially worse, etc. +of the \(N_0\) estimate, line shape distortion due to dispersive filtering originating from the packing, back folding problems if +\(\omega_{\rm rrf}\) is not properly chosen, the error estimates on the fitted parameters is substantially worse, etc. In summary: if you not urgently need it: do not use it! There are better ways to deal with the analysis of high frequency data! For more details see the rrf-memo found in the source code under <musrfit>/doc/memo/rrf/rrf-notes.pdf or Musrfit–Real Time Parameter Fitting Using GPUs

    Asymmetry Fit (fit type 2)

    -

    For an asymmetry fit (fit type 2) two histograms are needed. These are given by the forward and backward keywords -in the RUN block. Additionally, the parameters alpha and beta which relate the detector +

    For an asymmetry fit (fit type 2) two histograms are needed. These are given by the forward and backward keywords +in the RUN block. Additionally, the parameters alpha and beta which relate the detector efficiencies, solid angles and initial asymmetries of the two detectors can be supplied. The constant background for the two histograms is either given by -background-determined intervals or specified through backgr.fix in the RUN-block.

    -

    The experimental asymmetry \(a(k)\) then is inferred from the two histograms:

    -
    +background-determined intervals or specified through backgr.fix in the RUN-block.

    +

    The experimental asymmetry \(a(k)\) then is inferred from the two histograms:

    +
    \[a(k)=\frac{\left[N_{\mathrm{f}}(k)-B_{\mathrm{f}}\right]-\left[N_{\mathrm{b}}(k)-B_{\mathrm{b}}\right]}{\left[N_{\mathrm{f}}(k)-B_{\mathrm{f}}\right]+\left[N_{\mathrm{b}}(k)-B_{\mathrm{b}}\right]},\]

    with

      -
    • \(N_{\mathrm{f}}(k)\): counts in the forward histogram channel \(k\)
    • -
    • \(N_{\mathrm{b}}(k)\): counts in the backward histogram channel \(k\)
    • -
    • :math:` B_{mathrm{f}}`: constant background in the forward histogram (RUN block: backgr.fix or background)
    • -
    • :math:` B_{mathrm{b}}`: constant background in the backward histogram (RUN block: backgr.fix or background)
    • +
    • \(N_{\mathrm{f}}(k)\): counts in the forward histogram channel \(k\)
    • +
    • \(N_{\mathrm{b}}(k)\): counts in the backward histogram channel \(k\)
    • +
    • :math:` B_{mathrm{f}}`: constant background in the forward histogram (RUN block: backgr.fix or background)
    • +
    • :math:` B_{mathrm{b}}`: constant background in the backward histogram (RUN block: backgr.fix or background)
    -

    This theoretical asymmetry \(a(t)\) is used to fit the function

    -
    +

    This theoretical asymmetry \(a(t)\) is used to fit the function

    +
    \[a(t)=\frac{(\alpha\beta +1)A(t)-(\alpha -1)}{(\alpha +1)-(\alpha\beta -1)A(t)},\]

    where

      -
    • \(\alpha\): accounts for the different detector efficiencies and solid angles (RUN block: alpha).
    • -
    • \(\beta\): accounts for the different detector asymmetries (RUN block: beta).
    • -
    • \(A(t)\): is the depolarization function as given in the THEORY block.
    • +
    • \(\alpha\): accounts for the different detector efficiencies and solid angles (RUN block: alpha).
    • +
    • \(\beta\): accounts for the different detector asymmetries (RUN block: beta).
    • +
    • \(A(t)\): is the depolarization function as given in the THEORY block.
    -

    For the graphical representation in plot type 2 the equation above is rearranged to get \(A(t)\):

    -
    +

    For the graphical representation in plot type 2 the equation above is rearranged to get \(A(t)\):

    +
    \[A(t)=\frac{(\alpha -1)+(\alpha +1)a(t)}{(\alpha\beta +1)+(\alpha\beta -1)a(t)}=\frac{\alpha\left[N_{\mathrm{f}}(t)-B_{\mathrm{f}}\right]-\left[N_{\mathrm{b}}(t)-B_{\mathrm{b}}\right]}{\alpha\beta\left[N_{\mathrm{f}}(t)-B_{\mathrm{f}}\right]+\left[N_{\mathrm{b}}(t)-B_{\mathrm{b}}\right]}\]

    and plotted together with the function given in the THEORY block.

    @@ -2200,55 +2373,55 @@ the single histogram RRF fit apply: if you not urgently need it: do not

    Negative Muon μSR Fit (fit type 4)

    The negative muon μSR fit (fit type 4) is used for single histogram fits of MuMinus, i.e.

    -
    +
    \[N(t) = \sum_i N_i\,\mathrm{e}^{-t/\tau_i} \left[ 1 + A_i(t)\right] + N_{\rm bkg}(t)\]
    -

    where \(i\) runs over the different lifetime channels of \(\mu^{-}\), and

    +

    where \(i\) runs over the different lifetime channels of \(\mu^{-}\), and

      -
    • \(N_i\): counts of lifetime channel \(i\)
    • -
    • \(\tau_i\): lifetime of lifetime channel \(i\)
    • -
    • \(A_i(t)\): depolarization function of lifetime channel \(i\)
    • -
    • \(N_{\rm bkg}(t)\): \(N_{\rm bkg}(t)= N_{\rm bkg,0} + \sum_k N_{\rm bkg,k} \cos(k \omega_{\rm cyclotron} t)\) the background
    • +
    • \(N_i\): counts of lifetime channel \(i\)
    • +
    • \(\tau_i\): lifetime of lifetime channel \(i\)
    • +
    • \(A_i(t)\): depolarization function of lifetime channel \(i\)
    • +
    • \(N_{\rm bkg}(t)\): \(N_{\rm bkg}(t)= N_{\rm bkg,0} + \sum_k N_{\rm bkg,k} \cos(k \omega_{\rm cyclotron} t)\) the background
    -

    Since MuMinus is quite generic, the full functional depends has to be written in the THEORY Block.

    +

    Since MuMinus is quite generic, the full functional depends has to be written in the THEORY Block.

    beta-NMR Asymmetry Fit (fit type 5)

    -

    Four histograms are needed for a beta-NMR asymmetry fit (fit type 5), two for positive helecity and two for negative. These are given by the forward and backward keywords -in the RUN block. Additionally, the parameters alpha and beta which relate the detector +

    Four histograms are needed for a beta-NMR asymmetry fit (fit type 5), two for positive helecity and two for negative. These are given by the forward and backward keywords +in the RUN block. Additionally, the parameters alpha and beta which relate the detector efficiencies, solid angles and initial asymmetries of the two detectors can be supplied. The constant background for the two histograms is either given by -background-determined intervals or specified through backgr.fix in the RUN-block.

    -

    The experimental asymmetry \(a(k)\) is then calculated from the four histograms:

    -
    +background-determined intervals or specified through backgr.fix in the RUN-block.

    +

    The experimental asymmetry \(a(k)\) is then calculated from the four histograms:

    +
    \[a(k)=\frac{\left[N_{\mathrm{fp}}(k)-B_{\mathrm{fp}}\right]-\left[N_{\mathrm{bp}}(k)-B_{\mathrm{bp}}\right]}{\left[N_{\mathrm{fp}}(k)-B_{\mathrm{fp}}\right]+\left[N_{\mathrm{bp}}(k)-B_{\mathrm{bp}}\right]} - \frac{\left[N_{\mathrm{fm}}(k)-B_{\mathrm{fm}}\right]-\left[N_{\mathrm{bm}}(k)-B_{\mathrm{bm}}\right]}{\left[N_{\mathrm{fm}}(k)-B_{\mathrm{fm}}\right]+\left[N_{\mathrm{bm}}(k)-B_{\mathrm{bm}}\right]},\]

    with

      -
    • \(N_{\mathrm{fp}}(k)\): counts in the forward histogram channel with positive helicity \(k\)
    • -
    • \(N_{\mathrm{bp}}(k)\): counts in the backward histogram channel with positive helicity \(k\)
    • -
    • \(B_{\mathrm{fp}}\): constant background in the forward histogram with positive helicity (RUN block: backgr.fix or background)
    • -
    • \(B_{\mathrm{bp}}\): constant background in the backward histogram with positive helicity (RUN block: backgr.fix or background)
    • -
    • \(N_{\mathrm{fm}}(k)\): counts in the forward histogram channel with negative helicity \(k\)
    • -
    • \(N_{\mathrm{bm}}(k)\): counts in the backward histogram channel with negative helicity \(k\)
    • -
    • \(B_{\mathrm{fm}}\): constant background in the forward histogram with negative helicity (RUN block: backgr.fix or background)
    • -
    • \(B_{\mathrm{bm}}\): constant background in the backward histogram with negative helicity (RUN block: backgr.fix or background)
    • +
    • \(N_{\mathrm{fp}}(k)\): counts in the forward histogram channel with positive helicity \(k\)
    • +
    • \(N_{\mathrm{bp}}(k)\): counts in the backward histogram channel with positive helicity \(k\)
    • +
    • \(B_{\mathrm{fp}}\): constant background in the forward histogram with positive helicity (RUN block: backgr.fix or background)
    • +
    • \(B_{\mathrm{bp}}\): constant background in the backward histogram with positive helicity (RUN block: backgr.fix or background)
    • +
    • \(N_{\mathrm{fm}}(k)\): counts in the forward histogram channel with negative helicity \(k\)
    • +
    • \(N_{\mathrm{bm}}(k)\): counts in the backward histogram channel with negative helicity \(k\)
    • +
    • \(B_{\mathrm{fm}}\): constant background in the forward histogram with negative helicity (RUN block: backgr.fix or background)
    • +
    • \(B_{\mathrm{bm}}\): constant background in the backward histogram with negative helicity (RUN block: backgr.fix or background)
    -

    This theoretical asymmetry \(a(t)\) is used to fit the function

    -
    +

    This theoretical asymmetry \(a(t)\) is used to fit the function

    +
    \[a(t)=\frac{(\alpha\beta +1)A(t)-(\alpha -1)}{(\alpha +1)-(\alpha\beta -1)A(t)} - \frac{(\alpha -1)-(\alpha\beta 1)A(t)}{(\alpha +1)+(\alpha\beta -1)Am(t)},\]

    where

      -
    • \(\alpha\): accounts for the different detector efficiencies and solid angles (RUN block: alpha).
    • -
    • \(\beta\): accounts for the different detector asymmetries (RUN block: beta).
    • -
    • \(A(t)\): is the depolarization function as given in the THEORY block.
    • +
    • \(\alpha\): accounts for the different detector efficiencies and solid angles (RUN block: alpha).
    • +
    • \(\beta\): accounts for the different detector asymmetries (RUN block: beta).
    • +
    • \(A(t)\): is the depolarization function as given in the THEORY block.
    -

    For the graphical representation in plot type 5 the equation above is rearranged to get \(A(t)\):

    -
    +

    For the graphical representation in plot type 5 the equation above is rearranged to get \(A(t)\):

    +
    \[\begin{split}A(t) &= \frac{(\alpha -1)+(\alpha +1)a(t)}{(\alpha\beta+1)+(\alpha\beta -1)a(t)}-\frac{(\alpha +1)a(t)-(\alpha-1)}{(\alpha\beta +1)+(1-\alpha\beta)a(t)} \\ &= \frac{\alpha\left[N_{\mathrm{fp}}(t)-B_{\mathrm{fp}}\right]-\left[N_{\mathrm{bp}}(t)-B_{\mathrm{bp}}\right]}{\alpha\beta\left[N_{\mathrm{fp}}(t)-B_{\mathrm{fp}}\right]+\left[N_{\mathrm{bp}}(t)-B_{\mathrm{bp}}\right]} -\frac{\alpha\left[N_{\mathrm{fm}}(t)-B_{\mathrm{fm}}\right]-\left[N_{\mathrm{bm}}(t)-B_{\mathrm{bm}}\right]}{\alpha\beta\left[N_{\mathrm{fm}}(t)-B_{\mathrm{fm}}\right]+\left[N_{\mathrm{bm}}(t)-B_{\mathrm{bm}}\right]}\end{split}\]

    and plotted together with the function given in the THEORY block.

    @@ -2256,15 +2429,15 @@ efficiencies, solid angles and initial asymmetries of the two detectors can be s

    Non-μSR Fit (fit type 8)

    In the case of a non-μSR fit (fit type 8) the fitting function is

    -
    +
    \[y = f(x),\]
    -

    where \(x, y\) are given by xy-data in the RUN block, and \(f(x)\) is the function defined in the THEORY block.

    +

    where \(x, y\) are given by xy-data in the RUN block, and \(f(x)\) is the function defined in the THEORY block.

    The same applies for the plot with plot type 8.

    User Functions

    -

    musrfit offers the possibility to plug-in user-defined functions implemented in C++ classes to the fitting and plotting routines. +

    musrfit offers the possibility to plug-in user-defined functions implemented in C++ classes to the fitting and plotting routines. In order to do so, basically two things are needed:

      @@ -2282,14 +2455,14 @@ In order to do so, basically two things are needed:

      Since the first is simpler this will be explained using an explicit example, before it is discussed why the second option is needed and how it can be used.

      User Function without global user-function-object access

      -

      In the following it is explained in detail how the implementation of a user function is done using the simple example of \(f_a(x) = \sin(a x)/(a x)\), -where the parameter \(a\) should be determined by the fit. Although not necessary for this simple example, the source code is split into two parts, -namely a header file TMyFunction.h containing the class declaration and a second file TMyFunction.cpp including the function implementation +

      In the following it is explained in detail how the implementation of a user function is done using the simple example of \(f_a(x) = \sin(a x)/(a x)\), +where the parameter \(a\) should be determined by the fit. Although not necessary for this simple example, the source code is split into two parts, +namely a header file TMyFunction.h containing the class declaration and a second file TMyFunction.cpp including the function implementation (the name of these files is your choice!).

      -

      To plug in the class to musrfit, it is necessary that the class derives from the base class PUserFcnBase defined in the header file PUserFcnBase.h (which is a part of musrfit). +

      To plug in the class to musrfit, it is necessary that the class derives from the base class PUserFcnBase defined in the header file PUserFcnBase.h (which is a part of musrfit). In this abstract base class a function operator is defined that takes two arguments: the point where the function should be evaluated and a reference to a vector with all parameters of the function.

      -

      Therefore, the user’s header file could look like the following:

      -
      /***************************************************************************
      +

      Therefore, the user’s header file could look like the following:

      +
      /***************************************************************************
       
       TMyFunction.h
       
      @@ -2318,12 +2491,12 @@ In this abstract base class a function operator is defined that takes two argume
       

      In the header file above the constructor (destructor) of the class is empty. This is not necessary, any code that should be executed when the -RUN block is read and the class object is created (destroyed) may be implemented in the constructor (destructor). -Another peculiarity is the ClassDef statement at the end of the class definition. It is needed for the ROOT dictionary generation +RUN block is read and the class object is created (destroyed) may be implemented in the constructor (destructor). +Another peculiarity is the ClassDef statement at the end of the class definition. It is needed for the ROOT dictionary generation and has as arguments the class name and a revision number.

      Please also be aware of the const-ness of the operator(). For an introductory discussion on that topic look for example Const_correctness and the links herein.

      The actual implementation of the user function is done in the second source file. In this example it only contains the definition of the function operator() declared in the header file and might look like:

      -
      /***************************************************************************
      +
      /***************************************************************************
       
       TMyFunction.cpp
       
      @@ -2345,11 +2518,11 @@ and has as arguments the class name and a revision number.

      }
      -

      Also this file contains a special statement for the ROOT dictionary generation (ClassImp), which is placed before the definition of the function. -If functions of more than one class are defined in the file, the ClassImp statements for the other classes follow right after the first one.

      -

      What is further needed for the ROOT dictionary is a so-called LinkDef file which again contains the class names of all classes that should be accessible -through the dictionary and has the following structure, where the “LinkDef.h” (or “linkdef.h” or “Linkdef.h”) at the end of the file name is mandatory:

      -
      /***************************************************************************
      +

      Also this file contains a special statement for the ROOT dictionary generation (ClassImp), which is placed before the definition of the function. +If functions of more than one class are defined in the file, the ClassImp statements for the other classes follow right after the first one.

      +

      What is further needed for the ROOT dictionary is a so-called LinkDef file which again contains the class names of all classes that should be accessible +through the dictionary and has the following structure, where the “LinkDef.h” (or “linkdef.h” or “Linkdef.h”) at the end of the file name is mandatory:

      +
      /***************************************************************************
       
       TMyLibraryLinkDef.h
       
      @@ -2366,33 +2539,33 @@ through the dictionary and has the following structure, where the “LinkDef
       #endif //__CINT__
       
      -

      For compiling and linking it is wise to use a Makefile as for example the attached Makefile.TMyLibrary. It assumes standard ROOT and musrfit +

      For compiling and linking it is wise to use a Makefile as for example the attached Makefile.TMyLibrary. It assumes standard ROOT and musrfit installations and defines rules for the generation of the shared library libTMyLibrary.so including the class and the ROOT dictionary. In order to get the library built and installed on the standard ROOT path just call:

      -
      $ make -f Makefile.TMyLibrary
      +
      $ make -f Makefile.TMyLibrary
       $ make -f Makefile.TMyLibrary install
       

      In case of a custom installation some paths in the Makefile might have to be adopted. For further information about the ROOT dictionary mechanism please refer to the documentation.

      -

      After installing the shared library the defined user function might be used in musrfit as described above.

      -

      Finally, please be aware of the remark at the end of this section.

      +

      After installing the shared library the defined user function might be used in musrfit as described above.

      +

      Finally, please be aware of the remark at the end of this section.

      User Function with global user-function-object access

      Before explaining how to use global objects within user functions, it will be shortly explained where is the problem and why this might be a sensible approach. -In musrfit each RUN block (histogram, asymmetry, ...) is owning its own theory-function tree. An example is shown in the figure below. -The bluish nodes are default musrfit functions, whereas the red nodes represent user functions (here labeled by uF1 and uF2). Without global user-function -object, these nodes are independent entities. This means if the msr file contains n run blocks, the user function uF1 will be called n times for each step +In musrfit each RUN block (histogram, asymmetry, …) is owning its own theory-function tree. An example is shown in the figure below. +The bluish nodes are default musrfit functions, whereas the red nodes represent user functions (here labeled by uF1 and uF2). Without global user-function +object, these nodes are independent entities. This means if the msr file contains n run blocks, the user function uF1 will be called n times for each step in the calculation. If the user function is performing CPU-demanding calculations this is rather inefficient.

      -

      Therefore, it is possible to associate to each user function (uFx) a global user-function object (g_uFx). The idea is the following: If uFx needs to +_images/theory-tree-with-user-fcn.svg

      Therefore, it is possible to associate to each user function (uFx) a global user-function object (g_uFx). The idea is the following: If uFx needs to perform very time-consuming calculations (e.g. calculate an Abrikosov vortex lattice or the nonlocal response of a superconductor in the Meissner state) this -can be transferred to the global user-function object (g_uFx) and hence the time-consuming calculation is only performed once per cycle (compared to n times -without g_uFx), thus speeding up the fit.

      +can be transferred to the global user-function object (g_uFx) and hence the time-consuming calculation is only performed once per cycle (compared to n times +without g_uFx), thus speeding up the fit.

      After explaining the purpose of the global user-function-object approach, some explanations how to interface it follow here. Since the interface is very close to -the user function without global objects, only the additionally necessary overhead is explained here.

      -

      The user’s header file could look like the following:

      -
      /***************************************************************************
      +the user function without global objects, only the additionally necessary overhead is explained here.

      +

      The user’s header file could look like the following:

      +
      /***************************************************************************
       
       TMyFunction.h
       
      @@ -2456,11 +2629,11 @@ the };
       
      -

      Compared to the user function without global objects, here the NeedGlobalPart() method returns true -meaning that a global user-function object will be needed. Furthermore, the methods SetGlobalPart(vector<void*> &globalPart, UInt_t idx) and -GlobalPartIsValid() now need to be implemented. The method SetGlobalPart(vector<void*> &globalPart, UInt_t idx) is used to link the -fGlobalUserFcn to the global user object. This routine will look like:

      -
      void TMyFunction::SetGlobalPart(vector<void *> &globalPart, UInt_t idx)
      +

      Compared to the user function without global objects, here the NeedGlobalPart() method returns true +meaning that a global user-function object will be needed. Furthermore, the methods SetGlobalPart(vector<void*> &globalPart, UInt_t idx) and +GlobalPartIsValid() now need to be implemented. The method SetGlobalPart(vector<void*> &globalPart, UInt_t idx) is used to link the +fGlobalUserFcn to the global user object. This routine will look like:

      +
      void TMyFunction::SetGlobalPart(vector<void *> &globalPart, UInt_t idx)
       {
         fIdxGlobal = static_cast<Int_t>(idx);
       
      @@ -2484,8 +2657,8 @@ meaning that a global user-function object will be needed. Furthermore, the meth
       

      What it does is the following: it first checks if the object is already present in the global user-function-object vector and if not creates it. If it is already present, the pointer to the global object vector is just kept (see figure above).

      -

      A sketch of the method operator()(Double_t, const vector&) const will then look like (pseudo-code snippet):

      -
      Double_t TMyFunction::operator()(Double_t t, const vector<Double_t> &param) const
      +

      A sketch of the method operator()(Double_t, const vector&) const will then look like (pseudo-code snippet):

      +
      Double_t TMyFunction::operator()(Double_t t, const vector<Double_t> &param) const
       {
         Double_t result = 0.0;
       
      @@ -2507,33 +2680,33 @@ the pointer to the global object vector is just kept (see figure above).

      }
      -

      This way the efficiency of the user function can be increased by almost a factor of n (where n is the number of RUN blocks).

      +

      This way the efficiency of the user function can be increased by almost a factor of n (where n is the number of RUN blocks).

      Note

      -

      If musrfit has been built with parallelization support (default for GCC > 4.2) it should be taken care of the thread safety of the user-function operator(). -During the function optimization of musrfit the operator() is called once for any given set of parameters in order to allow the safe execution of any calculation. -Within the single-histogram and asymmetry fits the calculation of \(\chi^2\) or the maximum log-likelihood is +

      If musrfit has been built with parallelization support (default for GCC > 4.2) it should be taken care of the thread safety of the user-function operator(). +During the function optimization of musrfit the operator() is called once for any given set of parameters in order to allow the safe execution of any calculation. +Within the single-histogram and asymmetry fits the calculation of \(\chi^2\) or the maximum log-likelihood is parallelized and the operator() is expected to evaluate to reasonable values for a fixed set of parameters (but changing t) beginning with the second function call. -In case this cannot be ensured, the parallelization can be disabled by –disable-omp on the configure level of the program installation.

      +In case this cannot be ensured, the parallelization can be disabled by –disable-omp on the configure level of the program installation.

      rge-file handler for Low-Energy μSR

      -

      In the case of LE-μSR, the muon stopping distribution might have a profound impact on the muon polarization function \(P(t)\). In case of transverse field μSR measurements it can be written as

      -
      +

      In the case of LE-μSR, the muon stopping distribution might have a profound impact on the muon polarization function \(P(t)\). In case of transverse field μSR measurements it can be written as

      +
      \[P(t) = \int_0^\infty n(z) \cos(\gamma_\mu B(z) t + \varphi) \, dz\]
      -

      where \(n(z)\) is the normaized muon stopping distribution obtained from the Monte-Carlo code TRIM.SP. Normalized means

      -
      +

      where \(n(z)\) is the normaized muon stopping distribution obtained from the Monte-Carlo code TRIM.SP. Normalized means

      +
      \[\int_0^\infty n(z) \, dz = 1.\]
      -

      \(\gamma_\mu = 2 \pi \times 135.54\) MHz/T is the gyromagnetic ratio of the muon and \(\varphi\) -is the initial phase of the muon spins with respect to the positron detector. Typically \(B(z)\) 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

      -
      +

      \(\gamma_\mu = 2 \pi \times 135.54\) MHz/T is the gyromagnetic ratio of the muon and \(\varphi\) +is the initial phase of the muon spins with respect to the positron detector. Typically \(B(z)\) 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

      +
      \[B(z) = B_0\, \exp(-z/\lambda),\]
      -

      with \(B_0\) being the applied magnetic field, and \(\lambda\) is the magnetic penetration depth.

      -

      This means that one needs to deal with the \(n(z)\) objects in all these user functions. \(n(z)\) does not only depend on the depth, but also on the implantation energy \(E_{\rm impl}\). For a real experiment this means that one is calculating a collection (various energies) of muon stopping distribution profiles with TRIM.SP. In the language of TRIM.SP, these files are called rge-files.

      -

      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 \(n(z, E_{\rm impl})\) objects. The essential user-interface of this class with the name PRgeHandler is given +

      with \(B_0\) being the applied magnetic field, and \(\lambda\) is the magnetic penetration depth.

      +

      This means that one needs to deal with the \(n(z)\) objects in all these user functions. \(n(z)\) does not only depend on the depth, but also on the implantation energy \(E_{\rm impl}\). For a real experiment this means that one is calculating a collection (various energies) of muon stopping distribution profiles with TRIM.SP. In the language of TRIM.SP, these files are called rge-files.

      +

      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 \(n(z, E_{\rm impl})\) objects. The essential user-interface of this class with the name PRgeHandler is given here:

      -
      class PRgeHandler : public TObject
      +
      class PRgeHandler : public TObject
       {
         public:
           PRgeHandler(std::string fln="");
      @@ -2555,9 +2728,9 @@ here:

      };
      -

      The rge-file objects are loaded internally (see below) and can easily be accessed via this interface. The \(n(z, E_{\rm impl})\) data can either be accessed via Get_n(const Double_t energy, const Double_t z), i.e. via the implantation energy (given in eV), or via Get_n(const Int_t idx, const Double_t z) with the index idx which is the energy index of the collection. Both this routines deliver \(n(z, E_{\rm impl})\) in normalized form. The on via the energy index is slightly more efficient. The routine GetEnergyIndex(const Double_t energy) allows the get the proper energy index of the collection.

      +

      The rge-file objects are loaded internally (see below) and can easily be accessed via this interface. The \(n(z, E_{\rm impl})\) data can either be accessed via Get_n(const Double_t energy, const Double_t z), i.e. via the implantation energy (given in eV), or via Get_n(const Int_t idx, const Double_t z) with the index idx which is the energy index of the collection. Both this routines deliver \(n(z, E_{\rm impl})\) in normalized form. The on via the energy index is slightly more efficient. The routine GetEnergyIndex(const Double_t energy) allows the get the proper energy index of the collection.

      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

      -
      <?xml version="1.0" encoding="UTF-8"?>
      +
      <?xml version="1.0" encoding="UTF-8"?>
       <nonlocal xmlns="http://nemu.web.psi.ch/musrfit/nonlocal">
         <comment>
             Fourier and TrimSp information
      @@ -2586,17 +2759,23 @@ here:

      </nonlocal>
      -

      The relevant portion for the rge-file handler class is starting with the xml tag <trim_sp> and contains four further tags:

      +

      The relevant portion for the rge-file handler class is starting with the xml tag <trim_sp> and contains four further tags:

        -
      • <data_path>: Here the path where to find the rge-files needs to be given
      • -
      • <rge_fln_pre>: Start portion of the rge-file name.
      • -
      • <energy_list>: This will embrace all the implantation energies available.
      • -
      • <energy>: A single energy (in eV)
      • +
      • <data_path>: Here the path where to find the rge-files needs to be given
      • +
      • <rge_fln_pre>: Start portion of the rge-file name.
      • +
      • <energy_list>: This will embrace all the implantation energies available.
      • +
      • <energy>: A single energy (in eV)
      • +
      • <energy_vect> : Allows to write an energy list in a more compact form, +if the energy spacing between the different rge data sets is equal in distance. +The syntax here is attribute driven
      -

      In the given example the files are searched for in the sub-directory call profiles of the current directory. The rge-files have file names like -Sn_E1000.rge, Sn_E2000.rge, etc.

      +
      <energy_vector start="1000" stop="23000" step="1000"/>
      +
      +
      +

      In the given example the files are searched for in the sub-directory call profiles of the current directory. The rge-files have file names like +Sn_E1000.rge, Sn_E2000.rge, etc.

      In the aforementioned Nonlocal Meissner screening class, in the constructor you will find the following invocation of the rge-handler object:

      -
      PNL_PippardFitterGlobal::PNL_PippardFitterGlobal()
      +
      PNL_PippardFitterGlobal::PNL_PippardFitterGlobal()
       {
        ...
       
      @@ -2613,8 +2792,8 @@ here:

      }
      -

      And in the operator() function call which calculates the muon spin polarization, it will look like this

      -
      Double_t PNL_PippardFitter::operator()(Double_t t, const std::vector<Double_t> &param) const
      +

      And in the operator() function call which calculates the muon spin polarization, it will look like this

      +
      Double_t PNL_PippardFitter::operator()(Double_t t, const std::vector<Double_t> &param) const
       {
         ...
       
      @@ -2668,23 +2847,73 @@ here:

      -
      -
      +
      + +
      + + +
      - - +
    + +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file