{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Convolution comparison in Julia" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load packages/functions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `C:\\Users\\zaki\\zCode\\github\\dceconv\\Julia`\n" ] } ], "source": [ "]activate ." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This should install the required dependencies (if they are missing)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "]instantiate" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Load requires packages\n", "using DSP # for fftconv\n", "using LsqFit # for nonlinear fitting\n", "using MAT # for i/o\n", "using NumericalIntegration # for integralconv\n", "using NamedTupleTools # for convenience\n", "using Plots # for seeing\n", "using Statistics # for statting\n", "using TimerOutputs # for evaluating computation time\n", "\n", "# Config for plots\n", "figopts = (; framestyle = :grid, gridalpha=0.5, gridstyle=:dot, linewidth = 2.5, markersize=10, markerstrokewidth = 0,\n", " tickfontsize = 11, size =(1200, 400), legend = :none, foreground_color_legend = nothing, margin=10Plots.mm)\n", "default(fmt = :png) # github doesn't like svg\n", "nothing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The code here is not (that) important.\n", "It's mostly used for fitting the Tofts model, but it's a bit messy. \n", "It'll be cleaned up. Eventually. Maybe." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "compute_ve_or_kep_if_it_is_missing! (generic function with 1 method)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "percenterror(a,b) = 100 * (a-b) / b\n", "\n", "downsample(x::Vector, rate, phase=1) = Downsample(x, Int(rate), phase)\n", "function downsample(x::Vector, rate::Int, phase::Int=1)\n", " return x[phase:rate:end]\n", "end\n", "\n", "function downsample(x::Array, rate::Int, phase::Int=1; dim::Int=1)\n", " @assert (dim <= ndims(x)) \"dim can't be larged than dimensions of data\"\n", " if ndims(x)==3\n", " if dim==1\n", " return x[phase:rate:end, :, :]\n", " elseif dim==2\n", " return x[:, phase:rate:end, :]\n", " elseif dim==3\n", " return x[:, :, phase:rate:end]\n", " else\n", " ErrorException()\n", " end\n", " elseif ndims(x)==2\n", " if dim==1\n", " return x[phase:rate:end, :]\n", " elseif dim==2\n", " return x[:, phase:rate:end]\n", " else\n", " ErrorException()\n", " end\n", " else\n", " ErrorException(\"Unsupported input\")\n", " end\n", " return x\n", "end\n", "\n", "function get_qiba_ground_truth()\n", " kt_values = [0.01, 0.02, 0.05, 0.1, 0.2, 0.35]\n", " ve_values = [0.01, 0.05, 0.1, 0.2, 0.5]\n", " kt = repeat(kt_values; inner = (1, 5))\n", " ve = repeat(ve_values'; inner = (6, 1))\n", " kep = kt ./ ve\n", " return (; kt, ve, kep = kt ./ ve)\n", "end\n", "\n", "function fit_tofts_lls(;\n", " t::AbstractVector,\n", " ca::AbstractVector,\n", " ct::AbstractArray,\n", " mask = true,\n", ")\n", " (t, ct, mask, num_timepoints, volume_size) = resolve_fitting_inputs(; t, ca, ct, mask)\n", " kt, kep = (fill(NaN, volume_size...) for _ = 1:2)\n", "\n", " M = zeros(num_timepoints, 2)\n", " M[:, 1] = cumul_integrate(t, ca, TrapezoidalFast())\n", " for idx in eachindex(IndexCartesian(), mask)\n", " if mask[idx] == false\n", " continue\n", " end\n", " M[:, 2] = -cumul_integrate(t, ct[idx, :], TrapezoidalFast())\n", " (kt[idx], kep[idx]) = M \\ ct[idx, :]\n", " end\n", " est = compute_ve_or_kep_if_it_is_missing((; kt, kep))\n", " return est\n", "end\n", "\n", "function fit_tofts_nls(\n", " conv::Function = expconv;\n", " t::AbstractVector,\n", " ca::AbstractVector,\n", " ct::AbstractArray,\n", " mask = true,\n", ")\n", " (t, ct, mask, num_timepoints, volume_size) = resolve_fitting_inputs(; t, ca, ct, mask)\n", " kt, kep = (fill(NaN, volume_size...) for _ = 1:2)\n", " model(x, p) = _model_tofts(conv, x, p, ca)\n", " lls_est = fit_tofts_lls(; t, ca, ct, mask)\n", " init_kt, init_kep = select(lls_est, (:kt, :kep))\n", " for idx in eachindex(IndexCartesian(), mask)\n", " if mask[idx] == false\n", " continue\n", " end\n", " initialvalues = [init_kt[idx], init_kep[idx]]\n", " (kt[idx], kep[idx]) = curve_fit(model, t, ct[idx, :], initialvalues).param\n", " end\n", " est = compute_ve_or_kep_if_it_is_missing((; kt, kep))\n", " return est\n", "end\n", "\n", "function _model_tofts(\n", " conv::Function,\n", " t::AbstractVector,\n", " params::AbstractVector,\n", " ca::AbstractVector,\n", ")\n", " kt, kep = params\n", " ct = kt * conv(ca, kep, t)\n", " return ct\n", "end\n", "\n", "function resolve_fitting_inputs(; t, ca, ct, mask)\n", " @assert length(t) == length(ca) == size(ct)[end]\n", " num_timepoints = length(t)\n", " if typeof(ct) <: AbstractVector\n", " @assert length(ct) == num_timepoints\n", " ct = reshape(ct, 1, num_timepoints)\n", " end\n", " volume_size = size(ct)[1:end-1]\n", " resolved_mask = resolve_mask_size(mask, volume_size)\n", " return (t, ct, resolved_mask, num_timepoints, volume_size)\n", "end\n", "\n", "function resolve_mask_size(mask, desired_size)\n", " if size(mask) == desired_size\n", " return mask .> 0\n", " elseif size(mask) == ()\n", " return repeat([mask .> 0], desired_size...)\n", " else\n", " error(\"Mask size: $(size(mask)) does not match input size $(desired_size)\")\n", " end\n", "end\n", "\n", "function compute_ve_or_kep_if_it_is_missing(namedtuple::NamedTuple)\n", " if !haskey(namedtuple, :kep)\n", " return (namedtuple..., kep = namedtuple.kt ./ namedtuple.ve)\n", " elseif !haskey(namedtuple, :ve)\n", " return (namedtuple..., ve = namedtuple.kt ./ namedtuple.kep)\n", " else\n", " return namedtuple\n", " end\n", "end\n", "\n", "function compute_ve_or_kep_if_it_is_missing!(collection)\n", " for (key, values) in collection\n", " if !haskey(values, :kep)\n", " collection[key] = (values..., kep = values.kt ./ values.ve)\n", " end\n", " if !haskey(values, :ve)\n", " collection[key] = (values..., ve = values.kt ./ values.kep)\n", " end\n", " end\n", " return collection\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Relevant code\n", "\n", "These are the different convolution implementations" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "expconv (generic function with 1 method)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are the different convolution implementations\n", "\n", "function fftconv(a, b, t)\n", " # Uses conv() from DSP.jl which uses fft (I think so based on its source code?)\n", " exp_term = @. exp(-t*b)\n", " return conv(a, exp_term)[1:length(t)] .* (t[2]-t[1])\n", "end\n", "\n", "# Adapted from David Smith's original implementation DCEMRI.jl\n", "function intconv(ca,kep,t)\n", " Ct = zeros(length(t));\n", " for k in 1:length(Ct)\n", " tk = t[k]\n", " @simd for j = 1:k\n", " @inbounds y = exp(kep*(t[j] - tk)) * ca[j]\n", " @inbounds Ct[k] += ifelse((j == 1 || j == k) && k > 1, 0.5*y, y)\n", " end\n", " end\n", " dtp = (t[2] - t[1])\n", " @simd for k = 1:length(Ct)\n", " @inbounds Ct[k] *= dtp\n", " end\n", " return Ct\n", "end\n", "\n", "function expconv(A, B, t)\n", " # Returns f = A ConvolvedWith exp(-B t)\n", " # Based on Flouri et al. (2016) MRM 76(3), doi: 10.1002/mrm.25991\n", " @assert length(A) == length(t)\n", " f = zeros(length(t))\n", " for i = 2:length(t)\n", " x = B * (t[i] - t[i-1])\n", " dA = (A[i] - A[i-1]) / x\n", " E = exp(-x)\n", " E0 = 1 - E\n", " E1 = x - E0\n", " f[i] = E * f[i-1] + A[i-1] * E0 + dA * E1\n", " end\n", " return f ./ B\n", "end\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get the ground truth and load the QIBA phantom data" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "truth = get_qiba_ground_truth()\n", "\n", "mat = matread(\"../MATLAB/data/qiba.mat\")\n", "t = mat[\"t\"] |> vec\n", "ca = mat[\"ca\"] |> vec\n", "ct = mat[\"ct\"]\n", "\n", "# This will be used for plotting later\n", "axesprops = (; \n", " xticks = ([1,2,3,4,5], unique(truth.ve)),\n", " yticks = ([1,2,3,4,5,6], unique(truth.kt)),\n", " c = cgrad(:RdBu_9; rev = true)\n", " )\n", "nothing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fit Tofts model to QIBA phantom using the different convolution implementations" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "est = Dict()\n", "est[:iterative] = fit_tofts_nls(expconv; ca, ct, t)\n", "est[:fft] = fit_tofts_nls(fftconv; ca, ct, t)\n", "est[:integral] = fit_tofts_nls(intconv; ca, ct, t)\n", "est[:lls] = fit_tofts_lls(; ca, ct, t)\n", "nothing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Make error map plots" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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u8+4KK62DeBndpfei3SkiIKgKEGxRFHEXrDE3o2KMUaNGkXjY0xM7CYao7HHHguxa1QUu1ggBhEUC4IgCCJNygrs7rwf5nn2JYBxgcMuw1z/336YnTk7c++ql2dmzszYdu7c2dnZuaofPH369JQpUyIiImqhKAAAABAciaYLAM3o3r179+7dNV0FAAAACB06owKVnZ2dmJhoZ2dna2vLzUlISMjNzW3atKment61a9eio6O1tLT8/f2bNWum/FRsbOyrV68IIS9evPjrr7+4mR4eHgYGBso2cXFxt27dysnJsbOz69q1q7W1dcWtJycnh4WF5efnN27cuHv37gzDxMTEGBoauru7cw3S09NTU1OdnJwsLS0fPHgQERFRWFj46aefcg9fzs7Ovn37dnJyclFRkaOjY2BgoLm5ee38TgAAdY5UKr127VpSUpJUKrWwsPD09PTx8RGJcKoTeIsFQdq1axch5LvvvlPOGTRoECHkwoULnTp1Uv71YBhm3rx5yjZubm4V/wrdunWLW5qenl7uaKuuru6qVavKbXrlypVaWlrKNo0bNw4PDyeE+Pv7K9ssXbqUELJhw4YRI0YoWz58+JBl2eDgYLFYXHYrBgYGv/76a9lNxMbGEkL69etH/XcDAKg9JSUlhBB3d3flHC4eJ02apJxz6dIlKyurcjnct29fTdQLQAd2pOAfgoODpVLp0aNH7927t2XLFmNj41WrVl28eJFbunv37nHjxhFCvvrqqwv/07RpU0JIYWFhly5dwsLCRo4ceenSpfj4+D/++MPe3n7evHk7duxQrv/3338PCQmxtLQ8ePBgcnJyVFSUt7f3mDFjKi1m1apVERERGzduvHHjxpEjRywsLAgh2dnZs2bNOnv27MOHD6Ojo3/55RcDA4Np06ZdunSp1n8dAACNKi4uHjZsWF5e3tq1ax8+fJicnBwREbF27dpKjxQA8AVO08M/GBgY3Lhxgzty6ePjI5PJpk2bduTIka5duxJC2rdvz3VMPT09uTlKq1evfvjw4bRp0zZs2MDNcXd3b9OmjYeHx6JFi8aOHaulpaVQKLhblhw8eNDf358Q4ujoeOjQIT8/v7S0tIrFpKenP3r0yNXVtezM0NDQsm9btGjRokULf3//9evXd+nSheJPAQBQ1zx48CAzM3PMmDFffvklN8fR0bFdu3aarQqghnBk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BQAKqjRESYXVVTlGAQB4Tcgpqr4LmKRS6cyZM5s2bdq5c+dKn3x68ODBfv36cQ0OHDigtsIAoObojrunmcj1CFIUoB4Tcoqq78jowoULY2NjT58+fevWraCgoGfPnpW7kdXdu3fHjh3r7e0dFxc3btw4MzOznj17qq08AKgJhqnaEKUPrg0qQooC1GNCTlE1dUaLi4t37tx5/vz5Ro0aNWrUaM+ePXv37p01a1bZNj/99BM34e7ufvTo0cuXLyNGAfiCEdN8kB3h1T69eiBFAeo3IaeomjqjqampeXl5vr6+3NtWrVrFxsa+r7FMJrt37163bt3UUxsA1BwjFokk1G5KIqKYyPUFUhSgfhNyiqqp1szMTENDQ7H4v7+yqanp69ev39d4wYIFxsbGo0ePVmXNT548KSoqolMlABAil8ur8SnKQ534dYZJLZCiAHyBFK0qNR0ZNTU1LSoqUigUIpGIEJKfn29ubl5pyxUrVpw+ffrq1avKzP13jRs31nvFFtMsFkDQVPynVx4jonlWiFcnmNQDKQrAF0jRqlJTrfb29mKxOCEhgXv75MkTFxeXis3Wrl3722+/hYeHW1lZqbhmhmFw+0AAzWMYwoiovQj+UZeHFAWo5wScomrqjBoaGg4cOPDHH39kWfbRo0dnz57lzh8lJyfPmTOHa7Nx48Y1a9b88ccfenp6OTk5hYWF6qkNACgQiam++LRPrx5IUYB6TsApqr5a16xZExMT06BBg48//njFihVubm6EkMzMzD179nANdu/eLZVKO3fuzF0rqoxXAKj7GIahOeAJB+oqgxQFqMeEnKLqu8+og4NDREREQUGBnp6ecjiFr69vZmYmN3337l21FQMAlIklREwvT0TULimtT5CiAPWZgFNU3Y8DNTQ0VPMWAUANuH16emurwqpYlt23b9/169ft7OxmzJhR8bKe2NjYU6dOJSUl2drafvrppw0bNqRVp0YgRQHqJSGnKJ+GFABA3UVx3D1TtZuSLFu2bPny5R06dEhISOjSpYtCoSjXYPLkya9fv/bz80tPT/f29n7+/DnVbw4AQIOAU1TdR0YBoH4SiWieFVL58EBxcfG6detOnDjRvn370aNHN27c+Ny5c7179y7b5vr16xKJhBAyceLER48eHT169KuvvqJWKgAAFQJOURwZBQAauDvk0XqpvE//+PHjoqKitm3bEkJEIlGnTp1u3LhRrg2XoZzc3Nz33Z4TAECTBJyiODIKADRwz/ygRPXRTunp6ebm5qL/bbpBgwavXr16X+ONGzcWFRWNGDGCQokAAHQJOEXRGQUAGrjbNdNb282bN9/3aPU+ffp8+eWX3LSOjk5paalyUUlJiZ6eXqWfOnr06A8//HDx4sX3NQAA0CQBpyg6owBAASOWEAm9PBGLGzduHBISUunCxo0bK6ft7e2zs7OLior09fUJISkpKT4+PhU/cvr06c8///zs2bNeXl7UigQAoEfIKYrOKADQQHefnjBWVlZdu3b9YDs3NzcPD4/Dhw+PHz8+MzPz4sWL3333HSHk9evXkZGRffr0IYSEhYVNmjTp5MmTlSYsAECdIOAURWcUAGjgHkBHbW1VSOQ1a9aMHDny9OnT9+7dGz16NLfX/tdff40aNSo3N5cQMn78eJZlP//8c6798OHDcTU9ANQ5Ak5RdEYBgAaGofko5KocHujevXtcXFxkZOQ333zj7e3NzfT391c+jujWrVtyuVzZ3sTEhFqdAAC0CDhF0RkFAAoY7jbL1NZWtacqW1tb9+3bt+wcAwODJk2acNNOTk60CgMAqCVCTlF0RgGABhHdffqqxSgAAO8JOEXRGQUAGrjbNdNCcVUAALwg4BStD53RQb2aaBmZaboKleiIefOXQ1Qf/mrULWJe7adWFSOWELEWtbVRHMUP9UsTCwNNl6AqKwNq/yJqlUTEm2hCilZhbbxKUfQ4AIAGuvv0NO9vAgDABwJOUXRGAYAGAY92AgCgQMApis4oAFBA9zpQfsUoAEDNCTlF0RkFABoEfIIJAIACAacoOqMAQAPdE0z8uaICAIAOAacoOqMAQAMjJgzFizf5tE8PAECBgFMUnVEAoIARi4mEWp4wYj7dlAQAoOaEnKLojAIADQIeeg8AQIGAUxSdUQCggfJNSaq2qtTU1Lt37zo6OrZq1arSBnK5/OnTpyKRSPmoZQCAukXAKcqnIQUAUIcxhKH4qsKG//zzT29v70OHDg0fPnzKlCkVG2zbts3ExMTX1zc4OJja1wUAoEy4KYrOKADQwJ1govhSWUhIyNq1aw8ePHj79u3Dhw/HxsaWa9CjR49nz579+OOPVL8wAABVAk7RSmp99+7d48ePS0tLa2mTAFAPMQzVDFV1p/7Zs2ePHz8ePHgwIcTS0rJr167Hjx8v16Zhw4Y2NjaUv++/QooCQJUJOEVFhJC5c+euXbuWe//gwQMXFxcPDw9bW9uIiIja2zAA1CcsI6b6UnWf/uXLlxYWFvr6+txbR0fH1NTUWvuW74UUBYAaEnKKShQKxaZNm37//Xfu/Zw5c3R0dHbv3n3w4MHg4OAHDx4wlC7IKikpWbt27c2bN52cnBYsWGBnZ1euQVpa2pUrVx4+fOji4jJx4kQqGwUANeFGKdFb25MnT1auXFnpQj8/v4CAAG66pKREUuZmKFpaWjk5OdTKUA1SFAAoEHCKSrKzswsLCz08PAgheXl5V65c2bhx49ixYzt27Ojq6vry5UtHR0cqW5o3b15kZOQ333xz6tSpwMDA2NhY8T9vgnX48OGwsDCpVBoZGYkYBeAZ7gQTvdWVlpa+LxDz8/OV07a2ttnZ2QqFQiQSEUIyMzMrdtFqG1IUACgQcIr+ty/M7bhfvHixtLS0e/fuhBB7e3tCSEZGBpUYffv27Y4dO27fvu3l5dW9e3c3N7c///yzX79+Zdt8+eWXX3755fr168+cOVPzLQKAelHep/fy8lqxYsUHGzZp0sTAwODWrVsff/yxQqHgOoKEEJZl5XK5hN4dpD8IKQoANSPcFBVZWFiYmZmdOHGCELJr1y4PDw8nJydCCDdiwNzcnMpm4uPjtbS0vLy8CCEMw3z88ceRkZFU1gwAdQLl60BVTWQdHZ1Zs2ZNnDjxt99+Gz16tKmpaY8ePQgh586ds7S05NrExcXNnz//+PHjz58/nz9/vvJ8Oi1IUQCgQMApKmEYZu7cuXPnzl25cuWbN29+/fVXbkF4eLixsXHDhg2pbCY9Pb1sIltYWKSnp1NZc1JSktTVQcvIjMraAEB5sqZq6I52qsot8ubPn+/i4nLt2rVmzZr9+uuvXPEeHh4//PAD10BLS8vMzCwgIIAbI2VgYECvTkIIqQ8pKrViaP8sAIKFFK0qCSFkwYIFXl5ef/31l6+vb1BQELdAKpUuWrSI1uFZAwOD4uJi5VupVGpoaEhlzXZ2dkXa2lRWBQCEkOpkKCEsw6h+8eaHVSWRGYYZPnz48OHDy850cXH54osvuOkmTZqEhIRQq60yfE9R7UQRbkMFQAtStKr+m5JBQUHKAOVMnz6d4mYcHBxev35dVFTE3TsgKSmJOwhcc9ra2uWG8AOABjBiwtD7l0hzFL+a8DxFWXRGATRMwCn6/7UqFIq0tLTn/0RrM+7u7k2bNt23bx8h5Pnz5zdu3Bg0aBAh5MWLF/v376e1FQDQJJoPsqN4rkp9kKIAUCNCTVEJISQ5OXnOnDknT54sKSkpt5hlWVpbWr9+/ZAhQ/bt2xcfH79w4UJugH90dPTs2bNHjRpFCDl27NjEiROLi4tLS0vNzc2HDh26efNmWlsHgNpVxafPfXB19FalDkhRAKgpAaeohBAydOjQ+Pj4WbNmeXl56erq1tKW/P39nz9/HhcX5+DgoLyFVe/evePj47npPn36JCQkKNtrYyQoAH+wDMPS2xGnuCr1QIoCQA0JOUUlBQUFkZGRe/fuHTlyZG1vzMDAwM/Pr+wc7vosblpbWxvRCcBXdPfpeRWjSFEAoEDAKSopLS1VKBTcs0MAAKqJoZt9fIpRpCgAUCDgFBWZmZn5+/uHh4druhIA4DMN3a65LkCKAgAFAk5RCSFkyZIl48aNk8lkPXr0MDU1LbvY1dVVQ4UBAL+IqN6UhGf3a0OKAkCNCTdFJYSQYcOGZWRkfP31119//XW5xRSvAwWAeozy0HtaK1IXpCgA1JCQU1RCCNm2bdu7d+80XQkA8Bnlofd8ul0zQYoCQM0JOEUlhJB+/fppugwA4Dm691jm02AnQpCiAFBzAk5ROg9NBgChYxiqO+JVXlVJSQnuagQAPCbgFP1vZ/TBgwdHjhx5/vx5uTNNhw8f1kRVAMA7GtunT0pKGjFixMOHD3V1dTds2DBkyBBqZVQFUhQAaka4KSohhBw/fnzo0KFmZmZyuVxbW9vAwCAxMVFHR6dp06ZqrgYAeIplRCxDb8R8VQ4PTJs2rW3btjdv3oyIiOjVq1fnzp0bNGhArRLVIEUBoIaEnKIiQkhISEjv3r1TUlL69ev36aefPn36NCYmxsXFRQ1PEwGAeoIREUZM7aXyCaaMjIywsLCQkBCRSNShQwc/P7+DBw/W6hetFFIUAGpKwCkqkkqlz549mzdvHjdQoLS0lBDi6em5ffv2//znPwUFBWouCAB4iRt6T+2l6mafP39uYmJiY2PDvfX09Cz7cHb1QIoCAAUCTlFJQUGBQqGwsLAghJibm2dlZXELWrRoIZVKnz596uPjo+aaAIB/GBHNizcZUW5u7l9//VXpQmdnZy6yCCG5ubkGBgbKRUZGRi9fvqRXh0qQogBAgYBTVGJpaamvr5+SkuLu7u7m5rZ69ep3797p6urevHmTEGJmZqbmgqphiq+N+oeIVU/mO97chlbEkyeJiflRpiBQ/MvNEhIdHT1lypRKlw4cOHDhwoXctKWl5du3b5WLcnJyrK2t6RWiknqQojxiqa+l6RJUpc2TeJLwJO2FQLApKmEYJiAg4Pjx4127dh0xYsSCBQtatGjh5eUVFhbWtm1bJycnNRcEAHzE0o7Rzp07Hzt27IMt3dzcpFLp8+fPuaduRkdHT5o0iV4hKkGKAkDNCTlFRYSQLVu2fP7554QQU1PTCxcu+Pj4pKWljR49+sSJEwx2mABABSxL+aUiMzOzwYMHL1iwID09fffu3U+ePBk6dGhtftHKIUUBoIaEnKISuVyenp7u6OjIvW/durVGrkUFAF5TsEROb6deUZVV/fLLLzNnzmzTpo2Dg8OpU6eMjIyo1aEapCgA1JyQU1SSkZHRqlWry5cvW1lZqXnbAFBvsCzLqr4nrsL6VG9qZma2Z88eepuuMqQoANSckFNUYm5urqOjw92LBACgeqiPduIRpCgA1JyQU1Skq6s7bty4jRs3KhQKTRcDAHylqdFOdQFSFABqTsgpKiGENGnS5I8//mjevHmfPn2U953ihISEaKgwAOATlhCKHTFepSghSFEAqDEhp6iEELJ69ers7Ozs7OyHDx+WW4wYBQBVsITmaCeqA6fUASkKADUk5BSVEELS09M1XQYA8Bvd0U68gxQFgBoScopKCCF5eXkGBgYSiaTsAplMlp+fj2eHAIAqFApCccBklW5KUhcgRQGghoScoiJCiLu7+927d8stiIyMNDc310RJAMA/LNUX7yBFAaCGhJyikvctKC0t1dLizSOAAUCzWJZV0BuixK99+vdBigKA6oScopKcnByFQpGfn5+Tk6Ocm5+ff+TIEQcHBw1WBgA8Isw75L17904qlRJCkKIAUEPCTFGOhDuL1LNnz3ILGIZZtWpV9VaamJi4d+9euVw+dOhQLy+vig2kUumOHTtevnzZvn37oKAgbuaNGzfKXogaHBxcva0DgPrx7rZ2VGzatGn27NncNFIUAGpCmCnKkWzZsmXu3LmfffZZo0aNlHNNTEyaNWtWaQJ+UFJSkq+v78SJEw0NDdu3b3/16tWWLVuWa9OrVy89Pb0ePXrMmTMnPj5+3rx5hJDff/89KirKx8enJt8HADRCmPv0Xbt23bJlCyEEKQoANSTMFOVIgoODS0pKBg4caG9vT2WNGzdu7Nev3+rVqwkh7969W7Nmzb59+8o2uH79+qNHj5KTk3V0dNq0aRMUFDRz5kwdHR1CSP/+/RcuXEilDABQLyHeIa958+bNmzcnhCBFAaDGhJiiHBEhxN7evtIMXbBgQTXWeOXKlR49enDT3bt3v3LlSsUGnTt35nKzbdu2paWlsbGx3KK///57zZo1R44cKSkpqcamAUBT5CzNF8Wh9zdv3hwyZEifPn127txZcSnLsmfOnFmyZMmUKVOSkpKqvRWkKADUkJBTVEQI+eKLL86cOVNuwZIlS6o32unVq1dWVlbctLW1dUZGhlwuf18DhmGsrKzS0tIIIba2tubm5unp6cuWLWvVqlV+fr4qm0tPTy8uLq5GnQBQqeo9YL1uPlI5ISGhV69e3bt3nz59+uLFi/fv31+uQWlp6bJly968ebN79+7MzMxqbwgpCgBKSNGqkhBCpk6dOmTIkPDw8Hbt2nFz161b9+23327atKk6a5RIlLkpk8lEIpFIJCrbQEtLSyaTlf0a3N1PFi1axM2Ry+V+fn6bN2+eO3fuBzenr69fbv0AUBMMw1TjU3VztNOWLVsGDBgwefJkQsj333+/bt26UaNGlW2gra198+ZNQsiuXbtqsqF6kKLyD7YDANUgRatKRAj5z3/+M2HChKCgoKdPnxJCNm7cOHv27NWrV0+ZMqUaa7Szs0tNTeWm09LS7Ozsyv2plG0gk8kyMzPt7OzKNhCLxe3bt3/+/LkqmzM2Nsad/AAoql6M/vexyvRQ+S737t1r3749N92+ffvo6OjqHbH4IKQoACghRavqv3vbP//8s5+fX9++fX/66afp06evWLFizpw51Vtj3759jxw5wk3/8ccf/fr146Zv376dlZXFNbh8+TI3ffbsWSsrq2bNmhFClOeJpFLppUuXPD09a/C9AECtFFRfqodofn5+bGW4A4cZGRnKp3Gam5vLZLI3b97Uzg+AFAWAGhFyiv73CUwSiSQ0NDQwMHDOnDmLFy/m7hJSPVOmTNm9e3fv3r0NDQ1v3rwZERHBze/fvz93sNfLy+uTTz7p0KFDx44djx8/vn79eu4MlJubW6tWrUxMTK5cueLi4sIdEwYAXqA7SollyYULF8reKamsUaNGLVmyhJuOioqaNWtWxTZhYWFWVlaGhobcTekJIUVFRYQQIyMjalX+E1IUAGpCyCkqKXsWycrKytzc/NWrV8qZ3C30qsTCwuLevXvnz58vLS3dunWrqakpN//06dPKH2XHjh3Xr19PSkr66quvmjRpws28cuVKdHR0YWHh1KlT27RpU6OvBQDqRf1pyO3bt9+8eXOlixo0aKCcDggIiI6Oft9KGjZsmJiYyE0nJiY2aNBAT0+PVoURERG7d+8uNxMpCgDVI8AUVZJcvHix7HtTU9Nyc6rBwMBg0KBB5Wa2bt1aOc0wjL+/v7+/f9kGjRo1el8XHgDqOJZlFfRuJaJgiYGBgauraw3XM2zYsPnz58+dO9fQ0HDr1q3Dhg3j5u/fv79ly5bVuyO9UlpaWqVpiRQFgGoQYIoqSRISEqisCACEjBulRAutPO7fv/+xY8eaNGlibm4ukUjOnz/PzV++fPnMmTO5GPX19U1MTCwoKAgMDJRIJDExMSo+UH7w4MGDBw+mVCkACJ0AU1RJQqlaABA06qOdqBCLxXv37n358mVBQYG7u7vyEte//vpLIvlv+l26dKnsxaEmJiZ0tg0AUBVCTlF0RgGAgrp5hzxOxX107tlFHPQ+AaAuEHKKojMKABSwLKsQ6lOVAQBqTsgpis4oAFCgoPooZD6FKAAADUJOUXRGAYACOauQ0Xssh5xiJAMA8IGQUxSdUQCgQMj79AAANSfkFEVnFAAoYFlCcbQTxVUBAPCCkFMUnVEAoIDuTUl4tlMPAFBjQk5RdEYBgAIF1etAFfzKUQCAGhNyiqIzCgAUsHRHO/EpRQEAKBByiqIzCgAUKAjVfXpexSgAQM0JOUXrQ2f0ZaGiUFeu6SpUYqoj1nQJqjLQFmm6BJXIKT7Kt5axvDppUlVyBSujF378GnpfDzRracvq8eNJVEY8iSaCFK0FSFHV8StF60NnFAA0jvJoJ17FKABAzQk5RdEZBQAK6uwd8t6+fXv06NGCgoK+ffs6OztXbHD//v27d++yLNuhQwdPT096WwYAqAIhpyg/TiIAQB3HEpbbrafyorVL//bt29atW584ceLp06c+Pj5RUVHlGuzYsWPAgAF37969d+9eu3bttm/fTmfDAABVJOQUxZFRAKCA7j49rVXt3r3bxsbm6NGjDMNYWFgsX778yJEjZRv0799//PjxYrGYENKhQ4eFCxdOmjSJzrYBAKpCyCmKI6MAQAH37BB6+/R0cvT8+fNBQUEMwxBCgoKCzp07V66BpaUll6GEECMjI64lAID6CTlFcWQUACigvE9PaT2pqam2trbctK2tbVFRUW5urqmpacWWxcXFS5YsmTZtGqUtAwBUjZBTFJ1RAKBArlDIFNTuEKNQKKKjo6dMmVLp0i5dugwbNoybDgsLmzx5csU2d+7csbGxYRhGlcMDMpls9OjRjo6Os2bNqknZAADVJuQURWcUAChQUL3HsoIQU1NTX1/fSpc6OTkpp/39/SMiIiq2sbKyIoTY2tpmZGRwc9LT0/X09Cru0CsUigkTJuTn5584cUIiQSQCgGYIOUWRvABAAd075LEscXZ2Dg4O/mBLXV1de3v79y3t1q3b6dOnZ8+eTQg5c+ZMt27duPkpKSkmJibGxsYsy06dOvXVq1enTp3S0dGhVT8AQFUJOUVxARMAUMA9VZnWi1Ygjx8/PjExccSIEXPnzl21atXXX3/Nze/Vq9ehQ4cIIdu2bdu6dauOjs64ceOGDh06dOjQ0tJSOtsGAKgKIacojowCAAWUnx1C6YbNpqamUVFRoaGhhYWFkZGRjRs35uavXbvWzc2NENKpU6fDhw+X/YjyslAAAHUScoqiMwoAFLB0nx1Cb1VmZmYVT1QpzzS5u7u7u7tT2xgAQHUJOUXRGQUAChRUH4XMr6cqAwDUnJBTtFY6oyUlJWfPns3JyQkMDHR0dKy0zd27d+/fv+/t7d2mTRtujlwuj4iIePbsmbW1dWBgIC4mAOARuYKV0dupp3h4gKeQogBCI+QUpX8BU2lpaZcuXdasWXPz5s0WLVpUer+ApUuXDhkyJDo6etiwYUuWLOFmBgYGzpo16/r1699//33z5s1fv35NvTYAqCUUHxxCd+AUHyFFAQRIyClK/8jo8ePHc3JyoqOjtbS0PDw8vv3227CwsLINcnNzly9ffvfuXU9Pz5kzZ/r4+HzxxRfm5uY7d+50cXEhhLAs26FDh23bti1cuJB6eQBQG+g+O4RPIVoLkKIAAiTkFKV/ZPTMmTP9+vXT0tIihAwaNOjixYvv3r0r2+DSpUsNGzb09PQkhDRp0sTNzS08PJwQwmUoIYRhGCsrK5lMRr02AKglLKG5Q0/rqco8hRQFECAhpyj9zmhqaqry7qncxKtXr8o2SEtLK3t7VXt7+9TU1LINoqKiLl++PGrUKFU2l5ubi/sCAlBUvQijeHs8uocH+AgpCsBrSNGqon+aXqFQMAzDTYtEIkJIub1zuVyubMC1kcvlyreJiYmDBg1av349d/+qDyouLuZX9x+gjmNZtuy/UBUpFKyCXvgJ/N+0BlJULOxfHIAqpGhV0e+M2tjYZGZmctMZGRksy9rZ2ZVtYGtrW3ZYfUZGhrJBSkpKYGDg/Pnzx44dq+LmrK2ttbW1aRQOAIT8r/dTVTIFWypX0KpBpqC2Kj7SQIq+1ebV/1wAdRpStKron6YPCAg4f/48d7Ty/Pnzbdq0MTAwIITk5uYWFRURQjp06BAfH8+dVMrIyIiNje3YsSM33b17988+++zzzz+nXhUA1CoFy8rpvfh1gok6pCiAAAk5RekfGR0xYsTKlSvHjBnTrFmzNWvW7Ny5k5sfFBTUp0+fkJAQOzu7CRMmBAUFjRo16sCBA2PGjHFwcCCEfPLJJ3l5eQkJCVOmTCGEtG3bdsKECdTLA4DaoFAQivvh/DrBRB1SFECAhJyi9DujBgYGd+7c2bNnT3Z29p9//unn58fNnz9/vvLWzRs3bnKD9i4AABgpSURBVDx8+HBMTMzs2bOHDRvGzZwxY0Zubq5yPc7OztRrA4Bawu3TU1wbrVXxEVIUQICEnKIM36/+2bt3r5vvx2YWlpouRCWmOmJNl6AqA236QzhqA70BNrWO5cl938wM9avxqS23kzLyi2nVEB9xURp98dixY1TWlpGRUVhY6OrqWulShUKRmpoqk8kcHBy4uykJzd69e0+9tWH1TDRdiEp+GeSl6RJUhRSlDimqOn6lKJ5NDwAUKBSsnN4YJVr/OyoUismTJ586dcrY2NjMzOzs2bOWlv/YcX3+/HmrVq3MzMzEYnFeXt6WLVsGDBhAZ9sAAFUh5BTlx34bANRxCpbms+xoHf84ffr0lStXnj59+uzZM1dX16VLl5ZrYGtr++zZs4SEhCdPnqxatWrixIl8P1kEADwl5BRFZxQAKJApFKVyai85pWH8Bw4cGDlypImJCSFk6tSpBw4cKNdAT0/P3Nycm27RosW7d+/K3rATAEBthJyiOE0PABQoFDRHntG6pDQpKalHjx7ctJubW0ZGhlQq1dPTK9fs559/fv369cWLF3/99VeJBKkIABog5BRF7AIABdyJIXprI29ev7548WKlS11cXBo1asRNx8TEbN68uWKbZcuWmZqaFhQUKENTX1+fEPL27duKMUoIkclk+fn5iYmJdL4AAEAVCTlF0RkFAAoULN0H2bFPnz5duXJlpUv79+//xRdfcNMmJiYtW7as2Ia7otPKyionJ4ebk52dLZFIyg2958ycOZMQMnv2bEdHx1GjRjVu3JjKtwAAUJ2QUxSdUQCggO51oAqW/fjjj1W5KYmTk1NwcPD7lvr4+Ny5c+ezzz4jhNy+fdvb21ssfu/t1czMzCQSCfeIIwAANRNyiqIzCgAUcNeBUlwbFcHBwa1aterSpYuTk9PixYsXLVrEze/Xr9/YsWOHDBny559/JiYmtmjRorCwcNOmTR4eHl5evLmNJQDUJ0JOUXRGAYACBUt5n57Kepo0aXLixIl169bl5+fPnTt3/Pjx3PyWLVtaW1sTQhwcHE6cOHH48GFDQ8NWrVrt2LEDFzABgEYIOUURuwBAgUzOlsop3q6Z2qoCAgICAgLKzfz++++5CW9v7y1bttDaFgBAtQk5RdEZBQAKKA+958/zCQEAqBByiqIzCgAUKFhWTnG0E0+eQA0AQIuQU7Q+dEadS9OsSvhxAazMyFnTJaiOL8+h4c3eHyuuD//c3kehIBT36SmuClTxU9/GDRpUcruWOok/fzdYmaYrUBGPUlRL0yXUIiGnaH3+3xEA1IbyPj2fUhQAgAIhpyg6owBAAfXbNdNaFQAALwg5RdEZBQAKFCyhdxkoz/bpAQBqTsgpis4oAFBQKleUyqiNPJPxK0cBAGpMyCmKzigAUMBSfXYIv04wAQDUnJBTFJ1RAKBATvupyrRWBQDAC0JOUXRGAYAClmXr4FOVAQD4Qsgpis4oAFAgZ4mc3s0K+RWjAAA1J+QURWcUACigu0/Pr9FOAAA1J+QUFWm6AACoDxRyBcUXq6B2fCA0NNTPz8/Ly+vbb79VvH+1Z8+e7datW0REBK3tAgBUiZBTFEdGAYACBUvoRR+1VcXExEyePDk0NNTR0XHo0KEWFhbTp0+v2Cw3N3fevHmZmZmvX7+ms2EAgCoScoriyCgA0MASlh5aRW3dunX48OHdunXz8PBYtGjR5s2bK202e/bs2bNnm5qa0touAECVCThF0RkFAAooZijFJI2Li/P19eWmfX19Hz9+LJPJyrUJDw9PSkoaP348lS0CAFSPkFO0tk7Tx8bGFhUVffTRRxJJ5ZtIS0tLTEz09PQ0MzMrOz8zM1Mmk9na2tZSYQBQG1iWZTXxVOWMjIyoqKiK8wMDA3V1dTMzM01MTLg5pqamcrk8KyvL2tpa2aywsHDmzJnHjx9nGKbmZdOFFAUQFCGnKP3OaElJSf/+/RMSEszNzXNzcy9fvlwxE9etW7d06dIWLVpER0fv2rWrb9++hJBdu3YtWrTo5cuX3bt3P3/+PPXCAKD2sCyheO0my5J/ibaZM2euW7eOm05KStq6dWvFNm3bttXV1TU1NS0oKODm5OfnMwyjTFXOwoULBw4caGFhkZOTI5fLCwsLpVKpnp4etW9SLUhRAAEScorS74wePnw4NTU1JiZGV1d37Nixy5cvX79+fdkGmZmZX3/9dWRkpJeX15EjR2bMmNG7d2+RSOTn5/fnn39evHjx3Llz1KsCgFrFKmju0xOWDBgw4NixYx9s2KZNmxMnTrxvqaur6+PHj7npx48f29vb6+rqlm3w+vXrU6dO/f7774SQlJSUOXPmJCcnL1iwoGbV1xRSFECAhJyi9MeMhoaGjhw5kqt1woQJoaGh5RqcPHmyRYsWXl5ehJABAwbk5uZGRkYSQjw9PZs3by4Wi6mXBAC1jVWwNO9LQulC0DFjxuzfvz89PV0mk61bt27MmDHc/NWrV9++fZsQ8vvvvyf8j6ur6+bNmzXeEyVIUQBBEnKK0u+MJicnOzs7c9POzs4ZGRnFxcVlG6SkpLi4uHDTYrHY0dExJSWl2pt79+6dXC6v9scBgAruBBOtF6F0dKBbt27jx4/38PCwsrKSSCTKiDx9+vSzZ8/KNTY2NtbW1qaz4ZpBigIIkJBTlP5peqlUqqOjw03r6uqyLPvu3TvlHEJIUVFR2Vp1dXWLioqqvbmMjIySEudqfxwAylEoFCJRlXdTKV68SQjNgVM//PDD4sWLZTJZ2TFMV69erdjy7t271LZaM5pI0ZJqfxwAykGKVhX9zqiNjU1WVhY3/ebNGz09vXJjXW1sbB49eqR8++bNGxsbm2pvzsnJSeNXGwDUJ9XIUEJ7tBPFRCaEaGlpaWlpUVxhbUOKAvAaUrSq6J+m9/Pzu379Ojd9/fp1Pz+/ig1u377N3afq5cuXqampPj4+1MsAAHViqZ5jonWCiaeQogACJOQUFX/77bd019ioUaNZs2bp6+snJyeHhIQsX77c3d2dENK6dWtjY+NmzZo1bNjw6NGjN27c0NHRmTdvXqdOnUaMGEEIiY+P37Fjx7Vr154+fVpUVJSbm9ukSZMPbi4mJsbV2sxAT/eDLesChT4e8UIb1Z2/2lWtfWX1k1Rr9/fI3ZSs/GLCJWCNX+/epFjLM4YPH0792/GC+lPUxcnJwEC/1r8Y1FE8SlF+XJyHFK0q+v87urq6hoeHx8TEHDt2bOvWrUFBQdz8oUOHNm7cmJs+c+aMra3tb7/91q1bt40bN3IzS0pKcnJymjZtOmjQoJycnMLCQuq1AUAtqZOPDuErpCiAAAk5RRme1VvB3r17u3q7WJnz44ijzMJZ0yXUO5TuXqEGrLi2HnhGl65edY6QDf3lxpNX+bRqyHtyq6X8gSp3yIOa27t3b4B/xwYNLDVdSL3Dl/9eWR6lKD8GfyNFq4of/zsCQF3HUh0vz5f/xQEAaBFwiqIzCgAU0L4OlNaaAAD4Qcgpis4oAFBA/anKAACCIuQURWcUAChgCd0B87zKUQCAGhNyiqIzCgAUUD7BpGBr4VYfAAB1l5BTFJ1RAKCA7q1EWF7t0wMA1JyQUxSdUQCggFUQhZxejMpr4ybIAAB1l5BTFJ1RAKCgzu7TJycn79y5Mz8/f/DgwW3bti23tKSkZO3atcq3bdq06dy5M61NAwCoTsgpyp9uMwDUYayC8ouKzMxMPz+/nJwce3v7Xr16hYeHl2tQXFw8f/78rKysnJycnJwcqVRKZ8MAAFUk5BTFkVEAoID24+forGrbtm2tW7det24dIYRhmJUrVwYGBlZstnTpUq1qPUsaAIAWIacoOqMAQANL9zpQOuu5du1a7969uelu3brNnz+fZVmGYco127hxI8Mw/v7+Pj4+dDYMAFBVAk5RnKYHAAoULEvxRWu0U3p6eoMGDbhpKyur4uLi7Ozssg0YhunRo0dWVlZ8fHznzp25vX8AAPUTcory/shoSkpKq/nzPT09Ka5TLpdfv36dF9cxvHjxori4uEmTJpou5MNu3brl7e1tYGCg6UI+IC8v78mTJ61bt9Z0IR/28OFDU1NTOzs7uqsdOHDg559/XtVPnflPV4o1nDypNWnSzm7dulW6tGyFJ0+eHDRoUMU2L168sLe319LSkslk3BxuQltbu2wzQ0PDc+fOcdOffPJJ3759p06dqqOjQ+uL8EJKSkqb9h8jRTVdyIchRalDipK6kaK874xOmDDBycnJ2tqa7moTExNdXFzorrM2vH37trS01MLCQtOFfFhSUpKTk1PFY/t1jUwme/XqlaOjo6YL+bCMjAxDQ0Pq/zPVhb/5Xbt2/f3339+3tGyFQUFByqCsyM7OLjU1lZt++fKlkZGRkZHR+xq3b9++uLg4LS2tLvwC6oQURYrShRStC3/z+ZWiDNXRsgAAdciOHTu2bNly69YtsVg8b968tLS0ffv2EULu3Lnj6OhoZ2cnlUr19PS4xgcOHPjss8+ysrIkEt7vpQMAUKGeFEVnFADqLalU2rlzZ21tbTs7uytXrly5cqVp06aEkGbNms2cOXPy5Mm//vrrpk2bvL29MzMz79y5s3Xr1mHDhmm6agCAukI9KYrOKADUZyUlJZcvX87Pz+/SpYu5uTk3My4uztra2tLSsrS09N69e4mJiSYmJq1atVKO0wcAAI4aUhSdUQAAAADQGNzaCQAAAAA0Bp1RAAAAANAYdEYBAAAAQGPQGQUAAAAAjRFoZ3TTpk12dnampqajR48uKiqq2CAqKsrHx8fQ0NDPz+/BgwfczLt373766ac+Pj6VPqugNmRnZw8cONDIyMjZ2fnAgQOVtvnuu++srKzMzc2nT58ul8u5mR06dGj0P5MnT1ZPtUq//vor9/OOGTOm0p/366+/7t69e6NGjSIjI9VcW1kFBQUjRowwMTGxt7ffunVrxQbbt2/39fXV09NzcHBYuHChQkHpWb9Vd/78eXd3d0NDw8DAwJSUlIoNevXqpfwTHz58uPorBKFBitYqpCh1SNE6jRWee/fumZqa3r9/v6CgoFu3bgsWLCjXQCaTubi4bNiwobS0dNWqVV5eXgqFgmXZixcv/vjjj1999ZWfn596Sp00adKQIUOKiopu3rxpaGiYlJRUrsHJkycdHR2TkpLevHnTsmXLjRs3cvMdHR1Pnz6dkJCQkJDw6tUr9VTLiYqKMjMze/DgQX5+fmBg4MKFCyu2CQkJOXTokJmZ2bVr19RZWzlz587t3r17QUFBdHQ091eiXINffvnl+vXrUqk0Li7O2dl5w4YNGqkzNzfX2Nj4+PHjJSUl06dP7927d8U2zZo1O3DgAPcnnpqaqv4iQVCQorUKKUodUrSOE2JndPr06cHBwdx0eHi4jY1NuQYXLlywtbWVy+Usy5aUlJiZmd2+fVu5dPfu3eqJUalUqq+vHx0dzb0dNGjQkiVLyrUZMGCAcubu3bt9fX25aUdHR+UH1ezzzz//7LPPuOkLFy7Y2dm9r2WDBg00GKMKhcLCwuLy5cvc24kTJ86aNetf2s+cOfPTTz9VR2UVbNu2rU2bNtx0RkaGlpZWWlpauTbNmjW7cuWK2ksDgUKK1iqkKHVI0TpOiKfpnzx50qxZM266WbNm6enpb9++LdfAy8tLJBIRQrS0tDw8PJ48eaL+Ol++fCmVSr28vLi3zZs3r1hGue9StsHgwYNdXV2HDh2akJCgnoIrLSktLa2goECdBagoOzs7KyurefPm3Ntyv145paWlly5datOmjbqq+4cnT54o67SysrK0tHz27FnFZhMmTHBxcRk4cGBcXJx6CwTBQYrWKqQodUjROk6IndHs7GwjIyNu2tjYmBCSlZVVtkFOTo6hoaHyrbGxcbkG6pGdna2np6d8wGulZeTk5JT9Lvn5+SUlJYSQDRs2XLx4MSwszNTUtFu3bpUOOaol5UoiFX7eOiI7O5sQoizVxMTkX+qcM2eOsbHxxIkT1VTcP6nyF3LFihXh4eGXLl1ydnbu2rVrTk6OemsEYUGK1iqkKHVI0TpOiJ1RS0tL5U58Xl4eN6dsAwsLi/z8fOXb3Nzccg3Uw9LSUiqVymQyZRkVn7JlYWFR9ruYmJhoa2sTQoKCgpycnNzc3DZt2pSXl6fOEe7lSiIVft46gqtKWWqlPy9n0aJF165dO3XqlFgsVl99ZajyF7JPnz4uLi4uLi4//fSTrq7utWvX1FsjCAtStFYhRalDitZxQuyMuru7x8TEcNMxMTF2dnbKHTtlg9jYWO6iv9LS0vj4eA8PD/XXaWdnZ2BgoLwK9cGDB+7u7uXalPsuFRswDCMSidR5AaO7u7uy5piYGAcHBwMDA7VtXXWmpqZWVlbKX6/Sn5cQsmbNmtDQ0HPnzpmZmam3wP/n7u5+//59bjo9PT07O9vNze19jRmGEYvFLB7zC7UJKVqrkKLUIUXrOk0PWtWA+/fvm5iY3L59Oysrq1OnTosWLeLmh4SEnD59mmVZuVzeuHHj1atXFxUVLVmypEWLFlyDvLy8qKio7777zsvLKyoq6unTp7Vd6meffda/f/+8vLwLFy4YGRmlpKSwLPvs2bNBgwZxVwacPXvWzs4uPj4+NTW1WbNmW7ZsYVk2ISHhzJkzr1+/TktLmzlzpqOjY35+fm2XqsRdU3nnzp2srCx/f//Fixdz8+fNm3f27FluOi4ujrtcdNu2bVFRUVKpVG3llbVgwYKAgIDs7OyIiAgTE5O4uDiWZV+9ejVo0KC8vDyWZdesWWNqanr69OmoqCj1/IlX6u3bt6ampgcOHMjPzw8ODu7fvz83f9OmTdyVvy9fvjx+/Hh6enpGRsbChQsbNGjw5s0bjZQKAoEUrVVIUeqQonWcEDujLMvu2rXLzc3NysoqODhY+W943LhxBw4c4KZjYmI6dOhgZmYWEBAQHx/PzYyIiPAt48svv6ztOnNzc0eOHNmgQYOmTZseO3aMmxkXF+fr6yuTybi3q1evdnJysrOzCwkJ4bL10aNH7du3t7Kysre3HzBgwMOHD2u7znJ+++03Nzc3a2vrKVOmvHv3jps5ZsyYQ4cOcdNDhw4t+0u+ePFCzRVyioqKJk2aZGVl1bhx471793IzU1JSfH19c3JyWJadMGFC2TqnT5+ukTpZlr18+XLLli0tLCyCgoKUd5n54YcfuKuAX7x40bFjR2tra1tb2z59+ty7d09TdYJwIEVrFVKUOqRoXcawOBANAAAAABoixDGjAAAAAFBHoDMKAAAAABqDzigAAAAAaAw6owAAAACgMeiMAgAAAIDGoDMKAAAAABqDzigAAAAAaAw6owAAAACgMeiMAgAAAIDGoDMKAAAAABqDzigAAAAAaAw6owAAAACgMRJNFwD1Slxc3M2bN0eMGGFkZKScGRMTc/v27dGjR+vr6xNCCgoK9u/f/+DBA4lE0rlz5/79+zMMo7mSAQDqEKQoCBDDsqyma4D648mTJ+7u7tu3b584caJyZu/evZ8/fx4fH08IiY+P79atW2Fhob+/f1FR0eXLlwcMGHDo0CGRCAfpAQCQoiBE6IwCZW3bttXW1r527Rr3NiMjw8HBYenSpfPmzWNZ1sfHR6FQXL582cLCghASFhbWs2fPXbt2jR07VqNVAwDUFUhREBrsSAFl48aNu3HjRkJCAvd2z549LMuOHDmSEHLnzp379+8vXryYy1BCSPfu3du1axcWFqaxcgEA6hikKAgNjowCZXl5eba2tnPnzv3uu+8IId7e3o6OjmfOnCGEbN++ffLkye3atTMwMFC2f/DggbOz8+3btzVWMQBAXYIUBaHBBUxAmYmJSVBQ0O7duxcvXvz3338/ePDgP//5D7dIJpMRQnr16mVtba1sP2TIEHNzc83UCgBQ9yBFQWjQGQX6xo0bd+jQoWvXrh09etTExKRfv37cfDc3N0JI06ZNBw8erNECAQDqNKQoCApO0wN9CoXCycnJ398/LCxs6NChGzdu5OaXlJS4u7vr6+vfuHHDzMxMOTMjI8PR0VFz9QIA1C1IURAUXMAE9IlEolGjRh04cODNmzdlL/DU1tY+dOhQRkaGu7v7xIkT586dO2LECAcHhz179miwWgCAugYpCoKCI6NQKxITE7ds2aKvr//NN9+UW5SRkbF9+/aoqKjS0lI7O7uOHTv269fP1NRUI3UCANRNSFEQDnRGAQAAAEBjcJoeAAAAADQGnVEAAAAA0Bh0RgEAAABAY9AZBQAAAACN+T/gRv0DtmM+uAAAAABJRU5ErkJggg==" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "param = :kt\n", "cmax = 0.5;\n", "groundtruth = truth[param]\n", "p1 = heatmap(percenterror.(est[:iterative][param], groundtruth); clim = (-cmax, cmax), title = \"iterative\", axesprops...)\n", "p2 = heatmap(percenterror.(est[:fft][param], groundtruth); clim = (-cmax, cmax), title = \"fft\", axesprops...)\n", "p3 = heatmap(percenterror.(est[:integral][param], groundtruth); clim = (-cmax, cmax), title = \"integral\", axesprops...)\n", "p4 = heatmap(percenterror.(est[:lls][param], groundtruth); clim = (-cmax, cmax), title = \"lls\", axesprops...)\n", "p_errkt = plot(p1, p2, p3, p4; layout = 4, size = (900, 600), xlabel=\"ve\", ylabel = \"ktrans\")" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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t2rVqkKb3r176+np9ezZc968eQkJCQsWLCCEHDx4MDo62tvbuzbfBwDUgp/H9N26ddu6dSshBCkKALXEzxTliIKCgkpLSwcNGmRvb09liyEhIf3791+zZg0hpLi4eO3atfv37y/f4ObNm48fP3716pWOjk7btm0DAwNnz56to6NDCBkwYMDixYuplAEAqsXHGfJatGjRokULQghSFABqjY8pyhEQQuzt7avM0EWLFtVgi9euXevZsye33KNHj2vXrlVu0KVLFy4327VrV1ZWFhcXx330999/r1279tixY6WlpTXYNQCoi5Sl+aI49P727dtDhw7t27fvrl27Kn/Ksuy5c+eWLVs2derU5OTkGu8FKQoAtcTnFBUQQr788stz585V+GDZsmU1G+305s0bKysrbtna2jojI0MqlX6oAcMwVlZWaWlphBBbW1tzc/P09PQVK1a0bt06Pz9fkd2lp6eXlJTUoE4AqFLNHrBeNx+pnJiY2Lt37x49esycOXPp0qUHDhyo0KCsrGzFihXv3r3bs2dPZmZmjXeEFAUAOaRodYkIIdOnTx86dGh4eHj79u25tevXr//uu+82b95cky2KRPLclEgkAoFAIBCUb6ClpSWRSMp/DW72kyVLlnBrpFKpr6/vli1b5s+f/9Hd6evrV9g+ANQGwzA1+Km6Odpp69atAwcOnDJlCiHkhx9+WL9+/ejRo8s30NbWvn37NiFk9+7dtdmR5qeo5KPNAEBBSNHqEhBC/vOf/0ycODEwMPDZs2eEkJCQkLlz565Zs2bq1Kk12KKdnV1qaiq3nJaWZmdnV+FPpXwDiUSSmZlpZ2dXvoFQKOzQocOLFy8U2Z2xsTFm8gOgqGYx+t/HKtND5bvcv3+/Q4cO3HKHDh1iYmJqdsbio5CiACCHFK2u/x5t//rrr76+vv369fvll19mzpy5cuXKefPm1WyL/fr1O3bsGLf8xx9/9O/fn1uOjIzMysriGly9epVbPn/+vJWVVfPmzQkh8utEYrH4ypUrHh4etfheAKBSMqovxUM0Pz8/rircicOMjAz50zjNzc0lEsm7d++U8wtAigJArfA5Rf/7BCaRSBQaGhoQEDBv3rylS5dys4TUzNSpU/fs2dOnTx9DQ8Pbt29HRERw6wcMGMCd7PX09Pzss886duzYqVOnkydPbtiwgbsC5erq2rp1axMT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odmvv/769u3by5cvb9q0SSRCKgKAGvA5RRG7AEABd2GI3tbIu7dvL1++XOWnzs7OjRs35pZjY2O3bNlSuc2KFStMTU0LCgrkoamvr08Ief/+feUYJYRIJJL8/PykpCQ6XwAAoJr4nKLojAIABTKW7oPs2GfPnq1atarKTwcMGPDll19yyyYmJq1atarchruj08rKKicnh1uTnZ0tEokqDL3nzJ49mxAyd+5cR0fH0aNHN2nShMq3AABQHJ9TFJ1RAKCA7n2gMpb99NNPFZmUxMnJKSgo6EOfent73717d9q0aYSQyMhILy8voVD4ocZmZmYikYh7xBEAgIrxOUXRGQUACrj7QClujYqgoKDWrVt37drVyclp6dKlS5Ys4db3799/3LhxQ4cO/fPPP5OSklq2bFlYWLh582Z3d3dPT086+wYAqA4+pyg6owBAgYylfExPZTtNmzY9derU+vXr8/Pz58+fP2HCBG59q1atrK2tCSEODg6nTp06evSooaFh69atd+7ciRuYAEAt+JyiiF0AoEAiZcukFKdrprYpf39/f3//Cit/+OEHbsHLy2vr1q209gUAUGN8TlF0RgGAAspD7+nNbwIAoBH4nKLojAIABTKWlVIc7UTp2SEAAJqCzylaHzqj0tx30jIddVehEFGZWN0lKIrRqmIWsToop1ii7hIU9SCjQN0lKGSgp34NfkomIxSP6SluChQhycspK9VSdxUK0UWK0patQSmarhkpOqg5UrR66kNnFADUjvIxvSalKAAABXxOUXRGAYAC6tM109oUAIBG4HOKojMKABTIWELvNlANO6YHAKg9PqcoOqMAQEGZVFYmoXb3pkSzchQAoNb4nKLojAIABSzVZ4do1gUmAIDa43OKojMKABRIaT9VmdamAAA0Ap9TFJ1RAKCAZdk6+FRlAABNwecURWcUACiQskRK74EfmhWjAAC1x+cURWcUACige0yvWaOdAABqj88pKlB3AQBQH8ikMoovVkbt/EBoaKivr6+np+d3330n+/Bmz58/371794iICFr7BQCoFj6nKM6MAgAFMpbQiz5qm4qNjZ0yZUpoaKijo+OwYcMsLCxmzpxZuVlubu6CBQsyMzPfvn1LZ8cAANXE5xTFmVEAoIElLD20itq2bduIESO6d+/u7u6+ZMmSLVu2VNls7ty5c+fONTU1pbVfAIBq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" }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "param = :ve\n", "cmax = 0.5;\n", "groundtruth = truth[param]\n", "p1 = heatmap(percenterror.(est[:iterative][param], groundtruth); clim = (-cmax, cmax), title = \"iterative\", axesprops...)\n", "p2 = heatmap(percenterror.(est[:fft][param], groundtruth); clim = (-cmax, cmax), title = \"fft\", axesprops...)\n", "p3 = heatmap(percenterror.(est[:integral][param], groundtruth); clim = (-cmax, cmax), title = \"integral\", axesprops...)\n", "p4 = heatmap(percenterror.(est[:lls][param], groundtruth); clim = (-cmax, cmax), title = \"lls\", axesprops...)\n", "p_errkt = plot(p1, p2, p3, p4; layout = 4, size = (900, 600), xlabel=\"ve\", ylabel = \"ktrans\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Benchmarks" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "using BenchmarkTools" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: 66 samples with 1 evaluation.\n", " Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m63.557 ms\u001b[22m\u001b[39m … \u001b[35m109.418 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m4.49% … 15.94%\n", " Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m71.078 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m7.61%\n", " Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m76.310 ms\u001b[22m\u001b[39m ± \u001b[32m 11.802 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m7.83% ± 2.90%\n", "\n", " \u001b[39m \u001b[39m \u001b[39m \u001b[39m▂\u001b[39m \u001b[39m \u001b[39m▆\u001b[39m \u001b[39m \u001b[39m█\u001b[39m▄\u001b[34m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[32m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \n", " \u001b[39m▄\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m▆\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m█\u001b[34m█\u001b[39m\u001b[39m▄\u001b[39m█\u001b[39m▄\u001b[39m▄\u001b[39m▄\u001b[39m█\u001b[39m▁\u001b[39m▄\u001b[32m▄\u001b[39m\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▄\u001b[39m▄\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m▄\u001b[39m▄\u001b[39m▄\u001b[39m▄\u001b[39m▁\u001b[39m▁\u001b[39m▄\u001b[39m▄\u001b[39m▄\u001b[39m \u001b[39m▁\n", " 63.6 ms\u001b[90m Histogram: frequency by time\u001b[39m 103 ms \u001b[0m\u001b[1m<\u001b[22m\n", "\n", " Memory estimate\u001b[90m: \u001b[39m\u001b[33m66.53 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m9366\u001b[39m." ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@benchmark fit_tofts_nls(expconv; ca, ct, t)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: 12 samples with 1 evaluation.\n", " Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m414.981 ms\u001b[22m\u001b[39m … \u001b[35m450.679 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m3.93% … 4.51%\n", " Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m438.206 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m4.60%\n", " Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m435.962 ms\u001b[22m\u001b[39m ± \u001b[32m 13.076 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m4.73% ± 0.72%\n", "\n", " \u001b[39m▁\u001b[39m \u001b[39m \u001b[39m▁\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[32m▁\u001b[39m\u001b[39m \u001b[39m \u001b[39m█\u001b[34m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\u001b[39m▁\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m█\u001b[39m \u001b[39m▁\u001b[39m \u001b[39m \n", " \u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[32m█\u001b[39m\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[34m▁\u001b[39m\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m█\u001b[39m \u001b[39m▁\n", " 415 ms\u001b[90m Histogram: frequency by time\u001b[39m 451 ms \u001b[0m\u001b[1m<\u001b[22m\n", "\n", " Memory estimate\u001b[90m: \u001b[39m\u001b[33m242.48 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m113692\u001b[39m." ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@benchmark fit_tofts_nls(fftconv; ca, ct, t)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: 1 sample with 1 evaluation.\n", " Single result which took \u001b[34m17.144 s\u001b[39m (0.02% GC) to evaluate,\n", " with a memory estimate of \u001b[33m52.61 MiB\u001b[39m, over \u001b[33m8002\u001b[39m allocations." ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@benchmark fit_tofts_nls(intconv; ca, ct, t)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "BenchmarkTools.Trial: 2477 samples with 1 evaluation.\n", " Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m1.377 ms\u001b[22m\u001b[39m … \u001b[35m11.206 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m 0.00% … 82.42%\n", " Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m1.537 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m 0.00%\n", " Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m2.003 ms\u001b[22m\u001b[39m ± \u001b[32m 1.280 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m20.45% ± 21.42%\n", "\n", " \u001b[39m▇\u001b[39m█\u001b[34m▇\u001b[39m\u001b[39m▅\u001b[39m▄\u001b[39m▃\u001b[39m▃\u001b[39m▂\u001b[32m▁\u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▂\u001b[39m▁\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\n", " \u001b[39m█\u001b[39m█\u001b[34m█\u001b[39m\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[32m█\u001b[39m\u001b[39m█\u001b[39m▅\u001b[39m▆\u001b[39m▆\u001b[39m▅\u001b[39m▇\u001b[39m▃\u001b[39m▄\u001b[39m▄\u001b[39m▅\u001b[39m▅\u001b[39m▄\u001b[39m▁\u001b[39m▃\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▇\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m▇\u001b[39m▆\u001b[39m▆\u001b[39m▅\u001b[39m▆\u001b[39m \u001b[39m█\n", " 1.38 ms\u001b[90m \u001b[39m\u001b[90mHistogram: \u001b[39m\u001b[90m\u001b[1mlog(\u001b[22m\u001b[39m\u001b[90mfrequency\u001b[39m\u001b[90m\u001b[1m)\u001b[22m\u001b[39m\u001b[90m by time\u001b[39m 6.12 ms \u001b[0m\u001b[1m<\u001b[22m\n", "\n", " Memory estimate\u001b[90m: \u001b[39m\u001b[33m4.49 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m1064\u001b[39m." ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@benchmark fit_tofts_lls(; ca, ct, t)" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.9.0-beta3", "language": "julia", "name": "julia-1.9" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.9.0" } }, "nbformat": 4, "nbformat_minor": 4 }