Commit dfdd630d authored by Javier's avatar Javier

Documenter

format modifications in doc
parent 3254829a
// Generated by Documenter.jl
requirejs.config({
paths: {
'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/languages/julia.min',
'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.10.3/headroom.min',
'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min',
'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/contrib/auto-render.min',
'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min',
'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.10.3/jQuery.headroom.min',
'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min',
'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min',
'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/languages/julia-repl.min',
},
shim: {
"highlight-julia": {
"deps": [
"highlight"
]
},
"katex-auto-render": {
"deps": [
"katex"
]
},
"headroom-jquery": {
"deps": [
"jquery",
"headroom"
]
},
"highlight-julia-repl": {
"deps": [
"highlight"
]
}
}
});
////////////////////////////////////////////////////////////////////////////////
require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) {
$(document).ready(function() {
renderMathInElement(
document.body,
{
"delimiters": [
{
"left": "$",
"right": "$",
"display": false
},
{
"left": "$$",
"right": "$$",
"display": true
},
{
"left": "\\[",
"right": "\\]",
"display": true
}
]
}
);
})
})
////////////////////////////////////////////////////////////////////////////////
require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
$(document).ready(function() {
hljs.initHighlighting();
})
})
////////////////////////////////////////////////////////////////////////////////
require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) {
// Manages the top navigation bar (hides it when the user starts scrolling down on the
// mobile).
window.Headroom = Headroom; // work around buggy module loading?
$(document).ready(function() {
$('#documenter .docs-navbar').headroom({
"tolerance": {"up": 10, "down": 10},
});
})
})
////////////////////////////////////////////////////////////////////////////////
require(['jquery'], function($) {
// Modal settings dialog
$(document).ready(function() {
var settings = $('#documenter-settings');
$('#documenter-settings-button').click(function(){
settings.toggleClass('is-active');
});
// Close the dialog if X is clicked
$('#documenter-settings button.delete').click(function(){
settings.removeClass('is-active');
});
// Close dialog if ESC is pressed
$(document).keyup(function(e) {
if (e.keyCode == 27) settings.removeClass('is-active');
});
});
})
////////////////////////////////////////////////////////////////////////////////
require(['jquery'], function($) {
// Manages the showing and hiding of the sidebar.
$(document).ready(function() {
var sidebar = $("#documenter > .docs-sidebar");
var sidebar_button = $("#documenter-sidebar-button")
sidebar_button.click(function(ev) {
ev.preventDefault();
sidebar.toggleClass('visible');
if (sidebar.hasClass('visible')) {
// Makes sure that the current menu item is visible in the sidebar.
$("#documenter .docs-menu a.is-active").focus();
}
});
$("#documenter > .docs-main").bind('click', function(ev) {
if ($(ev.target).is(sidebar_button)) {
return;
}
if (sidebar.hasClass('visible')) {
sidebar.removeClass('visible');
}
});
})
// Resizes the package name / sitename in the sidebar if it is too wide.
// Inspired by: https://github.com/davatron5000/FitText.js
$(document).ready(function() {
e = $("#documenter .docs-autofit");
function resize() {
var L = parseInt(e.css('max-width'), 10);
var L0 = e.width();
if(L0 > L) {
var h0 = parseInt(e.css('font-size'), 10);
e.css('font-size', L * h0 / L0);
// TODO: make sure it survives resizes?
}
}
// call once and then register events
resize();
$(window).resize(resize);
$(window).on('orientationchange', resize);
});
// Scroll the navigation bar to the currently selected menu item
$(document).ready(function() {
var sidebar = $("#documenter .docs-menu").get(0);
var active = $("#documenter .docs-menu .is-active").get(0);
if(typeof active !== 'undefined') {
sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15;
}
})
})
////////////////////////////////////////////////////////////////////////////////
require(['jquery'], function($) {
function set_theme(theme) {
var active = null;
var disabled = [];
for (var i = 0; i < document.styleSheets.length; i++) {
var ss = document.styleSheets[i];
var themename = ss.ownerNode.getAttribute("data-theme-name");
if(themename === null) continue; // ignore non-theme stylesheets
// Find the active theme
if(themename === theme) active = ss;
else disabled.push(ss);
}
if(active !== null) {
active.disabled = false;
if(active.ownerNode.getAttribute("data-theme-primary") === null) {
document.getElementsByTagName('html')[0].className = "theme--" + theme;
} else {
document.getElementsByTagName('html')[0].className = "";
}
disabled.forEach(function(ss){
ss.disabled = true;
});
}
// Store the theme in localStorage
if(typeof(window.localStorage) !== "undefined") {
window.localStorage.setItem("documenter-theme", theme);
} else {
console.error("Browser does not support window.localStorage");
}
}
// Theme picker setup
$(document).ready(function() {
// onchange callback
$('#documenter-themepicker').change(function themepick_callback(ev){
var themename = $('#documenter-themepicker option:selected').attr('value');
set_theme(themename);
});
// Make sure that the themepicker displays the correct theme when the theme is retrieved
// from localStorage
if(typeof(window.localStorage) !== "undefined") {
var theme = window.localStorage.getItem("documenter-theme");
if(theme !== null) {
$('#documenter-themepicker option').each(function(i,e) {
e.selected = (e.value === theme);
})
} else {
$('#documenter-themepicker option').each(function(i,e) {
e.selected = $("html").hasClass(`theme--${e.value}`);
})
}
}
})
})
////////////////////////////////////////////////////////////////////////////////
require(['jquery'], function($) {
// update the version selector with info from the siteinfo.js and ../versions.js files
$(document).ready(function() {
var version_selector = $("#documenter .docs-version-selector");
var version_selector_select = $("#documenter .docs-version-selector select");
version_selector_select.change(function(x) {
target_href = version_selector_select.children("option:selected").get(0).value;
window.location.href = target_href;
});
// add the current version to the selector based on siteinfo.js, but only if the selector is empty
if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
var option = $("<option value='#' selected='selected'>" + DOCUMENTER_CURRENT_VERSION + "</option>");
version_selector_select.append(option);
}
if (typeof DOC_VERSIONS !== 'undefined') {
var existing_versions = version_selector_select.children("option");
var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
DOC_VERSIONS.forEach(function(each) {
var version_url = documenterBaseURL + "/../" + each;
var existing_id = $.inArray(each, existing_versions_texts);
// if not already in the version selector, add it as a new option,
// otherwise update the old option with the URL and enable it
if (existing_id == -1) {
var option = $("<option value='" + version_url + "'>" + each + "</option>");
version_selector_select.append(option);
} else {
var option = existing_versions[existing_id];
option.value = version_url;
option.disabled = false;
}
});
}
// only show the version selector if the selector has been populated
if (version_selector_select.children("option").length > 0) {
version_selector.toggleClass("visible");
}
})
})
// Generated by Documenter.jl
requirejs.config({
paths: {
'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.6/lunr.min',
'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min',
'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min',
}
});
////////////////////////////////////////////////////////////////////////////////
require(['jquery', 'lunr', 'lodash'], function($, lunr, _) {
$(document).ready(function() {
// parseUri 1.2.2
// (c) Steven Levithan <stevenlevithan.com>
// MIT License
function parseUri (str) {
var o = parseUri.options,
m = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
uri = {},
i = 14;
while (i--) uri[o.key[i]] = m[i] || "";
uri[o.q.name] = {};
uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
if ($1) uri[o.q.name][$1] = $2;
});
return uri;
};
parseUri.options = {
strictMode: false,
key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
q: {
name: "queryKey",
parser: /(?:^|&)([^&=]*)=?([^&]*)/g
},
parser: {
strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
}
};
$("#search-form").submit(function(e) {
e.preventDefault()
})
// list below is the lunr 2.1.3 list minus the intersect with names(Base)
// (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with)
// ideally we'd just filter the original list but it's not available as a variable
lunr.stopWordFilter = lunr.generateStopWordFilter([
'a',
'able',
'about',
'across',
'after',
'almost',
'also',
'am',
'among',
'an',
'and',
'are',
'as',
'at',
'be',
'because',
'been',
'but',
'by',
'can',
'cannot',
'could',
'dear',
'did',
'does',
'either',
'ever',
'every',
'from',
'got',
'had',
'has',
'have',
'he',
'her',
'hers',
'him',
'his',
'how',
'however',
'i',
'if',
'into',
'it',
'its',
'just',
'least',
'like',
'likely',
'may',
'me',
'might',
'most',
'must',
'my',
'neither',
'no',
'nor',
'not',
'of',
'off',
'often',
'on',
'or',
'other',
'our',
'own',
'rather',
'said',
'say',
'says',
'she',
'should',
'since',
'so',
'some',
'than',
'that',
'the',
'their',
'them',
'then',
'there',
'these',
'they',
'this',
'tis',
'to',
'too',
'twas',
'us',
'wants',
'was',
'we',
'were',
'what',
'when',
'who',
'whom',
'why',
'will',
'would',
'yet',
'you',
'your'
])
// add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
// would not find anything if searching for "add!", only for the entire qualification
lunr.tokenizer.separator = /[\s\-\.]+/
// custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
lunr.trimmer = function (token) {
return token.update(function (s) {
return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
})
}
lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
var index = lunr(function () {
this.ref('location')
this.field('title',{boost: 100})
this.field('text')
documenterSearchIndex['docs'].forEach(function(e) {
this.add(e)
}, this)
})
var store = {}
documenterSearchIndex['docs'].forEach(function(e) {
store[e.location] = {title: e.title, category: e.category, page: e.page}
})
$(function(){
searchresults = $('#documenter-search-results');
searchinfo = $('#documenter-search-info');
searchbox = $('#documenter-search-query');
function update_search(querystring) {
tokens = lunr.tokenizer(querystring)
results = index.query(function (q) {
tokens.forEach(function (t) {
q.term(t.toString(), {
fields: ["title"],
boost: 100,
usePipeline: true,
editDistance: 0,
wildcard: lunr.Query.wildcard.NONE
})
q.term(t.toString(), {
fields: ["title"],
boost: 10,
usePipeline: true,
editDistance: 2,
wildcard: lunr.Query.wildcard.NONE
})
q.term(t.toString(), {
fields: ["text"],
boost: 1,
usePipeline: true,
editDistance: 0,
wildcard: lunr.Query.wildcard.NONE
})
})
})
searchinfo.text("Number of results: " + results.length)
searchresults.empty()
results.forEach(function(result) {
data = store[result.ref]
link = $('<a class="docs-label">'+data.title+'</a>')
link.attr('href', documenterBaseURL+'/'+result.ref)
if (data.category != "page"){
cat = $('<span class="docs-category">('+data.category+', '+data.page+')</span>')
} else {
cat = $('<span class="docs-category">('+data.category+')</span>')
}
li = $('<li>').append(link).append(" ").append(cat)
searchresults.append(li)
})
}
function update_search_box() {
querystring = searchbox.val()
update_search(querystring)
}
searchbox.keyup(_.debounce(update_search_box, 250))
searchbox.change(update_search_box)
search_query_uri = parseUri(window.location).queryKey["q"]
if(search_query_uri !== undefined) {
search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20'))
searchbox.val(search_query)
}
update_search_box();
})
})
})
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
// Small function to quickly swap out themes. Gets put into the <head> tag..
function set_theme_from_local_storage() {
// Intialize the theme to null, which means default
var theme = null;
// If the browser supports the localstorage and is not disabled then try to get the
// documenter theme
if(window.localStorage != null) {
// Get the user-picked theme from localStorage. May be `null`, which means the default
// theme.
theme = window.localStorage.getItem("documenter-theme");
}
// Check if the browser supports user color preference
var darkPreference = false;
// Check if the users preference is for dark color scheme
if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) {
darkPreference = true;
}
// Initialize a few variables for the loop:
//
// - active: will contain the index of the theme that should be active. Note that there
// is no guarantee that localStorage contains sane values. If `active` stays `null`
// we either could not find the theme or it is the default (primary) theme anyway.
// Either way, we then need to stick to the primary theme.
//
// - disabled: style sheets that should be disabled (i.e. all the theme style sheets
// that are not the currently active theme)
var active = null; var disabled = []; var darkTheme = null;
for (var i = 0; i < document.styleSheets.length; i++) {
var ss = document.styleSheets[i];
// The <link> tag of each style sheet is expected to have a data-theme-name attribute
// which must contain the name of the theme. The names in localStorage much match this.
var themename = ss.ownerNode.getAttribute("data-theme-name");
// attribute not set => non-theme stylesheet => ignore
if(themename === null) continue;
// To distinguish the default (primary) theme, it needs to have the data-theme-primary
// attribute set.
var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null);
// Check if the theme is primary dark theme
var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null);
// If ss is for dark theme then set the value of darkTheme to the name of the theme
if(isDarkTheme) darkTheme = themename;
// If we find a matching theme (and it's not the default), we'll set active to non-null
if(themename === theme) active = i;
// Store the style sheets of inactive themes so that we could disable them
if(themename !== theme) disabled.push(ss);
}
if(active !== null) {
// If we did find an active theme, we'll (1) add the theme--$(theme) class to <html>
document.getElementsByTagName('html')[0].className = "theme--" + theme;
// and (2) disable all the other theme stylesheets
disabled.forEach(function(ss){
ss.disabled = true;
});
}
else if(darkTheme !== null && darkPreference === true) {
// If we did find an active theme, we'll (1) add the theme--$(theme) class to <html>
document.getElementsByTagName('html')[0].className = "theme--" + darkTheme;
// and (2) disable all the other theme stylesheets
disabled.forEach(function(ss){
if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) {
ss.disabled = true;
}
});
}
}
set_theme_from_local_storage();
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>DOCUMENTATION · juobs Documentation</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="assets/documenter.js"></script><script src="siteinfo.js"></script><script src="../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit">juobs Documentation</span></div><form class="docs-search" action="search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li class="is-active"><a class="tocitem" href>DOCUMENTATION</a><ul class="internal"><li><a class="tocitem" href="#READER"><span>READER</span></a></li><li><a class="tocitem" href="#TOOLS"><span>TOOLS</span></a></li><li><a class="tocitem" href="#LINEAR-ALGEBRA"><span>LINEAR ALGEBRA</span></a></li><li><a class="tocitem" href="#OBSERVABLES"><span>OBSERVABLES</span></a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>DOCUMENTATION</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>DOCUMENTATION</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com//blob/master/docs/src/index.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="DOCUMENTATION"><a class="docs-heading-anchor" href="#DOCUMENTATION">DOCUMENTATION</a><a id="DOCUMENTATION-1"></a><a class="docs-heading-anchor-permalink" href="#DOCUMENTATION" title="Permalink"></a></h1><ul><li><a href="#DOCUMENTATION">DOCUMENTATION</a></li><ul><li><a href="#READER">READER</a></li><li><a href="#TOOLS">TOOLS</a></li><li><a href="#LINEAR-ALGEBRA">LINEAR ALGEBRA</a></li><li><a href="#OBSERVABLES">OBSERVABLES</a></li></ul></ul><h2 id="READER"><a class="docs-heading-anchor" href="#READER">READER</a><a id="READER-1"></a><a class="docs-heading-anchor-permalink" href="#READER" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="juobs.read_mesons" href="#juobs.read_mesons"><code>juobs.read_mesons</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">read_mesons(path::String, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)
read_mesons(path::Vector{String}, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)</code></pre><p>This function read a mesons dat file at a given path and returns a vector of <code>CData</code> structures for different masses and Dirac structures. Dirac structures <code>g1</code> and/or <code>g2</code> can be passed as string arguments in order to filter correaltors. ADerrors id can be specified as argument. If is not specified, the <code>id</code> is fixed according to the ensemble name (example: &quot;H400&quot;-&gt; id = 400)</p><p>Examples:</p><pre><code class="language-">read_mesons(path)
read_mesons(path, &quot;G5&quot;)
read_mesons(path, nothing, &quot;G5&quot;)
read_mesons(path, &quot;G5&quot;, &quot;G5&quot;)
read_mesons(path, &quot;G5&quot;, &quot;G5&quot;, id=1)
read_mesons([path1, path2], &quot;G5&quot;, &quot;G5&quot;)</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.read_ms" href="#juobs.read_ms"><code>juobs.read_ms</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">read_ms(path::String; id::Union{Int64, Nothing}=nothing, dtr::Int64=1)</code></pre><p>Reads openQCD ms dat files at a given path. This method return YData: </p><ul><li><p><code>t(t)</code>: flow time values</p></li><li><p><code>Ysl(icfg, x0, t)</code>: the time-slice sums of the densities of the Yang-Mills action </p></li><li><p><code>vtr</code>: vector that contains trajectory number</p></li><li><p><code>id</code>: ensmble id</p></li></ul><p>Examples:</p><pre><code class="language-">Y = read_ms(path)</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.read_ms1" href="#juobs.read_ms1"><code>juobs.read_ms1</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">read_ms1(path::String; v::String=&quot;1.2&quot;)</code></pre><p>Reads openQCD ms1 dat files at a given path. This method returns a matrix <code>W[irw, icfg]</code> that contains the reweighting factors, where <code>irw</code> is the <code>rwf</code> index and icfg the configuration number. The function is compatible with the output files of openQCD v=1.2, 1.4 and 1.6. Version can be specified as argument.</p><p>Examples:</p><pre><code class="language-">read_ms1(path)
read_ms1(path, v=&quot;1.4&quot;)
read_ms1(path, v=&quot;1.6&quot;)</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.read_md" href="#juobs.read_md"><code>juobs.read_md</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">read_md(path::String)</code></pre><p>Reads openQCD pbp.dat files at a given path. This method returns a matrix <code>md[irw, icfg]</code> that contains the derivatives <span>$dS/dm$</span>, where <span>$md[irw=1] = dS/dm_l$</span> and <span>$md[irw=2] = dS/dm_s$</span></p><p><span>$Seff = -tr(log(D+m))$</span></p><p><span>$dSeff/ dm = -tr((D+m)^-1)$</span></p><p>Examples:</p><pre><code class="language-">md = read_md(path)</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.truncate_data!" href="#juobs.truncate_data!"><code>juobs.truncate_data!</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">truncate_data!(data::YData, nc::Int64)
truncate_data!(data::Vector{YData}, nc::Vector{Int64})
truncate_data!(data::Vector{CData}, nc::Int64)
truncate_data!(data::Vector{Vector{CData}}, nc::Vector{Int64})</code></pre><p>Truncates the output of <code>read_mesons</code> and <code>read_ms</code> taking the first <code>nc</code> configurations.</p><p>Examples:</p><pre><code class="language-">#Single replica
dat = read_mesons(path, &quot;G5&quot;, &quot;G5&quot;)
Y = read_ms(path)
truncate_data!(dat, nc)
truncate_data!(Y, nc)
#Two replicas
dat = read_mesons([path1, path2], &quot;G5&quot;, &quot;G5&quot;)
Y = read_ms.([path1_ms, path2_ms])
truncate_data!(dat, [nc1, nc2])
truncate_data!(Y, [nc1, nc2])</code></pre></div></section></article><h2 id="TOOLS"><a class="docs-heading-anchor" href="#TOOLS">TOOLS</a><a id="TOOLS-1"></a><a class="docs-heading-anchor-permalink" href="#TOOLS" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="juobs.corr_obs" href="#juobs.corr_obs"><code>juobs.corr_obs</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">corr_obs(cdata::CData; real::Bool=true, rw::Union{Array{Float64, 2}, Nothing}=nothing, L::Int64=1)
corr_obs(cdata::Array{CData, 1}; real::Bool=true, rw::Union{Array{Array{Float64, 2}, 1}, Nothing}=nothing, L::Int64=1)</code></pre><p>Creates a <code>Corr</code> struct with the given <code>CData</code> struct <code>cdata</code> (<code>read_mesons</code>) for a single replica. An array of <code>CData</code> can be passed as argument for multiple replicas.</p><p>The flag <code>real</code> select the real or imaginary part of the correlator. If <code>rw</code> is specified, the method applies reweighting. <code>rw</code> is passed as a matrix of Float64 (<code>read_ms1</code>) The correlator can be normalized with the volume factor if <code>L</code> is fixed.</p><pre><code class="language-">#Single replica
data = read_mesons(path, &quot;G5&quot;, &quot;G5&quot;)
rw = read_ms1(path_rw)
corr_pp = corr_obs.(data)
corr_pp_r = corr_obs.(data, rw=rw)
#Two replicas
data = read_mesons([path_r1, path_r2], &quot;G5&quot;, &quot;G5&quot;)
rw1 = read_ms1(path_rw1)
rw2 = read_ms1(path_rw2)
corr_pp = corr_obs.(data)
corr_pp_r = corr_obs.(data, rw=[rw1, rw2])</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.md_sea" href="#juobs.md_sea"><code>juobs.md_sea</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">md_sea(a::uwreal, md::Vector{Matrix{Float64}}, ws::ADerrors.wspace=ADerrors.wsg)</code></pre><p>Computes the derivative of an observable A with respect to the sea quark masses.</p><p><span>$d &lt;A&gt; / dm(sea) = \sum_i (d&lt;A&gt; / d&lt;O_i&gt;) * (d&lt;O_i&gt; / dm(sea))$</span> </p><p><span>$d &lt;O&gt; / dm(sea) = &lt;O&gt; &lt;dS/dm&gt; - &lt;O dS/dm&gt; = - &lt;(O - &lt;O&gt;) (dS/dm - &lt;dS/dm&gt;)&gt;$</span> </p><p>where <span>$O_i$</span> are primary observables </p><p>md is a vector that contains the derivative of the action S with respect to the sea quark masses for each replica. md[irep][irw, icfg]</p><p>md_sea returns a tuple of uwreal observables (dA/dml, dA/dms)|sea, where ml and ms are the light and strange quark masses.</p><pre><code class="language-">#Single replica
data = read_mesons(path, &quot;G5&quot;, &quot;G5&quot;)
md = read_md(path_md)
corr_pp = corr_obs.(data)
m = meff(corr_pp[1], plat)
m_mdl, m_mds = md_sea(m, [md], ADerrors.wsg)
m_shifted = m + 2 * dml * m_mdl + dms * m_mds
#Two replicas
data = read_mesons([path_r1, path_r2], &quot;G5&quot;, &quot;G5&quot;)
md1 = read_md(path_md1)
md2 = read_md(path_md2)
corr_pp = corr_obs.(data)
m = meff(corr_pp[1], plat)
m_mdl, m_mds = md_sea(m, [md1, md2], ADerrors.wsg)
m_shifted = m + 2 * dml * m_mdl + dms * m_mds</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.lin_fit" href="#juobs.lin_fit"><code>juobs.lin_fit</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">lin_fit(x::Vector{&lt;:Real}, y::Vector{uwreal})</code></pre><p>Computes a linear fit of uwreal data points y. This method return uwreal fit parameters and chisqexpected.</p><pre><code class="language-">fitp, csqexp = lin_fit(phi2, m2)
m2_phys = fitp[1] + fitp[2] * phi2_phys</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.fit_routine" href="#juobs.fit_routine"><code>juobs.fit_routine</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">fit_routine(model::Function, xdata::Array{&lt;:Real}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing)
fit_routine(model::Function, xdata::Array{uwreal}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing, covar::Bool=false)</code></pre><p>Given a model function with a number param of parameters and an array of <code>uwreal</code>, this function fit ydata with the given <code>model</code> and print fit information The method return an array <code>upar</code> with the best fit parameters with their errors. The flag <code>wpm</code> is an optional array of Float64 of lenght 4. The first three paramenters specify the criteria to determine the summation windows:</p><ul><li><p><code>vp[1]</code>: The autocorrelation function is summed up to <span>$t = round(vp[1])$</span>.</p></li><li><p><code>vp[2]</code>: The sumation window is determined using U. Wolff poposal with <span>$S_\tau = wpm[2]$</span></p></li><li><p><code>vp[3]</code>: The autocorrelation function <span>$\Gamma(t)$</span> is summed up a point where its error <span>$\delta\Gamma(t)$</span> is a factor <code>vp[3]</code> times larger than the signal.</p></li></ul><p>An additional fourth parameter <code>vp[4]</code>, tells ADerrors to add a tail to the error with <span>$\tau_{exp} = wpm[4]$</span>. Negative values of <code>wpm[1:4]</code> are ignored and only one component of <code>wpm[1:3]</code> needs to be positive. If the flag <code>covar</code>is set to true, <code>fit_routine</code> takes into account covariances between x and y for each data point.</p><pre><code class="language-">@. model(x,p) = p[1] + p[2] * exp(-(p[3]-p[1])*x)
@. model2(x,p) = p[1] + p[2] * x[:, 1] + (p[3] + p[4] * x[:, 1]) * x[:, 2]
fit_routine(model, xdata, ydata, param=3)
fit_routine(model, xdata, ydata, param=3, covar=true)</code></pre></div></section></article><h2 id="LINEAR-ALGEBRA"><a class="docs-heading-anchor" href="#LINEAR-ALGEBRA">LINEAR ALGEBRA</a><a id="LINEAR-ALGEBRA-1"></a><a class="docs-heading-anchor-permalink" href="#LINEAR-ALGEBRA" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="juobs.uweigvals" href="#juobs.uweigvals"><code>juobs.uweigvals</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">uweigvals(a::Matrix{uwreal}; iter = 30)
uweigvals(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)</code></pre><p>This function computes the eigenvalues of a matrix of uwreal objects. If a second matrix b is given as input, it returns the generalised eigenvalues instead. It takes as input:</p><ul><li><p><code>a::Matrix{uwreal}</code> : a matrix of uwreal</p></li><li><p><code>b::Matrix{uwreal}</code> : a matrix of uwreal, optional</p></li></ul><p>It returns:</p><ul><li><code>res = Vector{uwreal}</code>: a vector where each elements is an eigenvalue </li></ul></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.uweigvecs" href="#juobs.uweigvecs"><code>juobs.uweigvecs</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">uweigvecs(a::Matrix{uwreal}; iter = 30)
uweigvecs(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)</code></pre><p>This function computes the eigenvectors of a matrix of uwreal objects. If a second matrix b is given as input, it returns the generalised eigenvectors instead. It takes as input:</p><ul><li><p><code>a::Matrix{uwreal}</code> : a matrix of uwreal</p></li><li><p><code>b::Matrix{uwreal}</code> : a matrix of uwreal, optional</p></li></ul><p>It returns:</p><ul><li><code>res = Matrix{uwreal}</code>: a matrix where each column is an eigenvector </li></ul></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.uweigen" href="#juobs.uweigen"><code>juobs.uweigen</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">uweigen(a::Matrix{uwreal}; iter = 30)
uweigen(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)</code></pre><p>This function computes the eigenvalues and the eigenvectors of a matrix of uwreal objects. If a second matrix b is given as input, it returns the generalised eigenvalues and eigenvectors instead. It takes as input:</p><ul><li><p>`a::Matrix{uwreal} : a matrix of uwreal</p></li><li><p><code>b::Matrix{uwreal}</code> : a matrix of uwreal, optional</p></li></ul><p>It returns:</p><ul><li><code>evals = Vector{uwreal}</code>: a vector where each elements is an eigenvalue </li><li><code>evecs = Matrix{uwreal}</code>: a matrix where the i-th column is the eigenvector of the i-th eigenvalue</li></ul></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.get_matrix" href="#juobs.get_matrix"><code>juobs.get_matrix</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">get_matrix(corr_diag::Vector{Array}, corr_upper::Vector{Array} )</code></pre><p>This method returns an array of dim <code>T</code> where each element is a symmetrix matrix of dimension n of <code>uwreal</code> correlators at fixed time i=1..T. It takes as input:</p><p><code>corr_diag</code>: vector of dimension n of correlators liying on the diagonal </p><p><code>corr_upper</code>: vector of correlators liying on the upper diagonal.</p><p>Each correlator is an vector of uwreal variables of dimension <code>T</code>.</p><p>Example:</p><pre><code class="language-">for i in 1:n
a[i,i] = Vector{uwreal} # vector of uwreal variables of dimension T. They will constitute the diagonal elements of the matrices
for i in 1:n-1
for j in i+1:n
a[i,j] = Vector{uwreal} # vector of uwreal variables of dimension T. They will constitute the upper diagonal elements of the matrices. A matrix
of dimension n*n has n(n-1)/2 upper diagonal elements.
Assume n=4
diagonal = Vector{Array}()
push!(diagonal, a[1,1],a[2,2],a[3,3],a[4,4])
upsize = Vector{Array}()
push!(upsize, a[1,2], a[1,3], a[1,4], a[2,3], a[2,4], a[3,4])
array_of_matrices = get_matrix(diagonal, upsize)
Julia&gt; T-element Array{Array,1}
size(array_of_matrices)
Julia&gt; (T,)
array_of_matrices[t] # t in 1:T
Julia&gt; 4*4 Array{uwreal,2}</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.energies" href="#juobs.energies"><code>juobs.energies</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">energies(evals::Vector{Array})</code></pre><p>Given a vector where each entry <code>evals[t]</code> is a <code>uwreal</code> array of eigenvalues, this method computes the effective energies of the first N states, where <code>N=dim(evals[t])</code>. The index <code>t</code> here runs from 1:T=lenght(evals), while the index <code>i</code> stands for the number of energy levels computed: i = length(evals[t]) It returns a vector array <code>eff_en</code> where each entry <code>eff_en[t]</code> contains the first N states energies as uwreal objects </p></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.getall_eigvals" href="#juobs.getall_eigvals"><code>juobs.getall_eigvals</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">getall_eigvals(a::Vector{Matrix}, t0; iter=30 )</code></pre><p>This function solves a GEVP problem, returning the eigenvalues, for a list of matrices, taking as generalised matrix the one at index t0, i.e:</p><p><span>$C(t_i)v_i = λ_i C(t_0) v_i$</span>, with i=1:lenght(a)</p><p>It takes as input:</p><ul><li><p><code>a::Vector{Matrix}</code> : a vector of matrices</p></li><li><p><code>t0::Int64</code> : idex value at which the fixed matrix is taken</p></li><li><p><code>iter=30</code> : the number of iterations of the qr algorithm used to extract the eigenvalues </p></li></ul><p>It returns:</p><ul><li><code>res</code> = Vector{Vector{uwreal}}</li></ul><p>where <code>res[i]</code> are the generalised eigenvalues of the i-th matrix of the input array. </p><p>Examples:</p><pre><code class="language-">mat_array = get_matrix(diag, upper_diag)
evals = getall_eigvals(mat_array, 5)</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.getall_eigvecs" href="#juobs.getall_eigvecs"><code>juobs.getall_eigvecs</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">getall_eigvecs(a::Vector{Matrix}, delta_t; iter=30 )</code></pre><p>This function solves a GEVP problem, returning the eigenvectors, for a list of matrices.</p><p><span>$C(t_i)v_i = λ_i C(t_i-\delta_t) v_i$</span>, with i=1:lenght(a)</p><p>Here <code>delta_t</code> is the time shift within the two matrices of the problem, and is kept fixed. It takes as input:</p><ul><li><p><code>a::Vector{Matrix}</code> : a vector of matrices</p></li><li><p><code>delta_t::Int64</code> : the fixed time shift t-t_0</p></li><li><p><code>iter=30</code> : the number of iterations of the qr algorithm used to extract the eigenvalues </p></li></ul><p>It returns:</p><ul><li><code>res</code> = Vector{Matrix{uwreal}}</li></ul><p>where each <code>res[i]</code> is a matrix with the eigenvectors as columns Examples:</p><pre><code class="language-">mat_array = get_matrix(diag, upper_diag)
evecs = getall_eigvecs(mat_array, 5)</code></pre></div></section></article><h2 id="OBSERVABLES"><a class="docs-heading-anchor" href="#OBSERVABLES">OBSERVABLES</a><a id="OBSERVABLES-1"></a><a class="docs-heading-anchor-permalink" href="#OBSERVABLES" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="juobs.meff" href="#juobs.meff"><code>juobs.meff</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">meff(corr::Vector{uwreal}, plat::Vector{Int64}; pl::Bool=true, data::Bool=false )
meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)</code></pre><p>Computes effective mass for a given correlator corr at a given plateau <code>plat</code>. Correlator can be passed as an <code>Corr</code> struct or <code>Vector{uwreal}</code>.</p><p>The flags <code>pl</code> and <code>data</code> allow to show the plots and return data as an extra result.</p><pre><code class="language-">data = read_mesons(path, &quot;G5&quot;, &quot;G5&quot;)
corr_pp = corr_obs.(data)
m = meff(corr_pp[1], [50, 60], pl=false)</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.dec_const_pcvc" href="#juobs.dec_const_pcvc"><code>juobs.dec_const_pcvc</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">dec_const_pcvc(corr::Vector{uwreal}, plat::Vector{Int64}, m::uwreal, mu::Vector{Float64}, y0::Int64 ; pl::Bool=true, data::Bool=false)meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)
dec_const_pcvc(corr::Corr, plat::Vector{Int64}, m::uwreal; pl::Bool=true, data::Bool=false)</code></pre><p>Computes decay constant using the PCVC relation for twisted mass fermions. The decay constant is computed in the plateau <code>plat</code>. Correlator can be passed as an <code>Corr</code> struct or <code>Vector{uwreal}</code>. If it is passed as a uwreal vector, vector of twisted masses <code>mu</code> and source position <code>y0</code> must be specified.</p><p>The flags <code>pl</code> and <code>data</code> allow to show the plots and return data as an extra result.</p><pre><code class="language-">data = read_mesons(path, &quot;G5&quot;, &quot;G5&quot;)
corr_pp = corr_obs.(data)
m = meff(corr_pp[1], [50, 60], pl=false)
f = dec_const_pcvc(corr_pp[1], [50, 60], m, pl=false)</code></pre></div></section></article><article class="docstring"><header><a class="docstring-binding" id="juobs.comp_t0" href="#juobs.comp_t0"><code>juobs.comp_t0</code></a><span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">comp_t0(Y::YData, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Matrix{Float64}, Nothing}=nothing, npol::Int64=2)
comp_t0(Y::Vector{YData}, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Vector{Matrix{Float64}}, Nothing}=nothing, npol::Int64=2)</code></pre><p>Computes <code>t0</code> using the energy density of the action <code>Ysl</code>(Yang-Mills action). <code>t0</code> is computed in the plateau <code>plat</code>. A polynomial interpolation in <code>t</code> is performed to find <code>t0</code>, where <code>npol</code> is the degree of the polynomial (linear fit by default)</p><p>The flag <code>pl</code> allows to show the plot.</p><pre><code class="language-">#Single replica
Y = read_ms(path)
rw = read_ms(path_rw)
t0 = comp_t0(Y, [38, 58], L=32)
t0_r = comp_t0(Y, [38, 58], L=32, rw=rw)
#Two replicas
Y1 = read_ms(path1)
Y2 = read_ms(path2)
rw1 = read_ms(path_rw1)
rw2 = read_ms(path_rw2)
t0 = comp_t0([Y1, Y2], [38, 58], L=32, pl=true)
t0_r = comp_t0(Y, [38, 58], L=32, rw=[rw1, rw2], pl=true)
</code></pre></div></section></article></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 23 February 2021 19:07">Tuesday 23 February 2021</span>. Using Julia version 1.5.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · juobs Documentation</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit">juobs Documentation</span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">DOCUMENTATION</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 23 February 2021 19:07">Tuesday 23 February 2021</span>. Using Julia version 1.5.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html>
var documenterSearchIndex = {"docs":
[{"location":"#DOCUMENTATION","page":"DOCUMENTATION","title":"DOCUMENTATION","text":"","category":"section"},{"location":"","page":"DOCUMENTATION","title":"DOCUMENTATION","text":"","category":"page"},{"location":"#READER","page":"DOCUMENTATION","title":"READER","text":"","category":"section"},{"location":"","page":"DOCUMENTATION","title":"DOCUMENTATION","text":"read_mesons\nread_ms\nread_ms1\nread_md\ntruncate_data!","category":"page"},{"location":"#juobs.read_mesons","page":"DOCUMENTATION","title":"juobs.read_mesons","text":"read_mesons(path::String, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)\n\nread_mesons(path::Vector{String}, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)\n\nThis function read a mesons dat file at a given path and returns a vector of CData structures for different masses and Dirac structures. Dirac structures g1 and/or g2 can be passed as string arguments in order to filter correaltors. ADerrors id can be specified as argument. If is not specified, the id is fixed according to the ensemble name (example: \"H400\"-> id = 400)\n\nExamples:\n\nread_mesons(path)\nread_mesons(path, \"G5\")\nread_mesons(path, nothing, \"G5\")\nread_mesons(path, \"G5\", \"G5\")\nread_mesons(path, \"G5\", \"G5\", id=1)\nread_mesons([path1, path2], \"G5\", \"G5\")\n\n\n\n\n\n","category":"function"},{"location":"#juobs.read_ms","page":"DOCUMENTATION","title":"juobs.read_ms","text":"read_ms(path::String; id::Union{Int64, Nothing}=nothing, dtr::Int64=1)\n\nReads openQCD ms dat files at a given path. This method return YData: \n\nt(t): flow time values\nYsl(icfg, x0, t): the time-slice sums of the densities of the Yang-Mills action \nvtr: vector that contains trajectory number\nid: ensmble id\n\nExamples:\n\nY = read_ms(path)\n\n\n\n\n\n","category":"function"},{"location":"#juobs.read_ms1","page":"DOCUMENTATION","title":"juobs.read_ms1","text":"read_ms1(path::String; v::String=\"1.2\")\n\nReads openQCD ms1 dat files at a given path. This method returns a matrix W[irw, icfg] that contains the reweighting factors, where irw is the rwf index and icfg the configuration number. The function is compatible with the output files of openQCD v=1.2, 1.4 and 1.6. Version can be specified as argument.\n\nExamples:\n\nread_ms1(path)\nread_ms1(path, v=\"1.4\")\nread_ms1(path, v=\"1.6\")\n\n\n\n\n\n","category":"function"},{"location":"#juobs.read_md","page":"DOCUMENTATION","title":"juobs.read_md","text":"read_md(path::String)\n\nReads openQCD pbp.dat files at a given path. This method returns a matrix md[irw, icfg] that contains the derivatives dSdm, where mdirw=1 = dSdm_l and mdirw=2 = dSdm_s\n\nSeff = -tr(log(D+m))\n\ndSeff dm = -tr((D+m)^-1)\n\nExamples:\n\nmd = read_md(path)\n\n\n\n\n\n","category":"function"},{"location":"#juobs.truncate_data!","page":"DOCUMENTATION","title":"juobs.truncate_data!","text":"truncate_data!(data::YData, nc::Int64)\n\ntruncate_data!(data::Vector{YData}, nc::Vector{Int64})\n\ntruncate_data!(data::Vector{CData}, nc::Int64)\n\ntruncate_data!(data::Vector{Vector{CData}}, nc::Vector{Int64})\n\nTruncates the output of read_mesons and read_ms taking the first nc configurations.\n\nExamples:\n\n#Single replica\ndat = read_mesons(path, \"G5\", \"G5\")\nY = read_ms(path)\ntruncate_data!(dat, nc)\ntruncate_data!(Y, nc)\n\n#Two replicas\ndat = read_mesons([path1, path2], \"G5\", \"G5\")\nY = read_ms.([path1_ms, path2_ms])\ntruncate_data!(dat, [nc1, nc2])\ntruncate_data!(Y, [nc1, nc2])\n\n\n\n\n\n","category":"function"},{"location":"#TOOLS","page":"DOCUMENTATION","title":"TOOLS","text":"","category":"section"},{"location":"","page":"DOCUMENTATION","title":"DOCUMENTATION","text":"corr_obs\nmd_sea\nlin_fit\nfit_routine","category":"page"},{"location":"#juobs.corr_obs","page":"DOCUMENTATION","title":"juobs.corr_obs","text":"corr_obs(cdata::CData; real::Bool=true, rw::Union{Array{Float64, 2}, Nothing}=nothing, L::Int64=1)\n\ncorr_obs(cdata::Array{CData, 1}; real::Bool=true, rw::Union{Array{Array{Float64, 2}, 1}, Nothing}=nothing, L::Int64=1)\n\nCreates a Corr struct with the given CData struct cdata (read_mesons) for a single replica. An array of CData can be passed as argument for multiple replicas.\n\nThe flag real select the real or imaginary part of the correlator. If rw is specified, the method applies reweighting. rw is passed as a matrix of Float64 (read_ms1) The correlator can be normalized with the volume factor if L is fixed.\n\n#Single replica\ndata = read_mesons(path, \"G5\", \"G5\")\nrw = read_ms1(path_rw)\ncorr_pp = corr_obs.(data)\ncorr_pp_r = corr_obs.(data, rw=rw)\n\n#Two replicas\ndata = read_mesons([path_r1, path_r2], \"G5\", \"G5\")\nrw1 = read_ms1(path_rw1)\nrw2 = read_ms1(path_rw2)\n\ncorr_pp = corr_obs.(data)\ncorr_pp_r = corr_obs.(data, rw=[rw1, rw2])\n\n\n\n\n\n","category":"function"},{"location":"#juobs.md_sea","page":"DOCUMENTATION","title":"juobs.md_sea","text":"md_sea(a::uwreal, md::Vector{Matrix{Float64}}, ws::ADerrors.wspace=ADerrors.wsg)\n\nComputes the derivative of an observable A with respect to the sea quark masses.\n\nd A dm(sea) = sum_i (dA dO_i) * (dO_i dm(sea)) \n\nd O dm(sea) = O dSdm - O dSdm = - (O - O) (dSdm - dSdm) \n\nwhere O_i are primary observables \n\nmd is a vector that contains the derivative of the action S with respect to the sea quark masses for each replica. md[irep][irw, icfg]\n\nmd_sea returns a tuple of uwreal observables (dA/dml, dA/dms)|sea, where ml and ms are the light and strange quark masses.\n\n#Single replica\ndata = read_mesons(path, \"G5\", \"G5\")\nmd = read_md(path_md)\ncorr_pp = corr_obs.(data)\nm = meff(corr_pp[1], plat)\nm_mdl, m_mds = md_sea(m, [md], ADerrors.wsg)\nm_shifted = m + 2 * dml * m_mdl + dms * m_mds\n\n#Two replicas\ndata = read_mesons([path_r1, path_r2], \"G5\", \"G5\")\nmd1 = read_md(path_md1)\nmd2 = read_md(path_md2)\n\ncorr_pp = corr_obs.(data)\nm = meff(corr_pp[1], plat)\nm_mdl, m_mds = md_sea(m, [md1, md2], ADerrors.wsg)\nm_shifted = m + 2 * dml * m_mdl + dms * m_mds\n\n\n\n\n\n","category":"function"},{"location":"#juobs.lin_fit","page":"DOCUMENTATION","title":"juobs.lin_fit","text":"lin_fit(x::Vector{<:Real}, y::Vector{uwreal})\n\nComputes a linear fit of uwreal data points y. This method return uwreal fit parameters and chisqexpected.\n\nfitp, csqexp = lin_fit(phi2, m2)\nm2_phys = fitp[1] + fitp[2] * phi2_phys\n\n\n\n\n\n","category":"function"},{"location":"#juobs.fit_routine","page":"DOCUMENTATION","title":"juobs.fit_routine","text":"fit_routine(model::Function, xdata::Array{<:Real}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing)\n\nfit_routine(model::Function, xdata::Array{uwreal}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing, covar::Bool=false)\n\nGiven a model function with a number param of parameters and an array of uwreal, this function fit ydata with the given model and print fit information The method return an array upar with the best fit parameters with their errors. The flag wpm is an optional array of Float64 of lenght 4. The first three paramenters specify the criteria to determine the summation windows:\n\nvp[1]: The autocorrelation function is summed up to t = round(vp1).\nvp[2]: The sumation window is determined using U. Wolff poposal with S_tau = wpm2\nvp[3]: The autocorrelation function Gamma(t) is summed up a point where its error deltaGamma(t) is a factor vp[3] times larger than the signal.\n\nAn additional fourth parameter vp[4], tells ADerrors to add a tail to the error with tau_exp = wpm4. Negative values of wpm[1:4] are ignored and only one component of wpm[1:3] needs to be positive. If the flag covaris set to true, fit_routine takes into account covariances between x and y for each data point.\n\n@. model(x,p) = p[1] + p[2] * exp(-(p[3]-p[1])*x)\n@. model2(x,p) = p[1] + p[2] * x[:, 1] + (p[3] + p[4] * x[:, 1]) * x[:, 2]\nfit_routine(model, xdata, ydata, param=3)\nfit_routine(model, xdata, ydata, param=3, covar=true)\n\n\n\n\n\n","category":"function"},{"location":"#LINEAR-ALGEBRA","page":"DOCUMENTATION","title":"LINEAR ALGEBRA","text":"","category":"section"},{"location":"","page":"DOCUMENTATION","title":"DOCUMENTATION","text":"uweigvals\nuweigvecs\nuweigen\nget_matrix\nenergies\ngetall_eigvals\ngetall_eigvecs","category":"page"},{"location":"#juobs.uweigvals","page":"DOCUMENTATION","title":"juobs.uweigvals","text":"uweigvals(a::Matrix{uwreal}; iter = 30)\n\nuweigvals(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)\n\nThis function computes the eigenvalues of a matrix of uwreal objects. If a second matrix b is given as input, it returns the generalised eigenvalues instead. It takes as input:\n\na::Matrix{uwreal} : a matrix of uwreal\nb::Matrix{uwreal} : a matrix of uwreal, optional\n\nIt returns:\n\nres = Vector{uwreal}: a vector where each elements is an eigenvalue \n\n\n\n\n\n","category":"function"},{"location":"#juobs.uweigvecs","page":"DOCUMENTATION","title":"juobs.uweigvecs","text":"uweigvecs(a::Matrix{uwreal}; iter = 30)\n\nuweigvecs(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)\n\nThis function computes the eigenvectors of a matrix of uwreal objects. If a second matrix b is given as input, it returns the generalised eigenvectors instead. It takes as input:\n\na::Matrix{uwreal} : a matrix of uwreal\nb::Matrix{uwreal} : a matrix of uwreal, optional\n\nIt returns:\n\nres = Matrix{uwreal}: a matrix where each column is an eigenvector \n\n\n\n\n\n","category":"function"},{"location":"#juobs.uweigen","page":"DOCUMENTATION","title":"juobs.uweigen","text":"uweigen(a::Matrix{uwreal}; iter = 30)\n\nuweigen(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)\n\nThis function computes the eigenvalues and the eigenvectors of a matrix of uwreal objects. If a second matrix b is given as input, it returns the generalised eigenvalues and eigenvectors instead. It takes as input:\n\n`a::Matrix{uwreal} : a matrix of uwreal\nb::Matrix{uwreal} : a matrix of uwreal, optional\n\nIt returns:\n\nevals = Vector{uwreal}: a vector where each elements is an eigenvalue \nevecs = Matrix{uwreal}: a matrix where the i-th column is the eigenvector of the i-th eigenvalue\n\n\n\n\n\n","category":"function"},{"location":"#juobs.get_matrix","page":"DOCUMENTATION","title":"juobs.get_matrix","text":"get_matrix(corr_diag::Vector{Array}, corr_upper::Vector{Array} )\n\nThis method returns an array of dim T where each element is a symmetrix matrix of dimension n of uwreal correlators at fixed time i=1..T. It takes as input:\n\ncorr_diag: vector of dimension n of correlators liying on the diagonal \n\ncorr_upper: vector of correlators liying on the upper diagonal.\n\nEach correlator is an vector of uwreal variables of dimension T.\n\nExample:\n\nfor i in 1:n\na[i,i] = Vector{uwreal} # vector of uwreal variables of dimension T. They will constitute the diagonal elements of the matrices\n\nfor i in 1:n-1 \n for j in i+1:n\n a[i,j] = Vector{uwreal} # vector of uwreal variables of dimension T. They will constitute the upper diagonal elements of the matrices. A matrix\n of dimension n*n has n(n-1)/2 upper diagonal elements.\n\nAssume n=4\n\ndiagonal = Vector{Array}()\npush!(diagonal, a[1,1],a[2,2],a[3,3],a[4,4])\nupsize = Vector{Array}()\npush!(upsize, a[1,2], a[1,3], a[1,4], a[2,3], a[2,4], a[3,4])\n\narray_of_matrices = get_matrix(diagonal, upsize)\n\nJulia> T-element Array{Array,1}\n\nsize(array_of_matrices)\n\nJulia> (T,)\n\narray_of_matrices[t] # t in 1:T\n\nJulia> 4*4 Array{uwreal,2}\n\n\n\n\n\n","category":"function"},{"location":"#juobs.energies","page":"DOCUMENTATION","title":"juobs.energies","text":"energies(evals::Vector{Array})\n\nGiven a vector where each entry evals[t] is a uwreal array of eigenvalues, this method computes the effective energies of the first N states, where N=dim(evals[t]). The index t here runs from 1:T=lenght(evals), while the index i stands for the number of energy levels computed: i = length(evals[t]) It returns a vector array eff_en where each entry eff_en[t] contains the first N states energies as uwreal objects \n\n\n\n\n\n","category":"function"},{"location":"#juobs.getall_eigvals","page":"DOCUMENTATION","title":"juobs.getall_eigvals","text":"getall_eigvals(a::Vector{Matrix}, t0; iter=30 )\n\nThis function solves a GEVP problem, returning the eigenvalues, for a list of matrices, taking as generalised matrix the one at index t0, i.e:\n\nC(t_i)v_i = λ_i C(t_0) v_i, with i=1:lenght(a)\n\nIt takes as input:\n\na::Vector{Matrix} : a vector of matrices\nt0::Int64 : idex value at which the fixed matrix is taken\niter=30 : the number of iterations of the qr algorithm used to extract the eigenvalues \n\nIt returns:\n\nres = Vector{Vector{uwreal}}\n\nwhere res[i] are the generalised eigenvalues of the i-th matrix of the input array. \n\nExamples:\n\nmat_array = get_matrix(diag, upper_diag)\nevals = getall_eigvals(mat_array, 5)\n\n\n\n\n\n","category":"function"},{"location":"#juobs.getall_eigvecs","page":"DOCUMENTATION","title":"juobs.getall_eigvecs","text":"getall_eigvecs(a::Vector{Matrix}, delta_t; iter=30 )\n\nThis function solves a GEVP problem, returning the eigenvectors, for a list of matrices.\n\nC(t_i)v_i = λ_i C(t_i-delta_t) v_i, with i=1:lenght(a)\n\nHere delta_t is the time shift within the two matrices of the problem, and is kept fixed. It takes as input:\n\na::Vector{Matrix} : a vector of matrices\ndelta_t::Int64 : the fixed time shift t-t_0\niter=30 : the number of iterations of the qr algorithm used to extract the eigenvalues \n\nIt returns:\n\nres = Vector{Matrix{uwreal}}\n\nwhere each res[i] is a matrix with the eigenvectors as columns Examples:\n\nmat_array = get_matrix(diag, upper_diag)\nevecs = getall_eigvecs(mat_array, 5)\n\n\n\n\n\n","category":"function"},{"location":"#OBSERVABLES","page":"DOCUMENTATION","title":"OBSERVABLES","text":"","category":"section"},{"location":"","page":"DOCUMENTATION","title":"DOCUMENTATION","text":"meff\ndec_const_pcvc\ncomp_t0","category":"page"},{"location":"#juobs.meff","page":"DOCUMENTATION","title":"juobs.meff","text":"meff(corr::Vector{uwreal}, plat::Vector{Int64}; pl::Bool=true, data::Bool=false ) \n\nmeff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)\n\nComputes effective mass for a given correlator corr at a given plateau plat. Correlator can be passed as an Corr struct or Vector{uwreal}.\n\nThe flags pl and data allow to show the plots and return data as an extra result.\n\ndata = read_mesons(path, \"G5\", \"G5\")\ncorr_pp = corr_obs.(data)\nm = meff(corr_pp[1], [50, 60], pl=false)\n\n\n\n\n\n","category":"function"},{"location":"#juobs.dec_const_pcvc","page":"DOCUMENTATION","title":"juobs.dec_const_pcvc","text":"dec_const_pcvc(corr::Vector{uwreal}, plat::Vector{Int64}, m::uwreal, mu::Vector{Float64}, y0::Int64 ; pl::Bool=true, data::Bool=false)meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)\n\ndec_const_pcvc(corr::Corr, plat::Vector{Int64}, m::uwreal; pl::Bool=true, data::Bool=false)\n\nComputes decay constant using the PCVC relation for twisted mass fermions. The decay constant is computed in the plateau plat. Correlator can be passed as an Corr struct or Vector{uwreal}. If it is passed as a uwreal vector, vector of twisted masses mu and source position y0 must be specified.\n\nThe flags pl and data allow to show the plots and return data as an extra result.\n\ndata = read_mesons(path, \"G5\", \"G5\")\ncorr_pp = corr_obs.(data)\nm = meff(corr_pp[1], [50, 60], pl=false)\nf = dec_const_pcvc(corr_pp[1], [50, 60], m, pl=false)\n\n\n\n\n\n","category":"function"},{"location":"#juobs.comp_t0","page":"DOCUMENTATION","title":"juobs.comp_t0","text":"comp_t0(Y::YData, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Matrix{Float64}, Nothing}=nothing, npol::Int64=2)\n\ncomp_t0(Y::Vector{YData}, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Vector{Matrix{Float64}}, Nothing}=nothing, npol::Int64=2)\n\nComputes t0 using the energy density of the action Ysl(Yang-Mills action). t0 is computed in the plateau plat. A polynomial interpolation in t is performed to find t0, where npol is the degree of the polynomial (linear fit by default)\n\nThe flag pl allows to show the plot.\n\n#Single replica\nY = read_ms(path)\nrw = read_ms(path_rw)\n\nt0 = comp_t0(Y, [38, 58], L=32)\nt0_r = comp_t0(Y, [38, 58], L=32, rw=rw)\n\n#Two replicas\nY1 = read_ms(path1)\nY2 = read_ms(path2)\nrw1 = read_ms(path_rw1)\nrw2 = read_ms(path_rw2)\n\nt0 = comp_t0([Y1, Y2], [38, 58], L=32, pl=true)\nt0_r = comp_t0(Y, [38, 58], L=32, rw=[rw1, rw2], pl=true)\n\n\n\n\n\n\n","category":"function"}]
}
using Documenter, juobs
push!(LOAD_PATH, "../src")
makedocs(sitename = "juobs Documentation")
# DOCUMENTATION
```@contents
```
## READER
```@docs
read_mesons
read_ms
read_ms1
read_md
truncate_data!
```
## TOOLS
```@docs
corr_obs
md_sea
lin_fit
fit_routine
```
## LINEAR ALGEBRA
```@docs
uweigvals
uweigvecs
uweigen
get_matrix
energies
getall_eigvals
getall_eigvecs
```
## OBSERVABLES
```@docs
meff
dec_const_pcvc
comp_t0
```
......@@ -13,13 +13,16 @@ end
=#
@doc raw"""
get_matrix(corr_diag::Vector{Array}, corr_upper::Vector{Array} )
get_matrix(corr_diag::Vector{Array}, corr_upper::Vector{Array} )
This method returns an array of dim T where each element is a symmetrix matrix of dimension n of uwreal correlators
This method returns an array of dim `T` where each element is a symmetrix matrix of dimension n of `uwreal` correlators
at fixed time i=1..T. It takes as input:
corr_diag : vector of dimension n of correlators liying on the diagonal
corr_upper : vector of correlators liying on the upper diagonal.
Each correlator is an vector of uwreal variables of dimension T.
`corr_diag`: vector of dimension n of correlators liying on the diagonal
`corr_upper`: vector of correlators liying on the upper diagonal.
Each correlator is an vector of uwreal variables of dimension `T`.
Example:
```@example
......@@ -77,11 +80,11 @@ function get_matrix(corr_diag::Vector{Vector{uwreal}}, corr_upper::Vector{Vector
end
get_matrix(corr_diag::Vector{Corr}, corr_upper::Vector{Corr}) = get_matrix(getfield.(corr_diag, :obs), getfield.(corr_upper, :obs))
@doc raw"""
energies(evals::Vector{Array})
energies(evals::Vector{Array})
Given a vector where each entry evals[t] is a uwreal array of eigenvalues, this method computes the effective energies of the first N states, where N=dim(evals[t]).
The index t here runs from 1:T=lenght(evals), while the index i stands for the number of energy levels computed: i = length(evals[t])
It returns a vector array eff_en where each entry eff_en[t] contains the first N states energies as uwreal objects
Given a vector where each entry `evals[t]` is a `uwreal` array of eigenvalues, this method computes the effective energies of the first N states, where ```N=dim(evals[t])```.
The index `t` here runs from 1:T=lenght(evals), while the index `i` stands for the number of energy levels computed: i = length(evals[t])
It returns a vector array `eff_en` where each entry `eff_en[t]` contains the first N states energies as uwreal objects
"""
function energies(evals::Union{Vector{Vector{uwreal}},Array{Array{uwreal}} }; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing)
time = length(evals)
......@@ -100,25 +103,32 @@ function energies(evals::Union{Vector{Vector{uwreal}},Array{Array{uwreal}} }; wp
end
@doc raw"""
getall_eigvals(a::Vector{Matrix}, t0; iter=30 )
getall_eigvals(a::Vector{Matrix}, t0; iter=30 )
This function solves a GEVP problem, returning the eigenvalues, for a list of matrices, taking as generalised matrix the one
at index t0, i.e:
C(t_i)v_i = λ_i C(t_0) v_i, with i=1:lenght(a)
``C(t_i)v_i = λ_i C(t_0) v_i``, with i=1:lenght(a)
It takes as input:
- a::Vector{Matrix} : a vector of matrices
- t0::Int64 : idex value at which the fixed matrix is taken
- iter=30 : the number of iterations of the qr algorithm used to extract the eigenvalues
- `a::Vector{Matrix}` : a vector of matrices
- `t0::Int64` : idex value at which the fixed matrix is taken
- `iter=30` : the number of iterations of the qr algorithm used to extract the eigenvalues
It returns:
- res = Vector{Vector{uwreal}}
where res[i] are the generalised eigenvalues of the i-th matrix of the input array.
- `res` = Vector{Vector{uwreal}}
where `res[i]` are the generalised eigenvalues of the i-th matrix of the input array.
Examples:
'''@example
```@example
mat_array = get_matrix(diag, upper_diag)
evals = getall_eigvals(mat_array, 5)
'''
```
"""
function getall_eigvals(a::Vector{Matrix}, t0::Int64; iter=30 )
n = length(a)
......@@ -128,17 +138,21 @@ function getall_eigvals(a::Vector{Matrix}, t0::Int64; iter=30 )
end
@doc raw"""
uweigvals(a::Matrix{uwreal}; iter = 30)
uweigvals(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
uweigvals(a::Matrix{uwreal}; iter = 30)
uweigvals(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
This function computes the eigenvalues of a matrix of uwreal objects.
If a second matrix b is given as input, it returns the generalised eigenvalues instead.
It takes as input:
- a::Matrix{uwreal} : a matrix of uwreal
- b::Matrix{uwreal} : a matrix of uwreal, optional
- `a::Matrix{uwreal}` : a matrix of uwreal
- `b::Matrix{uwreal}` : a matrix of uwreal, optional
It returns:
- res = Vector{uwreal}: a vector where each elements is an eigenvalue
- `res = Vector{uwreal}`: a vector where each elements is an eigenvalue
"""
function uweigvals(a::Matrix{uwreal}; iter = 30)
n = size(a,1)
......@@ -158,24 +172,31 @@ function uweigvals(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
end
@doc raw"""
getall_eigvecs(a::Vector{Matrix}, delta_t; iter=30 )
getall_eigvecs(a::Vector{Matrix}, delta_t; iter=30 )
This function solves a GEVP problem, returning the eigenvectors, for a list of matrices.
C(t_i)v_i = λ_i C(t_i-delta_t) v_i, with i=1:lenght(a)
Here delta_t is the time shift within the two matrices of the problem, and is kept fixed.
``C(t_i)v_i = λ_i C(t_i-\delta_t) v_i``, with i=1:lenght(a)
Here `delta_t` is the time shift within the two matrices of the problem, and is kept fixed.
It takes as input:
- a::Vector{Matrix} : a vector of matrices
- delta_t::Int64 : the fixed time shift t-t_0
- iter=30 : the number of iterations of the qr algorithm used to extract the eigenvalues
- `a::Vector{Matrix}` : a vector of matrices
- `delta_t::Int64` : the fixed time shift t-t_0
- `iter=30` : the number of iterations of the qr algorithm used to extract the eigenvalues
It returns:
- res = Vector{Matrix{uwreal}}
where each res[i] is a matrix with the eigenvectors as columns
- `res` = Vector{Matrix{uwreal}}
where each `res[i]` is a matrix with the eigenvectors as columns
Examples:
'''@example
```@example
mat_array = get_matrix(diag, upper_diag)
evecs = getall_eigvecs(mat_array, 5)
'''
```
"""
function getall_eigvecs(a::Vector{Matrix}, delta_t; iter=30)
n = length(a)-delta_t
......@@ -186,16 +207,20 @@ function getall_eigvecs(a::Vector{Matrix}, delta_t; iter=30)
end
@doc raw"""
uweigvecs(a::Matrix{uwreal}; iter = 30)
uweigvecs(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
uweigvecs(a::Matrix{uwreal}; iter = 30)
uweigvecs(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
This function computes the eigenvectors of a matrix of uwreal objects.
If a second matrix b is given as input, it returns the generalised eigenvectors instead.
It takes as input:
- a::Matrix{uwreal} : a matrix of uwreal
- b::Matrix{uwreal} : a matrix of uwreal, optional
- `a::Matrix{uwreal}` : a matrix of uwreal
- `b::Matrix{uwreal}` : a matrix of uwreal, optional
It returns:
- res = Matrix{uwreal}: a matrix where each column is an eigenvector
- `res = Matrix{uwreal}`: a matrix where each column is an eigenvector
"""
function uweigvecs(a::Matrix{uwreal}; iter = 30)
......@@ -221,17 +246,21 @@ function uweigvecs(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
end
@doc raw"""
uweigen(a::Matrix{uwreal}; iter = 30)
uweigen(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
uweigen(a::Matrix{uwreal}; iter = 30)
uweigen(a::Matrix{uwreal}, b::Matrix{uwreal}; iter = 30)
This function computes the eigenvalues and the eigenvectors of a matrix of uwreal objects.
If a second matrix b is given as input, it returns the generalised eigenvalues and eigenvectors instead.
It takes as input:
- a::Matrix{uwreal} : a matrix of uwreal
- b::Matrix{uwreal} : a matrix of uwreal, optional
- `a::Matrix{uwreal} : a matrix of uwreal
- `b::Matrix{uwreal}` : a matrix of uwreal, optional
It returns:
- evals = Vector{uwreal}: a vector where each elements is an eigenvalue
-evecs = Matrix{uwreal}: a matrix where the i-th column is the eigenvector of the i-th eigenvalue
- `evals = Vector{uwreal}`: a vector where each elements is an eigenvalue
- `evecs = Matrix{uwreal}`: a matrix where the i-th column is the eigenvector of the i-th eigenvalue
"""
function uweigen(a::Matrix{uwreal}; iter = 30)
return uweigvals(a, iter=iter), uweigvecs(a, iter=iter)
......
@doc raw"""
meff(corr::Vector{uwreal}, plat::Vector{Int64}; pl::Bool=true, data::Bool=false )
meff(corr::Vector{uwreal}, plat::Vector{Int64}; pl::Bool=true, data::Bool=false )
meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)
meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)
Computes effective mass for a given correlator corr at a given plateau plat.
Correlator can be passed as an Corr struct or Vector{uwreal}.
Computes effective mass for a given correlator corr at a given plateau `plat`.
Correlator can be passed as an `Corr` struct or `Vector{uwreal}`.
The flags pl and data allow to show the plots and return data as an extra result.
The flags `pl` and `data` allow to show the plots and return data as an extra result.
```@example
data = read_mesons(path, "G5", "G5")
......@@ -49,15 +49,15 @@ meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false) =
## Decay constants
@doc raw"""
dec_const_pcvc(corr::Vector{uwreal}, plat::Vector{Int64}, m::uwreal, mu::Vector{Float64}, y0::Int64 ; pl::Bool=true, data::Bool=false)meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)
dec_const_pcvc(corr::Vector{uwreal}, plat::Vector{Int64}, m::uwreal, mu::Vector{Float64}, y0::Int64 ; pl::Bool=true, data::Bool=false)meff(corr::Corr, plat::Vector{Int64}; pl::Bool=true, data::Bool=false)
dec_const_pcvc(corr::Corr, plat::Vector{Int64}, m::uwreal; pl::Bool=true, data::Bool=false)
dec_const_pcvc(corr::Corr, plat::Vector{Int64}, m::uwreal; pl::Bool=true, data::Bool=false)
Computes decay constant using the PCVC relation for twisted mass fermions. The decay constant is computed in the plateau plat.
Correlator can be passed as an Corr struct or Vector{uwreal}. If it is passed as a uwreal vector, vector of twisted masses mu and source position y0
Computes decay constant using the PCVC relation for twisted mass fermions. The decay constant is computed in the plateau `plat`.
Correlator can be passed as an `Corr` struct or `Vector{uwreal}`. If it is passed as a uwreal vector, vector of twisted masses `mu` and source position `y0`
must be specified.
The flags pl and data allow to show the plots and return data as an extra result.
The flags `pl` and `data` allow to show the plots and return data as an extra result.
```@example
data = read_mesons(path, "G5", "G5")
......@@ -117,16 +117,15 @@ function get_model(x, p, n)
return s
end
@doc raw"""
comp_t0(Y::YData, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Matrix{Float64}, Nothing}=nothing, npol::Int64=2)
comp_t0(Y::YData, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Matrix{Float64}, Nothing}=nothing, npol::Int64=2)
comp_t0(Y::Vector{YData}, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Vector{Matrix{Float64}}, Nothing}=nothing, npol::Int64=2)
comp_t0(Y::Vector{YData}, plat::Vector{Int64}; L::Int64, pl::Bool=false, rw::Union{Vector{Matrix{Float64}}, Nothing}=nothing, npol::Int64=2)
Computes `t0` using the energy density of the action `Ysl`(Yang-Mills action).
`t0` is computed in the plateau `plat`.
A polynomial interpolation in `t` is performed to find `t0`, where `npol` is the degree of the polynomial (linear fit by default)
Computes t0 using the energy density of the action Ysl(Yang-Mills action).
t0 is computed in the plateau plat.
A polynomial interpolation in t is performed to find t0, where npol is the degree of the polynomial (linear fit by default)
The flag pl allows to show the plot.
The flag `pl` allows to show the plot.
```@example
#Single replica
......
......@@ -70,12 +70,13 @@ function read_CHeader(path::String)
end
@doc raw"""
read_mesons(path::String, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)
read_mesons(path::Vector{String}, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)
read_mesons(path::String, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)
This function read a mesons dat file at a given path and returns a vector of CData structures for different masses and Dirac structures.
Dirac structures g1 and/or g2 can be passed as string arguments in order to filter correaltors.
ADerrors id can be specified as argument. If is not specified, the id is fixed according to the ensemble name (example: "H400"-> id = 400)
read_mesons(path::Vector{String}, g1::Union{String, Nothing}=nothing, g2::Union{String, Nothing}=nothing; id::Union{Int64, Nothing}=nothing)
This function read a mesons dat file at a given path and returns a vector of `CData` structures for different masses and Dirac structures.
Dirac structures `g1` and/or `g2` can be passed as string arguments in order to filter correaltors.
ADerrors id can be specified as argument. If is not specified, the `id` is fixed according to the ensemble name (example: "H400"-> id = 400)
Examples:
```@example
......@@ -215,10 +216,10 @@ function read_rw(path::String; v::String="1.2")
end
@doc raw"""
read_ms1(path::String; v::String="1.2")
read_ms1(path::String; v::String="1.2")
Reads openQCD ms1 dat files at a given path. This method returns a matrix W[irw, icfg] that contains the reweighting factors, where
irw is the rwf index and icfg the configuration number.
Reads openQCD ms1 dat files at a given path. This method returns a matrix `W[irw, icfg]` that contains the reweighting factors, where
`irw` is the `rwf` index and icfg the configuration number.
The function is compatible with the output files of openQCD v=1.2, 1.4 and 1.6. Version can be specified as argument.
Examples:
......@@ -237,12 +238,14 @@ function read_ms1(path::String; v::String="1.2")
return W
end
@doc raw"""
read_md(path::String)
read_md(path::String)
Reads openQCD pbp.dat files at a given path. This method returns a matrix `md[irw, icfg]` that contains the derivatives ``dS/dm``, where
``md[irw=1] = dS/dm_l`` and ``md[irw=2] = dS/dm_s``
Reads openQCD pbp.dat files at a given path. This method returns a matrix md[irw, icfg] that contains the derivatives dS/dm, where
md[irw=1] = dS/dm_l and md[irw=2] = dS/dm_s
Seff = -tr(log(D+m))
dSeff/ dm = -tr((D+m)^-1)
``Seff = -tr(log(D+m))``
``dSeff/ dm = -tr((D+m)^-1)``
Examples:
```@example
......@@ -259,13 +262,17 @@ function read_md(path::String)
end
@doc raw"""
read_ms(path::String; id::Union{Int64, Nothing}=nothing, dtr::Int64=1)
read_ms(path::String; id::Union{Int64, Nothing}=nothing, dtr::Int64=1)
Reads openQCD ms dat files at a given path. This method return YData:
t(t): flow time values
Ysl(icfg, x0, t): the time-slice sums of the densities of the Yang-Mills action
vtr: vector that contains trajectory number
id: ensmble id
- `t(t)`: flow time values
- `Ysl(icfg, x0, t)`: the time-slice sums of the densities of the Yang-Mills action
- `vtr`: vector that contains trajectory number
- `id`: ensmble id
Examples:
```@example
......@@ -331,15 +338,15 @@ function read_ms(path::String; id::Union{Int64, Nothing}=nothing, dtr::Int64=1)
end
@doc raw"""
truncate_data!(data::YData, nc::Int64)
truncate_data!(data::YData, nc::Int64)
truncate_data!(data::Vector{YData}, nc::Vector{Int64})
truncate_data!(data::Vector{YData}, nc::Vector{Int64})
truncate_data!(data::Vector{CData}, nc::Int64)
truncate_data!(data::Vector{CData}, nc::Int64)
truncate_data!(data::Vector{Vector{CData}}, nc::Vector{Int64})
truncate_data!(data::Vector{Vector{CData}}, nc::Vector{Int64})
Truncates the output of read_mesons and read_ms taking the first nc configurations.
Truncates the output of `read_mesons` and `read_ms` taking the first `nc` configurations.
Examples:
```@example
......
......@@ -29,18 +29,18 @@ function apply_rw(data::Vector{<:Array{Float64}}, W::Vector{Matrix{Float64}})
return data_r
end
@doc raw"""
corr_obs(cdata::CData; real::Bool=true, rw::Union{Array{Float64, 2}, Nothing}=nothing, L::Int64=1)
corr_obs(cdata::CData; real::Bool=true, rw::Union{Array{Float64, 2}, Nothing}=nothing, L::Int64=1)
corr_obs(cdata::Array{CData, 1}; real::Bool=true, rw::Union{Array{Array{Float64, 2}, 1}, Nothing}=nothing, L::Int64=1)
corr_obs(cdata::Array{CData, 1}; real::Bool=true, rw::Union{Array{Array{Float64, 2}, 1}, Nothing}=nothing, L::Int64=1)
Creates a Corr struct with the given CData struct cdata (read_mesons) for a single replica.
An array of CData can be passed as argument for multiple replicas.
Creates a `Corr` struct with the given `CData` struct `cdata` (`read_mesons`) for a single replica.
An array of `CData` can be passed as argument for multiple replicas.
The flag real select the real or imaginary part of the correlator.
If rw is specified, the method applies reweighting. rw is passed as a matrix of Float64 (read_ms1)
The correlator can be normalized with the volume factor if L is fixed.
The flag `real` select the real or imaginary part of the correlator.
If `rw` is specified, the method applies reweighting. `rw` is passed as a matrix of Float64 (`read_ms1`)
The correlator can be normalized with the volume factor if `L` is fixed.
@example```
```@example
#Single replica
data = read_mesons(path, "G5", "G5")
rw = read_ms1(path_rw)
......@@ -93,13 +93,17 @@ function corr_obs(cdata::Array{CData, 1}; real::Bool=true, rw::Union{Array{Array
return Corr(obs, cdata)
end
#TODO: VECTORIZE
@doc raw"""
md_sea(a::uwreal, md::Vector{Matrix{Float64}}, ws::ADerrors.wspace=ADerrors.wsg)
md_sea(a::uwreal, md::Vector{Matrix{Float64}}, ws::ADerrors.wspace=ADerrors.wsg)
Computes the derivative of an observable A with respect to the sea quark masses.
d <A> / dm(sea) = sum_i (d<A> / d<Oi>) * (d<Oi> / dm(sea))
d <O> / dm(sea) = <O> <dS/dm> - <O dS/dm> = - <(O - <O>) (dS/dm - <dS/dm>)>
where <Oi> are primary observables
``d <A> / dm(sea) = \sum_i (d<A> / d<O_i>) * (d<O_i> / dm(sea))``
`` d <O> / dm(sea) = <O> <dS/dm> - <O dS/dm> = - <(O - <O>) (dS/dm - <dS/dm>)>``
where ``O_i`` are primary observables
md is a vector that contains the derivative of the action S with respect
to the sea quark masses for each replica. md[irep][irw, icfg]
......@@ -107,7 +111,7 @@ to the sea quark masses for each replica. md[irep][irw, icfg]
md_sea returns a tuple of uwreal observables (dA/dml, dA/dms)|sea,
where ml and ms are the light and strange quark masses.
@example```
```@example
#Single replica
data = read_mesons(path, "G5", "G5")
md = read_md(path_md)
......@@ -127,7 +131,6 @@ m_mdl, m_mds = md_sea(m, [md1, md2], ADerrors.wsg)
m_shifted = m + 2 * dml * m_mdl + dms * m_mds
```
"""
#TODO: VECTORIZE
function md_sea(a::uwreal, md::Vector{Matrix{Float64}}, ws::ADerrors.wspace=ADerrors.wsg)
nid = neid(a)
p = findall(t-> t==1, a.prop)
......@@ -203,7 +206,7 @@ function lin_fit(x::Vector{<:Real}, v::Vector{Float64}, e::Vector{Float64})
return par
end
@doc raw"""
lin_fit(x::Vector{<:Real}, y::Vector{uwreal})
lin_fit(x::Vector{<:Real}, y::Vector{uwreal})
Computes a linear fit of uwreal data points y. This method return uwreal fit parameters and chisqexpected.
......@@ -227,38 +230,44 @@ function lin_fit(x::Vector{<:Real}, y::Vector{uwreal}; wpm::Union{Dict{Int64,Vec
end
@doc raw"""
x_lin_fit(par::Vector{uwreal}, y::Union{uwreal, Float64})
x_lin_fit(par::Vector{uwreal}, y::Union{uwreal, Float64})
Computes the results of a linear interpolation/extrapolation in the x axis
"""
x_lin_fit(par::Vector{uwreal}, y::Union{uwreal, Float64}) = (y - par[1]) / par[2]
@doc raw"""
y_lin_fit(par::Vector{uwreal}, y::Union{uwreal, Float64})
y_lin_fit(par::Vector{uwreal}, y::Union{uwreal, Float64})
Computes the results of a linear interpolation/extrapolation in the y axis
"""
y_lin_fit(par::Vector{uwreal}, x::Union{uwreal, Float64}) = par[1] + par[2] * x
@doc raw"""
fit_routine(model::Function, xdata::Array{<:Real}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing)
fit_routine(model::Function, xdata::Array{<:Real}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing)
fit_routine(model::Function, xdata::Array{uwreal}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing)
fit_routine(model::Function, xdata::Array{uwreal}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing, covar::Bool=false)
Given a model function with a number param of parameters and an array of uwreal,
this function fit ydata with the given model and print fit information
The method return an array upar with the best fit parameters with their errors.
The flag wpm is an optional array of Float64 of lenght 4. The first three paramenters specify the criteria to determine
Given a model function with a number param of parameters and an array of `uwreal`,
this function fit ydata with the given `model` and print fit information
The method return an array `upar` with the best fit parameters with their errors.
The flag `wpm` is an optional array of Float64 of lenght 4. The first three paramenters specify the criteria to determine
the summation windows:
vp[1]: The autocorrelation function is summed up to t = round(vp[1]).
vp[2]: The sumation window is determined using U. Wolff poposal with S_\tau = wpm[2]
vp[3]: The autocorrelation function Γ(t) is summed up a point where its error δΓ(t) is a factor vp[3] times larger than the signal.
An additional fourth parameter vp[4], tells ADerrors to add a tail to the error with \tau_{exp} = wpm[4].
Negative values of wpm[1:4] are ignored and only one component of wpm[1:3] needs to be positive.
'''@example
- `vp[1]`: The autocorrelation function is summed up to ``t = round(vp[1])``.
- `vp[2]`: The sumation window is determined using U. Wolff poposal with ``S_\tau = wpm[2]``
- `vp[3]`: The autocorrelation function ``\Gamma(t)`` is summed up a point where its error ``\delta\Gamma(t)`` is a factor `vp[3]` times larger than the signal.
An additional fourth parameter `vp[4]`, tells ADerrors to add a tail to the error with ``\tau_{exp} = wpm[4]``.
Negative values of `wpm[1:4]` are ignored and only one component of `wpm[1:3]` needs to be positive.
If the flag `covar`is set to true, `fit_routine` takes into account covariances between x and y for each data point.
```@example
@. model(x,p) = p[1] + p[2] * exp(-(p[3]-p[1])*x)
@. model2(x,p) = p[1] + p[2] * x[:, 1] + (p[3] + p[4] * x[:, 1]) * x[:, 2]
fit_routine(model, xdata, ydata, param=3)
fit_routine(model, xdata, ydata, param=3, covar=true)
```
"""
function fit_routine(model::Function, xdata::Array{<:Real}, ydata::Array{uwreal}, param::Int64=3; wpm::Union{Dict{Int64,Vector{Float64}},Dict{String,Vector{Float64}}, Nothing}=nothing)
isnothing(wpm) ? uwerr.(ydata) : uwerr.(ydata, wpm)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment