aboutsummaryrefslogtreecommitdiff
path: root/docs/coverage
diff options
context:
space:
mode:
authorJohannes Ranke <johannes.ranke@jrwb.de>2024-07-29 08:15:30 +0200
committerJohannes Ranke <johannes.ranke@jrwb.de>2024-07-29 08:16:19 +0200
commitba3eaa0d61d4980a61ebbcd105f07d21dd2aabb6 (patch)
tree329430e6ec17482c222eb73a3feb6351fd607e38 /docs/coverage
parentbad2f70c18cd9f57c0d382914327613bcfc9298f (diff)
Add coverage report for pkgdown pagemain
Diffstat (limited to 'docs/coverage')
-rw-r--r--docs/coverage/coverage.html69858
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css5
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css5
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js7
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js7
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js8
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css1
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js1474
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map37
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js2
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map1
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss75
-rw-r--r--docs/coverage/lib/datatables-binding-0.33/datatables.js1539
-rw-r--r--docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css32
-rw-r--r--docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css28
-rw-r--r--docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css1
-rw-r--r--docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js4
-rw-r--r--docs/coverage/lib/highlight.js-6.2/LICENSE24
-rw-r--r--docs/coverage/lib/highlight.js-6.2/highlight.pack.js1
-rw-r--r--docs/coverage/lib/highlight.js-6.2/rstudio.css81
-rw-r--r--docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css21
-rw-r--r--docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js901
-rw-r--r--docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js10881
-rw-r--r--docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js2
-rw-r--r--docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map1
25 files changed, 84996 insertions, 0 deletions
diff --git a/docs/coverage/coverage.html b/docs/coverage/coverage.html
new file mode 100644
index 00000000..749ccdd0
--- /dev/null
+++ b/docs/coverage/coverage.html
@@ -0,0 +1,69858 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<style>body{background-color:white;}</style>
+<link href="lib/htmltools-fill-0.5.8.1/fill.css" rel="stylesheet" />
+<script src="lib/htmlwidgets-1.6.4/htmlwidgets.js"></script>
+<link href="lib/datatables-css-0.0.0/datatables-crosstalk.css" rel="stylesheet" />
+<script src="lib/datatables-binding-0.33/datatables.js"></script>
+<script src="lib/jquery-3.6.0/jquery-3.6.0.min.js"></script>
+<link href="lib/dt-core-1.13.6/css/jquery.dataTables.min.css" rel="stylesheet" />
+<link href="lib/dt-core-1.13.6/css/jquery.dataTables.extra.css" rel="stylesheet" />
+<script src="lib/dt-core-1.13.6/js/jquery.dataTables.min.js"></script>
+<link href="lib/crosstalk-1.2.1/css/crosstalk.min.css" rel="stylesheet" />
+<script src="lib/crosstalk-1.2.1/js/crosstalk.min.js"></script>
+<link href="lib/highlight.js-6.2/rstudio.css" rel="stylesheet" />
+<script src="lib/highlight.js-6.2/highlight.pack.js"></script>
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<link href="lib/bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet" />
+<link href="lib/bootstrap-3.3.5/css/bootstrap-theme.min.css" rel="stylesheet" />
+<script src="lib/bootstrap-3.3.5/js/bootstrap.min.js"></script>
+<script src="lib/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
+<script src="lib/bootstrap-3.3.5/shim/respond.min.js"></script>
+
+</head>
+<body>
+<div class="container-fluid">
+ <style type="text/css">table tr:hover td {
+ font-weight:bold;text-decoration:none
+}
+table tr.covered td{
+ background-color:rgba(95,151,68,0.3)
+}
+
+table tr:hover.covered .num{
+ background-color:rgba(95,151,68,0.7)
+}
+table tr.missed td{
+ background-color:rgba(185,73,71,0.3)
+}
+table tr:hover.missed .num{
+ background-color:rgba(185,73,71,0.7)
+}
+
+table tr.missed:hover td{
+ -webkit-box-shadow:0 -2px 0 0 #b94947 inset;
+ -moz-box-shadow:0 -2px 0 0 #b94947 inset;
+ box-shadow:0 -2px 0 0 #b94947 inset
+}
+table tr.covered:hover td{
+ -webkit-box-shadow:0 -2px 0 0 #5f9744 inset;
+ -moz-box-shadow:0 -2px 0 0 #5f9744 inset;
+ box-shadow:0 -2px 0 0 #5f9744 inset
+}
+
+table tr.never td{
+ background-color:transparent
+}
+
+table tbody {
+ border-style: solid;
+ border: 1px solid rgba(0,0,0,0.1)
+}
+
+table .num {
+ border-right: 1px solid rgba(0,0,0,0.1)
+}
+
+td.coverage em {
+ opacity: 0.5;
+}
+
+table td.coverage {
+ border-right: 1px solid rgba(0,0,0,0.1);
+ font-weight: bold;
+ text-align: center;
+}
+table.table-condensed pre {
+ background-color: transparent;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 11px;
+}
+div#files td {
+ padding: 0;
+ padding-left: 5px;
+}
+
+div#files td.num {
+ padding-right: 5px;
+}
+
+table.table-condensed {
+ font-size: 11px;
+}</style>
+ <div class="col-md-8 col-md-offset-2">
+ <h2>mkin coverage - 89.32%</h2>
+ <div class="tabbable">
+ <ul class="nav nav-tabs" data-tabsetid="covr">
+ <li class="active">
+ <a href="#tab-covr-1" data-toggle="tab" data-value="Files">Files</a>
+ </li>
+ <li>
+ <a href="#tab-covr-2" data-toggle="tab" data-value="Source">Source</a>
+ </li>
+ </ul>
+ <div class="tab-content" data-tabsetid="covr">
+ <div class="tab-pane active" title="Files" data-value="Files" id="tab-covr-1">
+ <div class="datatables html-widget html-fill-item" id="htmlwidget-df8b8ed832d104ae69ed" style="width:100%;height:500px;"></div>
+ <script type="application/json" data-for="htmlwidget-df8b8ed832d104ae69ed">{"x":{"filter":"none","vertical":false,"fillContainer":false,"data":[["<a href=\"#\">R/summary_listing.R<\/a>","<a href=\"#\">R/hierarchical_kinetics.R<\/a>","<a href=\"#\">R/aw.R<\/a>","<a href=\"#\">R/multistart.R<\/a>","<a href=\"#\">R/status.R<\/a>","<a href=\"#\">R/parms.R<\/a>","<a href=\"#\">R/lrtest.mkinfit.R<\/a>","<a href=\"#\">R/mkinresplot.R<\/a>","<a href=\"#\">R/mkinds.R<\/a>","<a href=\"#\">R/f_time_norm_focus.R<\/a>","<a href=\"#\">R/loftest.R<\/a>","<a href=\"#\">R/read_spreadsheet.R<\/a>","<a href=\"#\">R/mhmkin.R<\/a>","<a href=\"#\">R/plot.mixed.mmkin.R<\/a>","<a href=\"#\">R/plot.mkinfit.R<\/a>","<a href=\"#\">R/mkinpredict.R<\/a>","<a href=\"#\">R/update.mkinfit.R<\/a>","<a href=\"#\">R/anova.saem.mmkin.R<\/a>","<a href=\"#\">R/plot.mmkin.R<\/a>","<a href=\"#\">R/max_twa_parent.R<\/a>","<a href=\"#\">R/nafta.R<\/a>","<a href=\"#\">R/saem.R<\/a>","<a href=\"#\">R/llhist.R<\/a>","<a href=\"#\">R/illparms.R<\/a>","<a href=\"#\">R/mkin_wide_to_long.R<\/a>","<a href=\"#\">R/summary.saem.mmkin.R<\/a>","<a href=\"#\">R/summary.nlme.mmkin.R<\/a>","<a href=\"#\">R/summary.mkinfit.R<\/a>","<a href=\"#\">R/mean_degparms.R<\/a>","<a href=\"#\">R/transform_odeparms.R<\/a>","<a href=\"#\">R/mkinmod.R<\/a>","<a href=\"#\">R/mkinfit.R<\/a>","<a href=\"#\">R/endpoints.R<\/a>","<a href=\"#\">R/intervals.R<\/a>","<a href=\"#\">R/ilr.R<\/a>","<a href=\"#\">R/set_nd_nq.R<\/a>","<a href=\"#\">R/parplot.R<\/a>","<a href=\"#\">R/mkinparplot.R<\/a>","<a href=\"#\">R/nlme.R<\/a>","<a href=\"#\">R/mixed.mmkin.R<\/a>","<a href=\"#\">R/mkinerrplot.R<\/a>","<a href=\"#\">R/nlme.mmkin.R<\/a>","<a href=\"#\">R/mmkin.R<\/a>","<a href=\"#\">R/confint.mkinfit.R<\/a>","<a href=\"#\">R/create_deg_func.R<\/a>","<a href=\"#\">R/mkinerrmin.R<\/a>","<a href=\"#\">R/CAKE_export.R<\/a>","<a href=\"#\">R/summary.mmkin.R<\/a>","<a href=\"#\">R/AIC.mmkin.R<\/a>","<a href=\"#\">R/parent_solutions.R<\/a>","<a href=\"#\">R/residuals.mkinfit.R<\/a>","<a href=\"#\">R/add_err.R<\/a>","<a href=\"#\">R/mkin_long_to_wide.R<\/a>","<a href=\"#\">R/logLik.mkinfit.R<\/a>","<a href=\"#\">R/nobs.mkinfit.R<\/a>","<a href=\"#\">R/sigma_twocomp.R<\/a>","<a href=\"#\">R/mkinsub.R<\/a>"],[59,59,84,224,117,82,80,94,178,112,112,120,300,380,336,271,61,114,157,125,153,867,43,168,35,317,240,291,68,278,513,985,255,102,89,164,124,75,145,103,107,267,199,238,159,120,95,56,68,238,31,104,29,43,8,54,17],[28,14,27,76,59,22,20,26,44,39,28,46,110,183,109,87,23,62,47,48,58,466,18,66,11,149,116,167,28,88,225,452,159,53,18,56,64,47,62,31,37,83,51,69,95,43,41,20,17,15,13,12,6,5,1,1,1],[0,0,17,49,39,16,15,21,36,32,23,38,91,152,91,74,20,54,41,42,51,411,16,60,10,136,106,155,26,82,211,425,150,50,17,53,61,45,60,30,36,81,50,68,95,43,41,20,17,15,13,12,6,5,1,1,1],[28,14,10,27,20,6,5,5,8,7,5,8,19,31,18,13,3,8,6,6,7,55,2,6,1,13,10,12,2,6,14,27,9,3,1,3,3,2,2,1,1,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],["0","0","403","168","482","20261","5","976","102","290","1","305","305","634","738","19867308","4","509","523","2","179","2273233","225","867","1025","500","323","44586","6538","30119107","4421","292559","29490","3125","529091","18","160","104","1217374","149","206","3258","1963","773","4031","72485","337","1","247","426770","1607","1285","535","166798","166810","4250","9864"],["0.00%","0.00%","62.96%","64.47%","66.10%","72.73%","75.00%","80.77%","81.82%","82.05%","82.14%","82.61%","82.73%","83.06%","83.49%","85.06%","86.96%","87.10%","87.23%","87.50%","87.93%","88.20%","88.89%","90.91%","90.91%","91.28%","91.38%","92.81%","92.86%","93.18%","93.78%","94.03%","94.34%","94.34%","94.44%","94.64%","95.31%","95.74%","96.77%","96.77%","97.30%","97.59%","98.04%","98.55%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%"]],"container":"<table class=\"row-border\">\n <thead>\n <tr>\n <th>File<\/th>\n <th>Lines<\/th>\n <th>Relevant<\/th>\n <th>Covered<\/th>\n <th>Missed<\/th>\n <th>Hits / Line<\/th>\n <th>Coverage<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"searching":false,"dom":"t","paging":false,"columnDefs":[{"targets":6,"createdCell":"function(td, cellData, rowData, row, col) {\n var percent = cellData.replace(\"%\", \"\");\n if (percent > 90) {\n var grad = \"linear-gradient(90deg, #edfde7 \" + cellData + \", white \" + cellData + \")\";\n } else if (percent > 75) {\n var grad = \"linear-gradient(90deg, #f9ffe5 \" + cellData + \", white \" + cellData + \")\";\n } else {\n var grad = \"linear-gradient(90deg, #fcece9 \" + cellData + \", white \" + cellData + \")\";\n }\n $(td).css(\"background\", grad);\n}\n"},{"className":"dt-right","targets":[1,2,3,4]},{"name":"File","targets":0},{"name":"Lines","targets":1},{"name":"Relevant","targets":2},{"name":"Covered","targets":3},{"name":"Missed","targets":4},{"name":"Hits / Line","targets":5},{"name":"Coverage","targets":6}],"order":[],"autoWidth":false,"orderClasses":false},"callback":"function(table) {\ntable.on('click.dt', 'a', function() {\n files = $('div#files div');\n files.not('div.hidden').addClass('hidden');\n id = $(this).text();\n files.filter('div[id=\\'' + id + '\\']').removeClass('hidden');\n $('ul.nav a[data-value=Source]').text(id).tab('show');\n});\n}"},"evals":["options.columnDefs.0.createdCell","callback"],"jsHooks":[]}</script>
+ </div>
+ <div class="tab-pane" title="Source" data-value="Source" id="tab-covr-2">
+ <div id="files">
+ <div id="R/saem.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("predicted", "std"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit nonlinear mixed models with SAEM</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function uses [saemix::saemix()] as a backend for fitting nonlinear mixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effects models created from [mmkin] row objects using the Stochastic Approximation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Expectation Maximisation algorithm (SAEM).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' An mmkin row object is essentially a list of mkinfit objects that have been</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' obtained by fitting the same model to a list of datasets using [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Starting values for the fixed effects (population mean parameters, argument</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' psi0 of [saemix::saemixModel()] are the mean values of the parameters found</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using [mmkin].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils packageVersion</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom saemix saemix</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [mmkin] row object containing several fits of the same</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinmod] model to different datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should we print information about created objects of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' type [saemix::SaemixModel] and [saemix::SaemixData]?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transformations Per default, all parameter transformations are done</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in mkin. If this argument is set to 'saemix', parameter transformations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are done in 'saemix' for the supported cases, i.e. (as of version 1.1.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO, FOMC, DFOP and HS without fixing `parent_0`, and SFO or DFOP with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' one SFO metabolite.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error_model Possibility to override the error model used in the mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param degparms_start Parameter values given as a named numeric vector will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be used to override the starting values obtained from the 'mmkin' object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_log_parms If TRUE, an attempt is made to use more robust starting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values for population parameters fitted as log parameters in mkin (like</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rate constants) by only considering rate constants that pass the t-test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' when calculating mean degradation parameters using [mean_degparms].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level Possibility to adjust the required confidence level</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parameter that are tested if requested by 'test_log_parms'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param solution_type Possibility to specify the solution type in case the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' automatic choice is not desired</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param no_random_effect Character vector of degradation parameters for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which there should be no variability over the groups. Only used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if the covariance model is not explicitly specified.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariance.model Will be passed to [saemix::saemixModel()]. Per</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' default, uncorrelated random effects are specified for all degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param omega.init Will be passed to [saemix::saemixModel()]. If using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin transformations and the default covariance model with optionally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' excluded random effects, the variances of the degradation parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are estimated using [mean_degparms], with testing of untransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log parameters for significant difference from zero. If not using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin transformations or a custom covariance model, the default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initialisation of [saemix::saemixModel] is used for omega.init.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates A data frame with covariate data for use in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'covariate_models', with dataset names as row names.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariate_models A list containing linear model formulas with one explanatory</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable, i.e. of the type 'parameter ~ covariate'. Covariates must be available</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the 'covariates' data frame.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error.init Will be passed to [saemix::saemixModel()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should we suppress the messages saemix prints at the beginning</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the end of the optimisation process?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param nbiter.saemix Convenience option to increase the number of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' iterations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param control Passed to [saemix::saemix].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further parameters passed to [saemix::saemixModel].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An S3 object of class 'saem.mmkin', containing the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [saemix::SaemixObject] as a list component named 'so'. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object also inherits from 'mixed.mmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [summary.saem.mmkin] [plot.mixed.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) subset(x$data[c("name", "time", "value")]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds) &lt;- paste("Dataset", 6:10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_parent_p0_fixed &lt;- mmkin("FOMC", ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' state.ini = c(parent = 100), fixed_initials = "parent", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_p0_fixed &lt;- saem(f_mmkin_parent_p0_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_parent &lt;- mmkin(c("SFO", "FOMC", "DFOP"), ds, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_sfo &lt;- saem(f_mmkin_parent["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_fomc &lt;- saem(f_mmkin_parent["FOMC", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop &lt;- saem(f_mmkin_parent["DFOP", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_sfo, f_saem_fomc, f_saem_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_sfo, f_saem_dfop, test = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_red &lt;- update(f_saem_dfop, no_random_effect = "g_qlogis")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_dfop, f_saem_dfop_red, test = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_sfo, f_saem_fomc, f_saem_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The returned saem.mmkin object contains an SaemixObject, therefore we can use</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # functions from saemix</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(saemix)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compare.saemix(f_saem_sfo$so, f_saem_fomc$so, f_saem_dfop$so)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "convergence")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "individual.fit")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "npde")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "vpc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_parent_tc &lt;- update(f_mmkin_parent, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_fomc_tc &lt;- saem(f_mmkin_parent_tc["FOMC", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_fomc, f_saem_fomc_tc, test = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_sfo &lt;- mkinmod(parent = mkinsub("SFO", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fomc_sfo &lt;- mkinmod(parent = mkinsub("FOMC", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following fit uses analytical solutions for SFO-SFO and DFOP-SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and compiled ODEs for FOMC that are much slower</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin(list(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "SFO-SFO" = sfo_sfo, "FOMC-SFO" = fomc_sfo, "DFOP-SFO" = dfop_sfo),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # saem fits of SFO-SFO and DFOP-SFO to these data take about five seconds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # each on this system, as we use analytical solutions written for saemix.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # When using the analytical solutions written for mkin this took around</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # four minutes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_sfo_sfo &lt;- saem(f_mmkin["SFO-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo &lt;- saem(f_mmkin["DFOP-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can use print, plot and summary methods to check the results</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(f_saem_dfop_sfo, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following takes about 6 minutes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo_deSolve &lt;- saem(f_mmkin["DFOP-SFO", ], solution_type = "deSolve",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nbiter.saemix = c(200, 80))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #anova(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_saem_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_saem_dfop_sfo_deSolve))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If the model supports it, we can also use eigenvalue based solutions, which</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # take a similar amount of time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #f_saem_sfo_sfo_eigen &lt;- saem(f_mmkin["SFO-SFO", ], solution_type = "eigen",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # control = list(nbiter.saemix = c(200, 80), nbdisplay = 10))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saem &lt;- function(object, ...) UseMethod("saem")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saem.mmkin &lt;- function(object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = c("mkin", "saemix"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_start = numeric(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.level = 0.6,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_random_effect = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = c(1, 1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nbiter.saemix = c(300, 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = list(displayProgress = FALSE, print = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nbiter.saemix = nbiter.saemix,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> save = FALSE, save.graphs = FALSE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = FALSE, quiet = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations &lt;- match.arg(transformations)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m_saemix &lt;- saemix_model(object, verbose = verbose,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_start = degparms_start,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = test_log_parms, conf.level = conf.level,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = transformations,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = covariance.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = omega.init,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = covariates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models = covariate_models,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = error.init,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_random_effect = no_random_effect,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_saemix &lt;- saemix_data(object, covariates = covariates, verbose = verbose)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_failed &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FIM_failed &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> utils::capture.output(f_saemix &lt;- try(saemix(m_saemix, d_saemix, control)), split = !quiet)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">180</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(f_saemix, "try-error")) fit_failed &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data &lt;- nlme_data(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!fit_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">186</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(is.na(f_saemix@results@se.fixed))) FIM_failed &lt;- c(FIM_failed, "fixed effects")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(is.na(c(f_saemix@results@se.omega, f_saemix@results@se.respar)))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">188</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FIM_failed &lt;- c(FIM_failed, "random effects and error model parameters")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim &lt;- f_saemix@results@fixed.effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(transparms_optim) &lt;- f_saemix@results@name.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms_optim &lt;- backtransform_odeparms(transparms_optim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">774<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms_optim &lt;- transparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix_data_ds &lt;- f_saemix@data@data$ds</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_ds_order &lt;- as.character(unique(return_data$ds))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix_ds_order &lt;- unique(saemix_data_ds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi &lt;- saemix::psi(f_saemix)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(psi) &lt;- saemix_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data$predicted &lt;- f_saemix@model@model(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi = psi[mkin_ds_order, ],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> id = as.numeric(return_data$ds),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xidep = return_data[c("time", "name")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data &lt;- transform(return_data,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual = value - predicted,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> std = sigma_twocomp(predicted,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_saemix@results@respar[1], f_saemix@results@respar[2]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data &lt;- transform(return_data,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = residual / std)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod = object[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin = object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = object[[1]]$solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = transformations,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">227</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = object[[1]]$transform_fractions,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = covariates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models = covariate_models,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sm = m_saemix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">232</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> so = f_saemix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call = call,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = fit_time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FIM_failed = FIM_failed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean_dp_start = attr(m_saemix, "mean_dp_start"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.fixed = object[[1]]$bparms.fixed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data = return_data,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object[[1]]$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date.fit = date(),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemixversion = as.character(utils::packageVersion("saemix")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinversion = as.character(utils::packageVersion("mkin")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Rversion = paste(R.version$major, R.version$minor, sep=".")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!fit_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$mkin_ds_order &lt;- mkin_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$saemix_ds_order &lt;- saemix_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$bparms.optim &lt;- bparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- c("saem.mmkin", "mixed.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An saem.mmkin object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.saem.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat( "Kinetic nonlinear mixed-effects model fit by SAEM" )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStructural model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- x$mmkin[[1]]$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">270</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">271</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">272</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFit did not terminate successfully\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nLikelihood computed by importance sampling\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- try(logLik(x$so, type = "is"), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(ll, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">277</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Not available\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">278</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> AIC = AIC(x$so, type = "is"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> BIC = BIC(x$so, type = "is"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> logLik = logLik(x$so, type = "is"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">284</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">285</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- parms(x, ci = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(conf.int, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">290</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">291</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">293</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An [saemix::SaemixModel] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">296</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saemix_model &lt;- function(object, solution_type = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = c("mkin", "saemix"), error_model = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_start = numeric(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = "auto", no_random_effect = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">301</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">302</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL, covariate_models = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">303</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = numeric(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = FALSE, conf.level = 0.6, verbose = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">306</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">2346<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_model &lt;- object[[1]]$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">310</td>
+ <td class="coverage">2346<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkin_model$spec) &gt; 1 &amp; solution_type[1] == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("mkin analytical solutions not supported for more thane one observed variable")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">312</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">313</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_optim &lt;- mean_degparms(object, test_log_parms = test_log_parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na_degparms &lt;- names(which(is.na(degparms_optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(na_degparms) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">317</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("Did not find valid starting values for ", paste(na_degparms, collapse = ", "), "\n",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">318</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Now trying with test_log_parms = FALSE")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">319</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_optim &lt;- mean_degparms(object, test_log_parms = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">320</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">321</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">322</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_optim &lt;- backtransform_odeparms(degparms_optim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">323</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">324</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">325</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">327</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed &lt;- object[[1]]$bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">328</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transformations are done in the degradation function by default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # (transformations = "mkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">331</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = rep(0, length(degparms_optim))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">332</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">333</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim_parm_names &lt;- grep('_0$', names(degparms_optim), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">334</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed_parm_names &lt;- grep('_0$', names(degparms_fixed), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">335</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">336</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed_names &lt;- setdiff(names(degparms_fixed), odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">337</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed &lt;- degparms_fixed[odeparms_fixed_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">338</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">339</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed &lt;- degparms_fixed[odeini_fixed_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">340</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_fixed) &lt;- gsub('_0$', '', odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">341</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">342</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">343</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">344</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Model functions with analytical solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">345</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Fixed parameters, use_of_ff = "min" and turning off sinks currently not supported here</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">346</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In general, we need to consider exactly how the parameters in mkinfit were specified,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">347</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # as the parameters are currently mapped by position in these solutions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">348</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sinks &lt;- sapply(mkin_model$spec, function(x) x$sink)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">349</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(odeparms_fixed) == 0 &amp; mkin_model$use_of_ff == "max" &amp; all(sinks)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">350</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parent only</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">351</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkin_model$spec) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">352</td>
+ <td class="coverage">1748<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_type &lt;- mkin_model$spec[[1]]$type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">353</td>
+ <td class="coverage">1748<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(odeini_fixed) == 1 &amp;&amp; !grepl("_bound$", names(odeini_fixed))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">354</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">355</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("saemix transformations are not supported for parent fits with fixed initial parent value")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">356</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">357</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">358</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("saemix needs at least two parameters to work on.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">359</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">360</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">361</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">362</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed / (xidep[, "time"]/exp(psi[id, 2]) + 1)^exp(psi[id, 1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">363</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">364</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">365</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">366</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">367</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- plogis(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">368</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">369</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed * (g * exp(- exp(psi[id, 1]) * t) +</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">370</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * exp(- exp(psi[id, 2]) * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">371</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">372</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">373</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">374</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">375</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- exp(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">376</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">377</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 = exp(psi[id, 1])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">378</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed * ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">379</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">380</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * tb) * exp(- exp(psi[id, 2]) * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">381</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">382</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">383</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">384</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(odeini_fixed) == 2) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">385</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("SFORB with fixed initial parent value is not supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">386</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">387</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">388</td>
+ <td class="coverage">785<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">389</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">390</td>
+ <td class="coverage">2628025<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * exp( - exp(psi[id, 2]) * xidep[, "time"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">391</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">392</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">393</td>
+ <td class="coverage">502<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">394</td>
+ <td class="coverage">4054103<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * exp( - psi[id, 2] * xidep[, "time"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">395</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">396</td>
+ <td class="coverage">502<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">397</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">398</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">399</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">400</td>
+ <td class="coverage">76<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">401</td>
+ <td class="coverage">41<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">402</td>
+ <td class="coverage">510269<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] / (xidep[, "time"]/exp(psi[id, 3]) + 1)^exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">403</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">404</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">405</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">406</td>
+ <td class="coverage">432565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] / (xidep[, "time"]/psi[id, 3] + 1)^psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">407</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">408</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">409</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">410</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">411</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">412</td>
+ <td class="coverage">677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">413</td>
+ <td class="coverage">637<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">414</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- plogis(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">415</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">416</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (g * exp(- exp(psi[id, 2]) * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">417</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * exp(- exp(psi[id, 3]) * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">418</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">419</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">420</td>
+ <td class="coverage">40<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">421</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">422</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">423</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (g * exp(- psi[id, 2] * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">424</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * exp(- psi[id, 3] * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">425</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">426</td>
+ <td class="coverage">40<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">427</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">428</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">429</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFORB") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">430</td>
+ <td class="coverage">150<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">431</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">432</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_12 &lt;- exp(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">433</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_21 &lt;- exp(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">434</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_1output &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">435</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">436</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">437</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">438</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">439</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">440</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">441</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (((k_12 + k_21 - b1)/(b2 - b1)) * exp(-b1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">442</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((k_12 + k_21 - b2)/(b1 - b2)) * exp(-b2 * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">443</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">444</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">445</td>
+ <td class="coverage">20<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">446</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_12 &lt;- psi[id, 3]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">447</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_21 &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">448</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_1output &lt;- psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">449</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">450</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">451</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">452</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">453</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">454</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">455</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (((k_12 + k_21 - b1)/(b2 - b1)) * exp(-b1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">456</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((k_12 + k_21 - b2)/(b1 - b2)) * exp(-b2 * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">457</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">458</td>
+ <td class="coverage">20<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">459</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">460</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">461</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">462</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">463</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">464</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- exp(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">465</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">466</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">467</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">468</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">469</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * tb) * exp(- exp(psi[id, 3]) * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">470</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">471</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">472</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">473</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">474</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">475</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">476</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- psi[id, 2] * t),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">477</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- psi[id, 2] * tb) * exp(- psi[id, 3] * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">478</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">479</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">480</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">481</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">482</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">483</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">484</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">485</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parent with one metabolite</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">486</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parameter names used in the model functions are as in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">487</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # https://nbviewer.jupyter.org/urls/jrwb.de/nb/Symbolic%20ODE%20solutions%20for%20mkin.ipynb</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">488</td>
+ <td class="coverage">2192<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> types &lt;- unname(sapply(mkin_model$spec, function(x) x$type))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">489</td>
+ <td class="coverage">2192<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkin_model$spec) == 2 &amp;! "SFORB" %in% types ) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">490</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Initial value for the metabolite (n20) must be fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">491</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (names(odeini_fixed) == names(mkin_model$spec)[2]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">492</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n20 &lt;- odeini_fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">493</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_name &lt;- names(mkin_model$spec)[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">494</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(types, c("SFO", "SFO"))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">495</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">496</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">497</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">498</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">499</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">500</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- exp(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">501</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- plogis(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">502</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">503</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">504</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (((k2 - k1) * n20 - f12 * k1 * n10) * exp(- k2 * t)) / (k2 - k1) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">505</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * k1 * n10 * exp(- k1 * t)) / (k2 - k1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">506</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">507</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">508</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">509</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">510</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">511</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">512</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">513</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- psi[id, 3]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">514</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">515</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">516</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">517</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (((k2 - k1) * n20 - f12 * k1 * n10) * exp(- k2 * t)) / (k2 - k1) +</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">518</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * k1 * n10 * exp(- k1 * t)) / (k2 - k1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">519</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">520</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">521</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">522</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">523</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">524</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(types, c("DFOP", "SFO"))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">525</td>
+ <td class="coverage">286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">526</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">527</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">528</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">529</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">530</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- plogis(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">531</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l1 &lt;- exp(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">532</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l2 &lt;- exp(psi[id, 5])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">533</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- plogis(psi[id, 6])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">534</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">535</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * (g * exp(- l1 * t) + (1 - g) * exp(- l2 * t)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">536</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * g - f12) * l2 * n10 * exp(- l2 * t)) / (l2 - k2) -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">537</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * g * l1 * n10 * exp(- l1 * t)) / (l1 - k2) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">538</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((((l1 - k2) * l2 - k2 * l1 + k2^2) * n20 +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">539</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * l1 + (f12 * g - f12) * k2) * l2 -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">540</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 * g * k2 * l1) * n10) * exp( - k2 * t)) /</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">541</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((l1 - k2) * l2 - k2 * l1 + k2^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">542</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">543</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">544</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">545</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">546</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">547</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">548</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">549</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- psi[id, 3]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">550</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l1 &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">551</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l2 &lt;- psi[id, 5]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">552</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- psi[id, 6]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">553</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">554</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * (g * exp(- l1 * t) + (1 - g) * exp(- l2 * t)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">555</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * g - f12) * l2 * n10 * exp(- l2 * t)) / (l2 - k2) -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">556</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * g * l1 * n10 * exp(- l1 * t)) / (l1 - k2) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">557</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((((l1 - k2) * l2 - k2 * l1 + k2^2) * n20 +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">558</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * l1 + (f12 * g - f12) * k2) * l2 -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">559</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 * g * k2 * l1) * n10) * exp( - k2 * t)) /</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">560</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((l1 - k2) * l2 - k2 * l1 + k2^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">561</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">562</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">563</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 3, 1, 1, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">564</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">565</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">566</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">567</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">568</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">569</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">570</td>
+ <td class="coverage">2192<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.function(model_function) &amp; solution_type == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">571</td>
+ <td class="coverage">2083<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "analytical saemix"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">572</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">573</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">574</td>
+ <td class="coverage">109<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">575</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Using saemix transformations is only supported if an analytical solution is implemented for saemix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">576</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">577</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">578</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "auto")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">579</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type &lt;- object[[1]]$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">580</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">581</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define some variables to avoid function calls in model function</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">582</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim_names &lt;- names(degparms_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">583</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim_names &lt;- gsub('_0$', '', odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">584</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diff_names &lt;- names(mkin_model$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">585</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_transparms_optim_names &lt;- setdiff(transparms_optim_names, odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">586</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates &lt;- object[[1]]$transform_rates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">587</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions &lt;- object[[1]]$transform_fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">588</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">589</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get native symbol info for speed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">590</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">591</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve" &amp; !is.null(mkin_model$cf)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">592</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_model$symbols &lt;- try(deSolve::checkDLL(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">593</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dllname = mkin_model$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">594</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">595</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">596</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(mkin_model$symbols, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">597</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">598</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">599</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">600</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">601</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define the model function</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">602</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">603</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">604</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uid &lt;- unique(id)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">605</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">606</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_list &lt;- lapply(uid, function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">607</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">608</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim &lt;- as.numeric(psi[i, ]) # psi[i, ] is a dataframe when called in saemix.predict</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">609</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(transparms_optim) &lt;- transparms_optim_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">610</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">611</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim &lt;- transparms_optim[odeini_optim_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">612</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_optim) &lt;- odeini_optim_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">613</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">614</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- c(odeini_optim, odeini_fixed)[diff_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">615</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">616</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_optim &lt;- backtransform_odeparms(transparms_optim[ode_transparms_optim_names], mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">617</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">618</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">619</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- c(odeparms_optim, odeparms_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">620</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">621</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xidep_i &lt;- xidep[which(id == i), ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">622</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">623</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type[1] == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">624</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_values &lt;- mkin_model$deg_func(xidep_i, odeini, odeparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">625</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">626</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">627</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i_time &lt;- xidep_i$time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">628</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i_name &lt;- xidep_i$name</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">629</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">630</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_wide &lt;- mkinpredict(mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">631</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = odeparms, odeini = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">632</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">633</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = sort(unique(i_time)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">634</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na_stop = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">635</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">636</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">637</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_index &lt;- cbind(as.character(i_time), as.character(i_name))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">638</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_values &lt;- out_wide[out_index]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">639</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">640</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out_values)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">641</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">642</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- unlist(res_list)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">643</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">644</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">645</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">646</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">647</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(error_model, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">648</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = object[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">649</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">650</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.model &lt;- switch(error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">651</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "constant",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">652</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "combined",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">653</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "constant")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">654</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">655</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">656</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("The error model 'obs' (variance by variable) can currently not be transferred to an saemix model")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">657</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">658</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">659</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_psi0 &lt;- degparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">660</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_psi0[names(degparms_start)] &lt;- degparms_start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">661</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0_matrix &lt;- matrix(degparms_psi0, nrow = 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">662</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list("(Intercept)", names(degparms_psi0)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">663</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">664</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (covariance.model[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">665</td>
+ <td class="coverage">2062<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance_diagonal &lt;- rep(1, length(degparms_optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">666</td>
+ <td class="coverage">2062<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(no_random_effect)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">667</td>
+ <td class="coverage">766<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_no_random &lt;- which(names(degparms_psi0) %in% no_random_effect)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">668</td>
+ <td class="coverage">766<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance_diagonal[degparms_no_random] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">669</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">670</td>
+ <td class="coverage">2062<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = diag(covariance_diagonal)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">671</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">672</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">673</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (omega.init[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">674</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">675</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_eta_ini &lt;- as.numeric( # remove names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">676</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean_degparms(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">677</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random = TRUE, test_log_parms = TRUE)$eta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">678</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">679</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init &lt;- 2 * diag(degparms_eta_ini^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">680</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">681</td>
+ <td class="coverage">774<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init &lt;- matrix(nrow = 0, ncol = 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">682</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">683</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">684</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">685</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariate_models)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">686</td>
+ <td class="coverage">2027<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model &lt;- matrix(nrow = 0, ncol = 0) # default in saemixModel()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">687</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">688</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_dependent &lt;- sapply(covariate_models, function(x) as.character(x[[2]]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">689</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates_in_models = unique(unlist(lapply(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">690</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models, function(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">691</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(attr(terms(x), "factors"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">692</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">693</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates_not_available &lt;- setdiff(covariates_in_models, names(covariates))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">694</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(covariates_not_available) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">695</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Covariate(s) ", paste(covariates_not_available, collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">696</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " used in the covariate models not available in the covariate data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">697</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">698</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0_matrix &lt;- rbind(psi0_matrix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">699</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> matrix(0, nrow = length(covariates), ncol = ncol(psi0_matrix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">700</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(names(covariates), colnames(psi0_matrix))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">701</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model &lt;- matrix(0, nrow = length(covariates),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">702</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ncol = ncol(psi0_matrix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">703</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">704</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = names(covariates),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">705</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms = colnames(psi0_matrix)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">706</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">707</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Covariate models with saemix transformations currently not supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">708</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">709</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_trans &lt;- as.data.frame(t(sapply(object, parms, transformed = TRUE)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">710</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (covariate_model in covariate_models) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">711</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_name &lt;- as.character(covariate_model[[2]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">712</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_data &lt;- cbind(parms_trans, covariates)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">713</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ini_model &lt;- lm(covariate_model, data = model_data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">714</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ini_coef &lt;- coef(ini_model)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">715</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0_matrix[names(ini_coef), covariate_name] &lt;- ini_coef</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">716</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model[names(ini_coef)[-1], covariate_name] &lt;- as.numeric(as.logical(ini_coef[-1]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">717</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">718</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">719</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">720</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- saemix::saemixModel(model_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">721</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0 = psi0_matrix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">722</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Mixed model generated from mmkin object",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">723</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = transform.par,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">724</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.model = error.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">725</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = verbose,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">726</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = covariance.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">727</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model = covariate.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">728</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = omega.init,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">729</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = error.init,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">730</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">731</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">732</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "mean_dp_start") &lt;- degparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">733</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">734</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">735</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">736</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">737</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom rlang !!!</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">738</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An [saemix::SaemixData] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">739</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">740</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saemix_data &lt;- function(object, covariates = NULL, verbose = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">741</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">742</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">743</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">744</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_list &lt;- lapply(object, function(x) x$data[c("time", "variable", "observed")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">745</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_list) &lt;- ds_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">746</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_saemix_all &lt;- vctrs::vec_rbind(!!!ds_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">747</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_saemix &lt;- data.frame(ds = ds_saemix_all$ds,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">748</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name = as.character(ds_saemix_all$variable),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">749</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = ds_saemix_all$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">750</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> value = ds_saemix_all$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">751</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stringsAsFactors = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">752</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">753</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.covariates &lt;- names(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">754</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates$ds &lt;- rownames(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">755</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_saemix &lt;- merge(ds_saemix, covariates, sort = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">756</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">757</td>
+ <td class="coverage">2027<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.covariates &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">758</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">759</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">760</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- saemix::saemixData(ds_saemix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">761</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.group = "ds",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">762</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.predictors = c("time", "name"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">763</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.response = "value",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">764</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.covariates = name.covariates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">765</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = verbose,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">766</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">767</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">768</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">769</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">770</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logLik method for saem.mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">771</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">772</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The fitted [saem.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">773</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to [saemix::logLik.SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">774</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method Passed to [saemix::logLik.SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">775</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">776</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">logLik.saem.mmkin &lt;- function(object, ..., method = c("is", "lin", "gq")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">777</td>
+ <td class="coverage">4404<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">778</td>
+ <td class="coverage">4404<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(logLik(object$so, method = method))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">779</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">780</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">781</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">782</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.saem.mmkin &lt;- function(object, ..., evaluate = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">783</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- object$call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">784</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For some reason we get saem.mmkin in the call when using mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">785</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # so we need to fix this so we do not have to export saem.mmkin in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">786</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # addition to the S3 method</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">787</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[1]] &lt;- saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">788</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">789</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We also need to provide the mmkin object in the call, so it</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">790</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # will also be found when called by testthat or pkgdown</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">791</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[2]] &lt;- object$mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">792</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">793</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">794</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">795</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">796</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">797</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">798</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">799</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">800</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">801</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">802</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">803</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">804</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">805</td>
+ <td class="coverage">472<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">806</td>
+ <td class="coverage">472<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">807</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">808</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">809</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">810</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">811</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">812</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">813</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">814</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ci Should a matrix with estimates and confidence interval boundaries</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">815</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be returned? If FALSE (default), a vector of estimates is returned if no</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">816</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' covariates are given, otherwise a matrix of estimates is returned, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">817</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each column corresponding to a row of the data frame holding the covariates</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">818</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates A data frame holding covariate values for which to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">819</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' return parameter values. Only has an effect if 'ci' is FALSE.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">820</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.saem.mmkin &lt;- function(object, ci = FALSE, covariates = NULL, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">821</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cov.mod &lt;- object$sm@covariance.model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">822</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_cov_mod_parms &lt;- sum(cov.mod[upper.tri(cov.mod, diag = TRUE)])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">823</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_parms &lt;- length(object$sm@name.modpar) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">824</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_cov_mod_parms +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">825</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(object$sm@name.sigma)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">826</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">827</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">828</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- matrix(rep(NA, 3 * n_parms), ncol = 3)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">829</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(conf.int) &lt;- c("estimate", "lower", "upper")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">830</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">831</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- object$so@results@conf.int[c("estimate", "lower", "upper")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">832</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(conf.int) &lt;- object$so@results@conf.int[["name"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">833</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int.var &lt;- grepl("^Var\\.", rownames(conf.int))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">834</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- conf.int[!conf.int.var, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">835</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int.cov &lt;- grepl("^Cov\\.", rownames(conf.int))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">836</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- conf.int[!conf.int.cov, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">837</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">838</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> estimate &lt;- conf.int[, "estimate"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">839</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">840</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(estimate) &lt;- rownames(conf.int)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">841</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">842</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ci) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">843</td>
+ <td class="coverage">1034<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(conf.int)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">844</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">845</td>
+ <td class="coverage">1870<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">846</td>
+ <td class="coverage">1760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(estimate)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">847</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">848</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> est_for_cov &lt;- matrix(NA,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">849</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = length(object$sm@name.modpar), ncol = nrow(covariates),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">850</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = (list(object$sm@name.modpar, rownames(covariates))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">851</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covmods &lt;- object$covariate_models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">852</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(covmods) &lt;- sapply(covmods, function(x) as.character(x[[2]]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">853</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (deg_parm_name in rownames(est_for_cov)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">854</td>
+ <td class="coverage">440<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (deg_parm_name %in% names(covmods)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">855</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate &lt;- covmods[[deg_parm_name]][[3]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">856</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta_degparm_name &lt;- paste0("beta_", covariate,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">857</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(", deg_parm_name, ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">858</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> est_for_cov[deg_parm_name, ] &lt;- estimate[deg_parm_name] +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">859</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates[[covariate]] * estimate[beta_degparm_name]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">860</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">861</td>
+ <td class="coverage">330<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> est_for_cov[deg_parm_name, ] &lt;- estimate[deg_parm_name]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">862</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">863</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">864</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(est_for_cov)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">865</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">866</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">867</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/status.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Method to get status information for fit array objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The object to investigate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The object to be printed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For potential future extensions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object with the same dimensions as the fit array</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' suitable printing method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">11</td>
+ <td class="coverage">589<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("status", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("SFO", "FOMC"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS B" = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' status(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sww &lt;- 0 # Counter for Shapiro-Wilks warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">31</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sw &lt;- fit$summary_warnings</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> swn &lt;- names(sw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(sw) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">35</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(grepl("S", swn))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">36</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sww &lt;&lt;- sww + 1</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">37</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> swn &lt;- gsub("S", paste0("S", sww), swn)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">39</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warnstring &lt;- paste(swn, collapse = ", ")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">40</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(sw) &lt;- swn</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">41</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;&lt;- c(all_summary_warnings, sw)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(warnstring)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> u_swn &lt;- unique(names(all_summary_warnings))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(result, "unique_warnings") &lt;- all_summary_warnings[u_swn]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.status.mmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> u_w &lt;- attr(x, "unique_warnings")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(x, "unique_warnings") &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(u_w)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(names(u_w)[i], ": ", u_w[i], "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "OK")) cat("OK: No warnings\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">69</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "E")) cat("E: Error\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.mhmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object[[1]], "saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_func &lt;- function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">81</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$FIM_failed)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">84</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_values &lt;- c("fixed effects" = "Fth",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">85</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "random effects and error model parameters" = "FO")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">86</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(paste(return_values[fit$FIM_failed], collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">94</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Only mhmkin objects containing saem.mmkin objects currently supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object, test_func)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.mhmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.status.mhmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "OK")) cat("OK: Fit terminated successfully\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">112</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "Fth")) cat("Fth: Could not invert FIM for fixed effects\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "FO")) cat("FO: Could not invert FIM for random effects and error model parameters\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">114</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "Fth, FO")) cat("Fth, FO: Could not invert FIM for fixed effects, nor for random effects and error model parameters\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">115</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "E")) cat("E: Error\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/endpoints.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to calculate endpoints for further use from kinetic models fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function calculates DT50 and DT90 values as well as formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from kinetic models fitted with mkinfit. If the SFORB model was specified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for one of the parents or metabolites, the Eigenvalues are returned. These</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are equivalent to the rate constants of the DFOP model, but with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' advantage that the SFORB model can also be used for metabolites.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Additional DT50 values are calculated from the FOMC DT90 and k1 and k2 from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' HS and DFOP, as well as from Eigenvalues b1 and b2 of any SFORB models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit An object of class [mkinfit], [nlme.mmkin] or [saem.mmkin], or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' another object that has list components mkinmod containing an [mkinmod]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation model, and two numeric vectors, bparms.optim and bparms.fixed,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that contain parameter values for that model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates Numeric vector with covariate values for all variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' any covariate models in the object. If given, it overrides 'covariate_quantile'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariate_quantile This argument only has an effect if the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object has covariate models. If so, the default is to show endpoints</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for the median of the covariate values (50th percentile).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats optimize</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list with a matrix of dissipation times named distimes, and, if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' applicable, a vector of formation fractions named ff and, if the SFORB model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' was in use, a vector of eigenvalues of these SFORB models, equivalent to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP rate constants</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The function is used internally by [summary.mkinfit],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [summary.nlme.mmkin] and [summary.saem.mmkin].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_2 &lt;- mkinfit("DFOP", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_3 &lt;- mkinfit("SFORB", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">endpoints &lt;- function(fit, covariates = NULL, covariate_quantile = 0.5) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod &lt;- fit$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(mkinmod$spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$covariate_models)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = as.data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> apply(fit$covariates, 2, quantile,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_quantile, simplify = FALSE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_m &lt;- matrix(covariates, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">53</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(covariate_m) &lt;- names(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariate_m) &lt;- "User"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates &lt;- as.data.frame(covariate_m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_trans &lt;- parms(fit, covariates = covariates)[, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "saem.mmkin") &amp; (fit$transformations == "saemix")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">59</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- degparms_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- backtransform_odeparms(degparms_trans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = fit$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = fit$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">56098<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- c(fit$bparms.optim, fit$bparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up object to return</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$covariates &lt;- covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = rep(NA, length(obs_vars)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = rep(NA, length(obs_vars)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = names(mkinmod$map[[obs_var]])[1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get formation fractions if directly fitted, and calculate remaining fraction to sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names = grep(paste("^f", obs_var, sep = "_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f_names) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_values = degparms[f_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_to_sink = 1 - sum(f_values)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(f_to_sink) = ifelse(type == "SFORB",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(obs_var, "free", "sink", sep = "_"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(obs_var, "sink", sep = "_"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (f_name in f_names) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">17338<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("f_", "", sub("_to_", "_", f_name))]] = f_values[[f_name]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff = append(ep$ff, f_to_sink)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the rest</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_names = grep(paste("^k", obs_var, sep="_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_tot = sum(degparms[k_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = log(2)/k_tot</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = log(10)/k_tot</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$use_of_ff == "min" &amp;&amp; length(obs_vars) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">622<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (k_name in k_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">932<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("k_", "", k_name)]] = degparms[[k_name]] / k_tot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> alpha = degparms["alpha"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta = degparms["beta"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = beta * (2^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = beta * (10^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_names = grep(paste("^k__iore", obs_var, sep="_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_tot = sum(degparms[k_names])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From the NAFTA kinetics guidance, p. 5</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n = degparms[paste("N", obs_var, sep = "_")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k = k_tot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use the initial concentration of the parent compound</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> source_name = mkinmod$map[[1]][[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c0 = degparms[paste(source_name, "0", sep = "_")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> alpha = 1 / (n - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta = (c0^(1 - n))/(k * (n - 1))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = beta * (2^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = beta * (10^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$use_of_ff == "min") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">134</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (k_name in k_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">136</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("k_", "", k_name)]] = degparms[[k_name]] / k_tot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 = degparms["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 = degparms["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g = degparms["g"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f &lt;- function(log_t, x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">684705<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- exp(log_t)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">684705<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fraction &lt;- g * exp( - k1 * t) + (1 - g) * exp( - k2 * t)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">684705<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (fraction - (1 - x/100))^2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k1 = log(2)/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k2 = log(2)/k2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_k1 = log(10)/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_k2 = log(10)/k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 &lt;- try(exp(optimize(f, c(log(DT50_k1), log(DT50_k2)), x=50)$minimum),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 &lt;- try(exp(optimize(f, c(log(DT90_k1), log(DT90_k2)), x=90)$minimum),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">158</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(DT50, "try-error")) DT50 = NA</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">159</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(DT90, "try-error")) DT90 = NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k1")] = DT50_k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k2")] = DT50_k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 = degparms["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 = degparms["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb = degparms["tb"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DTx &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">636<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DTx.a &lt;- (log(100/(100 - x)))/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">636<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DTx.b &lt;- tb + (log(100/(100 - x)) - k1 * tb)/k2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">339<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (DTx.a &lt; tb) DTx &lt;- DTx.a</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">297<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else DTx &lt;- DTx.b</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">636<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(DTx)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 &lt;- DTx(50)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 &lt;- DTx(90)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k1 = log(2)/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k2 = log(2)/k2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k1")] = DT50_k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k2")] = DT50_k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "SFORB") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # FOCUS kinetics (2006), p. 60 f</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_out_names = grep(paste("^k", obs_var, "free", sep="_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_out_names = setdiff(k_out_names, paste("k", obs_var, "free", "bound", sep="_"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_1output = sum(degparms[k_out_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_12 = degparms[paste("k", obs_var, "free", "bound", sep="_")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_21 = degparms[paste("k", obs_var, "bound", "free", sep="_")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g = (k_12 + k_21 - b1)/(b2 - b1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_b1 = log(2)/b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_b2 = log(2)/b2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_b1 = log(10)/b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_b2 = log(10)/b2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB_fraction = function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">60096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g * exp(-b1 * t) + (1 - g) * exp(-b2 * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_50 &lt;- function(log_t) (SFORB_fraction(exp(log_t)) - 0.5)^2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_DT50 &lt;- try(optimize(f_50, c(log(DT50_b1), log(DT50_b2)))$minimum,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_90 &lt;- function(log_t) (SFORB_fraction(exp(log_t)) - 0.1)^2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_DT90 &lt;- try(optimize(f_90, c(log(DT90_b1), log(DT90_b2)))$minimum,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = if (inherits(log_DT50, "try-error")) NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else exp(log_DT50)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = if (inherits(log_DT90, "try-error")) NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else exp(log_DT90)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (k_out_name in k_out_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">2618<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("k_", "", k_out_name)]] = degparms[[k_out_name]] / k_1output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return the eigenvalues for comparison with DFOP rate constants</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB[[paste(obs_var, "b1", sep="_")]] = b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB[[paste(obs_var, "b2", sep="_")]] = b2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return g for comparison with DFOP</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB[[paste(obs_var, "g", sep="_")]] = g</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c(paste("DT50", obs_var, "b1", sep = "_"))] = DT50_b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c(paste("DT50", obs_var, "b2", sep = "_"))] = DT50_b2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "logistic") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # FOCUS kinetics (2014) p. 67</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> kmax = degparms["kmax"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k0 = degparms["k0"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> r = degparms["r"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = (1/r) * log(1 - ((kmax/k0) * (1 - 2^(r/kmax))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = (1/r) * log(1 - ((kmax/k0) * (1 - 10^(r/kmax))))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k0 = log(2)/k0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_kmax = log(2)/kmax</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k0")] = DT50_k0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_kmax")] = DT50_kmax</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50", "DT90")] = c(DT50, DT90)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">38846<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) == 0) ep$ff &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">53592<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) == 0) ep$SFORB &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ep)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinmod.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to set up a kinetic model with one or more state variables</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function is usually called using a call to [mkinsub()] for each observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable, specifying the corresponding submodel as well as outgoing pathways</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (see examples).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' For the definition of model types and their parameters, the equations given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the FOCUS and NAFTA guidance documents are used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' For kinetic models with more than one observed variable, a symbolic solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the system of differential equations is included in the resulting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinmod object in some cases, speeding up the solution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If a C compiler is found by [pkgbuild::has_compiler()] and there</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is more than one observed variable in the specification, C code is generated</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for evaluating the differential equations, compiled using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [inline::cfunction()] and added to the resulting mkinmod object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... For each observed variable, a list as obtained by [mkinsub()]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' has to be specified as an argument (see examples). Currently, single</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' first order kinetics "SFO", indeterminate order rate equation kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "IORE", or single first order with reversible binding "SFORB" are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' implemented for all variables, while "FOMC", "DFOP", "HS" and "logistic"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' can additionally be chosen for the first variable which is assumed to be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the source compartment.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Additionally, [mkinsub()] has an argument \code{to}, specifying names of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables to which a transfer is to be assumed in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the argument \code{use_of_ff} is set to "min"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the model for the compartment is "SFO" or "SFORB", an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' additional [mkinsub()] argument can be \code{sink = FALSE}, effectively</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fixing the flux to sink to zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In print.mkinmod, this argument is currently not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_of_ff Specification of the use of formation fractions in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model equations and, if applicable, the coefficient matrix. If "max",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formation fractions are always used (default). If "min", a minimum use of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formation fractions is made, i.e. each first-order pathway to a metabolite</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' has its own rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param speclist The specification of the observed variables and their</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' submodel types and pathways can be given as a single list using this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument. Default is NULL.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should messages be suppressed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose If \code{TRUE}, passed to [inline::cfunction()] if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' applicable to give detailed information about the C function being built.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param name A name for the model. Should be a valid R object name.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param dll_dir Directory where an DLL object, if generated internally by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [inline::cfunction()], should be saved. The DLL will only be stored in a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' permanent location for use in future sessions, if 'dll_dir' and 'name'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are specified. This is helpful if fit objects are cached e.g. by knitr,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as the cache remains functional across sessions if the DLL is stored in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a user defined location.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param unload If a DLL from the target location in 'dll_dir' is already</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loaded, should that be unloaded first?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param overwrite If a file exists at the target DLL location in 'dll_dir',</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should this be overwritten?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom methods signature</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list of class \code{mkinmod} for use with [mkinfit()],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' containing, among others,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A vector of string representations of differential equations, one for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each modelling variable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{map}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A list containing named character vectors for each observed variable,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' specifying the modelling variables by which it is represented.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The content of \code{use_of_ff} is passed on in this list component.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{deg_func}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If generated, a function containing the solution of the degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{coefmat}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The coefficient matrix, if the system of differential equations can be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' represented by one.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{cf}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If generated, a compiled function calculating the derivatives as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' returned by cfunction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The IORE submodel is not well tested for metabolites. When using this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model for metabolites, you may want to read the note in the help</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' page to [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' NAFTA Technical Working Group on Pesticides (not dated) Guidance for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Evaluating and Calculating Degradation Kinetics in Environmental Media</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Specify the SFO model (this is not needed any more, as we can now mkinfit("SFO", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO &lt;- mkinmod(parent = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # One parent compound, one metabolite, both single first order</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_sfo_sfo &lt;- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Now supplying compound names used for plotting, and write to user defined location</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We need to choose a path outside the session tempdir because this gets removed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DLL_dir &lt;- "~/.local/share/mkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (!dir.exists(DLL_dir)) dir.create(DLL_dir)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.2 &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1", full_name = "Test compound"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO", full_name = "Metabolite M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' name = "SFO_SFO", dll_dir = DLL_dir, unload = TRUE, overwrite = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Now we can save the model and restore it in a new session</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saveRDS(SFO_SFO.2, file = "~/SFO_SFO.rds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Terminate the R session here if you would like to check, and then do</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(mkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.3 &lt;- readRDS("~/SFO_SFO.rds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_sfo_sfo &lt;- mkinfit(SFO_SFO.3, FOCUS_2006_D, quiet = TRUE, solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show details of creating the C function</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"), verbose = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The symbolic solution which is available in this case is not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # made for human reading but for speed of computation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO$deg_func</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If we have several parallel metabolites</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # (compare tests/testthat/test_synthetic_data_for_UBA_2014.R)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_DFOP_par &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("DFOP", c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_DFOP_par_c &lt;- mkinfit(m_synth_DFOP_par,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' synthetic_data_for_UBA_2014[[12]]$data,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinmod &lt;- function(..., use_of_ff = "max", name = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> speclist = NULL, quiet = FALSE, verbose = FALSE, dll_dir = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unload = FALSE, overwrite = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">4940<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(speclist)) spec &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else spec &lt;- speclist</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> save_msg &lt;- "You need to specify both 'name' and 'dll_dir' to save a model DLL"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(dll_dir)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">155</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!dir.exists(dll_dir)) stop(dll_dir, " does not exist")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">156</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(name)) stop(save_msg)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if any of the names of the observed variables contains any other</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(grep(obs_var, obs_vars)) &gt; 1) stop("Sorry, variable names can not contain each other")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("_to_", obs_var)) stop("Sorry, names of observed variables can not contain _to_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (obs_var == "sink") stop("Naming a compound 'sink' is not supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">8533<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!use_of_ff %in% c("min", "max"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The use of formation fractions 'use_of_ff' can only be 'min' or 'max'")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # }}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not return a coefficient matrix mat when FOMC, IORE, DFOP, HS or logistic is used for the parent {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[1]]$type %in% c("FOMC", "IORE", "DFOP", "HS", "logistic")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">2280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mat = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">6149<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else mat = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Establish a list of differential equations as well as a map from observed {{{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # compartments to differential equations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (varname in obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check the type component of the compartment specification {{{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">185</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(is.null(spec[[varname]]$type)) stop(</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">186</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Every part of the model specification must be a list containing a type component")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(!spec[[varname]]$type %in% c("SFO", "FOMC", "IORE", "DFOP", "HS", "SFORB", "logistic")) stop(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Available types are SFO, FOMC, IORE, DFOP, HS, SFORB and logistic only")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">13150<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type %in% c("FOMC", "DFOP", "HS", "logistic") &amp; match(varname, obs_vars) != 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop(paste("Types FOMC, DFOP, HS and logistic are only implemented for the first compartment,",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "which is assumed to be the source compartment"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # New (sub)compartments (boxes) needed for the model type {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> new_boxes &lt;- switch(spec[[varname]]$type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFO = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FOMC = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> IORE = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DFOP = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> HS = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> logistic = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB = paste(varname, c("free", "bound"), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map[[varname]] &lt;- new_boxes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(map[[varname]]) &lt;- rep(spec[[varname]]$type, length(new_boxes)) #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Start a new differential equation for each new box {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> new_diffs &lt;- paste("d_", new_boxes, " =", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(new_diffs) &lt;- new_boxes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- c(diffs, new_diffs) #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create content of differential equations and build parameter list {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">8221<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (varname in obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the name of the box(es) we are working on for the decline term(s)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">12838<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> box_1 = map[[varname]][[1]] # This is the only box unless type is SFORB</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Turn on sink if this is not explicitly excluded by the user by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # specifying sink=FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(is.null(spec[[varname]]$sink)) spec[[varname]]$sink &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">12838<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type %in% c("SFO", "IORE", "SFORB")) { # {{{ Add decline term</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">10838<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (use_of_ff == "min") { # Minimum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">1304<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE" &amp;&amp; length(spec[[varname]]$to) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Transformation reactions from compounds modelled with IORE\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "are only supported with formation fractions (use_of_ff = 'max')")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">1200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$sink) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If sink is requested, add first-order/IORE sink term</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound_sink &lt;- paste("k", box_1, "sink", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">230</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound_sink &lt;- paste("k__iore", box_1, "sink", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">232</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_compound_sink)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste(k_compound_sink, "*", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">235</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- paste("N", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">236</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, N)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">237</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste0(decline_term, "^", N)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # otherwise no decline term needed here</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">248<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term = "0"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # Maximum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound &lt;- paste("k", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound &lt;- paste("k__iore", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_compound)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste(k_compound, "*", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- paste("N", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, N)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste0(decline_term, "^", N)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "FOMC") { # {{{ Add FOMC decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 53 of the FOCUS kinetics report, without the power function so it works in C</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">381<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste("(alpha/beta) * 1/((time/beta) + 1) *", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">381<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "alpha", "beta")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "DFOP") { # {{{ Add DFOP decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 57 of the FOCUS kinetics report</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">1283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste("((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) *", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">1283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "k1", "k2", "g")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> HS_decline &lt;- "ifelse(time &lt;= tb, k1, k2)" # Used below for automatic translation to C</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "HS") { # {{{ Add HS decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 55 of the FOCUS kinetics report</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">30<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste(HS_decline, "*", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">270</td>
+ <td class="coverage">30<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "k1", "k2", "tb")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "logistic") { # {{{ Add logistic decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 67 of the FOCUS kinetics report (2014)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste("(k0 * kmax)/(k0 + (kmax - k0) * exp(-r * time)) *", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "kmax", "k0", "r")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Add origin decline term to box 1 (usually the only box, unless type is SFORB)#{{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[box_1]] &lt;- paste(diffs[[box_1]], "-", decline_term)#}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "SFORB") { # {{{ Add SFORB reversible binding terms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> box_2 = map[[varname]][[2]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_free_bound &lt;- paste("k", varname, "free", "bound", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_bound_free &lt;- paste("k", varname, "bound", "free", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_free_bound, k_bound_free)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reversible_binding_term_1 &lt;- paste("-", k_free_bound, "*", box_1, "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_bound_free, "*", box_2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reversible_binding_term_2 &lt;- paste("+", k_free_bound, "*", box_1, "-",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_bound_free, "*", box_2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[box_1]] &lt;- paste(diffs[[box_1]], reversible_binding_term_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">289</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[box_2]] &lt;- paste(diffs[[box_2]], reversible_binding_term_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">290</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transfer between compartments#{{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> to &lt;- spec[[varname]]$to</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">294</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(!is.null(to)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Name of box from which transfer takes place</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">4174<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> origin_box &lt;- box_1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Number of targets</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">299</td>
+ <td class="coverage">4174<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_targets = length(to)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">301</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Add transfer terms to listed compartments</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">4174<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (target in to) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">303</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!target %in% obs_vars) stop("You did not specify a submodel for target variable ", target)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">304</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> target_box &lt;- switch(spec[[target]]$type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">305</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFO = target,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">306</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> IORE = target,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">307</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB = paste(target, "free", sep = "_"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (use_of_ff == "min" &amp;&amp; spec[[varname]]$type %in% c("SFO", "SFORB"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">310</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_from_to &lt;- paste("k", origin_box, target_box, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_from_to)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">312</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[origin_box]] &lt;- paste(diffs[[origin_box]], "-",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">313</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_from_to, "*", origin_box)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[target_box]] &lt;- paste(diffs[[target_box]], "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_from_to, "*", origin_box)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">316</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not introduce a formation fraction if this is the only target</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">318</td>
+ <td class="coverage">4212<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[varname]]$sink == FALSE &amp;&amp; n_targets == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">319</td>
+ <td class="coverage">689<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[target_box]] &lt;- paste(diffs[[target_box]], "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">320</td>
+ <td class="coverage">689<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">321</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">322</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fraction_to_target = paste("f", origin_box, "to", target, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">323</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, fraction_to_target)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">324</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[target_box]] &lt;- paste(diffs[[target_box]], "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">325</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fraction_to_target, "*", decline_term)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">327</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">328</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">332</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model &lt;- list(diffs = diffs, parms = parms, map = map, spec = spec, use_of_ff = use_of_ff, name = name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">333</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">334</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create coefficient matrix if possible #{{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">335</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mat) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">336</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> boxes &lt;- names(diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">337</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- length(boxes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">338</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m &lt;- matrix(nrow=n, ncol=n, dimnames=list(boxes, boxes))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">339</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">340</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (use_of_ff == "min") { # {{{ Minimum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">341</td>
+ <td class="coverage">600<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (from in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">342</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (to in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">343</td>
+ <td class="coverage">2405<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (from == to) { # diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">344</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, c(boxes, "sink"), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">345</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("free.*bound", "free_bound", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">346</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("bound.*free", "bound_free", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">347</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.effective = intersect(model$parms, k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">348</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = ifelse(length(k.effective) &gt; 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">349</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste("-", k.effective, collapse = " "), "0")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">350</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">351</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # off-diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">352</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, to, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">353</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sub("_free$", "", from) == sub("_bound$", "", to)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">354</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", sub("_free$", "_free_bound", from), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">355</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">356</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sub("_bound$", "", from) == sub("_free$", "", to)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">357</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", sub("_bound$", "_bound_free", from), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">358</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">359</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.effective = intersect(model$parms, k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">360</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[to, from] = ifelse(length(k.effective) &gt; 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">361</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.effective, "0")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">362</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">363</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">364</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } # }}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">365</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # {{{ Use formation fractions where possible</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">366</td>
+ <td class="coverage">5341<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (from in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">367</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (to in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">368</td>
+ <td class="coverage">15220<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (from == to) { # diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">369</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">370</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = ifelse(k.candidate %in% model$parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">371</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste("-", k.candidate), "0")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">372</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(grepl("_free", from)) { # add transfer to bound compartment for SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">373</td>
+ <td class="coverage">24<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = paste(m[from,to], "-", paste("k", from, "bound", sep = "_"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">374</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">375</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(grepl("_bound", from)) { # add backtransfer to free compartment for SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">376</td>
+ <td class="coverage">24<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = paste("- k", from, "free", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">377</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">378</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = m[from,to]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">379</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # off-diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">380</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f.candidate = paste("f", from, "to", to, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">381</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, to, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">382</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("free.*bound", "free_bound", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">383</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("bound.*free", "bound_free", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">384</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[to, from] = ifelse(f.candidate %in% model$parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">385</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(f.candidate, " * k_", from, sep = ""),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">386</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(k.candidate %in% model$parms, k.candidate, "0"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">387</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Special case: singular pathway and no sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">388</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[from]]$sink == FALSE &amp;&amp; length(spec[[from]]$to) == 1 &amp;&amp; to %in% spec[[from]]$to) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">389</td>
+ <td class="coverage">689<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[to, from] = paste("k", from, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">390</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">391</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">392</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">393</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">394</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } # }}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">395</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$coefmat &lt;- m</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">396</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }#}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">397</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">398</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Try to create a function compiled from C code if there is more than one observed variable {{{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">399</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and a compiler is available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">400</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 1 &amp; pkgbuild::has_compiler()) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">401</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">402</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Translate the R code for the derivatives to C code</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">403</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- paste(diffs, collapse = ";\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">404</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- paste0(diffs.C, ";")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">405</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">406</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # HS</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">407</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(HS_decline, "(time &lt;= tb ? k1 : k2)", diffs.C, fixed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">408</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">409</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(diffs)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">410</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_var &lt;- names(diffs)[i]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">411</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">412</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # IORE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">413</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (state_var %in% obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">414</td>
+ <td class="coverage">8343<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[state_var]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">415</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(paste0(state_var, "^N_", state_var),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">416</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("pow(y[", i - 1, "], N_", state_var, ")"),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">417</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C, fixed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">418</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">419</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">420</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">421</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Replace d_... terms by f[i-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">422</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # First line</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">423</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pattern &lt;- paste0("^d_", state_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">424</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replacement &lt;- paste0("\nf[", i - 1, "]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">425</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(pattern, replacement, diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">426</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Other lines</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">427</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pattern &lt;- paste0("\\nd_", state_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">428</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replacement &lt;- paste0("\nf[", i - 1, "]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">429</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(pattern, replacement, diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">430</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">431</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Replace names of observed variables by y[i],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">432</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # making the implicit assumption that the observed variables only occur after "* "</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">433</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pattern &lt;- paste0("\\* ", state_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">434</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replacement &lt;- paste0("* y[", i - 1, "]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">435</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(pattern, replacement, diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">436</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">437</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">438</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> derivs_sig &lt;- signature(n = "integer", t = "numeric", y = "numeric",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">439</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f = "numeric", rpar = "numeric", ipar = "integer")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">440</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">441</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Declare the time variable in the body of the function if it is used</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">442</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> derivs_code &lt;- if (spec[[1]]$type %in% c("FOMC", "DFOP", "HS")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">443</td>
+ <td class="coverage">1060<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("double time = *t;\n", diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">444</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">445</td>
+ <td class="coverage">2668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">446</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">447</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">448</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define the function initializing the parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">449</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar &lt;- length(parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">450</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initpar_code &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">451</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "static double parms [", npar, "];\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">452</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("#define ", parms, " parms[", 0:(npar - 1), "]\n", collapse = ""),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">453</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">454</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "void initpar(void (* odeparms)(int *, double *)) {\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">455</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " int N = ", npar, ";\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">456</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " odeparms(&amp;N, parms);\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">457</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "}\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">458</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">459</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Try to build a shared library</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">460</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$cf &lt;- try(inline::cfunction(derivs_sig, derivs_code,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">461</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> otherdefs = initpar_code,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">462</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = verbose, name = "diffs",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">463</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> convention = ".C", language = "C"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">464</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">465</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">466</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(model$cf, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">467</td>
+ <td class="coverage">495<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Temporary DLL for differentials generated and loaded")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">468</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(dll_dir)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">469</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We suppress warnings, as we get a warning about a path "(embedding)" </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">470</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # under Windows, at least when using RStudio</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">471</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> suppressWarnings(inline::moveDLL(model$cf, name, dll_dir,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">472</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unload = unload, overwrite = overwrite, verbose = !quiet))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">473</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">474</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$dll_info &lt;- inline::getDynLib(model$cf)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">475</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">476</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">477</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # }}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">478</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">479</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Attach a degradation function if an analytical solution is available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">480</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$deg_func &lt;- create_deg_func(spec, use_of_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">481</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">482</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(model) &lt;- "mkinmod"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">483</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(model)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">484</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">485</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">486</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkinmod objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">487</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">488</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkinmod objects in a way that the user finds his way to get to its</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">489</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' components.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">490</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">491</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">492</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An \code{\link{mkinmod}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">493</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">494</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mkinmod &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">495</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mkinmod&gt; model generated with\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">496</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Use of formation fractions $use_of_ff:", x$use_of_ff, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">497</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Specification $spec:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">498</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs in names(x$spec)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">499</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("$", obs, "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">500</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spl &lt;- x$spec[[obs]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">501</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("$type:", spl$type)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">502</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(spl$to) &amp;&amp; length(spl$to)) cat("; $to: ", paste(spl$to, collapse = ", "), sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">503</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("; $sink: ", spl$sink, sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">504</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(spl$full_name)) if (!is.na(spl$full_name)) cat("; $full_name:", spl$full_name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">505</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">506</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">507</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.matrix(x$coefmat)) cat("Coefficient matrix $coefmat available\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">508</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$cf)) cat("Compiled model $cf available\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">509</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Differential equations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">510</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">511</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">512</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">513</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># vim: set foldmethod=marker ts=2 sw=2 expandtab:</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mhmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit nonlinear mixed-effects models built from one or more kinetic</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation models and one or more error models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The name of the methods expresses that (**m**ultiple) **h**ierarchichal</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (also known as multilevel) **m**ulticompartment **kin**etic models are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted. Our kinetic models are nonlinear, so we can use various nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mixed-effects model fitting functions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param objects A list of [mmkin] objects containing fits of the same</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation models to the same data, but using different error models.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Alternatively, a single [mmkin] object containing fits of several</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation models to the same data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param backend The backend to be used for fitting. Currently, only saemix is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' supported</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param no_random_effect Default is NULL and will be passed to [saem]. If a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' character vector is supplied, it will be passed to all calls to [saem],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which will exclude random effects for all matching parameters. Alternatively,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a list of character vectors or an object of class [illparms.mhmkin] can be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' specified. They have to have the same dimensions that the return object of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the current call will have, i.e. the number of rows must match the number</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of degradation models in the mmkin object(s), and the number of columns must</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' match the number of error models used in the mmkin object(s).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param algorithm The algorithm to be used for fitting (currently not used)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments that will be passed to the nonlinear mixed-effects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model fitting function.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores The number of cores to be used for multicore processing. This</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is only used when the \code{cluster} argument is \code{NULL}. On Windows</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' machines, cores &gt; 1 is not supported, you need to use the \code{cluster}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument to use multiple logical processors. Per default, all cores detected</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' by [parallel::detectCores()] are used, except on Windows where the default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is 1.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cluster A cluster as returned by [makeCluster] to be used for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parallel execution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom parallel mclapply parLapply detectCores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A two-dimensional [array] of fit objects and/or try-errors that can</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be indexed using the degradation model names for the first index (row index)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the error model names for the second index (column index), with class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' attribute 'mhmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{[.mhmkin}} for subsetting [mhmkin] objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mhmkin &lt;- function(objects, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("mhmkin")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mhmkin.mmkin &lt;- function(objects, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">49</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mhmkin(list(objects), ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We start with separate evaluations of all the first six datasets with two</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # degradation models and two error models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_sep_const &lt;- mmkin(c("SFO", "FOMC"), ds_fomc[1:6], cores = 2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_sep_tc &lt;- update(f_sep_const, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The mhmkin function sets up hierarchical degradation models aka</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # nonlinear mixed-effects models for all four combinations, specifying</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # uncorrelated random effects for all degradation parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_1 &lt;- mhmkin(list(f_sep_const, f_sep_tc), cores = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' status(f_saem_1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The 'illparms' function shows that in all hierarchical fits, at least</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # one random effect is ill-defined (the confidence interval for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # random effect expressed as standard deviation includes zero)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Therefore we repeat the fits, excluding the ill-defined random effects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_2 &lt;- update(f_saem_1, no_random_effect = illparms(f_saem_1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' status(f_saem_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Model comparisons show that FOMC with two-component error is preferable,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and confirms our reduction of the default parameter model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The convergence plot for the selected model looks fine</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saemix::plot(f_saem_2[["FOMC", "tc"]]$so, plot.type = "convergence")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The plot of predictions versus data shows that we have a pretty data-rich</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # situation with homogeneous distribution of residuals, because we used the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # same degradation model, error model and parameter distribution model that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # was used in the data generation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_2[["FOMC", "tc"]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can specify the same parameter model reductions manually</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' no_ranef &lt;- list("parent_0", "log_beta", "parent_0", c("parent_0", "log_beta"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dim(no_ranef) &lt;- c(2, 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_2m &lt;- update(f_saem_1, no_random_effect = no_ranef)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_2m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mhmkin.list &lt;- function(objects, backend = "saemix", algorithm = "saem",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_random_effect = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = if (Sys.info()["sysname"] == "Windows") 1 else parallel::detectCores(), cluster = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dot_args &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> backend_function &lt;- switch(backend,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix = "saem"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_models &lt;- lapply(objects[[1]][, 1], function(x) x$mkinmod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(deg_models) &lt;- dimnames(objects[[1]])$model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.deg &lt;- length(deg_models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds &lt;- lapply(objects[[1]][1, ], function(x) x$data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (other in objects[-1]) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if the degradation models in all objects are the same</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (deg_model_name in names(deg_models)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">750<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all.equal(other[[deg_model_name, 1]]$mkinmod$spec,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">750<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_models[[deg_model_name]]$spec))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The mmkin objects have to be based on the same degradation models")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if they have been fitted to the same dataset</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_object_ds &lt;- lapply(other[1, ], function(x) x$data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:length(ds)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">2250<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all.equal(ds[[i]][c("time", "variable", "observed")],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">2250<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_object_ds[[i]][c("time", "variable", "observed")]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">122</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The mmkin objects have to be fitted to the same datasets")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.o &lt;- length(objects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_models = sapply(objects, function(x) x[[1]]$err_mod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.e &lt;- length(error_models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- n.deg * n.e</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_indices &lt;- matrix(1:n.fits, ncol = n.e)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit_indices) &lt;- list(degradation = names(deg_models),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error = error_models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(no_random_effect) || is.null(dim(no_random_effect))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef &lt;- rep(list(no_random_effect), n.fits)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(no_ranef) &lt;- dim(fit_indices)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(dim(no_random_effect), dim(fit_indices))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">142</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Dimensions of argument 'no_random_effect' are not suitable")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is(no_random_effect, "illparms.mhmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef_dim &lt;- dim(no_random_effect)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef &lt;- lapply(no_random_effect, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef_split &lt;- strsplit(x, ", ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- sapply(no_ranef_split, function(y) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> gsub("sd\\((.*)\\)", "\\1", y)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(no_ranef) &lt;- no_ranef_dim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">121<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef &lt;- no_random_effect</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_function &lt;- function(fit_index) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> w &lt;- which(fit_indices == fit_index, arr.ind = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_index &lt;- w[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_index &lt;- w[2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_row &lt;- objects[[error_index]][deg_index, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- try(do.call(backend_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> args = c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(mmkin_row),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dot_args,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(no_random_effect = no_ranef[[deg_index, error_index]]))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(cluster)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::mclapply(as.list(1:n.fits), fit_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mc.cores = cores, mc.preschedule = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">178</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::parLapply(cluster, as.list(1:n.fits), fit_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attributes(results) &lt;- attributes(fit_indices)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "call") &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "time") &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(results) &lt;- switch(backend,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix = c("mhmkin.saem.mmkin", "mhmkin")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(results)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Subsetting method for mhmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mhmkin] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param i Row index selecting the fits for specific models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param j Column index selecting the fits to specific datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param drop If FALSE, the method always returns an mhmkin object, otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' either a list of fit objects or a single fit object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object inheriting from \code{\link{mhmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">`[.mhmkin` &lt;- function(x, i, j, ..., drop = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">202</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> original_class &lt;- class(x)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">203</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">204</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x_sub &lt;- x[i, j, drop = drop]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">206</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!drop) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">207</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x_sub) &lt;- original_class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">209</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(x_sub)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print method for mhmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mhmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mhmkin&gt; object\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Status of individual fits:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(status(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Check if fit within an mhmkin object failed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The object to be checked</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">check_failed &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">1936<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">226</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">1936<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">229</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">1936<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">AIC.mhmkin &lt;- function(object, ..., k = 2) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- sapply(object, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">239</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (check_failed(x)) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(AIC(x$so, k = k))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(res) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(res) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">BIC.mhmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- sapply(object, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">250</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (check_failed(x)) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(BIC(x$so))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(res) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(res) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.mhmkin &lt;- function(object, ..., evaluate = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">260</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- attr(object, "call")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For some reason we get mhkin.list in call[[1]] when using mhmkin from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # loaded package so we need to fix this so we do not have to export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # mhmkin.list in addition to the S3 method mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[1]] &lt;- mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">270</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">273</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">277</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">280</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">282</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">283</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">284</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">285</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">286</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">anova.mhmkin &lt;- function(object, ...,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = c("is", "lin", "gq"), test = FALSE, model.names = "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(model.names, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">289</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names &lt;- outer(rownames(object), colnames(object), paste)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">290</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">291</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> failed_index &lt;- which(sapply(object, check_failed), arr.ind = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">292</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(failed_index &gt; 0)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">293</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rlang::inject(anova(!!!(object[-failed_index]), method = method, test = test,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">294</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names = model.names[-failed_index]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rlang::inject(anova(!!!(object), method = method, test = test,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">297</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names = model.names))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nafta.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Evaluate parent kinetics using the NAFTA guidance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The function fits the SFO, IORE and DFOP models using \code{\link{mmkin}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and returns an object of class \code{nafta} that has methods for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and plotting.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ds A dataframe that must contain one variable called "time" with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time values specified by the \code{time} argument, one column called</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "name" with the grouping of the observed values, and finally one column of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed values called "value".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param title Optional title of the dataset</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should the evaluation text be shown?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{mmkin}} (not for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' printing method).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qf</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An list of class \code{nafta}. The list element named "mmkin" is the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mmkin}} object containing the fits of the three models. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list element named "title" contains the title of the dataset used. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list element "data" contains the dataset used in the fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @source NAFTA (2011) Guidance for evaluating and calculating degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetics in environmental media. NAFTA Technical Working Group on</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Pesticides</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{https://www.epa.gov/pesticide-science-and-assessing-pesticide-risks/guidance-evaluating-and-calculating-degradation}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' accessed 2019-02-22</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' US EPA (2015) Standard Operating Procedure for Using the NAFTA Guidance to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate Representative Half-life Values and Characterizing Pesticide</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{https://www.epa.gov/pesticide-science-and-assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nafta_evaluation &lt;- nafta(NAFTA_SOP_Appendix_D, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(nafta_evaluation)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(nafta_evaluation)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nafta &lt;- function(ds, title = NA, quiet = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">264<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(levels(ds$name)) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The NAFTA procedure is only defined for decline data for a single compound")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- nrow(subset(ds, !is.na(value)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> models &lt;- c("SFO", "IORE", "DFOP")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- list(title = title, data = ds)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$mmkin &lt;- mmkin(models, list(ds), quiet = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> distimes &lt;- lapply(result$mmkin, function(x) as.numeric(endpoints(x)$distimes["parent", ]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes &lt;- matrix(NA, nrow = 3, ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(models, c("DT50", "DT90", "DT50_rep")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes["SFO", ] &lt;- distimes[[1]][c(1, 2, 1)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes["IORE", ] &lt;- distimes[[2]][c(1, 2, 3)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes["DFOP", ] &lt;- distimes[[3]][c(1, 2, 5)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get parameters with statistics</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$parameters &lt;- lapply(result$mmkin, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">528<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary(x)$bpar[, c(1, 4:6)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(result$parameters) &lt;- models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Compare the sum of squared residuals (SSR) to the upper bound of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # confidence region of the SSR for the IORE model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$S &lt;- sapply(result$mmkin, function(x) sum(x$data$residual^2))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(result$S) &lt;- c("SFO", "IORE", "DFOP")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Equation (3) on p. 3</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p &lt;- 3</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$S["IORE"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$S_c &lt;- result$S[["IORE"]] * (1 + p/(n - p) * qf(0.5, p, n - p))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$t_rep &lt;- .evaluate_nafta_results(result$S, result$S_c,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes, quiet = quiet)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "nafta"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the results of the three models used in the NAFTA scheme.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The plots are ordered with increasing complexity of the model in this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function (SFO, then IORE, then DFOP).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calls \code{\link{plot.mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An object of class \code{\link{nafta}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be added?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main Possibility to override the main title of the plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{plot.mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.nafta &lt;- function(x, legend = FALSE, main = "auto", ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (main == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">94</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.na(x$title)) main = ""</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else main = x$title</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(x$mmkin, ..., legend = legend, main = main)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print nafta objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print nafta objects. The results for the three models are printed in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' order of increasing model complexity, i.e. SFO, then IORE, and finally DFOP.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An \code{\link{nafta}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to be used for printing parameters and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dissipation times.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nafta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.nafta &lt;- function(x, quiet = TRUE, digits = 3, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Sums of squares:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$S)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nCritical sum of squares for checking the SFO model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$S_c)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nParameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$parameters, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- .evaluate_nafta_results(x$S, x$S_c, x$distimes, quiet = quiet)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nDTx values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$distimes, digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nRepresentative half-life:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(round(t_rep, 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">.evaluate_nafta_results &lt;- function(S, S_c, distimes, quiet = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_SFO &lt;- distimes["IORE", "DT50"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_IORE &lt;- distimes["IORE", "DT50_rep"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_DFOP2 &lt;- distimes["DFOP", "DT50_rep"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (S["SFO"] &lt; S_c) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">130</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">131</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("S_SFO is lower than the critical value S_c, use the SFO model")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">133</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- t_SFO</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The SFO model is rejected as S_SFO is equal or higher than the critical value S_c")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (t_IORE &lt; t_DFOP2) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The half-life obtained from the IORE model may be used")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- t_IORE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">145</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The representative half-life of the IORE model is longer than the one corresponding")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">146</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("to the terminal degradation rate found with the DFOP model.")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">147</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The representative half-life obtained from the DFOP model may be used")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- t_DFOP2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(t_rep)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.nlme.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "nlme.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lists model equations, initial parameter values, optimised parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for fixed effects (population), random effects (deviations from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' population mean) and residual error model, as well as the resulting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints such as formation fractions and DT50 values. Optionally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (default is FALSE), the data are listed in full.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class [summary.nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data logical, indicating whether the full data should be included in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should the summary be verbose?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param distimes logical, indicating whether DT50 and DT90 values should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' included.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha error level for confidence interval estimation from the t</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The summary function returns a list based on the [nlme] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' obtained in the fit, with at least the following additional components</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{nlmeversion, mkinversion, Rversion}{The nlme, mkin and R versions used}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{date.fit, date.summary}{The dates where the fit and the summary were</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' produced}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{The differential equations used in the degradation model}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{Was maximum or minimum use made of formation fractions}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{data}{The data}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_trans}{Transformed parameters as used in the optimisation, with confidence intervals}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_back}{Backtransformed parameters, with confidence intervals if available}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{ff}{The estimated formation fractions derived from the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{distimes}{The DT50 and DT90 values for each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{SFORB}{If applicable, eigenvalues of SFORB components of the model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The print method is called for its side effect, i.e. printing the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats predict</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke for the mkin specific parts</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' José Pinheiro and Douglas Bates for the components inherited from nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Generate five datasets following SFO kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dt50_sfo_in_pop &lt;- 50</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_in_pop &lt;- log(2) / dt50_sfo_in_pop</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(1234)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_in &lt;- rlnorm(5, log(k_in_pop), 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO &lt;- mkinmod(parent = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pred_sfo &lt;- function(k) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = k),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_sfo_mean &lt;- lapply(k_in, pred_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds_sfo_mean) &lt;- paste("ds", 1:5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(12345)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_sfo_syn &lt;- lapply(ds_sfo_mean, function(ds) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' add_err(ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Evaluate using mmkin and nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin("SFO", ds_sfo_syn, quiet = TRUE, error_model = "tc", cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme &lt;- nlme(f_mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(f_nlme, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.nlme.mmkin &lt;- function(object, data = FALSE, verbose = FALSE, distimes = TRUE, alpha = 0.05, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_trans &lt;- intervals(object, which = "fixed", level = 1 - alpha)$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(confint_trans, "label") &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- rownames(confint_trans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bp &lt;- backtransform_odeparms(confint_trans[, "est."], object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # variance-covariance estimates for fixed effects (from summary.lme)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed &lt;- fixef(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stdFixed &lt;- sqrt(diag(as.matrix(object$varFix)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$corFixed &lt;- array(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t(object$varFix/stdFixed)/stdFixed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(object$varFix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(names(fixed), names(fixed)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">436<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">436<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">100</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- matrix(NA, nrow = length(bp), ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(bpnames, colnames(confint_trans)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[, "est."] &lt;- bp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- confint_trans[pname, "lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- confint_trans[pname, "upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpl), "lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpu), "upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_trans &lt;- confint_trans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_back &lt;- confint_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$date.summary = date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$use_of_ff = object$mkinmod$use_of_ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$error_model_algorithm = object$mmkin[[1]]$error_model_algorithm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object$mmkin[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$diffs &lt;- object$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$print_data &lt;- data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["observed"]] &lt;- object$data[["value"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["value"]] &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["predicted"]] &lt;- predict(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["residual"]] &lt;- residuals(object, type = "response")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$modelStruct$varStruct)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">138</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["std"]] &lt;- object$sigma</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["std"]] &lt;- 1/attr(object$modelStruct$varStruct, "weights")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["standardized"]] &lt;- residuals(object, type = "pearson")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$verbose &lt;- verbose</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$fixed &lt;- object$mmkin[[1]]$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$AIC = AIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$BIC = BIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$logLik = logLik(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- endpoints(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) != 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$ff &lt;- ep$ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (distimes) object$distimes &lt;- ep$distimes</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">154</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) != 0) object$SFORB &lt;- ep$SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(object) &lt;- c("summary.nlme.mmkin", "nlme.mmkin", "nlme", "lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.nlme.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), verbose = x$verbose, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("nlme version used for fitting: ", x$nlmeversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version used for pre-fitting: ", x$mkinversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version used for fitting: ", x$Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of fit: ", x$date.fit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of summary:", x$date.summary, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEquations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nModel predictions using solution type", x$solution_type, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted in", x$time[["elapsed"]], "s using", x$numIter, "iterations\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nVariance model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nMean of starting values for individual parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$mean_dp_start, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed degradation parameter values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(x$fixed$value) == 0) cat("None\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">193</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else print(x$fixed, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResults:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(AIC = x$AIC, BIC = x$BIC, logLik = x$logLik,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "), digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nOptimised, transformed parameters with symmetric confidence intervals:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_trans, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(x$confint_trans) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corr &lt;- x$corFixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(corr) &lt;- "correlation"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(corr, title = "\nCorrelation:", rdig = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n") # Random effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(summary(x$modelStruct), sigma = x$sigma,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reEstimates = x$coef$random, digits = digits, verbose = verbose, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nBacktransformed parameters with asymmetric confidence intervals:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_back, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printSFORB &lt;- !is.null(x$SFORB)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printSFORB){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">218</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated Eigenvalues of SFORB model(s):\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">219</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$SFORB, digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printff &lt;- !is.null(x$ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printff){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">224</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResulting formation fractions:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">225</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(ff = x$ff), digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdistimes &lt;- !is.null(x$distimes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printdistimes){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated disappearance times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$distimes, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$print_data){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">235</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">236</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(format(x$data, digits = digits, ...), row.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinerrplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("variable", "residual"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to plot squared residuals and the error model for an mkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function plots the squared residuals for the specified subset of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variables from an mkinfit object. In addition, one or more dashed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' line(s) show the fitted error model. A combined plot of the fitted model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and this error model plot can be obtained with \code{\link{plot.mkinfit}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using the argument \code{show_errplot = TRUE}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fit represented in an \code{\link{mkinfit}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param obs_vars A character vector of names of the observed variables for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which residuals should be plotted. Defaults to all observed variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlim plot range in x direction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlab Label for the x axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxy Maximum value of the residuals. This is used for the scaling of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the y axis and defaults to "auto".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be plotted?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Where should the legend be placed? Default is "topright". Will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be passed on to \code{\link{legend}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_obs Colors for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_obs Symbols to be used for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param frame Should a frame be drawn around the plots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots further arguments passed to \code{\link{plot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Nothing is returned by this function, as it is called for its side</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effect, namely to produce a plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{mkinplot}}, for a way to plot the data and the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lines of the mkinfit object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords hplot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(model, FOCUS_2006_D, error_model = "tc", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinerrplot(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinerrplot &lt;- function (object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(object$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = c(0, 1.1 * max(object$data$predicted)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Predicted", ylab = "Squared residual",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxy = "auto", legend= TRUE, lpos = "topright",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs = "auto", pch_obs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars_all &lt;- as.character(unique(object$data$variable))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 0){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- intersect(obs_vars_all, obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else obs_vars &lt;- obs_vars_all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- subset(object$data, variable %in% obs_vars, residual)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (maxy == "auto") maxy = max(residuals^2, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set colors and symbols</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (col_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pch_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(col_obs) &lt;- names(pch_obs) &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = ylab,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(0, 1.2 * maxy), frame = frame, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for(obs_var in obs_vars){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals_plot &lt;- subset(object$data, variable == obs_var, c("predicted", "residual"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(residuals_plot[["predicted"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals_plot[["residual"]]^2,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = pch_obs[obs_var], col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = object$errparms^2, lty = 2, col = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_name = paste0("sigma_", obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = object$errparms[sigma_name]^2, lty = 2,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_plot &lt;- function(predicted) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_twocomp(predicted,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_low = object$errparms[1],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rsd_high = object$errparms[2])^2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(sigma_plot, from = 0, to = max(object$data$predicted),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add = TRUE, lty = 2, col = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (legend == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), legend = obs_vars,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[obs_vars], pch = pch_obs[obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/parplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot parameter variability of multistart objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Produces a boxplot with all parameters from the multiple runs, scaled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' either by the parameters of the run with the highest likelihood,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' or by their medians as proposed in the paper by Duchesne et al. (2021).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Starting values of degradation model parameters and error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are shown as green circles. The results obtained in the original run</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are shown as red circles.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The [multistart] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param llmin The minimum likelihood of objects to be shown</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param llquant Fractional value for selecting only the fits with higher</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' likelihoods. Overrides 'llmin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param scale By default, scale parameters using the best</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' available fit.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If 'median', parameters are scaled using the median parameters from all fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main Title of the plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Positioning of the legend.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to [boxplot]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Duchesne R, Guillemin A, Gandrillon O, Crauste F. Practical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' identifiability in the frame of nonlinear mixed effects models: the example</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the in vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' doi: 10.1186/s12859-021-04373-4.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [multistart]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats median quantile</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parplot &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("parplot")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parplot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parplot.multistart.saem.mmkin &lt;- function(object, llmin = -Inf, llquant = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> scale = c("best", "median"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lpos = "bottomleft", main = "", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig &lt;- attr(object, "orig")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_parms &lt;- parms(orig)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_degparms &lt;- orig$mean_dp_start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_parms &lt;- parms(object, exclude_failed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object, "multistart.saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llfunc &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">48</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">1408<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(logLik(object$so))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("parplot is only implemented for multistart.saem.mmkin objects")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- sapply(object, llfunc)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(llquant[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (llmin != -Inf) warning("Overriding 'llmin' because 'llquant' was specified")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llmin &lt;- quantile(ll, 1 - llquant)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected &lt;- which(ll &gt; llmin)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected_parms &lt;- all_parms[selected, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(las = 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (orig$transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_names_transformed &lt;- names(start_degparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_index &lt;- which(names(orig_parms) %in% degparm_names_transformed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_parms[degparm_names_transformed] &lt;- backtransform_odeparms(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_parms[degparm_names_transformed],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig$mmkin[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = orig$mmkin[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = orig$mmkin[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_degparms &lt;- backtransform_odeparms(start_degparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig$mmkin[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = orig$mmkin[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = orig$mmkin[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_names &lt;- names(start_degparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(orig_parms) &lt;- c(degparm_names, names(orig_parms[-degparm_index]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected_parms[, degparm_names_transformed] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t(apply(selected_parms[, degparm_names_transformed], 1, backtransform_odeparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig$mmkin[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = orig$mmkin[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = orig$mmkin[[1]]$transform_fractions))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(selected_parms)[1:length(degparm_names)] &lt;- degparm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_errparms &lt;- orig$so@model@error.init</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(start_errparms) &lt;- orig$so@model@name.sigma</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_omegaparms &lt;- orig$so@model@omega.init</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_parms &lt;- c(start_degparms, start_errparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> scale &lt;- match.arg(scale)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_scale &lt;- switch(scale,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> best = selected_parms[which.best(object[selected]), ],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> median = apply(selected_parms, 2, median)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Boxplots of all scaled parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected_scaled_parms &lt;- t(apply(selected_parms, 1, function(x) x / parm_scale))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> boxplot(selected_scaled_parms, log = "y", main = main, ,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = "Normalised parameters", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show starting parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_scaled_parms &lt;- rep(NA_real_, length(orig_parms))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(start_scaled_parms) &lt;- names(orig_parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_scaled_parms[names(start_parms)] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_parms / parm_scale[names(start_parms)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(start_scaled_parms, col = 3, cex = 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show parameters of original run</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_scaled_parms &lt;- orig_parms / parm_scale</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(orig_scaled_parms, col = 2, cex = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 1, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), bty = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = 1, col = 3:1, lty = c(NA, NA, 1),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Original start",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Original results",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Multistart runs"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/plot.mixed.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables("ds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An object of class [mixed.mmkin], [saem.mmkin] or [nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param i A numeric index to select datasets for which to plot the individual predictions,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in case plots get too large</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inheritParams plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized? Only takes effect if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' `resplot = "time"`.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pop_curves Per default, one population curve is drawn in case</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' population parameters are fitted by the model, e.g. for saem objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In case there is a covariate model, the behaviour depends on the value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of 'covariates'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates Data frame with covariate values for all variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' any covariate models in the object. If given, it overrides 'covariate_quantiles'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Each line in the data frame will result in a line drawn for the population.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Rownames are used in the legend to label the lines.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariate_quantiles This argument only has an effect if the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object has covariate models. If so, the default is to show three population</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' curves, for the 5th percentile, the 50th percentile and the 95th percentile</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the covariate values used for fitting the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note Covariate models are currently only supported for saem.mmkin objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pred_over Named list of alternative predictions as obtained</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from [mkinpredict] with a compatible [mkinmod].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_log_parms Passed to [mean_degparms] in the case of an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mixed.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level Passed to [mean_degparms] in the case of an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mixed.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param default_log_parms Passed to [mean_degparms] in the case of an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mixed.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.legend The relative height of the legend shown on top</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.bottom The relative height of the bottom plot row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ymax Vector of maximum y axis values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ncol.legend Number of columns to use in the legend</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param nrow.legend Number of rows to use in the legend</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param resplot Should the residuals plotted against time or against</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predicted values?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_ds Colors used for plotting the observed data and the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' corresponding model prediction lines for the different datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_ds Symbols to be used for plotting the data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lty_ds Line types to be used for the model predictions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats coefficients</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) x$data[c("name", "time", "value")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds) &lt;- paste0("ds ", 6:10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(list("DFOP-SFO" = dfop_sfo), ds, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f[, 3:4], standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For this fit we need to increase pnlsMaxiter, and we increase the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # tolerance in order to speed up the fit for this example evaluation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # It still takes 20 seconds to run</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme &lt;- nlme(f, control = list(pnlsMaxIter = 120, tolerance = 1e-3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem &lt;- saem(f, transformations = "saemix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_obs &lt;- mmkin(list("DFOP-SFO" = dfop_sfo), ds, quiet = TRUE, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlmix &lt;- nlmix(f_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlmix)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can overlay the two variants if we generate predictions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pred_nlme &lt;- mkinpredict(dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme$bparms.optim[-1],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = f_nlme$bparms.optim[[1]], A1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seq(0, 180, by = 0.2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem, pred_over = list(nlme = pred_nlme))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.mixed.mmkin &lt;- function(x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i = 1:ncol(x$mmkin),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(x$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_quantiles = c(0.5, 0.05, 0.95),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Time",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = range(x$data$time),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot = c("predicted", "time"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_over = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.level = 0.6,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> default_log_parms = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ymax = "auto", maxabs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ncol.legend = ifelse(length(i) &lt;= 3, length(i) + 1, ifelse(length(i) &lt;= 8, 3, 4)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow.legend = ceiling((length(i) + 1) / ncol.legend),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.height.legend = 0.02 + 0.07 * nrow.legend,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.height.bottom = 1.1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_ds = 1:length(i),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_ds = pch_ds + 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_ds = col_ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE, ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Prepare parameters and data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_1 &lt;- x$mmkin[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(x$mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> backtransform = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(class(x), "mixed.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(pop_curves, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">110</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- mean_degparms(x$mmkin, test_log_parms = test_log_parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.level = conf.level, default_log_parms = default_log_parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_tmp &lt;- parms(x$mmkin, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i &lt;- as.data.frame(t(degparms_tmp[setdiff(rownames(degparms_tmp), names(fit_1$errparms)), ]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual_type = ifelse(standardized, "standardized", "residual")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- x$data[[residual_type]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x, "nlme.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(pop_curves, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">129</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i &lt;- coefficients(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- nlme::fixef(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- residuals(x,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = ifelse(standardized, "pearson", "response"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x, "saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$transformations == "saemix") backtransform = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi &lt;- saemix::psi(x$so)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(psi) &lt;- x$saemix_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i &lt;- psi[ds_names, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i_names &lt;- colnames(degparms_i)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual_type = ifelse(standardized, "standardized", "residual")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- x$data[[residual_type]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(pop_curves, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$covariate_models) == 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- x$so@results@fixed.effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(degparms_pop) &lt;- degparms_i_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">152</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">153</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = as.data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">154</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> apply(x$covariates, 2, quantile,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">155</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_quantiles, simplify = FALSE))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">156</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariates) &lt;- paste(</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">157</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(length(x$covariate_models) == 1,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">158</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Covariate", "Covariates"),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">159</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariates))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">161</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- parms(x, covariates = covariates)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">162</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">165</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Make sure degparms_pop is a matrix, columns corresponding to population curve(s)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(dim(degparms_pop))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- matrix(degparms_pop, ncol = 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(names(degparms_pop), "Population"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed &lt;- fit_1$fixed$value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(degparms_fixed) &lt;- rownames(fit_1$fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_all &lt;- cbind(as.matrix(degparms_i),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> matrix(rep(degparms_fixed, nrow(degparms_i)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ncol = length(degparms_fixed),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = nrow(degparms_i), byrow = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_all_names &lt;- c(names(degparms_i), names(degparms_fixed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(degparms_all) &lt;- degparms_all_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_names &lt;- grep("_0$", degparms_all_names, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_names &lt;- setdiff(degparms_all_names, odeini_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- cbind(x$data[c("ds", "name", "time", "value")],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual = residuals)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = fit_1$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes &lt;- sort(unique(c(x$data$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> seq(xlim[1], xlim[2], length.out = 50))))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list &lt;- lapply(i, function(ds_i) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_trans &lt;- degparms_all[ds_i, odeparms_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeparms_trans) &lt;- odeparms_names # needed if only one odeparm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- backtransform_odeparms(odeparms_trans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = fit_1$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = fit_1$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">325<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- odeparms_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- degparms_all[ds_i, odeini_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- gsub("_0", "", odeini_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(x$mkinmod, odeparms, odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes, solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = fit_1$atol, rtol = fit_1$rtol)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(pred_list) &lt;- ds_names[i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_ds &lt;- vctrs::vec_rbind(!!!pred_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop &lt;- lapply(1:ncol(degparms_pop), function(cov_i) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_all_pop_i &lt;- c(degparms_pop[, cov_i], degparms_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_pop_trans_i &lt;- degparms_all_pop_i[odeparms_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeparms_pop_trans_i) &lt;- odeparms_names # needed if only one odeparm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_pop_i &lt;- backtransform_odeparms(odeparms_pop_trans_i,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">227</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = fit_1$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = fit_1$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_pop_i &lt;- odeparms_pop_trans_i</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- degparms_all_pop_i[odeini_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- gsub("_0", "", odeini_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(x$mkinmod, odeparms_pop_i, odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes, solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = fit_1$atol, rtol = fit_1$rtol)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(pred_list_pop) &lt;- colnames(degparms_pop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">243</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Start of graphical section</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows = length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plots = n_plot_rows * 2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set relative plot heights, so the first plot row is the norm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.heights &lt;- if (n_plot_rows &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c(rel.height.legend, c(rep(1, n_plot_rows - 1), rel.height.bottom))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c(rel.height.legend, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">260</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout_matrix = matrix(c(1, 1, 2:(n_plots + 1)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows + 1, 2, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(layout_matrix, heights = rel.heights)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(0.1, 2.1, 0.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Empty plot with legend</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">267</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(pred_over)) lty_over &lt;- seq(2, length.out = length(pred_over))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else lty_over &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">270</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">271</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_pop &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lty_pop) &lt;- "Population"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">274</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_pop &lt;- 1:nrow(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">275</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lty_pop) &lt;- rownames(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">278</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_pop &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">279</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_pop_over &lt;- length(lty_pop) + length(lty_over)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">281</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n", axes = FALSE, ann = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend("center", bty = "n", ncol = ncol.legend,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = c(names(lty_pop), names(pred_over), ds_names[i]),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty = c(lty_pop, lty_over, lty_ds),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lwd = c(rep(2, n_pop_over), rep(1, length(i))),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = c(rep(1, n_pop_over), col_ds),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = c(rep(NA, n_pop_over), pch_ds))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot &lt;- match.arg(resplot)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Loop plot rows</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (plot_row in 1:n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">295</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_var &lt;- obs_vars[plot_row]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_row &lt;- subset(observed, name == obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set ylim to sensible default, or use ymax</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">299</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(ymax, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">300</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = c(0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">301</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max(c(observed_row$value, pred_ds[[obs_var]]), na.rm = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">302</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">303</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = c(0, ymax[plot_row])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">306</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for bottom row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # This is the only row that needs to show the x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row == n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">309</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5.1, 4.1, 1.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 1.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">312</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">313</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim, ylim = ylim_row,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = paste("Residues", obs_var), frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">318</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(pred_over)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">319</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i_over in seq_along(pred_over)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">320</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_frame &lt;- as.data.frame(pred_over[[i_over]])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">321</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lines(pred_frame$time, pred_frame[[obs_var]],</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">322</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lwd = 2, lty = lty_over[i_over])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">323</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">324</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">325</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">326</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds_i in seq_along(i)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">327</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(subset(observed_row, ds == ds_names[ds_i], c("time", "value")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">328</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], pch = pch_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">329</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lines(subset(pred_ds, ds == ds_names[ds_i], c("time", obs_var)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">330</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], lty = lty_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">332</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">333</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">334</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (cov_i in seq_along(pred_list_pop)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">335</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cov_name &lt;- names(pred_list_pop)[cov_i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">336</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lines(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">337</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop[[cov_i]][, "time"],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">338</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop[[cov_i]][, obs_var],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">339</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = "l", lwd = 2, lty = lty_pop[cov_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">340</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">341</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">342</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">343</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(maxabs, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">344</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxabs = max(abs(observed_row$residual), na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">345</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">346</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">347</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(resplot, "time")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">348</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n", xlim = xlim, xlab = "Time",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">349</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(-1.2 * maxabs, 1.2 * maxabs),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">350</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = if (standardized) "Standardized residual" else "Residual",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">351</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">352</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">353</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">354</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">355</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds_i in seq_along(i)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">356</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(subset(observed_row, ds == ds_names[ds_i], c("time", "residual")),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">357</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], pch = pch_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">358</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">359</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">360</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">361</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(resplot, "predicted")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">362</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">363</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = c(0, max(pred_ds[[obs_var]])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">364</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Predicted",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">365</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(-1.2 * maxabs, 1.2 * maxabs),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">366</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = if (standardized) "Standardized residual" else "Residual",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">367</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">368</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">369</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">370</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">371</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds_i in seq_along(i)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">372</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_row_ds &lt;- merge(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">373</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> subset(observed_row, ds == ds_names[ds_i], c("time", "residual")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">374</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> subset(pred_ds, ds == ds_names[ds_i], c("time", obs_var)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">375</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(observed_row_ds[c(3, 2)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">376</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], pch = pch_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">377</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">378</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">379</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">380</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lists model equations, initial parameter values, optimised parameters with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' some uncertainty statistics, the chi2 error levels calculated according to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS guidance (2006) as defined therein, formation fractions, DT50 values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and optionally the data, consisting of observed, predicted and residual</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class \code{summary.mkinfit}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data logical, indicating whether the data should be included in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param distimes logical, indicating whether DT50 and DT90 values should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' included.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha error level for confidence interval estimation from t</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qt pt cov2cor</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The summary function returns a list with components, among others</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{version, Rversion}{The mkin and R versions used}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{date.fit, date.summary}{The dates where the fit and the summary were</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' produced}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{The differential equations used in the model}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{Was maximum or minimum use made of formation fractions}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{bpar}{Optimised and backtransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{data}{The data (see Description above).}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{start}{The starting values and bounds, if applicable, for optimised</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{fixed}{The values of fixed parameters.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{errmin }{The chi2 error levels for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{bparms.ode}{All backtransformed ODE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters, for use as starting parameters for related models.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{errparms}{Error model parameters.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{ff}{The estimated formation fractions derived from the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{distimes}{The DT50 and DT90 values for each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{SFORB}{If applicable, eigenvalues and fractional eigenvector component</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' g of SFORB systems in the model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The print method is called for its side effect, i.e. printing the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(mkinfit("SFO", FOCUS_2006_A, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.mkinfit &lt;- function(object, data = TRUE, distimes = TRUE, alpha = 0.05, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> param &lt;- object$par</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- names(param)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(object$bparms.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> epnames &lt;- names(object$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p &lt;- length(param)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- try(solve(object$hessian), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_notrans &lt;- try(solve(object$hessian_notrans), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rdf &lt;- object$df.residual</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.numeric(covar) | is.na(covar[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">67</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se &lt;- lci &lt;- uci &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covar) &lt;- colnames(covar) &lt;- pnames</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se &lt;- sqrt(diag(covar))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- param + qt(alpha/2, rdf) * se</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci &lt;- param + qt(1-alpha/2, rdf) * se</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beparms.optim &lt;- c(object$bparms.optim, object$par[epnames])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.numeric(covar_notrans) | is.na(covar_notrans[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_notrans &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se_notrans &lt;- tval &lt;- pval &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covar_notrans) &lt;- colnames(covar_notrans) &lt;- c(bpnames, epnames)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se_notrans &lt;- sqrt(diag(covar_notrans))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tval &lt;- beparms.optim / se_notrans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pval &lt;- pt(abs(tval), rdf, lower.tail = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(se) &lt;- pnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> param &lt;- cbind(param, se, lci, uci)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(param) &lt;- list(pnames, c("Estimate", "Std. Error", "Lower", "Upper"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam &lt;- cbind(Estimate = beparms.optim, se_notrans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "t value" = tval, "Pr(&gt;t)" = pval, Lower = NA, Upper = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">70671<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">70671<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1135<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">293621<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- param[pname, "Lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- param[pname, "Upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam[names(bpl), "Lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam[names(bpu), "Upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam[epnames, c("Lower", "Upper")] &lt;- param[epnames, c("Lower", "Upper")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> version = as.character(utils::packageVersion("mkin")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Rversion = paste(R.version$major, R.version$minor, sep="."),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date.fit = object$date,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date.summary = date(),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = object$solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warnings = object$summary_warnings,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff = object$mkinmod$use_of_ff,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = object$error_model_algorithm,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> df = c(p, rdf),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar = covar,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_notrans = covar_notrans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> niter = object$iterations,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> calls = object$calls,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = object$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par = param,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpar = bparam)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(object$version)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$fit_version &lt;- object$version</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$fit_Rversion &lt;- object$Rversion</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ans$fit_version &gt;= "0.9.49.6") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">52156<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$AIC = AIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">52156<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$BIC = BIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">52156<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$logLik = logLik(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$diffs &lt;- object$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(data) ans$data &lt;- object$data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$start &lt;- object$start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$start_transformed &lt;- object$start_transformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$fixed &lt;- object$fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$errmin &lt;- mkinerrmin(object, alpha = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$calls &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(ans$covar)){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Corr &lt;- cov2cor(ans$covar)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(Corr) &lt;- colnames(Corr) &lt;- rownames(ans$par)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$Corr &lt;- Corr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">164</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Could not calculate correlation; no covariance matrix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$bparms.ode &lt;- object$bparms.ode</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$shapiro.p &lt;- object$shapiro.p</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- endpoints(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) != 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">15612<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$ff &lt;- ep$ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (distimes) ans$distimes &lt;- ep$distimes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">2442<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) != 0) ans$SFORB &lt;- ep$SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">43972<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(object$d_3_message)) ans$d_3_message &lt;- object$d_3_message</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ans) &lt;- "summary.mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.mkinfit &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(x$fit_version)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">184</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version: ", x$version, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">185</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version: ", x$Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version used for fitting: ", x$fit_version, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version used for fitting: ", x$fit_Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of fit: ", x$date.fit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of summary:", x$date.summary, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEquations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> df &lt;- x$df</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rdf &lt;- df[2]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nModel predictions using solution type", x$solution_type, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted using", x$calls, "model solutions performed in", x$time[["elapsed"]], "s\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$err_mod)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nError model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nError model algorithm:", x$error_model_algorithm, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">212</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$d_3_message)) cat(x$d_3_message, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for parameters to be optimised:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$start)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for the transformed parameters actually optimised:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$start_transformed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed parameter values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(x$fixed$value) == 0) cat("None\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else print(x$fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We used to only have one warning - show this for summarising old objects</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">226</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x[["warning"]])) cat("\n\nWarning:", x$warning, "\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$warnings) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">229</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n\nWarning(s):", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">230</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(x$warnings, sep = "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$AIC)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResults:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(AIC = x$AIC, BIC = x$BIC, logLik = x$logLik,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nOptimised, transformed parameters with symmetric confidence intervals:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$par, digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$calls &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nParameter correlation:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$covar)){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$Corr, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">247</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("No covariance matrix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nBacktransformed parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Confidence intervals for internally transformed parameters are asymmetric.\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ((x$version) &lt; "0.9-36") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">254</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("To get the usual (questionable) t-test, upgrade mkin and repeat the fit.\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">255</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$bpar, digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("t-test (unrealistically) based on the assumption of normal distribution\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("for estimators of untransformed parameters.\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$bpar[, c(1, 3, 4, 5, 6)], digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFOCUS Chi2 error levels in percent:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$errmin$err.min &lt;- 100 * x$errmin$err.min</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$errmin, digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printSFORB &lt;- !is.null(x$SFORB)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printSFORB){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated Eigenvalues and DFOP g parameter of SFORB model(s):\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$SFORB, digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">270</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printff &lt;- !is.null(x$ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">273</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printff){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResulting formation fractions:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(ff = x$ff), digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdistimes &lt;- !is.null(x$distimes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printdistimes){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated disappearance times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$distimes, digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">282</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">283</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdata &lt;- !is.null(x$data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (printdata){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(format(x$data, digits = digits, ...), row.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">288</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("name", "time", "value"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit a kinetic model to data with one or more state variables</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function maximises the likelihood of the observed data using the Port</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' algorithm [stats::nlminb()], and the specified initial or fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters and starting values. In each step of the optimisation, the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic model is solved using the function [mkinpredict()], except</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if an analytical solution is implemented, in which case the model is solved</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using the degradation function in the [mkinmod] object. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters of the selected error model are fitted simultaneously with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation model parameters, as both of them are arguments of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' likelihood function.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Per default, parameters in the kinetic models are internally transformed in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' order to better satisfy the assumption of a normal distribution of their</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' estimators.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param mkinmod A list of class [mkinmod], containing the kinetic</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model to be fitted to the data, or one of the shorthand names ("SFO",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOMC", "DFOP", "HS", "SFORB", "IORE"). If a shorthand name is given, a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent only degradation model is generated for the variable with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' highest value in \code{observed}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param observed A dataframe with the observed data. The first column called</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "name" must contain the name of the observed variable for each data point.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The second column must contain the times of observation, named "time".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The third column must be named "value" and contain the observed values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Zero values in the "value" column will be removed, with a warning, in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' order to avoid problems with fitting the two-component error model. This</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is not expected to be a problem, because in general, values of zero are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' not observed in degradation data, because there is a lower limit of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' detection.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parms.ini A named vector of initial values for the parameters,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' including parameters to be optimised and potentially also fixed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as indicated by \code{fixed_parms}. If set to "auto", initial values for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rate constants are set to default values. Using parameter names that are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' not in the model gives an error.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' It is possible to only specify a subset of the parameters that the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' needs. You can use the parameter lists "bparms.ode" from a previously</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted model, which contains the differential equation parameters from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' this model. This works nicely if the models are nested. An example is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' given below.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param state.ini A named vector of initial values for the state variables of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model. In case the observed variables are represented by more than one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model variable, the names will differ from the names of the observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables (see \code{map} component of [mkinmod]). The default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is to set the initial value of the first model variable to the mean of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time zero values for the variable with the maximum observed value, and all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' others to 0. If this variable has no time zero observations, its initial</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' value is set to 100.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param err.ini A named vector of initial values for the error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters to be optimised. If set to "auto", initial values are set to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' default values. Otherwise, inital values for all error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' must be given.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fixed_parms The names of parameters that should not be optimised but</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rather kept at the values specified in \code{parms.ini}. Alternatively,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a named numeric vector of parameters to be fixed, regardless of the values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in parms.ini.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fixed_initials The names of model variables for which the initial</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' state at time 0 should be excluded from the optimisation. Defaults to all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' state variables except for the first one.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param from_max_mean If this is set to TRUE, and the model has only one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variable, then data before the time of the maximum observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (after averaging for each sampling time) are discarded, and this time is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' subtracted from all remaining time values, so the time of the maximum</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed mean value is the new time zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param solution_type If set to "eigen", the solution of the system of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' differential equations is based on the spectral decomposition of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' coefficient matrix in cases that this is possible. If set to "deSolve", a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' numerical [ode solver from package deSolve][deSolve::ode()] is used. If</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set to "analytical", an analytical solution of the model is used. This is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' only implemented for relatively simple degradation models. The default is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "auto", which uses "analytical" if possible, otherwise "deSolve" if a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compiler is present, and "eigen" if no compiler is present and the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' can be expressed using eigenvalues and eigenvectors.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method.ode The solution method passed via [mkinpredict()]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to [deSolve::ode()] in case the solution type is "deSolve". The default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "lsoda" is performant, but sometimes fails to converge.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_compiled If set to \code{FALSE}, no compiled version of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinmod] model is used in the calls to [mkinpredict()] even if a compiled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' version is present.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param control A list of control arguments passed to [stats::nlminb()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_rates Boolean specifying if kinetic rate constants should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be transformed in the model specification used in the fitting for better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compliance with the assumption of normal distribution of the estimator. If</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' TRUE, also alpha and beta parameters of the FOMC model are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log-transformed, as well as k1 and k2 rate constants for the DFOP and HS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' models and the break point tb of the HS model. If FALSE, zero is used as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a lower bound for the rates in the optimisation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_fractions Boolean specifying if formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should be transformed in the model specification used in the fitting for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' better compliance with the assumption of normal distribution of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' estimator. The default (TRUE) is to do transformations. If TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the g parameter of the DFOP model is also transformed. Transformations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are described in [transform_odeparms].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Suppress printing out the current value of the negative</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log-likelihood after each improvement?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param atol Absolute error tolerance, passed to [deSolve::ode()]. Default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is 1e-8, which is lower than the default in the [deSolve::lsoda()]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function which is used per default.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rtol Absolute error tolerance, passed to [deSolve::ode()]. Default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is 1e-10, much lower than in [deSolve::lsoda()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error_model If the error model is "const", a constant standard</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deviation is assumed.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the error model is "obs", each observed variable is assumed to have its</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' own variance.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the error model is "tc" (two-component error model), a two component</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' error model similar to the one described by Rocke and Lorenzato (1995) is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' used for setting up the likelihood function. Note that this model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deviates from the model by Rocke and Lorenzato, as their model implies</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that the errors follow a lognormal distribution for large values, not a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' normal distribution as assumed by this method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error_model_algorithm If "auto", the selected algorithm depends on</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the error model. If the error model is "const", unweighted nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' least squares fitting ("OLS") is selected. If the error model is "obs", or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "tc", the "d_3" algorithm is selected.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "d_3" will directly minimize the negative log-likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and independently also use the three step algorithm described below.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The fit with the higher likelihood is returned.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "direct" will directly minimize the negative log-likelihood.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "twostep" will minimize the negative log-likelihood after an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initial unweighted least squares optimisation step.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "threestep" starts with unweighted least squares, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' optimizes only the error model using the degradation model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' found, and then minimizes the negative log-likelihood with free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation and error model parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "fourstep" starts with unweighted least squares, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' optimizes only the error model using the degradation model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' found, then optimizes the degradation model again with fixed error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters, and finally minimizes the negative log-likelihood with free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation and error model parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "IRLS" (Iteratively Reweighted Least Squares) starts with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' unweighted least squares, and then iterates optimization of the error</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model parameters and subsequent optimization of the degradation model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using those error model parameters, until the error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' converge.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param reweight.tol Tolerance for the convergence criterion calculated from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the error model parameters in IRLS fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param reweight.max.iter Maximum number of iterations in IRLS fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param trace_parms Should a trace of the parameter values be listed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_residuals Should the residuals be tested for normal distribution?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments that will be passed on to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [deSolve::ode()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats nlminb aggregate dist shapiro.test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list with "mkinfit" in the class attribute.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note When using the "IORE" submodel for metabolites, fitting with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "transform_rates = TRUE" (the default) often leads to failures of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' numerical ODE solver. In this situation it may help to switch off the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' internal rate transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [summary.mkinfit], [plot.mkinfit], [parms] and [lrtest].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Comparisons of models fitted to the same data can be made using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{AIC}} by virtue of the method \code{\link{logLik.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fitting of several models to several datasets in a single call to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Rocke DM and Lorenzato S (1995) A two-component model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for measurement error in analytical chemistry. *Technometrics* 37(2), 176-184.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Ranke J and Meinecke S (2019) Error Models for the Kinetic Evaluation of Chemical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Degradation Data. *Environments* 6(12) 124</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \doi{10.3390/environments6120124}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use shorthand notation for parent only degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # One parent compound, one metabolite, both single first order.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We remove zero values from FOCUS dataset D in order to avoid warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS_D &lt;- subset(FOCUS_2006_D, value != 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use mkinsub for convenience in model formulation. Pathway to sink included per default.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Fit the model quietly to the FOCUS example dataset D using defaults</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # As lower parent values appear to have lower variance, we try an alternative error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.tc &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This avoids the warning, and the likelihood ratio test confirms it is preferable</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(fit.tc, fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can also allow for different variances of parent and metabolite as error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.obs &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The two-component error model has significantly higher likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(fit.obs, fit.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can show a quick (only one replication) benchmark for this case, as we</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # have several alternative solution methods for the model. We skip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # uncompiled deSolve, as it is so slow. More benchmarks are found in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # benchmark vignette</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if(require(rbenchmark)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(replications = 1, order = "relative", columns = c("test", "relative", "elapsed"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve_compiled = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", use_compiled = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' eigen = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "eigen"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use stepwise fitting, using optimised parameters from parent only fit, FOMC-SFO</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOMC_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("FOMC", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC_SFO &lt;- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Again, we get a warning and try a more sophisticated error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC_SFO.tc &lt;- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This model has a higher likelihood, but not significantly so</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(fit.tc, fit.FOMC_SFO.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Also, the missing standard error for log_beta and the t-tests for alpha</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">228</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and beta indicate overparameterisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(fit.FOMC_SFO.tc, data = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can easily use starting parameters from the parent only fit (only for illustration)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC = mkinfit("FOMC", FOCUS_2006_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC_SFO &lt;- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms.ini = fit.FOMC$bparms.ode, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinfit &lt;- function(mkinmod, observed,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err.ini = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_parms = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_initials = names(mkinmod$diffs)[-1],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">243</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> from_max_mean = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = c("auto", "analytical", "eigen", "deSolve"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = "lsoda",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = list(eval.max = 300, iter.max = 200),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> quiet = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = 1e-8, rtol = 1e-10,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = c("const", "obs", "tc"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = c("auto", "d_3", "direct", "twostep", "threestep", "fourstep", "IRLS", "OLS"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reweight.tol = 1e-8, reweight.max.iter = 10,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trace_parms = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_residuals = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">9202<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">9202<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Derive the name used for the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">9202<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.character(mkinmod)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">4009<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod_name &lt;- mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">5193<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(mkinmod$name)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">5071<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod_name &lt;- deparse(substitute(mkinmod))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">269</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">270</td>
+ <td class="coverage">18<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod_name &lt;- mkinmod$name</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">272</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check mkinmod and generate a model for the variable whith the highest value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # if a suitable string is given</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">9098<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_models_available = c("SFO", "FOMC", "DFOP", "HS", "SFORB", "IORE", "logistic")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">277</td>
+ <td class="coverage">9098<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(mkinmod, "mkinmod")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">4009<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> presumed_parent_name = observed[which.max(observed$value), "name"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">4009<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod[[1]] %in% parent_models_available) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> speclist &lt;- list(list(type = mkinmod, sink = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(speclist) &lt;- presumed_parent_name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod &lt;- mkinmod(speclist = speclist, use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">283</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Argument mkinmod must be of class mkinmod or a string containing one of\n ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(parent_models_available, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">286</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">288</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the names of the state variables in the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the names of observed variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(mkinmod$spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Subset observed data with names of observed data in the model and remove NA values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, name %in% obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">297</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, !is.na(value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Also remove zero values to avoid instabilities (e.g. of the 'tc' error model)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">300</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(observed$value == 0)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">301</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> zero_warning &lt;- "Observations with value of zero were removed from the data"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- c(summary_warnings, Z = zero_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">303</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning(zero_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">304</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, value != 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">306</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Sort observed values for efficient analytical predictions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$name &lt;- ordered(observed$name, levels = obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">309</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- observed[order(observed$name, observed$time), ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">311</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Obtain data for decline from maximum mean value if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">312</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (from_max_mean) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">313</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # This is only used for simple decline models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Decline from maximum is only implemented for models with a single observed variable")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$name &lt;- as.character(observed$name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">318</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> means &lt;- aggregate(value ~ time, data = observed, mean, na.rm=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">319</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_of_max &lt;- means[which.max(means$value), "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">320</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, time &gt;= t_of_max)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">321</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$time &lt;- observed$time - t_of_max</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">322</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">323</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">324</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Number observations used for fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">325</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_observed &lt;- nrow(observed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">327</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define starting values for parameters where not specified by the user</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">328</td>
+ <td class="coverage">8371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parms.ini[[1]] == "auto") parms.ini = vector()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Override parms.ini for parameters given as a numeric vector in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # fixed_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">332</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.numeric(fixed_parms)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">333</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_parm_names &lt;- names(fixed_parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">334</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini[fixed_parm_names] &lt;- fixed_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">335</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_parms &lt;- fixed_parm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">336</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">337</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">338</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Warn for inital parameter specifications that are not in the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">339</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wrongpar.names &lt;- setdiff(names(parms.ini), mkinmod$parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">340</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(wrongpar.names) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">341</td>
+ <td class="coverage">257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Initial parameter(s) ", paste(wrongpar.names, collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">342</td>
+ <td class="coverage">257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " not used in the model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">343</td>
+ <td class="coverage">257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini &lt;- parms.ini[setdiff(names(parms.ini), wrongpar.names)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">344</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">345</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">346</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Warn that the sum of formation fractions may exceed one if they are not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">347</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # fitted in the transformed way</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">348</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$use_of_ff == "max" &amp; transform_fractions == FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">349</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("The sum of formation fractions may exceed one if you do not use ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">350</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "transform_fractions = TRUE." )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">351</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">352</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Stop if formation fractions are not transformed and we have no sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">353</td>
+ <td class="coverage">716<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$spec[[box]]$sink == FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">354</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("If formation fractions are not transformed during the fitting, ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">355</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "it is not supported to turn off pathways to sink.\n ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">356</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Consider turning on the transformation of formation fractions or ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">357</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "setting up a model with use_of_ff = 'min'.\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">358</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">359</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">360</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">361</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">362</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not allow fixing formation fractions if we are using the ilr transformation,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">363</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # this is not supported</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">364</td>
+ <td class="coverage">8737<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_fractions == TRUE &amp;&amp; length(fixed_parms) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">365</td>
+ <td class="coverage">107<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(grepl("^f_", fixed_parms))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">366</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Fixing formation fractions is not supported when using the ilr ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">367</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "transformation.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">368</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">369</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">370</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">371</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set initial parameter values, including a small increment (salt)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">372</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # to avoid linear dependencies (singular matrix) in Eigenvalue based solutions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">373</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_salt = 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">374</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> defaultpar.names &lt;- setdiff(mkinmod$parms, names(parms.ini))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">375</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (parmname in defaultpar.names) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">376</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for rate constants, depending on the parameterisation</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">377</td>
+ <td class="coverage">20999<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("^k", parmname)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">378</td>
+ <td class="coverage">15908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini[parmname] = 0.1 + k_salt</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">379</td>
+ <td class="coverage">15908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_salt = k_salt + 1e-4</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">380</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">381</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for rate constants for reversible binding</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">382</td>
+ <td class="coverage">26<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("free_bound$", parmname)) parms.ini[parmname] = 0.1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">383</td>
+ <td class="coverage">26<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("bound_free$", parmname)) parms.ini[parmname] = 0.02</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">384</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for IORE exponents</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">385</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("^N", parmname)) parms.ini[parmname] = 1.1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">386</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for the FOMC, DFOP and HS models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">387</td>
+ <td class="coverage">238<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "alpha") parms.ini[parmname] = 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">388</td>
+ <td class="coverage">238<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "beta") parms.ini[parmname] = 10</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">389</td>
+ <td class="coverage">1014<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "k1") parms.ini[parmname] = 0.1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">390</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "k2") parms.ini[parmname] = 0.01</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">391</td>
+ <td class="coverage">30<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "tb") parms.ini[parmname] = 5</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">392</td>
+ <td class="coverage">984<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "g") parms.ini[parmname] = 0.5</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">393</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "kmax") parms.ini[parmname] = 0.1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">394</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "k0") parms.ini[parmname] = 0.0001</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">395</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "r") parms.ini[parmname] = 0.2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">396</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">397</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for formation fractions in case they are present</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">398</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">399</td>
+ <td class="coverage">13865<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> origin &lt;- mkinmod$map[[obs_var]][[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">400</td>
+ <td class="coverage">13865<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- mkinmod$parms[grep(paste0("^f_", origin), mkinmod$parms)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">401</td>
+ <td class="coverage">13865<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f_names) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">402</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need to differentiate between default and specified fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">403</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and set the unspecified to 1 - sum(specified)/n_unspecified</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">404</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_default_names &lt;- intersect(f_names, defaultpar.names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">405</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_specified_names &lt;- setdiff(f_names, defaultpar.names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">406</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sum_f_specified = sum(parms.ini[f_specified_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">407</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sum_f_specified &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">408</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Starting values for the formation fractions originating from ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">409</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> origin, " sum up to more than 1.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">410</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">411</td>
+ <td class="coverage">3260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$spec[[obs_var]]$sink) n_unspecified = length(f_default_names) + 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">412</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">413</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_unspecified = length(f_default_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">414</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">415</td>
+ <td class="coverage">3261<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini[f_default_names] &lt;- (1 - sum_f_specified) / n_unspecified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">416</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">417</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">418</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">419</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set default for state.ini if appropriate</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">420</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_name = names(mkinmod$spec)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">421</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_time_0 = subset(observed, time == 0 &amp; name == parent_name)$value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">422</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_time_0_mean = mean(parent_time_0, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">423</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.na(parent_time_0_mean)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">424</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_auto = c(100, rep(0, length(mkinmod$diffs) - 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">425</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">426</td>
+ <td class="coverage">8527<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_auto = c(parent_time_0_mean, rep(0, length(mkinmod$diffs) - 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">427</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">428</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state.ini_auto) &lt;- mod_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">429</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">430</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (state.ini[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">431</td>
+ <td class="coverage">8316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_used &lt;- state.ini_auto</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">432</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">433</td>
+ <td class="coverage">213<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_used &lt;- state.ini_auto</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">434</td>
+ <td class="coverage">213<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_good &lt;- intersect(names(mkinmod$diffs), names(state.ini))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">435</td>
+ <td class="coverage">213<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_used[state.ini_good] &lt;- state.ini[state.ini_good]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">436</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">437</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini &lt;- state.ini_used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">438</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">439</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Name the inital state variable values if they are not named yet</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">440</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(is.null(names(state.ini))) names(state.ini) &lt;- mod_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">441</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">442</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform initial parameter values for fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">443</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms.ini &lt;- transform_odeparms(parms.ini, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">444</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">445</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">446</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">447</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parameters to be optimised:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">448</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Kinetic parameters in parms.ini whose names are not in fixed_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">449</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.fixed &lt;- parms.ini[fixed_parms]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">450</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.optim &lt;- parms.ini[setdiff(names(parms.ini), fixed_parms)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">451</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">452</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms.fixed &lt;- transform_odeparms(parms.fixed, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">453</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">454</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">455</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms.optim &lt;- transform_odeparms(parms.optim, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">456</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">457</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">458</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">459</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Inital state variables in state.ini whose names are not in fixed_initials</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">460</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.fixed &lt;- state.ini[fixed_initials]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">461</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim &lt;- state.ini[setdiff(names(state.ini), fixed_initials)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">462</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">463</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Preserve names of state variables before renaming initial state variable</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">464</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">465</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim.boxnames &lt;- names(state.ini.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">466</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.fixed.boxnames &lt;- names(state.ini.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">467</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(state.ini.optim) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">468</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state.ini.optim) &lt;- paste(names(state.ini.optim), "0", sep="_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">469</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">470</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(state.ini.fixed) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">471</td>
+ <td class="coverage">4509<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state.ini.fixed) &lt;- paste(names(state.ini.fixed), "0", sep="_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">472</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">473</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">474</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Decide if the solution of the model can be based on a simple analytical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">475</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # formula, the spectral decomposition of the matrix (fundamental system)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">476</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # or a numeric ode solver from the deSolve package</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">477</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Prefer deSolve over eigen if a compiled model is present and use_compiled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">478</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # is not set to FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">479</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = match.arg(solution_type)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">480</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "analytical" &amp;&amp; !is.function(mkinmod$deg_func))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">481</td>
+ <td class="coverage">105<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Analytical solution not implemented for this model.")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">482</td>
+ <td class="coverage">8424<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "eigen" &amp;&amp; !is.matrix(mkinmod$coefmat))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">483</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Eigenvalue based solution not possible, coefficient matrix not present.")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">484</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">485</td>
+ <td class="coverage">6190<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkinmod$spec) == 1 || is.function(mkinmod$deg_func)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">486</td>
+ <td class="coverage">5434<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "analytical"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">487</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">488</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(mkinmod$cf) &amp; use_compiled[1] != FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">489</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">490</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">491</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.matrix(mkinmod$coefmat)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">492</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "eigen"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">493</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (max(observed$value, na.rm = TRUE) &lt; 0.1) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">494</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The combination of small observed values (all &lt; 0.1) and solution_type = eigen is error-prone")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">495</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">496</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">497</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">498</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">499</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">500</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">501</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">502</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">503</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get native symbol before iterations info for speed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">504</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">505</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve" &amp; use_compiled[1] != FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">506</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod[["symbols"]] &lt;- try(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">507</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deSolve::checkDLL(dllname = mkinmod$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">508</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">509</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">510</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(mkinmod[["symbols"]], "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">511</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">512</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">513</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">514</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">515</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the error model and the algorithm for fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">516</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod &lt;- match.arg(error_model)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">517</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = match.arg(error_model_algorithm)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">518</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "OLS") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">519</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod != "const") stop("OLS is only appropriate for constant variance")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">520</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">521</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">522</td>
+ <td class="coverage">6692<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = switch(err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">523</td>
+ <td class="coverage">6692<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "OLS", obs = "d_3", tc = "d_3")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">524</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">525</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparm_names &lt;- switch(err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">526</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "const" = "sigma",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">527</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "obs" = paste0("sigma_", obs_vars),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">528</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "tc" = c("sigma_low", "rsd_high"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">529</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparm_names_optim &lt;- if (error_model_algorithm == "OLS") NULL else errparm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">530</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">531</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define starting values for the error model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">532</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err.ini[1] != "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">533</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(names(err.ini), errparm_names)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">534</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply initial values for error model components ", paste(errparm_names, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">535</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">536</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = err.ini</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">537</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">538</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">539</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">540</td>
+ <td class="coverage">6410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = 3</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">541</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">542</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">543</td>
+ <td class="coverage">317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = rep(3, length(obs_vars))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">544</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">545</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">546</td>
+ <td class="coverage">1593<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- c(sigma_low = 0.1, rsd_high = 0.1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">547</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">548</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(errparms) &lt;- errparm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">549</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">550</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "OLS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">551</td>
+ <td class="coverage">6410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_optim &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">552</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">553</td>
+ <td class="coverage">1910<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_optim &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">554</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">555</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">556</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Unique outtimes for model solution.</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">557</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes &lt;- sort(unique(observed$time))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">558</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">559</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define the objective function for optimisation, including (back)transformations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">560</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_function &lt;- function(P, trans = TRUE, OLS = FALSE, fixed_degparms = FALSE, fixed_errparms = FALSE, update_data = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">561</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">562</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("calls", calls + 1, inherits = TRUE) # Increase the model solution counter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">563</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">564</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #browser()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">565</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">566</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Trace parameter values if requested and if we are actually optimising</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">567</td>
+ <td class="coverage">3224<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(trace_parms &amp; update_data) cat(format(P, width = 10, digits = 6), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">568</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">569</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Determine local parameter values for the cost estimation</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">570</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.numeric(fixed_degparms)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">571</td>
+ <td class="coverage">94746<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- fixed_degparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">572</td>
+ <td class="coverage">94746<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- P</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">573</td>
+ <td class="coverage">94746<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">574</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">575</td>
+ <td class="coverage">3991822<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">576</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">577</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">578</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.numeric(fixed_errparms)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">579</td>
+ <td class="coverage">4725<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- P</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">580</td>
+ <td class="coverage">4725<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- fixed_errparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">581</td>
+ <td class="coverage">4725<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_fixed = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">582</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">583</td>
+ <td class="coverage">4081843<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_fixed = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">584</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">585</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">586</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (OLS) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">587</td>
+ <td class="coverage">1063145<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- P</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">588</td>
+ <td class="coverage">1063145<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- numeric(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">589</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">590</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">591</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!OLS &amp; !degparms_fixed &amp; !errparms_fixed) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">592</td>
+ <td class="coverage">2923952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- P[1:(length(P) - length(errparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">593</td>
+ <td class="coverage">2923952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- P[(length(cost_degparms) + 1):length(P)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">594</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">595</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">596</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Initial states for t0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">597</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(state.ini.optim) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">598</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- c(cost_degparms[1:length(state.ini.optim)], state.ini.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">599</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- c(state.ini.optim.boxnames, state.ini.fixed.boxnames)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">600</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">601</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- state.ini.fixed</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">602</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- state.ini.fixed.boxnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">603</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">604</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">605</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms.optim &lt;- cost_degparms[(length(state.ini.optim) + 1):length(cost_degparms)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">606</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">607</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (trans == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">608</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- c(odeparms.optim, transparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">609</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- backtransform_odeparms(odeparms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">610</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">611</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">612</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">613</td>
+ <td class="coverage">1505774<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(odeparms.optim, parms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">614</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">615</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">616</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Solve the system with current parameter values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">617</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">618</td>
+ <td class="coverage">2562380<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$predicted &lt;- mkinmod$deg_func(observed, odeini, parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">619</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">620</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(mkinmod, parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">621</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini, outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">622</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">623</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = use_compiled,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">624</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = use_symbols,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">625</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = method.ode,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">626</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = atol, rtol = rtol,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">627</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">628</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">629</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_index &lt;- cbind(as.character(observed$time), as.character(observed$name))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">630</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$predicted &lt;- out[observed_index]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">631</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">632</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">633</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define standard deviation for each observation</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">634</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">635</td>
+ <td class="coverage">2789021<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$std &lt;- if (OLS) NA else cost_errparms["sigma"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">636</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">637</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">638</td>
+ <td class="coverage">366137<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> std_names &lt;- paste0("sigma_", observed$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">639</td>
+ <td class="coverage">366137<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$std &lt;- cost_errparms[std_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">640</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">641</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">642</td>
+ <td class="coverage">931410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$std &lt;- sqrt(cost_errparms["sigma_low"]^2 + observed$predicted^2 * cost_errparms["rsd_high"]^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">643</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">644</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">645</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Calculate model cost</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">646</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (OLS) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">647</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Cost is the sum of squared residuals</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">648</td>
+ <td class="coverage">1063145<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost &lt;- with(observed, sum((value - predicted)^2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">649</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">650</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Cost is the negative log-likelihood</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">651</td>
+ <td class="coverage">3023423<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost &lt;- - with(observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">652</td>
+ <td class="coverage">3023423<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sum(dnorm(x = value, mean = predicted, sd = std, log = TRUE)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">653</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">654</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">655</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We update the current cost and data during the optimisation, not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">656</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # during hessian calculations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">657</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (update_data) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">658</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">659</td>
+ <td class="coverage">1622188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("current_data", observed, inherits = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">660</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">661</td>
+ <td class="coverage">1622188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (cost &lt; cost.current) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">662</td>
+ <td class="coverage">594930<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("cost.current", cost, inherits = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">663</td>
+ <td class="coverage">1768<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(ifelse(OLS, "Sum of squared residuals", "Negative log-likelihood"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">664</td>
+ <td class="coverage">1768<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " at call ", calls, ": ", signif(cost.current, 6), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">665</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">666</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">667</td>
+ <td class="coverage">4086415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(cost)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">668</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">669</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">670</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_optim &lt;- c(names(state.ini.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">671</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(transparms.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">672</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparm_names_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">673</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_optim &lt;- length(names_optim)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">674</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">675</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define lower and upper bounds other than -Inf and Inf for parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">676</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # for which no internal transformation is requested in the call to mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">677</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and for optimised error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">678</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower &lt;- rep(-Inf, n_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">679</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper &lt;- rep(Inf, n_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">680</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lower) &lt;- names(upper) &lt;- names_optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">681</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">682</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # IORE exponents are not transformed, but need a lower bound</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">683</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_N &lt;- grep("^N", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">684</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_N] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">685</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">686</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">687</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_k &lt;- grep("^k_", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">688</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_k] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">689</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_k__iore &lt;- grep("^k__iore_", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">690</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_k__iore] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">691</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_rate_parms &lt;- intersect(c("alpha", "beta", "k1", "k2", "tb", "r"), names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">692</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[other_rate_parms] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">693</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">694</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">695</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">696</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_f &lt;- grep("^f_", names(upper))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">697</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_f] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">698</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper[index_f] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">699</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_fraction_parms &lt;- intersect(c("g"), names(upper))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">700</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[other_fraction_parms] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">701</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper[other_fraction_parms] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">702</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">703</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">704</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">705</td>
+ <td class="coverage">6410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm != "OLS") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">706</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower["sigma"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">707</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">708</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">709</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">710</td>
+ <td class="coverage">317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_sigma &lt;- grep("^sigma_", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">711</td>
+ <td class="coverage">317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_sigma] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">712</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">713</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">714</td>
+ <td class="coverage">1593<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower["sigma_low"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">715</td>
+ <td class="coverage">1593<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower["rsd_high"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">716</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">717</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">718</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Counter for cost function evaluations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">719</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> calls = 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">720</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- Inf</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">721</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_predicted &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">722</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> current_data &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">723</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">724</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show parameter names if tracing is requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">725</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(trace_parms) cat(format(names_optim, width = 10), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">726</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">727</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #browser()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">728</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">729</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do the fit and take the time until the hessians are calculated</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">730</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">731</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- c(state.ini.optim, transparms.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">732</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_degparms &lt;- length(degparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">733</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_index &lt;- seq(1, n_degparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">734</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_index &lt;- seq(n_degparms + 1, length.out = length(errparms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">735</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">736</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "d_3") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">737</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Directly optimising the complete model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">738</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.start &lt;- c(degparms, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">739</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_direct &lt;- try(nlminb(parms.start, cost_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">740</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">741</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">742</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = control, ...))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">743</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(fit_direct, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">744</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_direct$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">745</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- Inf # reset to avoid conflict with the OLS step</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">746</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_direct &lt;- current_data # We need this later if it was better</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">747</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct_failed = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">748</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">749</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct_failed = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">750</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">751</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">752</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm != "direct") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">753</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Ordinary least squares optimisation")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">754</td>
+ <td class="coverage">7884<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(degparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">755</td>
+ <td class="coverage">7884<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">756</td>
+ <td class="coverage">7884<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(degparms)], OLS = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">757</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">758</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">759</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the maximum likelihood estimate for sigma at the optimum parameter values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">760</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> current_data$residual &lt;- current_data$value - current_data$predicted</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">761</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_mle &lt;- sqrt(sum(current_data$residual^2)/nrow(current_data))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">762</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">763</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use that estimate for the constant variance, or as first guess if err_mod = "obs"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">764</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod != "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">765</td>
+ <td class="coverage">6327<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms[names(errparms)] &lt;- sigma_mle</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">766</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">767</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$par &lt;- c(fit$par, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">768</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">769</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- cost_function(c(degparms, errparms), OLS = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">770</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">771</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">772</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm %in% c("threestep", "fourstep", "d_3")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">773</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the error model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">774</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(errparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">775</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">776</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">777</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_degparms = degparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">778</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">779</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">780</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "fourstep") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">781</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the degradation model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">782</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(degparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">783</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">784</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">785</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">786</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">787</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">788</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm %in%</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">789</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c("direct", "twostep", "threestep", "fourstep", "d_3")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">790</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the complete model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">791</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.start &lt;- c(degparms, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">792</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(parms.start, cost_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">793</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">794</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">795</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = control, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">796</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par[degparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">797</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par[errparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">798</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">799</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">800</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "d_3") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">801</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_3_messages = c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">802</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct_failed = "Direct fitting failed, results of three-step fitting are returned",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">803</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> same = "Direct fitting and three-step fitting yield approximately the same likelihood",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">804</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> threestep = "Three-step fitting yielded a higher likelihood than direct fitting",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">805</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct = "Direct fitting yielded a higher likelihood than three-step fitting")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">806</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (direct_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">807</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["direct_failed"])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">808</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["direct_failed"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">809</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">810</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel_diff &lt;- abs((fit_direct$logLik - fit$logLik))/-mean(c(fit_direct$logLik, fit$logLik))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">811</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (rel_diff &lt; 0.0001) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">812</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["same"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">813</td>
+ <td class="coverage">240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["same"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">814</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">815</td>
+ <td class="coverage">231<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$logLik &gt; fit_direct$logLik) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">816</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["threestep"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">817</td>
+ <td class="coverage">15<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["threestep"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">818</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">819</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["direct"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">820</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- fit_direct</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">821</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["direct"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">822</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par[degparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">823</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par[errparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">824</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> current_data &lt;- data_direct</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">825</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">826</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">827</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">828</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">829</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">830</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod != "const" &amp; error_model_algorithm == "IRLS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">831</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reweight.diff &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">832</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.iter &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">833</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_last &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">834</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">835</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> while (reweight.diff &gt; reweight.tol &amp;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">836</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.iter &lt; reweight.max.iter) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">837</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">838</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the error model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">839</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(errparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">840</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">841</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">842</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_degparms = degparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">843</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">844</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">845</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the degradation model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">846</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(degparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">847</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">848</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">849</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">850</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">851</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">852</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reweight.diff &lt;- dist(rbind(errparms, errparms_last))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">853</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_last &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">854</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">855</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$par &lt;- c(fit$par, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">856</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- cost_function(c(degparms, errparms), OLS = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">857</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">858</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">859</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">860</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">861</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim_hessian &lt;- length(c(degparms, errparms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">862</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">863</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian &lt;- try(numDeriv::hessian(cost_function, c(degparms, errparms), OLS = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">864</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_data = FALSE), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">865</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$hessian, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">866</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian &lt;- matrix(NA, nrow = dim_hessian, ncol = dim_hessian)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">867</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">868</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit$hessian) &lt;- list(names(c(degparms, errparms)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">869</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(c(degparms, errparms)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">870</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">871</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Backtransform parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">872</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.optim = backtransform_odeparms(degparms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">873</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">874</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">875</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.fixed = c(state.ini.fixed, parms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">876</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.all = c(bparms.optim, parms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">877</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">878</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian_notrans &lt;- try(numDeriv::hessian(cost_function, c(bparms.optim, errparms),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">879</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> OLS = FALSE, trans = FALSE, update_data = FALSE), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">880</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$hessian_notrans, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">881</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian_notrans &lt;- matrix(NA, nrow = dim_hessian, ncol = dim_hessian)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">882</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">883</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit$hessian_notrans) &lt;- list(names(c(bparms.optim, errparms)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">884</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(c(bparms.optim, errparms)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">885</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">886</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">887</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$call &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">888</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">889</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$error_model_algorithm &lt;- error_model_algorithm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">890</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">891</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$convergence != 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">892</td>
+ <td class="coverage">108<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> convergence_warning = paste0("Optimisation did not converge:\n", fit$message)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">893</td>
+ <td class="coverage">108<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- c(summary_warnings, C = convergence_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">894</td>
+ <td class="coverage">108<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning(convergence_warning)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">895</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">896</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(!quiet) message("Optimisation successfully terminated.\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">897</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">898</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">899</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need to return some more data for summary and plotting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">900</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$solution_type &lt;- solution_type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">901</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$transform_rates &lt;- transform_rates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">902</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$transform_fractions &lt;- transform_fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">903</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$reweight.tol &lt;- reweight.tol</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">904</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$reweight.max.iter &lt;- reweight.max.iter</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">905</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$control &lt;- control</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">906</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$calls &lt;- calls</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">907</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$time &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">908</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">909</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We also need the model and a model name for summary and plotting,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">910</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # but without symbols because they could become invalid</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">911</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$symbols &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">912</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod &lt;- mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">913</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod$name &lt;- mkinmod_name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">914</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$obs_vars &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">915</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">916</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Residual sum of squares as a function of the fitted parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">917</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$rss &lt;- function(P) cost_function(P, OLS = TRUE, update_data = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">918</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">919</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Log-likelihood with possibility to fix degparms or errparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">920</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$ll &lt;- function(P, fixed_degparms = FALSE, fixed_errparms = FALSE, trans = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">921</td>
+ <td class="coverage">547080<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> - cost_function(P, trans = trans, fixed_degparms = fixed_degparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">922</td>
+ <td class="coverage">547080<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_errparms = fixed_errparms, OLS = FALSE, update_data = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">923</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">924</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">925</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Collect initial parameter values in three dataframes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">926</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$start &lt;- data.frame(value = c(state.ini.optim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">927</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.optim, errparms_optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">928</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$start$type = c(rep("state", length(state.ini.optim)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">929</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rep("deparm", length(parms.optim)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">930</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rep("error", length(errparms_optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">931</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">932</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$start_transformed = data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">933</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> value = c(state.ini.optim, transparms.optim, errparms_optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">934</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">935</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">936</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">937</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$fixed &lt;- data.frame(value = c(state.ini.fixed, parms.fixed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">938</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$fixed$type = c(rep("state", length(state.ini.fixed)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">939</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rep("deparm", length(parms.fixed)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">940</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">941</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$data &lt;- data.frame(time = current_data$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">942</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> variable = current_data$name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">943</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed = current_data$value,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">944</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted = current_data$predicted)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">945</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">946</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$data$residual &lt;- fit$data$observed - fit$data$predicted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">947</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">948</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$atol &lt;- atol</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">949</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$rtol &lt;- rtol</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">950</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$err_mod &lt;- err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">951</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">952</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return different sets of backtransformed parameters for summary and plotting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">953</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.optim &lt;- bparms.optim</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">954</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.fixed &lt;- bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">955</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">956</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return ode and state parameters for further fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">957</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.ode &lt;- bparms.all[mkinmod$parms]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">958</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.state &lt;- c(bparms.all[setdiff(names(bparms.all), names(fit$bparms.ode))],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">959</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">960</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(fit$bparms.state) &lt;- gsub("_0$", "", names(fit$bparms.state))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">961</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">962</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$errparms &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">963</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$df.residual &lt;- n_observed - length(c(degparms, errparms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">964</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">965</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Assign the class here so method dispatch works for residuals</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">966</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(fit) &lt;- c("mkinfit")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">967</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">968</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (test_residuals) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">969</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check for normal distribution of residuals</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">970</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$shapiro.p &lt;- shapiro.test(residuals(fit, standardized = TRUE))$p.value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">971</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$shapiro.p &lt; 0.05) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">972</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> shapiro_warning &lt;- paste("Shapiro-Wilk test for standardized residuals: p = ", signif(fit$shapiro.p, 3))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">973</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning(shapiro_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">974</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- c(summary_warnings, S = shapiro_warning)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">975</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">976</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">977</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">978</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$summary_warnings &lt;- summary_warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">979</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">980</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$date &lt;- date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">981</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$version &lt;- as.character(utils::packageVersion("mkin"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">982</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$Rversion &lt;- paste(R.version$major, R.version$minor, sep=".")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">983</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">984</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">985</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/illparms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Method to get the names of ill-defined parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The method for generalised nonlinear regression fits as obtained</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with [mkinfit] and [mmkin] checks if the degradation parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pass the Wald test (in degradation kinetics often simply called t-test) for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' significant difference from zero. For this test, the parameterisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' without parameter transformations is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The method for hierarchical model fits, also known as nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mixed-effects model fits as obtained with [saem] and [mhmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' checks if any of the confidence intervals for the random</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effects expressed as standard deviations include zero, and if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the confidence intervals for the error model parameters include</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The object to investigate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The object to be printed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level The confidence level for checking p values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For potential future extensions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param random For hierarchical fits, should random effects be tested?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmod For hierarchical fits, should error model parameters be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' tested?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param slopes For hierarchical [saem] fits using saemix as backend,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should slope parameters in the covariate model(starting with 'beta_') be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' tested?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return For [mkinfit] or [saem] objects, a character vector of parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names. For [mmkin] or [mhmkin] objects, a matrix like object of class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'illparms.mmkin' or 'illparms.mhmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note All return objects have printing methods. For the single fits, printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' does not output anything in the case no ill-defined parameters are found.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">2471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("illparms", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_A, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.mkinfit &lt;- function(object, conf.level = 0.95, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p_values &lt;- suppressWarnings(summary(object)$bpar[, "Pr(&gt;t)"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na &lt;- is.na(p_values)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> failed &lt;- p_values &gt; 1 - conf.level</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- names(parms(object))[na | failed]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ret) &lt;- "illparms.mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.mkinfit &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">190<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">190<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(as.character(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("SFO", "FOMC"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS C" = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.mmkin &lt;- function(object, conf.level = 0.95, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">74</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill &lt;- illparms(fit, conf.level = conf.level)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ill) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(paste(ill, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "illparms.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.mmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.saem.mmkin &lt;- function(object, conf.level = 0.95, random = TRUE, errmod = TRUE, slopes = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">100</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ints &lt;- intervals(object, conf.level = conf.level)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (random) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_random_i &lt;- which(ints$random[, "lower"] &lt; 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_random &lt;- rownames(ints$random)[ill_parms_random_i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- c(ill_parms, ill_parms_random)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (errmod) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_errmod_i &lt;- which(ints$errmod[, "lower"] &lt; 0 &amp; ints$errmod[, "upper"] &gt; 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_errmod &lt;- rownames(ints$errmod)[ill_parms_errmod_i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- c(ill_parms, ill_parms_errmod)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (slopes) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">115</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$so)) stop("Slope testing is only implemented for the saemix backend")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> slope_names &lt;- grep("^beta_", object$so@model@name.fixed, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci &lt;- object$so@results@conf.int</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(ci) &lt;- ci$name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> slope_ci &lt;- ci[slope_names, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_slopes &lt;- slope_ci[, "lower"] &lt; 0 &amp; slope_ci[, "upper"] &gt; 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- c(ill_parms, slope_names[ill_parms_slopes])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ill_parms) &lt;- "illparms.saem.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ill_parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.saem.mmkin &lt;- print.illparms.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.mhmkin &lt;- function(object, conf.level = 0.95, random = TRUE, errmod = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object[[1]], "saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> check_failed &lt;- function(x) if (inherits(x$so, "try-error")) TRUE else FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (check_failed(fit)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">141</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$FIM_failed) &amp;&amp;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "random effects and error model parameters" %in% fit$FIM_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">145</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("NA")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill &lt;- illparms(fit, conf.level = conf.level, random = random, errmod = errmod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ill) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">1000<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(paste(ill, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "illparms.mhmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.mhmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/plot.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("type", "variable", "observed"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the observed data and the fitted model of an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Solves the differential equations with the optimised and fixed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from a previous successful call to \code{\link{mkinfit}} and plots the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed data together with the solution of the fitted model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the current plot device is a \code{\link[tikzDevice]{tikz}} device, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' latex is being used for the formatting of the chi2 error level, if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{show_errmin = TRUE}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases plot.mkinfit plot_sep plot_res plot_err</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x Alias for fit introduced for compatibility with the generic S3</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit An object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param obs_vars A character vector of names of the observed variables for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which the data and the model should be plotted. Defauls to all observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlab Label for the x axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlim Plot range in x direction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylim Plot range in y direction. If given as a list, plot ranges</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for the different plot rows can be given for row layout.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_obs Colors used for plotting the observed data and the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' corresponding model prediction lines.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_obs Symbols to be used for plotting the data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lty_obs Line types to be used for the model predictions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param add Should the plot be added to an existing plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be added to the plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_residuals Should residuals be shown? If only one plot of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits is shown, the residual plot is in the lower third of the plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Otherwise, i.e. if "sep_obs" is given, the residual plots will be located</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to the right of the plots of the fitted curves. If this is set to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'standardized', a plot of the residuals divided by the standard deviation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' given by the fitted error model will be shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized When calling 'plot_res', should the residuals be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' standardized in the residual plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_errplot Should squared residuals and the error model be shown?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If only one plot of the fits is shown, this plot is in the lower third of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the plot. Otherwise, i.e. if "sep_obs" is given, the residual plots will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be located to the right of the plots of the fitted curves.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxabs Maximum absolute value of the residuals. This is used for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' scaling of the y axis and defaults to "auto".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sep_obs Should the observed variables be shown in separate subplots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If yes, residual plots requested by "show_residuals" will be shown next</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to, not below the plot of the fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.middle The relative height of the middle plot, if more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' than two rows of plots are shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param row_layout Should we use a row layout where the residual plot or the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' error model plot is shown to the right?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Position(s) of the legend(s). Passed to \code{\link{legend}} as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the first argument. If not length one, this should be of the same length</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as the obs_var argument.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param inset Passed to \code{\link{legend}} if applicable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_errmin Should the FOCUS chi2 error value be shown in the upper</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' margin of the plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmin_digits The number of significant digits for rounding the FOCUS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' chi2 error percentage.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param frame Should a frame be drawn around the plots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{plot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @import graphics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom grDevices dev.cur</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # One parent compound, one metabolite, both single first order, path from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # parent to sink included</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(parent = mkinsub("SFO", "m1", full = "Parent"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO", full = "Metabolite M1" ))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(fit, standardized = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_err(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show the observed variables separately, with residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fit, sep_obs = TRUE, show_residuals = TRUE, lpos = c("topright", "bottomright"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' show_errmin = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The same can be obtained with less typing, using the convenience function plot_sep</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(fit, lpos = c("topright", "bottomright"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show the observed variables separately, with the error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fit, sep_obs = TRUE, show_errplot = TRUE, lpos = c("topright", "bottomright"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' show_errmin = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.mkinfit &lt;- function(x, fit = x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(fit$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Time", ylab = "Residue",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = range(fit$data$time),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = "default",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs = 1:length(obs_vars),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs = col_obs,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_obs = rep(1, length(obs_vars)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add = FALSE, legend = !add,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errplot = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxabs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sep_obs = FALSE, rel.height.middle = 0.9,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_layout = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lpos = "topright", inset = c(0.05, 0.05),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errmin = FALSE, errmin_digits = 3,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(show_residuals, "standardized")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">112</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">118</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add &amp;&amp; show_residuals) stop("If adding to an existing plot we can not show residuals")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">119</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add &amp;&amp; show_errplot) stop("If adding to an existing plot we can not show the error model plot")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">120</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_residuals &amp;&amp; show_errplot) stop("We can either show residuals over time or the error model plot, not both")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">121</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add &amp;&amp; sep_obs) stop("If adding to an existing plot we can not show observed variables separately")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = fit$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.all &lt;- c(fit$bparms.optim, fit$bparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ininames &lt;- c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$start, type == "state")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$fixed, type == "state")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- parms.all[ininames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Order initial state variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- sub("_0", "", names(odeini))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- odeini[names(fit$mkinmod$diffs)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes &lt;- seq(xlim[1], xlim[2], length.out=100)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odenames &lt;- c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$start, type == "deparm")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$fixed, type == "deparm")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- parms.all[odenames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve" &amp; !is.null(fit$mkinmod$cf)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod[["symbols"]] &lt;- deSolve::checkDLL(dllname = fit$mkinmod$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(fit$mkinmod, odeparms, odeini, outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type, atol = fit$atol, rtol = fit$rtol)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- as.data.frame(out)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(col_obs) &lt;- names(pch_obs) &lt;- names(lty_obs) &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create a plot layout only if not to be added to an existing plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # or only a single plot is requested (e.g. by plot.mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> do_layout = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_residuals | sep_obs | show_errplot) do_layout = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows = if (sep_obs) length(obs_vars) else 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (do_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Layout should be restored afterwards</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If the observed variables are shown separately, or if requested, do row layout</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sep_obs | row_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_layout &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_cols = if (show_residuals | show_errplot) 2 else 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plots = n_plot_rows * n_plot_cols</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set relative plot heights, so the first and the last plot are the norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and the middle plots (if n_plot_rows &gt;2) are smaller by rel.height.middle</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.heights &lt;- if (n_plot_rows &gt; 2) c(1, rep(rel.height.middle, n_plot_rows - 2), 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else rep(1, n_plot_rows)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout_matrix = matrix(1:n_plots,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows, n_plot_cols, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(layout_matrix, heights = rel.heights)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # else show residuals in the lower third to keep compatibility</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(matrix(c(1, 2), 2, 1), heights = c(2, 1.3))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3, 4, 4, 2) + 0.1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Replicate legend position argument if necessary</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(lpos) == 1) lpos = rep(lpos, n_plot_rows)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Loop over plot rows</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (plot_row in 1:n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_obs_vars = if (sep_obs) obs_vars[plot_row] else obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set ylim to sensible default, or to the specified value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.list(ylim)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">196</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row &lt;- ylim[[plot_row]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ylim[[1]] == "default") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = c(0, max(c(subset(fit$data, variable %in% row_obs_vars)$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unlist(out[row_obs_vars])), na.rm = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">202</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = ylim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (row_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for top row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce bottom margin by 2.1 - hides x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row == 1 &amp; n_plot_rows &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">210</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 4.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for middle rows of plots, if any</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row &gt; 1 &amp; plot_row &lt; n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce top margin by 2 after the first plot as we have no main title,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # reduced plot height, therefore we need rel.height.middle in the layout</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">217</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for bottom row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row == n_plot_rows &amp; n_plot_rows &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Restore bottom margin for last plot to show x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">223</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5.1, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up the main plot if not to be added to an existing plot</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add == FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type="n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim, ylim = ylim_row,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = ylab, frame = frame, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Plot the data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in row_obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">1708<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(subset(fit$data, variable == obs_var, c(time, observed)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">1708<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = pch_obs[obs_var], col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Plot the model output</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> matlines(out$time, out[row_obs_vars], col = col_obs[row_obs_vars], lty = lty_obs[row_obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (legend == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get full names from model definition if they are available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend_names = lapply(row_obs_vars, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$mkinmod$spec[[x]]$full_name))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.na(fit$mkinmod$spec[[x]]$full_name)) x</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">248</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else fit$mkinmod$spec[[x]]$full_name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">490<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else x</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos[plot_row], inset= inset, legend = legend_names,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[row_obs_vars], pch = pch_obs[row_obs_vars], lty = lty_obs[row_obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show chi2 error value if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_errmin) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(row_obs_vars) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin_var = row_obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">260</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin_var = "All data"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">261</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(row_obs_vars) != length(fit$mkinmod$map)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">262</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Showing chi2 error level for all data, but only ",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">263</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_obs_vars, " were selected for plotting")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">264</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2 &lt;- signif(100 * mkinerrmin(fit)[errmin_var, "err.min"], errmin_digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use LateX if the current plotting device is tikz</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (names(dev.cur()) == "tikz output") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- paste0("$\\chi^2$ error level = ", chi2, "\\%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_perc &lt;- paste0(chi2, "%")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">273</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- bquote(chi^2 ~ "error level" == .(chi2_perc))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(chi2_text, cex = 0.7, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (do_layout &amp; !row_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5, 4, 0, 2) + 0.1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">280</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">281</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">282</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show residuals if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_residuals) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinresplot(fit, obs_vars = row_obs_vars, standardized = standardized,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs = pch_obs[row_obs_vars], col_obs = col_obs[row_obs_vars],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = FALSE, frame = frame, xlab = xlab, xlim = xlim, maxabs = maxabs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">288</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show error model plot if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_errplot) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">291</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinerrplot(fit, obs_vars = row_obs_vars,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">292</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs = pch_obs[row_obs_vars], col_obs = col_obs[row_obs_vars],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = FALSE, frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">296</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot_sep &lt;- function(fit, show_errmin = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">301</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals = ifelse(identical(fit$err_mod, "const"), TRUE, "standardized"), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot.mkinfit(fit, sep_obs = TRUE, show_residuals = show_residuals,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">303</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errmin = show_errmin, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">306</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">308</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot_res &lt;- function(fit, sep_obs = FALSE, show_errmin = sep_obs,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = ifelse(identical(fit$err_mod, "const"), FALSE, TRUE), ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot.mkinfit(fit, sep_obs = sep_obs, show_errmin = show_errmin,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">312</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals = ifelse(standardized, "standardized", TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">313</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_layout = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">314</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">315</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">316</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">318</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot_err &lt;- function(fit, sep_obs = FALSE, show_errmin = sep_obs, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">319</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot.mkinfit(fit, sep_obs = sep_obs, show_errmin = show_errmin,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">320</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errplot = TRUE, row_layout = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">321</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">322</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">323</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the observed data and the fitted model of an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">324</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">325</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Deprecated function. It now only calls the plot method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{plot.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">327</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">328</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit an object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots further arguments passed to \code{\link{plot.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">332</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">333</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinplot &lt;- function(fit, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">334</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">335</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(fit, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">336</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mixed.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Create a mixed effects model from an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom rlang !!!</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [mmkin] row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method The method to be used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Currently not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object of class 'mixed.mmkin' which has the observed data in a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' single dataframe which is convenient for plotting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n_biphasic &lt;- 8</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' err_1 = list(const = 1, prop = 0.07)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("DFOP", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(123456)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log_sd &lt;- 0.3</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' syn_biphasic_parms &lt;- as.matrix(data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k1 = rlnorm(n_biphasic, log(0.05), log_sd),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k2 = rlnorm(n_biphasic, log(0.01), log_sd),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' g = plogis(rnorm(n_biphasic, 0, log_sd)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_parent_to_m1 = plogis(rnorm(n_biphasic, 0, log_sd)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_m1 = rlnorm(n_biphasic, log(0.002), log_sd)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_biphasic_mean &lt;- lapply(1:n_biphasic,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(DFOP_SFO, syn_biphasic_parms[i, ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(123456L)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_biphasic &lt;- lapply(ds_biphasic_mean, function(ds) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' add_err(ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(value) sqrt(err_1$const^2 + value^2 * err_1$prop^2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1, secondary = "m1")[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin(list("DFOP-SFO" = DFOP_SFO), ds_biphasic, error_model = "tc", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mixed &lt;- mixed(f_mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_mixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_mixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mixed &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("mixed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mixed.mmkin &lt;- function(object, method = c("none"), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">57</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- list(mmkin = object, mkinmod = object[[1]]$mkinmod)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (method[1] == "none") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_list &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(x) x$data[c("variable", "time", "observed", "predicted", "residual")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_list) &lt;- ds_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data &lt;- vctrs::vec_rbind(!!!ds_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(res$data)[1:4] &lt;- c("ds", "name", "time", "value")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$name &lt;- as.character(res$data$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$ds &lt;- ordered(res$data$ds, levels = unique(res$data$ds))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized &lt;- unlist(lapply(object, residuals, standardized = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$std &lt;- res$data$residual / standardized</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$standardized &lt;- standardized</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("mixed.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x A mixed.mmkin object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mixed.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Kinetic model fitted by nonlinear regression to each dataset" )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStructural model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- x$mmkin[[1]]$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$mmkin, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nMean fitted parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(mean_degparms(x$mmkin), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/parms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Extract model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function returns degradation model parameters as well as error</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model parameters per default, in order to avoid working with a fitted model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' without considering the error structure that was assumed for the fit.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fitted model object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Depending on the object, a numeric vector of fitted model parameters,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a matrix (e.g. for mmkin row objects), or a list of matrices (e.g. for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mmkin objects with more than one row).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [saem], [multistart]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # mkinfit objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("SFO", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) subset(x$data[c("name", "time", "value")]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds) &lt;- paste("Dataset", 6:10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(c("SFO", "FOMC", "DFOP"), ds, quiet = TRUE, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits[, 2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">91384<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("parms", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transformed Should the parameters be returned as used internally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' during the optimisation?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errparms Should the error model parameters be returned</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in addition to the degradation parameters?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.mkinfit &lt;- function(object, transformed = FALSE, errparms = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">88039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- if (transformed) object$par</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">88039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else c(object$bparms.optim, object$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">88039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!errparms) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">3000<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res[setdiff(names(res), names(object$errparms))]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">85039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.mmkin &lt;- function(object, transformed = FALSE, errparms = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- sapply(object, parms, transformed = transformed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(res) &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">61</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">62</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:nrow(object)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">63</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res[[i]] &lt;- parms(object[i, ], transformed = transformed,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">64</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(res) &lt;- rownames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param exclude_failed For [multistart] objects, should rows for failed fits</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be removed from the returned parameter matrix?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.multistart &lt;- function(object, exclude_failed = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- t(sapply(object, parms))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> successful &lt;- which(!is.na(res[, 1]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> first_success &lt;- successful[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(res) &lt;- names(parms(object[[first_success]]))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">80</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (exclude_failed[1]) res &lt;- res[successful, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit one or more kinetic models with one or more state variables to one or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' more datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function calls \code{\link{mkinfit}} on all combinations of models and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' datasets specified in its first two arguments.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param models Either a character vector of shorthand names like</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{c("SFO", "FOMC", "DFOP", "HS", "SFORB")}, or an optionally named</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list of \code{\link{mkinmod}} objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param datasets An optionally named list of datasets suitable as observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' data for \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores The number of cores to be used for multicore processing. This</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is only used when the \code{cluster} argument is \code{NULL}. On Windows</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' machines, cores &gt; 1 is not supported, you need to use the \code{cluster}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument to use multiple logical processors. Per default, all cores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' detected by [parallel::detectCores()] are used, except on Windows where</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the default is 1.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cluster A cluster as returned by \code{\link{makeCluster}} to be used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parallel execution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments that will be passed to \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom parallel mclapply parLapply detectCores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A two-dimensional \code{\link{array}} of \code{\link{mkinfit}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects and/or try-errors that can be indexed using the model names for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' first index (row index) and the dataset names for the second index (column</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' index).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{[.mmkin}} for subsetting, \code{\link{plot.mmkin}} for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plotting.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords optimize</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_SFO_lin &lt;- mkinmod(parent = mkinsub("SFO", "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO", "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_FOMC_lin &lt;- mkinmod(parent = mkinsub("FOMC", "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO", "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' models &lt;- list(SFO_lin = m_synth_SFO_lin, FOMC_lin = m_synth_FOMC_lin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' datasets &lt;- lapply(synthetic_data_for_UBA_2014[1:3], function(x) x$data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(datasets) &lt;- paste("Dataset", 1:3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_default &lt;- system.time(fits.0 &lt;- mmkin(models, datasets, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_1 &lt;- system.time(fits.4 &lt;- mmkin(models, datasets, cores = 1, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fits.0[["SFO_lin", 2]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # plot.mkinfit handles rows or columns of mmkin result objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[1, ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[1, ], obs_var = c("M1", "M2"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[, 1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use double brackets to extract a single mkinfit object, which will be plotted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # by plot.mkinfit and can be plotted using plot_sep</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[[1, 1]], sep_obs = TRUE, show_residuals = TRUE, show_errmin = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(fits.0[[1, 1]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Plotting with mmkin (single brackets, extracting an mmkin object) does not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # allow to plot the observed variables separately</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[1, 1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # On Windows, we can use multiple cores by making a cluster first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cl &lt;- parallel::makePSOCKcluster(12)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "FOMC", "DFOP"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list(A = FOCUS_2006_A, B = FOCUS_2006_B, C = FOCUS_2006_C, D = FOCUS_2006_D),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cluster = cl, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We get false convergence for the FOMC fit to FOCUS_2006_A because this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # dataset is really SFO, and the FOMC fit is overparameterised</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parallel::stopCluster(cl)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mmkin &lt;- function(models = c("SFO", "FOMC", "DFOP"), datasets,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = if (Sys.info()["sysname"] == "Windows") 1 else parallel::detectCores(), cluster = NULL, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_models_available = c("SFO", "FOMC", "DFOP", "HS", "SFORB", "IORE", "logistic")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.m &lt;- length(models)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.d &lt;- length(datasets)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- n.m * n.d</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_indices &lt;- matrix(1:n.fits, ncol = n.d)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check models and define their names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(sapply(models, function(x) inherits(x, "mkinmod")))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">2323<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(models %in% parent_models_available)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply models as a list of mkinmod objects or a vector combined of\n ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(parent_models_available, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">2273<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(models) &lt;- models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">1087<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(names(models))) names(models) &lt;- as.character(1:n.m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check datasets and define their names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1575<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(names(datasets))) names(datasets) &lt;- as.character(1:n.d)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define names for fit index</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit_indices) &lt;- list(model = names(models),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dataset = names(datasets))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_function &lt;- function(fit_index) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> w &lt;- which(fit_indices == fit_index, arr.ind = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_index &lt;- w[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dataset_index &lt;- w[2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- try(mkinfit(models[[model_index]], datasets[[dataset_index]], ...))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(res, "try-error")) res$mkinmod$name &lt;- names(models)[model_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(cluster)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">2154<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::mclapply(as.list(1:n.fits), fit_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">2154<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mc.cores = cores, mc.preschedule = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">1828<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::parLapply(cluster, as.list(1:n.fits), fit_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attributes(results) &lt;- attributes(fit_indices)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "call") &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "time") &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(results) &lt;- "mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(results)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Subsetting method for mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An \code{\link{mmkin} object}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param i Row index selecting the fits for specific models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param j Column index selecting the fits to specific datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... Not used, only there to satisfy the generic method definition</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param drop If FALSE, the method always returns an mmkin object, otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' either a list of mkinfit objects or a single mkinfit object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object of class \code{\link{mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname Extract.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Only use one core, to pass R CMD check --as-cran</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(c("SFO", "FOMC"), list(B = FOCUS_2006_B, C = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits["FOMC", ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits[, "B"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits["SFO", "B"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' head(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This extracts an mkinfit object with lots of components</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits[["FOMC", "B"]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">`[.mmkin` &lt;- function(x, i, j, ..., drop = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x_sub &lt;- x[i, j, drop = drop]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!drop) class(x_sub) &lt;- "mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(x_sub)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print method for mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mmkin] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mmkin&gt; object\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Status of individual fits:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(status(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.mmkin &lt;- function(object, ..., evaluate = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- attr(object, "call")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">115<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">206<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">206<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">198</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinpredict.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Produce predictions from a kinetic model using specific parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function produces a time series for all the observed variables in a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic model as specified by [mkinmod], using a specific set of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic parameters and initial values for the state variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases mkinpredict mkinpredict.mkinmod mkinpredict.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x A kinetic model as produced by [mkinmod], or a kinetic fit as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted by [mkinfit]. In the latter case, the fitted parameters are used for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the prediction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param odeparms A numeric vector specifying the parameters used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic model, which is generally defined as a set of ordinary differential</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' equations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param odeini A numeric vector containing the initial values of the state</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables of the model. Note that the state variables can differ from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variables, for example in the case of the SFORB model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param outtimes A numeric vector specifying the time points for which model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predictions should be generated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param solution_type The method that should be used for producing the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predictions. This should generally be "analytical" if there is only one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variable, and usually "deSolve" in the case of several observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables. The third possibility "eigen" is fast in comparison to uncompiled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ODE models, but not applicable to some models, e.g. using FOMC for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent compound.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method.ode The solution method passed via [mkinpredict] to [ode]] in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' case the solution type is "deSolve" and we are not using compiled code.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' When using compiled code, only lsoda is supported.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_compiled If set to \code{FALSE}, no compiled version of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinmod] model is used, even if is present.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_symbols If set to \code{TRUE} (default), symbol info present in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the [mkinmod] object is used if available for accessing compiled code</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param atol Absolute error tolerance, passed to the ode solver.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rtol Absolute error tolerance, passed to the ode solver.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxsteps Maximum number of steps, passed to the ode solver.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param map_output Boolean to specify if the output should list values for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the observed variables (default) or for all state variables (if set to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FALSE). Setting this to FALSE has no effect for analytical solutions,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as these always return mapped output.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param na_stop Should it be an error if [ode] returns NaN values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to the ode solver in case such a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solver is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A matrix with the numeric solution in wide format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO &lt;- mkinmod(degradinol = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Compare solution types</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", use_compiled = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "eigen")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Compare integration methods to analytical solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical")[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method = "lsoda", use_compiled = FALSE)[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method = "ode45", use_compiled = FALSE)[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method = "rk4", use_compiled = FALSE)[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # rk4 is not as precise here</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The number of output times used to make a lot of difference until the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # default for atol was adjusted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seq(0, 20, by = 0.1))[201,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seq(0, 20, by = 0.01))[2001,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Comparison of the performance of solution types</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO = mkinmod(parent = list(type = "SFO", to = "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if(require(rbenchmark)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(replications = 10, order = "relative", columns = c("test", "relative", "elapsed"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' eigen = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "eigen")[201,],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve_compiled = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve")[201,],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", use_compiled = FALSE)[201,],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical", use_compiled = FALSE)[201,])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Predict from a fitted model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE, solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' head(mkinpredict(f))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinpredict &lt;- function(x, odeparms, odeini, outtimes, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("mkinpredict", x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinpredict</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinpredict.mkinmod &lt;- function(x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = c(k_parent_sink = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini = c(parent = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = seq(0, 120, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = "lsoda", atol = 1e-8, rtol = 1e-10, maxsteps = 20000L,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map_output = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na_stop = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Names of state variables and observed variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(x$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(x$spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Order the inital values for state variables if they are named</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(names(odeini))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- odeini[mod_vars]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs &lt;- matrix(NA, nrow = length(outtimes), ncol = 1 + length(obs_vars),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(as.character(outtimes), c("time", obs_vars)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[, "time"] &lt;- outtimes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_out_na &lt;- 0 # to check if we get NA values with deSolve</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # This is clumsy, as we wanted fast analytical predictions for mkinfit,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # which bypasses mkinpredict in the case of analytical solutions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pseudo_observed &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data.frame(name = rep(obs_vars, each = length(outtimes)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = rep(outtimes, length(obs_vars)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pseudo_observed$predicted &lt;- x$deg_func(pseudo_observed, odeini, odeparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">2431585<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[, obs_var] &lt;- pseudo_observed[pseudo_observed$name == obs_var, "predicted"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We don't have solutions for unobserved state variables, the output of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # analytical solutions is always mapped to observed variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "eigen") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> evalparse &lt;- function(string) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">392283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> eval(parse(text=string), as.list(c(odeparms, odeini)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> coefmat.num &lt;- matrix(sapply(as.vector(x$coefmat), evalparse),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = length(mod_vars))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> e &lt;- eigen(coefmat.num)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c &lt;- solve(e$vectors, odeini)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f.out &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">1085040<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> e$vectors %*% diag(exp(e$values * t), nrow=length(mod_vars)) %*% c</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> o &lt;- matrix(mapply(f.out, outtimes),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = length(mod_vars), ncol = length(outtimes))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- cbind(outtimes, t(o))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(out) &lt;- c("time", mod_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">45604101<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$cf) &amp; use_compiled[1] != FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$symbols) &amp; use_symbols) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">1427314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lsoda_func &lt;- x$symbols</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">44175921<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lsoda_func &lt;- "diffs"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- deSolve::lsoda(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times = outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = lsoda_func,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dllname = x$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms = odeparms[x$parms], # Order matters when using compiled models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = atol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rtol = rtol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxsteps = maxsteps,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(out) &lt;- c("time", mod_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkindiff &lt;- function(t, state, parms) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time &lt;- t</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in names(x$diffs))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffname &lt;- paste("d", box, sep="_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[diffname] &lt;- with(as.list(c(time, state, parms)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> eval(parse(text=x$diffs[[box]])))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(c(diffs)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- deSolve::ode(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times = outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = mkindiff,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms = odeparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = method.ode,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = atol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rtol = rtol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxsteps = maxsteps,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">45604101<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_out_na &lt;- sum(is.na(out))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">45604101<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_out_na &gt; 0 &amp; na_stop) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">224</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("odeini:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">225</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(odeini)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">226</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("odeparms:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">227</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(odeparms)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">228</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("out:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">229</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(out)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">230</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Differential equations were not integrated for all output times because\n",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">231</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_out_na, " NaN values occurred in output from ode()")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (map_output) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Output transformation for models with unobserved compartments like SFORB</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # if not already mapped in analytical solution</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_out_na &gt; 0 &amp; !na_stop) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">239</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> available &lt;- c(TRUE, rep(FALSE, length(outtimes) - 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> available &lt;- rep(TRUE, length(outtimes))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (var in names(x$map)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">93237433<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if((length(x$map[[var]]) == 1)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">93235081<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[available, var] &lt;- out[available, var]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">2352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[available, var] &lt;- out[available, x$map[[var]][1]] +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">2352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out[available, x$map[[var]][2]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">253</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(out) &lt;- list(time = as.character(outtimes), c("time", mod_vars))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">254</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinpredict</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinpredict.mkinfit &lt;- function(x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = x$bparms.ode,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini = x$bparms.state,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = seq(0, 120, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">264</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = "lsoda", atol = 1e-8, rtol = 1e-10,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map_output = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">269</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinpredict(x$mkinmod, odeparms, odeini, outtimes, solution_type, use_compiled,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode, atol, rtol, map_output, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/anova.saem.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Anova method for saem.mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Generate an anova object. The method to calculate the BIC is that from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saemix package. As in other prominent anova methods, models are sorted by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' number of parameters, and the tests (if requested) are always relative to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model on the previous line.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [saem.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... further such objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method Method for likelihood calculation: "is" (importance sampling),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "lin" (linear approximation), or "gq" (Gaussian quadrature). Passed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to [saemix::logLik.SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test Should a likelihood ratio test be performed? If TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the alternative models are tested against the first model. Should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' only be done for nested models.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param model.names Optional character vector of model names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats anova logLik update pchisq terms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom methods is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils capture.output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return an "anova" data frame; the traditional (S3) result of anova()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">anova.saem.mmkin &lt;- function(object, ...,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = c("is", "lin", "gq"), test = FALSE, model.names = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The following code is heavily inspired by anova.lmer in the lme4 package</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mCall &lt;- match.call(expand.dots = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dots &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is_model &lt;- sapply(dots, is, "saem.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(is_model)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- c(list(object), dots[is_model])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> successful &lt;- sapply(mods, function(x) !inherits(x$so, "try-error"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(model.names))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">284<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names &lt;- vapply(as.list(mCall)[c(FALSE, TRUE, is_model)], deparse1, "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Sanitize model names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(model.names) != length(mods))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">40</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Model names vector and model list have different lengths")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(duplicated(model.names)))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">43</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Duplicate model names are not allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (max(nchar(model.names)) &gt; 200) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">46</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Model names longer than 200 characters, assigning generic names")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">47</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names &lt;- paste0("MODEL",seq_along(model.names))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(mods) &lt;- model.names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- mods[successful]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Ensure same data, ignoring covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> same_data &lt;- sapply(mods[-1], function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">1182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> identical(mods[[1]]$data[c("ds", "name", "time", "value")],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">1182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$data[c("ds", "name", "time", "value")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(same_data)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop(sum(!same_data), " objects have not been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llks &lt;- lapply(names(mods), function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llk &lt;- try(logLik(mods[[x]], method = method), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(llk, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">64</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Could not obtain log likelihood with '", method, "' method for ", x)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">65</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llk &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(llk)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> available &lt;- !sapply(llks, is.na)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llks &lt;- llks[available]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- mods[available]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Order models by increasing degrees of freedom:</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar &lt;- vapply(llks, attr, FUN.VALUE=numeric(1), "df")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ii &lt;- order(npar)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- mods[ii]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llks &lt;- llks[ii]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar &lt;- npar[ii]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Describe data for the header, as in summary.saem.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> header &lt;- paste("Data:", nrow(object$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(object$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(object$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Calculate statistics</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llk &lt;- unlist(llks)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chisq &lt;- 2 * pmax(0, c(NA, diff(llk)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dfChisq &lt;- c(NA, diff(npar))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bic &lt;- function(x, method) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> BIC(x$so, method = method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar = npar,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> AIC = sapply(llks, AIC),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> BIC = sapply(mods, bic, method = method), # We use the saemix method here</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Lik = llk,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = names(mods), check.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (test) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> testval &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Chisq = chisq,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Df = dfChisq,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Pr(&gt;Chisq)" = ifelse(dfChisq == 0, NA,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pchisq(chisq, dfChisq, lower.tail = FALSE)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = names(mods), check.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val &lt;- cbind(val, testval)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(val) &lt;- c("anova", class(val))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> structure(val, heading = c(header))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">112</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Currently, no anova method is implemented for the case of a single saem.mmkin object")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/create_deg_func.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Create degradation functions for known analytical solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param spec List of model specifications as contained in mkinmod objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_of_ff Minimum or maximum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Degradation function to be attached to mkinmod objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS_D &lt;- subset(FOCUS_2006_D, value != 0) # to avoid warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_1 &lt;- mkinfit(SFO_SFO, FOCUS_D, solution_type = "analytical", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_2 &lt;- mkinfit(SFO_SFO, FOCUS_D, solution_type = "deSolve", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (require(rbenchmark))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinfit(SFO_SFO, FOCUS_D, solution_type = "analytical", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve = mkinfit(SFO_SFO, FOCUS_D, solution_type = "deSolve", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' replications = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("DFOP", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinfit(DFOP_SFO, FOCUS_D, solution_type = "analytical", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve = mkinfit(DFOP_SFO, FOCUS_D, solution_type = "deSolve", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' replications = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">create_deg_func &lt;- function(spec, use_of_ff = c("min", "max")) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff &lt;- match.arg(use_of_ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> min_ff &lt;- use_of_ff == "min"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent &lt;- obs_vars[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_type &lt;- spec[[1]]$type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE # This may be modified below</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">5916<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (min_ff) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">599<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> targets &lt;- c(spec[[1]]$to, if (spec[[1]]$sink) "sink" else NULL)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">599<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_parent &lt;- paste(paste0("k_", parent, "_", targets), collapse = " + ")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">5317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_parent &lt;- paste0("k_", parent)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[parent] &lt;- paste0(parent_type, ".solution(t, odeini['", parent,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFORB") "_free", "'], ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> switch(parent_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFO = k_parent,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FOMC = "alpha, beta",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> IORE = paste0("k__iore_", parent, if (min_ff) "_sink" else "", ", N_", parent),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DFOP = "k1, k2, g",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB = paste0("k_", parent, "_free_bound, k_", parent, "_bound_free, k_", parent, "_free", if (min_ff) "_sink" else ""),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> HS = "k1, k2, tb",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> logistic = "kmax, k0, r"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ")")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt;= 2) supported &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Except for the following cases:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) == 2) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n1 &lt;- obs_vars[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n2 &lt;- obs_vars[2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- paste0("odeini['", parent, "']")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n20 &lt;- paste0("odeini['", n2, "']")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # sfo_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- k_parent</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2, if(min_ff) "_sink" else "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((", k2, "-", k1, ")*", n20, "-", k1, "*", n10, ")*exp(-", k2, "*t)+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1, "*", n10, "*exp(-", k1, "*t))/(", k2, "-", k1, ")")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # sfo_f12_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff == "max",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- k_parent</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- paste0("f_", n1, "_to_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((", k2, "-", k1, ")*", n20, "-", f12, "*", k1, "*", n10, ")*exp(-", k2, "*t)+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12, "*", k1, "*", n10, "*exp(-", k1, "*t))/(", k2, "-", k1, ")")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # sfo_k120_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff == "min",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k12 &lt;- paste0("k_", n1, "_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k10 &lt;- paste0("k_", n1, "_sink")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2, "_sink")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((", k2, "-", k12, "-", k10, ")*", n20, "-", k12, "*", n10, ")*exp(-", k2, "*t)+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k12, "*", n10, "*exp(-(", k_parent, ")*t))/(", k2, "-(", k_parent, "))")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # dfop_f12_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff == "max",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "DFOP",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- paste0("f_", n1, "_to_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "((", f12, "* g - ", f12, ") * k2 * ", n10, " * exp(- k2 * t))/(k2 - ", k2, ") - ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "((", f12, "* g) * k1 * ", n10, " * exp(- k1 * t))/(k1 - ", k2, ") + ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((k1 - ", k2, ") * k2 - ", k2, "* k1 + ", k2, "^2) * ", n20, "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "((", f12, "* k1 + (", f12, "*g - ", f12, ") * ", k2, ") * k2 - ", f12, " * g * ", k2, " * k1) * ", n10, ") * ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "exp( - ", k2, " * t)/((k1 - ", k2, ") * k2 - ", k2, " * k1 + ", k2, "^2)")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (supported) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_func &lt;- function(observed, odeini, odeparms) {}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_body &lt;- paste0("{\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "predicted &lt;- numeric(0)\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "with(as.list(odeparms), {\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">9961<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_body &lt;- paste0(f_body,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">9961<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "t &lt;- observed[observed$name == '", obs_var, "', 'time']\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">9961<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "predicted &lt;&lt;- c(predicted, ", predicted_text[obs_var], ")\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_body &lt;- paste0(f_body,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "})\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "return(predicted)\n}\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> body(deg_func) &lt;- parse(text = f_body)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(deg_func)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">942<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nlme.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Helper functions to create nlme models from mmkin row objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' These functions facilitate setting up a nonlinear mixed effects model for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' an mmkin row object. An mmkin row object is essentially a list of mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects that have been obtained by fitting the same model to a list of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' datasets. They are used internally by the [nlme.mmkin()] method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mmkin row object containing several fits of the same model to different datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @import nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{nlme.mmkin}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_SFO &lt;- mkinmod(parent = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_1 &lt;- mkinpredict(m_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 98), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_1_long &lt;- mkin_wide_to_long(d_SFO_1, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_2 &lt;- mkinpredict(m_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.05),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 102), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_2_long &lt;- mkin_wide_to_long(d_SFO_2, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_3 &lt;- mkinpredict(m_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.02),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 103), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_3_long &lt;- mkin_wide_to_long(d_SFO_3, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d1 &lt;- add_err(d_SFO_1, function(value) 3, n = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d2 &lt;- add_err(d_SFO_2, function(value) 2, n = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d3 &lt;- add_err(d_SFO_3, function(value) 4, n = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- c(d1 = d1, d2 = d2, d3 = d3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin("SFO", ds, cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mean_dp &lt;- mean_degparms(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' grouped_data &lt;- nlme_data(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nlme_f &lt;- nlme_function(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # These assignments are necessary for these objects to be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # visible to nlme and augPred when evaluation is done by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # pkgdown to generate the html docs.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' assign("nlme_f", nlme_f, globalenv())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' assign("grouped_data", grouped_data, globalenv())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_nlme &lt;- nlme(value ~ nlme_f(name, time, parent_0, log_k_parent_sink),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' data = grouped_data,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fixed = parent_0 + log_k_parent_sink ~ 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' random = pdDiag(parent_0 + log_k_parent_sink ~ 1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' start = mean_dp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(m_nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(augPred(m_nlme, level = 0:1), layout = c(3, 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # augPred does not work on fits with more than one state</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # variable</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The procedure is greatly simplified by the nlme.mmkin function</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme &lt;- nlme(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A function that can be used with nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme_function &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">60</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_model &lt;- object[[1]]$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_names &lt;- names(mean_degparms(object))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Inspired by https://stackoverflow.com/a/12983961/3805440</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and https://stackoverflow.com/a/26280789/3805440</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function_alist &lt;- replicate(length(degparm_names) + 2, substitute())</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(model_function_alist) &lt;- c("name", "time", degparm_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function_body &lt;- quote({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> arg_frame &lt;- as.data.frame(as.list((environment())), stringsAsFactors = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_frame &lt;- arg_frame[1:2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_frame &lt;- arg_frame[-(1:2)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_unique &lt;- unique(parm_frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_unique &lt;- nrow(parms_unique)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times_ds &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_ds &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:n_unique) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times_ds[[i]] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> arg_frame[which(arg_frame[[3]] == parms_unique[i, 1]), "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_ds[[i]] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> arg_frame[which(arg_frame[[3]] == parms_unique[i, 1]), "name"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_list &lt;- lapply(1:n_unique, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim &lt;- unlist(parms_unique[x, , drop = TRUE])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_fixed &lt;- object[[1]]$bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim_parm_names &lt;- grep('_0$', names(transparms_optim), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim &lt;- transparms_optim[odeini_optim_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_optim) &lt;- gsub('_0$', '', odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed_parm_names &lt;- grep('_0$', names(parms_fixed), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed &lt;- parms_fixed[odeini_fixed_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_fixed) &lt;- gsub('_0$', '', odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- c(odeini_optim, odeini_fixed)[names(mkin_model$diffs)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_transparms_optim_names &lt;- setdiff(names(transparms_optim), odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_optim &lt;- backtransform_odeparms(transparms_optim[ode_transparms_optim_names], mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = object[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed_names &lt;- setdiff(names(parms_fixed), odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed &lt;- parms_fixed[odeparms_fixed_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- c(odeparms_optim, odeparms_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_wide &lt;- mkinpredict(mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = odeparms, odeini = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = object[[1]]$solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = sort(unique(times_ds[[x]])))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_array &lt;- out_wide[, -1, drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(out_array) &lt;- as.character(unique(times_ds[[x]]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_times &lt;- as.character(times_ds[[x]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_names &lt;- as.character(names_ds[[x]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_values &lt;- mapply(function(times, names) out_array[times, names],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_times, out_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(as.numeric(out_values))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- unlist(res_list)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- as.function(c(model_function_alist, model_function_body))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(model_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom rlang !!!</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A \code{\link{groupedData}} object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme_data &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">132</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_list &lt;- lapply(object, function(x) x$data[c("time", "variable", "observed")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_list) &lt;- ds_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme &lt;- vctrs::vec_rbind(!!!ds_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme$variable &lt;- as.character(ds_nlme$variable)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme$ds &lt;- ordered(ds_nlme$ds, levels = unique(ds_nlme$ds))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme_renamed &lt;- data.frame(ds = ds_nlme$ds, name = ds_nlme$variable,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = ds_nlme$time, value = ds_nlme$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stringsAsFactors = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme_grouped &lt;- groupedData(value ~ time | ds, ds_nlme_renamed, order.groups = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ds_nlme_grouped)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/transform_odeparms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Functions to transform and backtransform kinetic parameters for fitting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The transformations are intended to map parameters that should only take on</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' restricted values to the full scale of real numbers. For kinetic rate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' constants and other parameters that can only take on positive values, a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' simple log transformation is used. For compositional parameters, such as the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formations fractions that should always sum up to 1 and can not be negative,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the [ilr] transformation is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The transformation of sets of formation fractions is fragile, as it supposes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the same ordering of the components in forward and backward transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This is no problem for the internal use in [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parms Parameters of kinetic models as used in the differential</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' equations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transparms Transformed parameters of kinetic models as used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitting procedure.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param mkinmod The kinetic model of class [mkinmod], containing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the names of the model variables that are needed for grouping the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formation fractions before [ilr] transformation, the parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names and the information if the pathway to sink is included in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_rates Boolean specifying if kinetic rate constants should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be transformed in the model specification used in the fitting for better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compliance with the assumption of normal distribution of the estimator. If</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' TRUE, also alpha and beta parameters of the FOMC model are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log-transformed, as well as k1 and k2 rate constants for the DFOP and HS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' models and the break point tb of the HS model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_fractions Boolean specifying if formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' constants should be transformed in the model specification used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitting for better compliance with the assumption of normal distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the estimator. The default (TRUE) is to do transformations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The g parameter of the DFOP model is also seen as a fraction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If a single fraction is transformed (g parameter of DFOP or only a single</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' target variable e.g. a single metabolite plus a pathway to sink), a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logistic transformation is used [stats::qlogis()]. In other cases, i.e. if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' two or more formation fractions need to be transformed whose sum cannot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' exceed one, the [ilr] transformation is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A vector of transformed or backtransformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats plogis qlogis</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = list(type = "SFO", to = "m1", sink = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"), use_of_ff = "min")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Fit the model to the FOCUS example dataset D using defaults</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS_D &lt;- subset(FOCUS_2006_D, value != 0) # remove zero values to avoid warning</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.s &lt;- summary(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Transformed and backtransformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Compare to the version without transforming rate parameters (does not work</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # with analytical solution, we get NA values for m1 in predictions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.2 &lt;- mkinfit(SFO_SFO, FOCUS_D, transform_rates = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.2.s &lt;- summary(fit.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.2.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.2.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initials &lt;- fit$start$value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(initials) &lt;- rownames(fit$start)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformed &lt;- fit$start_transformed$value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(transformed) &lt;- rownames(fit$start_transformed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transform_odeparms(initials, SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' backtransform_odeparms(transformed, SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The case of formation fractions (this is now the default)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.ff &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = list(type = "SFO", to = "m1", sink = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff &lt;- mkinfit(SFO_SFO.ff, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff.s &lt;- summary(fit.ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initials &lt;- c("f_parent_to_m1" = 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformed &lt;- transform_odeparms(initials, SFO_SFO.ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' backtransform_odeparms(transformed, SFO_SFO.ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # And without sink</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.ff.2 &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = list(type = "SFO", to = "m1", sink = FALSE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff.2 &lt;- mkinfit(SFO_SFO.ff.2, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff.2.s &lt;- summary(fit.ff.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.2.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.2.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export transform_odeparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">transform_odeparms &lt;- function(parms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = TRUE, transform_fractions = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need the model specification for the names of the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # variables and the information on the sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec = mkinmod$spec</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up container for transformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms &lt;- numeric(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform initial values for state variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim &lt;- parms[grep("_0$", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[names(state.ini.optim)] &lt;- state.ini.optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Log transformation for rate constants if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k &lt;- parms[grep("^k_", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k__iore &lt;- parms[grep("^k__iore_", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k &lt;- c(k, k__iore)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(k) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">15485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">14379<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[paste0("log_", names(k))] &lt;- log(k)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">1106<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else transparms[names(k)] &lt;- k</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform exponents in IORE models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- parms[grep("^N", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[names(N)] &lt;- N</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Go through state variables and transform formation fractions if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars = names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">41283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f &lt;- parms[grep(paste("^f", box, sep = "_"), names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">41283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">6522<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">5910<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[box]]$sink) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">5908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">5894<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f_name &lt;- paste("f", box, "qlogis", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">5894<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[trans_f_name] &lt;- qlogis(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">14<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f &lt;- ilr(c(f, 1 - sum(f)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">14<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f_names &lt;- paste("f", box, "ilr", 1:length(trans_f), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">14<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[trans_f_names] &lt;- trans_f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f &lt;- ilr(f)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f_names &lt;- paste("f", box, "ilr", 1:length(trans_f), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[trans_f_names] &lt;- trans_f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">612<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[names(f)] &lt;- f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform also FOMC parameters alpha and beta, DFOP and HS rates k1 and k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and HS parameter tb as well as logistic model parameters kmax, k0 and r if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # transformation of rates is requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in c("alpha", "beta", "k1", "k2", "tb", "kmax", "k0", "r")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">204696<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(parms[pname])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">6006<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">6006<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[paste0("log_", pname)] &lt;- log(parms[pname])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">166</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[pname] &lt;- parms[pname]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # DFOP parameter g is treated as a fraction</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(parms["g"])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">1978<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- parms["g"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">1978<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">1978<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms["g_qlogis"] &lt;- qlogis(g)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">177</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms["g"] &lt;- g</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(transparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname transform_odeparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export backtransform_odeparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">backtransform_odeparms &lt;- function(transparms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need the model specification for the names of the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # variables and the information on the sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec = mkinmod$spec</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up container for backtransformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- numeric(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform initial values for state variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim &lt;- transparms[grep("_0$", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(state.ini.optim)] &lt;- state.ini.optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Exponential transformation for rate constants</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k &lt;- transparms[grep("^log_k_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k__iore &lt;- transparms[grep("^log_k__iore_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k = c(trans_k, trans_k__iore)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(trans_k) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">47598103<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_names &lt;- gsub("^log_k", "k", names(trans_k))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">47598103<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[k_names] &lt;- exp(trans_k)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k &lt;- transparms[grep("^k_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(trans_k)] &lt;- trans_k</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k__iore &lt;- transparms[grep("^k__iore_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(trans_k__iore)] &lt;- trans_k__iore</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform exponents in IORE models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- transparms[grep("^N", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(N)] &lt;- N</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Go through state variables and apply inverse transformations to formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars = names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the names as used in the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">97593385<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names = grep(paste("^f", box, sep = "_"), mkinmod$parms, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the formation fraction parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">97593385<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f = transparms[grep(paste("^f", box, sep = "_"), names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">97593385<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(trans_f) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">46632823<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">46588453<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(grepl("qlogis", names(trans_f)))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">232</td>
+ <td class="coverage">46059152<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_tmp &lt;- plogis(trans_f)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">46059152<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[f_names] &lt;- f_tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_tmp &lt;- invilr(trans_f)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[box]]$sink) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">528393<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[f_names] &lt;- f_tmp[1:length(f_tmp)-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[f_names] &lt;- f_tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">44370<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(trans_f)] &lt;- trans_f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform parameters also for FOMC, DFOP, HS and logistic models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in c("alpha", "beta", "k1", "k2", "tb", "kmax", "k0", "r")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">393713712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">393124984<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pname_trans = paste0("log_", pname)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">393124984<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms[pname_trans])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">4306142<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[pname] &lt;- exp(transparms[pname_trans])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">588728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms[pname])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">257</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[pname] &lt;- transparms[pname]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # DFOP parameter g is now transformed using qlogis</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms["g_qlogis"])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">2034008<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g_qlogis &lt;- transparms["g_qlogis"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">2034008<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms["g"] &lt;- plogis(g_qlogis)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In earlier times we used ilr for g, so we keep this around</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms["g_ilr"])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">269</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g_ilr &lt;- transparms["g_ilr"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms["g"] &lt;- invilr(g_ilr)[1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms["g"])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">273</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms["g"] &lt;- transparms["g"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">278</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># vim: set ts=2 sw=2 expandtab:</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/hierarchical_kinetics.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Hierarchical kinetics template</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' R markdown format for setting up hierarchical kinetics based on a template</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' provided with the mkin package. This format is based on [rmarkdown::pdf_document].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Chunk options are adapted. Echoing R code from code chunks and caching are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' turned on per default. character for prepending output from code chunks is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set to the empty string, code tidying is off, figure alignment defaults to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' centering, and positioning of figures is set to "H", which means that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' figures will not move around in the document, but stay where the user</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' includes them.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The latter feature (positioning the figures with "H") depends on the LaTeX</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' package 'float'. In addition, the LaTeX package 'listing' is used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' template for showing model fit summaries in the Appendix. This means that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the LaTeX packages 'float' and 'listing' need to be installed in the TeX</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' distribution used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' On Windows, the easiest way to achieve this (if no TeX distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is present before) is to install the 'tinytex' R package, to run</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'tinytex::install_tinytex()' to get the basic tiny Tex distribution,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and then to run 'tinytex::tlmgr_install(c("float", "listing"))'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inheritParams rmarkdown::pdf_document</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... Arguments to \code{rmarkdown::pdf_document}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return R Markdown output format to pass to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link[rmarkdown:render]{render}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(rmarkdown)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following is now commented out after the relase of v1.2.3 for the generation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # of online docs, as the command creates a directory and opens an editor</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #draft("example_analysis.rmd", template = "hierarchical_kinetics", package = "mkin")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">hierarchical_kinetics &lt;- function(..., keep_tex = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">41</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (getRversion() &lt; "4.1.0")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("You need R with version &gt; 4.1.0 to compile this document")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">44</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!requireNamespace("knitr")) stop("Please install the knitr package to use this template")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">45</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!requireNamespace("rmarkdown")) stop("Please install the rmarkdown package to use this template")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">46</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> knitr::opts_chunk$set(cache = TRUE, comment = "", tidy = FALSE, echo = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">47</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> knitr::opts_chunk$set(fig.align = "center", fig.pos = "H")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">48</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> options(knitr.kable.NA = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">50</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fmt &lt;- rmarkdown::pdf_document(...,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">51</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> keep_tex = keep_tex,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> toc = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">53</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> toc_depth = 3,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> includes = rmarkdown::includes(in_header = "header.tex"),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> extra_dependencies = c("float", "listing", "framed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(fmt)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nlme.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># Code inspired by nlme::nlme.nlsList and R/nlme_fit.R from nlmixr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># We need to assign the degradation function created in nlme.mmkin to an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># environment that is always accessible, also e.g. when evaluation is done by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># testthat or pkgdown. Therefore parent.frame() is not good enough. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># following environment will be in the mkin namespace.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">.nlme_env &lt;- new.env(parent = emptyenv())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme::nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Retrieve a degradation function from the mmkin namespace</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils getFromNamespace</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A function that was likely previously assigned from within</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">get_deg_func &lt;- function() {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">217279<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(get("deg_func", getFromNamespace(".nlme_env", "mkin")))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Create an nlme model for an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This functions sets up a nonlinear mixed effects model for an mmkin row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object. An mmkin row object is essentially a list of mkinfit objects that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' have been obtained by fitting the same model to a list of datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Note that the convergence of the nlme algorithms depends on the quality</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the data. In degradation kinetics, we often only have few datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (e.g. data for few soils) and complicated degradation models, which may</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' make it impossible to obtain convergence with nlme.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param model An [mmkin] row object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data Ignored, data are taken from the mmkin model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fixed Ignored, all degradation parameters fitted in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mmkin model are used as fixed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param random If not specified, no correlations between random effects are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set up for the optimised degradation model parameters. This is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' achieved by using the [nlme::pdDiag] method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param groups See the documentation of nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param start If not specified, mean values of the fitted degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters taken from the mmkin object are used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param correlation See the documentation of nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param weights passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param subset passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param na.action passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param naPattern passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param control passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats na.fail as.formula</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Upon success, a fitted 'nlme.mmkin' object, which is an nlme object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with additional elements. It also inherits from 'mixed.mmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note As the object inherits from [nlme::nlme], there is a wealth of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' methods that will automatically work on 'nlme.mmkin' objects, such as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [nlme::intervals()], [nlme::anova.lme()] and [nlme::coef.lme()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [nlme_function()], [plot.mixed.mmkin], [summary.nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) subset(x$data[c("name", "time", "value")], name == "parent"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "DFOP"), ds, quiet = TRUE, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo &lt;- nlme(f["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop &lt;- nlme(f["DFOP", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_nlme_sfo, f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_2 &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) x$data[c("name", "time", "value")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_sfo_sfo &lt;- mkinmod(parent = mkinsub("SFO", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), use_of_ff = "min", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_sfo_sfo_ff &lt;- mkinmod(parent = mkinsub("SFO", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), use_of_ff = "max", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_2 &lt;- mmkin(list("SFO-SFO" = m_sfo_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "SFO-SFO-ff" = m_sfo_sfo_ff,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "DFOP-SFO" = m_dfop_sfo),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo_sfo &lt;- nlme(f_2["SFO-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme_sfo_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # With formation fractions this does not coverge with defaults</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_nlme_sfo_sfo_ff &lt;- nlme(f_2["SFO-SFO-ff", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #plot(f_nlme_sfo_sfo_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For the following, we need to increase pnlsMaxIter and the tolerance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # to get convergence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop_sfo &lt;- nlme(f_2["DFOP-SFO", ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' control = list(pnlsMaxIter = 120, tolerance = 5e-4))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(f_nlme_sfo_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(f_nlme_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (length(findFunction("varConstProp")) &gt; 0) { # tc error model for nlme available</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Attempts to fit metabolite kinetics with the tc error model are possible,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # but need tweeking of control values and sometimes do not converge</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_tc &lt;- mmkin(c("SFO", "DFOP"), ds, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo_tc &lt;- nlme(f_tc["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop_tc &lt;- nlme(f_tc["DFOP", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f_nlme_sfo, f_nlme_sfo_tc, f_nlme_dfop, f_nlme_dfop_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_nlme_dfop_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_2_obs &lt;- update(f_2, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo_sfo_obs &lt;- nlme(f_2_obs["SFO-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_nlme_sfo_sfo_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop_sfo_obs &lt;- nlme(f_2_obs["DFOP-SFO", ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' control = list(pnlsMaxIter = 120, tolerance = 5e-4))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_2_tc &lt;- update(f_2, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_nlme_sfo_sfo_tc &lt;- nlme(f_2_tc["SFO-SFO", ]) # No convergence with 50 iterations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_nlme_dfop_sfo_tc &lt;- nlme(f_2_tc["DFOP-SFO", ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # control = list(pnlsMaxIter = 120, tolerance = 5e-4)) # Error in X[, fmap[[nm]]] &lt;- gradnm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_nlme_dfop_sfo, f_nlme_dfop_sfo_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme.mmkin &lt;- function(model, data = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed = lapply(as.list(names(mean_degparms(model))),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(el) eval(parse(text = paste(el, 1, sep = "~")))),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random = pdDiag(fixed),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> groups,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start = mean_degparms(model, random = TRUE, test_log_parms = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> correlation = NULL, weights = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> subset, method = c("ML", "REML"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.action = na.fail, naPattern,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = list(), verbose= FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">142</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(model) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall &lt;- as.list(match.call())[-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Warn in case arguments were used that are overriden</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(!is.na(match(names(thisCall),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c("data"))))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">149</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("'nlme.mmkin' will redefine 'data'")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get native symbol info for speed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (model[[1]]$solution_type == "deSolve" &amp; !is.null(model[[1]]$mkinmod$cf)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The mkinmod stored in the first fit will be used by nlme</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model[[1]]$mkinmod$symbols &lt;- deSolve::checkDLL(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dllname = model[[1]]$mkinmod$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_func &lt;- nlme_function(model)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("deg_func", deg_func, getFromNamespace(".nlme_env", "mkin"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For the formula, get the degradation function from the mkin namespace</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> this_model_text &lt;- paste0("value ~ mkin::get_deg_func()(",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(names(formals(deg_func)), collapse = ", "), ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> this_model &lt;- as.formula(this_model_text)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["model"]] &lt;- this_model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["data"]] &lt;- nlme_data(model)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["start"]] &lt;- start</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["fixed"]] &lt;- fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["random"]] &lt;- random</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model &lt;- model[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (missing(weights)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["weights"]] &lt;- switch(error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = varIdent(form = ~ 1 | name),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = varConstProp())</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma &lt;- switch(error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control &lt;- thisCall[["control"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">928<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control$sigma = 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">928<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["control"]] &lt;- control</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time(val &lt;- do.call("nlme.formula", thisCall))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$time &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinmod &lt;- model[[1]]$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Don't return addresses that will become invalid</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinmod$symbols &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$data &lt;- thisCall[["data"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mmkin &lt;- model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">824<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.list(start)) val$mean_dp_start &lt;- start$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else val$mean_dp_start &lt;- start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$transform_rates &lt;- model[[1]]$transform_rates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$transform_fractions &lt;- model[[1]]$transform_fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$solution_type &lt;- model[[1]]$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$err_mode &lt;- error_model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$bparms.optim &lt;- backtransform_odeparms(val$coefficients$fixed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = val$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = val$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$bparms.fixed &lt;- model[[1]]$bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$date.fit &lt;- date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$nlmeversion &lt;- as.character(utils::packageVersion("nlme"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinversion &lt;- as.character(utils::packageVersion("mkin"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$Rversion &lt;- paste(R.version$major, R.version$minor, sep=".")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(val) &lt;- c("nlme.mmkin", "mixed.mmkin", "nlme", "lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(val)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">228</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An nlme.mmkin object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.nlme.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat( "Kinetic nonlinear mixed-effects model fit by " )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat( if(x$method == "REML") "REML\n" else "maximum likelihood\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStructural model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- x$mmkin[[1]]$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nLog-", if(x$method == "REML") "restricted-" else "",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "likelihood: ", format(x$logLik, digits = digits), "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixF &lt;- x$call$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed effects:\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deparse(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(inherits(fixF, "formula") || is.call(fixF) || is.name(fixF))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$call$fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lapply(fixF, function(el) as.name(deparse(el)))), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(fixef(x), digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(summary(x$modelStruct), sigma = x$sigma, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An nlme.mmkin object to update</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... Update specifications passed to update.nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.nlme.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- NextMethod()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$mmkin &lt;- object$mmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("nlme.mmkin", "nlme", "lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinresplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("variable", "residual"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to plot residuals stored in an mkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function plots the residuals for the specified subset of the observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables from an mkinfit object. A combined plot of the fitted model and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the residuals can be obtained using \code{\link{plot.mkinfit}} using the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument \code{show_residuals = TRUE}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fit represented in an \code{\link{mkinfit}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param obs_vars A character vector of names of the observed variables for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which residuals should be plotted. Defaults to all observed variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlim plot range in x direction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlab Label for the x axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized by dividing by the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' standard deviation given by the error model of the fit?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxabs Maximum absolute value of the residuals. This is used for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' scaling of the y axis and defaults to "auto".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be plotted?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Where should the legend be placed? Default is "topright". Will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be passed on to \code{\link{legend}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_obs Colors for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_obs Symbols to be used for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param frame Should a frame be drawn around the plots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots further arguments passed to \code{\link{plot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Nothing is returned by this function, as it is called for its side</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effect, namely to produce a plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke and Katrin Lindenberger</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{mkinplot}}, for a way to plot the data and the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lines of the mkinfit object, and \code{\link{plot_res}} for a function</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' combining the plot of the fit and the residual plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(model, FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinresplot(fit, "m1")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinresplot &lt;- function (object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(object$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = c(0, 1.1 * max(object$data$time)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Time", ylab = ifelse(standardized, "Standardized residual", "Residual"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxabs = "auto", legend = TRUE, lpos = "topright",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs = "auto", pch_obs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars_all &lt;- as.character(unique(object$data$variable))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 0){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- intersect(obs_vars_all, obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else obs_vars &lt;- obs_vars_all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (standardized) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">59</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_col &lt;- "standardized"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">60</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[[res_col]] &lt;- residuals(object, standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_col &lt;- "residual"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- subset(object$data, variable %in% obs_vars)[res_col]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (maxabs == "auto") maxabs = max(abs(res), na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set colors and symbols</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (col_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pch_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(col_obs) &lt;- names(pch_obs) &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n", frame = frame,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = ylab,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(-1.2 * maxabs, 1.2 * maxabs), ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for(obs_var in obs_vars){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">1298<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals_plot &lt;- subset(object$data, variable == obs_var, c("time", res_col))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">1298<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(residuals_plot, pch = pch_obs[obs_var], col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (legend == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">91</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), legend = obs_vars,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">92</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[obs_vars], pch = pch_obs[obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/plot.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot model fits (observed and fitted) and the residuals for a row or column</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of an mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' When x is a row selected from an mmkin object (\code{\link{[.mmkin}}), the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' same model fitted for at least one dataset is shown. When it is a column,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the fit of at least one model to the same dataset is shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the current plot device is a \code{\link[tikzDevice]{tikz}} device, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' latex is being used for the formatting of the chi2 error level.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An object of class \code{\link{mmkin}}, with either one row or one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main The main title placed on the outer margin of the plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legends An index for the fits for which legends should be shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param resplot Should the residuals plotted against time, using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinresplot}}, or as squared residuals against predicted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values, with the error model, using \code{\link{mkinerrplot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized? This option</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is passed to \code{\link{mkinresplot}}, it only takes effect if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' `resplot = "time"`.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_errmin Should the chi2 error level be shown on top of the plots</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to the left?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmin_var The variable for which the FOCUS chi2 error value should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmin_digits The number of significant digits for rounding the FOCUS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' chi2 error percentage.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cex Passed to the plot functions and \code{\link{mtext}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.middle The relative height of the middle plot, if more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' than two rows of plots are shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ymax Maximum y axis value for \code{\link{plot.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{plot.mkinfit}} and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinresplot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Only use one core not to offend CRAN checks</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(c("FOMC", "HS"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS B" = FOCUS_2006_B, "FOCUS C" = FOCUS_2006_C), # named list for titles</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cores = 1, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits[, "FOCUS C"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", ], show_errmin = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can also plot a single fit, if we like the way plot.mmkin works, but then the plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # height should be smaller than the plot width (this is not possible for the html pages</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # generated by pkgdown, as far as I know).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", "FOCUS C"]) # same as plot(fits[1, 2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show the error models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", ], resplot = "errmod")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.mmkin &lt;- function(x, main = "auto", legends = 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot = c("time", "errmod"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = "Residue",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errmin = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin_var = "All data", errmin_digits = 3,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cex = 0.7, rel.height.middle = 0.9,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ymax = "auto", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.m &lt;- nrow(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.d &lt;- ncol(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot &lt;- match.arg(resplot)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We can handle either a row (different models, same dataset)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # or a column (same model, different datasets)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">77</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.m &gt; 1 &amp; n.d &gt; 1) stop("Please select fits either for one model or for one dataset")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.m == 1 &amp; n.d == 1) loop_over = "none"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.m &gt; 1) loop_over &lt;- "models"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.d &gt; 1) loop_over &lt;- "datasets"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- length(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set the main plot titles from the names of the models or the datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Will be integer indexes if no other names are present in the mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (main == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> main = switch(loop_over,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> none = paste(rownames(x), colnames(x)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> models = colnames(x),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> datasets = rownames(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set relative plot heights, so the first and the last plot are the norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and the middle plots (if n.fits &gt;2) are smaller by rel.height.middle</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.heights &lt;- if (n.fits &gt; 2) c(1, rep(rel.height.middle, n.fits - 2), 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else rep(1, n.fits)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(matrix(1:(2 * n.fits), n.fits, 2, byrow = TRUE), heights = rel.heights)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(cex = cex)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i.fit in 1:n.fits) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for top row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce bottom margin by 2.1 - hides x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i.fit == 1 &amp; n.fits &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 4.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for middle rows of plots, if any</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i.fit &gt; 1 &amp; i.fit &lt; n.fits) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce top margin by 2 after the first plot as we have no main title,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # reduced plot height, therefore we need rel.height.middle in the layout</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for bottom row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i.fit == n.fits &amp; n.fits &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Restore bottom margin for last plot to show x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5.1, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- x[[i.fit]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ymax == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(fit, legend = legends == i.fit, ylab = ylab, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">125</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(fit, legend = legends == i.fit, ylim = c(0, ymax), ylab = ylab, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> title(main, outer = TRUE, line = -2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_name &lt;- switch(loop_over,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> models = rownames(x)[i.fit],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> datasets = colnames(x)[i.fit],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> none = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_errmin) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2 &lt;- signif(100 * mkinerrmin(fit)[errmin_var, "err.min"], errmin_digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use LateX if the current plotting device is tikz</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (names(dev.cur()) == "tikz output") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">140</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- paste0(fit_name, " $\\chi^2$ error level = ", chi2, "\\%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_perc &lt;- paste0(chi2, "%")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- bquote(.(fit_name) ~ chi^2 ~ "error level" == .(chi2_perc))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(chi2_text, cex = cex, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">147</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(fit_name, cex = cex, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (resplot == "time") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinresplot(fit, legend = FALSE, standardized = standardized, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">153</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinerrplot(fit, legend = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(paste(fit_name, "residuals"), cex = cex, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Shows status information on the [mkinfit] objects contained in the object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and gives an overview of ill-defined parameters calculated by [illparms].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class \code{summary.mmkin}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level confidence level for testing parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("SFO", "FOMC"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS C" = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.mmkin &lt;- function(object, conf.level = 0.95, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object[[1, 1]]$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = attr(object, "time"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> illparms = illparms(object),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> status = status(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ans) &lt;- c("summary.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$err_mod)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Error model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Fitted in", x$time[["elapsed"]], "s\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStatus:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$status)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x$illparms != "")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nIll-defined parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$illparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/read_spreadsheet.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Read datasets and relevant meta information from a spreadsheet file</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function imports one dataset from each sheet of a spreadsheet file.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' These sheets are selected based on the contents of a sheet 'Datasets', with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a column called 'Dataset Number', containing numbers identifying the dataset</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sheets to be read in. In the second column there must be a grouping</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable, which will often be named 'Soil'. Optionally, time normalization</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' factors can be given in columns named 'Temperature' and 'Moisture'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' There must be a sheet 'Compounds', with columns 'Name' and 'Acronym'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The first row read after the header read in from this sheet is assumed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to contain name and acronym of the parent compound.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The dataset sheets should be named using the dataset numbers read in from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the 'Datasets' sheet, i.e. '1', '2', ... . In each dataset sheet, the name</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the observed variable (e.g. the acronym of the parent compound or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' one of its transformation products) should be in the first column,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the time values should be in the second colum, and the observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the third column.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In case relevant covariate data are available, they should be given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in a sheet 'Covariates', containing one line for each value of the grouping</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable specified in 'Datasets'. These values should be in the first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column and the column must have the same name as the second column in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'Datasets'. Covariates will be read in from columns four and higher.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Their names should preferably not contain special characters like spaces,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' so they can be easily used for specifying covariate models.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A similar data structure is defined as the R6 class [mkindsg], but</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is probably more complicated to use.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param path Absolute or relative path to the spreadsheet file</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param valid_datasets Optional numeric index of the valid datasets, default is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to use all datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parent_only Should only the parent data be used?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param normalize Should the time scale be normalized using temperature</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and moisture normalisation factors in the sheet 'Datasets'?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">read_spreadsheet &lt;- function(path, valid_datasets = "all",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_only = FALSE, normalize = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!requireNamespace("readxl", quietly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">43</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please install the readxl package to use this function")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Read the compound table</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> compounds &lt;- readxl::read_excel(path, sheet = "Compounds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent &lt;- compounds[1, ]$Acronym</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Read in meta information</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_meta &lt;- readxl::read_excel(path, sheet = "Datasets")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_meta["Dataset Number"] &lt;- as.character(ds_meta[["Dataset Number"]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Select valid datasets</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (valid_datasets[1] == "all") valid_datasets &lt;- 1:nrow(ds_meta)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_numbers_valid &lt;- ds_meta[valid_datasets, ]$`Dataset Number`</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> grouping_factor &lt;- names(ds_meta[2]) # Often "Soil"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Read in valid datasets</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_raw &lt;- lapply(ds_numbers_valid,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(dsn) readxl::read_excel(path, sheet = as.character(dsn)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Make data frames compatible with mmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_tmp &lt;- lapply(ds_raw, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_ret &lt;- x[1:3] |&gt;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rlang::set_names(c("name", "time", "value")) |&gt;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform(value = as.numeric(value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_tmp) &lt;- ds_numbers_valid</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Normalize with temperature and moisture correction factors</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (normalize) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_norm &lt;- lapply(ds_numbers_valid, function(ds_number) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_corr &lt;- as.numeric(ds_meta[ds_number, c("Temperature", "Moisture")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_corr &lt;- ds_tmp[[ds_number]] |&gt;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform(time = time * f_corr[1] * f_corr[2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ds_corr)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_norm &lt;- ds_tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_norm) &lt;- ds_numbers_valid</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Select parent data only if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_only) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">85</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_norm &lt;- lapply(ds_norm, function(x) subset(x, name == parent))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">86</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> compounds &lt;- compounds[1, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create a single long table to combine datasets with the same group name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_all &lt;- vctrs::vec_rbind(!!!ds_norm, .names_to = "Dataset Number")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_all_group &lt;- merge(ds_all, ds_meta[c("Dataset Number", grouping_factor)])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> groups &lt;- unique(ds_meta[valid_datasets, ][[grouping_factor]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds &lt;- lapply(groups, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">819<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- ds_all_group[ds_all_group[[grouping_factor]] == x, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">819<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret[c("name", "time", "value")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds) &lt;- groups</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates_raw &lt;- readxl::read_excel(path, sheet = "Covariates")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates &lt;- as.data.frame(covariates_raw[4:ncol(covariates_raw)])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nocov &lt;- setdiff(groups, covariates_raw[[1]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(nocov) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">106</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("Did not find covariate data for ", paste(nocov, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">107</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("Not returning covariate data")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">108</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ds, "covariates") &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariates) &lt;- covariates_raw[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates &lt;- covariates[which(colnames(covariates) != "Remarks")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Attach covariate data if available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ds, "covariates") &lt;- covariates[groups, , drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Attach the compound list to support automatic model building</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ds, "compounds") &lt;- as.data.frame(compounds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/CAKE_export.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Export a list of datasets format to a CAKE study file</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In addition to the datasets, the pathways in the degradation model can be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' specified as well.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ds A named list of datasets in long format as compatible with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param map A character vector with CAKE compartment names (Parent, A1, ...),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' named with the names used in the list of datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param links An optional character vector of target compartments, named with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the names of the source compartments. In order to make this easier, the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names are used as in the datasets supplied.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param filename Where to write the result. Should end in .csf in order to be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compatible with CAKE.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param path An optional path to the output file.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param overwrite If TRUE, existing files are overwritten.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param study The name of the study.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param description An optional description.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time_unit The time unit for the residue data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param res_unit The unit used for the residues.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param comment An optional comment.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param date The date of file creation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param optimiser Can be OLS or IRLS.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils write.table</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">CAKE_export &lt;- function(ds, map = c(parent = "Parent"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> links = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> filename = "CAKE_export.csf", path = ".", overwrite = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study = "Degradinol aerobic soil degradation",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> description = "",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time_unit = "days",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_unit = "% AR",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> comment = "",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date = Sys.Date(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> optimiser = "IRLS")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> file &lt;- file.path(path, filename)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (file.exists(file) &amp; !overwrite) stop(file, " already exists, stopping")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> csf &lt;- file(file, encoding = "latin1", open = "w+")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(close(csf))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> CAKE_compartments = c("Parent", "A1", "A2", "A3", "B1", "B2", "C1")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(map %in% CAKE_compartments)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The elements of map have to be CAKE compartment names")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add &lt;- function(x) cat(paste0(x, "\r\n"), file = csf, append = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add0 &lt;- function(x) cat(x, file = csf, append = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[FileInfo]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("CAKE-Version: 3.4 (Release)")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Name:", study))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Description:", description))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("MeasurementUnits:", res_unit))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("TimeUnits:", time_unit))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Comments:", comment))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Date:", date))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Optimiser:", optimiser))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[Data]")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(ds)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("NewDataSet:", names(ds)[i]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d &lt;- mkin_long_to_wide(ds[[i]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(d) &lt;- c("Time", map[names(d)[-1]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> write.table(d, csf,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sep = "\t", col.names = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> quote = FALSE, eol = "\r\n", na = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(links)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[Model]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0("ParentCompartment: Parent\t", names(map)[1], "\t", names(map)[1]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (name in names(map)[-1]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0("Compartment: ", map[name], "\t", name, "\t", name))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (li in names(links)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0("Link: ", map[li], "\t", map[links[li]], "\t0.5\t0\t1\tFree\tExplicit"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[ComponentNames]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (name in names(map)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0(map[name], ":", name))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary_listing.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Display the output of a summary function according to the output format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function is intended for use in a R markdown code chunk with the chunk</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' option `results = "asis"`.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The object for which the summary is to be listed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param caption An optional caption</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param label An optional label, ignored in html output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param clearpage Should a new page be started after the listing? Ignored in html output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary_listing &lt;- function(object, caption = NULL, label = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> clearpage = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">13</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (knitr::is_latex_output()) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">14</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tex_listing(object = object, caption = caption, label = label,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">15</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> clearpage = clearpage)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">17</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (knitr::is_html_output()) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">18</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> html_listing(object = object, caption = caption)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary_listing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">tex_listing &lt;- function(object, caption = NULL, label = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> clearpage = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">26</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">27</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\begin{listing}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">28</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(caption)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">29</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\caption{", caption, "}", "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">31</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(label)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">32</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\caption{", label, "}", "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">34</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\begin{snugshade}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">35</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\scriptsize", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">36</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\begin{verbatim}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">37</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(capture.output(suppressWarnings(summary(object))), sep = "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">38</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">39</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\end{verbatim}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">40</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\end{snugshade}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">41</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\end{listing}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (clearpage) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">43</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\clearpage", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary_listing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">html_listing &lt;- function(object, caption = NULL) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">50</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">51</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(caption)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;caption&gt;", caption, "&lt;/caption&gt;", "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;pre&gt;&lt;code&gt;\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(capture.output(suppressWarnings(summary(object))), sep = "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">57</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;/pre&gt;&lt;/code&gt;\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/multistart.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Perform a hierarchical model fit with multiple starting values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The purpose of this method is to check if a certain algorithm for fitting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nonlinear hierarchical models (also known as nonlinear mixed-effects models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' will reliably yield results that are sufficiently similar to each other, if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' started with a certain range of reasonable starting parameters. It is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' inspired by the article on practical identifiabiliy in the frame of nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mixed-effects models by Duchesne et al (2021).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The fit object to work with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param n How many different combinations of starting parameters should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' used?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores How many fits should be run in parallel (only on posix platforms)?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cluster A cluster as returned by [parallel::makeCluster] to be used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parallel execution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to the update function.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The multistart object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list of [saem.mmkin] objects, with class attributes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'multistart.saem.mmkin' and 'multistart'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [parplot], [llhist]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Duchesne R, Guillemin A, Gandrillon O, Crauste F. Practical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' identifiability in the frame of nonlinear mixed effects models: the example</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the in vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' doi: 10.1186/s12859-021-04373-4.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(mkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dmta_ds &lt;- lapply(1:7, function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i &lt;- dimethenamid_2018$ds[[i]]$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i[ds_i$name == "DMTAP", "name"] &lt;- "DMTA"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i$time &lt;- ds_i$time * dimethenamid_2018$f_time_norm[i]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(dmta_ds) &lt;- sapply(dimethenamid_2018$ds, function(ds) ds$title)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dmta_ds[["Elliot"]] &lt;- rbind(dmta_ds[["Elliot 1"]], dmta_ds[["Elliot 2"]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dmta_ds[["Elliot 1"]] &lt;- dmta_ds[["Elliot 2"]] &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin("DFOP", dmta_ds, error_model = "tc", cores = 7, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_full &lt;- saem(f_mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_full_multi &lt;- multistart(f_saem_full, n = 16, cores = 16)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parplot(f_saem_full_multi, lpos = "topleft")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_full)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_reduced &lt;- update(f_saem_full, no_random_effect = "log_k2")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_reduced)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # On Windows, we need to create a PSOCK cluster first and refer to it</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # in the call to multistart()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(parallel)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cl &lt;- makePSOCKcluster(12)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_reduced_multi &lt;- multistart(f_saem_reduced, n = 16, cluster = cl)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parplot(f_saem_reduced_multi, lpos = "topright", ylim = c(0.5, 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' stopCluster(cl)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">multistart &lt;- function(object, n = 50,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = if (Sys.info()["sysname"] == "Windows") 1 else parallel::detectCores(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cluster = NULL, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("multistart", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">multistart.saem.mmkin &lt;- function(object, n = 50, cores = 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cluster = NULL, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">68</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n &lt;= 1) stop("Please specify an n of at least 2")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_object &lt;- object$mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_parms &lt;- parms(mmkin_object, errparms = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformed = object$transformations == "mkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_parms &lt;- apply(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_parms, 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(x) stats::runif(n, min(x), max(x)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call &lt;- object$call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call[[1]] &lt;- saem</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call[[2]] &lt;- mmkin_object</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i_startparms &lt;- which(names(saem_call) == "degparms_start")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_function &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> new_startparms &lt;- str2lang(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0(capture.output(dput(start_parms[x, ])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> collapse = ""))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(i_startparms) == 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call &lt;- c(as.list(saem_call), degparms_start = new_startparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call &lt;- as.call(saem_call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">93</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call[i_startparms] &lt;- new_startparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- eval(saem_call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(cluster)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- parallel::mclapply(1:n, fit_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mc.cores = cores, mc.preschedule = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">105</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- parallel::parLapplyLB(cluster, 1:n, fit_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "orig") &lt;- object</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "start_parms") &lt;- start_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "call") &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("multistart.saem.mmkin", "multistart")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.multistart &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">116</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">118</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">119</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">120</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">122</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">125</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">127</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.multistart"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">128</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.multistart.saem.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">137</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$so, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">704<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.multistart"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.status.multistart &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(table(x, dnn = NULL))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "OK")) cat("OK: Fit terminated successfully\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">153</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "E")) cat("E: Error\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.multistart &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;multistart&gt; object with", length(x), "fits:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(status(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">best &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("best", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The object with the highest likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">best.default &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object[[which.best(object)]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The index of the object with the highest likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">which.best &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("which.best", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">which.best.default &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llfunc &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">2528<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- try(logLik(object))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">192</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(ret, "try-error")) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">2528<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- sapply(object, llfunc)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(which.max(ll))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.multistart &lt;- function(object, ..., evaluate = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">201</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- attr(object, "call")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For some reason we get multistart.saem.mmkin in call[[1]] when using multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # from the loaded package so we need to fix this so we do not have to export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # multistart.saem.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">205</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[1]] &lt;- multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">207</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">209</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">210</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">213</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">214</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">217</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">218</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">219</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">220</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">222</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">223</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/lrtest.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom lmtest lrtest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">lmtest::lrtest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Likelihood ratio test for mkinfit models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Compare two mkinfit models based on their likelihood. If two fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinfit objects are given as arguments, it is checked if they have been</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted to the same data. It is the responsibility of the user to make sure</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that the models are nested, i.e. one of them has less degrees of freedom</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and can be expressed by fixing the parameters of the other.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Alternatively, an argument to mkinfit can be given which is then passed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to \code{\link{update.mkinfit}} to obtain the alternative model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The comparison is then made by the \code{\link[lmtest]{lrtest.default}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method from the lmtest package. The model with the higher number of fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters (alternative hypothesis) is listed first, then the model with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lower number of fitted parameters (null hypothesis).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats logLik update</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An \code{\link{mkinfit}} object, or an \code{\link{mmkin}} column</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object containing two fits to the same data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object_2 Optionally, another mkinfit object fitted to the same data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Argument to \code{\link{mkinfit}}, passed to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{update.mkinfit}} for creating the alternative fitted object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data &lt;- subset(synthetic_data_for_UBA_2014[[12]]$data, name == "parent")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_fit &lt;- mkinfit("SFO", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_fit &lt;- mkinfit("DFOP", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(dfop_fit, sfo_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(sfo_fit, dfop_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following two examples are commented out as they fail during</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # generation of the static help pages by pkgdown</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #lrtest(dfop_fit, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #lrtest(dfop_fit, fixed_parms = c(k2 = 0))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # However, this equivalent syntax also works for static help pages</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(dfop_fit, update(dfop_fit, error_model = "tc"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(dfop_fit, update(dfop_fit, fixed_parms = c(k2 = 0)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">lrtest.mkinfit &lt;- function(object, object_2 = NULL, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name_function &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(x$mkinmod$name, "with error model", x$err_mod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$bparms.fixed) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(object_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "and fixed parameter(s)",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(names(x$bparms.fixed), collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object_name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object_2)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2 &lt;- update(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object &lt;- object$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object_2 &lt;- object_2$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(data_object, data_object_2)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("It seems that the mkinfit objects have not been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (attr(logLik(object), "df") &gt; attr(logLik(object_2), "df")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lmtest::lrtest.default(object, object_2, name = name_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lmtest::lrtest.default(object_2, object, name = name_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname lrtest.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">lrtest.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">76</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) != 2 | ncol(object) &gt; 1) stop("Only works for a column containing two mkinfit objects")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">77</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1, 1]]$mkinmod$name &lt;- rownames(object)[1]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[2, 1]]$mkinmod$name &lt;- rownames(object)[2]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lrtest(object[[1, 1]], object[[2, 1]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/aw.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate Akaike weights for model averaging</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Akaike weights are calculated based on the relative</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' expected Kullback-Leibler information as specified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' by Burnham and Anderson (2004).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [mmkin] column object, containing two or more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinfit] models that have been fitted to the same data,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' or an mkinfit object. In the latter case, further mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects fitted to the same data should be specified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as dots arguments.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used in the method for [mmkin] column objects,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' further [mkinfit] objects in the method for mkinfit objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Burnham KP and Anderson DR (2004) Multimodel</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Inference: Understanding AIC and BIC in Model Selection.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' *Sociological Methods &amp; Research* **33**(2) 261-304</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @md</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_sfo &lt;- mkinfit("SFO", FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_dfop &lt;- mkinfit("DFOP", FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw_sfo_dfop &lt;- aw(f_sfo, f_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sum(aw_sfo_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw_sfo_dfop # SFO gets more weight as it has less parameters and a similar fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "FOMC", "DFOP"), list("FOCUS D" = FOCUS_2006_D), cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sum(aw(f))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw(f[c("SFO", "DFOP")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">1482<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw &lt;- function(object, ...) UseMethod("aw")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">.aw &lt;- function(all_objects) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> AIC_all &lt;- sapply(all_objects, AIC)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> delta_i &lt;- AIC_all - min(AIC_all)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> denom &lt;- sum(exp(-delta_i/2))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> w_i &lt;- exp(-delta_i/2) / denom</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(w_i)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.mkinfit &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oo &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object &lt;- object$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(oo)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(oo[[i]], "mkinfit")) stop("Please supply only mkinfit objects")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_other_object &lt;- oo[[i]]$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(data_object, data_other_object)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("It seems that the mkinfit objects have not all been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_objects &lt;- list(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> .aw(all_objects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ncol(object) &gt; 1) stop("Please supply an mmkin column object")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> do.call(aw, object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.mixed.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">67</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oo &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">68</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object &lt;- object$data[c("ds", "name", "time", "value")]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">69</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(oo)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">70</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(oo[[i]], "mixed.mmkin")) stop("Please supply objects inheriting from mixed.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">71</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_other_object &lt;- oo[[i]]$data[c("ds", "name", "time", "value")]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">72</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(data_object, data_other_object)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">73</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("It seems that the mixed.mmkin objects have not all been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">76</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_objects &lt;- list(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">77</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> .aw(all_objects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.multistart &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">83</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> do.call(aw, object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mean_degparms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate mean degradation parameters for an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return If random is FALSE (default), a named vector containing mean values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the fitted degradation model parameters. If random is TRUE, a list with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fixed and random effects, in the format required by the start argument of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nlme for the case of a single grouping variable ds.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mmkin row object containing several fits of the same model to different datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param random Should a list with fixed and random effects be returned?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_log_parms If TRUE, log parameters are only considered in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the mean calculations if their untransformed counterparts (most likely</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rate constants) pass the t-test for significant difference from zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level Possibility to adjust the required confidence level</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parameter that are tested if requested by 'test_log_parms'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param default_log_parms If set to a numeric value, this is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as a default value for the tested log parameters that failed the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' t-test.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mean_degparms &lt;- function(object, random = FALSE, test_log_parms = FALSE, conf.level = 0.6,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> default_log_parms = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">21</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans &lt;- sapply(object, parms, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (test_log_parms) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_dim &lt;- dim(parm_mat_trans)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_dimnames &lt;- dimnames(parm_mat_trans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_parm_trans_names &lt;- grep("^log_", rownames(parm_mat_trans), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_parm_names &lt;- gsub("^log_", "", log_parm_trans_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_test_back_OK &lt;- matrix(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sapply(object, function(o) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">49860<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> suppressWarnings(summary(o)$bpar[log_parm_names, "Pr(&gt;t)"] &lt; (1 - conf.level))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }), nrow = length(log_parm_names))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(t_test_back_OK) &lt;- log_parm_trans_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans_OK &lt;- parm_mat_trans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (trans_parm in log_parm_trans_names) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">9398<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans_OK[trans_parm, ] &lt;- ifelse(t_test_back_OK[trans_parm, ],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">9398<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans[trans_parm, ], log(default_log_parms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">2603<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans_OK &lt;- parm_mat_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean_degparm_names &lt;- setdiff(rownames(parm_mat_trans), names(object[[1]]$errparms))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_mat_trans &lt;- parm_mat_trans[mean_degparm_names, , drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_mat_trans_OK &lt;- parm_mat_trans_OK[mean_degparm_names, , drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # fixed in the sense of fixed effects, as this function was</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # written to supply starting parameters for nlme</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed &lt;- apply(degparm_mat_trans_OK, 1, mean, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (random) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random &lt;- t(apply(degparm_mat_trans[mean_degparm_names, , drop = FALSE], 2, function(column) column - fixed))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If we only have one parameter, apply returns a vector so we get a single row</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(degparm_mat_trans) == 1) random &lt;- t(random)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(random) &lt;- levels(nlme_data(object)$ds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For nlmixr we can specify starting values for standard deviations eta, and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # we ignore uncertain parameters if test_log_parms is FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> eta &lt;- apply(degparm_mat_trans_OK, 1, stats::sd, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(fixed = fixed, random = list(ds = random), eta = eta))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">4949<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/ilr.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># This file is part of the R package mkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># mkin is free software: you can redistribute it and/or modify it under the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># terms of the GNU General Public License as published by the Free Software</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># Foundation, either version 3 of the License, or (at your option) any later</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># version.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># This program is distributed in the hope that it will be useful, but WITHOUT</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># details.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># You should have received a copy of the GNU General Public License along with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># this program. If not, see &lt;http://www.gnu.org/licenses/&gt;</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to perform isometric log-ratio transformation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This implementation is a special case of the class of isometric log-ratio</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases ilr invilr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x A numeric vector. Naturally, the forward transformation is only</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sensible for vectors with all elements being greater than zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The result of the forward or backward transformation. The returned</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' components always sum to 1 for the case of the inverse log-ratio</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author René Lehmann and Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso Another implementation can be found in R package</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{robCompositions}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Peter Filzmoser, Karel Hron (2008) Outlier Detection for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Compositional Data Using Robust Methods. Math Geosci 40 233-248</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords manip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Order matters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(0.1, 1, 10))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(10, 1, 0.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Equal entries give ilr transformations with zeros as elements</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(3, 3, 3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Almost equal entries give small numbers</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(0.3, 0.4, 0.3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Only the ratio between the numbers counts, not their sum</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(ilr(c(0.7, 0.29, 0.01)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(ilr(2.1 * c(0.7, 0.29, 0.01)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Inverse transformation of larger numbers gives unequal elements</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(-10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(c(-10, 0))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The sum of the elements of the inverse ilr is 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sum(invilr(c(-10, 0)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This is why we do not need all elements of the inverse transformation to go back:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a &lt;- c(0.1, 0.3, 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' b &lt;- invilr(a)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' length(b) # Four elements</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(b[1:3], 1 - sum(b[1:3]))) # Gives c(0.1, 0.3, 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">ilr &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:(length(x) - 1)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">44<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z[i] &lt;- sqrt(i/(i+1)) * log((prod(x[1:i]))^(1/i) / x[i+1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(z)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname ilr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">invilr&lt;-function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> D &lt;- length(x) + 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z &lt;- c(x, 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y &lt;- rep(0, D)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> s &lt;- sqrt(1:D*2:(D+1))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> q &lt;- z/s</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y[1] &lt;- sum(q[1:D])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 2:D) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">1585969<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y[i] &lt;- sum(q[i:D]) - sqrt((i-1)/i) * z[i-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:D) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">2115270<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z[i] &lt;- exp(y[i])/sum(exp(y))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Work around a numerical problem with NaN values returned by the above</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Only works if there is only one NaN value: replace it with 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # if the sum of the other components is &lt; 1e-10</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sum(is.na(z)) == 1 &amp;&amp; sum(z[!is.na(z)]) &lt; 1e-10)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">86</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z = ifelse(is.na(z), 1, z)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(z)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/max_twa_parent.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to calculate maximum time weighted average concentrations from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic models fitted with mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function calculates maximum moving window time weighted average</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' concentrations (TWAs) for kinetic models fitted with \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Currently, only calculations for the parent are implemented for the SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOMC, DFOP and HS models, using the analytical formulas given in the PEC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' soil section of the FOCUS guidance.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases max_twa_parent max_twa_sfo max_twa_fomc max_twa_dfop max_twa_hs</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit An object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param windows The width of the time windows for which the TWAs should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' calculated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param M0 The initial concentration for which the maximum time weighted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' average over the decline curve should be calculated. The default is to use</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a value of 1, which means that a relative maximum time weighted average</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' factor (f_twa) is calculated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k The rate constant in the case of SFO kinetics.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param t The width of the time window.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha Parameter of the FOMC model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param beta Parameter of the FOMC model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k1 The first rate constant of the DFOP or the HS kinetics.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k2 The second rate constant of the DFOP or the HS kinetics.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param g Parameter of the DFOP model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param tb Parameter of the HS model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return For \code{max_twa_parent}, a numeric vector, named using the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{windows} argument. For the other functions, a numeric vector of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' length one (also known as 'a number').</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' max_twa_parent(fit, c(7, 21))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_parent &lt;- function(fit, windows) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.all &lt;- c(fit$bparms.optim, fit$bparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- fit$obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">45</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Calculation of maximum time weighted average concentrations is",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">46</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "currently only implemented for the parent compound using",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">47</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "analytical solutions")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_var &lt;- obs_vars[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec = fit$mkinmod$spec</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = spec[[1]]$type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0 &lt;- parms.all[paste0(obs_var, "_0")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_name &lt;- paste0("k_", obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$mkinmod$use_of_ff == "min") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_name &lt;- paste0(k_name, "_sink")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k &lt;- parms.all[k_name]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_sfo(M0, k, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> alpha &lt;- parms.all["alpha"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta &lt;- parms.all["beta"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_fomc(M0, alpha, beta, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- parms.all["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- parms.all["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- parms.all["g"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_dfop(M0, k1, k2, g, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- parms.all["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- parms.all["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- parms.all["tb"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_sfo(M0, k1, t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_hs(M0, k1, k2, tb, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type %in% c("IORE", "SFORB")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">92</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Calculation of maximum time weighted average concentrations is currently ",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">93</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "not implemented for the ", type, " model.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- twafunc(windows)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(res) &lt;- windows</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_sfo &lt;- function(M0 = 1, k, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0 * (1 - exp(- k * t)) / (k * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_fomc &lt;- function(M0 = 1, alpha, beta, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0 * (beta)/(t * (1 - alpha)) * ((t/beta + 1)^(1 - alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_dfop &lt;- function(M0 = 1, k1, k2, g, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0/t * ((g/k1) * (1 - exp(- k1 * t)) + ((1 - g)/k2) * (1 - exp(- k2 * t)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_hs &lt;- function(M0 = 1, k1, k2, tb, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (M0 / t) * (</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1/k1) * (1 - exp(- k1 * tb)) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (exp(- k1 * tb) / k2) * (1 - exp(- k2 * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/f_time_norm_focus.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables("D24_2014")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Normalisation factors for aerobic soil degradation according to FOCUS guidance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Time step normalisation factors for aerobic soil degradation as described</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in Appendix 8 to the FOCUS kinetics guidance (FOCUS 2014, p. 369).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An object containing information used for the calculations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param temperature Numeric vector of temperatures in °C</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param moisture Numeric vector of moisture contents in \\% w/w</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param field_moisture Numeric vector of moisture contents at field capacity</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (pF2) in \\% w/w</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param study_moisture_ref_source Source for the reference value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' used to calculate the study moisture. If 'auto', preference is given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to a reference moisture given in the meta information, otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the focus soil moisture for the soil class is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param Q10 The Q10 value used for temperature normalisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param walker The Walker exponent used for moisture normalisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param f_na The factor to use for NA values. If set to NA, only factors</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for complete cases will be returned.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Currently not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2014) \dQuote{Generic guidance for Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Version 1.1, 18 December 2014</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [focus_soil_moisture]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_time_norm_focus(25, 20, 25) # 1.37, compare FOCUS 2014 p. 184</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' D24_2014$meta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # No moisture normalisation in the first dataset, so we use f_na = 1 to get</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # temperature only normalisation as in the EU evaluation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_time_norm_focus(D24_2014, study_moisture_ref_source = "focus", f_na = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">f_time_norm_focus &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">765<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("f_time_norm_focus")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname f_time_norm_focus</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">f_time_norm_focus.numeric &lt;- function(object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> moisture = NA, field_moisture = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> temperature = object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10 = 2.58, walker = 0.7, f_na = NA, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_temp &lt;- ifelse(is.na(temperature),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_na,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(temperature &lt;= 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10^((temperature - 20)/10)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_moist &lt;- ifelse(is.na(moisture),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_na,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(moisture &gt;= field_moisture,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (moisture / field_moisture)^walker))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm &lt;- f_temp * f_moist</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname f_time_norm_focus</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">f_time_norm_focus.mkindsg &lt;- function(object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_source = c("auto", "meta", "focus"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10 = 2.58, walker = 0.7, f_na = NA, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_source &lt;- match.arg(study_moisture_ref_source)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta &lt;- object$meta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(meta$field_moisture)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> field_moisture &lt;- focus_soil_moisture[meta$usda_soil_type, "pF2"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> field_moisture &lt;- ifelse(is.na(meta$field_moisture),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">80</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> focus_soil_moisture[meta$usda_soil_type, "pF2"],</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">81</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$field_moisture)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_focus &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> focus_soil_moisture[as.matrix(meta[c("usda_soil_type", "study_moisture_ref_type")])]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (study_moisture_ref_source == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref &lt;- ifelse (is.na(meta$study_ref_moisture),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_focus,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$study_ref_moisture)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (study_moisture_ref_source == "meta") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">93</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref &lt;- meta$study_moisture_ref</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref &lt;- study_moisture_ref_focus</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("study_moisture" %in% names(meta)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">100</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture &lt;- ifelse(is.na(meta$study_moisture),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">101</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$rel_moisture * study_moisture_ref,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">102</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$study_moisture)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture &lt;- meta$rel_moisture * study_moisture_ref</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$f_time_norm &lt;- f_time_norm_focus(meta$temperature,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> moisture = study_moisture, field_moisture = field_moisture,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10 = Q10, walker = walker, f_na = f_na)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("$f_time_norm was (re)set to normalised values")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(object$f_time_norm)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinds.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A dataset class for mkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' At the moment this dataset class is hardly used in mkin. For example,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinfit does not take mkinds datasets as argument, but works with dataframes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' such as the on contained in the data field of mkinds objects. Some datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' provided by this package come as mkinds objects nevertheless.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom R6 R6Class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mds &lt;- mkinds$new("FOCUS A", FOCUS_2006_A)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinds &lt;- R6Class("mkinds",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> public = list(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field title A full title for the dataset</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> title = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field sampling_times The sampling times</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sampling_times = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field time_unit The time unit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time_unit = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field observed Names of the observed variables</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field unit The unit of the observations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unit = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field replicates The maximum number of replicates per sampling time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replicates = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field data A data frame with at least the columns name, time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' and value in order to be compatible with mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' Create a new mkinds object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param title The dataset title</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param data The data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param time_unit The time unit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param unit The unit of the observations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initialize = function(title = "", data, time_unit = NA, unit = NA) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$title &lt;- title</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$sampling_times &lt;- sort(unique(data$time))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$time_unit &lt;- time_unit</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$observed &lt;- unique(data$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$unit &lt;- unit</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$replicates &lt;- max(by(data, list(data$name, data$time), nrow))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(data$override)) data$override &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(data$err)) data$err &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$data &lt;- data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkinds objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mkinds] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data Should the data be printed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mkinds &lt;- function(x, data = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mkinds&gt; with $title: ", x$title, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Observed compounds $observed: ", paste(x$observed, collapse = ", "), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Sampling times $sampling_times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(paste(x$sampling_times, collapse = ", "), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("With a maximum of ", x$replicates, " replicates\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(x$time_unit)) cat("Time unit: ", x$time_unit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(x$unit)) cat("Observation unit: ", x$unit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (data) print(mkin_long_to_wide(x$data))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A class for dataset groups for mkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A container for working with datasets that share at least one compound,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' so that combined evaluations are desirable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Time normalisation factors are initialised with a value of 1 for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dataset if no data are supplied.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mdsg &lt;- mkindsg$new("Experimental X", experimental_data_for_UBA_2019[6:10])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mdsg)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mdsg, verbose = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mdsg, verbose = TRUE, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkindsg &lt;- R6Class("mkindsg",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> public = list(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field title A title for the dataset group</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> title = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field ds A list of mkinds objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field observed_n Occurrence counts of compounds in datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_n = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field f_time_norm Time normalisation factors</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field meta A data frame with a row for each dataset,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' containing additional information in the form</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' of categorical data (factors) or numerical data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' (e.g. temperature, moisture,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' or covariates like soil pH).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' Create a new mkindsg object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param title The title</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param ds A list of mkinds objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param f_time_norm Time normalisation factors</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param meta The meta data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initialize = function(title = "", ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm = rep(1, length(ds)), meta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$title &lt;- title</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(sapply(ds, inherits, "mkinds"))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$ds &lt;- ds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">133</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply a list of mkinds objects")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_observed &lt;- unlist(lapply(ds, function(x) x$observed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- factor(all_observed, levels = unique(all_observed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$observed_n &lt;- table(observed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(dimnames(self$observed_n)) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$f_time_norm &lt;- f_time_norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!missing(meta)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">143</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(meta) &lt;- lapply(ds, function(x) x$title)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">144</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$meta &lt;- meta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkindsg objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkindsg</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mkindsg] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should the mkinds objects be printed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data Should the mkinds objects be printed with their data?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mkindsg &lt;- function(x, data = FALSE, verbose = data, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mkindsg&gt; holding", length(x$ds), "mkinds objects\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Title $title: ", x$title, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Occurrence of observed compounds $observed_n:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$observed_n)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x$f_time_norm != 1)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Time normalisation factors $f_time_norm:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$f_time_norm)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$meta)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Meta information $meta:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$meta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (verbose) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">172</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nDatasets $ds:")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">173</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds in x$ds) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">174</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">175</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(ds, data = data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinerrmin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("name", "value_mean"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate the minimum error to assume in order to pass the variance test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function finds the smallest relative error still resulting in passing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the chi-squared test as defined in the FOCUS kinetics report from 2006.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function is used internally by \code{\link{summary.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit an object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha The confidence level chosen for the chi-squared test.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qchisq aggregate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A dataframe with the following components: \item{err.min}{The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' relative error, expressed as a fraction.} \item{n.optim}{The number of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' optimised parameters attributed to the data series.} \item{df}{The number of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' remaining degrees of freedom for the chi2 error level calculations. Note</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that mean values are used for the chi2 statistic and therefore every time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' point with observed values in the series only counts one time.} The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dataframe has one row for the total dataset and one further row for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed state variable in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in EU</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Registration} Report of the FOCUS Work Group on Degradation Kinetics, EC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords manip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO = mkinmod(parent = mkinsub("SFO", to = "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_FOCUS_D = mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' round(mkinerrmin(fit_FOCUS_D), 4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_FOCUS_E = mkinfit(SFO_SFO, FOCUS_2006_E, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' round(mkinerrmin(fit_FOCUS_E), 4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinerrmin &lt;- function(fit, alpha = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.optim &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> kinerrmin &lt;- function(errdata, n.parms) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> means.mean &lt;- mean(errdata$observed, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> df = nrow(errdata) - n.parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err.min &lt;- sqrt((1 / qchisq(1 - alpha, df)) *</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sum((errdata$observed - errdata$predicted)^2)/(means.mean^2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(err.min = err.min, n.optim = n.parms, df = df))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata &lt;- aggregate(cbind(observed, predicted) ~ time + variable, data = fit$data, mean, na.rm=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata &lt;- errdata[order(errdata$time, errdata$variable), ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Remove values at time zero for variables whose value for state.ini is fixed,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # as these will not have any effect in the optimization and should therefore not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # be counted as degrees of freedom.</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_initials = gsub("_0$", "", rownames(subset(fit$fixed, type == "state")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata &lt;- subset(errdata, !(time == 0 &amp; variable %in% fixed_initials))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim.overall &lt;- length(parms.optim) - length(fit$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin.overall &lt;- kinerrmin(errdata, n.optim.overall)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin &lt;- data.frame(err.min = errmin.overall$err.min,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim = errmin.overall$n.optim, df = errmin.overall$df)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(errmin) &lt;- "All data"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The degrees of freedom are counted according to FOCUS kinetics (2011, p. 164)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in fit$obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata.var &lt;- subset(errdata, variable == obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if initial value is optimised</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.initials.optim &lt;- length(grep(paste(obs_var, ".*", "_0", sep=""), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Rate constants and IORE exponents are attributed to the source variable</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k.optim &lt;- length(grep(paste("^k", obs_var, sep="_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k.optim &lt;- n.k.optim + length(grep(paste("^log_k", obs_var, sep="_"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k__iore.optim &lt;- length(grep(paste("^k__iore", obs_var, sep="_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k__iore.optim &lt;- n.k__iore.optim + length(grep(paste("^log_k__iore",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_var, sep = "_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.N.optim &lt;- length(grep(paste("^N", obs_var, sep="_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.ff.optim &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Formation fractions are attributed to the target variable, so look</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # for source compartments with formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (source_var in fit$obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.ff.source = length(grep(paste("^f", source_var, sep = "_"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.paths.source = length(fit$mkinmod$spec[[source_var]]$to)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (target_var in fit$mkinmod$spec[[source_var]]$to) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">46296<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (obs_var == target_var) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">17974<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.ff.optim &lt;- n.ff.optim + n.ff.source/n.paths.source</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim &lt;- sum(n.initials.optim, n.k.optim, n.k__iore.optim, n.N.optim, n.ff.optim)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # FOMC, DFOP and HS parameters are only counted if we are looking at the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # first variable in the model which is always the source variable</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (obs_var == fit$obs_vars[[1]]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> special_parms = c("alpha", "log_alpha", "beta", "log_beta",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "k1", "log_k1", "k2", "log_k2",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "g", "g_ilr", "g_qlogis", "tb", "log_tb")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim &lt;- n.optim + length(intersect(special_parms, names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Calculate and add a line to the dataframe holding the results</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin.tmp &lt;- kinerrmin(errdata.var, n.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin[obs_var, c("err.min", "n.optim", "df")] &lt;- errmin.tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(errmin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/residuals.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Extract residuals from an mkinfit model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A \code{\link{mkinfit}} object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized by dividing by the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' standard deviation obtained from the fitted error model?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit("DFOP", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' residuals(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' residuals(f, standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">residuals.mkinfit &lt;- function(object, standardized = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">13</td>
+ <td class="coverage">2493<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- object$data[["residual"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">14</td>
+ <td class="coverage">2493<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (standardized) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">15</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">16</td>
+ <td class="coverage">543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_fitted &lt;- object$errparms["sigma"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">18</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_names = paste0("sigma_", object$data[["variable"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">20</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_fitted &lt;- object$errparms[sigma_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">1820<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_fitted &lt;- sigma_twocomp(object$data[["predicted"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">1820<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_low = object$errparms[1],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">1820<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rsd_high = object$errparms[2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res / sigma_fitted)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/AIC.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate the AIC for a column of an mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Provides a convenient way to compare different kinetic models fitted to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' same dataset.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats AIC BIC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An object of class \code{\link{mmkin}}, containing only one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k As in the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return As in the generic method (a numeric value for single fits, or a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dataframe if there are several fits in the column).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{ # skip, as it takes &gt; 10 s on winbuilder</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "FOMC", "DFOP"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS C" = FOCUS_2006_C), cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We get a warning because the FOMC model does not converge for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # FOCUS A dataset, as it is well described by SFO</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f["SFO", "FOCUS A"]) # We get a single number for a single fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[["SFO", "FOCUS A"]]) # or when extracting an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For FOCUS A, the models fit almost equally well, so the higher the number</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # of parameters, the higher (worse) the AIC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[, "FOCUS A"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[, "FOCUS A"], k = 0) # If we do not penalize additional parameters, we get nearly the same</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' BIC(f[, "FOCUS A"]) # Comparing the BIC gives a very similar picture</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For FOCUS C, the more complex models fit better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[, "FOCUS C"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' BIC(f[, "FOCUS C"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">AIC.mmkin &lt;- function(object, ..., k = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We can only handle a single column</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ncol(object) != 1) stop("Please provide a single column object")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- length(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_names &lt;- rownames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> code &lt;- paste0("AIC(",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("object[[", 1:n.fits, "]]", collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ", k = k)")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- eval(parse(text = code))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.fits &gt; 1) rownames(res) &lt;- model_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname AIC.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">BIC.mmkin &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We can only handle a single column</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ncol(object) != 1) stop("Please provide a single column object")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- length(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_names &lt;- rownames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> code &lt;- paste0("BIC(",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("object[[", 1:n.fits, "]]", collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- eval(parse(text = code))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.fits &gt; 1) rownames(res) &lt;- model_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/intervals.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom nlme intervals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme::intervals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Confidence intervals for parameters in saem.mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The fitted saem.mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param level The confidence level. Must be the default of 0.95 as this is what</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is available in the saemix object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param backtransform In case the model was fitted with mkin transformations,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should we backtransform the parameters where a one to one correlation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' between transformed and backtransformed parameters exists?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object with 'intervals.saem.mmkin' and 'intervals.lme' in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' class attribute</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">intervals.saem.mmkin &lt;- function(object, level = 0.95, backtransform = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(level, 0.95)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">20</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Confidence intervals are only available for a level of 95%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- names(object$mean_dp_start)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Confidence intervals are available in the SaemixObject, so</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # we just need to extract them and put them into a list modelled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # after the result of nlme::intervals.lme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- object$so@results@conf.int</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(conf.int) &lt;- conf.int$name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(conf.int)[2] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_trans &lt;- as.matrix(conf.int[pnames, c("lower", "est.", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Fixed effects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In case objects were produced by earlier versions of saem</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">38</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$transformations)) object$transformations &lt;- "mkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$transformations == "mkin" &amp; backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bp &lt;- backtransform_odeparms(confint_trans[, "est."], object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">2396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">2396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">51</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- matrix(NA, nrow = length(bp), ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(bpnames, colnames(confint_trans)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[, "est."] &lt;- bp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- confint_trans[pname, "lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- confint_trans[pname, "upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpl), "lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpu), "upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_ret &lt;- confint_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">195<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_ret &lt;- confint_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(confint_ret, "label") &lt;- "Fixed effects:"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Random effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sdnames &lt;- intersect(rownames(conf.int), paste("SD", pnames, sep = "."))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corrnames &lt;- grep("^Corr.", rownames(conf.int), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ranef_ret &lt;- as.matrix(conf.int[c(sdnames, corrnames), c("lower", "est.", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sdnames_ret &lt;- paste0(gsub("SD\\.", "sd(", sdnames), ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corrnames_ret &lt;- gsub("Corr\\.(.*)\\.(.*)", "corr(\\1,\\2)", corrnames)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(ranef_ret) &lt;- c(sdnames_ret, corrnames_ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ranef_ret, "label") &lt;- "Random effects:"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Error model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> enames &lt;- if (object$err_mod == "const") "a.1" else c("a.1", "b.1")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_ret &lt;- as.matrix(conf.int[enames, c("lower", "est.", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed = confint_ret,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random = ranef_ret,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmod = err_ret</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("intervals.saemix.mmkin", "intervals.lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "level") &lt;- level</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/update.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Update an mkinfit model with different arguments</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function will return an updated mkinfit object. The fitted degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model parameters from the old fit are used as starting values for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' updated fit. Values specified as 'parms.ini' and/or 'state.ini' will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' override these starting values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mkinfit object to be updated</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Arguments to \code{\link{mkinfit}} that should replace</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the arguments from the original call. Arguments set to NULL will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' remove arguments given in the original call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param evaluate Should the call be evaluated or returned as a call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("SFO", subset(FOCUS_2006_D, value != 0), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_err(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_2 &lt;- update(fit, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_err(fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.mkinfit &lt;- function(object, ..., evaluate = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- object$call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get optimised ODE parameters and let parms.ini override them</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_optim_names &lt;- intersect(names(object$bparms.optim), names(object$bparms.ode))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_start &lt;- object$bparms.optim[ode_optim_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("parms.ini" %in% names(update_arguments)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">33</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_start[names(update_arguments["parms.ini"])] &lt;- update_arguments["parms.ini"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ode_start)) update_arguments[["parms.ini"]] &lt;- ode_start</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get optimised values for initial states and let state.ini override them</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_optim_names &lt;- intersect(names(object$bparms.optim), paste0(names(object$bparms.state), "_0"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_start &lt;- object$bparms.optim[state_optim_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state_start) &lt;- gsub("_0$", "", names(state_start))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("state.ini" %in% names(update_arguments)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_start[names(update_arguments["state.ini"])] &lt;- update_arguments["state.ini"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(state_start)) update_arguments[["state.ini"]] &lt;- state_start</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">60</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/confint.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Confidence intervals for parameters of mkinfit objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The default method 'quadratic' is based on the quadratic approximation of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the curvature of the likelihood function at the maximum likelihood parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' estimates.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The alternative method 'profile' is based on the profile likelihood for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameter. The 'profile' method uses two nested optimisations and can take a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' very long time, even if parallelized by specifying 'cores' on unixoid</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' platforms. The speed of the method could likely be improved by using the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method of Venzon and Moolgavkar (1988).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An \code{\link{mkinfit}} object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parm A vector of names of the parameters which are to be given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confidence intervals. If missing, all parameters are considered.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param level The confidence level required</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha The allowed error probability, overrides 'level' if specified.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cutoff Possibility to specify an alternative cutoff for the difference</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the log-likelihoods at the confidence boundary. Specifying an explicit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cutoff value overrides arguments 'level' and 'alpha'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method The 'quadratic' method approximates the likelihood function at</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the optimised parameters using the second term of the Taylor expansion,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using a second derivative (hessian) contained in the object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The 'profile' method searches the parameter space for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cutoff of the confidence intervals by means of a likelihood ratio test.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transformed If the quadratic approximation is used, should it be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' applied to the likelihood based on the transformed parameters?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param backtransform If we approximate the likelihood in terms of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformed parameters, should we backtransform the parameters with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' their confidence intervals?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel_tol If the method is 'profile', what should be the accuracy</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the lower and upper bounds, relative to the estimate obtained from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the quadratic method?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores The number of cores to be used for multicore processing.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' On Windows machines, cores &gt; 1 is currently not supported.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should we suppress the message "Profiling the likelihood"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A matrix with columns giving lower and upper confidence limits for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each parameter.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qnorm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Bates DM and Watts GW (1988) Nonlinear regression analysis &amp; its applications</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Pawitan Y (2013) In all likelihood - Statistical modelling and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' inference using likelihood. Clarendon Press, Oxford.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Venzon DJ and Moolgavkar SH (1988) A Method for Computing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Profile-Likelihood Based Confidence Intervals, Applied Statistics, 37,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 87–94.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit("SFO", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f, method = "profile")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Set the number of cores for the profiling method for further examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (identical(Sys.getenv("NOT_CRAN"), "true")) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n_cores &lt;- parallel::detectCores() - 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n_cores &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (Sys.getenv("TRAVIS") != "") n_cores = 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (Sys.info()["sysname"] == "Windows") n_cores = 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "min", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.ff &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_d_1 &lt;- mkinfit(SFO_SFO, subset(FOCUS_2006_D, value != 0), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' system.time(ci_profile &lt;- confint(f_d_1, method = "profile", cores = 1, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Using more cores does not save much time here, as parent_0 takes up most of the time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If we additionally exclude parent_0 (the confidence of which is often of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # minor interest), we get a nice performance improvement if we use at least 4 cores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' system.time(ci_profile_no_parent_0 &lt;- confint(f_d_1, method = "profile",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("k_parent_sink", "k_parent_m1", "k_m1_sink", "sigma"), cores = n_cores))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_profile</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed &lt;- confint(f_d_1, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed &lt;- confint(f_d_1, method = "quadratic", transformed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Against the expectation based on Bates and Watts (1988), the confidence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # intervals based on the internal parameter transformation are less</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # congruent with the likelihood based intervals. Note the superiority of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # interval based on the untransformed fit for k_m1_sink</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed &lt;- abs((ci_quadratic_transformed - ci_profile)/ci_profile)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_untransformed &lt;- abs((ci_quadratic_untransformed - ci_profile)/ci_profile)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed &lt; rel_diffs_untransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' signif(rel_diffs_transformed, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' signif(rel_diffs_untransformed, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Investigate a case with formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_d_2 &lt;- mkinfit(SFO_SFO.ff, subset(FOCUS_2006_D, value != 0), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_profile_ff &lt;- confint(f_d_2, method = "profile", cores = n_cores)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_profile_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed_ff &lt;- confint(f_d_2, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed_ff &lt;- confint(f_d_2, method = "quadratic", transformed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed_ff &lt;- abs((ci_quadratic_transformed_ff - ci_profile_ff)/ci_profile_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_untransformed_ff &lt;- abs((ci_quadratic_untransformed_ff - ci_profile_ff)/ci_profile_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # While the confidence interval for the parent rate constant is closer to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # the profile based interval when using the internal parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # transformation, the interval for the metabolite rate constant is 'better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # without internal parameter transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed_ff &lt; rel_diffs_untransformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_untransformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The profiling for the following fit does not finish in a reasonable time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # therefore we use the quadratic approximation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_DFOP_par &lt;- mkinmod(parent = mkinsub("DFOP", c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP_par_c &lt;- synthetic_data_for_UBA_2014[[12]]$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_tc_2 &lt;- mkinfit(m_synth_DFOP_par, DFOP_par_c, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' error_model_algorithm = "direct", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f_tc_2, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f_tc_2, "parent_0", method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">confint.mkinfit &lt;- function(object, parm,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> level = 0.95, alpha = 1 - level, cutoff,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = c("quadratic", "profile"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformed = TRUE, backtransform = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = parallel::detectCores(), rel_tol = 0.01, quiet = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tparms &lt;- parms(object, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms &lt;- parms(object, transformed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tpnames &lt;- names(tparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_pnames &lt;- if (missing(parm)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (backtransform) bpnames else tpnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p &lt;- length(return_pnames)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> a &lt;- c(alpha / 2, 1 - (alpha / 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> quantiles &lt;- qt(a, object$df.residual)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_pnames &lt;- if (missing(parm)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">420<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformed) tpnames else bpnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_parms &lt;- if (backtransform) bparms[return_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else tparms[return_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_parms &lt;- if (transformed) tparms[covar_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else bparms[covar_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformed) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">840<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- try(solve(object$hessian), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">420<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- try(solve(object$hessian_notrans), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If inverting the covariance matrix failed or produced NA values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.numeric(covar) | is.na(covar[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">168</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ses &lt;- lci &lt;- uci &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ses &lt;- sqrt(diag(covar))[covar_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- covar_parms + quantiles[1] * ses</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci &lt;- covar_parms + quantiles[2] * ses</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformed &amp; backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci_back &lt;- backtransform_odeparms(lci,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$mkinmod, object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci_back &lt;- backtransform_odeparms(uci,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$mkinmod, object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_errparm_names &lt;- intersect(names(object$errparms), return_pnames)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- c(lci_back, lci[return_errparm_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci &lt;- c(uci_back, uci[return_errparm_names])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci &lt;- cbind(lower = lci, upper = uci)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (method == "profile") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci_quadratic &lt;- ci</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Profiling the likelihood")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- uci &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lci) &lt;- names(uci) &lt;- return_pnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> profile_pnames &lt;- if(missing(parm)) names(parms(object))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else parm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (missing(cutoff)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cutoff &lt;- 0.5 * qchisq(1 - alpha, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_parms &lt;- parms(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> get_ci &lt;- function(pname) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames_free &lt;- setdiff(names(all_parms), pname)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> profile_ll &lt;- function(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">80<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pll_cost &lt;- function(P) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_cost &lt;- all_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_cost[pnames_free] &lt;- P[pnames_free]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_cost[pname] &lt;- x</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> - object$ll(parms_cost)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">80<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> - nlminb(all_parms[pnames_free], pll_cost)$objective</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">80<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (cutoff - (object$logLik - profile_ll(x)))^2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower_quadratic &lt;- ci_quadratic["lower"][pname]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper_quadratic &lt;- ci_quadratic["upper"][pname]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ltol &lt;- if (!is.na(lower_quadratic)) rel_tol * lower_quadratic else .Machine$double.eps^0.25</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> utol &lt;- if (!is.na(upper_quadratic)) rel_tol * upper_quadratic else .Machine$double.eps^0.25</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci_pname &lt;- optimize(cost, lower = 0, upper = all_parms[pname], tol = ltol)$minimum</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci_pname &lt;- optimize(cost, lower = all_parms[pname],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">227</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = ifelse(grepl("^f_|^g$", pname), 1, 15 * all_parms[pname]),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tol = utol)$minimum</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(c(lci_pname, uci_pname))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci &lt;- t(parallel::mcmapply(get_ci, profile_pnames, mc.cores = cores))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">1257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(ci) &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">1257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> format(100 * a, trim = TRUE, scientific = FALSE, digits = 3), "%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">1257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ci)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/set_nd_nq.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Set non-detects and unquantified values in residue series without replicates</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function automates replacing unquantified values in residue time and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' depth series. For time series, the function performs part of the residue</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' processing proposed in the FOCUS kinetics guidance for parent compounds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and metabolites. For two-dimensional residue series over time and depth,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' it automates the proposal of Boesten et al (2015).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param res_raw Character vector of a residue time series, or matrix of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' residue values with rows representing depth profiles for a specific sampling</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time, and columns representing time series of residues at the same depth.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Values below the limit of detection (lod) have to be coded as "nd", values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' between the limit of detection and the limit of quantification, if any, have</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to be coded as "nq". Samples not analysed have to be coded as "na". All</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values that are not "na", "nd" or "nq" have to be coercible to numeric</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lod Limit of detection (numeric)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param loq Limit of quantification(numeric). Must be specified if the FOCUS rule to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' stop after the first non-detection is to be applied</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time_zero_presence Do we assume that residues occur at time zero?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This only affects samples from the first sampling time that have been</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' reported as "nd" (not detected).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Boesten, J. J. T. I., van der Linden, A. M. A., Beltman, W. H.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' J. and Pol, J. W. (2015). Leaching of plant protection products and their</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformation products; Proposals for improving the assessment of leaching</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to groundwater in the Netherlands — Version 2. Alterra report 2630, Alterra</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Wageningen UR (University &amp; Research centre)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2014) Generic Guidance for Estimating Persistence and Degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Kinetics from Environmental Fate Studies on Pesticides in EU Registration, Version 1.1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 18 December 2014, p. 251</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A numeric vector, if a vector was supplied, or a numeric matrix otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # FOCUS (2014) p. 75/76 and 131/132</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent_1 &lt;- c(.12, .09, .05, .03, "nd", "nd", "nd", "nd", "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(parent_1, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent_2 &lt;- c(.12, .09, .05, .03, "nd", "nd", .03, "nd", "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(parent_2, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq_focus(parent_2, 0.02, loq = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent_3 &lt;- c(.12, .09, .05, .03, "nd", "nd", .06, "nd", "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(parent_3, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq_focus(parent_3, 0.02, loq = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' metabolite &lt;- c("nd", "nd", "nd", 0.03, 0.06, 0.10, 0.11, 0.10, 0.09, 0.05, 0.03, "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(metabolite, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq_focus(metabolite, 0.02, 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Boesten et al. (2015), p. 57/58</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' table_8 &lt;- matrix(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(10, 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, rep("nq", 2), rep("nd", 2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, 10, "nq", "nd", "nd",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "nq", 10, "nq", rep("nd", 3),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "nd", "nq", "nq", rep("nd", 3),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rep("nd", 6), rep("nd", 6)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ncol = 6, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(table_8, 0.5, 1.5, time_zero_presence = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' table_10 &lt;- matrix(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(10, 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, 10, rep("nd", 3),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "nd", 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rep("nd", 18)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ncol = 6, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(table_10, 0.5, time_zero_presence = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">set_nd_nq &lt;- function(res_raw, lod, loq = NA, time_zero_presence = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.character(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply a vector or a matrix of character values")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.vector(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> was_vector &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw &lt;- as.matrix(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> was_vector &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.matrix(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">74</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply a vector or a matrix of character values")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nq &lt;- 0.5 * (loq + lod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nda &lt;- 0.5 * lod # not detected but adjacent to detection</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "nq"] &lt;- nq</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!time_zero_presence) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (j in 1:ncol(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (res_raw[1, j] == "nd") res_raw[1, j] &lt;- "na"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "na"] &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> not_nd_na &lt;- function(value) !(grepl("nd", value) | is.na(value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:nrow(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">94<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (j in 1:ncol(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">164<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(res_raw[i, j]) &amp;&amp; res_raw[i, j] == "nd") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i &gt; 1) { # check earlier sample in same layer</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">17<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i - 1, j])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i &lt; nrow(res_raw)) { # check later sample</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i + 1, j])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (j &gt; 1) { # check above sample at the same time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">9<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i, j - 1])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (j &lt; ncol(res_raw)) { # check sample below at the same time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i, j + 1])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "nda"] &lt;- nda</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "nd"] &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- as.numeric(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (was_vector) result &lt;- as.vector(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @describeIn set_nd_nq Set non-detects in residue time series according to FOCUS rules</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param set_first_sample_nd Should the first sample be set to "first_sample_nd_value"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in case it is a non-detection?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param first_sample_nd_value Value to be used for the first sample if it is a non-detection</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ignore_below_loq_after_first_nd Should we ignore values below the LOQ after the first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' non-detection that occurs after the quantified values?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">set_nd_nq_focus &lt;- function(res_raw, lod, loq = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> set_first_sample_nd = TRUE, first_sample_nd_value = 0,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ignore_below_loq_after_first_nd = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">130</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.vector(res_raw)) stop("FOCUS rules are only specified for one-dimensional time series")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ignore_below_loq_after_first_nd &amp; is.na(loq)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("You need to specify an LOQ")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- length(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ignore_below_loq_after_first_nd) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 3:n) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!res_raw[i - 2] %in% c("na", "nd")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">21<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (res_raw[i - 1] == "nd") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining &lt;- res_raw[i:n]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining_unquantified &lt;- ifelse(res_remaining == "na", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(res_remaining == "nd", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(res_remaining == "nq", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(suppressWarnings(as.numeric(res_remaining)) &lt; loq, TRUE, FALSE))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining_numeric &lt;- suppressWarnings(as.numeric(res_remaining))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining_below_loq &lt;- ifelse(res_remaining == "nq", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(!is.na(res_remaining_numeric) &amp; res_remaining_numeric &lt; loq, TRUE, FALSE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(res_remaining_unquantified)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[i:n] &lt;- ifelse(res_remaining_below_loq, "nd", res_remaining)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- set_nd_nq(res_raw, lod = lod, loq = loq)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (set_first_sample_nd) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (res_raw[1] == "nd") result[1] &lt;- first_sample_nd_value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinparplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to plot the confidence intervals obtained using mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function plots the confidence intervals for the parameters fitted using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fit represented in an \code{\link{mkinfit}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Nothing is returned by this function, as it is called for its side</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effect, namely to produce a plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' T245 = mkinsub("SFO", to = c("phenol"), sink = FALSE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' phenol = mkinsub("SFO", to = c("anisole")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anisole = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(model, subset(mccall81_245T, soil == "Commerce"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinparplot(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinparplot &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.optim = rownames(subset(object$start, type == "state"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deparms.optim = rownames(subset(object$start, type == "deparm"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fractions.optim = grep("^f_", deparms.optim, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N.optim = grep("^N_", deparms.optim, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">26</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("g" %in% deparms.optim) fractions.optim &lt;- c("g", fractions.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim.unsorted = setdiff(deparms.optim, union(fractions.optim, N.optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim &lt;- rownames(object$start[rates.optim.unsorted, ])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.plot &lt;- c(state.optim = length(state.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim = length(rates.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N.optim = length(N.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fractions.optim = length(fractions.optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.plot &lt;- n.plot[n.plot &gt; 0]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(matrix(1:length(n.plot), ncol = 1), heights = n.plot + 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> s &lt;- summary(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpar &lt;- data.frame(t(s$bpar[, c("Estimate", "Lower", "Upper")]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(2.1, 2.1, 0.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(cex = 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (type in names(n.plot)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parnames &lt;- get(type)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> values &lt;- bpar[parnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> values_with_confints &lt;- data.frame(t(subset(data.frame(t(values)), !is.na("Lower"))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = switch(type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.optim = range(c(0, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim = range(c(0, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N.optim = range(c(0, 1, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fractions.optim = range(c(0, 1, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parname_index &lt;- length(parnames):1 # Reverse order for strip chart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stripchart(values["Estimate", ][parname_index],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(0.5, length(get(type)) + 0.5),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> yaxt = "n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type %in% c("rates.optim", "fractions.optim")) abline(v = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">63</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type %in% c("N.optim", "fractions.optim")) abline(v = 1, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> position &lt;- ifelse(values["Estimate", ] &lt; mean(xlim), "right", "left")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> text(ifelse(position == "left", min(xlim), max(xlim)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parname_index, parnames,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pos = ifelse(position == "left", 4, 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> values.upper.nonInf &lt;- ifelse(values["Upper", ] == Inf, 1.5 * xlim[[2]], values["Upper", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Suppress warnings for non-existing arrow lengths</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> suppressWarnings(arrows(as.numeric(values["Lower", ]), parname_index,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> as.numeric(values.upper.nonInf), parname_index,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> code = 3, angle = 90, length = 0.05))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.saem.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "saem.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lists model equations, initial parameter values, optimised parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for fixed effects (population), random effects (deviations from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' population mean) and residual error model, as well as the resulting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints such as formation fractions and DT50 values. Optionally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (default is FALSE), the data are listed in full.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [saem.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class [summary.saem.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data logical, indicating whether the full data should be included in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should the summary be verbose?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param distimes logical, indicating whether DT50 and DT90 values should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' included.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inheritParams endpoints</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The summary function returns a list based on the [saemix::SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' obtained in the fit, with at least the following additional components</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{saemixversion, mkinversion, Rversion}{The saemix, mkin and R versions used}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{date.fit, date.summary}{The dates where the fit and the summary were</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' produced}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{The differential equations used in the degradation model}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{Was maximum or minimum use made of formation fractions}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{data}{The data}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_trans}{Transformed parameters as used in the optimisation, with confidence intervals}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_back}{Backtransformed parameters, with confidence intervals if available}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_errmod}{Error model parameters with confidence intervals}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{ff}{The estimated formation fractions derived from the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{distimes}{The DT50 and DT90 values for each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{SFORB}{If applicable, eigenvalues of SFORB components of the model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The print method is called for its side effect, i.e. printing the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats predict vcov</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke for the mkin specific parts</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saemix authors for the parts inherited from saemix.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Generate five datasets following DFOP-SFO kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(1234)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k1_in &lt;- rlnorm(5, log(0.1), 0.3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k2_in &lt;- rlnorm(5, log(0.02), 0.3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' g_in &lt;- plogis(rnorm(5, qlogis(0.5), 0.3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_parent_to_m1_in &lt;- plogis(rnorm(5, qlogis(0.3), 0.3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_m1_in &lt;- rlnorm(5, log(0.02), 0.3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pred_dfop_sfo &lt;- function(k1, k2, g, f_parent_to_m1, k_m1) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k1 = k1, k2 = k2, g = g, f_parent_to_m1 = f_parent_to_m1, k_m1 = k_m1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_mean_dfop_sfo &lt;- lapply(1:5, function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k1 = k1_in[i], k2 = k2_in[i], g = g_in[i],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_parent_to_m1 = f_parent_to_m1_in[i], k_m1 = k_m1_in[i]),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds_mean_dfop_sfo) &lt;- paste("ds", 1:5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_syn_dfop_sfo &lt;- lapply(ds_mean_dfop_sfo, function(ds) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' add_err(ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Evaluate using mmkin and saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_dfop_sfo &lt;- mmkin(list(dfop_sfo), ds_syn_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE, error_model = "tc", cores = 5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo &lt;- saem(f_mmkin_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo_2 &lt;- update(f_saem_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' no_random_effect = c("parent_0", "log_k_m1"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_dfop_sfo_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' intervals(f_saem_dfop_sfo_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(f_saem_dfop_sfo_2, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Add a correlation between random effects of g and k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cov_model_3 &lt;- f_saem_dfop_sfo_2$so@model@covariance.model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cov_model_3["log_k2", "g_qlogis"] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cov_model_3["g_qlogis", "log_k2"] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo_3 &lt;- update(f_saem_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' covariance.model = cov_model_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' intervals(f_saem_dfop_sfo_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The correlation does not improve the fit judged by AIC and BIC, although</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # the likelihood is higher with the additional parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_dfop_sfo, f_saem_dfop_sfo_2, f_saem_dfop_sfo_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.saem.mmkin &lt;- function(object, data = FALSE, verbose = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL, covariate_quantile = 0.5,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> distimes = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- names(object$mean_dp_start)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_fixed_effects &lt;- object$so@results@name.fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_fixed &lt;- length(names_fixed_effects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- object$so@results@conf.int</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(conf.int) &lt;- conf.int$name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_trans &lt;- as.matrix(parms(object, ci = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(confint_trans)[1] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In case objects were produced by earlier versions of saem</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$transformations)) object$transformations &lt;- "mkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bp &lt;- backtransform_odeparms(confint_trans[pnames, "est."], object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">492<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">492<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">126</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- matrix(NA, nrow = length(bp), ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(bpnames, colnames(confint_trans)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[, "est."] &lt;- bp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- confint_trans[pname, "lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- confint_trans[pname, "upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpl), "lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpu), "upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">404<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- confint_trans[names_fixed_effects, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Correlation of fixed effects (inspired by summary.nlme)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cov_so &lt;- try(solve(object$so@results@fim), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(cov_so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">155</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$corFixed &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> varFix &lt;- cov_so[1:n_fixed, 1:n_fixed]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stdFix &lt;- sqrt(diag(varFix))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$corFixed &lt;- array(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t(varFix/stdFix)/stdFix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(varFix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(names_fixed_effects, names_fixed_effects))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Random effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sdnames &lt;- intersect(rownames(conf.int), paste0("SD.", pnames))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corrnames &lt;- grep("^Corr.", rownames(conf.int), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_ranef &lt;- as.matrix(conf.int[c(sdnames, corrnames), c("estimate", "lower", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(confint_ranef)[1] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Error model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> enames &lt;- if (object$err_mod == "const") "a.1" else c("a.1", "b.1")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_errmod &lt;- as.matrix(conf.int[enames, c("estimate", "lower", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(confint_errmod)[1] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_trans &lt;- confint_trans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_ranef &lt;- confint_ranef</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_errmod &lt;- confint_errmod</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_back &lt;- confint_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$date.summary = date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$use_of_ff = object$mkinmod$use_of_ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$error_model_algorithm = object$mmkin_orig[[1]]$error_model_algorithm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object$mmkin_orig[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$diffs &lt;- object$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$print_data &lt;- data # boolean: Should we print the data?</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> so_pred &lt;- object$so@results@predictions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(object$data)[4] &lt;- "observed" # rename value to observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$verbose &lt;- verbose</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$fixed &lt;- object$mmkin_orig[[1]]$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;-try(logLik(object$so, method = "is"), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(ll, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">197</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$logLik &lt;- object$AIC &lt;- object $BIC &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$logLik = logLik(object$so, method = "is")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$AIC = AIC(object$so)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$BIC = BIC(object$so)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- endpoints(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$covariates &lt;- ep$covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) != 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">330<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$ff &lt;- ep$ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (distimes) object$distimes &lt;- ep$distimes</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">209</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) != 0) object$SFORB &lt;- ep$SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(object) &lt;- c("summary.saem.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.saem.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.saem.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), verbose = x$verbose, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("saemix version used for fitting: ", x$saemixversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version used for pre-fitting: ", x$mkinversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version used for fitting: ", x$Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of fit: ", x$date.fit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of summary:", x$date.summary, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEquations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nModel predictions using solution type", x$solution_type, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted in", x$time[["elapsed"]], "s\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Using", paste(x$so@options$nbiter.saemix, collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "iterations and", x$so@options$nb.chains, "chains\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nVariance model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for degradation parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$mean_dp_start, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed degradation parameter values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(x$fixed$value) == 0) cat("None\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">250</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else print(x$fixed, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for random effects (square root of initial entries in omega):\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(sqrt(x$so@model@omega.init), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for error model parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- x$so@model@error.init</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(errparms) &lt;- x$so@model@name.sigma</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- errparms[x$so@model@indx.res]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(errparms, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResults:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Likelihood computed by importance sampling\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(AIC = x$AIC, BIC = x$BIC, logLik = x$logLik,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nOptimised parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_trans, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(x$corFixed, NA)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nCorrelation is not available\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corr &lt;- x$corFixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">273</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(corr) &lt;- "correlation"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(corr, title = "\nCorrelation:", rdig = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">277</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nRandom effects:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_ranef, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">279</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nVariance model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_errmod, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">282</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nBacktransformed parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_back, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">286</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">289</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nCovariates used for endpoints below:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">290</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$covariates)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printSFORB &lt;- !is.null(x$SFORB)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">294</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printSFORB){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">295</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated Eigenvalues of SFORB model(s):\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">296</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$SFORB, digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">299</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printff &lt;- !is.null(x$ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">300</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printff){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">301</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResulting formation fractions:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(ff = x$ff), digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">303</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">305</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdistimes &lt;- !is.null(x$distimes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">306</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printdistimes){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">307</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated disappearance times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$distimes, digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$print_data){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">312</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">313</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(format(x$data, digits = digits, ...), row.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">314</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">315</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkin_long_to_wide.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Convert a dataframe from long to wide format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function takes a dataframe in the long form, i.e. with a row for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed value, and converts it into a dataframe with one independent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable and several dependent variables as columns.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param long_data The dataframe must contain one variable called "time" with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the time values specified by the \code{time} argument, one column called</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "name" with the grouping of the observed values, and finally one column of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed values called "value".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time The name of the time variable in the long input data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param outtime The name of the time variable in the wide output data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Dataframe in wide format.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin_long_to_wide(FOCUS_2006_D)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export mkin_long_to_wide</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkin_long_to_wide &lt;- function(long_data, time = "time", outtime = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames &lt;- unique(long_data$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wide_data &lt;- data.frame(time = subset(long_data, name == colnames[1], time))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(wide_data) &lt;- outtime</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (var in colnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wide_data[var] &lt;- subset(long_data, name == var, value)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(wide_data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/loftest.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lack-of-fit test for models fitted to data with replicates</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This is a generic function with a method currently only defined for mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects. It fits an anova model to the data contained in the object and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compares the likelihoods using the likelihood ratio test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link[lmtest]{lrtest.default}} from the lmtest package.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The anova model is interpreted as the simplest form of an mkinfit model,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' assuming only a constant variance about the means, but not enforcing any</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' structure of the means, so we have one model parameter for every mean</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of replicate samples.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A model object with a defined loftest method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">loftest &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">17</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("loftest")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname loftest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats logLik lm dnorm coef</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso lrtest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data &lt;- subset(synthetic_data_for_UBA_2014[[12]]$data, name == "parent")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_fit &lt;- mkinfit("SFO", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(sfo_fit) # We see a clear pattern in the residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(sfo_fit) # We have a clear lack of fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We try a different model (the one that was used to generate the data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_fit &lt;- mkinfit("DFOP", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(dfop_fit) # We don't see systematic deviations, but heteroscedastic residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # therefore we should consider adapting the error model, although we have</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(dfop_fit) # no lack of fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This is the anova model used internally for the comparison</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova &lt;- test_data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova$time &lt;- as.factor(test_data_anova$time)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova_fit &lt;- lm(value ~ time, data = test_data_anova)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(anova_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logLik(anova_fit) # We get the same likelihood and degrees of freedom</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_2 &lt;- synthetic_data_for_UBA_2014[[12]]$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_SFO_lin &lt;- mkinmod(parent = list(type = "SFO", to = "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = list(type = "SFO", to = "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_lin_fit &lt;- mkinfit(m_synth_SFO_lin, test_data_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(sfo_lin_fit) # not a good model, we try parallel formation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(sfo_lin_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_SFO_par &lt;- mkinmod(parent = list(type = "SFO", to = c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_par_fit &lt;- mkinfit(m_synth_SFO_par, test_data_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(sfo_par_fit) # much better for metabolites</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(sfo_par_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_DFOP_par &lt;- mkinmod(parent = list(type = "DFOP", to = c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_par_fit &lt;- mkinfit(m_synth_DFOP_par, test_data_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(dfop_par_fit) # No visual lack of fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(dfop_par_fit) # no lack of fit found by the test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The anova model used for comparison in the case of transformation products</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova_2 &lt;- dfop_par_fit$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova_2$variable &lt;- as.factor(test_data_anova_2$variable)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova_2$time &lt;- as.factor(test_data_anova_2$time)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova_fit_2 &lt;- lm(observed ~ time:variable - 1, data = test_data_anova_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(anova_fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">loftest.mkinfit &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name_function &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(x$mkinmod$name, "with error model", x$err_mod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$bparms.fixed) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(object_name,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "and fixed parameter(s)",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">80</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(names(x$bparms.fixed), collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object_name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if we have replicates in the data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (max(aggregate(object$data$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> by = list(object$data$variable, object$data$time), length)$x) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Not defined for fits to data without replicates")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_anova &lt;- object$data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_anova$time &lt;- as.factor(data_anova$time)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_anova$variable &lt;- as.factor(data_anova$variable)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nlevels(data_anova$variable) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2 &lt;- lm(observed ~ time - 1, data = data_anova)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">97</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2 &lt;- lm(observed ~ variable:time - 1,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">98</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data = data_anova)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$mkinmod &lt;- list(name = "ANOVA")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$err_mod &lt;- "const"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_mle &lt;- sqrt(sum(residuals(object_2)^2)/nobs(object_2))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$logLik &lt;- sum(dnorm(x = object_2$residuals,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean = 0, sd = sigma_mle, log = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$data &lt;- object$data # to make the nobs.mkinfit method work</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$bparms.optim &lt;- coef(object_2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$errparms &lt;- 1 # We have estimated one error model parameter</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(object_2) &lt;- "mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lmtest::lrtest.default(object_2, object, name = name_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/add_err.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Add normally distributed errors to simulated kinetic degradation data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Normally distributed errors are added to data predicted for a specific</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation model using \code{\link{mkinpredict}}. The variance of the error</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' may depend on the predicted value and is specified as a standard deviation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param prediction A prediction from a kinetic model as produced by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinpredict}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sdfunc A function taking the predicted value as its only argument and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' returning a standard deviation that should be used for generating the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' random error terms for this value.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param secondary The names of state variables that should have an initial</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' value of zero</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param n The number of datasets to be generated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param LOD The limit of detection (LOD). Values that are below the LOD after</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' adding the random error will be set to NA.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param reps The number of replicates to be generated within the datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits The number of digits to which the values will be rounded.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param seed The seed used for the generation of random numbers. If NA, the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seed is not set.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats rnorm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list of datasets compatible with \code{\link{mmkin}}, i.e. the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' components of the list are datasets compatible with \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Ranke J and Lehmann R (2015) To t-test or not to t-test, that is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the question. XV Symposium on Pesticide Chemistry 2-4 September 2015,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Piacenza, Italy</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' https://jrwb.de/posters/piacenza_2015.pdf</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The kinetic model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_SFO_SFO &lt;- mkinmod(parent = mkinsub("SFO", "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Generate a prediction for a specific set of parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This is the prediction used for the "Type 2 datasets" on the Piacenza poster</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # from 2015</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_SFO &lt;- mkinpredict(m_SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.1, f_parent_to_M1 = 0.5,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_M1 = log(2)/1000),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, M1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Add an error term with a constant (independent of the value) standard deviation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # of 10, and generate three datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_SFO_err &lt;- add_err(d_SFO_SFO, function(x) 10, n = 3, seed = 123456789 )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Name the datasets for nicer plotting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(d_SFO_SFO_err) &lt;- paste("Dataset", 1:3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Name the model in the list of models (with only one member in this case) for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # nicer plotting later on. Be quiet and use only one core not to offend CRAN</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # checks</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_SFO_SFO &lt;- mmkin(list("SFO-SFO" = m_SFO_SFO),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_SFO_err, cores = 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We would like to inspect the fit for dataset 3 more closely</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Using double brackets makes the returned object an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # instead of a list of mkinfit objects, so plot.mkinfit is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_SFO_SFO[[3]], show_residuals = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If we use single brackets, we should give two indices (model and dataset),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and plot.mmkin is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_SFO_SFO[1, 3])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">add_err &lt;- function(prediction, sdfunc, secondary = c("M1", "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n = 10, LOD = 0.1, reps = 2, digits = 1, seed = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">842<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(seed)) set.seed(seed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> prediction &lt;- as.data.frame(prediction)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The output of mkinpredict is in wide format</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_long = mkin_wide_to_long(prediction, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up the list to be returned</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_return = list()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Generate datasets one by one in a loop</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:n) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_rep = data.frame(lapply(d_long, rep, each = reps))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_rep$value = rnorm(length(d_rep$value), d_rep$value, sdfunc(d_rep$value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_rep[d_rep$time == 0 &amp; d_rep$name %in% secondary, "value"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set values below the LOD to NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_NA &lt;- transform(d_rep, value = ifelse(value &lt; LOD, NA, value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Round the values for convenience</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_NA$value &lt;- round(d_NA$value, digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_return[[i]] &lt;- d_NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(d_return)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkin_wide_to_long.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("name", "time", "value"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Convert a dataframe with observations over time into long format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function simply takes a dataframe with one independent variable and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' several dependent variable and converts it into the long form as required by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param wide_data The dataframe must contain one variable with the time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values specified by the \code{time} argument and usually more than one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column of observed values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time The name of the time variable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Dataframe in long format as needed for \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords manip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' wide &lt;- data.frame(t = c(1,2,3), x = c(1,4,7), y = c(3,4,5))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin_wide_to_long(wide)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkin_wide_to_long &lt;- function(wide_data, time = "t")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wide_data &lt;- as.data.frame(wide_data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames &lt;- names(wide_data)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">26</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!(time %in% colnames)) stop("The data in wide format have to contain a variable named ", time, ".")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> vars &lt;- subset(colnames, colnames != time)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- length(colnames) - 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> long_data &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name = rep(vars, each = length(wide_data[[time]])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = as.numeric(rep(wide_data[[time]], n)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> value = as.numeric(unlist(wide_data[vars])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(long_data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/parent_solutions.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Single First-Order kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param t Time.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parent_0 Starting value for the response variable at time zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k Kinetic rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The value of the response variable at time \code{t}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2014) \dQuote{Generic guidance for Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Version 1.1, 18 December 2014</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{plot(function(x) SFO.solution(x, 100, 3), 0, 2)}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">SFO.solution &lt;- function(t, parent_0, k)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">2338849<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 * exp(-k * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' First-Order Multi-Compartment kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a decreasing rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The form given here differs slightly from the original reference by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Gustafson and Holden (1990). The parameter \code{beta} corresponds to 1/beta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the original equation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha Shape parameter determined by coefficient of variation of rate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' constant values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param beta Location parameter.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The solution of the FOMC kinetic model reduces to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{SFO.solution}} for large values of \code{alpha} and \code{beta}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with \eqn{k = \frac{\beta}{\alpha}}{k = beta/alpha}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2014) \dQuote{Generic guidance for Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Version 1.1, 18 December 2014</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Gustafson DI and Holden LR (1990) Nonlinear pesticide dissipation in soil:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A new model based on spatial variability. \emph{Environmental Science and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Technology} \bold{24}, 1032-1038</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) FOMC.solution(x, 100, 10, 2), 0, 2, ylim = c(0, 100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">FOMC.solution &lt;- function(t, parent_0, alpha, beta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">32626<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 / (t/beta + 1)^alpha</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Indeterminate order rate equation kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a concentration dependent rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k__iore Rate constant. Note that this depends on the concentration</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' units used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param N Exponent describing the nonlinearity of the rate equation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The solution of the IORE kinetic model reduces to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{SFO.solution}} if N = 1. The parameters of the IORE model can</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be transformed to equivalent parameters of the FOMC mode - see the NAFTA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' guidance for details.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references NAFTA Technical Working Group on Pesticides (not dated) Guidance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for Evaluating and Calculating Degradation Kinetics in Environmental Media</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) IORE.solution(x, 100, 0.2, 1.3), 0, 2, ylim = c(0, 100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.fomc &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.iore &lt;- mkinfit("IORE", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.iore.deS &lt;- mkinfit("IORE", FOCUS_2006_C, solution_type = "deSolve", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(data.frame(fit.fomc$par, fit.iore$par, fit.iore.deS$par,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' row.names = paste("model par", 1:4)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(rbind(fomc = endpoints(fit.fomc)$distimes, iore = endpoints(fit.iore)$distimes,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' iore.deS = endpoints(fit.iore)$distimes))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">IORE.solution &lt;- function(t, parent_0, k__iore, N)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">42328<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = (parent_0^(1 - N) - (1 - N) * k__iore * t)^(1/(1 - N))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Double First-Order in Parallel kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing decline from a defined starting value using the sum of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' two exponential decline functions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param t Time.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k1 First kinetic constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k2 Second kinetic constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param g Fraction of the starting value declining according to the first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) DFOP.solution(x, 100, 5, 0.5, 0.3), 0, 4, ylim = c(0,100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">DFOP.solution &lt;- function(t, parent_0, k1, k2, g)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">1904176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = g * parent_0 * exp(-k1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">1904176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * parent_0 * exp(-k2 * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Hockey-Stick kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing two exponential decline functions with a break point</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' between them.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit DFOP.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param tb Break point. Before this time, exponential decline according to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{k1} is calculated, after this time, exponential decline proceeds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' according to \code{k2}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) HS.solution(x, 100, 2, 0.3, 0.5), 0, 2, ylim=c(0,100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">HS.solution &lt;- function(t, parent_0, k1, k2, tb)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">22552<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">22552<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_0 * exp(-k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">22552<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_0 * exp(-k1 * tb) * exp(-k2 * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Single First-Order Reversible Binding kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing the solution of the differential equations describing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the kinetic model with first-order terms for a two-way transfer from a free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to a bound fraction, and a first-order degradation term for the free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fraction. The initial condition is a defined amount in the free fraction</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and no substance in the bound fraction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k_12 Kinetic constant describing transfer from free to bound.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k_21 Kinetic constant describing transfer from bound to free.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k_1output Kinetic constant describing degradation of the free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fraction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The value of the response variable, which is the sum of free and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' bound fractions at time \code{t}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{plot(function(x) SFORB.solution(x, 100, 0.5, 2, 3), 0, 2)}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">SFORB.solution = function(t, parent_0, k_12, k_21, k_1output) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 *</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (((k_12 + k_21 - b1)/(b2 - b1)) * exp(-b1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((k_12 + k_21 - b2)/(b1 - b2)) * exp(-b2 * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Logistic kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' an increasing rate constant, supposedly caused by microbial growth</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param kmax Maximum rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k0 Minimum rate constant effective at time zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param r Growth rate of the increase in the rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The solution of the logistic model reduces to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{SFO.solution}} if \code{k0} is equal to \code{kmax}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Reproduce the plot on page 57 of FOCUS (2014)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, ylim = c(0, 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' xlab = "Time", ylab = "Residue")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 2, col = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.8),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 3, col = 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.001, 0.2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 4, col = 4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.08, 0.2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 5, col = 5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' legend("topright", inset = 0.05,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' legend = paste0("k0 = ", c(0.0001, 0.0001, 0.0001, 0.001, 0.08),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ", r = ", c(0.2, 0.4, 0.8, 0.2, 0.2)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lty = 1:5, col = 1:5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Fit with synthetic data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logistic &lt;- mkinmod(parent = mkinsub("logistic"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms_logistic &lt;- c(kmax = 0.08, k0 = 0.0001, r = 0.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_logistic &lt;- mkinpredict(logistic,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms_logistic, c(parent = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_2_1 &lt;- add_err(d_logistic,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(x) sigma_twocomp(x, 0.5, 0.07),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1, reps = 2, digits = 5, LOD = 0.1, seed = 123456)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">228</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m &lt;- mkinfit("logistic", d_2_1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(m)$bpar</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(m)$distimes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">logistic.solution &lt;- function(t, parent_0, kmax, k0, r)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">56304<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 * (kmax / (kmax - k0 + k0 * exp (r * t))) ^(kmax/r)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/llhist.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the distribution of log likelihoods from multistart objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Produces a histogram of log-likelihoods. In addition, the likelihood of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' original fit is shown as a red vertical line.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The [multistart] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param breaks Passed to [hist]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Positioning of the legend.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main Title of the plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to [hist]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [multistart]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">llhist &lt;- function(object, breaks = "Sturges", lpos = "topleft", main = "",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">16</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">17</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object, "multistart.saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">20</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llfunc &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">21</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">1408<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(logLik(object$so))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">25</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("llhist is only implemented for multistart.saem.mmkin objects")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll_orig &lt;- logLik(attr(object, "orig"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- stats::na.omit(sapply(object, llfunc))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(las = 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> h &lt;- hist(ll, freq = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "", main = main,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = "Frequency of log likelihoods", breaks = breaks, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> freq_factor &lt;- h$counts[1] / h$density[1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(v = ll_orig, col = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), bty = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty = 1, col = c(2),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = "original fit")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/logLik.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculated the log-likelihood of a fitted mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function returns the product of the likelihood densities of each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed value, as calculated as part of the fitting procedure using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{dnorm}}, i.e. assuming normal distribution, and with the means</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predicted by the degradation model, and the standard deviations predicted by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the error model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The total number of estimated parameters returned with the value of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' likelihood is calculated as the sum of fitted degradation model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the fitted error model parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object of class \code{\link{logLik}} with the number of estimated</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters (degradation model parameters plus variance model parameters)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as attribute.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso Compare the AIC of columns of \code{\link{mmkin}} objects using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{AIC.mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_sfo &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", to = "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_t &lt;- subset(FOCUS_2006_D, value != 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nw &lt;- mkinfit(sfo_sfo, d_t, quiet = TRUE) # no weighting (weights are unity)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_obs &lt;- update(f_nw, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_tc &lt;- update(f_nw, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f_nw, f_obs, f_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">logLik.mkinfit &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val &lt;- object$logLik</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Number of estimated parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(val, "df") &lt;- length(object$bparms.optim) + length(object$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(val, "nobs") &lt;- nobs(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(val) &lt;- "logLik"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(val)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nobs.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Number of observations on which an mkinfit object was fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats nobs</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The number of rows in the data included in the mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">8</td>
+ <td class="coverage">166810<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nobs.mkinfit &lt;- function(object, ...) nrow(object$data)</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/sigma_twocomp.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Two-component error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing the standard deviation of the measurement error in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dependence of the measured value \eqn{y}:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \deqn{\sigma = \sqrt{ \sigma_{low}^2 + y^2 * {rsd}_{high}^2}} sigma =</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sqrt(sigma_low^2 + y^2 * rsd_high^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This is the error model used for example by Werner et al. (1978). The model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' proposed by Rocke and Lorenzato (1995) can be written in this form as well,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' but assumes approximate lognormal distribution of errors for high values of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' y.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param y The magnitude of the observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sigma_low The asymptotic minimum of the standard deviation for low</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rsd_high The coefficient describing the increase of the standard</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deviation with the magnitude of the observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The standard deviation of the response variable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Werner, Mario, Brooks, Samuel H., and Knott, Lancaster B. (1978)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Additive, Multiplicative, and Mixed Analytical Errors. Clinical Chemistry</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 24(11), 1895-1898.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Rocke, David M. and Lorenzato, Stefan (1995) A two-component model for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' measurement error in analytical chemistry. Technometrics 37(2), 176-184.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Ranke J and Meinecke S (2019) Error Models for the Kinetic Evaluation of Chemical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Degradation Data. *Environments* 6(12) 124</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \doi{10.3390/environments6120124}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' times &lt;- c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_pred &lt;- data.frame(time = times, parent = 100 * exp(- 0.03 * times))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(123456)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_syn &lt;- add_err(d_pred, function(y) sigma_twocomp(y, 1, 0.07),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' reps = 2, n = 1)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nls &lt;- nls(value ~ SSasymp(time, 0, parent_0, lrc), data = d_syn,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' start = list(parent_0 = 100, lrc = -3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_gnls &lt;- gnls(value ~ SSasymp(time, 0, parent_0, lrc),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' data = d_syn, na.action = na.omit,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' start = list(parent_0 = 100, lrc = -3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (length(findFunction("varConstProp")) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_gnls_tc &lt;- update(f_gnls, weights = varConstProp())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_gnls_tc_sf &lt;- update(f_gnls_tc, control = list(sigma = 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mkin &lt;- mkinfit("SFO", d_syn, error_model = "const", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mkin_tc &lt;- mkinfit("SFO", d_syn, error_model = "tc", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(f_mkin_tc, standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f_nls, f_gnls, f_gnls_tc, f_gnls_tc_sf, f_mkin, f_mkin_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">sigma_twocomp &lt;- function(y, sigma_low, rsd_high) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">4250<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt(sigma_low^2 + y^2 * rsd_high^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinsub.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param submodel Character vector of length one to specify the submodel type.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' See \code{\link{mkinmod}} for the list of allowed submodel names.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param to Vector of the names of the state variable to which a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformation shall be included in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sink Should a pathway to sink be included in the model in addition to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the pathways to other state variables?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param full_name An optional name to be used e.g. for plotting fits</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' performed with the model. You can use non-ASCII characters here, but then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' your R code will not be portable, \emph{i.e.} may produce unintended plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' results on other operating systems or system configurations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list for use with \code{\link{mkinmod}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinsub &lt;- function(submodel, to = NULL, sink = TRUE, full_name = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">16</td>
+ <td class="coverage">9864<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(type = submodel, to = to, sink = sink, full_name = full_name))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <script>$('div#files pre').each(function(i, block) {
+ hljs.highlightBlock(block);
+});</script>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+</body>
+</html>
diff --git a/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css
new file mode 100644
index 00000000..61358b13
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file
diff --git a/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css
new file mode 100644
index 00000000..9dc0f978
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
diff --git a/docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js b/docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js
new file mode 100644
index 00000000..133aeecb
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),
+d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js b/docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js
new file mode 100644
index 00000000..36831143
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js
@@ -0,0 +1,7 @@
+/**
+* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+// Only run this code in IE 8
+if (!!window.navigator.userAgent.match("MSIE 8")) {
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
+};
diff --git a/docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js b/docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js
new file mode 100644
index 00000000..22094690
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js
@@ -0,0 +1,8 @@
+/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
+ * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
+ * */
+
+// Only run this code in IE 8
+if (!!window.navigator.userAgent.match("MSIE 8")) {
+!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
+};
diff --git a/docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css b/docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css
new file mode 100644
index 00000000..6b453828
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css
@@ -0,0 +1 @@
+.container-fluid.crosstalk-bscols{margin-left:-30px;margin-right:-30px;white-space:normal}body>.container-fluid.crosstalk-bscols{margin-left:auto;margin-right:auto}.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:inline-block;padding-right:12px;vertical-align:top}@media only screen and (max-width: 480px){.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:block;padding-right:inherit}}.crosstalk-input{margin-bottom:15px}.crosstalk-input .control-label{margin-bottom:0;vertical-align:middle}.crosstalk-input input[type="checkbox"]{margin:4px 0 0;margin-top:1px;line-height:normal}.crosstalk-input .checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.crosstalk-input .checkbox>label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.crosstalk-input .checkbox input[type="checkbox"],.crosstalk-input .checkbox-inline input[type="checkbox"]{position:absolute;margin-top:2px;margin-left:-20px}.crosstalk-input .checkbox+.checkbox{margin-top:-5px}.crosstalk-input .checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.crosstalk-input .checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js
new file mode 100644
index 00000000..fd9eb53d
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js
@@ -0,0 +1,1474 @@
+(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Events = function () {
+ function Events() {
+ _classCallCheck(this, Events);
+
+ this._types = {};
+ this._seq = 0;
+ }
+
+ _createClass(Events, [{
+ key: "on",
+ value: function on(eventType, listener) {
+ var subs = this._types[eventType];
+ if (!subs) {
+ subs = this._types[eventType] = {};
+ }
+ var sub = "sub" + this._seq++;
+ subs[sub] = listener;
+ return sub;
+ }
+
+ // Returns false if no match, or string for sub name if matched
+
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ var subs = this._types[eventType];
+ if (typeof listener === "function") {
+ for (var key in subs) {
+ if (subs.hasOwnProperty(key)) {
+ if (subs[key] === listener) {
+ delete subs[key];
+ return key;
+ }
+ }
+ }
+ return false;
+ } else if (typeof listener === "string") {
+ if (subs && subs[listener]) {
+ delete subs[listener];
+ return listener;
+ }
+ return false;
+ } else {
+ throw new Error("Unexpected type for listener");
+ }
+ }
+ }, {
+ key: "trigger",
+ value: function trigger(eventType, arg, thisObj) {
+ var subs = this._types[eventType];
+ for (var key in subs) {
+ if (subs.hasOwnProperty(key)) {
+ subs[key].call(thisObj, arg);
+ }
+ }
+ }
+ }]);
+
+ return Events;
+}();
+
+exports.default = Events;
+
+},{}],2:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FilterHandle = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _events = require("./events");
+
+var _events2 = _interopRequireDefault(_events);
+
+var _filterset = require("./filterset");
+
+var _filterset2 = _interopRequireDefault(_filterset);
+
+var _group = require("./group");
+
+var _group2 = _interopRequireDefault(_group);
+
+var _util = require("./util");
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function getFilterSet(group) {
+ var fsVar = group.var("filterset");
+ var result = fsVar.get();
+ if (!result) {
+ result = new _filterset2.default();
+ fsVar.set(result);
+ }
+ return result;
+}
+
+var id = 1;
+function nextId() {
+ return id++;
+}
+
+/**
+ * Use this class to contribute to, and listen for changes to, the filter set
+ * for the given group of widgets. Filter input controls should create one
+ * `FilterHandle` and only call {@link FilterHandle#set}. Output widgets that
+ * wish to displayed filtered data should create one `FilterHandle` and use
+ * the {@link FilterHandle#filteredKeys} property and listen for change
+ * events.
+ *
+ * If two (or more) `FilterHandle` instances in the same webpage share the
+ * same group name, they will contribute to a single "filter set". Each
+ * `FilterHandle` starts out with a `null` value, which means they take
+ * nothing away from the set of data that should be shown. To make a
+ * `FilterHandle` actually remove data from the filter set, set its value to
+ * an array of keys which should be displayed. Crosstalk will aggregate the
+ * various key arrays by finding their intersection; only keys that are
+ * present in all non-null filter handles are considered part of the filter
+ * set.
+ *
+ * @param {string} [group] - The name of the Crosstalk group, or if none,
+ * null or undefined (or any other falsy value). This can be changed later
+ * via the {@link FilterHandle#setGroup} method.
+ * @param {Object} [extraInfo] - An object whose properties will be copied to
+ * the event object whenever an event is emitted.
+ */
+
+var FilterHandle = exports.FilterHandle = function () {
+ function FilterHandle(group, extraInfo) {
+ _classCallCheck(this, FilterHandle);
+
+ this._eventRelay = new _events2.default();
+ this._emitter = new util.SubscriptionTracker(this._eventRelay);
+
+ // Name of the group we're currently tracking, if any. Can change over time.
+ this._group = null;
+ // The filterSet that we're tracking, if any. Can change over time.
+ this._filterSet = null;
+ // The Var we're currently tracking, if any. Can change over time.
+ this._filterVar = null;
+ // The event handler subscription we currently have on var.on("change").
+ this._varOnChangeSub = null;
+
+ this._extraInfo = util.extend({ sender: this }, extraInfo);
+
+ this._id = "filter" + nextId();
+
+ this.setGroup(group);
+ }
+
+ /**
+ * Changes the Crosstalk group membership of this FilterHandle. If `set()` was
+ * previously called on this handle, switching groups will clear those keys
+ * from the old group's filter set. These keys will not be applied to the new
+ * group's filter set either. In other words, `setGroup()` effectively calls
+ * `clear()` before switching groups.
+ *
+ * @param {string} group - The name of the Crosstalk group, or null (or
+ * undefined) to clear the group.
+ */
+
+
+ _createClass(FilterHandle, [{
+ key: "setGroup",
+ value: function setGroup(group) {
+ var _this = this;
+
+ // If group is unchanged, do nothing
+ if (this._group === group) return;
+ // Treat null, undefined, and other falsy values the same
+ if (!this._group && !group) return;
+
+ if (this._filterVar) {
+ this._filterVar.off("change", this._varOnChangeSub);
+ this.clear();
+ this._varOnChangeSub = null;
+ this._filterVar = null;
+ this._filterSet = null;
+ }
+
+ this._group = group;
+
+ if (group) {
+ group = (0, _group2.default)(group);
+ this._filterSet = getFilterSet(group);
+ this._filterVar = (0, _group2.default)(group).var("filter");
+ var sub = this._filterVar.on("change", function (e) {
+ _this._eventRelay.trigger("change", e, _this);
+ });
+ this._varOnChangeSub = sub;
+ }
+ }
+
+ /**
+ * Combine the given `extraInfo` (if any) with the handle's default
+ * `_extraInfo` (if any).
+ * @private
+ */
+
+ }, {
+ key: "_mergeExtraInfo",
+ value: function _mergeExtraInfo(extraInfo) {
+ return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null);
+ }
+
+ /**
+ * Close the handle. This clears this handle's contribution to the filter set,
+ * and unsubscribes all event listeners.
+ */
+
+ }, {
+ key: "close",
+ value: function close() {
+ this._emitter.removeAllListeners();
+ this.clear();
+ this.setGroup(null);
+ }
+
+ /**
+ * Clear this handle's contribution to the filter set.
+ *
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any options that were
+ * passed into the `FilterHandle` constructor).
+ *
+ * @fires FilterHandle#change
+ */
+
+ }, {
+ key: "clear",
+ value: function clear(extraInfo) {
+ if (!this._filterSet) return;
+ this._filterSet.clear(this._id);
+ this._onChange(extraInfo);
+ }
+
+ /**
+ * Set this handle's contribution to the filter set. This array should consist
+ * of the keys of the rows that _should_ be displayed; any keys that are not
+ * present in the array will be considered _filtered out_. Note that multiple
+ * `FilterHandle` instances in the group may each contribute an array of keys,
+ * and only those keys that appear in _all_ of the arrays make it through the
+ * filter.
+ *
+ * @param {string[]} keys - Empty array, or array of keys. To clear the
+ * filter, don't pass an empty array; instead, use the
+ * {@link FilterHandle#clear} method.
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any options that were
+ * passed into the `FilterHandle` constructor).
+ *
+ * @fires FilterHandle#change
+ */
+
+ }, {
+ key: "set",
+ value: function set(keys, extraInfo) {
+ if (!this._filterSet) return;
+ this._filterSet.update(this._id, keys);
+ this._onChange(extraInfo);
+ }
+
+ /**
+ * @return {string[]|null} - Either: 1) an array of keys that made it through
+ * all of the `FilterHandle` instances, or, 2) `null`, which means no filter
+ * is being applied (all data should be displayed).
+ */
+
+ }, {
+ key: "on",
+
+
+ /**
+ * Subscribe to events on this `FilterHandle`.
+ *
+ * @param {string} eventType - Indicates the type of events to listen to.
+ * Currently, only `"change"` is supported.
+ * @param {FilterHandle~listener} listener - The callback function that
+ * will be invoked when the event occurs.
+ * @return {string} - A token to pass to {@link FilterHandle#off} to cancel
+ * this subscription.
+ */
+ value: function on(eventType, listener) {
+ return this._emitter.on(eventType, listener);
+ }
+
+ /**
+ * Cancel event subscriptions created by {@link FilterHandle#on}.
+ *
+ * @param {string} eventType - The type of event to unsubscribe.
+ * @param {string|FilterHandle~listener} listener - Either the callback
+ * function previously passed into {@link FilterHandle#on}, or the
+ * string that was returned from {@link FilterHandle#on}.
+ */
+
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ return this._emitter.off(eventType, listener);
+ }
+ }, {
+ key: "_onChange",
+ value: function _onChange(extraInfo) {
+ if (!this._filterSet) return;
+ this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));
+ }
+
+ /**
+ * @callback FilterHandle~listener
+ * @param {Object} event - An object containing details of the event. For
+ * `"change"` events, this includes the properties `value` (the new
+ * value of the filter set, or `null` if no filter set is active),
+ * `oldValue` (the previous value of the filter set), and `sender` (the
+ * `FilterHandle` instance that made the change).
+ */
+
+ }, {
+ key: "filteredKeys",
+ get: function get() {
+ return this._filterSet ? this._filterSet.value : null;
+ }
+ }]);
+
+ return FilterHandle;
+}();
+
+/**
+ * @event FilterHandle#change
+ * @type {object}
+ * @property {object} value - The new value of the filter set, or `null`
+ * if no filter set is active.
+ * @property {object} oldValue - The previous value of the filter set.
+ * @property {FilterHandle} sender - The `FilterHandle` instance that
+ * changed the value.
+ */
+
+},{"./events":1,"./filterset":3,"./group":4,"./util":11}],3:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _util = require("./util");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function naturalComparator(a, b) {
+ if (a === b) {
+ return 0;
+ } else if (a < b) {
+ return -1;
+ } else if (a > b) {
+ return 1;
+ }
+}
+
+/**
+ * @private
+ */
+
+var FilterSet = function () {
+ function FilterSet() {
+ _classCallCheck(this, FilterSet);
+
+ this.reset();
+ }
+
+ _createClass(FilterSet, [{
+ key: "reset",
+ value: function reset() {
+ // Key: handle ID, Value: array of selected keys, or null
+ this._handles = {};
+ // Key: key string, Value: count of handles that include it
+ this._keys = {};
+ this._value = null;
+ this._activeHandles = 0;
+ }
+ }, {
+ key: "update",
+ value: function update(handleId, keys) {
+ if (keys !== null) {
+ keys = keys.slice(0); // clone before sorting
+ keys.sort(naturalComparator);
+ }
+
+ var _diffSortedLists = (0, _util.diffSortedLists)(this._handles[handleId], keys),
+ added = _diffSortedLists.added,
+ removed = _diffSortedLists.removed;
+
+ this._handles[handleId] = keys;
+
+ for (var i = 0; i < added.length; i++) {
+ this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;
+ }
+ for (var _i = 0; _i < removed.length; _i++) {
+ this._keys[removed[_i]]--;
+ }
+
+ this._updateValue(keys);
+ }
+
+ /**
+ * @param {string[]} keys Sorted array of strings that indicate
+ * a superset of possible keys.
+ * @private
+ */
+
+ }, {
+ key: "_updateValue",
+ value: function _updateValue() {
+ var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._allKeys;
+
+ var handleCount = Object.keys(this._handles).length;
+ if (handleCount === 0) {
+ this._value = null;
+ } else {
+ this._value = [];
+ for (var i = 0; i < keys.length; i++) {
+ var count = this._keys[keys[i]];
+ if (count === handleCount) {
+ this._value.push(keys[i]);
+ }
+ }
+ }
+ }
+ }, {
+ key: "clear",
+ value: function clear(handleId) {
+ if (typeof this._handles[handleId] === "undefined") {
+ return;
+ }
+
+ var keys = this._handles[handleId];
+ if (!keys) {
+ keys = [];
+ }
+
+ for (var i = 0; i < keys.length; i++) {
+ this._keys[keys[i]]--;
+ }
+ delete this._handles[handleId];
+
+ this._updateValue();
+ }
+ }, {
+ key: "value",
+ get: function get() {
+ return this._value;
+ }
+ }, {
+ key: "_allKeys",
+ get: function get() {
+ var allKeys = Object.keys(this._keys);
+ allKeys.sort(naturalComparator);
+ return allKeys;
+ }
+ }]);
+
+ return FilterSet;
+}();
+
+exports.default = FilterSet;
+
+},{"./util":11}],4:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+exports.default = group;
+
+var _var2 = require("./var");
+
+var _var3 = _interopRequireDefault(_var2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+// Use a global so that multiple copies of crosstalk.js can be loaded and still
+// have groups behave as singletons across all copies.
+global.__crosstalk_groups = global.__crosstalk_groups || {};
+var groups = global.__crosstalk_groups;
+
+function group(groupName) {
+ if (groupName && typeof groupName === "string") {
+ if (!groups.hasOwnProperty(groupName)) {
+ groups[groupName] = new Group(groupName);
+ }
+ return groups[groupName];
+ } else if ((typeof groupName === "undefined" ? "undefined" : _typeof(groupName)) === "object" && groupName._vars && groupName.var) {
+ // Appears to already be a group object
+ return groupName;
+ } else if (Array.isArray(groupName) && groupName.length == 1 && typeof groupName[0] === "string") {
+ return group(groupName[0]);
+ } else {
+ throw new Error("Invalid groupName argument");
+ }
+}
+
+var Group = function () {
+ function Group(name) {
+ _classCallCheck(this, Group);
+
+ this.name = name;
+ this._vars = {};
+ }
+
+ _createClass(Group, [{
+ key: "var",
+ value: function _var(name) {
+ if (!name || typeof name !== "string") {
+ throw new Error("Invalid var name");
+ }
+
+ if (!this._vars.hasOwnProperty(name)) this._vars[name] = new _var3.default(this, name);
+ return this._vars[name];
+ }
+ }, {
+ key: "has",
+ value: function has(name) {
+ if (!name || typeof name !== "string") {
+ throw new Error("Invalid var name");
+ }
+
+ return this._vars.hasOwnProperty(name);
+ }
+ }]);
+
+ return Group;
+}();
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./var":12}],5:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _group = require("./group");
+
+var _group2 = _interopRequireDefault(_group);
+
+var _selection = require("./selection");
+
+var _filter = require("./filter");
+
+var _input = require("./input");
+
+require("./input_selectize");
+
+require("./input_checkboxgroup");
+
+require("./input_slider");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var defaultGroup = (0, _group2.default)("default");
+
+function var_(name) {
+ return defaultGroup.var(name);
+}
+
+function has(name) {
+ return defaultGroup.has(name);
+}
+
+if (global.Shiny) {
+ global.Shiny.addCustomMessageHandler("update-client-value", function (message) {
+ if (typeof message.group === "string") {
+ (0, _group2.default)(message.group).var(message.name).set(message.value);
+ } else {
+ var_(message.name).set(message.value);
+ }
+ });
+}
+
+var crosstalk = {
+ group: _group2.default,
+ var: var_,
+ has: has,
+ SelectionHandle: _selection.SelectionHandle,
+ FilterHandle: _filter.FilterHandle,
+ bind: _input.bind
+};
+
+/**
+ * @namespace crosstalk
+ */
+exports.default = crosstalk;
+
+global.crosstalk = crosstalk;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.register = register;
+exports.bind = bind;
+var $ = global.jQuery;
+
+var bindings = {};
+
+function register(reg) {
+ bindings[reg.className] = reg;
+ if (global.document && global.document.readyState !== "complete") {
+ $(function () {
+ bind();
+ });
+ } else if (global.document) {
+ setTimeout(bind, 100);
+ }
+}
+
+function bind() {
+ Object.keys(bindings).forEach(function (className) {
+ var binding = bindings[className];
+ $("." + binding.className).not(".crosstalk-input-bound").each(function (i, el) {
+ bindInstance(binding, el);
+ });
+ });
+}
+
+// Escape jQuery identifier
+function $escape(val) {
+ return val.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
+}
+
+function bindEl(el) {
+ var $el = $(el);
+ Object.keys(bindings).forEach(function (className) {
+ if ($el.hasClass(className) && !$el.hasClass("crosstalk-input-bound")) {
+ var binding = bindings[className];
+ bindInstance(binding, el);
+ }
+ });
+}
+
+function bindInstance(binding, el) {
+ var jsonEl = $(el).find("script[type='application/json'][data-for='" + $escape(el.id) + "']");
+ var data = JSON.parse(jsonEl[0].innerText);
+
+ var instance = binding.factory(el, data);
+ $(el).data("crosstalk-instance", instance);
+ $(el).addClass("crosstalk-input-bound");
+}
+
+if (global.Shiny) {
+ var inputBinding = new global.Shiny.InputBinding();
+ var _$ = global.jQuery;
+ _$.extend(inputBinding, {
+ find: function find(scope) {
+ return _$(scope).find(".crosstalk-input");
+ },
+ initialize: function initialize(el) {
+ if (!_$(el).hasClass("crosstalk-input-bound")) {
+ bindEl(el);
+ }
+ },
+ getId: function getId(el) {
+ return el.id;
+ },
+ getValue: function getValue(el) {},
+ setValue: function setValue(el, value) {},
+ receiveMessage: function receiveMessage(el, data) {},
+ subscribe: function subscribe(el, callback) {
+ _$(el).data("crosstalk-instance").resume();
+ },
+ unsubscribe: function unsubscribe(el) {
+ _$(el).data("crosstalk-instance").suspend();
+ }
+ });
+ global.Shiny.inputBindings.register(inputBinding, "crosstalk.inputBinding");
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{}],7:[function(require,module,exports){
+(function (global){
+"use strict";
+
+var _input = require("./input");
+
+var input = _interopRequireWildcard(_input);
+
+var _filter = require("./filter");
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var $ = global.jQuery;
+
+input.register({
+ className: "crosstalk-input-checkboxgroup",
+
+ factory: function factory(el, data) {
+ /*
+ * map: {"groupA": ["keyA", "keyB", ...], ...}
+ * group: "ct-groupname"
+ */
+ var ctHandle = new _filter.FilterHandle(data.group);
+
+ var lastKnownKeys = void 0;
+ var $el = $(el);
+ $el.on("change", "input[type='checkbox']", function () {
+ var checked = $el.find("input[type='checkbox']:checked");
+ if (checked.length === 0) {
+ lastKnownKeys = null;
+ ctHandle.clear();
+ } else {
+ var keys = {};
+ checked.each(function () {
+ data.map[this.value].forEach(function (key) {
+ keys[key] = true;
+ });
+ });
+ var keyArray = Object.keys(keys);
+ keyArray.sort();
+ lastKnownKeys = keyArray;
+ ctHandle.set(keyArray);
+ }
+ });
+
+ return {
+ suspend: function suspend() {
+ ctHandle.clear();
+ },
+ resume: function resume() {
+ if (lastKnownKeys) ctHandle.set(lastKnownKeys);
+ }
+ };
+ }
+});
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./input":6}],8:[function(require,module,exports){
+(function (global){
+"use strict";
+
+var _input = require("./input");
+
+var input = _interopRequireWildcard(_input);
+
+var _util = require("./util");
+
+var util = _interopRequireWildcard(_util);
+
+var _filter = require("./filter");
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var $ = global.jQuery;
+
+input.register({
+ className: "crosstalk-input-select",
+
+ factory: function factory(el, data) {
+ /*
+ * items: {value: [...], label: [...]}
+ * map: {"groupA": ["keyA", "keyB", ...], ...}
+ * group: "ct-groupname"
+ */
+
+ var first = [{ value: "", label: "(All)" }];
+ var items = util.dataframeToD3(data.items);
+ var opts = {
+ options: first.concat(items),
+ valueField: "value",
+ labelField: "label",
+ searchField: "label"
+ };
+
+ var select = $(el).find("select")[0];
+
+ var selectize = $(select).selectize(opts)[0].selectize;
+
+ var ctHandle = new _filter.FilterHandle(data.group);
+
+ var lastKnownKeys = void 0;
+ selectize.on("change", function () {
+ if (selectize.items.length === 0) {
+ lastKnownKeys = null;
+ ctHandle.clear();
+ } else {
+ var keys = {};
+ selectize.items.forEach(function (group) {
+ data.map[group].forEach(function (key) {
+ keys[key] = true;
+ });
+ });
+ var keyArray = Object.keys(keys);
+ keyArray.sort();
+ lastKnownKeys = keyArray;
+ ctHandle.set(keyArray);
+ }
+ });
+
+ return {
+ suspend: function suspend() {
+ ctHandle.clear();
+ },
+ resume: function resume() {
+ if (lastKnownKeys) ctHandle.set(lastKnownKeys);
+ }
+ };
+ }
+});
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./input":6,"./util":11}],9:[function(require,module,exports){
+(function (global){
+"use strict";
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _input = require("./input");
+
+var input = _interopRequireWildcard(_input);
+
+var _filter = require("./filter");
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var $ = global.jQuery;
+var strftime = global.strftime;
+
+input.register({
+ className: "crosstalk-input-slider",
+
+ factory: function factory(el, data) {
+ /*
+ * map: {"groupA": ["keyA", "keyB", ...], ...}
+ * group: "ct-groupname"
+ */
+ var ctHandle = new _filter.FilterHandle(data.group);
+
+ var opts = {};
+ var $el = $(el).find("input");
+ var dataType = $el.data("data-type");
+ var timeFormat = $el.data("time-format");
+ var round = $el.data("round");
+ var timeFormatter = void 0;
+
+ // Set up formatting functions
+ if (dataType === "date") {
+ timeFormatter = strftime.utc();
+ opts.prettify = function (num) {
+ return timeFormatter(timeFormat, new Date(num));
+ };
+ } else if (dataType === "datetime") {
+ var timezone = $el.data("timezone");
+ if (timezone) timeFormatter = strftime.timezone(timezone);else timeFormatter = strftime;
+
+ opts.prettify = function (num) {
+ return timeFormatter(timeFormat, new Date(num));
+ };
+ } else if (dataType === "number") {
+ if (typeof round !== "undefined") opts.prettify = function (num) {
+ var factor = Math.pow(10, round);
+ return Math.round(num * factor) / factor;
+ };
+ }
+
+ $el.ionRangeSlider(opts);
+
+ function getValue() {
+ var result = $el.data("ionRangeSlider").result;
+
+ // Function for converting numeric value from slider to appropriate type.
+ var convert = void 0;
+ var dataType = $el.data("data-type");
+ if (dataType === "date") {
+ convert = function convert(val) {
+ return formatDateUTC(new Date(+val));
+ };
+ } else if (dataType === "datetime") {
+ convert = function convert(val) {
+ // Convert ms to s
+ return +val / 1000;
+ };
+ } else {
+ convert = function convert(val) {
+ return +val;
+ };
+ }
+
+ if ($el.data("ionRangeSlider").options.type === "double") {
+ return [convert(result.from), convert(result.to)];
+ } else {
+ return convert(result.from);
+ }
+ }
+
+ var lastKnownKeys = null;
+
+ $el.on("change.crosstalkSliderInput", function (event) {
+ if (!$el.data("updating") && !$el.data("animating")) {
+ var _getValue = getValue(),
+ _getValue2 = _slicedToArray(_getValue, 2),
+ from = _getValue2[0],
+ to = _getValue2[1];
+
+ var keys = [];
+ for (var i = 0; i < data.values.length; i++) {
+ var val = data.values[i];
+ if (val >= from && val <= to) {
+ keys.push(data.keys[i]);
+ }
+ }
+ keys.sort();
+ ctHandle.set(keys);
+ lastKnownKeys = keys;
+ }
+ });
+
+ // let $el = $(el);
+ // $el.on("change", "input[type="checkbox"]", function() {
+ // let checked = $el.find("input[type="checkbox"]:checked");
+ // if (checked.length === 0) {
+ // ctHandle.clear();
+ // } else {
+ // let keys = {};
+ // checked.each(function() {
+ // data.map[this.value].forEach(function(key) {
+ // keys[key] = true;
+ // });
+ // });
+ // let keyArray = Object.keys(keys);
+ // keyArray.sort();
+ // ctHandle.set(keyArray);
+ // }
+ // });
+
+ return {
+ suspend: function suspend() {
+ ctHandle.clear();
+ },
+ resume: function resume() {
+ if (lastKnownKeys) ctHandle.set(lastKnownKeys);
+ }
+ };
+ }
+});
+
+// Convert a number to a string with leading zeros
+function padZeros(n, digits) {
+ var str = n.toString();
+ while (str.length < digits) {
+ str = "0" + str;
+ }return str;
+}
+
+// Given a Date object, return a string in yyyy-mm-dd format, using the
+// UTC date. This may be a day off from the date in the local time zone.
+function formatDateUTC(date) {
+ if (date instanceof Date) {
+ return date.getUTCFullYear() + "-" + padZeros(date.getUTCMonth() + 1, 2) + "-" + padZeros(date.getUTCDate(), 2);
+ } else {
+ return null;
+ }
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./input":6}],10:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.SelectionHandle = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _events = require("./events");
+
+var _events2 = _interopRequireDefault(_events);
+
+var _group = require("./group");
+
+var _group2 = _interopRequireDefault(_group);
+
+var _util = require("./util");
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * Use this class to read and write (and listen for changes to) the selection
+ * for a Crosstalk group. This is intended to be used for linked brushing.
+ *
+ * If two (or more) `SelectionHandle` instances in the same webpage share the
+ * same group name, they will share the same state. Setting the selection using
+ * one `SelectionHandle` instance will result in the `value` property instantly
+ * changing across the others, and `"change"` event listeners on all instances
+ * (including the one that initiated the sending) will fire.
+ *
+ * @param {string} [group] - The name of the Crosstalk group, or if none,
+ * null or undefined (or any other falsy value). This can be changed later
+ * via the [SelectionHandle#setGroup](#setGroup) method.
+ * @param {Object} [extraInfo] - An object whose properties will be copied to
+ * the event object whenever an event is emitted.
+ */
+var SelectionHandle = exports.SelectionHandle = function () {
+ function SelectionHandle() {
+ var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ var extraInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+ _classCallCheck(this, SelectionHandle);
+
+ this._eventRelay = new _events2.default();
+ this._emitter = new util.SubscriptionTracker(this._eventRelay);
+
+ // Name of the group we're currently tracking, if any. Can change over time.
+ this._group = null;
+ // The Var we're currently tracking, if any. Can change over time.
+ this._var = null;
+ // The event handler subscription we currently have on var.on("change").
+ this._varOnChangeSub = null;
+
+ this._extraInfo = util.extend({ sender: this }, extraInfo);
+
+ this.setGroup(group);
+ }
+
+ /**
+ * Changes the Crosstalk group membership of this SelectionHandle. The group
+ * being switched away from (if any) will not have its selection value
+ * modified as a result of calling `setGroup`, even if this handle was the
+ * most recent handle to set the selection of the group.
+ *
+ * The group being switched to (if any) will also not have its selection value
+ * modified as a result of calling `setGroup`. If you want to set the
+ * selection value of the new group, call `set` explicitly.
+ *
+ * @param {string} group - The name of the Crosstalk group, or null (or
+ * undefined) to clear the group.
+ */
+
+
+ _createClass(SelectionHandle, [{
+ key: "setGroup",
+ value: function setGroup(group) {
+ var _this = this;
+
+ // If group is unchanged, do nothing
+ if (this._group === group) return;
+ // Treat null, undefined, and other falsy values the same
+ if (!this._group && !group) return;
+
+ if (this._var) {
+ this._var.off("change", this._varOnChangeSub);
+ this._var = null;
+ this._varOnChangeSub = null;
+ }
+
+ this._group = group;
+
+ if (group) {
+ this._var = (0, _group2.default)(group).var("selection");
+ var sub = this._var.on("change", function (e) {
+ _this._eventRelay.trigger("change", e, _this);
+ });
+ this._varOnChangeSub = sub;
+ }
+ }
+
+ /**
+ * Retrieves the current selection for the group represented by this
+ * `SelectionHandle`.
+ *
+ * - If no selection is active, then this value will be falsy.
+ * - If a selection is active, but no data points are selected, then this
+ * value will be an empty array.
+ * - If a selection is active, and data points are selected, then the keys
+ * of the selected data points will be present in the array.
+ */
+
+ }, {
+ key: "_mergeExtraInfo",
+
+
+ /**
+ * Combines the given `extraInfo` (if any) with the handle's default
+ * `_extraInfo` (if any).
+ * @private
+ */
+ value: function _mergeExtraInfo(extraInfo) {
+ // Important incidental effect: shallow clone is returned
+ return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null);
+ }
+
+ /**
+ * Overwrites the current selection for the group, and raises the `"change"`
+ * event among all of the group's '`SelectionHandle` instances (including
+ * this one).
+ *
+ * @fires SelectionHandle#change
+ * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see
+ * {@link SelectionHandle#value}).
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any options that were
+ * passed into the `SelectionHandle` constructor).
+ */
+
+ }, {
+ key: "set",
+ value: function set(selectedKeys, extraInfo) {
+ if (this._var) this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));
+ }
+
+ /**
+ * Overwrites the current selection for the group, and raises the `"change"`
+ * event among all of the group's '`SelectionHandle` instances (including
+ * this one).
+ *
+ * @fires SelectionHandle#change
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any that were passed
+ * into the `SelectionHandle` constructor).
+ */
+
+ }, {
+ key: "clear",
+ value: function clear(extraInfo) {
+ if (this._var) this.set(void 0, this._mergeExtraInfo(extraInfo));
+ }
+
+ /**
+ * Subscribes to events on this `SelectionHandle`.
+ *
+ * @param {string} eventType - Indicates the type of events to listen to.
+ * Currently, only `"change"` is supported.
+ * @param {SelectionHandle~listener} listener - The callback function that
+ * will be invoked when the event occurs.
+ * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel
+ * this subscription.
+ */
+
+ }, {
+ key: "on",
+ value: function on(eventType, listener) {
+ return this._emitter.on(eventType, listener);
+ }
+
+ /**
+ * Cancels event subscriptions created by {@link SelectionHandle#on}.
+ *
+ * @param {string} eventType - The type of event to unsubscribe.
+ * @param {string|SelectionHandle~listener} listener - Either the callback
+ * function previously passed into {@link SelectionHandle#on}, or the
+ * string that was returned from {@link SelectionHandle#on}.
+ */
+
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ return this._emitter.off(eventType, listener);
+ }
+
+ /**
+ * Shuts down the `SelectionHandle` object.
+ *
+ * Removes all event listeners that were added through this handle.
+ */
+
+ }, {
+ key: "close",
+ value: function close() {
+ this._emitter.removeAllListeners();
+ this.setGroup(null);
+ }
+ }, {
+ key: "value",
+ get: function get() {
+ return this._var ? this._var.get() : null;
+ }
+ }]);
+
+ return SelectionHandle;
+}();
+
+/**
+ * @callback SelectionHandle~listener
+ * @param {Object} event - An object containing details of the event. For
+ * `"change"` events, this includes the properties `value` (the new
+ * value of the selection, or `undefined` if no selection is active),
+ * `oldValue` (the previous value of the selection), and `sender` (the
+ * `SelectionHandle` instance that made the change).
+ */
+
+/**
+ * @event SelectionHandle#change
+ * @type {object}
+ * @property {object} value - The new value of the selection, or `undefined`
+ * if no selection is active.
+ * @property {object} oldValue - The previous value of the selection.
+ * @property {SelectionHandle} sender - The `SelectionHandle` instance that
+ * changed the value.
+ */
+
+},{"./events":1,"./group":4,"./util":11}],11:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+exports.extend = extend;
+exports.checkSorted = checkSorted;
+exports.diffSortedLists = diffSortedLists;
+exports.dataframeToD3 = dataframeToD3;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function extend(target) {
+ for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ sources[_key - 1] = arguments[_key];
+ }
+
+ for (var i = 0; i < sources.length; i++) {
+ var src = sources[i];
+ if (typeof src === "undefined" || src === null) continue;
+
+ for (var key in src) {
+ if (src.hasOwnProperty(key)) {
+ target[key] = src[key];
+ }
+ }
+ }
+ return target;
+}
+
+function checkSorted(list) {
+ for (var i = 1; i < list.length; i++) {
+ if (list[i] <= list[i - 1]) {
+ throw new Error("List is not sorted or contains duplicate");
+ }
+ }
+}
+
+function diffSortedLists(a, b) {
+ var i_a = 0;
+ var i_b = 0;
+
+ if (!a) a = [];
+ if (!b) b = [];
+
+ var a_only = [];
+ var b_only = [];
+
+ checkSorted(a);
+ checkSorted(b);
+
+ while (i_a < a.length && i_b < b.length) {
+ if (a[i_a] === b[i_b]) {
+ i_a++;
+ i_b++;
+ } else if (a[i_a] < b[i_b]) {
+ a_only.push(a[i_a++]);
+ } else {
+ b_only.push(b[i_b++]);
+ }
+ }
+
+ if (i_a < a.length) a_only = a_only.concat(a.slice(i_a));
+ if (i_b < b.length) b_only = b_only.concat(b.slice(i_b));
+ return {
+ removed: a_only,
+ added: b_only
+ };
+}
+
+// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }
+// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]
+function dataframeToD3(df) {
+ var names = [];
+ var length = void 0;
+ for (var name in df) {
+ if (df.hasOwnProperty(name)) names.push(name);
+ if (_typeof(df[name]) !== "object" || typeof df[name].length === "undefined") {
+ throw new Error("All fields must be arrays");
+ } else if (typeof length !== "undefined" && length !== df[name].length) {
+ throw new Error("All fields must be arrays of the same length");
+ }
+ length = df[name].length;
+ }
+ var results = [];
+ var item = void 0;
+ for (var row = 0; row < length; row++) {
+ item = {};
+ for (var col = 0; col < names.length; col++) {
+ item[names[col]] = df[names[col]][row];
+ }
+ results.push(item);
+ }
+ return results;
+}
+
+/**
+ * Keeps track of all event listener additions/removals and lets all active
+ * listeners be removed with a single operation.
+ *
+ * @private
+ */
+
+var SubscriptionTracker = exports.SubscriptionTracker = function () {
+ function SubscriptionTracker(emitter) {
+ _classCallCheck(this, SubscriptionTracker);
+
+ this._emitter = emitter;
+ this._subs = {};
+ }
+
+ _createClass(SubscriptionTracker, [{
+ key: "on",
+ value: function on(eventType, listener) {
+ var sub = this._emitter.on(eventType, listener);
+ this._subs[sub] = eventType;
+ return sub;
+ }
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ var sub = this._emitter.off(eventType, listener);
+ if (sub) {
+ delete this._subs[sub];
+ }
+ return sub;
+ }
+ }, {
+ key: "removeAllListeners",
+ value: function removeAllListeners() {
+ var _this = this;
+
+ var current_subs = this._subs;
+ this._subs = {};
+ Object.keys(current_subs).forEach(function (sub) {
+ _this._emitter.off(current_subs[sub], sub);
+ });
+ }
+ }]);
+
+ return SubscriptionTracker;
+}();
+
+},{}],12:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _events = require("./events");
+
+var _events2 = _interopRequireDefault(_events);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Var = function () {
+ function Var(group, name, /*optional*/value) {
+ _classCallCheck(this, Var);
+
+ this._group = group;
+ this._name = name;
+ this._value = value;
+ this._events = new _events2.default();
+ }
+
+ _createClass(Var, [{
+ key: "get",
+ value: function get() {
+ return this._value;
+ }
+ }, {
+ key: "set",
+ value: function set(value, /*optional*/event) {
+ if (this._value === value) {
+ // Do nothing; the value hasn't changed
+ return;
+ }
+ var oldValue = this._value;
+ this._value = value;
+ // Alert JavaScript listeners that the value has changed
+ var evt = {};
+ if (event && (typeof event === "undefined" ? "undefined" : _typeof(event)) === "object") {
+ for (var k in event) {
+ if (event.hasOwnProperty(k)) evt[k] = event[k];
+ }
+ }
+ evt.oldValue = oldValue;
+ evt.value = value;
+ this._events.trigger("change", evt, this);
+
+ // TODO: Make this extensible, to let arbitrary back-ends know that
+ // something has changed
+ if (global.Shiny && global.Shiny.onInputChange) {
+ global.Shiny.onInputChange(".clientValue-" + (this._group.name !== null ? this._group.name + "-" : "") + this._name, typeof value === "undefined" ? null : value);
+ }
+ }
+ }, {
+ key: "on",
+ value: function on(eventType, listener) {
+ return this._events.on(eventType, listener);
+ }
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ return this._events.off(eventType, listener);
+ }
+ }]);
+
+ return Var;
+}();
+
+exports.default = Var;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./events":1}]},{},[5])
+//# sourceMappingURL=crosstalk.js.map
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map
new file mode 100644
index 00000000..cff94f08
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map
@@ -0,0 +1,37 @@
+{
+ "version": 3,
+ "sources": [
+ "node_modules/browser-pack/_prelude.js",
+ "javascript/src/events.js",
+ "javascript/src/filter.js",
+ "javascript/src/filterset.js",
+ "javascript/src/group.js",
+ "javascript/src/index.js",
+ "javascript/src/input.js",
+ "javascript/src/input_checkboxgroup.js",
+ "javascript/src/input_selectize.js",
+ "javascript/src/input_slider.js",
+ "javascript/src/selection.js",
+ "javascript/src/util.js",
+ "javascript/src/var.js"
+ ],
+ "names": [],
+ "mappings": "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",
+ "file": "generated.js",
+ "sourceRoot": "",
+ "sourcesContent": [
+ "(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()",
+ "export default class Events {\n constructor() {\n this._types = {};\n this._seq = 0;\n }\n\n on(eventType, listener) {\n let subs = this._types[eventType];\n if (!subs) {\n subs = this._types[eventType] = {};\n }\n let sub = \"sub\" + (this._seq++);\n subs[sub] = listener;\n return sub;\n }\n\n // Returns false if no match, or string for sub name if matched\n off(eventType, listener) {\n let subs = this._types[eventType];\n if (typeof(listener) === \"function\") {\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n if (subs[key] === listener) {\n delete subs[key];\n return key;\n }\n }\n }\n return false;\n } else if (typeof(listener) === \"string\") {\n if (subs && subs[listener]) {\n delete subs[listener];\n return listener;\n }\n return false;\n } else {\n throw new Error(\"Unexpected type for listener\");\n }\n }\n\n trigger(eventType, arg, thisObj) {\n let subs = this._types[eventType];\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n subs[key].call(thisObj, arg);\n }\n }\n }\n}\n",
+ "import Events from \"./events\";\nimport FilterSet from \"./filterset\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\nfunction getFilterSet(group) {\n let fsVar = group.var(\"filterset\");\n let result = fsVar.get();\n if (!result) {\n result = new FilterSet();\n fsVar.set(result);\n }\n return result;\n}\n\nlet id = 1;\nfunction nextId() {\n return id++;\n}\n\n/**\n * Use this class to contribute to, and listen for changes to, the filter set\n * for the given group of widgets. Filter input controls should create one\n * `FilterHandle` and only call {@link FilterHandle#set}. Output widgets that\n * wish to displayed filtered data should create one `FilterHandle` and use\n * the {@link FilterHandle#filteredKeys} property and listen for change\n * events.\n *\n * If two (or more) `FilterHandle` instances in the same webpage share the\n * same group name, they will contribute to a single \"filter set\". Each\n * `FilterHandle` starts out with a `null` value, which means they take\n * nothing away from the set of data that should be shown. To make a\n * `FilterHandle` actually remove data from the filter set, set its value to\n * an array of keys which should be displayed. Crosstalk will aggregate the\n * various key arrays by finding their intersection; only keys that are\n * present in all non-null filter handles are considered part of the filter\n * set.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the {@link FilterHandle#setGroup} method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class FilterHandle {\n constructor(group, extraInfo) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The filterSet that we're tracking, if any. Can change over time.\n this._filterSet = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._filterVar = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this._id = \"filter\" + nextId();\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this FilterHandle. If `set()` was\n * previously called on this handle, switching groups will clear those keys\n * from the old group's filter set. These keys will not be applied to the new\n * group's filter set either. In other words, `setGroup()` effectively calls\n * `clear()` before switching groups.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._filterVar) {\n this._filterVar.off(\"change\", this._varOnChangeSub);\n this.clear();\n this._varOnChangeSub = null;\n this._filterVar = null;\n this._filterSet = null;\n }\n\n this._group = group;\n\n if (group) {\n group = grp(group);\n this._filterSet = getFilterSet(group);\n this._filterVar = grp(group).var(\"filter\");\n let sub = this._filterVar.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n",
+ "import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n",
+ "import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n",
+ "import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n",
+ "let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n",
+ "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n",
+ "import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n",
+ "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n",
+ "import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n",
+ "export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n",
+ "import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"
+ ]
+} \ No newline at end of file
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js
new file mode 100644
index 00000000..b7ec0ac9
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js
@@ -0,0 +1,2 @@
+!function o(u,a,l){function s(n,e){if(!a[n]){if(!u[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(f)return f(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[n]={exports:{}};u[n][0].call(i.exports,function(e){var t=u[n][1][e];return s(t||e)},i,i.exports,o,u,a,l)}return a[n].exports}for(var f="function"==typeof require&&require,e=0;e<l.length;e++)s(l[e]);return s}({1:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();var i=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._types={},this._seq=0}return r(e,[{key:"on",value:function(e,t){var n=this._types[e];n||(n=this._types[e]={});var r="sub"+this._seq++;return n[r]=t,r}},{key:"off",value:function(e,t){var n=this._types[e];if("function"==typeof t){for(var r in n)if(n.hasOwnProperty(r)&&n[r]===t)return delete n[r],r;return!1}if("string"==typeof t)return!(!n||!n[t])&&(delete n[t],t);throw new Error("Unexpected type for listener")}},{key:"trigger",value:function(e,t,n){var r=this._types[e];for(var i in r)r.hasOwnProperty(i)&&r[i].call(n,t)}}]),e}();n.default=i},{}],2:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.FilterHandle=void 0;var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=l(e("./events")),o=l(e("./filterset")),u=l(e("./group")),a=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(e("./util"));function l(e){return e&&e.__esModule?e:{default:e}}var s=1;n.FilterHandle=function(){function n(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),this._eventRelay=new i.default,this._emitter=new a.SubscriptionTracker(this._eventRelay),this._group=null,this._filterSet=null,this._filterVar=null,this._varOnChangeSub=null,this._extraInfo=a.extend({sender:this},t),this._id="filter"+s++,this.setGroup(e)}return r(n,[{key:"setGroup",value:function(e){var t,n,r=this;if(this._group!==e&&((this._group||e)&&(this._filterVar&&(this._filterVar.off("change",this._varOnChangeSub),this.clear(),this._varOnChangeSub=null,this._filterVar=null,this._filterSet=null),this._group=e))){e=(0,u.default)(e),this._filterSet=(t=e.var("filterset"),(n=t.get())||(n=new o.default,t.set(n)),n),this._filterVar=(0,u.default)(e).var("filter");var i=this._filterVar.on("change",function(e){r._eventRelay.trigger("change",e,r)});this._varOnChangeSub=i}}},{key:"_mergeExtraInfo",value:function(e){return a.extend({},this._extraInfo?this._extraInfo:null,e||null)}},{key:"close",value:function(){this._emitter.removeAllListeners(),this.clear(),this.setGroup(null)}},{key:"clear",value:function(e){this._filterSet&&(this._filterSet.clear(this._id),this._onChange(e))}},{key:"set",value:function(e,t){this._filterSet&&(this._filterSet.update(this._id,e),this._onChange(t))}},{key:"on",value:function(e,t){return this._emitter.on(e,t)}},{key:"off",value:function(e,t){return this._emitter.off(e,t)}},{key:"_onChange",value:function(e){this._filterSet&&this._filterVar.set(this._filterSet.value,this._mergeExtraInfo(e))}},{key:"filteredKeys",get:function(){return this._filterSet?this._filterSet.value:null}}]),n}()},{"./events":1,"./filterset":3,"./group":4,"./util":11}],3:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),a=e("./util");function l(e,t){return e===t?0:e<t?-1:t<e?1:void 0}var i=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.reset()}return r(e,[{key:"reset",value:function(){this._handles={},this._keys={},this._value=null,this._activeHandles=0}},{key:"update",value:function(e,t){null!==t&&(t=t.slice(0)).sort(l);var n=(0,a.diffSortedLists)(this._handles[e],t),r=n.added,i=n.removed;this._handles[e]=t;for(var o=0;o<r.length;o++)this._keys[r[o]]=(this._keys[r[o]]||0)+1;for(var u=0;u<i.length;u++)this._keys[i[u]]--;this._updateValue(t)}},{key:"_updateValue",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this._allKeys,t=Object.keys(this._handles).length;if(0===t)this._value=null;else{this._value=[];for(var n=0;n<e.length;n++){this._keys[e[n]]===t&&this._value.push(e[n])}}}},{key:"clear",value:function(e){if(void 0!==this._handles[e]){var t=this._handles[e];t||(t=[]);for(var n=0;n<t.length;n++)this._keys[t[n]]--;delete this._handles[e],this._updateValue()}}},{key:"value",get:function(){return this._value}},{key:"_allKeys",get:function(){var e=Object.keys(this._keys);return e.sort(l),e}}]),e}();n.default=i},{"./util":11}],4:[function(l,e,s){(function(e){"use strict";Object.defineProperty(s,"__esModule",{value:!0});var n=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};s.default=function e(t){{if(t&&"string"==typeof t)return u.hasOwnProperty(t)||(u[t]=new a(t)),u[t];if("object"===(void 0===t?"undefined":r(t))&&t._vars&&t.var)return t;if(Array.isArray(t)&&1==t.length&&"string"==typeof t[0])return e(t[0]);throw new Error("Invalid groupName argument")}};var t,i=l("./var"),o=(t=i)&&t.__esModule?t:{default:t};e.__crosstalk_groups=e.__crosstalk_groups||{};var u=e.__crosstalk_groups;var a=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.name=e,this._vars={}}return n(t,[{key:"var",value:function(e){if(!e||"string"!=typeof e)throw new Error("Invalid var name");return this._vars.hasOwnProperty(e)||(this._vars[e]=new o.default(this,e)),this._vars[e]}},{key:"has",value:function(e){if(!e||"string"!=typeof e)throw new Error("Invalid var name");return this._vars.hasOwnProperty(e)}}]),t}()}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./var":12}],5:[function(f,e,c){(function(e){"use strict";Object.defineProperty(c,"__esModule",{value:!0});var t,n=f("./group"),r=(t=n)&&t.__esModule?t:{default:t},i=f("./selection"),o=f("./filter"),u=f("./input");f("./input_selectize"),f("./input_checkboxgroup"),f("./input_slider");var a=(0,r.default)("default");function l(e){return a.var(e)}e.Shiny&&e.Shiny.addCustomMessageHandler("update-client-value",function(e){"string"==typeof e.group?(0,r.default)(e.group).var(e.name).set(e.value):l(e.name).set(e.value)});var s={group:r.default,var:l,has:function(e){return a.has(e)},SelectionHandle:i.SelectionHandle,FilterHandle:o.FilterHandle,bind:u.bind};c.default=s,e.crosstalk=s}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(e,t,a){(function(t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.register=function(e){r[e.className]=e,t.document&&"complete"!==t.document.readyState?o(function(){n()}):t.document&&setTimeout(n,100)},a.bind=n;var o=t.jQuery,r={};function n(){Object.keys(r).forEach(function(e){var n=r[e];o("."+n.className).not(".crosstalk-input-bound").each(function(e,t){i(n,t)})})}function i(e,t){var n=o(t).find("script[type='application/json'][data-for='"+t.id.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")+"']"),r=JSON.parse(n[0].innerText),i=e.factory(t,r);o(t).data("crosstalk-instance",i),o(t).addClass("crosstalk-input-bound")}if(t.Shiny){var e=new t.Shiny.InputBinding,u=t.jQuery;u.extend(e,{find:function(e){return u(e).find(".crosstalk-input")},initialize:function(e){var t,n;u(e).hasClass("crosstalk-input-bound")||(n=o(t=e),Object.keys(r).forEach(function(e){n.hasClass(e)&&!n.hasClass("crosstalk-input-bound")&&i(r[e],t)}))},getId:function(e){return e.id},getValue:function(e){},setValue:function(e,t){},receiveMessage:function(e,t){},subscribe:function(e,t){u(e).data("crosstalk-instance").resume()},unsubscribe:function(e){u(e).data("crosstalk-instance").suspend()}}),t.Shiny.inputBindings.register(e,"crosstalk.inputBinding")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(r,e,t){(function(e){"use strict";var t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(r("./input")),n=r("./filter");var a=e.jQuery;t.register({className:"crosstalk-input-checkboxgroup",factory:function(e,r){var i=new n.FilterHandle(r.group),o=void 0,u=a(e);return u.on("change","input[type='checkbox']",function(){var e=u.find("input[type='checkbox']:checked");if(0===e.length)o=null,i.clear();else{var t={};e.each(function(){r.map[this.value].forEach(function(e){t[e]=!0})});var n=Object.keys(t);n.sort(),o=n,i.set(n)}}),{suspend:function(){i.clear()},resume:function(){o&&i.set(o)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],8:[function(r,e,t){(function(e){"use strict";var t=n(r("./input")),l=n(r("./util")),s=r("./filter");function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var f=e.jQuery;t.register({className:"crosstalk-input-select",factory:function(e,n){var t=l.dataframeToD3(n.items),r={options:[{value:"",label:"(All)"}].concat(t),valueField:"value",labelField:"label",searchField:"label"},i=f(e).find("select")[0],o=f(i).selectize(r)[0].selectize,u=new s.FilterHandle(n.group),a=void 0;return o.on("change",function(){if(0===o.items.length)a=null,u.clear();else{var t={};o.items.forEach(function(e){n.map[e].forEach(function(e){t[e]=!0})});var e=Object.keys(t);e.sort(),a=e,u.set(e)}}),{suspend:function(){u.clear()},resume:function(){a&&u.set(a)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6,"./util":11}],9:[function(n,e,t){(function(e){"use strict";var d=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(n("./input")),a=n("./filter");var v=e.jQuery,p=e.strftime;function y(e,t){for(var n=e.toString();n.length<t;)n="0"+n;return n}t.register({className:"crosstalk-input-slider",factory:function(e,l){var s=new a.FilterHandle(l.group),t={},f=v(e).find("input"),n=f.data("data-type"),r=f.data("time-format"),i=f.data("round"),o=void 0;if("date"===n)o=p.utc(),t.prettify=function(e){return o(r,new Date(e))};else if("datetime"===n){var u=f.data("timezone");o=u?p.timezone(u):p,t.prettify=function(e){return o(r,new Date(e))}}else"number"===n&&void 0!==i&&(t.prettify=function(e){var t=Math.pow(10,i);return Math.round(e*t)/t});function c(){var e=f.data("ionRangeSlider").result,t=void 0,n=f.data("data-type");return t="date"===n?function(e){return(t=new Date(+e))instanceof Date?t.getUTCFullYear()+"-"+y(t.getUTCMonth()+1,2)+"-"+y(t.getUTCDate(),2):null;var t}:"datetime"===n?function(e){return+e/1e3}:function(e){return+e},"double"===f.data("ionRangeSlider").options.type?[t(e.from),t(e.to)]:t(e.from)}f.ionRangeSlider(t);var h=null;return f.on("change.crosstalkSliderInput",function(e){if(!f.data("updating")&&!f.data("animating")){for(var t=c(),n=d(t,2),r=n[0],i=n[1],o=[],u=0;u<l.values.length;u++){var a=l.values[u];r<=a&&a<=i&&o.push(l.keys[u])}o.sort(),s.set(o),h=o}}),{suspend:function(){s.clear()},resume:function(){h&&s.set(h)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.SelectionHandle=void 0;var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=a(e("./events")),o=a(e("./group")),u=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(e("./util"));function a(e){return e&&e.__esModule?e:{default:e}}n.SelectionHandle=function(){function n(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),this._eventRelay=new i.default,this._emitter=new u.SubscriptionTracker(this._eventRelay),this._group=null,this._var=null,this._varOnChangeSub=null,this._extraInfo=u.extend({sender:this},t),this.setGroup(e)}return r(n,[{key:"setGroup",value:function(e){var t=this;if(this._group!==e&&(this._group||e)&&(this._var&&(this._var.off("change",this._varOnChangeSub),this._var=null,this._varOnChangeSub=null),this._group=e)){this._var=(0,o.default)(e).var("selection");var n=this._var.on("change",function(e){t._eventRelay.trigger("change",e,t)});this._varOnChangeSub=n}}},{key:"_mergeExtraInfo",value:function(e){return u.extend({},this._extraInfo?this._extraInfo:null,e||null)}},{key:"set",value:function(e,t){this._var&&this._var.set(e,this._mergeExtraInfo(t))}},{key:"clear",value:function(e){this._var&&this.set(void 0,this._mergeExtraInfo(e))}},{key:"on",value:function(e,t){return this._emitter.on(e,t)}},{key:"off",value:function(e,t){return this._emitter.off(e,t)}},{key:"close",value:function(){this._emitter.removeAllListeners(),this.setGroup(null)}},{key:"value",get:function(){return this._var?this._var.get():null}}]),n}()},{"./events":1,"./group":4,"./util":11}],11:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function u(e){for(var t=1;t<e.length;t++)if(e[t]<=e[t-1])throw new Error("List is not sorted or contains duplicate")}n.extend=function(e){for(var t=arguments.length,n=Array(1<t?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];for(var i=0;i<n.length;i++){var o=n[i];if(null!=o)for(var u in o)o.hasOwnProperty(u)&&(e[u]=o[u])}return e},n.checkSorted=u,n.diffSortedLists=function(e,t){var n=0,r=0;e||(e=[]);t||(t=[]);var i=[],o=[];u(e),u(t);for(;n<e.length&&r<t.length;)e[n]===t[r]?(n++,r++):e[n]<t[r]?i.push(e[n++]):o.push(t[r++]);n<e.length&&(i=i.concat(e.slice(n)));r<t.length&&(o=o.concat(t.slice(r)));return{removed:i,added:o}},n.dataframeToD3=function(e){var t=[],n=void 0;for(var r in e){if(e.hasOwnProperty(r)&&t.push(r),"object"!==l(e[r])||void 0===e[r].length)throw new Error("All fields must be arrays");if(void 0!==n&&n!==e[r].length)throw new Error("All fields must be arrays of the same length");n=e[r].length}for(var i=[],o=void 0,u=0;u<n;u++){o={};for(var a=0;a<t.length;a++)o[t[a]]=e[t[a]][u];i.push(o)}return i};n.SubscriptionTracker=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this._emitter=e,this._subs={}}return r(t,[{key:"on",value:function(e,t){var n=this._emitter.on(e,t);return this._subs[n]=e,n}},{key:"off",value:function(e,t){var n=this._emitter.off(e,t);return n&&delete this._subs[n],n}},{key:"removeAllListeners",value:function(){var t=this,n=this._subs;this._subs={},Object.keys(n).forEach(function(e){t._emitter.off(n[e],e)})}}]),t}()},{}],12:[function(a,e,l){(function(o){"use strict";Object.defineProperty(l,"__esModule",{value:!0});var e,u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),n=a("./events"),i=(e=n)&&e.__esModule?e:{default:e};var r=function(){function r(e,t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this._group=e,this._name=t,this._value=n,this._events=new i.default}return t(r,[{key:"get",value:function(){return this._value}},{key:"set",value:function(e,t){if(this._value!==e){var n=this._value;this._value=e;var r={};if(t&&"object"===(void 0===t?"undefined":u(t)))for(var i in t)t.hasOwnProperty(i)&&(r[i]=t[i]);r.oldValue=n,r.value=e,this._events.trigger("change",r,this),o.Shiny&&o.Shiny.onInputChange&&o.Shiny.onInputChange(".clientValue-"+(null!==this._group.name?this._group.name+"-":"")+this._name,void 0===e?null:e)}}},{key:"on",value:function(e,t){return this._events.on(e,t)}},{key:"off",value:function(e,t){return this._events.off(e,t)}}]),r}();l.default=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./events":1}]},{},[5]);
+//# sourceMappingURL=crosstalk.min.js.map \ No newline at end of file
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map
new file mode 100644
index 00000000..886ebeef
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/browser-pack/_prelude.js","javascript/src/events.js","javascript/src/filter.js","javascript/src/filterset.js","javascript/src/group.js","javascript/src/index.js","javascript/src/input.js","javascript/src/input_checkboxgroup.js","javascript/src/input_selectize.js","javascript/src/input_slider.js","javascript/src/selection.js","javascript/src/util.js","javascript/src/var.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","Events","_classCallCheck","this","_types","_seq","eventType","listener","subs","sub","key","hasOwnProperty","arg","thisObj","util","id","FilterHandle","group","extraInfo","_eventRelay","_events2","default","_emitter","SubscriptionTracker","_group","_filterSet","_filterVar","_varOnChangeSub","_extraInfo","extend","sender","_id","setGroup","fsVar","result","_this","off","clear","_group2","var","get","_filterset2","set","on","trigger","removeAllListeners","_onChange","keys","update","value","_mergeExtraInfo","_util","naturalComparator","b","FilterSet","reset","_handles","_keys","_value","_activeHandles","handleId","slice","sort","_diffSortedLists","diffSortedLists","added","removed","_i","_updateValue","arguments","undefined","_allKeys","handleCount","Object","push","allKeys","groupName","groups","Group","_typeof","_vars","Array","isArray","_var2","global","__crosstalk_groups","name","_var3","_selection","_filter","_input","defaultGroup","var_","Shiny","addCustomMessageHandler","message","crosstalk","has","SelectionHandle","bind","register","reg","bindings","className","document","readyState","$","setTimeout","jQuery","forEach","binding","not","each","el","bindInstance","jsonEl","find","replace","data","JSON","parse","innerText","instance","factory","addClass","inputBinding","InputBinding","_$","scope","initialize","$el","hasClass","getId","getValue","setValue","receiveMessage","subscribe","callback","resume","unsubscribe","suspend","inputBindings","input","ctHandle","lastKnownKeys","checked","map","keyArray","items","dataframeToD3","opts","options","label","concat","valueField","labelField","searchField","select","selectize","strftime","padZeros","digits","str","toString","dataType","timeFormat","round","timeFormatter","utc","prettify","num","Date","timezone","factor","Math","pow","convert","val","date","getUTCFullYear","getUTCMonth","getUTCDate","type","from","to","ionRangeSlider","event","_getValue","_getValue2","_slicedToArray","values","_var","selectedKeys","checkSorted","list","target","_len","sources","_key","src","i_a","i_b","a_only","b_only","df","names","results","item","row","col","emitter","_subs","current_subs","_events","Var","_name","oldValue","evt","k","onInputChange"],"mappings":"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","file":"crosstalk.min.js","sourcesContent":["(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()","export default class Events {\n constructor() {\n this._types = {};\n this._seq = 0;\n }\n\n on(eventType, listener) {\n let subs = this._types[eventType];\n if (!subs) {\n subs = this._types[eventType] = {};\n }\n let sub = \"sub\" + (this._seq++);\n subs[sub] = listener;\n return sub;\n }\n\n // Returns false if no match, or string for sub name if matched\n off(eventType, listener) {\n let subs = this._types[eventType];\n if (typeof(listener) === \"function\") {\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n if (subs[key] === listener) {\n delete subs[key];\n return key;\n }\n }\n }\n return false;\n } else if (typeof(listener) === \"string\") {\n if (subs && subs[listener]) {\n delete subs[listener];\n return listener;\n }\n return false;\n } else {\n throw new Error(\"Unexpected type for listener\");\n }\n }\n\n trigger(eventType, arg, thisObj) {\n let subs = this._types[eventType];\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n subs[key].call(thisObj, arg);\n }\n }\n }\n}\n","import Events from \"./events\";\nimport FilterSet from \"./filterset\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\nfunction getFilterSet(group) {\n let fsVar = group.var(\"filterset\");\n let result = fsVar.get();\n if (!result) {\n result = new FilterSet();\n fsVar.set(result);\n }\n return result;\n}\n\nlet id = 1;\nfunction nextId() {\n return id++;\n}\n\n/**\n * Use this class to contribute to, and listen for changes to, the filter set\n * for the given group of widgets. Filter input controls should create one\n * `FilterHandle` and only call {@link FilterHandle#set}. Output widgets that\n * wish to displayed filtered data should create one `FilterHandle` and use\n * the {@link FilterHandle#filteredKeys} property and listen for change\n * events.\n *\n * If two (or more) `FilterHandle` instances in the same webpage share the\n * same group name, they will contribute to a single \"filter set\". Each\n * `FilterHandle` starts out with a `null` value, which means they take\n * nothing away from the set of data that should be shown. To make a\n * `FilterHandle` actually remove data from the filter set, set its value to\n * an array of keys which should be displayed. Crosstalk will aggregate the\n * various key arrays by finding their intersection; only keys that are\n * present in all non-null filter handles are considered part of the filter\n * set.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the {@link FilterHandle#setGroup} method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class FilterHandle {\n constructor(group, extraInfo) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The filterSet that we're tracking, if any. Can change over time.\n this._filterSet = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._filterVar = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this._id = \"filter\" + nextId();\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this FilterHandle. If `set()` was\n * previously called on this handle, switching groups will clear those keys\n * from the old group's filter set. These keys will not be applied to the new\n * group's filter set either. In other words, `setGroup()` effectively calls\n * `clear()` before switching groups.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._filterVar) {\n this._filterVar.off(\"change\", this._varOnChangeSub);\n this.clear();\n this._varOnChangeSub = null;\n this._filterVar = null;\n this._filterSet = null;\n }\n\n this._group = group;\n\n if (group) {\n group = grp(group);\n this._filterSet = getFilterSet(group);\n this._filterVar = grp(group).var(\"filter\");\n let sub = this._filterVar.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n","import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n","import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n","import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n","let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n","import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n","export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n","import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"]} \ No newline at end of file
diff --git a/docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss b/docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss
new file mode 100644
index 00000000..35665616
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss
@@ -0,0 +1,75 @@
+/* Adjust margins outwards, so column contents line up with the edges of the
+ parent of container-fluid. */
+.container-fluid.crosstalk-bscols {
+ margin-left: -30px;
+ margin-right: -30px;
+ white-space: normal;
+}
+
+/* But don't adjust the margins outwards if we're directly under the body,
+ i.e. we were the top-level of something at the console. */
+body > .container-fluid.crosstalk-bscols {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column {
+ display: inline-block;
+ padding-right: 12px;
+ vertical-align: top;
+}
+
+@media only screen and (max-width:480px) {
+ .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column {
+ display: block;
+ padding-right: inherit;
+ }
+}
+
+/* Relevant BS3 styles to make filter_checkbox() look reasonable without Bootstrap */
+.crosstalk-input {
+ margin-bottom: 15px; /* a la .form-group */
+ .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px;
+ line-height: normal;
+ }
+ .checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+ .checkbox > label{
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: 400;
+ cursor: pointer;
+ }
+ .checkbox input[type="checkbox"],
+ .checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 2px;
+ margin-left: -20px;
+ }
+ .checkbox + .checkbox {
+ margin-top: -5px;
+ }
+ .checkbox-inline {
+ position: relative;
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: 400;
+ vertical-align: middle;
+ cursor: pointer;
+ }
+ .checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+ }
+}
diff --git a/docs/coverage/lib/datatables-binding-0.33/datatables.js b/docs/coverage/lib/datatables-binding-0.33/datatables.js
new file mode 100644
index 00000000..765b53cb
--- /dev/null
+++ b/docs/coverage/lib/datatables-binding-0.33/datatables.js
@@ -0,0 +1,1539 @@
+(function() {
+
+// some helper functions: using a global object DTWidget so that it can be used
+// in JS() code, e.g. datatable(options = list(foo = JS('code'))); unlike R's
+// dynamic scoping, when 'code' is eval'ed, JavaScript does not know objects
+// from the "parent frame", e.g. JS('DTWidget') will not work unless it was made
+// a global object
+var DTWidget = {};
+
+// 123456666.7890 -> 123,456,666.7890
+var markInterval = function(d, digits, interval, mark, decMark, precision) {
+ x = precision ? d.toPrecision(digits) : d.toFixed(digits);
+ if (!/^-?[\d.]+$/.test(x)) return x;
+ var xv = x.split('.');
+ if (xv.length > 2) return x; // should have at most one decimal point
+ xv[0] = xv[0].replace(new RegExp('\\B(?=(\\d{' + interval + '})+(?!\\d))', 'g'), mark);
+ return xv.join(decMark);
+};
+
+DTWidget.formatCurrency = function(data, currency, digits, interval, mark, decMark, before, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ var res = markInterval(d, digits, interval, mark, decMark);
+ res = before ? (/^-/.test(res) ? '-' + currency + res.replace(/^-/, '') : currency + res) :
+ res + currency;
+ return res;
+};
+
+DTWidget.formatString = function(data, prefix, suffix) {
+ var d = data;
+ if (d === null) return '';
+ return prefix + d + suffix;
+};
+
+DTWidget.formatPercentage = function(data, digits, interval, mark, decMark, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ return markInterval(d * 100, digits, interval, mark, decMark) + '%';
+};
+
+DTWidget.formatRound = function(data, digits, interval, mark, decMark, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ return markInterval(d, digits, interval, mark, decMark);
+};
+
+DTWidget.formatSignif = function(data, digits, interval, mark, decMark, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ return markInterval(d, digits, interval, mark, decMark, true);
+};
+
+DTWidget.formatDate = function(data, method, params) {
+ var d = data;
+ if (d === null) return '';
+ // (new Date('2015-10-28')).toDateString() may return 2015-10-27 because the
+ // actual time created could be like 'Tue Oct 27 2015 19:00:00 GMT-0500 (CDT)',
+ // i.e. the date-only string is treated as UTC time instead of local time
+ if ((method === 'toDateString' || method === 'toLocaleDateString') && /^\d{4,}\D\d{2}\D\d{2}$/.test(d)) {
+ d = d.split(/\D/);
+ d = new Date(d[0], d[1] - 1, d[2]);
+ } else {
+ d = new Date(d);
+ }
+ return d[method].apply(d, params);
+};
+
+window.DTWidget = DTWidget;
+
+// A helper function to update the properties of existing filters
+var setFilterProps = function(td, props) {
+ // Update enabled/disabled state
+ var $input = $(td).find('input').first();
+ var searchable = $input.data('searchable');
+ $input.prop('disabled', !searchable || props.disabled);
+
+ // Based on the filter type, set its new values
+ var type = td.getAttribute('data-type');
+ if (['factor', 'logical'].includes(type)) {
+ // Reformat the new dropdown options for use with selectize
+ var new_vals = props.params.options.map(function(item) {
+ return { text: item, value: item };
+ });
+
+ // Find the selectize object
+ var dropdown = $(td).find('.selectized').eq(0)[0].selectize;
+
+ // Note the current values
+ var old_vals = dropdown.getValue();
+
+ // Remove the existing values
+ dropdown.clearOptions();
+
+ // Add the new options
+ dropdown.addOption(new_vals);
+
+ // Preserve the existing values
+ dropdown.setValue(old_vals);
+
+ } else if (['number', 'integer', 'date', 'time'].includes(type)) {
+ // Apply internal scaling to new limits. Updating scale not yet implemented.
+ var slider = $(td).find('.noUi-target').eq(0);
+ var scale = Math.pow(10, Math.max(0, +slider.data('scale') || 0));
+ var new_vals = [props.params.min * scale, props.params.max * scale];
+
+ // Note what the new limits will be just for this filter
+ var new_lims = new_vals.slice();
+
+ // Determine the current values and limits
+ var old_vals = slider.val().map(Number);
+ var old_lims = slider.noUiSlider('options').range;
+ old_lims = [old_lims.min, old_lims.max];
+
+ // Preserve the current values if filters have been applied; otherwise, apply no filtering
+ if (old_vals[0] != old_lims[0]) {
+ new_vals[0] = Math.max(old_vals[0], new_vals[0]);
+ }
+
+ if (old_vals[1] != old_lims[1]) {
+ new_vals[1] = Math.min(old_vals[1], new_vals[1]);
+ }
+
+ // Update the endpoints of the slider
+ slider.noUiSlider({
+ start: new_vals,
+ range: {'min': new_lims[0], 'max': new_lims[1]}
+ }, true);
+ }
+};
+
+var transposeArray2D = function(a) {
+ return a.length === 0 ? a : HTMLWidgets.transposeArray2D(a);
+};
+
+var crosstalkPluginsInstalled = false;
+
+function maybeInstallCrosstalkPlugins() {
+ if (crosstalkPluginsInstalled)
+ return;
+ crosstalkPluginsInstalled = true;
+
+ $.fn.dataTable.ext.afnFiltering.push(
+ function(oSettings, aData, iDataIndex) {
+ var ctfilter = oSettings.nTable.ctfilter;
+ if (ctfilter && !ctfilter[iDataIndex])
+ return false;
+
+ var ctselect = oSettings.nTable.ctselect;
+ if (ctselect && !ctselect[iDataIndex])
+ return false;
+
+ return true;
+ }
+ );
+}
+
+HTMLWidgets.widget({
+ name: "datatables",
+ type: "output",
+ renderOnNullValue: true,
+ initialize: function(el, width, height) {
+ // in order that the type=number inputs return a number
+ $.valHooks.number = {
+ get: function(el) {
+ var value = parseFloat(el.value);
+ return isNaN(value) ? "" : value;
+ }
+ };
+ $(el).html('&nbsp;');
+ return {
+ data: null,
+ ctfilterHandle: new crosstalk.FilterHandle(),
+ ctfilterSubscription: null,
+ ctselectHandle: new crosstalk.SelectionHandle(),
+ ctselectSubscription: null
+ };
+ },
+ renderValue: function(el, data, instance) {
+ if (el.offsetWidth === 0 || el.offsetHeight === 0) {
+ instance.data = data;
+ return;
+ }
+ instance.data = null;
+ var $el = $(el);
+ $el.empty();
+
+ if (data === null) {
+ $el.append('&nbsp;');
+ // clear previous Shiny inputs (if any)
+ for (var i in instance.clearInputs) instance.clearInputs[i]();
+ instance.clearInputs = {};
+ return;
+ }
+
+ var crosstalkOptions = data.crosstalkOptions;
+ if (!crosstalkOptions) crosstalkOptions = {
+ 'key': null, 'group': null
+ };
+ if (crosstalkOptions.group) {
+ maybeInstallCrosstalkPlugins();
+ instance.ctfilterHandle.setGroup(crosstalkOptions.group);
+ instance.ctselectHandle.setGroup(crosstalkOptions.group);
+ }
+
+ // if we are in the viewer then we always want to fillContainer and
+ // and autoHideNavigation (unless the user has explicitly set these)
+ if (window.HTMLWidgets.viewerMode) {
+ if (!data.hasOwnProperty("fillContainer"))
+ data.fillContainer = true;
+ if (!data.hasOwnProperty("autoHideNavigation"))
+ data.autoHideNavigation = true;
+ }
+
+ // propagate fillContainer to instance (so we have it in resize)
+ instance.fillContainer = data.fillContainer;
+
+ var cells = data.data;
+
+ if (cells instanceof Array) cells = transposeArray2D(cells);
+
+ $el.append(data.container);
+ var $table = $el.find('table');
+ if (data.class) $table.addClass(data.class);
+ if (data.caption) $table.prepend(data.caption);
+
+ if (!data.selection) data.selection = {
+ mode: 'none', selected: null, target: 'row', selectable: null
+ };
+ if (HTMLWidgets.shinyMode && data.selection.mode !== 'none' &&
+ data.selection.target === 'row+column') {
+ if ($table.children('tfoot').length === 0) {
+ $table.append($('<tfoot>'));
+ $table.find('thead tr').clone().appendTo($table.find('tfoot'));
+ }
+ }
+
+ // column filters
+ var filterRow;
+ switch (data.filter) {
+ case 'top':
+ $table.children('thead').append(data.filterHTML);
+ filterRow = $table.find('thead tr:last td');
+ break;
+ case 'bottom':
+ if ($table.children('tfoot').length === 0) {
+ $table.append($('<tfoot>'));
+ }
+ $table.children('tfoot').prepend(data.filterHTML);
+ filterRow = $table.find('tfoot tr:first td');
+ break;
+ }
+
+ var options = { searchDelay: 1000 };
+ if (cells !== null) $.extend(options, {
+ data: cells
+ });
+
+ // options for fillContainer
+ var bootstrapActive = typeof($.fn.popover) != 'undefined';
+ if (instance.fillContainer) {
+
+ // force scrollX/scrollY and turn off autoWidth
+ options.scrollX = true;
+ options.scrollY = "100px"; // can be any value, we'll adjust below
+
+ // if we aren't paginating then move around the info/filter controls
+ // to save space at the bottom and rephrase the info callback
+ if (data.options.paging === false) {
+
+ // we know how to do this cleanly for bootstrap, not so much
+ // for other themes/layouts
+ if (bootstrapActive) {
+ options.dom = "<'row'<'col-sm-4'i><'col-sm-8'f>>" +
+ "<'row'<'col-sm-12'tr>>";
+ }
+
+ options.fnInfoCallback = function(oSettings, iStart, iEnd,
+ iMax, iTotal, sPre) {
+ return Number(iTotal).toLocaleString() + " records";
+ };
+ }
+ }
+
+ // auto hide navigation if requested
+ // Note, this only works on client-side processing mode as on server-side,
+ // cells (data.data) is null; In addition, we require the pageLength option
+ // being provided explicitly to enable this. Despite we may be able to deduce
+ // the default value of pageLength, it may complicate things so we'd rather
+ // put this responsiblity to users and warn them on the R side.
+ if (data.autoHideNavigation === true && data.options.paging !== false) {
+ // strip all nav if length >= cells
+ if ((cells instanceof Array) && data.options.pageLength >= cells.length)
+ options.dom = bootstrapActive ? "<'row'<'col-sm-12'tr>>" : "t";
+ // alternatively lean things out for flexdashboard mobile portrait
+ else if (bootstrapActive && window.FlexDashboard && window.FlexDashboard.isMobilePhone())
+ options.dom = "<'row'<'col-sm-12'f>>" +
+ "<'row'<'col-sm-12'tr>>" +
+ "<'row'<'col-sm-12'p>>";
+ }
+
+ $.extend(true, options, data.options || {});
+
+ var searchCols = options.searchCols;
+ if (searchCols) {
+ searchCols = searchCols.map(function(x) {
+ return x === null ? '' : x.search;
+ });
+ // FIXME: this means I don't respect the escapeRegex setting
+ delete options.searchCols;
+ }
+
+ // server-side processing?
+ var server = options.serverSide === true;
+
+ // use the dataSrc function to pre-process JSON data returned from R
+ var DT_rows_all = [], DT_rows_current = [];
+ if (server && HTMLWidgets.shinyMode && typeof options.ajax === 'object' &&
+ /^session\/[\da-z]+\/dataobj/.test(options.ajax.url) && !options.ajax.dataSrc) {
+ options.ajax.dataSrc = function(json) {
+ DT_rows_all = $.makeArray(json.DT_rows_all);
+ DT_rows_current = $.makeArray(json.DT_rows_current);
+ var data = json.data;
+ if (!colReorderEnabled()) return data;
+ var table = $table.DataTable(), order = table.colReorder.order(), flag = true, i, j, row;
+ for (i = 0; i < order.length; ++i) if (order[i] !== i) flag = false;
+ if (flag) return data;
+ for (i = 0; i < data.length; ++i) {
+ row = data[i].slice();
+ for (j = 0; j < order.length; ++j) data[i][j] = row[order[j]];
+ }
+ return data;
+ };
+ }
+
+ var thiz = this;
+ if (instance.fillContainer) $table.on('init.dt', function(e) {
+ thiz.fillAvailableHeight(el, $(el).innerHeight());
+ });
+ // If the page contains serveral datatables and one of which enables colReorder,
+ // the table.colReorder.order() function will exist but throws error when called.
+ // So it seems like the only way to know if colReorder is enabled or not is to
+ // check the options.
+ var colReorderEnabled = function() { return "colReorder" in options; };
+ var table = $table.DataTable(options);
+ $el.data('datatable', table);
+
+ if ('rowGroup' in options) {
+ // Maintain RowGroup dataSrc when columns are reordered (#1109)
+ table.on('column-reorder', function(e, settings, details) {
+ var oldDataSrc = table.rowGroup().dataSrc();
+ var newDataSrc = details.mapping[oldDataSrc];
+ table.rowGroup().dataSrc(newDataSrc);
+ });
+ }
+
+ // Unregister previous Crosstalk event subscriptions, if they exist
+ if (instance.ctfilterSubscription) {
+ instance.ctfilterHandle.off("change", instance.ctfilterSubscription);
+ instance.ctfilterSubscription = null;
+ }
+ if (instance.ctselectSubscription) {
+ instance.ctselectHandle.off("change", instance.ctselectSubscription);
+ instance.ctselectSubscription = null;
+ }
+
+ if (!crosstalkOptions.group) {
+ $table[0].ctfilter = null;
+ $table[0].ctselect = null;
+ } else {
+ var key = crosstalkOptions.key;
+ function keysToMatches(keys) {
+ if (!keys) {
+ return null;
+ } else {
+ var selectedKeys = {};
+ for (var i = 0; i < keys.length; i++) {
+ selectedKeys[keys[i]] = true;
+ }
+ var matches = {};
+ for (var j = 0; j < key.length; j++) {
+ if (selectedKeys[key[j]])
+ matches[j] = true;
+ }
+ return matches;
+ }
+ }
+
+ function applyCrosstalkFilter(e) {
+ $table[0].ctfilter = keysToMatches(e.value);
+ table.draw();
+ }
+ instance.ctfilterSubscription = instance.ctfilterHandle.on("change", applyCrosstalkFilter);
+ applyCrosstalkFilter({value: instance.ctfilterHandle.filteredKeys});
+
+ function applyCrosstalkSelection(e) {
+ if (e.sender !== instance.ctselectHandle) {
+ table
+ .rows('.' + selClass, {search: 'applied'})
+ .nodes()
+ .to$()
+ .removeClass(selClass);
+ if (selectedRows)
+ changeInput('rows_selected', selectedRows(), void 0, true);
+ }
+
+ if (e.sender !== instance.ctselectHandle && e.value && e.value.length) {
+ var matches = keysToMatches(e.value);
+
+ // persistent selection with plotly (& leaflet)
+ var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {};
+ if (ctOpts.persistent === true) {
+ var matches = $.extend(matches, $table[0].ctselect);
+ }
+
+ $table[0].ctselect = matches;
+ table.draw();
+ } else {
+ if ($table[0].ctselect) {
+ $table[0].ctselect = null;
+ table.draw();
+ }
+ }
+ }
+ instance.ctselectSubscription = instance.ctselectHandle.on("change", applyCrosstalkSelection);
+ // TODO: This next line doesn't seem to work when renderDataTable is used
+ applyCrosstalkSelection({value: instance.ctselectHandle.value});
+ }
+
+ var inArray = function(val, array) {
+ return $.inArray(val, $.makeArray(array)) > -1;
+ };
+
+ // search the i-th column
+ var searchColumn = function(i, value) {
+ var regex = false, ci = true;
+ if (options.search) {
+ regex = options.search.regex,
+ ci = options.search.caseInsensitive !== false;
+ }
+ // need to transpose the column index when colReorder is enabled
+ if (table.colReorder) i = table.colReorder.transpose(i);
+ return table.column(i).search(value, regex, !regex, ci);
+ };
+
+ if (data.filter !== 'none') {
+ if (!data.hasOwnProperty('filterSettings')) data.filterSettings = {};
+
+ filterRow.each(function(i, td) {
+
+ var $td = $(td), type = $td.data('type'), filter;
+ var $input = $td.children('div').first().children('input');
+ var disabled = $input.prop('disabled');
+ var searchable = table.settings()[0].aoColumns[i].bSearchable;
+ $input.prop('disabled', !searchable || disabled);
+ $input.data('searchable', searchable); // for updating later
+ $input.on('input blur', function() {
+ $input.next('span').toggle(Boolean($input.val()));
+ });
+ // Bootstrap sets pointer-events to none and we won't be able to click
+ // the clear button
+ $input.next('span').css('pointer-events', 'auto').hide().click(function() {
+ $(this).hide().prev('input').val('').trigger('input').focus();
+ });
+ var searchCol; // search string for this column
+ if (searchCols && searchCols[i]) {
+ searchCol = searchCols[i];
+ $input.val(searchCol).trigger('input');
+ }
+ var $x = $td.children('div').last();
+
+ // remove the overflow: hidden attribute of the scrollHead
+ // (otherwise the scrolling table body obscures the filters)
+ // The workaround and the discussion from
+ // https://github.com/rstudio/DT/issues/554#issuecomment-518007347
+ // Otherwise the filter selection will not be anchored to the values
+ // when the columns number is many and scrollX is enabled.
+ var scrollHead = $(el).find('.dataTables_scrollHead,.dataTables_scrollFoot');
+ var cssOverflowHead = scrollHead.css('overflow');
+ var scrollBody = $(el).find('.dataTables_scrollBody');
+ var cssOverflowBody = scrollBody.css('overflow');
+ var scrollTable = $(el).find('.dataTables_scroll');
+ var cssOverflowTable = scrollTable.css('overflow');
+ if (cssOverflowHead === 'hidden') {
+ $x.on('show hide', function(e) {
+ if (e.type === 'show') {
+ scrollHead.css('overflow', 'visible');
+ scrollBody.css('overflow', 'visible');
+ scrollTable.css('overflow-x', 'scroll');
+ } else {
+ scrollHead.css('overflow', cssOverflowHead);
+ scrollBody.css('overflow', cssOverflowBody);
+ scrollTable.css('overflow-x', cssOverflowTable);
+ }
+ });
+ $x.css('z-index', 25);
+ }
+
+ if (inArray(type, ['factor', 'logical'])) {
+ $input.on({
+ click: function() {
+ $input.parent().hide(); $x.show().trigger('show'); filter[0].selectize.focus();
+ },
+ input: function() {
+ var v1 = JSON.stringify(filter[0].selectize.getValue()), v2 = $input.val();
+ if (v1 === '[]') v1 = '';
+ if (v1 !== v2) filter[0].selectize.setValue(v2 === '' ? [] : JSON.parse(v2));
+ }
+ });
+ var $input2 = $x.children('select');
+ filter = $input2.selectize($.extend({
+ options: $input2.data('options').map(function(v, i) {
+ return ({text: v, value: v});
+ }),
+ plugins: ['remove_button'],
+ hideSelected: true,
+ onChange: function(value) {
+ if (value === null) value = []; // compatibility with jQuery 3.0
+ $input.val(value.length ? JSON.stringify(value) : '');
+ if (value.length) $input.trigger('input');
+ $input.attr('title', $input.val());
+ if (server) {
+ searchColumn(i, value.length ? JSON.stringify(value) : '').draw();
+ return;
+ }
+ // turn off filter if nothing selected
+ $td.data('filter', value.length > 0);
+ table.draw(); // redraw table, and filters will be applied
+ }
+ }, data.filterSettings.select));
+ filter[0].selectize.on('blur', function() {
+ $x.hide().trigger('hide'); $input.parent().show(); $input.trigger('blur');
+ });
+ filter.next('div').css('margin-bottom', 'auto');
+ } else if (type === 'character') {
+ var fun = function() {
+ searchColumn(i, $input.val()).draw();
+ };
+ // throttle searching for server-side processing
+ var throttledFun = $.fn.dataTable.util.throttle(fun, options.searchDelay);
+ $input.on('input', function(e, immediate) {
+ // always bypass throttling when immediate = true (via the updateSearch method)
+ (immediate || !server) ? fun() : throttledFun();
+ });
+ } else if (inArray(type, ['number', 'integer', 'date', 'time'])) {
+ var $x0 = $x;
+ $x = $x0.children('div').first();
+ $x0.css({
+ 'background-color': '#fff',
+ 'border': '1px #ddd solid',
+ 'border-radius': '4px',
+ 'padding': data.vertical ? '35px 20px': '20px 20px 10px 20px'
+ });
+ var $spans = $x0.children('span').css({
+ 'margin-top': data.vertical ? '0' : '10px',
+ 'white-space': 'nowrap'
+ });
+ var $span1 = $spans.first(), $span2 = $spans.last();
+ var r1 = +$x.data('min'), r2 = +$x.data('max');
+ // when the numbers are too small or have many decimal places, the
+ // slider may have numeric precision problems (#150)
+ var scale = Math.pow(10, Math.max(0, +$x.data('scale') || 0));
+ r1 = Math.round(r1 * scale); r2 = Math.round(r2 * scale);
+ var scaleBack = function(x, scale) {
+ if (scale === 1) return x;
+ var d = Math.round(Math.log(scale) / Math.log(10));
+ // to avoid problems like 3.423/100 -> 0.034230000000000003
+ return (x / scale).toFixed(d);
+ };
+ var slider_min = function() {
+ return filter.noUiSlider('options').range.min;
+ };
+ var slider_max = function() {
+ return filter.noUiSlider('options').range.max;
+ };
+ $input.on({
+ focus: function() {
+ $x0.show().trigger('show');
+ // first, make sure the slider div leaves at least 20px between
+ // the two (slider value) span's
+ $x0.width(Math.max(160, $span1.outerWidth() + $span2.outerWidth() + 20));
+ // then, if the input is really wide or slider is vertical,
+ // make the slider the same width as the input
+ if ($x0.outerWidth() < $input.outerWidth() || data.vertical) {
+ $x0.outerWidth($input.outerWidth());
+ }
+ // make sure the slider div does not reach beyond the right margin
+ if ($(window).width() < $x0.offset().left + $x0.width()) {
+ $x0.offset({
+ 'left': $input.offset().left + $input.outerWidth() - $x0.outerWidth()
+ });
+ }
+ },
+ blur: function() {
+ $x0.hide().trigger('hide');
+ },
+ input: function() {
+ if ($input.val() === '') filter.val([slider_min(), slider_max()]);
+ },
+ change: function() {
+ var v = $input.val().replace(/\s/g, '');
+ if (v === '') return;
+ v = v.split('...');
+ if (v.length !== 2) {
+ $input.parent().addClass('has-error');
+ return;
+ }
+ if (v[0] === '') v[0] = slider_min();
+ if (v[1] === '') v[1] = slider_max();
+ $input.parent().removeClass('has-error');
+ // treat date as UTC time at midnight
+ var strTime = function(x) {
+ var s = type === 'date' ? 'T00:00:00Z' : '';
+ var t = new Date(x + s).getTime();
+ // add 10 minutes to date since it does not hurt the date, and
+ // it helps avoid the tricky floating point arithmetic problems,
+ // e.g. sometimes the date may be a few milliseconds earlier
+ // than the midnight due to precision problems in noUiSlider
+ return type === 'date' ? t + 3600000 : t;
+ };
+ if (inArray(type, ['date', 'time'])) {
+ v[0] = strTime(v[0]);
+ v[1] = strTime(v[1]);
+ }
+ if (v[0] != slider_min()) v[0] *= scale;
+ if (v[1] != slider_max()) v[1] *= scale;
+ filter.val(v);
+ }
+ });
+ var formatDate = function(d) {
+ d = scaleBack(d, scale);
+ if (type === 'number') return d;
+ if (type === 'integer') return parseInt(d);
+ var x = new Date(+d);
+ if (type === 'date') {
+ var pad0 = function(x) {
+ return ('0' + x).substr(-2, 2);
+ };
+ return x.getUTCFullYear() + '-' + pad0(1 + x.getUTCMonth())
+ + '-' + pad0(x.getUTCDate());
+ } else {
+ return x.toISOString();
+ }
+ };
+ var opts = type === 'date' ? { step: 60 * 60 * 1000 } :
+ type === 'integer' ? { step: 1 } : {};
+
+ opts.orientation = data.vertical ? 'vertical': 'horizontal';
+ opts.direction = data.vertical ? 'rtl': 'ltr';
+
+ filter = $x.noUiSlider($.extend({
+ start: [r1, r2],
+ range: {min: r1, max: r2},
+ connect: true
+ }, opts, data.filterSettings.slider));
+ if (scale > 1) (function() {
+ var t1 = r1, t2 = r2;
+ var val = filter.val();
+ while (val[0] > r1 || val[1] < r2) {
+ if (val[0] > r1) {
+ t1 -= val[0] - r1;
+ }
+ if (val[1] < r2) {
+ t2 += r2 - val[1];
+ }
+ filter = $x.noUiSlider($.extend({
+ start: [t1, t2],
+ range: {min: t1, max: t2},
+ connect: true
+ }, opts, data.filterSettings.slider), true);
+ val = filter.val();
+ }
+ r1 = t1; r2 = t2;
+ })();
+ // format with active column renderer, if defined
+ var colDef = data.options.columnDefs.find(function(def) {
+ return (def.targets === i || inArray(i, def.targets)) && 'render' in def;
+ });
+ var updateSliderText = function(v1, v2) {
+ // we only know how to use function renderers
+ if (colDef && typeof colDef.render === 'function') {
+ var restore = function(v) {
+ v = scaleBack(v, scale);
+ return inArray(type, ['date', 'time']) ? new Date(+v) : v;
+ }
+ $span1.text(colDef.render(restore(v1), 'display'));
+ $span2.text(colDef.render(restore(v2), 'display'));
+ } else {
+ $span1.text(formatDate(v1));
+ $span2.text(formatDate(v2));
+ }
+ };
+ updateSliderText(r1, r2);
+ var updateSlider = function(e) {
+ var val = filter.val();
+ // turn off filter if in full range
+ $td.data('filter', val[0] > slider_min() || val[1] < slider_max());
+ var v1 = formatDate(val[0]), v2 = formatDate(val[1]), ival;
+ if ($td.data('filter')) {
+ ival = v1 + ' ... ' + v2;
+ $input.attr('title', ival).val(ival).trigger('input');
+ } else {
+ $input.attr('title', '').val('');
+ }
+ updateSliderText(val[0], val[1]);
+ if (e.type === 'slide') return; // no searching when sliding only
+ if (server) {
+ searchColumn(i, $td.data('filter') ? ival : '').draw();
+ return;
+ }
+ table.draw();
+ };
+ filter.on({
+ set: updateSlider,
+ slide: updateSlider
+ });
+ }
+
+ // server-side processing will be handled by R (or whatever server
+ // language you use); the following code is only needed for client-side
+ // processing
+ if (server) {
+ // if a search string has been pre-set, search now
+ if (searchCol) $input.trigger('input').trigger('change');
+ return;
+ }
+
+ var customFilter = function(settings, data, dataIndex) {
+ // there is no way to attach a search function to a specific table,
+ // and we need to make sure a global search function is not applied to
+ // all tables (i.e. a range filter in a previous table should not be
+ // applied to the current table); we use the settings object to
+ // determine if we want to perform searching on the current table,
+ // since settings.sTableId will be different to different tables
+ if (table.settings()[0] !== settings) return true;
+ // no filter on this column or no need to filter this column
+ if (typeof filter === 'undefined' || !$td.data('filter')) return true;
+
+ var r = filter.val(), v, r0, r1;
+ var i_data = function(i) {
+ if (!colReorderEnabled()) return i;
+ var order = table.colReorder.order(), k;
+ for (k = 0; k < order.length; ++k) if (order[k] === i) return k;
+ return i; // in theory it will never be here...
+ }
+ v = data[i_data(i)];
+ if (type === 'number' || type === 'integer') {
+ v = parseFloat(v);
+ // how to handle NaN? currently exclude these rows
+ if (isNaN(v)) return(false);
+ r0 = parseFloat(scaleBack(r[0], scale))
+ r1 = parseFloat(scaleBack(r[1], scale));
+ if (v >= r0 && v <= r1) return true;
+ } else if (type === 'date' || type === 'time') {
+ v = new Date(v);
+ r0 = new Date(r[0] / scale); r1 = new Date(r[1] / scale);
+ if (v >= r0 && v <= r1) return true;
+ } else if (type === 'factor') {
+ if (r.length === 0 || inArray(v, r)) return true;
+ } else if (type === 'logical') {
+ if (r.length === 0) return true;
+ if (inArray(v === '' ? 'na' : v, r)) return true;
+ }
+ return false;
+ };
+
+ $.fn.dataTable.ext.search.push(customFilter);
+
+ // search for the preset search strings if it is non-empty
+ if (searchCol) $input.trigger('input').trigger('change');
+
+ });
+
+ }
+
+ // highlight search keywords
+ var highlight = function() {
+ var body = $(table.table().body());
+ // removing the old highlighting first
+ body.unhighlight();
+
+ // don't highlight the "not found" row, so we get the rows using the api
+ if (table.rows({ filter: 'applied' }).data().length === 0) return;
+ // highlight global search keywords
+ body.highlight($.trim(table.search()).split(/\s+/));
+ // then highlight keywords from individual column filters
+ if (filterRow) filterRow.each(function(i, td) {
+ var $td = $(td), type = $td.data('type');
+ if (type !== 'character') return;
+ var $input = $td.children('div').first().children('input');
+ var column = table.column(i).nodes().to$(),
+ val = $.trim($input.val());
+ if (type !== 'character' || val === '') return;
+ column.highlight(val.split(/\s+/));
+ });
+ };
+
+ if (options.searchHighlight) {
+ table
+ .on('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth', highlight)
+ .on('destroy', function() {
+ // remove event handler
+ table.off('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth');
+ });
+
+ // Set the option for escaping regex characters in our search string. This will be used
+ // for all future matching.
+ jQuery.fn.highlight.options.escapeRegex = (!options.search || !options.search.regex);
+
+ // initial highlight for state saved conditions and initial states
+ highlight();
+ }
+
+ // run the callback function on the table instance
+ if (typeof data.callback === 'function') data.callback(table);
+
+ // double click to edit the cell, row, column, or all cells
+ if (data.editable) table.on('dblclick.dt', 'tbody td', function(e) {
+ // only bring up the editor when the cell itself is dbclicked, and ignore
+ // other dbclick events bubbled up (e.g. from the <input>)
+ if (e.target !== this) return;
+ var target = [], immediate = false;
+ switch (data.editable.target) {
+ case 'cell':
+ target = [this];
+ immediate = true; // edit will take effect immediately
+ break;
+ case 'row':
+ target = table.cells(table.cell(this).index().row, '*').nodes();
+ break;
+ case 'column':
+ target = table.cells('*', table.cell(this).index().column).nodes();
+ break;
+ case 'all':
+ target = table.cells().nodes();
+ break;
+ default:
+ throw 'The editable parameter must be "cell", "row", "column", or "all"';
+ }
+ var disableCols = data.editable.disable ? data.editable.disable.columns : null;
+ var numericCols = data.editable.numeric;
+ var areaCols = data.editable.area;
+ var dateCols = data.editable.date;
+ for (var i = 0; i < target.length; i++) {
+ (function(cell, current) {
+ var $cell = $(cell), html = $cell.html();
+ var _cell = table.cell(cell), value = _cell.data(), index = _cell.index().column;
+ var $input;
+ if (inArray(index, numericCols)) {
+ $input = $('<input type="number">');
+ } else if (inArray(index, areaCols)) {
+ $input = $('<textarea></textarea>');
+ } else if (inArray(index, dateCols)) {
+ $input = $('<input type="date">');
+ } else {
+ $input = $('<input type="text">');
+ }
+ if (!immediate) {
+ $cell.data('input', $input).data('html', html);
+ $input.attr('title', 'Hit Ctrl+Enter to finish editing, or Esc to cancel');
+ }
+ $input.val(value);
+ if (inArray(index, disableCols)) {
+ $input.attr('readonly', '').css('filter', 'invert(25%)');
+ }
+ $cell.empty().append($input);
+ if (cell === current) $input.focus();
+ $input.css('width', '100%');
+
+ if (immediate) $input.on('blur', function(e) {
+ var valueNew = $input.val();
+ if (valueNew !== value) {
+ _cell.data(valueNew);
+ if (HTMLWidgets.shinyMode) {
+ changeInput('cell_edit', [cellInfo(cell)], 'DT.cellInfo', null, {priority: 'event'});
+ }
+ // for server-side processing, users have to call replaceData() to update the table
+ if (!server) table.draw(false);
+ } else {
+ $cell.html(html);
+ }
+ }).on('keyup', function(e) {
+ // hit Escape to cancel editing
+ if (e.keyCode === 27) $input.trigger('blur');
+ });
+
+ // bulk edit (row, column, or all)
+ if (!immediate) $input.on('keyup', function(e) {
+ var removeInput = function($cell, restore) {
+ $cell.data('input').remove();
+ if (restore) $cell.html($cell.data('html'));
+ }
+ if (e.keyCode === 27) {
+ for (var i = 0; i < target.length; i++) {
+ removeInput($(target[i]), true);
+ }
+ } else if (e.keyCode === 13 && e.ctrlKey) {
+ // Ctrl + Enter
+ var cell, $cell, _cell, cellData = [];
+ for (var i = 0; i < target.length; i++) {
+ cell = target[i]; $cell = $(cell); _cell = table.cell(cell);
+ _cell.data($cell.data('input').val());
+ HTMLWidgets.shinyMode && cellData.push(cellInfo(cell));
+ removeInput($cell, false);
+ }
+ if (HTMLWidgets.shinyMode) {
+ changeInput('cell_edit', cellData, 'DT.cellInfo', null, {priority: "event"});
+ }
+ if (!server) table.draw(false);
+ }
+ });
+ })(target[i], this);
+ }
+ });
+
+ // interaction with shiny
+ if (!HTMLWidgets.shinyMode && !crosstalkOptions.group) return;
+
+ var methods = {};
+ var shinyData = {};
+
+ methods.updateCaption = function(caption) {
+ if (!caption) return;
+ $table.children('caption').replaceWith(caption);
+ }
+
+ // register clear functions to remove input values when the table is removed
+ instance.clearInputs = {};
+
+ var changeInput = function(id, value, type, noCrosstalk, opts) {
+ var event = id;
+ id = el.id + '_' + id;
+ if (type) id = id + ':' + type;
+ // do not update if the new value is the same as old value
+ if (event !== 'cell_edit' && !/_clicked$/.test(event) && shinyData.hasOwnProperty(id) && shinyData[id] === JSON.stringify(value))
+ return;
+ shinyData[id] = JSON.stringify(value);
+ if (HTMLWidgets.shinyMode && Shiny.setInputValue) {
+ Shiny.setInputValue(id, value, opts);
+ if (!instance.clearInputs[id]) instance.clearInputs[id] = function() {
+ Shiny.setInputValue(id, null);
+ }
+ }
+
+ // HACK
+ if (event === "rows_selected" && !noCrosstalk) {
+ if (crosstalkOptions.group) {
+ var keys = crosstalkOptions.key;
+ var selectedKeys = null;
+ if (value) {
+ selectedKeys = [];
+ for (var i = 0; i < value.length; i++) {
+ // The value array's contents use 1-based row numbers, so we must
+ // convert to 0-based before indexing into the keys array.
+ selectedKeys.push(keys[value[i] - 1]);
+ }
+ }
+ instance.ctselectHandle.set(selectedKeys);
+ }
+ }
+ };
+
+ var addOne = function(x) {
+ return x.map(function(i) { return 1 + i; });
+ };
+
+ var unique = function(x) {
+ var ux = [];
+ $.each(x, function(i, el){
+ if ($.inArray(el, ux) === -1) ux.push(el);
+ });
+ return ux;
+ }
+
+ // change the row index of a cell
+ var tweakCellIndex = function(cell) {
+ var info = cell.index();
+ // some cell may not be valid. e.g, #759
+ // when using the RowGroup extension, datatables will
+ // generate the row label and the cells are not part of
+ // the data thus contain no row/col info
+ if (info === undefined)
+ return {row: null, col: null};
+ if (server) {
+ info.row = DT_rows_current[info.row];
+ } else {
+ info.row += 1;
+ }
+ return {row: info.row, col: info.column};
+ }
+
+ var cleanSelectedValues = function() {
+ changeInput('rows_selected', []);
+ changeInput('columns_selected', []);
+ changeInput('cells_selected', transposeArray2D([]), 'shiny.matrix');
+ }
+ // #828 we should clean the selection on the server-side when the table reloads
+ cleanSelectedValues();
+
+ // a flag to indicates if select extension is initialized or not
+ var flagSelectExt = table.settings()[0]._select !== undefined;
+ // the Select extension should only be used in the client mode and
+ // when the selection.mode is set to none
+ if (data.selection.mode === 'none' && !server && flagSelectExt) {
+ var updateRowsSelected = function() {
+ var rows = table.rows({selected: true});
+ var selected = [];
+ $.each(rows.indexes().toArray(), function(i, v) {
+ selected.push(v + 1);
+ });
+ changeInput('rows_selected', selected);
+ }
+ var updateColsSelected = function() {
+ var columns = table.columns({selected: true});
+ changeInput('columns_selected', columns.indexes().toArray());
+ }
+ var updateCellsSelected = function() {
+ var cells = table.cells({selected: true});
+ var selected = [];
+ cells.every(function() {
+ var row = this.index().row;
+ var col = this.index().column;
+ selected = selected.concat([[row + 1, col]]);
+ });
+ changeInput('cells_selected', transposeArray2D(selected), 'shiny.matrix');
+ }
+ table.on('select deselect', function(e, dt, type, indexes) {
+ updateRowsSelected();
+ updateColsSelected();
+ updateCellsSelected();
+ })
+ updateRowsSelected();
+ updateColsSelected();
+ updateCellsSelected();
+ }
+
+ var selMode = data.selection.mode, selTarget = data.selection.target;
+ var selDisable = data.selection.selectable === false;
+ if (inArray(selMode, ['single', 'multiple'])) {
+ var selClass = inArray(data.style, ['bootstrap', 'bootstrap4']) ? 'active' : 'selected';
+ // selected1: row indices; selected2: column indices
+ var initSel = function(x) {
+ if (x === null || typeof x === 'boolean' || selTarget === 'cell') {
+ return {rows: [], cols: []};
+ } else if (selTarget === 'row') {
+ return {rows: $.makeArray(x), cols: []};
+ } else if (selTarget === 'column') {
+ return {rows: [], cols: $.makeArray(x)};
+ } else if (selTarget === 'row+column') {
+ return {rows: $.makeArray(x.rows), cols: $.makeArray(x.cols)};
+ }
+ }
+ var selected = data.selection.selected;
+ var selected1 = initSel(selected).rows, selected2 = initSel(selected).cols;
+ // selectable should contain either all positive or all non-positive values, not both
+ // positive values indicate "selectable" while non-positive values means "nonselectable"
+ // the assertion is performed on R side. (only column indicides could be zero which indicates
+ // the row name)
+ var selectable = data.selection.selectable;
+ var selectable1 = initSel(selectable).rows, selectable2 = initSel(selectable).cols;
+
+ // After users reorder the rows or filter the table, we cannot use the table index
+ // directly. Instead, we need this function to find out the rows between the two clicks.
+ // If user filter the table again between the start click and the end click, the behavior
+ // would be undefined, but it should not be a problem.
+ var shiftSelRowsIndex = function(start, end) {
+ var indexes = server ? DT_rows_all : table.rows({ search: 'applied' }).indexes().toArray();
+ start = indexes.indexOf(start); end = indexes.indexOf(end);
+ // if start is larger than end, we need to swap
+ if (start > end) {
+ var tmp = end; end = start; start = tmp;
+ }
+ return indexes.slice(start, end + 1);
+ }
+
+ var serverRowIndex = function(clientRowIndex) {
+ return server ? DT_rows_current[clientRowIndex] : clientRowIndex + 1;
+ }
+
+ // row, column, or cell selection
+ var lastClickedRow;
+ if (inArray(selTarget, ['row', 'row+column'])) {
+ // Get the current selected rows. It will also
+ // update the selected1's value based on the current row selection state
+ // Note we can't put this function inside selectRows() directly,
+ // the reason is method.selectRows() will override selected1's value but this
+ // function will add rows to selected1 (keep the existing selection), which is
+ // inconsistent with column and cell selection.
+ var selectedRows = function() {
+ var rows = table.rows('.' + selClass);
+ var idx = rows.indexes().toArray();
+ if (!server) {
+ selected1 = addOne(idx);
+ return selected1;
+ }
+ idx = idx.map(function(i) {
+ return DT_rows_current[i];
+ });
+ selected1 = selMode === 'multiple' ? unique(selected1.concat(idx)) : idx;
+ return selected1;
+ }
+ // Change selected1's value based on selectable1, then refresh the row state
+ var onlyKeepSelectableRows = function() {
+ if (selDisable) { // users can't select; useful when only want backend select
+ selected1 = [];
+ return;
+ }
+ if (selectable1.length === 0) return;
+ var nonselectable = selectable1[0] <= 0;
+ if (nonselectable) {
+ // should make selectable1 positive
+ selected1 = $(selected1).not(selectable1.map(function(i) { return -i; })).get();
+ } else {
+ selected1 = $(selected1).filter(selectable1).get();
+ }
+ }
+ // Change selected1's value based on selectable1, then
+ // refresh the row selection state according to values in selected1
+ var selectRows = function(ignoreSelectable) {
+ if (!ignoreSelectable) onlyKeepSelectableRows();
+ table.$('tr.' + selClass).removeClass(selClass);
+ if (selected1.length === 0) return;
+ if (server) {
+ table.rows({page: 'current'}).every(function() {
+ if (inArray(DT_rows_current[this.index()], selected1)) {
+ $(this.node()).addClass(selClass);
+ }
+ });
+ } else {
+ var selected0 = selected1.map(function(i) { return i - 1; });
+ $(table.rows(selected0).nodes()).addClass(selClass);
+ }
+ }
+ table.on('mousedown.dt', 'tbody tr', function(e) {
+ var $this = $(this), thisRow = table.row(this);
+ if (selMode === 'multiple') {
+ if (e.shiftKey && lastClickedRow !== undefined) {
+ // select or de-select depends on the last clicked row's status
+ var flagSel = !$this.hasClass(selClass);
+ var crtClickedRow = serverRowIndex(thisRow.index());
+ if (server) {
+ var rowsIndex = shiftSelRowsIndex(lastClickedRow, crtClickedRow);
+ // update current page's selClass
+ rowsIndex.map(function(i) {
+ var rowIndex = DT_rows_current.indexOf(i);
+ if (rowIndex >= 0) {
+ var row = table.row(rowIndex).nodes().to$();
+ var flagRowSel = !row.hasClass(selClass);
+ if (flagSel === flagRowSel) row.toggleClass(selClass);
+ }
+ });
+ // update selected1
+ if (flagSel) {
+ selected1 = unique(selected1.concat(rowsIndex));
+ } else {
+ selected1 = selected1.filter(function(index) {
+ return !inArray(index, rowsIndex);
+ });
+ }
+ } else {
+ // js starts from 0
+ shiftSelRowsIndex(lastClickedRow - 1, crtClickedRow - 1).map(function(value) {
+ var row = table.row(value).nodes().to$();
+ var flagRowSel = !row.hasClass(selClass);
+ if (flagSel === flagRowSel) row.toggleClass(selClass);
+ });
+ }
+ e.preventDefault();
+ } else {
+ $this.toggleClass(selClass);
+ }
+ } else {
+ if ($this.hasClass(selClass)) {
+ $this.removeClass(selClass);
+ } else {
+ table.$('tr.' + selClass).removeClass(selClass);
+ $this.addClass(selClass);
+ }
+ }
+ if (server && !$this.hasClass(selClass)) {
+ var id = DT_rows_current[thisRow.index()];
+ // remove id from selected1 since its class .selected has been removed
+ if (inArray(id, selected1)) selected1.splice($.inArray(id, selected1), 1);
+ }
+ selectedRows(); // update selected1's value based on selClass
+ selectRows(false); // only keep the selectable rows
+ changeInput('rows_selected', selected1);
+ changeInput('row_last_clicked', serverRowIndex(thisRow.index()), null, null, {priority: 'event'});
+ lastClickedRow = serverRowIndex(thisRow.index());
+ });
+ selectRows(false); // in case users have specified pre-selected rows
+ // restore selected rows after the table is redrawn (e.g. sort/search/page);
+ // client-side tables will preserve the selections automatically; for
+ // server-side tables, we have to *real* row indices are in `selected1`
+ changeInput('rows_selected', selected1);
+ if (server) table.on('draw.dt', function(e) { selectRows(false); });
+ methods.selectRows = function(selected, ignoreSelectable) {
+ selected1 = $.makeArray(selected);
+ selectRows(ignoreSelectable);
+ changeInput('rows_selected', selected1);
+ }
+ }
+
+ if (inArray(selTarget, ['column', 'row+column'])) {
+ if (selTarget === 'row+column') {
+ $(table.columns().footer()).css('cursor', 'pointer');
+ }
+ // update selected2's value based on selectable2
+ var onlyKeepSelectableCols = function() {
+ if (selDisable) { // users can't select; useful when only want backend select
+ selected2 = [];
+ return;
+ }
+ if (selectable2.length === 0) return;
+ var nonselectable = selectable2[0] <= 0;
+ if (nonselectable) {
+ // need to make selectable2 positive
+ selected2 = $(selected2).not(selectable2.map(function(i) { return -i; })).get();
+ } else {
+ selected2 = $(selected2).filter(selectable2).get();
+ }
+ }
+ // update selected2 and then
+ // refresh the col selection state according to values in selected2
+ var selectCols = function(ignoreSelectable) {
+ if (!ignoreSelectable) onlyKeepSelectableCols();
+ // if selected2 is not a valide index (e.g., larger than the column number)
+ // table.columns(selected2) will fail and result in a blank table
+ // this is different from the table.rows(), where the out-of-range indexes
+ // doesn't affect at all
+ selected2 = $(selected2).filter(table.columns().indexes()).get();
+ table.columns().nodes().flatten().to$().removeClass(selClass);
+ if (selected2.length > 0)
+ table.columns(selected2).nodes().flatten().to$().addClass(selClass);
+ }
+ var callback = function() {
+ var colIdx = selTarget === 'column' ? table.cell(this).index().column :
+ $.inArray(this, table.columns().footer()),
+ thisCol = $(table.column(colIdx).nodes());
+ if (colIdx === -1) return;
+ if (thisCol.hasClass(selClass)) {
+ thisCol.removeClass(selClass);
+ selected2.splice($.inArray(colIdx, selected2), 1);
+ } else {
+ if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass);
+ thisCol.addClass(selClass);
+ selected2 = selMode === 'single' ? [colIdx] : unique(selected2.concat([colIdx]));
+ }
+ selectCols(false); // update selected2 based on selectable
+ changeInput('columns_selected', selected2);
+ }
+ if (selTarget === 'column') {
+ $(table.table().body()).on('click.dt', 'td', callback);
+ } else {
+ $(table.table().footer()).on('click.dt', 'tr th', callback);
+ }
+ selectCols(false); // in case users have specified pre-selected columns
+ changeInput('columns_selected', selected2);
+ if (server) table.on('draw.dt', function(e) { selectCols(false); });
+ methods.selectColumns = function(selected, ignoreSelectable) {
+ selected2 = $.makeArray(selected);
+ selectCols(ignoreSelectable);
+ changeInput('columns_selected', selected2);
+ }
+ }
+
+ if (selTarget === 'cell') {
+ var selected3 = [], selectable3 = [];
+ if (selected !== null) selected3 = selected;
+ if (selectable !== null && typeof selectable !== 'boolean') selectable3 = selectable;
+ var findIndex = function(ij, sel) {
+ for (var i = 0; i < sel.length; i++) {
+ if (ij[0] === sel[i][0] && ij[1] === sel[i][1]) return i;
+ }
+ return -1;
+ }
+ // Change selected3's value based on selectable3, then refresh the cell state
+ var onlyKeepSelectableCells = function() {
+ if (selDisable) { // users can't select; useful when only want backend select
+ selected3 = [];
+ return;
+ }
+ if (selectable3.length === 0) return;
+ var nonselectable = selectable3[0][0] <= 0;
+ var out = [];
+ if (nonselectable) {
+ selected3.map(function(ij) {
+ // should make selectable3 positive
+ if (findIndex([-ij[0], -ij[1]], selectable3) === -1) { out.push(ij); }
+ });
+ } else {
+ selected3.map(function(ij) {
+ if (findIndex(ij, selectable3) > -1) { out.push(ij); }
+ });
+ }
+ selected3 = out;
+ }
+ // Change selected3's value based on selectable3, then
+ // refresh the cell selection state according to values in selected3
+ var selectCells = function(ignoreSelectable) {
+ if (!ignoreSelectable) onlyKeepSelectableCells();
+ table.$('td.' + selClass).removeClass(selClass);
+ if (selected3.length === 0) return;
+ if (server) {
+ table.cells({page: 'current'}).every(function() {
+ var info = tweakCellIndex(this);
+ if (findIndex([info.row, info.col], selected3) > -1)
+ $(this.node()).addClass(selClass);
+ });
+ } else {
+ selected3.map(function(ij) {
+ $(table.cell(ij[0] - 1, ij[1]).node()).addClass(selClass);
+ });
+ }
+ };
+ table.on('click.dt', 'tbody td', function() {
+ var $this = $(this), info = tweakCellIndex(table.cell(this));
+ if ($this.hasClass(selClass)) {
+ $this.removeClass(selClass);
+ selected3.splice(findIndex([info.row, info.col], selected3), 1);
+ } else {
+ if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass);
+ $this.addClass(selClass);
+ selected3 = selMode === 'single' ? [[info.row, info.col]] :
+ unique(selected3.concat([[info.row, info.col]]));
+ }
+ selectCells(false); // must call this to update selected3 based on selectable3
+ changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix');
+ });
+ selectCells(false); // in case users have specified pre-selected columns
+ changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix');
+
+ if (server) table.on('draw.dt', function(e) { selectCells(false); });
+ methods.selectCells = function(selected, ignoreSelectable) {
+ selected3 = selected ? selected : [];
+ selectCells(ignoreSelectable);
+ changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix');
+ }
+ }
+ }
+
+ // expose some table info to Shiny
+ var updateTableInfo = function(e, settings) {
+ // TODO: is anyone interested in the page info?
+ // changeInput('page_info', table.page.info());
+ var updateRowInfo = function(id, modifier) {
+ var idx;
+ if (server) {
+ idx = modifier.page === 'current' ? DT_rows_current : DT_rows_all;
+ } else {
+ var rows = table.rows($.extend({
+ search: 'applied',
+ page: 'all'
+ }, modifier));
+ idx = addOne(rows.indexes().toArray());
+ }
+ changeInput('rows' + '_' + id, idx);
+ };
+ updateRowInfo('current', {page: 'current'});
+ updateRowInfo('all', {});
+ }
+ table.on('draw.dt', updateTableInfo);
+ updateTableInfo();
+
+ // state info
+ table.on('draw.dt column-visibility.dt', function() {
+ changeInput('state', table.state());
+ });
+ changeInput('state', table.state());
+
+ // search info
+ var updateSearchInfo = function() {
+ changeInput('search', table.search());
+ if (filterRow) changeInput('search_columns', filterRow.toArray().map(function(td) {
+ return $(td).find('input').first().val();
+ }));
+ }
+ table.on('draw.dt', updateSearchInfo);
+ updateSearchInfo();
+
+ var cellInfo = function(thiz) {
+ var info = tweakCellIndex(table.cell(thiz));
+ info.value = table.cell(thiz).data();
+ return info;
+ }
+ // the current cell clicked on
+ table.on('click.dt', 'tbody td', function() {
+ changeInput('cell_clicked', cellInfo(this), null, null, {priority: 'event'});
+ })
+ changeInput('cell_clicked', {});
+
+ // do not trigger table selection when clicking on links unless they have classes
+ table.on('mousedown.dt', 'tbody td a', function(e) {
+ if (this.className === '') e.stopPropagation();
+ });
+
+ methods.addRow = function(data, rowname, resetPaging) {
+ var n = table.columns().indexes().length, d = n - data.length;
+ if (d === 1) {
+ data = rowname.concat(data)
+ } else if (d !== 0) {
+ console.log(data);
+ console.log(table.columns().indexes());
+ throw 'New data must be of the same length as current data (' + n + ')';
+ };
+ table.row.add(data).draw(resetPaging);
+ }
+
+ methods.updateSearch = function(keywords) {
+ if (keywords.global !== null)
+ $(table.table().container()).find('input[type=search]').first()
+ .val(keywords.global).trigger('input');
+ var columns = keywords.columns;
+ if (!filterRow || columns === null) return;
+ filterRow.toArray().map(function(td, i) {
+ var v = typeof columns === 'string' ? columns : columns[i];
+ if (typeof v === 'undefined') {
+ console.log('The search keyword for column ' + i + ' is undefined')
+ return;
+ }
+ // Update column search string and values on linked filter widgets.
+ // 'input' for factor and char filters, 'change' for numeric filters.
+ $(td).find('input').first().val(v).trigger('input', [true]).trigger('change');
+ });
+ table.draw();
+ }
+
+ methods.hideCols = function(hide, reset) {
+ if (reset) table.columns().visible(true, false);
+ table.columns(hide).visible(false);
+ }
+
+ methods.showCols = function(show, reset) {
+ if (reset) table.columns().visible(false, false);
+ table.columns(show).visible(true);
+ }
+
+ methods.colReorder = function(order, origOrder) {
+ table.colReorder.order(order, origOrder);
+ }
+
+ methods.selectPage = function(page) {
+ if (table.page.info().pages < page || page < 1) {
+ throw 'Selected page is out of range';
+ };
+ table.page(page - 1).draw(false);
+ }
+
+ methods.reloadData = function(resetPaging, clearSelection) {
+ // empty selections first if necessary
+ if (methods.selectRows && inArray('row', clearSelection)) methods.selectRows([]);
+ if (methods.selectColumns && inArray('column', clearSelection)) methods.selectColumns([]);
+ if (methods.selectCells && inArray('cell', clearSelection)) methods.selectCells([]);
+ table.ajax.reload(null, resetPaging);
+ }
+
+ // update table filters (set new limits of sliders)
+ methods.updateFilters = function(newProps) {
+ // loop through each filter in the filter row
+ filterRow.each(function(i, td) {
+ var k = i;
+ if (filterRow.length > newProps.length) {
+ if (i === 0) return; // first column is row names
+ k = i - 1;
+ }
+ // Update the filters to reflect the updated data.
+ // Allow "falsy" (e.g. NULL) to signify a no-op.
+ if (newProps[k]) {
+ setFilterProps(td, newProps[k]);
+ }
+ });
+ };
+
+ table.shinyMethods = methods;
+ },
+ resize: function(el, width, height, instance) {
+ if (instance.data) this.renderValue(el, instance.data, instance);
+
+ // dynamically adjust height if fillContainer = TRUE
+ if (instance.fillContainer)
+ this.fillAvailableHeight(el, height);
+
+ this.adjustWidth(el);
+ },
+
+ // dynamically set the scroll body to fill available height
+ // (used with fillContainer = TRUE)
+ fillAvailableHeight: function(el, availableHeight) {
+
+ // see how much of the table is occupied by header/footer elements
+ // and use that to compute a target scroll body height
+ var dtWrapper = $(el).find('div.dataTables_wrapper');
+ var dtScrollBody = $(el).find($('div.dataTables_scrollBody'));
+ var framingHeight = dtWrapper.innerHeight() - dtScrollBody.innerHeight();
+ var scrollBodyHeight = availableHeight - framingHeight;
+
+ // we need to set `max-height` to none as datatables library now sets this
+ // to a fixed height, disabling the ability to resize to fill the window,
+ // as it will be set to a fixed 100px under such circumstances, e.g., RStudio IDE,
+ // or FlexDashboard
+ // see https://github.com/rstudio/DT/issues/951#issuecomment-1026464509
+ dtScrollBody.css('max-height', 'none');
+ // set the height
+ dtScrollBody.height(scrollBodyHeight + 'px');
+ },
+
+ // adjust the width of columns; remove the hard-coded widths on table and the
+ // scroll header when scrollX/Y are enabled
+ adjustWidth: function(el) {
+ var $el = $(el), table = $el.data('datatable');
+ if (table) table.columns.adjust();
+ $el.find('.dataTables_scrollHeadInner').css('width', '')
+ .children('table').css('margin-left', '');
+ }
+});
+
+ if (!HTMLWidgets.shinyMode) return;
+
+ Shiny.addCustomMessageHandler('datatable-calls', function(data) {
+ var id = data.id;
+ var el = document.getElementById(id);
+ var table = el ? $(el).data('datatable') : null;
+ if (!table) {
+ console.log("Couldn't find table with id " + id);
+ return;
+ }
+
+ var methods = table.shinyMethods, call = data.call;
+ if (methods[call.method]) {
+ methods[call.method].apply(table, call.args);
+ } else {
+ console.log("Unknown method " + call.method);
+ }
+ });
+
+})();
diff --git a/docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css b/docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css
new file mode 100644
index 00000000..bd1159c8
--- /dev/null
+++ b/docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css
@@ -0,0 +1,32 @@
+.dt-crosstalk-fade {
+ opacity: 0.2;
+}
+
+html body div.DTS div.dataTables_scrollBody {
+ background: none;
+}
+
+
+/*
+Fix https://github.com/rstudio/DT/issues/563
+If the `table.display` is set to "block" (e.g., pkgdown), the browser will display
+datatable objects strangely. The search panel and the page buttons will still be
+in full-width but the table body will be "compact" and shorter.
+In therory, having this attributes will affect `dom="t"`
+with `display: block` users. But in reality, there should be no one.
+We may remove the below lines in the future if the upstream agree to have this there.
+See https://github.com/DataTables/DataTablesSrc/issues/160
+*/
+
+table.dataTable {
+ display: table;
+}
+
+
+/*
+When DTOutput(fill = TRUE), it receives a .html-fill-item class (via htmltools::bindFillRole()), which effectively amounts to `flex: 1 1 auto`. That's mostly fine, but the case where `fillContainer=TRUE`+`height:auto`+`flex-basis:auto` and the container (e.g., a bslib::card()) doesn't have a defined height is a bit problematic since the table wants to fit the parent but the parent wants to fit the table, which results pretty small table height (maybe because there is a minimum height somewhere?). It seems better in this case to impose a 400px height default for the table, which we can do by setting `flex-basis` to 400px (the table is still allowed to grow/shrink when the container has an opinionated height).
+*/
+
+.html-fill-container > .html-fill-item.datatables {
+ flex-basis: 400px;
+}
diff --git a/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css
new file mode 100644
index 00000000..b2dd141f
--- /dev/null
+++ b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css
@@ -0,0 +1,28 @@
+/* Selected rows/cells */
+table.dataTable tr.selected td, table.dataTable td.selected {
+ background-color: #b0bed9 !important;
+}
+/* In case of scrollX/Y or FixedHeader */
+.dataTables_scrollBody .dataTables_sizing {
+ visibility: hidden;
+}
+
+/* The datatables' theme CSS file doesn't define
+the color but with white background. It leads to an issue that
+when the HTML's body color is set to 'white', the user can't
+see the text since the background is white. One case happens in the
+RStudio's IDE when inline viewing the DT table inside an Rmd file,
+if the IDE theme is set to "Cobalt".
+
+See https://github.com/rstudio/DT/issues/447 for more info
+
+This fixes should have little side-effects because all the other elements
+of the default theme use the #333 font color.
+
+TODO: The upstream may use relative colors for both the table background
+and the color. It means the table can display well without this patch
+then. At that time, we need to remove the below CSS attributes.
+*/
+div.datatables {
+ color: #333;
+}
diff --git a/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css
new file mode 100644
index 00000000..ad59f843
--- /dev/null
+++ b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css
@@ -0,0 +1 @@
+:root{--dt-row-selected: 13, 110, 253;--dt-row-selected-text: 255, 255, 255;--dt-row-selected-link: 9, 10, 11;--dt-row-stripe: 0, 0, 0;--dt-row-hover: 0, 0, 0;--dt-column-ordering: 0, 0, 0;--dt-html-background: white}:root.dark{--dt-html-background: rgb(33, 37, 41)}table.dataTable td.dt-control{text-align:center;cursor:pointer}table.dataTable td.dt-control:before{display:inline-block;color:rgba(0, 0, 0, 0.5);content:"â–º"}table.dataTable tr.dt-hasChild td.dt-control:before{content:"â–¼"}html.dark table.dataTable td.dt-control:before{color:rgba(255, 255, 255, 0.5)}html.dark table.dataTable tr.dt-hasChild td.dt-control:before{color:rgba(255, 255, 255, 0.5)}table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting_asc_disabled,table.dataTable thead>tr>th.sorting_desc_disabled,table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting_asc_disabled,table.dataTable thead>tr>td.sorting_desc_disabled{cursor:pointer;position:relative;padding-right:26px}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after{position:absolute;display:block;opacity:.125;right:10px;line-height:9px;font-size:.8em}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:before{bottom:50%;content:"â–²";content:"â–²"/""}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:after{top:50%;content:"â–¼";content:"â–¼"/""}table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:after{opacity:.6}table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting_asc_disabled:before{display:none}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}div.dataTables_scrollBody>table.dataTable>thead>tr>th:before,div.dataTables_scrollBody>table.dataTable>thead>tr>th:after,div.dataTables_scrollBody>table.dataTable>thead>tr>td:before,div.dataTables_scrollBody>table.dataTable>thead>tr>td:after{display:none}div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:2px}div.dataTables_processing>div:last-child{position:relative;width:80px;height:15px;margin:1em auto}div.dataTables_processing>div:last-child>div{position:absolute;top:0;width:13px;height:13px;border-radius:50%;background:rgb(13, 110, 253);background:rgb(var(--dt-row-selected));animation-timing-function:cubic-bezier(0, 1, 1, 0)}div.dataTables_processing>div:last-child>div:nth-child(1){left:8px;animation:datatables-loader-1 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(2){left:8px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(3){left:32px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(4){left:56px;animation:datatables-loader-3 .6s infinite}@keyframes datatables-loader-1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes datatables-loader-3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes datatables-loader-2{0%{transform:translate(0, 0)}100%{transform:translate(24px, 0)}}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th,table.dataTable thead td,table.dataTable tfoot th,table.dataTable tfoot td{text-align:left}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable>thead>tr>th,table.dataTable>thead>tr>td{padding:10px;border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable>thead>tr>th:active,table.dataTable>thead>tr>td:active{outline:none}table.dataTable>tfoot>tr>th,table.dataTable>tfoot>tr>td{padding:10px 10px 6px 10px;border-top:1px solid rgba(0, 0, 0, 0.3)}table.dataTable tbody tr{background-color:transparent}table.dataTable tbody tr.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.9);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.9);color:rgb(255, 255, 255);color:rgb(var(--dt-row-selected-text))}table.dataTable tbody tr.selected a{color:rgb(9, 10, 11);color:rgb(var(--dt-row-selected-link))}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border>tbody>tr>th,table.dataTable.row-border>tbody>tr>td,table.dataTable.display>tbody>tr>th,table.dataTable.display>tbody>tr>td{border-top:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.row-border>tbody>tr:first-child>th,table.dataTable.row-border>tbody>tr:first-child>td,table.dataTable.display>tbody>tr:first-child>th,table.dataTable.display>tbody>tr:first-child>td{border-top:none}table.dataTable.row-border>tbody>tr.selected+tr.selected>td,table.dataTable.display>tbody>tr.selected+tr.selected>td{border-top-color:#0262ef}table.dataTable.cell-border>tbody>tr>th,table.dataTable.cell-border>tbody>tr>td{border-top:1px solid rgba(0, 0, 0, 0.15);border-right:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border>tbody>tr>th:first-child,table.dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border>tbody>tr:first-child>th,table.dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.dataTable.stripe>tbody>tr.odd>*,table.dataTable.display>tbody>tr.odd>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.023);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.023)}table.dataTable.stripe>tbody>tr.odd.selected>*,table.dataTable.display>tbody>tr.odd.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.923);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.923)}table.dataTable.hover>tbody>tr:hover>*,table.dataTable.display>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.035);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.035)}table.dataTable.hover>tbody>tr.selected:hover>*,table.dataTable.display>tbody>tr.selected:hover>*{box-shadow:inset 0 0 0 9999px #0d6efd !important;box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 1) !important}table.dataTable.order-column>tbody tr>.sorting_1,table.dataTable.order-column>tbody tr>.sorting_2,table.dataTable.order-column>tbody tr>.sorting_3,table.dataTable.display>tbody tr>.sorting_1,table.dataTable.display>tbody tr>.sorting_2,table.dataTable.display>tbody tr>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.019)}table.dataTable.order-column>tbody tr.selected>.sorting_1,table.dataTable.order-column>tbody tr.selected>.sorting_2,table.dataTable.order-column>tbody tr.selected>.sorting_3,table.dataTable.display>tbody tr.selected>.sorting_1,table.dataTable.display>tbody tr.selected>.sorting_2,table.dataTable.display>tbody tr.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919)}table.dataTable.display>tbody>tr.odd>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.054);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.054)}table.dataTable.display>tbody>tr.odd>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.047);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.047)}table.dataTable.display>tbody>tr.odd>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.039);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.039)}table.dataTable.display>tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.954);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.954)}table.dataTable.display>tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.947);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.947)}table.dataTable.display>tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.939);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.939)}table.dataTable.display>tbody>tr.even>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.019)}table.dataTable.display>tbody>tr.even>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.011);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.011)}table.dataTable.display>tbody>tr.even>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.003);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.003)}table.dataTable.display>tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919)}table.dataTable.display>tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.911);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.911)}table.dataTable.display>tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.903);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.903)}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.082);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.082)}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.074);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.074)}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.062);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.062)}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.982);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.982)}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.974);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.974)}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.962);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.962)}table.dataTable.no-footer{border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable.compact thead th,table.dataTable.compact thead td,table.dataTable.compact tfoot th,table.dataTable.compact tfoot td,table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_length select{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;color:inherit;padding:4px}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;color:inherit;margin-left:3px}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;color:inherit !important;border:1px solid transparent;border-radius:2px;background:transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:inherit !important;border:1px solid rgba(0, 0, 0, 0.3);background-color:rgba(0, 0, 0, 0.05);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.05)), color-stop(100%, rgba(0, 0, 0, 0.05)));background:-webkit-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-moz-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-ms-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-o-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:linear-gradient(to bottom, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#111;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#0c0c0c;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid rgba(0, 0, 0, 0.3)}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}html.dark{--dt-row-hover: 255, 255, 255;--dt-row-stripe: 255, 255, 255;--dt-column-ordering: 255, 255, 255}html.dark table.dataTable>thead>tr>th,html.dark table.dataTable>thead>tr>td{border-bottom:1px solid rgb(89, 91, 94)}html.dark table.dataTable>thead>tr>th:active,html.dark table.dataTable>thead>tr>td:active{outline:none}html.dark table.dataTable>tfoot>tr>th,html.dark table.dataTable>tfoot>tr>td{border-top:1px solid rgb(89, 91, 94)}html.dark table.dataTable.row-border>tbody>tr>th,html.dark table.dataTable.row-border>tbody>tr>td,html.dark table.dataTable.display>tbody>tr>th,html.dark table.dataTable.display>tbody>tr>td{border-top:1px solid rgb(64, 67, 70)}html.dark table.dataTable.row-border>tbody>tr.selected+tr.selected>td,html.dark table.dataTable.display>tbody>tr.selected+tr.selected>td{border-top-color:#0257d5}html.dark table.dataTable.cell-border>tbody>tr>th,html.dark table.dataTable.cell-border>tbody>tr>td{border-top:1px solid rgb(64, 67, 70);border-right:1px solid rgb(64, 67, 70)}html.dark table.dataTable.cell-border>tbody>tr>th:first-child,html.dark table.dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid rgb(64, 67, 70)}html.dark .dataTables_wrapper .dataTables_filter input,html.dark .dataTables_wrapper .dataTables_length select{border:1px solid rgba(255, 255, 255, 0.2);background-color:var(--dt-html-background)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{border:1px solid rgb(89, 91, 94);background:rgba(255, 255, 255, 0.15)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{color:#666 !important}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button:hover{border:1px solid rgb(53, 53, 53);background:rgb(53, 53, 53)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button:active{background:#3a3a3a}
diff --git a/docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js b/docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js
new file mode 100644
index 00000000..f786b0da
--- /dev/null
+++ b/docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js
@@ -0,0 +1,4 @@
+/*! DataTables 1.13.6
+ * ©2008-2023 SpryMedia Ltd - datatables.net/license
+ */
+!function(n){"use strict";var a;"function"==typeof define&&define.amd?define(["jquery"],function(t){return n(t,window,document)}):"object"==typeof exports?(a=require("jquery"),"undefined"==typeof window?module.exports=function(t,e){return t=t||window,e=e||a(t),n(e,t,t.document)}:n(a,window,window.document)):window.DataTable=n(jQuery,window,document)}(function(P,j,v,H){"use strict";function d(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null}function l(t,e,n){var a=typeof t,r="string"==a;return"number"==a||"bigint"==a||!!h(t)||(e&&r&&(t=$(t,e)),n&&r&&(t=t.replace(q,"")),!isNaN(parseFloat(t))&&isFinite(t))}function a(t,e,n){var a;return!!h(t)||(h(a=t)||"string"==typeof a)&&!!l(t.replace(V,"").replace(/<script/i,""),e,n)||null}function m(t,e,n,a){var r=[],o=0,i=e.length;if(a!==H)for(;o<i;o++)t[e[o]][n]&&r.push(t[e[o]][n][a]);else for(;o<i;o++)r.push(t[e[o]][n]);return r}function f(t,e){var n,a=[];e===H?(e=0,n=t):(n=e,e=t);for(var r=e;r<n;r++)a.push(r);return a}function _(t){for(var e=[],n=0,a=t.length;n<a;n++)t[n]&&e.push(t[n]);return e}function s(t,e){return-1!==this.indexOf(t,e=e===H?0:e)}var p,e,t,w=function(t,v){if(w.factory(t,v))return w;if(this instanceof w)return P(t).DataTable(v);v=t,this.$=function(t,e){return this.api(!0).$(t,e)},this._=function(t,e){return this.api(!0).rows(t,e).data()},this.api=function(t){return new B(t?ge(this[p.iApiIndex]):this)},this.fnAddData=function(t,e){var n=this.api(!0),t=(Array.isArray(t)&&(Array.isArray(t[0])||P.isPlainObject(t[0]))?n.rows:n.row).add(t);return e!==H&&!e||n.draw(),t.flatten().toArray()},this.fnAdjustColumnSizing=function(t){var e=this.api(!0).columns.adjust(),n=e.settings()[0],a=n.oScroll;t===H||t?e.draw(!1):""===a.sX&&""===a.sY||Qt(n)},this.fnClearTable=function(t){var e=this.api(!0).clear();t!==H&&!t||e.draw()},this.fnClose=function(t){this.api(!0).row(t).child.hide()},this.fnDeleteRow=function(t,e,n){var a=this.api(!0),t=a.rows(t),r=t.settings()[0],o=r.aoData[t[0][0]];return t.remove(),e&&e.call(this,r,o),n!==H&&!n||a.draw(),o},this.fnDestroy=function(t){this.api(!0).destroy(t)},this.fnDraw=function(t){this.api(!0).draw(t)},this.fnFilter=function(t,e,n,a,r,o){var i=this.api(!0);(null===e||e===H?i:i.column(e)).search(t,n,a,o),i.draw()},this.fnGetData=function(t,e){var n,a=this.api(!0);return t!==H?(n=t.nodeName?t.nodeName.toLowerCase():"",e!==H||"td"==n||"th"==n?a.cell(t,e).data():a.row(t).data()||null):a.data().toArray()},this.fnGetNodes=function(t){var e=this.api(!0);return t!==H?e.row(t).node():e.rows().nodes().flatten().toArray()},this.fnGetPosition=function(t){var e=this.api(!0),n=t.nodeName.toUpperCase();return"TR"==n?e.row(t).index():"TD"==n||"TH"==n?[(n=e.cell(t).index()).row,n.columnVisible,n.column]:null},this.fnIsOpen=function(t){return this.api(!0).row(t).child.isShown()},this.fnOpen=function(t,e,n){return this.api(!0).row(t).child(e,n).show().child()[0]},this.fnPageChange=function(t,e){t=this.api(!0).page(t);e!==H&&!e||t.draw(!1)},this.fnSetColumnVis=function(t,e,n){t=this.api(!0).column(t).visible(e);n!==H&&!n||t.columns.adjust().draw()},this.fnSettings=function(){return ge(this[p.iApiIndex])},this.fnSort=function(t){this.api(!0).order(t).draw()},this.fnSortListener=function(t,e,n){this.api(!0).order.listener(t,e,n)},this.fnUpdate=function(t,e,n,a,r){var o=this.api(!0);return(n===H||null===n?o.row(e):o.cell(e,n)).data(t),r!==H&&!r||o.columns.adjust(),a!==H&&!a||o.draw(),0},this.fnVersionCheck=p.fnVersionCheck;var e,y=this,D=v===H,_=this.length;for(e in D&&(v={}),this.oApi=this.internal=p.internal,w.ext.internal)e&&(this[e]=$e(e));return this.each(function(){var r=1<_?be({},v,!0):v,o=0,t=this.getAttribute("id"),i=!1,e=w.defaults,l=P(this);if("table"!=this.nodeName.toLowerCase())W(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{K(e),Q(e.column),C(e,e,!0),C(e.column,e.column,!0),C(e,P.extend(r,l.data()),!0);for(var n=w.settings,o=0,s=n.length;o<s;o++){var a=n[o];if(a.nTable==this||a.nTHead&&a.nTHead.parentNode==this||a.nTFoot&&a.nTFoot.parentNode==this){var u=(r.bRetrieve!==H?r:e).bRetrieve,c=(r.bDestroy!==H?r:e).bDestroy;if(D||u)return a.oInstance;if(c){a.oInstance.fnDestroy();break}return void W(a,0,"Cannot reinitialise DataTable",3)}if(a.sTableId==this.id){n.splice(o,1);break}}null!==t&&""!==t||(t="DataTables_Table_"+w.ext._unique++,this.id=t);var f,d,h=P.extend(!0,{},w.models.oSettings,{sDestroyWidth:l[0].style.width,sInstance:t,sTableId:t}),p=(h.nTable=this,h.oApi=y.internal,h.oInit=r,n.push(h),h.oInstance=1===y.length?y:l.dataTable(),K(r),Z(r.oLanguage),r.aLengthMenu&&!r.iDisplayLength&&(r.iDisplayLength=(Array.isArray(r.aLengthMenu[0])?r.aLengthMenu[0]:r.aLengthMenu)[0]),r=be(P.extend(!0,{},e),r),F(h.oFeatures,r,["bPaginate","bLengthChange","bFilter","bSort","bSortMulti","bInfo","bProcessing","bAutoWidth","bSortClasses","bServerSide","bDeferRender"]),F(h,r,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]),F(h.oScroll,r,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]),F(h.oLanguage,r,"fnInfoCallback"),L(h,"aoDrawCallback",r.fnDrawCallback,"user"),L(h,"aoServerParams",r.fnServerParams,"user"),L(h,"aoStateSaveParams",r.fnStateSaveParams,"user"),L(h,"aoStateLoadParams",r.fnStateLoadParams,"user"),L(h,"aoStateLoaded",r.fnStateLoaded,"user"),L(h,"aoRowCallback",r.fnRowCallback,"user"),L(h,"aoRowCreatedCallback",r.fnCreatedRow,"user"),L(h,"aoHeaderCallback",r.fnHeaderCallback,"user"),L(h,"aoFooterCallback",r.fnFooterCallback,"user"),L(h,"aoInitComplete",r.fnInitComplete,"user"),L(h,"aoPreDrawCallback",r.fnPreDrawCallback,"user"),h.rowIdFn=A(r.rowId),tt(h),h.oClasses),g=(P.extend(p,w.ext.classes,r.oClasses),l.addClass(p.sTable),h.iInitDisplayStart===H&&(h.iInitDisplayStart=r.iDisplayStart,h._iDisplayStart=r.iDisplayStart),null!==r.iDeferLoading&&(h.bDeferLoading=!0,t=Array.isArray(r.iDeferLoading),h._iRecordsDisplay=t?r.iDeferLoading[0]:r.iDeferLoading,h._iRecordsTotal=t?r.iDeferLoading[1]:r.iDeferLoading),h.oLanguage),t=(P.extend(!0,g,r.oLanguage),g.sUrl?(P.ajax({dataType:"json",url:g.sUrl,success:function(t){C(e.oLanguage,t),Z(t),P.extend(!0,g,t,h.oInit.oLanguage),R(h,null,"i18n",[h]),Jt(h)},error:function(){Jt(h)}}),i=!0):R(h,null,"i18n",[h]),null===r.asStripeClasses&&(h.asStripeClasses=[p.sStripeOdd,p.sStripeEven]),h.asStripeClasses),b=l.children("tbody").find("tr").eq(0),m=(-1!==P.inArray(!0,P.map(t,function(t,e){return b.hasClass(t)}))&&(P("tbody tr",this).removeClass(t.join(" ")),h.asDestroyStripes=t.slice()),[]),t=this.getElementsByTagName("thead");if(0!==t.length&&(wt(h.aoHeader,t[0]),m=Ct(h)),null===r.aoColumns)for(f=[],o=0,s=m.length;o<s;o++)f.push(null);else f=r.aoColumns;for(o=0,s=f.length;o<s;o++)nt(h,m?m[o]:null);st(h,r.aoColumnDefs,f,function(t,e){at(h,t,e)}),b.length&&(d=function(t,e){return null!==t.getAttribute("data-"+e)?e:null},P(b[0]).children("th, td").each(function(t,e){var n,a=h.aoColumns[t];a||W(h,0,"Incorrect column count",18),a.mData===t&&(n=d(e,"sort")||d(e,"order"),e=d(e,"filter")||d(e,"search"),null===n&&null===e||(a.mData={_:t+".display",sort:null!==n?t+".@data-"+n:H,type:null!==n?t+".@data-"+n:H,filter:null!==e?t+".@data-"+e:H},a._isArrayHost=!0,at(h,t)))}));var S=h.oFeatures,t=function(){if(r.aaSorting===H){var t=h.aaSorting;for(o=0,s=t.length;o<s;o++)t[o][1]=h.aoColumns[o].asSorting[0]}ce(h),S.bSort&&L(h,"aoDrawCallback",function(){var t,n;h.bSorted&&(t=I(h),n={},P.each(t,function(t,e){n[e.src]=e.dir}),R(h,null,"order",[h,t,n]),le(h))}),L(h,"aoDrawCallback",function(){(h.bSorted||"ssp"===E(h)||S.bDeferRender)&&ce(h)},"sc");var e=l.children("caption").each(function(){this._captionSide=P(this).css("caption-side")}),n=l.children("thead"),a=(0===n.length&&(n=P("<thead/>").appendTo(l)),h.nTHead=n[0],l.children("tbody")),n=(0===a.length&&(a=P("<tbody/>").insertAfter(n)),h.nTBody=a[0],l.children("tfoot"));if(0===(n=0===n.length&&0<e.length&&(""!==h.oScroll.sX||""!==h.oScroll.sY)?P("<tfoot/>").appendTo(l):n).length||0===n.children().length?l.addClass(p.sNoFooter):0<n.length&&(h.nTFoot=n[0],wt(h.aoFooter,h.nTFoot)),r.aaData)for(o=0;o<r.aaData.length;o++)x(h,r.aaData[o]);else!h.bDeferLoading&&"dom"!=E(h)||ut(h,P(h.nTBody).children("tr"));h.aiDisplay=h.aiDisplayMaster.slice(),!(h.bInitialised=!0)===i&&Jt(h)};L(h,"aoDrawCallback",de,"state_save"),r.bStateSave?(S.bStateSave=!0,he(h,0,t)):t()}}),y=null,this},c={},U=/[\r\n\u2028]/g,V=/<.*?>/g,X=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,J=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),q=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,h=function(t){return!t||!0===t||"-"===t},$=function(t,e){return c[e]||(c[e]=new RegExp(Ot(e),"g")),"string"==typeof t&&"."!==e?t.replace(/\./g,"").replace(c[e],"."):t},N=function(t,e,n){var a=[],r=0,o=t.length;if(n!==H)for(;r<o;r++)t[r]&&t[r][e]&&a.push(t[r][e][n]);else for(;r<o;r++)t[r]&&a.push(t[r][e]);return a},G=function(t){if(!(t.length<2))for(var e=t.slice().sort(),n=e[0],a=1,r=e.length;a<r;a++){if(e[a]===n)return!1;n=e[a]}return!0},z=function(t){if(G(t))return t.slice();var e,n,a,r=[],o=t.length,i=0;t:for(n=0;n<o;n++){for(e=t[n],a=0;a<i;a++)if(r[a]===e)continue t;r.push(e),i++}return r},Y=function(t,e){if(Array.isArray(e))for(var n=0;n<e.length;n++)Y(t,e[n]);else t.push(e);return t};function i(n){var a,r,o={};P.each(n,function(t,e){(a=t.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(a[1]+" ")&&(r=t.replace(a[0],a[2].toLowerCase()),o[r]=t,"o"===a[1])&&i(n[t])}),n._hungarianMap=o}function C(n,a,r){var o;n._hungarianMap||i(n),P.each(a,function(t,e){(o=n._hungarianMap[t])===H||!r&&a[o]!==H||("o"===o.charAt(0)?(a[o]||(a[o]={}),P.extend(!0,a[o],a[t]),C(n[o],a[o],r)):a[o]=a[t])})}function Z(t){var e,n=w.defaults.oLanguage,a=n.sDecimal;a&&Me(a),t&&(e=t.sZeroRecords,!t.sEmptyTable&&e&&"No data available in table"===n.sEmptyTable&&F(t,t,"sZeroRecords","sEmptyTable"),!t.sLoadingRecords&&e&&"Loading..."===n.sLoadingRecords&&F(t,t,"sZeroRecords","sLoadingRecords"),t.sInfoThousands&&(t.sThousands=t.sInfoThousands),e=t.sDecimal)&&a!==e&&Me(e)}Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),Array.prototype.includes||(Array.prototype.includes=s),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),String.prototype.includes||(String.prototype.includes=s),w.util={throttle:function(a,t){var r,o,i=t!==H?t:200;return function(){var t=this,e=+new Date,n=arguments;r&&e<r+i?(clearTimeout(o),o=setTimeout(function(){r=H,a.apply(t,n)},i)):(r=e,a.apply(t,n))}},escapeRegex:function(t){return t.replace(J,"\\$1")},set:function(a){var d;return P.isPlainObject(a)?w.util.set(a._):null===a?function(){}:"function"==typeof a?function(t,e,n){a(t,"set",e,n)}:"string"!=typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("(")?function(t,e){t[a]=e}:(d=function(t,e,n){for(var a,r,o,i,l=dt(n),n=l[l.length-1],s=0,u=l.length-1;s<u;s++){if("__proto__"===l[s]||"constructor"===l[s])throw new Error("Cannot set prototype values");if(a=l[s].match(ft),r=l[s].match(g),a){if(l[s]=l[s].replace(ft,""),t[l[s]]=[],(a=l.slice()).splice(0,s+1),i=a.join("."),Array.isArray(e))for(var c=0,f=e.length;c<f;c++)d(o={},e[c],i),t[l[s]].push(o);else t[l[s]]=e;return}r&&(l[s]=l[s].replace(g,""),t=t[l[s]](e)),null!==t[l[s]]&&t[l[s]]!==H||(t[l[s]]={}),t=t[l[s]]}n.match(g)?t[n.replace(g,"")](e):t[n.replace(ft,"")]=e},function(t,e){return d(t,e,a)})},get:function(r){var o,d;return P.isPlainObject(r)?(o={},P.each(r,function(t,e){e&&(o[t]=w.util.get(e))}),function(t,e,n,a){var r=o[e]||o._;return r!==H?r(t,e,n,a):t}):null===r?function(t){return t}:"function"==typeof r?function(t,e,n,a){return r(t,e,n,a)}:"string"!=typeof r||-1===r.indexOf(".")&&-1===r.indexOf("[")&&-1===r.indexOf("(")?function(t,e){return t[r]}:(d=function(t,e,n){var a,r,o;if(""!==n)for(var i=dt(n),l=0,s=i.length;l<s;l++){if(f=i[l].match(ft),a=i[l].match(g),f){if(i[l]=i[l].replace(ft,""),""!==i[l]&&(t=t[i[l]]),r=[],i.splice(0,l+1),o=i.join("."),Array.isArray(t))for(var u=0,c=t.length;u<c;u++)r.push(d(t[u],e,o));var f=f[0].substring(1,f[0].length-1);t=""===f?r:r.join(f);break}if(a)i[l]=i[l].replace(g,""),t=t[i[l]]();else{if(null===t||null===t[i[l]])return null;if(t===H||t[i[l]]===H)return H;t=t[i[l]]}}return t},function(t,e){return d(t,e,r)})}};var r=function(t,e,n){t[e]!==H&&(t[n]=t[e])};function K(t){r(t,"ordering","bSort"),r(t,"orderMulti","bSortMulti"),r(t,"orderClasses","bSortClasses"),r(t,"orderCellsTop","bSortCellsTop"),r(t,"order","aaSorting"),r(t,"orderFixed","aaSortingFixed"),r(t,"paging","bPaginate"),r(t,"pagingType","sPaginationType"),r(t,"pageLength","iDisplayLength"),r(t,"searching","bFilter"),"boolean"==typeof t.sScrollX&&(t.sScrollX=t.sScrollX?"100%":""),"boolean"==typeof t.scrollX&&(t.scrollX=t.scrollX?"100%":"");var e=t.aoSearchCols;if(e)for(var n=0,a=e.length;n<a;n++)e[n]&&C(w.models.oSearch,e[n])}function Q(t){r(t,"orderable","bSortable"),r(t,"orderData","aDataSort"),r(t,"orderSequence","asSorting"),r(t,"orderDataType","sortDataType");var e=t.aDataSort;"number"!=typeof e||Array.isArray(e)||(t.aDataSort=[e])}function tt(t){var e,n,a,r;w.__browser||(w.__browser=e={},r=(a=(n=P("<div/>").css({position:"fixed",top:0,left:-1*P(j).scrollLeft(),height:1,width:1,overflow:"hidden"}).append(P("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(P("<div/>").css({width:"100%",height:10}))).appendTo("body")).children()).children(),e.barWidth=a[0].offsetWidth-a[0].clientWidth,e.bScrollOversize=100===r[0].offsetWidth&&100!==a[0].clientWidth,e.bScrollbarLeft=1!==Math.round(r.offset().left),e.bBounding=!!n[0].getBoundingClientRect().width,n.remove()),P.extend(t.oBrowser,w.__browser),t.oScroll.iBarWidth=w.__browser.barWidth}function et(t,e,n,a,r,o){var i,l=a,s=!1;for(n!==H&&(i=n,s=!0);l!==r;)t.hasOwnProperty(l)&&(i=s?e(i,t[l],l,t):t[l],s=!0,l+=o);return i}function nt(t,e){var n=w.defaults.column,a=t.aoColumns.length,n=P.extend({},w.models.oColumn,n,{nTh:e||v.createElement("th"),sTitle:n.sTitle||(e?e.innerHTML:""),aDataSort:n.aDataSort||[a],mData:n.mData||a,idx:a}),n=(t.aoColumns.push(n),t.aoPreSearchCols);n[a]=P.extend({},w.models.oSearch,n[a]),at(t,a,P(e).data())}function at(t,e,n){function a(t){return"string"==typeof t&&-1!==t.indexOf("@")}var e=t.aoColumns[e],r=t.oClasses,o=P(e.nTh),i=(!e.sWidthOrig&&(e.sWidthOrig=o.attr("width")||null,u=(o.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/))&&(e.sWidthOrig=u[1]),n!==H&&null!==n&&(Q(n),C(w.defaults.column,n,!0),n.mDataProp===H||n.mData||(n.mData=n.mDataProp),n.sType&&(e._sManualType=n.sType),n.className&&!n.sClass&&(n.sClass=n.className),n.sClass&&o.addClass(n.sClass),u=e.sClass,P.extend(e,n),F(e,n,"sWidth","sWidthOrig"),u!==e.sClass&&(e.sClass=u+" "+e.sClass),n.iDataSort!==H&&(e.aDataSort=[n.iDataSort]),F(e,n,"aDataSort"),e.ariaTitle||(e.ariaTitle=o.attr("aria-label"))),e.mData),l=A(i),s=e.mRender?A(e.mRender):null,u=(e._bAttrSrc=P.isPlainObject(i)&&(a(i.sort)||a(i.type)||a(i.filter)),e._setter=null,e.fnGetData=function(t,e,n){var a=l(t,e,H,n);return s&&e?s(a,e,t,n):a},e.fnSetData=function(t,e,n){return b(i)(t,e,n)},"number"==typeof i||e._isArrayHost||(t._rowReadObject=!0),t.oFeatures.bSort||(e.bSortable=!1,o.addClass(r.sSortableNone)),-1!==P.inArray("asc",e.asSorting)),n=-1!==P.inArray("desc",e.asSorting);e.bSortable&&(u||n)?u&&!n?(e.sSortingClass=r.sSortableAsc,e.sSortingClassJUI=r.sSortJUIAscAllowed):!u&&n?(e.sSortingClass=r.sSortableDesc,e.sSortingClassJUI=r.sSortJUIDescAllowed):(e.sSortingClass=r.sSortable,e.sSortingClassJUI=r.sSortJUI):(e.sSortingClass=r.sSortableNone,e.sSortingClassJUI="")}function O(t){if(!1!==t.oFeatures.bAutoWidth){var e=t.aoColumns;ee(t);for(var n=0,a=e.length;n<a;n++)e[n].nTh.style.width=e[n].sWidth}var r=t.oScroll;""===r.sY&&""===r.sX||Qt(t),R(t,null,"column-sizing",[t])}function rt(t,e){t=it(t,"bVisible");return"number"==typeof t[e]?t[e]:null}function ot(t,e){t=it(t,"bVisible"),e=P.inArray(e,t);return-1!==e?e:null}function T(t){var n=0;return P.each(t.aoColumns,function(t,e){e.bVisible&&"none"!==P(e.nTh).css("display")&&n++}),n}function it(t,n){var a=[];return P.map(t.aoColumns,function(t,e){t[n]&&a.push(e)}),a}function lt(t){for(var e,n,a,r,o,i,l,s=t.aoColumns,u=t.aoData,c=w.ext.type.detect,f=0,d=s.length;f<d;f++)if(l=[],!(o=s[f]).sType&&o._sManualType)o.sType=o._sManualType;else if(!o.sType){for(e=0,n=c.length;e<n;e++){for(a=0,r=u.length;a<r&&(l[a]===H&&(l[a]=S(t,a,f,"type")),(i=c[e](l[a],t))||e===c.length-1)&&("html"!==i||h(l[a]));a++);if(i){o.sType=i;break}}o.sType||(o.sType="string")}}function st(t,e,n,a){var r,o,i,l,s=t.aoColumns;if(e)for(r=e.length-1;0<=r;r--)for(var u,c=(u=e[r]).target!==H?u.target:u.targets!==H?u.targets:u.aTargets,f=0,d=(c=Array.isArray(c)?c:[c]).length;f<d;f++)if("number"==typeof c[f]&&0<=c[f]){for(;s.length<=c[f];)nt(t);a(c[f],u)}else if("number"==typeof c[f]&&c[f]<0)a(s.length+c[f],u);else if("string"==typeof c[f])for(i=0,l=s.length;i<l;i++)"_all"!=c[f]&&!P(s[i].nTh).hasClass(c[f])||a(i,u);if(n)for(r=0,o=n.length;r<o;r++)a(r,n[r])}function x(t,e,n,a){for(var r=t.aoData.length,o=P.extend(!0,{},w.models.oRow,{src:n?"dom":"data",idx:r}),i=(o._aData=e,t.aoData.push(o),t.aoColumns),l=0,s=i.length;l<s;l++)i[l].sType=null;t.aiDisplayMaster.push(r);e=t.rowIdFn(e);return e!==H&&(t.aIds[e]=o),!n&&t.oFeatures.bDeferRender||St(t,r,n,a),r}function ut(n,t){var a;return(t=t instanceof P?t:P(t)).map(function(t,e){return a=mt(n,e),x(n,a.data,e,a.cells)})}function S(t,e,n,a){"search"===a?a="filter":"order"===a&&(a="sort");var r=t.iDraw,o=t.aoColumns[n],i=t.aoData[e]._aData,l=o.sDefaultContent,s=o.fnGetData(i,a,{settings:t,row:e,col:n});if(s===H)return t.iDrawError!=r&&null===l&&(W(t,0,"Requested unknown parameter "+("function"==typeof o.mData?"{function}":"'"+o.mData+"'")+" for row "+e+", column "+n,4),t.iDrawError=r),l;if(s!==i&&null!==s||null===l||a===H){if("function"==typeof s)return s.call(i)}else s=l;return null===s&&"display"===a?"":"filter"===a&&(e=w.ext.type.search)[o.sType]?e[o.sType](s):s}function ct(t,e,n,a){var r=t.aoColumns[n],o=t.aoData[e]._aData;r.fnSetData(o,a,{settings:t,row:e,col:n})}var ft=/\[.*?\]$/,g=/\(\)$/;function dt(t){return P.map(t.match(/(\\.|[^\.])+/g)||[""],function(t){return t.replace(/\\\./g,".")})}var A=w.util.get,b=w.util.set;function ht(t){return N(t.aoData,"_aData")}function pt(t){t.aoData.length=0,t.aiDisplayMaster.length=0,t.aiDisplay.length=0,t.aIds={}}function gt(t,e,n){for(var a=-1,r=0,o=t.length;r<o;r++)t[r]==e?a=r:t[r]>e&&t[r]--;-1!=a&&n===H&&t.splice(a,1)}function bt(n,a,t,e){function r(t,e){for(;t.childNodes.length;)t.removeChild(t.firstChild);t.innerHTML=S(n,a,e,"display")}var o,i,l=n.aoData[a];if("dom"!==t&&(t&&"auto"!==t||"dom"!==l.src)){var s=l.anCells;if(s)if(e!==H)r(s[e],e);else for(o=0,i=s.length;o<i;o++)r(s[o],o)}else l._aData=mt(n,l,e,e===H?H:l._aData).data;l._aSortData=null,l._aFilterData=null;var u=n.aoColumns;if(e!==H)u[e].sType=null;else{for(o=0,i=u.length;o<i;o++)u[o].sType=null;vt(n,l)}}function mt(t,e,n,a){function r(t,e){var n;"string"==typeof t&&-1!==(n=t.indexOf("@"))&&(n=t.substring(n+1),b(t)(a,e.getAttribute(n)))}function o(t){n!==H&&n!==f||(l=d[f],s=t.innerHTML.trim(),l&&l._bAttrSrc?(b(l.mData._)(a,s),r(l.mData.sort,t),r(l.mData.type,t),r(l.mData.filter,t)):h?(l._setter||(l._setter=b(l.mData)),l._setter(a,s)):a[f]=s),f++}var i,l,s,u=[],c=e.firstChild,f=0,d=t.aoColumns,h=t._rowReadObject;a=a!==H?a:h?{}:[];if(c)for(;c;)"TD"!=(i=c.nodeName.toUpperCase())&&"TH"!=i||(o(c),u.push(c)),c=c.nextSibling;else for(var p=0,g=(u=e.anCells).length;p<g;p++)o(u[p]);var e=e.firstChild?e:e.nTr;return e&&(e=e.getAttribute("id"))&&b(t.rowId)(a,e),{data:a,cells:u}}function St(t,e,n,a){var r,o,i,l,s,u,c=t.aoData[e],f=c._aData,d=[];if(null===c.nTr){for(r=n||v.createElement("tr"),c.nTr=r,c.anCells=d,r._DT_RowIndex=e,vt(t,c),l=0,s=t.aoColumns.length;l<s;l++)i=t.aoColumns[l],(o=(u=!n)?v.createElement(i.sCellType):a[l])||W(t,0,"Incorrect column count",18),o._DT_CellIndex={row:e,column:l},d.push(o),!u&&(!i.mRender&&i.mData===l||P.isPlainObject(i.mData)&&i.mData._===l+".display")||(o.innerHTML=S(t,e,l,"display")),i.sClass&&(o.className+=" "+i.sClass),i.bVisible&&!n?r.appendChild(o):!i.bVisible&&n&&o.parentNode.removeChild(o),i.fnCreatedCell&&i.fnCreatedCell.call(t.oInstance,o,S(t,e,l),f,e,l);R(t,"aoRowCreatedCallback",null,[r,f,e,d])}}function vt(t,e){var n=e.nTr,a=e._aData;n&&((t=t.rowIdFn(a))&&(n.id=t),a.DT_RowClass&&(t=a.DT_RowClass.split(" "),e.__rowc=e.__rowc?z(e.__rowc.concat(t)):t,P(n).removeClass(e.__rowc.join(" ")).addClass(a.DT_RowClass)),a.DT_RowAttr&&P(n).attr(a.DT_RowAttr),a.DT_RowData)&&P(n).data(a.DT_RowData)}function yt(t){var e,n,a,r=t.nTHead,o=t.nTFoot,i=0===P("th, td",r).length,l=t.oClasses,s=t.aoColumns;for(i&&(n=P("<tr/>").appendTo(r)),c=0,f=s.length;c<f;c++)a=s[c],e=P(a.nTh).addClass(a.sClass),i&&e.appendTo(n),t.oFeatures.bSort&&(e.addClass(a.sSortingClass),!1!==a.bSortable)&&(e.attr("tabindex",t.iTabIndex).attr("aria-controls",t.sTableId),ue(t,a.nTh,c)),a.sTitle!=e[0].innerHTML&&e.html(a.sTitle),ve(t,"header")(t,e,a,l);if(i&&wt(t.aoHeader,r),P(r).children("tr").children("th, td").addClass(l.sHeaderTH),P(o).children("tr").children("th, td").addClass(l.sFooterTH),null!==o)for(var u=t.aoFooter[0],c=0,f=u.length;c<f;c++)(a=s[c])?(a.nTf=u[c].cell,a.sClass&&P(a.nTf).addClass(a.sClass)):W(t,0,"Incorrect column count",18)}function Dt(t,e,n){var a,r,o,i,l,s,u,c,f,d=[],h=[],p=t.aoColumns.length;if(e){for(n===H&&(n=!1),a=0,r=e.length;a<r;a++){for(d[a]=e[a].slice(),d[a].nTr=e[a].nTr,o=p-1;0<=o;o--)t.aoColumns[o].bVisible||n||d[a].splice(o,1);h.push([])}for(a=0,r=d.length;a<r;a++){if(u=d[a].nTr)for(;s=u.firstChild;)u.removeChild(s);for(o=0,i=d[a].length;o<i;o++)if(f=c=1,h[a][o]===H){for(u.appendChild(d[a][o].cell),h[a][o]=1;d[a+c]!==H&&d[a][o].cell==d[a+c][o].cell;)h[a+c][o]=1,c++;for(;d[a][o+f]!==H&&d[a][o].cell==d[a][o+f].cell;){for(l=0;l<c;l++)h[a+l][o+f]=1;f++}P(d[a][o].cell).attr("rowspan",c).attr("colspan",f)}}}}function y(t,e){n="ssp"==E(s=t),(l=s.iInitDisplayStart)!==H&&-1!==l&&(s._iDisplayStart=!n&&l>=s.fnRecordsDisplay()?0:l,s.iInitDisplayStart=-1);var n=R(t,"aoPreDrawCallback","preDraw",[t]);if(-1!==P.inArray(!1,n))D(t,!1);else{var a=[],r=0,o=t.asStripeClasses,i=o.length,l=t.oLanguage,s="ssp"==E(t),u=t.aiDisplay,n=t._iDisplayStart,c=t.fnDisplayEnd();if(t.bDrawing=!0,t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,D(t,!1);else if(s){if(!t.bDestroying&&!e)return void xt(t)}else t.iDraw++;if(0!==u.length)for(var f=s?t.aoData.length:c,d=s?0:n;d<f;d++){var h,p=u[d],g=t.aoData[p],b=(null===g.nTr&&St(t,p),g.nTr);0!==i&&(h=o[r%i],g._sRowStripe!=h)&&(P(b).removeClass(g._sRowStripe).addClass(h),g._sRowStripe=h),R(t,"aoRowCallback",null,[b,g._aData,r,d,p]),a.push(b),r++}else{e=l.sZeroRecords;1==t.iDraw&&"ajax"==E(t)?e=l.sLoadingRecords:l.sEmptyTable&&0===t.fnRecordsTotal()&&(e=l.sEmptyTable),a[0]=P("<tr/>",{class:i?o[0]:""}).append(P("<td />",{valign:"top",colSpan:T(t),class:t.oClasses.sRowEmpty}).html(e))[0]}R(t,"aoHeaderCallback","header",[P(t.nTHead).children("tr")[0],ht(t),n,c,u]),R(t,"aoFooterCallback","footer",[P(t.nTFoot).children("tr")[0],ht(t),n,c,u]);s=P(t.nTBody);s.children().detach(),s.append(P(a)),R(t,"aoDrawCallback","draw",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}}function u(t,e){var n=t.oFeatures,a=n.bSort,n=n.bFilter;a&&ie(t),n?Rt(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),!0!==e&&(t._iDisplayStart=0),t._drawHold=e,y(t),t._drawHold=!1}function _t(t){for(var e,n,a,r,o,i,l,s=t.oClasses,u=P(t.nTable),u=P("<div/>").insertBefore(u),c=t.oFeatures,f=P("<div/>",{id:t.sTableId+"_wrapper",class:s.sWrapper+(t.nTFoot?"":" "+s.sNoFooter)}),d=(t.nHolding=u[0],t.nTableWrapper=f[0],t.nTableReinsertBefore=t.nTable.nextSibling,t.sDom.split("")),h=0;h<d.length;h++){if(e=null,"<"==(n=d[h])){if(a=P("<div/>")[0],"'"==(r=d[h+1])||'"'==r){for(o="",i=2;d[h+i]!=r;)o+=d[h+i],i++;"H"==o?o=s.sJUIHeader:"F"==o&&(o=s.sJUIFooter),-1!=o.indexOf(".")?(l=o.split("."),a.id=l[0].substr(1,l[0].length-1),a.className=l[1]):"#"==o.charAt(0)?a.id=o.substr(1,o.length-1):a.className=o,h+=i}f.append(a),f=P(a)}else if(">"==n)f=f.parent();else if("l"==n&&c.bPaginate&&c.bLengthChange)e=Gt(t);else if("f"==n&&c.bFilter)e=Lt(t);else if("r"==n&&c.bProcessing)e=Zt(t);else if("t"==n)e=Kt(t);else if("i"==n&&c.bInfo)e=Ut(t);else if("p"==n&&c.bPaginate)e=zt(t);else if(0!==w.ext.feature.length)for(var p=w.ext.feature,g=0,b=p.length;g<b;g++)if(n==p[g].cFeature){e=p[g].fnInit(t);break}e&&((l=t.aanFeatures)[n]||(l[n]=[]),l[n].push(e),f.append(e))}u.replaceWith(f),t.nHolding=null}function wt(t,e){var n,a,r,o,i,l,s,u,c,f,d=P(e).children("tr");for(t.splice(0,t.length),r=0,l=d.length;r<l;r++)t.push([]);for(r=0,l=d.length;r<l;r++)for(a=(n=d[r]).firstChild;a;){if("TD"==a.nodeName.toUpperCase()||"TH"==a.nodeName.toUpperCase())for(u=(u=+a.getAttribute("colspan"))&&0!=u&&1!=u?u:1,c=(c=+a.getAttribute("rowspan"))&&0!=c&&1!=c?c:1,s=function(t,e,n){for(var a=t[e];a[n];)n++;return n}(t,r,0),f=1==u,i=0;i<u;i++)for(o=0;o<c;o++)t[r+o][s+i]={cell:a,unique:f},t[r+o].nTr=n;a=a.nextSibling}}function Ct(t,e,n){var a=[];n||(n=t.aoHeader,e&&wt(n=[],e));for(var r=0,o=n.length;r<o;r++)for(var i=0,l=n[r].length;i<l;i++)!n[r][i].unique||a[i]&&t.bSortCellsTop||(a[i]=n[r][i].cell);return a}function Tt(r,t,n){function e(t){var e=r.jqXHR?r.jqXHR.status:null;(null===t||"number"==typeof e&&204==e)&&Ft(r,t={},[]),(e=t.error||t.sError)&&W(r,0,e),r.json=t,R(r,null,"xhr",[r,t,r.jqXHR]),n(t)}R(r,"aoServerParams","serverParams",[t]),t&&Array.isArray(t)&&(a={},o=/(.*?)\[\]$/,P.each(t,function(t,e){var n=e.name.match(o);n?(n=n[0],a[n]||(a[n]=[]),a[n].push(e.value)):a[e.name]=e.value}),t=a);var a,o,i,l=r.ajax,s=r.oInstance,u=(P.isPlainObject(l)&&l.data&&(u="function"==typeof(i=l.data)?i(t,r):i,t="function"==typeof i&&u?u:P.extend(!0,t,u),delete l.data),{data:t,success:e,dataType:"json",cache:!1,type:r.sServerMethod,error:function(t,e,n){var a=R(r,null,"xhr",[r,null,r.jqXHR]);-1===P.inArray(!0,a)&&("parsererror"==e?W(r,0,"Invalid JSON response",1):4===t.readyState&&W(r,0,"Ajax error",7)),D(r,!1)}});r.oAjaxData=t,R(r,null,"preXhr",[r,t]),r.fnServerData?r.fnServerData.call(s,r.sAjaxSource,P.map(t,function(t,e){return{name:e,value:t}}),e,r):r.sAjaxSource||"string"==typeof l?r.jqXHR=P.ajax(P.extend(u,{url:l||r.sAjaxSource})):"function"==typeof l?r.jqXHR=l.call(s,t,e,r):(r.jqXHR=P.ajax(P.extend(u,l)),l.data=i)}function xt(e){e.iDraw++,D(e,!0);var n=e._drawHold;Tt(e,At(e),function(t){e._drawHold=n,It(e,t),e._drawHold=!1})}function At(t){for(var e,n,a,r=t.aoColumns,o=r.length,i=t.oFeatures,l=t.oPreviousSearch,s=t.aoPreSearchCols,u=[],c=I(t),f=t._iDisplayStart,d=!1!==i.bPaginate?t._iDisplayLength:-1,h=function(t,e){u.push({name:t,value:e})},p=(h("sEcho",t.iDraw),h("iColumns",o),h("sColumns",N(r,"sName").join(",")),h("iDisplayStart",f),h("iDisplayLength",d),{draw:t.iDraw,columns:[],order:[],start:f,length:d,search:{value:l.sSearch,regex:l.bRegex}}),g=0;g<o;g++)n=r[g],a=s[g],e="function"==typeof n.mData?"function":n.mData,p.columns.push({data:e,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:a.sSearch,regex:a.bRegex}}),h("mDataProp_"+g,e),i.bFilter&&(h("sSearch_"+g,a.sSearch),h("bRegex_"+g,a.bRegex),h("bSearchable_"+g,n.bSearchable)),i.bSort&&h("bSortable_"+g,n.bSortable);i.bFilter&&(h("sSearch",l.sSearch),h("bRegex",l.bRegex)),i.bSort&&(P.each(c,function(t,e){p.order.push({column:e.col,dir:e.dir}),h("iSortCol_"+t,e.col),h("sSortDir_"+t,e.dir)}),h("iSortingCols",c.length));f=w.ext.legacy.ajax;return null===f?t.sAjaxSource?u:p:f?u:p}function It(t,n){function e(t,e){return n[t]!==H?n[t]:n[e]}var a=Ft(t,n),r=e("sEcho","draw"),o=e("iTotalRecords","recordsTotal"),i=e("iTotalDisplayRecords","recordsFiltered");if(r!==H){if(+r<t.iDraw)return;t.iDraw=+r}a=a||[],pt(t),t._iRecordsTotal=parseInt(o,10),t._iRecordsDisplay=parseInt(i,10);for(var l=0,s=a.length;l<s;l++)x(t,a[l]);t.aiDisplay=t.aiDisplayMaster.slice(),y(t,!0),t._bInitComplete||qt(t,n),D(t,!1)}function Ft(t,e,n){t=P.isPlainObject(t.ajax)&&t.ajax.dataSrc!==H?t.ajax.dataSrc:t.sAjaxDataProp;if(!n)return"data"===t?e.aaData||e[t]:""!==t?A(t)(e):e;b(t)(e,n)}function Lt(n){function e(t){i.f;var e=this.value||"";o.return&&"Enter"!==t.key||e!=o.sSearch&&(Rt(n,{sSearch:e,bRegex:o.bRegex,bSmart:o.bSmart,bCaseInsensitive:o.bCaseInsensitive,return:o.return}),n._iDisplayStart=0,y(n))}var t=n.oClasses,a=n.sTableId,r=n.oLanguage,o=n.oPreviousSearch,i=n.aanFeatures,l='<input type="search" class="'+t.sFilterInput+'"/>',s=(s=r.sSearch).match(/_INPUT_/)?s.replace("_INPUT_",l):s+l,l=P("<div/>",{id:i.f?null:a+"_filter",class:t.sFilter}).append(P("<label/>").append(s)),t=null!==n.searchDelay?n.searchDelay:"ssp"===E(n)?400:0,u=P("input",l).val(o.sSearch).attr("placeholder",r.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",t?ne(e,t):e).on("mouseup.DT",function(t){setTimeout(function(){e.call(u[0],t)},10)}).on("keypress.DT",function(t){if(13==t.keyCode)return!1}).attr("aria-controls",a);return P(n.nTable).on("search.dt.DT",function(t,e){if(n===e)try{u[0]!==v.activeElement&&u.val(o.sSearch)}catch(t){}}),l[0]}function Rt(t,e,n){function a(t){o.sSearch=t.sSearch,o.bRegex=t.bRegex,o.bSmart=t.bSmart,o.bCaseInsensitive=t.bCaseInsensitive,o.return=t.return}function r(t){return t.bEscapeRegex!==H?!t.bEscapeRegex:t.bRegex}var o=t.oPreviousSearch,i=t.aoPreSearchCols;if(lt(t),"ssp"!=E(t)){Ht(t,e.sSearch,n,r(e),e.bSmart,e.bCaseInsensitive),a(e);for(var l=0;l<i.length;l++)jt(t,i[l].sSearch,l,r(i[l]),i[l].bSmart,i[l].bCaseInsensitive);Pt(t)}else a(e);t.bFiltered=!0,R(t,null,"search",[t])}function Pt(t){for(var e,n,a=w.ext.search,r=t.aiDisplay,o=0,i=a.length;o<i;o++){for(var l=[],s=0,u=r.length;s<u;s++)n=r[s],e=t.aoData[n],a[o](t,e._aFilterData,n,e._aData,s)&&l.push(n);r.length=0,P.merge(r,l)}}function jt(t,e,n,a,r,o){if(""!==e){for(var i,l=[],s=t.aiDisplay,u=Nt(e,a,r,o),c=0;c<s.length;c++)i=t.aoData[s[c]]._aFilterData[n],u.test(i)&&l.push(s[c]);t.aiDisplay=l}}function Ht(t,e,n,a,r,o){var i,l,s,u=Nt(e,a,r,o),r=t.oPreviousSearch.sSearch,o=t.aiDisplayMaster,c=[];if(0!==w.ext.search.length&&(n=!0),l=Wt(t),e.length<=0)t.aiDisplay=o.slice();else{for((l||n||a||r.length>e.length||0!==e.indexOf(r)||t.bSorted)&&(t.aiDisplay=o.slice()),i=t.aiDisplay,s=0;s<i.length;s++)u.test(t.aoData[i[s]]._sFilterRow)&&c.push(i[s]);t.aiDisplay=c}}function Nt(t,e,n,a){return t=e?t:Ot(t),n&&(t="^(?=.*?"+P.map(t.match(/["\u201C][^"\u201D]+["\u201D]|[^ ]+/g)||[""],function(t){var e;return'"'===t.charAt(0)?t=(e=t.match(/^"(.*)"$/))?e[1]:t:"“"===t.charAt(0)&&(t=(e=t.match(/^\u201C(.*)\u201D$/))?e[1]:t),t.replace('"',"")}).join(")(?=.*?")+").*$"),new RegExp(t,a?"i":"")}var Ot=w.util.escapeRegex,kt=P("<div>")[0],Mt=kt.textContent!==H;function Wt(t){for(var e,n,a,r,o,i=t.aoColumns,l=!1,s=0,u=t.aoData.length;s<u;s++)if(!(o=t.aoData[s])._aFilterData){for(a=[],e=0,n=i.length;e<n;e++)i[e].bSearchable?"string"!=typeof(r=null===(r=S(t,s,e,"filter"))?"":r)&&r.toString&&(r=r.toString()):r="",r.indexOf&&-1!==r.indexOf("&")&&(kt.innerHTML=r,r=Mt?kt.textContent:kt.innerText),r.replace&&(r=r.replace(/[\r\n\u2028]/g,"")),a.push(r);o._aFilterData=a,o._sFilterRow=a.join(" "),l=!0}return l}function Et(t){return{search:t.sSearch,smart:t.bSmart,regex:t.bRegex,caseInsensitive:t.bCaseInsensitive}}function Bt(t){return{sSearch:t.search,bSmart:t.smart,bRegex:t.regex,bCaseInsensitive:t.caseInsensitive}}function Ut(t){var e=t.sTableId,n=t.aanFeatures.i,a=P("<div/>",{class:t.oClasses.sInfo,id:n?null:e+"_info"});return n||(t.aoDrawCallback.push({fn:Vt,sName:"information"}),a.attr("role","status").attr("aria-live","polite"),P(t.nTable).attr("aria-describedby",e+"_info")),a[0]}function Vt(t){var e,n,a,r,o,i,l=t.aanFeatures.i;0!==l.length&&(i=t.oLanguage,e=t._iDisplayStart+1,n=t.fnDisplayEnd(),a=t.fnRecordsTotal(),o=(r=t.fnRecordsDisplay())?i.sInfo:i.sInfoEmpty,r!==a&&(o+=" "+i.sInfoFiltered),o=Xt(t,o+=i.sInfoPostFix),null!==(i=i.fnInfoCallback)&&(o=i.call(t.oInstance,t,e,n,a,r,o)),P(l).html(o))}function Xt(t,e){var n=t.fnFormatNumber,a=t._iDisplayStart+1,r=t._iDisplayLength,o=t.fnRecordsDisplay(),i=-1===r;return e.replace(/_START_/g,n.call(t,a)).replace(/_END_/g,n.call(t,t.fnDisplayEnd())).replace(/_MAX_/g,n.call(t,t.fnRecordsTotal())).replace(/_TOTAL_/g,n.call(t,o)).replace(/_PAGE_/g,n.call(t,i?1:Math.ceil(a/r))).replace(/_PAGES_/g,n.call(t,i?1:Math.ceil(o/r)))}function Jt(n){var a,t,e,r=n.iInitDisplayStart,o=n.aoColumns,i=n.oFeatures,l=n.bDeferLoading;if(n.bInitialised){for(_t(n),yt(n),Dt(n,n.aoHeader),Dt(n,n.aoFooter),D(n,!0),i.bAutoWidth&&ee(n),a=0,t=o.length;a<t;a++)(e=o[a]).sWidth&&(e.nTh.style.width=M(e.sWidth));R(n,null,"preInit",[n]),u(n);i=E(n);"ssp"==i&&!l||("ajax"==i?Tt(n,[],function(t){var e=Ft(n,t);for(a=0;a<e.length;a++)x(n,e[a]);n.iInitDisplayStart=r,u(n),D(n,!1),qt(n,t)}):(D(n,!1),qt(n)))}else setTimeout(function(){Jt(n)},200)}function qt(t,e){t._bInitComplete=!0,(e||t.oInit.aaData)&&O(t),R(t,null,"plugin-init",[t,e]),R(t,"aoInitComplete","init",[t,e])}function $t(t,e){e=parseInt(e,10);t._iDisplayLength=e,Se(t),R(t,null,"length",[t,e])}function Gt(a){for(var t=a.oClasses,e=a.sTableId,n=a.aLengthMenu,r=Array.isArray(n[0]),o=r?n[0]:n,i=r?n[1]:n,l=P("<select/>",{name:e+"_length","aria-controls":e,class:t.sLengthSelect}),s=0,u=o.length;s<u;s++)l[0][s]=new Option("number"==typeof i[s]?a.fnFormatNumber(i[s]):i[s],o[s]);var c=P("<div><label/></div>").addClass(t.sLength);return a.aanFeatures.l||(c[0].id=e+"_length"),c.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",l[0].outerHTML)),P("select",c).val(a._iDisplayLength).on("change.DT",function(t){$t(a,P(this).val()),y(a)}),P(a.nTable).on("length.dt.DT",function(t,e,n){a===e&&P("select",c).val(n)}),c[0]}function zt(t){function c(t){y(t)}var e=t.sPaginationType,f=w.ext.pager[e],d="function"==typeof f,e=P("<div/>").addClass(t.oClasses.sPaging+e)[0],h=t.aanFeatures;return d||f.fnInit(t,e,c),h.p||(e.id=t.sTableId+"_paginate",t.aoDrawCallback.push({fn:function(t){if(d)for(var e=t._iDisplayStart,n=t._iDisplayLength,a=t.fnRecordsDisplay(),r=-1===n,o=r?0:Math.ceil(e/n),i=r?1:Math.ceil(a/n),l=f(o,i),s=0,u=h.p.length;s<u;s++)ve(t,"pageButton")(t,h.p[s],s,l,o,i);else f.fnUpdate(t,c)},sName:"pagination"})),e}function Yt(t,e,n){var a=t._iDisplayStart,r=t._iDisplayLength,o=t.fnRecordsDisplay(),o=(0===o||-1===r?a=0:"number"==typeof e?o<(a=e*r)&&(a=0):"first"==e?a=0:"previous"==e?(a=0<=r?a-r:0)<0&&(a=0):"next"==e?a+r<o&&(a+=r):"last"==e?a=Math.floor((o-1)/r)*r:W(t,0,"Unknown paging action: "+e,5),t._iDisplayStart!==a);return t._iDisplayStart=a,o?(R(t,null,"page",[t]),n&&y(t)):R(t,null,"page-nc",[t]),o}function Zt(t){return P("<div/>",{id:t.aanFeatures.r?null:t.sTableId+"_processing",class:t.oClasses.sProcessing,role:"status"}).html(t.oLanguage.sProcessing).append("<div><div></div><div></div><div></div><div></div></div>").insertBefore(t.nTable)[0]}function D(t,e){t.oFeatures.bProcessing&&P(t.aanFeatures.r).css("display",e?"block":"none"),R(t,null,"processing",[t,e])}function Kt(t){var e,n,a,r,o,i,l,s,u,c,f,d,h=P(t.nTable),p=t.oScroll;return""===p.sX&&""===p.sY?t.nTable:(e=p.sX,n=p.sY,a=t.oClasses,o=(r=h.children("caption")).length?r[0]._captionSide:null,s=P(h[0].cloneNode(!1)),i=P(h[0].cloneNode(!1)),u=function(t){return t?M(t):null},(l=h.children("tfoot")).length||(l=null),s=P(f="<div/>",{class:a.sScrollWrapper}).append(P(f,{class:a.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:e?u(e):"100%"}).append(P(f,{class:a.sScrollHeadInner}).css({"box-sizing":"content-box",width:p.sXInner||"100%"}).append(s.removeAttr("id").css("margin-left",0).append("top"===o?r:null).append(h.children("thead"))))).append(P(f,{class:a.sScrollBody}).css({position:"relative",overflow:"auto",width:u(e)}).append(h)),l&&s.append(P(f,{class:a.sScrollFoot}).css({overflow:"hidden",border:0,width:e?u(e):"100%"}).append(P(f,{class:a.sScrollFootInner}).append(i.removeAttr("id").css("margin-left",0).append("bottom"===o?r:null).append(h.children("tfoot"))))),u=s.children(),c=u[0],f=u[1],d=l?u[2]:null,e&&P(f).on("scroll.DT",function(t){var e=this.scrollLeft;c.scrollLeft=e,l&&(d.scrollLeft=e)}),P(f).css("max-height",n),p.bCollapse||P(f).css("height",n),t.nScrollHead=c,t.nScrollBody=f,t.nScrollFoot=d,t.aoDrawCallback.push({fn:Qt,sName:"scrolling"}),s[0])}function Qt(n){function t(t){(t=t.style).paddingTop="0",t.paddingBottom="0",t.borderTopWidth="0",t.borderBottomWidth="0",t.height=0}var e,a,r,o,i,l=n.oScroll,s=l.sX,u=l.sXInner,c=l.sY,l=l.iBarWidth,f=P(n.nScrollHead),d=f[0].style,h=f.children("div"),p=h[0].style,h=h.children("table"),g=n.nScrollBody,b=P(g),m=g.style,S=P(n.nScrollFoot).children("div"),v=S.children("table"),y=P(n.nTHead),D=P(n.nTable),_=D[0],w=_.style,C=n.nTFoot?P(n.nTFoot):null,T=n.oBrowser,x=T.bScrollOversize,A=(N(n.aoColumns,"nTh"),[]),I=[],F=[],L=[],R=g.scrollHeight>g.clientHeight;n.scrollBarVis!==R&&n.scrollBarVis!==H?(n.scrollBarVis=R,O(n)):(n.scrollBarVis=R,D.children("thead, tfoot").remove(),C&&(R=C.clone().prependTo(D),i=C.find("tr"),a=R.find("tr"),R.find("[id]").removeAttr("id")),R=y.clone().prependTo(D),y=y.find("tr"),e=R.find("tr"),R.find("th, td").removeAttr("tabindex"),R.find("[id]").removeAttr("id"),s||(m.width="100%",f[0].style.width="100%"),P.each(Ct(n,R),function(t,e){r=rt(n,t),e.style.width=n.aoColumns[r].sWidth}),C&&k(function(t){t.style.width=""},a),f=D.outerWidth(),""===s?(w.width="100%",x&&(D.find("tbody").height()>g.offsetHeight||"scroll"==b.css("overflow-y"))&&(w.width=M(D.outerWidth()-l)),f=D.outerWidth()):""!==u&&(w.width=M(u),f=D.outerWidth()),k(t,e),k(function(t){var e=j.getComputedStyle?j.getComputedStyle(t).width:M(P(t).width());F.push(t.innerHTML),A.push(e)},e),k(function(t,e){t.style.width=A[e]},y),P(e).css("height",0),C&&(k(t,a),k(function(t){L.push(t.innerHTML),I.push(M(P(t).css("width")))},a),k(function(t,e){t.style.width=I[e]},i),P(a).height(0)),k(function(t,e){t.innerHTML='<div class="dataTables_sizing">'+F[e]+"</div>",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=A[e]},e),C&&k(function(t,e){t.innerHTML='<div class="dataTables_sizing">'+L[e]+"</div>",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=I[e]},a),Math.round(D.outerWidth())<Math.round(f)?(o=g.scrollHeight>g.offsetHeight||"scroll"==b.css("overflow-y")?f+l:f,x&&(g.scrollHeight>g.offsetHeight||"scroll"==b.css("overflow-y"))&&(w.width=M(o-l)),""!==s&&""===u||W(n,1,"Possible column misalignment",6)):o="100%",m.width=M(o),d.width=M(o),C&&(n.nScrollFoot.style.width=M(o)),c||x&&(m.height=M(_.offsetHeight+l)),R=D.outerWidth(),h[0].style.width=M(R),p.width=M(R),y=D.height()>g.clientHeight||"scroll"==b.css("overflow-y"),p[i="padding"+(T.bScrollbarLeft?"Left":"Right")]=y?l+"px":"0px",C&&(v[0].style.width=M(R),S[0].style.width=M(R),S[0].style[i]=y?l+"px":"0px"),D.children("colgroup").insertBefore(D.children("thead")),b.trigger("scroll"),!n.bSorted&&!n.bFiltered||n._drawHold||(g.scrollTop=0))}function k(t,e,n){for(var a,r,o=0,i=0,l=e.length;i<l;){for(a=e[i].firstChild,r=n?n[i].firstChild:null;a;)1===a.nodeType&&(n?t(a,r,o):t(a,o),o++),a=a.nextSibling,r=n?r.nextSibling:null;i++}}var te=/<.*?>/g;function ee(t){var e,n,a=t.nTable,r=t.aoColumns,o=t.oScroll,i=o.sY,l=o.sX,o=o.sXInner,s=r.length,u=it(t,"bVisible"),c=P("th",t.nTHead),f=a.getAttribute("width"),d=a.parentNode,h=!1,p=t.oBrowser,g=p.bScrollOversize,b=a.style.width;for(b&&-1!==b.indexOf("%")&&(f=b),D=0;D<u.length;D++)null!==(e=r[u[D]]).sWidth&&(e.sWidth=ae(e.sWidthOrig,d),h=!0);if(g||!h&&!l&&!i&&s==T(t)&&s==c.length)for(D=0;D<s;D++){var m=rt(t,D);null!==m&&(r[m].sWidth=M(c.eq(D).width()))}else{var b=P(a).clone().css("visibility","hidden").removeAttr("id"),S=(b.find("tbody tr").remove(),P("<tr/>").appendTo(b.find("tbody")));for(b.find("thead, tfoot").remove(),b.append(P(t.nTHead).clone()).append(P(t.nTFoot).clone()),b.find("tfoot th, tfoot td").css("width",""),c=Ct(t,b.find("thead")[0]),D=0;D<u.length;D++)e=r[u[D]],c[D].style.width=null!==e.sWidthOrig&&""!==e.sWidthOrig?M(e.sWidthOrig):"",e.sWidthOrig&&l&&P(c[D]).append(P("<div/>").css({width:e.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(t.aoData.length)for(D=0;D<u.length;D++)e=r[n=u[D]],P(re(t,n)).clone(!1).append(e.sContentPadding).appendTo(S);P("[name]",b).removeAttr("name");for(var v=P("<div/>").css(l||i?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(b).appendTo(d),y=(l&&o?b.width(o):l?(b.css("width","auto"),b.removeAttr("width"),b.width()<d.clientWidth&&f&&b.width(d.clientWidth)):i?b.width(d.clientWidth):f&&b.width(f),0),D=0;D<u.length;D++){var _=P(c[D]),w=_.outerWidth()-_.width(),_=p.bBounding?Math.ceil(c[D].getBoundingClientRect().width):_.outerWidth();y+=_,r[u[D]].sWidth=M(_-w)}a.style.width=M(y),v.remove()}f&&(a.style.width=M(f)),!f&&!l||t._reszEvt||(o=function(){P(j).on("resize.DT-"+t.sInstance,ne(function(){O(t)}))},g?setTimeout(o,1e3):o(),t._reszEvt=!0)}var ne=w.util.throttle;function ae(t,e){return t?(e=(t=P("<div/>").css("width",M(t)).appendTo(e||v.body))[0].offsetWidth,t.remove(),e):0}function re(t,e){var n,a=oe(t,e);return a<0?null:(n=t.aoData[a]).nTr?n.anCells[e]:P("<td/>").html(S(t,a,e,"display"))[0]}function oe(t,e){for(var n,a=-1,r=-1,o=0,i=t.aoData.length;o<i;o++)(n=(n=(n=S(t,o,e,"display")+"").replace(te,"")).replace(/&nbsp;/g," ")).length>a&&(a=n.length,r=o);return r}function M(t){return null===t?"0px":"number"==typeof t?t<0?"0px":t+"px":t.match(/\d$/)?t+"px":t}function I(t){function e(t){t.length&&!Array.isArray(t[0])?h.push(t):P.merge(h,t)}var n,a,r,o,i,l,s,u=[],c=t.aoColumns,f=t.aaSortingFixed,d=P.isPlainObject(f),h=[];for(Array.isArray(f)&&e(f),d&&f.pre&&e(f.pre),e(t.aaSorting),d&&f.post&&e(f.post),n=0;n<h.length;n++)for(r=(o=c[s=h[n][a=0]].aDataSort).length;a<r;a++)l=c[i=o[a]].sType||"string",h[n]._idx===H&&(h[n]._idx=P.inArray(h[n][1],c[i].asSorting)),u.push({src:s,col:i,dir:h[n][1],index:h[n]._idx,type:l,formatter:w.ext.type.order[l+"-pre"]});return u}function ie(t){var e,n,a,r,c,f=[],u=w.ext.type.order,d=t.aoData,o=(t.aoColumns,0),i=t.aiDisplayMaster;for(lt(t),e=0,n=(c=I(t)).length;e<n;e++)(r=c[e]).formatter&&o++,fe(t,r.col);if("ssp"!=E(t)&&0!==c.length){for(e=0,a=i.length;e<a;e++)f[i[e]]=e;o===c.length?i.sort(function(t,e){for(var n,a,r,o,i=c.length,l=d[t]._aSortData,s=d[e]._aSortData,u=0;u<i;u++)if(0!=(r=(n=l[(o=c[u]).col])<(a=s[o.col])?-1:a<n?1:0))return"asc"===o.dir?r:-r;return(n=f[t])<(a=f[e])?-1:a<n?1:0}):i.sort(function(t,e){for(var n,a,r,o=c.length,i=d[t]._aSortData,l=d[e]._aSortData,s=0;s<o;s++)if(n=i[(r=c[s]).col],a=l[r.col],0!==(r=(u[r.type+"-"+r.dir]||u["string-"+r.dir])(n,a)))return r;return(n=f[t])<(a=f[e])?-1:a<n?1:0})}t.bSorted=!0}function le(t){for(var e=t.aoColumns,n=I(t),a=t.oLanguage.oAria,r=0,o=e.length;r<o;r++){var i=e[r],l=i.asSorting,s=i.ariaTitle||i.sTitle.replace(/<.*?>/g,""),u=i.nTh;u.removeAttribute("aria-sort"),i=i.bSortable?s+("asc"===(0<n.length&&n[0].col==r&&(u.setAttribute("aria-sort","asc"==n[0].dir?"ascending":"descending"),l[n[0].index+1])||l[0])?a.sSortAscending:a.sSortDescending):s,u.setAttribute("aria-label",i)}}function se(t,e,n,a){function r(t,e){var n=t._idx;return(n=n===H?P.inArray(t[1],s):n)+1<s.length?n+1:e?null:0}var o,i=t.aoColumns[e],l=t.aaSorting,s=i.asSorting;"number"==typeof l[0]&&(l=t.aaSorting=[l]),n&&t.oFeatures.bSortMulti?-1!==(i=P.inArray(e,N(l,"0")))?null===(o=null===(o=r(l[i],!0))&&1===l.length?0:o)?l.splice(i,1):(l[i][1]=s[o],l[i]._idx=o):(l.push([e,s[0],0]),l[l.length-1]._idx=0):l.length&&l[0][0]==e?(o=r(l[0]),l.length=1,l[0][1]=s[o],l[0]._idx=o):(l.length=0,l.push([e,s[0]]),l[0]._idx=0),u(t),"function"==typeof a&&a(t)}function ue(e,t,n,a){var r=e.aoColumns[n];me(t,{},function(t){!1!==r.bSortable&&(e.oFeatures.bProcessing?(D(e,!0),setTimeout(function(){se(e,n,t.shiftKey,a),"ssp"!==E(e)&&D(e,!1)},0)):se(e,n,t.shiftKey,a))})}function ce(t){var e,n,a,r=t.aLastSort,o=t.oClasses.sSortColumn,i=I(t),l=t.oFeatures;if(l.bSort&&l.bSortClasses){for(e=0,n=r.length;e<n;e++)a=r[e].src,P(N(t.aoData,"anCells",a)).removeClass(o+(e<2?e+1:3));for(e=0,n=i.length;e<n;e++)a=i[e].src,P(N(t.aoData,"anCells",a)).addClass(o+(e<2?e+1:3))}t.aLastSort=i}function fe(t,e){for(var n,a,r,o=t.aoColumns[e],i=w.ext.order[o.sSortDataType],l=(i&&(n=i.call(t.oInstance,t,e,ot(t,e))),w.ext.type.order[o.sType+"-pre"]),s=0,u=t.aoData.length;s<u;s++)(a=t.aoData[s])._aSortData||(a._aSortData=[]),a._aSortData[e]&&!i||(r=i?n[s]:S(t,s,e,"sort"),a._aSortData[e]=l?l(r):r)}function de(n){var t;n._bLoadingState||(t={time:+new Date,start:n._iDisplayStart,length:n._iDisplayLength,order:P.extend(!0,[],n.aaSorting),search:Et(n.oPreviousSearch),columns:P.map(n.aoColumns,function(t,e){return{visible:t.bVisible,search:Et(n.aoPreSearchCols[e])}})},n.oSavedState=t,R(n,"aoStateSaveParams","stateSaveParams",[n,t]),n.oFeatures.bStateSave&&!n.bDestroying&&n.fnStateSaveCallback.call(n.oInstance,n,t))}function he(e,t,n){var a;if(e.oFeatures.bStateSave)return(a=e.fnStateLoadCallback.call(e.oInstance,e,function(t){pe(e,t,n)}))!==H&&pe(e,a,n),!0;n()}function pe(n,t,e){var a,r,o=n.aoColumns,i=(n._bLoadingState=!0,n._bInitComplete?new w.Api(n):null);if(t&&t.time){var l=R(n,"aoStateLoadParams","stateLoadParams",[n,t]);if(-1!==P.inArray(!1,l))n._bLoadingState=!1;else{l=n.iStateDuration;if(0<l&&t.time<+new Date-1e3*l)n._bLoadingState=!1;else if(t.columns&&o.length!==t.columns.length)n._bLoadingState=!1;else{if(n.oLoadedState=P.extend(!0,{},t),t.length!==H&&(i?i.page.len(t.length):n._iDisplayLength=t.length),t.start!==H&&(null===i?(n._iDisplayStart=t.start,n.iInitDisplayStart=t.start):Yt(n,t.start/n._iDisplayLength)),t.order!==H&&(n.aaSorting=[],P.each(t.order,function(t,e){n.aaSorting.push(e[0]>=o.length?[0,e[1]]:e)})),t.search!==H&&P.extend(n.oPreviousSearch,Bt(t.search)),t.columns){for(a=0,r=t.columns.length;a<r;a++){var s=t.columns[a];s.visible!==H&&(i?i.column(a).visible(s.visible,!1):o[a].bVisible=s.visible),s.search!==H&&P.extend(n.aoPreSearchCols[a],Bt(s.search))}i&&i.columns.adjust()}n._bLoadingState=!1,R(n,"aoStateLoaded","stateLoaded",[n,t])}}}else n._bLoadingState=!1;e()}function ge(t){var e=w.settings,t=P.inArray(t,N(e,"nTable"));return-1!==t?e[t]:null}function W(t,e,n,a){if(n="DataTables warning: "+(t?"table id="+t.sTableId+" - ":"")+n,a&&(n+=". For more information about this error, please see http://datatables.net/tn/"+a),e)j.console&&console.log&&console.log(n);else{e=w.ext,e=e.sErrMode||e.errMode;if(t&&R(t,null,"error",[t,a,n]),"alert"==e)alert(n);else{if("throw"==e)throw new Error(n);"function"==typeof e&&e(t,a,n)}}}function F(n,a,t,e){Array.isArray(t)?P.each(t,function(t,e){Array.isArray(e)?F(n,a,e[0],e[1]):F(n,a,e)}):(e===H&&(e=t),a[t]!==H&&(n[e]=a[t]))}function be(t,e,n){var a,r;for(r in e)e.hasOwnProperty(r)&&(a=e[r],P.isPlainObject(a)?(P.isPlainObject(t[r])||(t[r]={}),P.extend(!0,t[r],a)):n&&"data"!==r&&"aaData"!==r&&Array.isArray(a)?t[r]=a.slice():t[r]=a);return t}function me(e,t,n){P(e).on("click.DT",t,function(t){P(e).trigger("blur"),n(t)}).on("keypress.DT",t,function(t){13===t.which&&(t.preventDefault(),n(t))}).on("selectstart.DT",function(){return!1})}function L(t,e,n,a){n&&t[e].push({fn:n,sName:a})}function R(n,t,e,a){var r=[];return t&&(r=P.map(n[t].slice().reverse(),function(t,e){return t.fn.apply(n.oInstance,a)})),null!==e&&(t=P.Event(e+".dt"),(e=P(n.nTable)).trigger(t,a),0===e.parents("body").length&&P("body").trigger(t,a),r.push(t.result)),r}function Se(t){var e=t._iDisplayStart,n=t.fnDisplayEnd(),a=t._iDisplayLength;n<=e&&(e=n-a),e-=e%a,t._iDisplayStart=e=-1===a||e<0?0:e}function ve(t,e){var t=t.renderer,n=w.ext.renderer[e];return P.isPlainObject(t)&&t[e]?n[t[e]]||n._:"string"==typeof t&&n[t]||n._}function E(t){return t.oFeatures.bServerSide?"ssp":t.ajax||t.sAjaxSource?"ajax":"dom"}function ye(t,n){var a;return Array.isArray(t)?P.map(t,function(t){return ye(t,n)}):"number"==typeof t?[n[t]]:(a=P.map(n,function(t,e){return t.nTable}),P(a).filter(t).map(function(t){var e=P.inArray(this,a);return n[e]}).toArray())}function De(r,o,t){var e,n;t&&(e=new B(r)).one("draw",function(){t(e.ajax.json())}),"ssp"==E(r)?u(r,o):(D(r,!0),(n=r.jqXHR)&&4!==n.readyState&&n.abort(),Tt(r,[],function(t){pt(r);for(var e=Ft(r,t),n=0,a=e.length;n<a;n++)x(r,e[n]);u(r,o),D(r,!1)}))}function _e(t,e,n,a,r){for(var o,i,l,s,u=[],c=typeof e,f=0,d=(e=e&&"string"!=c&&"function"!=c&&e.length!==H?e:[e]).length;f<d;f++)for(l=0,s=(i=e[f]&&e[f].split&&!e[f].match(/[\[\(:]/)?e[f].split(","):[e[f]]).length;l<s;l++)(o=n("string"==typeof i[l]?i[l].trim():i[l]))&&o.length&&(u=u.concat(o));var h=p.selector[t];if(h.length)for(f=0,d=h.length;f<d;f++)u=h[f](a,r,u);return z(u)}function we(t){return(t=t||{}).filter&&t.search===H&&(t.search=t.filter),P.extend({search:"none",order:"current",page:"all"},t)}function Ce(t){for(var e=0,n=t.length;e<n;e++)if(0<t[e].length)return t[0]=t[e],t[0].length=1,t.length=1,t.context=[t.context[e]],t;return t.length=0,t}function Te(o,t,e,n){function i(t,e){var n;if(Array.isArray(t)||t instanceof P)for(var a=0,r=t.length;a<r;a++)i(t[a],e);else t.nodeName&&"tr"===t.nodeName.toLowerCase()?l.push(t):(n=P("<tr><td></td></tr>").addClass(e),P("td",n).addClass(e).html(t)[0].colSpan=T(o),l.push(n[0]))}var l=[];i(e,n),t._details&&t._details.detach(),t._details=P(l),t._detailsShow&&t._details.insertAfter(t.nTr)}function xe(t,e){var n=t.context;if(n.length&&t.length){var a=n[0].aoData[t[0]];if(a._details){(a._detailsShow=e)?(a._details.insertAfter(a.nTr),P(a.nTr).addClass("dt-hasChild")):(a._details.detach(),P(a.nTr).removeClass("dt-hasChild")),R(n[0],null,"childRow",[e,t.row(t[0])]);var s=n[0],r=new B(s),a=".dt.DT_details",e="draw"+a,t="column-sizing"+a,a="destroy"+a,u=s.aoData;if(r.off(e+" "+t+" "+a),N(u,"_details").length>0){r.on(e,function(t,e){if(s!==e)return;r.rows({page:"current"}).eq(0).each(function(t){var e=u[t];if(e._detailsShow)e._details.insertAfter(e.nTr)})});r.on(t,function(t,e,n,a){if(s!==e)return;var r,o=T(e);for(var i=0,l=u.length;i<l;i++){r=u[i];if(r._details)r._details.children("td[colspan]").attr("colspan",o)}});r.on(a,function(t,e){if(s!==e)return;for(var n=0,a=u.length;n<a;n++)if(u[n]._details)Re(r,n)})}Le(n)}}}function Ae(t,e,n,a,r){for(var o=[],i=0,l=r.length;i<l;i++)o.push(S(t,r[i],e));return o}var Ie=[],o=Array.prototype,B=function(t,e){if(!(this instanceof B))return new B(t,e);function n(t){var e,n,a,r;t=t,a=w.settings,r=P.map(a,function(t,e){return t.nTable}),(t=t?t.nTable&&t.oApi?[t]:t.nodeName&&"table"===t.nodeName.toLowerCase()?-1!==(e=P.inArray(t,r))?[a[e]]:null:t&&"function"==typeof t.settings?t.settings().toArray():("string"==typeof t?n=P(t):t instanceof P&&(n=t),n?n.map(function(t){return-1!==(e=P.inArray(this,r))?a[e]:null}).toArray():void 0):[])&&o.push.apply(o,t)}var o=[];if(Array.isArray(t))for(var a=0,r=t.length;a<r;a++)n(t[a]);else n(t);this.context=z(o),e&&P.merge(this,e),this.selector={rows:null,cols:null,opts:null},B.extend(this,this,Ie)},Fe=(w.Api=B,P.extend(B.prototype,{any:function(){return 0!==this.count()},concat:o.concat,context:[],count:function(){return this.flatten().length},each:function(t){for(var e=0,n=this.length;e<n;e++)t.call(this,this[e],e,this);return this},eq:function(t){var e=this.context;return e.length>t?new B(e[t],this[t]):null},filter:function(t){var e=[];if(o.filter)e=o.filter.call(this,t,this);else for(var n=0,a=this.length;n<a;n++)t.call(this,this[n],n,this)&&e.push(this[n]);return new B(this.context,e)},flatten:function(){var t=[];return new B(this.context,t.concat.apply(t,this.toArray()))},join:o.join,indexOf:o.indexOf||function(t,e){for(var n=e||0,a=this.length;n<a;n++)if(this[n]===t)return n;return-1},iterator:function(t,e,n,a){var r,o,i,l,s,u,c,f,d=[],h=this.context,p=this.selector;for("string"==typeof t&&(a=n,n=e,e=t,t=!1),o=0,i=h.length;o<i;o++){var g=new B(h[o]);if("table"===e)(r=n.call(g,h[o],o))!==H&&d.push(r);else if("columns"===e||"rows"===e)(r=n.call(g,h[o],this[o],o))!==H&&d.push(r);else if("column"===e||"column-rows"===e||"row"===e||"cell"===e)for(c=this[o],"column-rows"===e&&(u=Fe(h[o],p.opts)),l=0,s=c.length;l<s;l++)f=c[l],(r="cell"===e?n.call(g,h[o],f.row,f.column,o,l):n.call(g,h[o],f,o,l,u))!==H&&d.push(r)}return d.length||a?((t=(a=new B(h,t?d.concat.apply([],d):d)).selector).rows=p.rows,t.cols=p.cols,t.opts=p.opts,a):this},lastIndexOf:o.lastIndexOf||function(t,e){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(t){var e=[];if(o.map)e=o.map.call(this,t,this);else for(var n=0,a=this.length;n<a;n++)e.push(t.call(this,this[n],n));return new B(this.context,e)},pluck:function(t){var e=w.util.get(t);return this.map(function(t){return e(t)})},pop:o.pop,push:o.push,reduce:o.reduce||function(t,e){return et(this,t,e,0,this.length,1)},reduceRight:o.reduceRight||function(t,e){return et(this,t,e,this.length-1,-1,-1)},reverse:o.reverse,selector:null,shift:o.shift,slice:function(){return new B(this.context,this)},sort:o.sort,splice:o.splice,toArray:function(){return o.slice.call(this)},to$:function(){return P(this)},toJQuery:function(){return P(this)},unique:function(){return new B(this.context,z(this))},unshift:o.unshift}),B.extend=function(t,e,n){if(n.length&&e&&(e instanceof B||e.__dt_wrapper))for(var a,r=0,o=n.length;r<o;r++)e[(a=n[r]).name]="function"===a.type?function(e,n,a){return function(){var t=n.apply(e,arguments);return B.extend(t,t,a.methodExt),t}}(t,a.val,a):"object"===a.type?{}:a.val,e[a.name].__dt_wrapper=!0,B.extend(t,e[a.name],a.propExt)},B.register=e=function(t,e){if(Array.isArray(t))for(var n=0,a=t.length;n<a;n++)B.register(t[n],e);else for(var r=t.split("."),o=Ie,i=0,l=r.length;i<l;i++){var s,u,c=function(t,e){for(var n=0,a=t.length;n<a;n++)if(t[n].name===e)return t[n];return null}(o,u=(s=-1!==r[i].indexOf("()"))?r[i].replace("()",""):r[i]);c||o.push(c={name:u,val:{},methodExt:[],propExt:[],type:"object"}),i===l-1?(c.val=e,c.type="function"==typeof e?"function":P.isPlainObject(e)?"object":"other"):o=s?c.methodExt:c.propExt}},B.registerPlural=t=function(t,e,n){B.register(t,n),B.register(e,function(){var t=n.apply(this,arguments);return t===this?this:t instanceof B?t.length?Array.isArray(t[0])?new B(t.context,t[0]):t[0]:H:t})},e("tables()",function(t){return t!==H&&null!==t?new B(ye(t,this.context)):this}),e("table()",function(t){var t=this.tables(t),e=t.context;return e.length?new B(e[0]):t}),t("tables().nodes()","table().node()",function(){return this.iterator("table",function(t){return t.nTable},1)}),t("tables().body()","table().body()",function(){return this.iterator("table",function(t){return t.nTBody},1)}),t("tables().header()","table().header()",function(){return this.iterator("table",function(t){return t.nTHead},1)}),t("tables().footer()","table().footer()",function(){return this.iterator("table",function(t){return t.nTFoot},1)}),t("tables().containers()","table().container()",function(){return this.iterator("table",function(t){return t.nTableWrapper},1)}),e("draw()",function(e){return this.iterator("table",function(t){"page"===e?y(t):u(t,!1===(e="string"==typeof e?"full-hold"!==e:e))})}),e("page()",function(e){return e===H?this.page.info().page:this.iterator("table",function(t){Yt(t,e)})}),e("page.info()",function(t){var e,n,a,r,o;return 0===this.context.length?H:(n=(e=this.context[0])._iDisplayStart,a=e.oFeatures.bPaginate?e._iDisplayLength:-1,r=e.fnRecordsDisplay(),{page:(o=-1===a)?0:Math.floor(n/a),pages:o?1:Math.ceil(r/a),start:n,end:e.fnDisplayEnd(),length:a,recordsTotal:e.fnRecordsTotal(),recordsDisplay:r,serverSide:"ssp"===E(e)})}),e("page.len()",function(e){return e===H?0!==this.context.length?this.context[0]._iDisplayLength:H:this.iterator("table",function(t){$t(t,e)})}),e("ajax.json()",function(){var t=this.context;if(0<t.length)return t[0].json}),e("ajax.params()",function(){var t=this.context;if(0<t.length)return t[0].oAjaxData}),e("ajax.reload()",function(e,n){return this.iterator("table",function(t){De(t,!1===n,e)})}),e("ajax.url()",function(e){var t=this.context;return e===H?0===t.length?H:(t=t[0]).ajax?P.isPlainObject(t.ajax)?t.ajax.url:t.ajax:t.sAjaxSource:this.iterator("table",function(t){P.isPlainObject(t.ajax)?t.ajax.url=e:t.ajax=e})}),e("ajax.url().load()",function(e,n){return this.iterator("table",function(t){De(t,!1===n,e)})}),function(t,e){var n,a=[],r=t.aiDisplay,o=t.aiDisplayMaster,i=e.search,l=e.order,e=e.page;if("ssp"==E(t))return"removed"===i?[]:f(0,o.length);if("current"==e)for(u=t._iDisplayStart,c=t.fnDisplayEnd();u<c;u++)a.push(r[u]);else if("current"==l||"applied"==l){if("none"==i)a=o.slice();else if("applied"==i)a=r.slice();else if("removed"==i){for(var s={},u=0,c=r.length;u<c;u++)s[r[u]]=null;a=P.map(o,function(t){return s.hasOwnProperty(t)?null:t})}}else if("index"==l||"original"==l)for(u=0,c=t.aoData.length;u<c;u++)("none"==i||-1===(n=P.inArray(u,r))&&"removed"==i||0<=n&&"applied"==i)&&a.push(u);return a}),Le=(e("rows()",function(e,n){e===H?e="":P.isPlainObject(e)&&(n=e,e=""),n=we(n);var t=this.iterator("table",function(t){return _e("row",e,function(n){var t=d(n),a=r.aoData;if(null!==t&&!o)return[t];if(i=i||Fe(r,o),null!==t&&-1!==P.inArray(t,i))return[t];if(null===n||n===H||""===n)return i;if("function"==typeof n)return P.map(i,function(t){var e=a[t];return n(t,e._aData,e.nTr)?t:null});if(n.nodeName)return t=n._DT_RowIndex,e=n._DT_CellIndex,t!==H?a[t]&&a[t].nTr===n?[t]:[]:e?a[e.row]&&a[e.row].nTr===n.parentNode?[e.row]:[]:(t=P(n).closest("*[data-dt-row]")).length?[t.data("dt-row")]:[];if("string"==typeof n&&"#"===n.charAt(0)){var e=r.aIds[n.replace(/^#/,"")];if(e!==H)return[e.idx]}t=_(m(r.aoData,i,"nTr"));return P(t).filter(n).map(function(){return this._DT_RowIndex}).toArray()},r=t,o=n);var r,o,i},1);return t.selector.rows=e,t.selector.opts=n,t}),e("rows().nodes()",function(){return this.iterator("row",function(t,e){return t.aoData[e].nTr||H},1)}),e("rows().data()",function(){return this.iterator(!0,"rows",function(t,e){return m(t.aoData,e,"_aData")},1)}),t("rows().cache()","row().cache()",function(n){return this.iterator("row",function(t,e){t=t.aoData[e];return"search"===n?t._aFilterData:t._aSortData},1)}),t("rows().invalidate()","row().invalidate()",function(n){return this.iterator("row",function(t,e){bt(t,e,n)})}),t("rows().indexes()","row().index()",function(){return this.iterator("row",function(t,e){return e},1)}),t("rows().ids()","row().id()",function(t){for(var e=[],n=this.context,a=0,r=n.length;a<r;a++)for(var o=0,i=this[a].length;o<i;o++){var l=n[a].rowIdFn(n[a].aoData[this[a][o]]._aData);e.push((!0===t?"#":"")+l)}return new B(n,e)}),t("rows().remove()","row().remove()",function(){var f=this;return this.iterator("row",function(t,e,n){var a,r,o,i,l,s,u=t.aoData,c=u[e];for(u.splice(e,1),a=0,r=u.length;a<r;a++)if(s=(l=u[a]).anCells,null!==l.nTr&&(l.nTr._DT_RowIndex=a),null!==s)for(o=0,i=s.length;o<i;o++)s[o]._DT_CellIndex.row=a;gt(t.aiDisplayMaster,e),gt(t.aiDisplay,e),gt(f[n],e,!1),0<t._iRecordsDisplay&&t._iRecordsDisplay--,Se(t);n=t.rowIdFn(c._aData);n!==H&&delete t.aIds[n]}),this.iterator("table",function(t){for(var e=0,n=t.aoData.length;e<n;e++)t.aoData[e].idx=e}),this}),e("rows.add()",function(o){var t=this.iterator("table",function(t){for(var e,n=[],a=0,r=o.length;a<r;a++)(e=o[a]).nodeName&&"TR"===e.nodeName.toUpperCase()?n.push(ut(t,e)[0]):n.push(x(t,e));return n},1),e=this.rows(-1);return e.pop(),P.merge(e,t),e}),e("row()",function(t,e){return Ce(this.rows(t,e))}),e("row().data()",function(t){var e,n=this.context;return t===H?n.length&&this.length?n[0].aoData[this[0]]._aData:H:((e=n[0].aoData[this[0]])._aData=t,Array.isArray(t)&&e.nTr&&e.nTr.id&&b(n[0].rowId)(t,e.nTr.id),bt(n[0],this[0],"data"),this)}),e("row().node()",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]].nTr||null}),e("row.add()",function(e){e instanceof P&&e.length&&(e=e[0]);var t=this.iterator("table",function(t){return e.nodeName&&"TR"===e.nodeName.toUpperCase()?ut(t,e)[0]:x(t,e)});return this.row(t[0])}),P(v).on("plugin-init.dt",function(t,e){var n=new B(e),a="on-plugin-init",r="stateSaveParams."+a,o="destroy. "+a,a=(n.on(r,function(t,e,n){for(var a=e.rowIdFn,r=e.aoData,o=[],i=0;i<r.length;i++)r[i]._detailsShow&&o.push("#"+a(r[i]._aData));n.childRows=o}),n.on(o,function(){n.off(r+" "+o)}),n.state.loaded());a&&a.childRows&&n.rows(P.map(a.childRows,function(t){return t.replace(/:/g,"\\:")})).every(function(){R(e,null,"requestChild",[this])})}),w.util.throttle(function(t){de(t[0])},500)),Re=function(t,e){var n=t.context;n.length&&(e=n[0].aoData[e!==H?e:t[0]])&&e._details&&(e._details.remove(),e._detailsShow=H,e._details=H,P(e.nTr).removeClass("dt-hasChild"),Le(n))},Pe="row().child",je=Pe+"()",He=(e(je,function(t,e){var n=this.context;return t===H?n.length&&this.length?n[0].aoData[this[0]]._details:H:(!0===t?this.child.show():!1===t?Re(this):n.length&&this.length&&Te(n[0],n[0].aoData[this[0]],t,e),this)}),e([Pe+".show()",je+".show()"],function(t){return xe(this,!0),this}),e([Pe+".hide()",je+".hide()"],function(){return xe(this,!1),this}),e([Pe+".remove()",je+".remove()"],function(){return Re(this),this}),e(Pe+".isShown()",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]]._detailsShow||!1}),/^([^:]+):(name|visIdx|visible)$/),Ne=(e("columns()",function(n,a){n===H?n="":P.isPlainObject(n)&&(a=n,n=""),a=we(a);var t=this.iterator("table",function(t){return e=n,l=a,s=(i=t).aoColumns,u=N(s,"sName"),c=N(s,"nTh"),_e("column",e,function(n){var a,t=d(n);if(""===n)return f(s.length);if(null!==t)return[0<=t?t:s.length+t];if("function"==typeof n)return a=Fe(i,l),P.map(s,function(t,e){return n(e,Ae(i,e,0,0,a),c[e])?e:null});var r="string"==typeof n?n.match(He):"";if(r)switch(r[2]){case"visIdx":case"visible":var e,o=parseInt(r[1],10);return o<0?[(e=P.map(s,function(t,e){return t.bVisible?e:null}))[e.length+o]]:[rt(i,o)];case"name":return P.map(u,function(t,e){return t===r[1]?e:null});default:return[]}return n.nodeName&&n._DT_CellIndex?[n._DT_CellIndex.column]:(t=P(c).filter(n).map(function(){return P.inArray(this,c)}).toArray()).length||!n.nodeName?t:(t=P(n).closest("*[data-dt-column]")).length?[t.data("dt-column")]:[]},i,l);var i,e,l,s,u,c},1);return t.selector.cols=n,t.selector.opts=a,t}),t("columns().header()","column().header()",function(t,e){return this.iterator("column",function(t,e){return t.aoColumns[e].nTh},1)}),t("columns().footer()","column().footer()",function(t,e){return this.iterator("column",function(t,e){return t.aoColumns[e].nTf},1)}),t("columns().data()","column().data()",function(){return this.iterator("column-rows",Ae,1)}),t("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(t,e){return t.aoColumns[e].mData},1)}),t("columns().cache()","column().cache()",function(o){return this.iterator("column-rows",function(t,e,n,a,r){return m(t.aoData,r,"search"===o?"_aFilterData":"_aSortData",e)},1)}),t("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(t,e,n,a,r){return m(t.aoData,r,"anCells",e)},1)}),t("columns().visible()","column().visible()",function(f,n){var e=this,t=this.iterator("column",function(t,e){if(f===H)return t.aoColumns[e].bVisible;var n,a,r=e,e=f,o=t.aoColumns,i=o[r],l=t.aoData;if(e===H)i.bVisible;else if(i.bVisible!==e){if(e)for(var s=P.inArray(!0,N(o,"bVisible"),r+1),u=0,c=l.length;u<c;u++)a=l[u].nTr,n=l[u].anCells,a&&a.insertBefore(n[r],n[s]||null);else P(N(t.aoData,"anCells",r)).detach();i.bVisible=e}});return f!==H&&this.iterator("table",function(t){Dt(t,t.aoHeader),Dt(t,t.aoFooter),t.aiDisplay.length||P(t.nTBody).find("td[colspan]").attr("colspan",T(t)),de(t),e.iterator("column",function(t,e){R(t,null,"column-visibility",[t,e,f,n])}),n!==H&&!n||e.columns.adjust()}),t}),t("columns().indexes()","column().index()",function(n){return this.iterator("column",function(t,e){return"visible"===n?ot(t,e):e},1)}),e("columns.adjust()",function(){return this.iterator("table",function(t){O(t)},1)}),e("column.index()",function(t,e){var n;if(0!==this.context.length)return n=this.context[0],"fromVisible"===t||"toData"===t?rt(n,e):"fromData"===t||"toVisible"===t?ot(n,e):void 0}),e("column()",function(t,e){return Ce(this.columns(t,e))}),e("cells()",function(g,t,b){var a,r,o,i,l,s,e;return P.isPlainObject(g)&&(g.row===H?(b=g,g=null):(b=t,t=null)),P.isPlainObject(t)&&(b=t,t=null),null===t||t===H?this.iterator("table",function(t){return a=t,t=g,e=we(b),f=a.aoData,d=Fe(a,e),n=_(m(f,d,"anCells")),h=P(Y([],n)),p=a.aoColumns.length,_e("cell",t,function(t){var e,n="function"==typeof t;if(null===t||t===H||n){for(o=[],i=0,l=d.length;i<l;i++)for(r=d[i],s=0;s<p;s++)u={row:r,column:s},(!n||(c=f[r],t(u,S(a,r,s),c.anCells?c.anCells[s]:null)))&&o.push(u);return o}return P.isPlainObject(t)?t.column!==H&&t.row!==H&&-1!==P.inArray(t.row,d)?[t]:[]:(e=h.filter(t).map(function(t,e){return{row:e._DT_CellIndex.row,column:e._DT_CellIndex.column}}).toArray()).length||!t.nodeName?e:(c=P(t).closest("*[data-dt-row]")).length?[{row:c.data("dt-row"),column:c.data("dt-column")}]:[]},a,e);var a,e,r,o,i,l,s,u,c,f,d,n,h,p}):(e=b?{page:b.page,order:b.order,search:b.search}:{},a=this.columns(t,e),r=this.rows(g,e),e=this.iterator("table",function(t,e){var n=[];for(o=0,i=r[e].length;o<i;o++)for(l=0,s=a[e].length;l<s;l++)n.push({row:r[e][o],column:a[e][l]});return n},1),e=b&&b.selected?this.cells(e,b):e,P.extend(e.selector,{cols:t,rows:g,opts:b}),e)}),t("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(t,e,n){t=t.aoData[e];return t&&t.anCells?t.anCells[n]:H},1)}),e("cells().data()",function(){return this.iterator("cell",function(t,e,n){return S(t,e,n)},1)}),t("cells().cache()","cell().cache()",function(a){return a="search"===a?"_aFilterData":"_aSortData",this.iterator("cell",function(t,e,n){return t.aoData[e][a][n]},1)}),t("cells().render()","cell().render()",function(a){return this.iterator("cell",function(t,e,n){return S(t,e,n,a)},1)}),t("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(t,e,n){return{row:e,column:n,columnVisible:ot(t,n)}},1)}),t("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(t,e,n){bt(t,e,a,n)})}),e("cell()",function(t,e,n){return Ce(this.cells(t,e,n))}),e("cell().data()",function(t){var e=this.context,n=this[0];return t===H?e.length&&n.length?S(e[0],n[0].row,n[0].column):H:(ct(e[0],n[0].row,n[0].column,t),bt(e[0],n[0].row,"data",n[0].column),this)}),e("order()",function(e,t){var n=this.context;return e===H?0!==n.length?n[0].aaSorting:H:("number"==typeof e?e=[[e,t]]:e.length&&!Array.isArray(e[0])&&(e=Array.prototype.slice.call(arguments)),this.iterator("table",function(t){t.aaSorting=e.slice()}))}),e("order.listener()",function(e,n,a){return this.iterator("table",function(t){ue(t,e,n,a)})}),e("order.fixed()",function(e){var t;return e?this.iterator("table",function(t){t.aaSortingFixed=P.extend(!0,{},e)}):(t=(t=this.context).length?t[0].aaSortingFixed:H,Array.isArray(t)?{pre:t}:t)}),e(["columns().order()","column().order()"],function(a){var r=this;return this.iterator("table",function(t,e){var n=[];P.each(r[e],function(t,e){n.push([e,a])}),t.aaSorting=n})}),e("search()",function(e,n,a,r){var t=this.context;return e===H?0!==t.length?t[0].oPreviousSearch.sSearch:H:this.iterator("table",function(t){t.oFeatures.bFilter&&Rt(t,P.extend({},t.oPreviousSearch,{sSearch:e+"",bRegex:null!==n&&n,bSmart:null===a||a,bCaseInsensitive:null===r||r}),1)})}),t("columns().search()","column().search()",function(a,r,o,i){return this.iterator("column",function(t,e){var n=t.aoPreSearchCols;if(a===H)return n[e].sSearch;t.oFeatures.bFilter&&(P.extend(n[e],{sSearch:a+"",bRegex:null!==r&&r,bSmart:null===o||o,bCaseInsensitive:null===i||i}),Rt(t,t.oPreviousSearch,1))})}),e("state()",function(){return this.context.length?this.context[0].oSavedState:null}),e("state.clear()",function(){return this.iterator("table",function(t){t.fnStateSaveCallback.call(t.oInstance,t,{})})}),e("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null}),e("state.save()",function(){return this.iterator("table",function(t){de(t)})}),w.use=function(t,e){"lib"===e||t.fn?P=t:"win"==e||t.document?v=(j=t).document:"datetime"!==e&&"DateTime"!==t.type||(w.DateTime=t)},w.factory=function(t,e){var n=!1;return t&&t.document&&(v=(j=t).document),e&&e.fn&&e.fn.jquery&&(P=e,n=!0),n},w.versionCheck=w.fnVersionCheck=function(t){for(var e,n,a=w.version.split("."),r=t.split("."),o=0,i=r.length;o<i;o++)if((e=parseInt(a[o],10)||0)!==(n=parseInt(r[o],10)||0))return n<e;return!0},w.isDataTable=w.fnIsDataTable=function(t){var r=P(t).get(0),o=!1;return t instanceof w.Api||(P.each(w.settings,function(t,e){var n=e.nScrollHead?P("table",e.nScrollHead)[0]:null,a=e.nScrollFoot?P("table",e.nScrollFoot)[0]:null;e.nTable!==r&&n!==r&&a!==r||(o=!0)}),o)},w.tables=w.fnTables=function(e){var t=!1,n=(P.isPlainObject(e)&&(t=e.api,e=e.visible),P.map(w.settings,function(t){if(!e||P(t.nTable).is(":visible"))return t.nTable}));return t?new B(n):n},w.camelToHungarian=C,e("$()",function(t,e){e=this.rows(e).nodes(),e=P(e);return P([].concat(e.filter(t).toArray(),e.find(t).toArray()))}),P.each(["on","one","off"],function(t,n){e(n+"()",function(){var t=Array.prototype.slice.call(arguments),e=(t[0]=P.map(t[0].split(/\s/),function(t){return t.match(/\.dt\b/)?t:t+".dt"}).join(" "),P(this.tables().nodes()));return e[n].apply(e,t),this})}),e("clear()",function(){return this.iterator("table",function(t){pt(t)})}),e("settings()",function(){return new B(this.context,this.context)}),e("init()",function(){var t=this.context;return t.length?t[0].oInit:null}),e("data()",function(){return this.iterator("table",function(t){return N(t.aoData,"_aData")}).flatten()}),e("destroy()",function(c){return c=c||!1,this.iterator("table",function(e){var n,t=e.oClasses,a=e.nTable,r=e.nTBody,o=e.nTHead,i=e.nTFoot,l=P(a),r=P(r),s=P(e.nTableWrapper),u=P.map(e.aoData,function(t){return t.nTr}),i=(e.bDestroying=!0,R(e,"aoDestroyCallback","destroy",[e]),c||new B(e).columns().visible(!0),s.off(".DT").find(":not(tbody *)").off(".DT"),P(j).off(".DT-"+e.sInstance),a!=o.parentNode&&(l.children("thead").detach(),l.append(o)),i&&a!=i.parentNode&&(l.children("tfoot").detach(),l.append(i)),e.aaSorting=[],e.aaSortingFixed=[],ce(e),P(u).removeClass(e.asStripeClasses.join(" ")),P("th, td",o).removeClass(t.sSortable+" "+t.sSortableAsc+" "+t.sSortableDesc+" "+t.sSortableNone),r.children().detach(),r.append(u),e.nTableWrapper.parentNode),o=c?"remove":"detach",u=(l[o](),s[o](),!c&&i&&(i.insertBefore(a,e.nTableReinsertBefore),l.css("width",e.sDestroyWidth).removeClass(t.sTable),n=e.asDestroyStripes.length)&&r.children().each(function(t){P(this).addClass(e.asDestroyStripes[t%n])}),P.inArray(e,w.settings));-1!==u&&w.settings.splice(u,1)})}),P.each(["column","row","cell"],function(t,s){e(s+"s().every()",function(o){var i=this.selector.opts,l=this;return this.iterator(s,function(t,e,n,a,r){o.call(l[s](e,"cell"===s?n:i,"cell"===s?i:H),e,n,a,r)})})}),e("i18n()",function(t,e,n){var a=this.context[0],t=A(t)(a.oLanguage);return t===H&&(t=e),"string"==typeof(t=n!==H&&P.isPlainObject(t)?t[n]!==H?t[n]:t._:t)?t.replace("%d",n):t}),w.version="1.13.6",w.settings=[],w.models={},w.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0,return:!1},w.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1},w.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},w.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(t){try{return JSON.parse((-1===t.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+t.sInstance+"_"+location.pathname))}catch(t){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(t,e){try{(-1===t.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+t.sInstance+"_"+location.pathname,JSON.stringify(e))}catch(t){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:P.extend({},w.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"},i(w.defaults),w.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null},i(w.defaults.column),w.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,jqXHR:null,json:H,oAjaxData:H,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==E(this)?+this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==E(this)?+this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var t=this._iDisplayLength,e=this._iDisplayStart,n=e+t,a=this.aiDisplay.length,r=this.oFeatures,o=r.bPaginate;return r.bServerSide?!1===o||-1===t?e+a:Math.min(e+t,this._iRecordsDisplay):!o||a<n||-1===t?a:n},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null},w.ext=p={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:w.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:w.version},P.extend(p,{afnFiltering:p.search,aTypes:p.type.detect,ofnSearch:p.type.search,oSort:p.type.order,afnSortData:p.order,aoFeatures:p.feature,oApi:p.internal,oStdClasses:p.classes,oPagination:p.pager}),P.extend(w.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_desc_disabled",sSortableDesc:"sorting_asc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""}),w.ext.pager);function Oe(t,e){var n=[],a=Ne.numbers_length,r=Math.floor(a/2);return e<=a?n=f(0,e):t<=r?((n=f(0,a-2)).push("ellipsis"),n.push(e-1)):((e-1-r<=t?n=f(e-(a-2),e):((n=f(t-r+2,t+r-1)).push("ellipsis"),n.push(e-1),n)).splice(0,0,"ellipsis"),n.splice(0,0,0)),n.DT_el="span",n}P.extend(Ne,{simple:function(t,e){return["previous","next"]},full:function(t,e){return["first","previous","next","last"]},numbers:function(t,e){return[Oe(t,e)]},simple_numbers:function(t,e){return["previous",Oe(t,e),"next"]},full_numbers:function(t,e){return["first","previous",Oe(t,e),"next","last"]},first_last_numbers:function(t,e){return["first",Oe(t,e),"last"]},_numbers:Oe,numbers_length:7}),P.extend(!0,w.ext.renderer,{pageButton:{_:function(u,t,c,e,f,d){function h(t,e){for(var n,a=b.sPageButtonDisabled,r=function(t){Yt(u,t.data.action,!0)},o=0,i=e.length;o<i;o++)if(n=e[o],Array.isArray(n)){var l=P("<"+(n.DT_el||"div")+"/>").appendTo(t);h(l,n)}else{var s=!1;switch(p=null,g=n){case"ellipsis":t.append('<span class="ellipsis">&#x2026;</span>');break;case"first":p=m.sFirst,0===f&&(s=!0);break;case"previous":p=m.sPrevious,0===f&&(s=!0);break;case"next":p=m.sNext,0!==d&&f!==d-1||(s=!0);break;case"last":p=m.sLast,0!==d&&f!==d-1||(s=!0);break;default:p=u.fnFormatNumber(n+1),g=f===n?b.sPageButtonActive:""}null!==p&&(l=u.oInit.pagingTag||"a",s&&(g+=" "+a),me(P("<"+l+">",{class:b.sPageButton+" "+g,"aria-controls":u.sTableId,"aria-disabled":s?"true":null,"aria-label":S[n],role:"link","aria-current":g===b.sPageButtonActive?"page":null,"data-dt-idx":n,tabindex:s?-1:u.iTabIndex,id:0===c&&"string"==typeof n?u.sTableId+"_"+n:null}).html(p).appendTo(t),{action:n},r))}}var p,g,n,b=u.oClasses,m=u.oLanguage.oPaginate,S=u.oLanguage.oAria.paginate||{};try{n=P(t).find(v.activeElement).data("dt-idx")}catch(t){}h(P(t).empty(),e),n!==H&&P(t).find("[data-dt-idx="+n+"]").trigger("focus")}}}),P.extend(w.ext.type.detect,[function(t,e){e=e.oLanguage.sDecimal;return l(t,e)?"num"+e:null},function(t,e){var n;return(!t||t instanceof Date||X.test(t))&&(null!==(n=Date.parse(t))&&!isNaN(n)||h(t))?"date":null},function(t,e){e=e.oLanguage.sDecimal;return l(t,e,!0)?"num-fmt"+e:null},function(t,e){e=e.oLanguage.sDecimal;return a(t,e)?"html-num"+e:null},function(t,e){e=e.oLanguage.sDecimal;return a(t,e,!0)?"html-num-fmt"+e:null},function(t,e){return h(t)||"string"==typeof t&&-1!==t.indexOf("<")?"html":null}]),P.extend(w.ext.type.search,{html:function(t){return h(t)?t:"string"==typeof t?t.replace(U," ").replace(V,""):""},string:function(t){return!h(t)&&"string"==typeof t?t.replace(U," "):t}});function ke(t,e,n,a){var r;return 0===t||t&&"-"!==t?"number"==(r=typeof t)||"bigint"==r?t:+(t=(t=e?$(t,e):t).replace&&(n&&(t=t.replace(n,"")),a)?t.replace(a,""):t):-1/0}function Me(n){P.each({num:function(t){return ke(t,n)},"num-fmt":function(t){return ke(t,n,q)},"html-num":function(t){return ke(t,n,V)},"html-num-fmt":function(t){return ke(t,n,V,q)}},function(t,e){p.type.order[t+n+"-pre"]=e,t.match(/^html\-/)&&(p.type.search[t+n]=p.type.search.html)})}P.extend(p.type.order,{"date-pre":function(t){t=Date.parse(t);return isNaN(t)?-1/0:t},"html-pre":function(t){return h(t)?"":t.replace?t.replace(/<.*?>/g,"").toLowerCase():t+""},"string-pre":function(t){return h(t)?"":"string"==typeof t?t.toLowerCase():t.toString?t.toString():""},"string-asc":function(t,e){return t<e?-1:e<t?1:0},"string-desc":function(t,e){return t<e?1:e<t?-1:0}}),Me(""),P.extend(!0,w.ext.renderer,{header:{_:function(r,o,i,l){P(r.nTable).on("order.dt.DT",function(t,e,n,a){r===e&&(e=i.idx,o.removeClass(l.sSortAsc+" "+l.sSortDesc).addClass("asc"==a[e]?l.sSortAsc:"desc"==a[e]?l.sSortDesc:i.sSortingClass))})},jqueryui:function(r,o,i,l){P("<div/>").addClass(l.sSortJUIWrapper).append(o.contents()).append(P("<span/>").addClass(l.sSortIcon+" "+i.sSortingClassJUI)).appendTo(o),P(r.nTable).on("order.dt.DT",function(t,e,n,a){r===e&&(e=i.idx,o.removeClass(l.sSortAsc+" "+l.sSortDesc).addClass("asc"==a[e]?l.sSortAsc:"desc"==a[e]?l.sSortDesc:i.sSortingClass),o.find("span."+l.sSortIcon).removeClass(l.sSortJUIAsc+" "+l.sSortJUIDesc+" "+l.sSortJUI+" "+l.sSortJUIAscAllowed+" "+l.sSortJUIDescAllowed).addClass("asc"==a[e]?l.sSortJUIAsc:"desc"==a[e]?l.sSortJUIDesc:i.sSortingClassJUI))})}}});function We(t){return"string"==typeof(t=Array.isArray(t)?t.join(","):t)?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):t}function Ee(t,e,n,a,r){return j.moment?t[e](r):j.luxon?t[n](r):a?t[a](r):t}var Be=!1;function Ue(t,e,n){var a;if(j.moment){if(!(a=j.moment.utc(t,e,n,!0)).isValid())return null}else if(j.luxon){if(!(a=e&&"string"==typeof t?j.luxon.DateTime.fromFormat(t,e):j.luxon.DateTime.fromISO(t)).isValid)return null;a.setLocale(n)}else e?(Be||alert("DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17"),Be=!0):a=new Date(t);return a}function Ve(s){return function(a,r,o,i){0===arguments.length?(o="en",a=r=null):1===arguments.length?(o="en",r=a,a=null):2===arguments.length&&(o=r,r=a,a=null);var l="datetime-"+r;return w.ext.type.order[l]||(w.ext.type.detect.unshift(function(t){return t===l&&l}),w.ext.type.order[l+"-asc"]=function(t,e){t=t.valueOf(),e=e.valueOf();return t===e?0:t<e?-1:1},w.ext.type.order[l+"-desc"]=function(t,e){t=t.valueOf(),e=e.valueOf();return t===e?0:e<t?-1:1}),function(t,e){var n;return null!==t&&t!==H||(t="--now"===i?(n=new Date,new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds()))):""),"type"===e?l:""===t?"sort"!==e?"":Ue("0000-01-01 00:00:00",null,o):!(null===r||a!==r||"sort"===e||"type"===e||t instanceof Date)||null===(n=Ue(t,a,o))?t:"sort"===e?n:(t=null===r?Ee(n,"toDate","toJSDate","")[s]():Ee(n,"format","toFormat","toISOString",r),"display"===e?We(t):t)}}}var Xe=",",Je=".";if(j.Intl!==H)try{for(var qe=(new Intl.NumberFormat).formatToParts(100000.1),n=0;n<qe.length;n++)"group"===qe[n].type?Xe=qe[n].value:"decimal"===qe[n].type&&(Je=qe[n].value)}catch(t){}function $e(e){return function(){var t=[ge(this[w.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return w.ext.internal[e].apply(this,t)}}return w.datetime=function(n,a){var r="datetime-detect-"+n;a=a||"en",w.ext.type.order[r]||(w.ext.type.detect.unshift(function(t){var e=Ue(t,n,a);return!(""!==t&&!e)&&r}),w.ext.type.order[r+"-pre"]=function(t){return Ue(t,n,a)||0})},w.render={date:Ve("toLocaleDateString"),datetime:Ve("toLocaleString"),time:Ve("toLocaleTimeString"),number:function(a,r,o,i,l){return null!==a&&a!==H||(a=Xe),null!==r&&r!==H||(r=Je),{display:function(t){if("number"!=typeof t&&"string"!=typeof t)return t;if(""===t||null===t)return t;var e=t<0?"-":"",n=parseFloat(t);if(isNaN(n))return We(t);n=n.toFixed(o),t=Math.abs(n);n=parseInt(t,10),t=o?r+(t-n).toFixed(o).substring(2):"";return(e=0===n&&0===parseFloat(t)?"":e)+(i||"")+n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+t+(l||"")}}},text:function(){return{display:We,filter:We}}},P.extend(w.ext.internal,{_fnExternApiFunc:$e,_fnBuildAjax:Tt,_fnAjaxUpdate:xt,_fnAjaxParameters:At,_fnAjaxUpdateDraw:It,_fnAjaxDataSrc:Ft,_fnAddColumn:nt,_fnColumnOptions:at,_fnAdjustColumnSizing:O,_fnVisibleToColumnIndex:rt,_fnColumnIndexToVisible:ot,_fnVisbleColumns:T,_fnGetColumns:it,_fnColumnTypes:lt,_fnApplyColumnDefs:st,_fnHungarianMap:i,_fnCamelToHungarian:C,_fnLanguageCompat:Z,_fnBrowserDetect:tt,_fnAddData:x,_fnAddTr:ut,_fnNodeToDataIndex:function(t,e){return e._DT_RowIndex!==H?e._DT_RowIndex:null},_fnNodeToColumnIndex:function(t,e,n){return P.inArray(n,t.aoData[e].anCells)},_fnGetCellData:S,_fnSetCellData:ct,_fnSplitObjNotation:dt,_fnGetObjectDataFn:A,_fnSetObjectDataFn:b,_fnGetDataMaster:ht,_fnClearTable:pt,_fnDeleteIndex:gt,_fnInvalidate:bt,_fnGetRowElements:mt,_fnCreateTr:St,_fnBuildHead:yt,_fnDrawHead:Dt,_fnDraw:y,_fnReDraw:u,_fnAddOptionsHtml:_t,_fnDetectHeader:wt,_fnGetUniqueThs:Ct,_fnFeatureHtmlFilter:Lt,_fnFilterComplete:Rt,_fnFilterCustom:Pt,_fnFilterColumn:jt,_fnFilter:Ht,_fnFilterCreateSearch:Nt,_fnEscapeRegex:Ot,_fnFilterData:Wt,_fnFeatureHtmlInfo:Ut,_fnUpdateInfo:Vt,_fnInfoMacros:Xt,_fnInitialise:Jt,_fnInitComplete:qt,_fnLengthChange:$t,_fnFeatureHtmlLength:Gt,_fnFeatureHtmlPaginate:zt,_fnPageChange:Yt,_fnFeatureHtmlProcessing:Zt,_fnProcessingDisplay:D,_fnFeatureHtmlTable:Kt,_fnScrollDraw:Qt,_fnApplyToChildren:k,_fnCalculateColumnWidths:ee,_fnThrottle:ne,_fnConvertToWidth:ae,_fnGetWidestNode:re,_fnGetMaxLenString:oe,_fnStringToCss:M,_fnSortFlatten:I,_fnSort:ie,_fnSortAria:le,_fnSortListener:se,_fnSortAttachListener:ue,_fnSortingClasses:ce,_fnSortData:fe,_fnSaveState:de,_fnLoadState:he,_fnImplementState:pe,_fnSettingsFromNode:ge,_fnLog:W,_fnMap:F,_fnBindAction:me,_fnCallbackReg:L,_fnCallbackFire:R,_fnLengthOverflow:Se,_fnRenderer:ve,_fnDataSource:E,_fnRowAttributes:vt,_fnExtend:be,_fnCalculateEnd:function(){}}),((P.fn.dataTable=w).$=P).fn.dataTableSettings=w.settings,P.fn.dataTableExt=w.ext,P.fn.DataTable=function(t){return P(this).dataTable(t).api()},P.each(w,function(t,e){P.fn.DataTable[t]=e}),w}); \ No newline at end of file
diff --git a/docs/coverage/lib/highlight.js-6.2/LICENSE b/docs/coverage/lib/highlight.js-6.2/LICENSE
new file mode 100644
index 00000000..fe2f67b1
--- /dev/null
+++ b/docs/coverage/lib/highlight.js-6.2/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2006, Ivan Sagalaev
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of highlight.js nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/docs/coverage/lib/highlight.js-6.2/highlight.pack.js b/docs/coverage/lib/highlight.js-6.2/highlight.pack.js
new file mode 100644
index 00000000..6687e557
--- /dev/null
+++ b/docs/coverage/lib/highlight.js-6.2/highlight.pack.js
@@ -0,0 +1 @@
+var hljs=new function(){function m(p){return p.replace(/&/gm,"&amp;").replace(/</gm,"&lt;")}function f(r,q,p){return RegExp(q,"m"+(r.cI?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.childNodes[r].nodeName=="BR"){p+="\n"}else{p+=h(t.childNodes[r])}}}if(/MSIE [678]/.test(navigator.userAgent)){p=p.replace(/\r/g,"\n")}return p}function a(s){var r=s.className.split(/\s+/);r=r.concat(s.parentNode.className.split(/\s+/));for(var q=0;q<r.length;q++){var p=r[q].replace(/^language-/,"");if(e[p]){return p}}}function c(q){var p=[];(function(s,t){for(var r=0;r<s.childNodes.length;r++){if(s.childNodes[r].nodeType==3){t+=s.childNodes[r].nodeValue.length}else{if(s.childNodes[r].nodeName=="BR"){t+=1}else{if(s.childNodes[r].nodeType==1){p.push({event:"start",offset:t,node:s.childNodes[r]});t=arguments.callee(s.childNodes[r],t);p.push({event:"stop",offset:t,node:s.childNodes[r]})}}}}return t})(q,0);return p}function k(y,w,x){var q=0;var z="";var s=[];function u(){if(y.length&&w.length){if(y[0].offset!=w[0].offset){return(y[0].offset<w[0].offset)?y:w}else{return w[0].event=="start"?y:w}}else{return y.length?y:w}}function t(D){var A="<"+D.nodeName.toLowerCase();for(var B=0;B<D.attributes.length;B++){var C=D.attributes[B];A+=" "+C.nodeName.toLowerCase();if(C.value!==undefined&&C.value!==false&&C.value!==null){A+='="'+m(C.value)+'"'}}return A+">"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("</"+p.nodeName.toLowerCase()+">")}while(p!=v.node);s.splice(r,1);while(r<s.length){z+=t(s[r]);r++}}}}return z+m(x.substr(q))}function j(){function q(x,y,v){if(x.compiled){return}var u;var s=[];if(x.k){x.lR=f(y,x.l||hljs.IR,true);for(var w in x.k){if(!x.k.hasOwnProperty(w)){continue}if(x.k[w] instanceof Object){u=x.k[w]}else{u=x.k;w="keyword"}for(var r in u){if(!u.hasOwnProperty(r)){continue}x.k[r]=[w,u[r]];s.push(r)}}}if(!v){if(x.bWK){x.b="\\b("+s.join("|")+")\\s"}x.bR=f(y,x.b?x.b:"\\B|\\b");if(!x.e&&!x.eW){x.e="\\B|\\b"}if(x.e){x.eR=f(y,x.e)}}if(x.i){x.iR=f(y,x.i)}if(x.r===undefined){x.r=1}if(!x.c){x.c=[]}x.compiled=true;for(var t=0;t<x.c.length;t++){if(x.c[t]=="self"){x.c[t]=x}q(x.c[t],y,false)}if(x.starts){q(x.starts,y,false)}}for(var p in e){if(!e.hasOwnProperty(p)){continue}q(e[p].dM,e[p],true)}}function d(B,C){if(!j.called){j();j.called=true}function q(r,M){for(var L=0;L<M.c.length;L++){if((M.c[L].bR.exec(r)||[null])[0]==r){return M.c[L]}}}function v(L,r){if(D[L].e&&D[L].eR.test(r)){return 1}if(D[L].eW){var M=v(L-1,r);return M?M+1:0}return 0}function w(r,L){return L.i&&L.iR.test(r)}function K(N,O){var M=[];for(var L=0;L<N.c.length;L++){M.push(N.c[L].b)}var r=D.length-1;do{if(D[r].e){M.push(D[r].e)}r--}while(D[r+1].eW);if(N.i){M.push(N.i)}return f(O,M.join("|"),true)}function p(M,L){var N=D[D.length-1];if(!N.t){N.t=K(N,E)}N.t.lastIndex=L;var r=N.t.exec(M);return r?[M.substr(L,r.index-L),r[0],false]:[M.substr(L),"",true]}function z(N,r){var L=E.cI?r[0].toLowerCase():r[0];var M=N.k[L];if(M&&M instanceof Array){return M}return false}function F(L,P){L=m(L);if(!P.k){return L}var r="";var O=0;P.lR.lastIndex=0;var M=P.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=z(P,M);if(N){x+=N[1];r+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{r+=M[0]}O=P.lR.lastIndex;M=P.lR.exec(L)}return r+L.substr(O,L.length-O)}function J(L,M){if(M.sL&&e[M.sL]){var r=d(M.sL,L);x+=r.keyword_count;return r.value}else{return F(L,M)}}function I(M,r){var L=M.cN?'<span class="'+M.cN+'">':"";if(M.rB){y+=L;M.buffer=""}else{if(M.eB){y+=m(r)+L;M.buffer=""}else{y+=L;M.buffer=r}}D.push(M);A+=M.r}function G(N,M,Q){var R=D[D.length-1];if(Q){y+=J(R.buffer+N,R);return false}var P=q(M,R);if(P){y+=J(R.buffer+N,R);I(P,M);return P.rB}var L=v(D.length-1,M);if(L){var O=R.cN?"</span>":"";if(R.rE){y+=J(R.buffer+N,R)+O}else{if(R.eE){y+=J(R.buffer+N,R)+O+m(M)}else{y+=J(R.buffer+N+M,R)+O}}while(L>1){O=D[D.length-2].cN?"</span>":"";y+=O;L--;D.length--}var r=D[D.length-1];D.length--;D[D.length-1].buffer="";if(r.starts){I(r.starts,"")}return R.rE}if(w(M,R)){throw"Illegal"}}var E=e[B];var D=[E.dM];var A=0;var x=0;var y="";try{var s,u=0;E.dM.buffer="";do{s=p(C,u);var t=G(s[0],s[1],s[2]);u+=s[0].length;if(!t){u+=s[1].length}}while(!s[2]);if(D.length>1){throw"Illegal"}return{r:A,keyword_count:x,value:y}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:m(C)}}else{throw H}}}function g(t){var p={keyword_count:0,r:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.r>r.keyword_count+r.r){r=s}if(s.keyword_count+s.r>p.keyword_count+p.r){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"<br>")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v){y=d(v,x)}else{return}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="<pre><code>"+y.value+"</code></pre>";t=p.firstChild.firstChild;p.firstChild.cN=s.cN;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.r};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.r}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p<r.length;p++){var q=b(r[p]);if(q){n(q,hljs.tabReplace)}}}function l(){if(window.addEventListener){window.addEventListener("DOMContentLoaded",o,false);window.addEventListener("load",o,false)}else{if(window.attachEvent){window.attachEvent("onload",o)}else{window.onload=o}}}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=n;this.initHighlighting=o;this.initHighlightingOnLoad=l;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.ER="(?![\\s\\S])";this.BE={b:"\\\\.",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.css=function(){var a={cN:"function",b:hljs.IR+"\\(",e:"\\)",c:[{eW:true,eE:true,c:[hljs.NM,hljs.ASM,hljs.QSM]}]};return{cI:true,dM:{i:"[=/|']",c:[hljs.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:{"font-face":1,page:1}},{cN:"at_rule",b:"@",e:"[{;]",eE:true,k:{"import":1,page:1,media:1,charset:1},c:[a,hljs.ASM,hljs.QSM,hljs.NM]},{cN:"tag",b:hljs.IR,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[hljs.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[a,hljs.NM,hljs.QSM,hljs.ASM,hljs.CBLCLM,{cN:"hexcolor",b:"\\#[0-9A-F]+"},{cN:"important",b:"!important"}]}}]}]}]}}}();hljs.LANGUAGES.javascript={dM:{k:{keyword:{"in":1,"if":1,"for":1,"while":1,"finally":1,"var":1,"new":1,"function":1,"do":1,"return":1,"void":1,"else":1,"break":1,"catch":1,"instanceof":1,"with":1,"throw":1,"case":1,"default":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1},literal:{"true":1,"false":1,"null":1}},c:[hljs.ASM,hljs.QSM,hljs.CLCM,hljs.CBLCLM,hljs.CNM,{b:"("+hljs.RSR+"|\\b(case|return|throw)\\b)\\s*",k:{"return":1,"throw":1,"case":1},c:[hljs.CLCM,hljs.CBLCLM,{cN:"regexp",b:"/",e:"/[gim]*",c:[{b:"\\\\/"}]}],r:0},{cN:"function",bWK:true,e:"{",k:{"function":1},c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[hljs.ASM,hljs.QSM,hljs.CLCM,hljs.CBLCLM]}]}]}};hljs.LANGUAGES.r={dM:{c:[hljs.HCM,{cN:"number",b:"\\b0[xX][0-9a-fA-F]+[Li]?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+(?:[eE][+\\-]?\\d*)?L\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+\\.(?!\\d)(?:i\\b)?",e:hljs.IMMEDIATE_RE,r:1},{cN:"number",b:"\\b\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"keyword",b:"(?:tryCatch|library|setGeneric|setGroupGeneric)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\.",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\d+(?![\\w.])",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\b(?:function)",e:hljs.IMMEDIATE_RE,r:2},{cN:"keyword",b:"(?:if|in|break|next|repeat|else|for|return|switch|while|try|stop|warning|require|attach|detach|source|setMethod|setClass)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"literal",b:"(?:NA|NA_integer_|NA_real_|NA_character_|NA_complex_)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"literal",b:"(?:NULL|TRUE|FALSE|T|F|Inf|NaN)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"identifier",b:"[a-zA-Z.][a-zA-Z0-9._]*\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"<\\-(?!\\s*\\d)",e:hljs.IMMEDIATE_RE,r:2},{cN:"operator",b:"\\->|<\\-",e:hljs.IMMEDIATE_RE,r:1},{cN:"operator",b:"%%|~",e:hljs.IMMEDIATE_RE},{cN:"operator",b:">=|<=|==|!=|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||\\$|:",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"%",e:"%",i:"\\n",r:1},{cN:"identifier",b:"`",e:"`",r:0},{cN:"string",b:'"',e:'"',c:[hljs.BE],r:0},{cN:"string",b:"'",e:"'",c:[hljs.BE],r:0},{cN:"paren",b:"[[({\\])}]",e:hljs.IMMEDIATE_RE,r:0}]}};hljs.LANGUAGES.xml=function(){var b="[A-Za-z0-9\\._:-]+";var a={eW:true,c:[{cN:"attribute",b:b,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,dM:{c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:{style:1}},c:[a],starts:{cN:"css",e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:{script:1}},c:[a],starts:{cN:"javascript",e:"<\/script>",rE:true,sL:"javascript"}},{cN:"vbscript",b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ />]+"},a]}]}}}();
diff --git a/docs/coverage/lib/highlight.js-6.2/rstudio.css b/docs/coverage/lib/highlight.js-6.2/rstudio.css
new file mode 100644
index 00000000..58de9a9a
--- /dev/null
+++ b/docs/coverage/lib/highlight.js-6.2/rstudio.css
@@ -0,0 +1,81 @@
+code {
+ line-height: 150%;
+}
+
+pre .operator,
+pre .paren {
+ color: rgb(104, 118, 135)
+}
+
+pre .literal {
+ color: rgb(88, 72, 246)
+}
+
+pre .number {
+ color: rgb(0, 0, 205);
+}
+
+pre .comment {
+ color: rgb(76, 136, 107);
+ font-style: italic;
+}
+
+pre .keyword,
+pre .id {
+ color: rgb(0, 0, 255);
+}
+
+pre .identifier {
+ color: rgb(0, 0, 0);
+}
+
+pre .string,
+pre .attribute {
+ color: rgb(3, 106, 7);
+}
+
+pre .doctype {
+ color: rgb(104, 104, 92);
+}
+
+pre .tag,
+pre .title {
+ color: rgb(4, 29, 140);
+}
+
+pre .value {
+ color: rgb(13, 105, 18);
+}
+
+.language-xml .attribute {
+ color: rgb(0, 0, 0);
+}
+
+.language-css .attribute {
+ color: rgb(110, 124, 219);
+}
+
+.language-css .value {
+ color: rgb(23, 149, 30);
+}
+
+.language-css .number,
+.language-css .hexcolor {
+ color: rgb(7, 27, 201);
+}
+
+.language-css .function {
+ color: rgb(61, 77, 113);
+}
+
+.language-css .tag {
+ color: rgb(195, 13, 25);
+}
+
+.language-css .class {
+ color: rgb(53, 132, 148);
+}
+
+.language-css .pseudo {
+ color: rgb(13, 105, 18);
+}
diff --git a/docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css b/docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css
new file mode 100644
index 00000000..841ea9d5
--- /dev/null
+++ b/docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css
@@ -0,0 +1,21 @@
+@layer htmltools {
+ .html-fill-container {
+ display: flex;
+ flex-direction: column;
+ /* Prevent the container from expanding vertically or horizontally beyond its
+ parent's constraints. */
+ min-height: 0;
+ min-width: 0;
+ }
+ .html-fill-container > .html-fill-item {
+ /* Fill items can grow and shrink freely within
+ available vertical space in fillable container */
+ flex: 1 1 auto;
+ min-height: 0;
+ min-width: 0;
+ }
+ .html-fill-container > :not(.html-fill-item) {
+ /* Prevent shrinking or growing of non-fill items */
+ flex: 0 0 auto;
+ }
+}
diff --git a/docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js b/docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js
new file mode 100644
index 00000000..1067d029
--- /dev/null
+++ b/docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js
@@ -0,0 +1,901 @@
+(function() {
+ // If window.HTMLWidgets is already defined, then use it; otherwise create a
+ // new object. This allows preceding code to set options that affect the
+ // initialization process (though none currently exist).
+ window.HTMLWidgets = window.HTMLWidgets || {};
+
+ // See if we're running in a viewer pane. If not, we're in a web browser.
+ var viewerMode = window.HTMLWidgets.viewerMode =
+ /\bviewer_pane=1\b/.test(window.location);
+
+ // See if we're running in Shiny mode. If not, it's a static document.
+ // Note that static widgets can appear in both Shiny and static modes, but
+ // obviously, Shiny widgets can only appear in Shiny apps/documents.
+ var shinyMode = window.HTMLWidgets.shinyMode =
+ typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings;
+
+ // We can't count on jQuery being available, so we implement our own
+ // version if necessary.
+ function querySelectorAll(scope, selector) {
+ if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) {
+ return scope.find(selector);
+ }
+ if (scope.querySelectorAll) {
+ return scope.querySelectorAll(selector);
+ }
+ }
+
+ function asArray(value) {
+ if (value === null)
+ return [];
+ if ($.isArray(value))
+ return value;
+ return [value];
+ }
+
+ // Implement jQuery's extend
+ function extend(target /*, ... */) {
+ if (arguments.length == 1) {
+ return target;
+ }
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ target[prop] = source[prop];
+ }
+ }
+ }
+ return target;
+ }
+
+ // IE8 doesn't support Array.forEach.
+ function forEach(values, callback, thisArg) {
+ if (values.forEach) {
+ values.forEach(callback, thisArg);
+ } else {
+ for (var i = 0; i < values.length; i++) {
+ callback.call(thisArg, values[i], i, values);
+ }
+ }
+ }
+
+ // Replaces the specified method with the return value of funcSource.
+ //
+ // Note that funcSource should not BE the new method, it should be a function
+ // that RETURNS the new method. funcSource receives a single argument that is
+ // the overridden method, it can be called from the new method. The overridden
+ // method can be called like a regular function, it has the target permanently
+ // bound to it so "this" will work correctly.
+ function overrideMethod(target, methodName, funcSource) {
+ var superFunc = target[methodName] || function() {};
+ var superFuncBound = function() {
+ return superFunc.apply(target, arguments);
+ };
+ target[methodName] = funcSource(superFuncBound);
+ }
+
+ // Add a method to delegator that, when invoked, calls
+ // delegatee.methodName. If there is no such method on
+ // the delegatee, but there was one on delegator before
+ // delegateMethod was called, then the original version
+ // is invoked instead.
+ // For example:
+ //
+ // var a = {
+ // method1: function() { console.log('a1'); }
+ // method2: function() { console.log('a2'); }
+ // };
+ // var b = {
+ // method1: function() { console.log('b1'); }
+ // };
+ // delegateMethod(a, b, "method1");
+ // delegateMethod(a, b, "method2");
+ // a.method1();
+ // a.method2();
+ //
+ // The output would be "b1", "a2".
+ function delegateMethod(delegator, delegatee, methodName) {
+ var inherited = delegator[methodName];
+ delegator[methodName] = function() {
+ var target = delegatee;
+ var method = delegatee[methodName];
+
+ // The method doesn't exist on the delegatee. Instead,
+ // call the method on the delegator, if it exists.
+ if (!method) {
+ target = delegator;
+ method = inherited;
+ }
+
+ if (method) {
+ return method.apply(target, arguments);
+ }
+ };
+ }
+
+ // Implement a vague facsimilie of jQuery's data method
+ function elementData(el, name, value) {
+ if (arguments.length == 2) {
+ return el["htmlwidget_data_" + name];
+ } else if (arguments.length == 3) {
+ el["htmlwidget_data_" + name] = value;
+ return el;
+ } else {
+ throw new Error("Wrong number of arguments for elementData: " +
+ arguments.length);
+ }
+ }
+
+ // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
+ function escapeRegExp(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ }
+
+ function hasClass(el, className) {
+ var re = new RegExp("\\b" + escapeRegExp(className) + "\\b");
+ return re.test(el.className);
+ }
+
+ // elements - array (or array-like object) of HTML elements
+ // className - class name to test for
+ // include - if true, only return elements with given className;
+ // if false, only return elements *without* given className
+ function filterByClass(elements, className, include) {
+ var results = [];
+ for (var i = 0; i < elements.length; i++) {
+ if (hasClass(elements[i], className) == include)
+ results.push(elements[i]);
+ }
+ return results;
+ }
+
+ function on(obj, eventName, func) {
+ if (obj.addEventListener) {
+ obj.addEventListener(eventName, func, false);
+ } else if (obj.attachEvent) {
+ obj.attachEvent(eventName, func);
+ }
+ }
+
+ function off(obj, eventName, func) {
+ if (obj.removeEventListener)
+ obj.removeEventListener(eventName, func, false);
+ else if (obj.detachEvent) {
+ obj.detachEvent(eventName, func);
+ }
+ }
+
+ // Translate array of values to top/right/bottom/left, as usual with
+ // the "padding" CSS property
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/padding
+ function unpackPadding(value) {
+ if (typeof(value) === "number")
+ value = [value];
+ if (value.length === 1) {
+ return {top: value[0], right: value[0], bottom: value[0], left: value[0]};
+ }
+ if (value.length === 2) {
+ return {top: value[0], right: value[1], bottom: value[0], left: value[1]};
+ }
+ if (value.length === 3) {
+ return {top: value[0], right: value[1], bottom: value[2], left: value[1]};
+ }
+ if (value.length === 4) {
+ return {top: value[0], right: value[1], bottom: value[2], left: value[3]};
+ }
+ }
+
+ // Convert an unpacked padding object to a CSS value
+ function paddingToCss(paddingObj) {
+ return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px";
+ }
+
+ // Makes a number suitable for CSS
+ function px(x) {
+ if (typeof(x) === "number")
+ return x + "px";
+ else
+ return x;
+ }
+
+ // Retrieves runtime widget sizing information for an element.
+ // The return value is either null, or an object with fill, padding,
+ // defaultWidth, defaultHeight fields.
+ function sizingPolicy(el) {
+ var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']");
+ if (!sizingEl)
+ return null;
+ var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}");
+ if (viewerMode) {
+ return sp.viewer;
+ } else {
+ return sp.browser;
+ }
+ }
+
+ // @param tasks Array of strings (or falsy value, in which case no-op).
+ // Each element must be a valid JavaScript expression that yields a
+ // function. Or, can be an array of objects with "code" and "data"
+ // properties; in this case, the "code" property should be a string
+ // of JS that's an expr that yields a function, and "data" should be
+ // an object that will be added as an additional argument when that
+ // function is called.
+ // @param target The object that will be "this" for each function
+ // execution.
+ // @param args Array of arguments to be passed to the functions. (The
+ // same arguments will be passed to all functions.)
+ function evalAndRun(tasks, target, args) {
+ if (tasks) {
+ forEach(tasks, function(task) {
+ var theseArgs = args;
+ if (typeof(task) === "object") {
+ theseArgs = theseArgs.concat([task.data]);
+ task = task.code;
+ }
+ var taskFunc = tryEval(task);
+ if (typeof(taskFunc) !== "function") {
+ throw new Error("Task must be a function! Source:\n" + task);
+ }
+ taskFunc.apply(target, theseArgs);
+ });
+ }
+ }
+
+ // Attempt eval() both with and without enclosing in parentheses.
+ // Note that enclosing coerces a function declaration into
+ // an expression that eval() can parse
+ // (otherwise, a SyntaxError is thrown)
+ function tryEval(code) {
+ var result = null;
+ try {
+ result = eval("(" + code + ")");
+ } catch(error) {
+ if (!(error instanceof SyntaxError)) {
+ throw error;
+ }
+ try {
+ result = eval(code);
+ } catch(e) {
+ if (e instanceof SyntaxError) {
+ throw error;
+ } else {
+ throw e;
+ }
+ }
+ }
+ return result;
+ }
+
+ function initSizing(el) {
+ var sizing = sizingPolicy(el);
+ if (!sizing)
+ return;
+
+ var cel = document.getElementById("htmlwidget_container");
+ if (!cel)
+ return;
+
+ if (typeof(sizing.padding) !== "undefined") {
+ document.body.style.margin = "0";
+ document.body.style.padding = paddingToCss(unpackPadding(sizing.padding));
+ }
+
+ if (sizing.fill) {
+ document.body.style.overflow = "hidden";
+ document.body.style.width = "100%";
+ document.body.style.height = "100%";
+ document.documentElement.style.width = "100%";
+ document.documentElement.style.height = "100%";
+ cel.style.position = "absolute";
+ var pad = unpackPadding(sizing.padding);
+ cel.style.top = pad.top + "px";
+ cel.style.right = pad.right + "px";
+ cel.style.bottom = pad.bottom + "px";
+ cel.style.left = pad.left + "px";
+ el.style.width = "100%";
+ el.style.height = "100%";
+
+ return {
+ getWidth: function() { return cel.getBoundingClientRect().width; },
+ getHeight: function() { return cel.getBoundingClientRect().height; }
+ };
+
+ } else {
+ el.style.width = px(sizing.width);
+ el.style.height = px(sizing.height);
+
+ return {
+ getWidth: function() { return cel.getBoundingClientRect().width; },
+ getHeight: function() { return cel.getBoundingClientRect().height; }
+ };
+ }
+ }
+
+ // Default implementations for methods
+ var defaults = {
+ find: function(scope) {
+ return querySelectorAll(scope, "." + this.name);
+ },
+ renderError: function(el, err) {
+ var $el = $(el);
+
+ this.clearError(el);
+
+ // Add all these error classes, as Shiny does
+ var errClass = "shiny-output-error";
+ if (err.type !== null) {
+ // use the classes of the error condition as CSS class names
+ errClass = errClass + " " + $.map(asArray(err.type), function(type) {
+ return errClass + "-" + type;
+ }).join(" ");
+ }
+ errClass = errClass + " htmlwidgets-error";
+
+ // Is el inline or block? If inline or inline-block, just display:none it
+ // and add an inline error.
+ var display = $el.css("display");
+ $el.data("restore-display-mode", display);
+
+ if (display === "inline" || display === "inline-block") {
+ $el.hide();
+ if (err.message !== "") {
+ var errorSpan = $("<span>").addClass(errClass);
+ errorSpan.text(err.message);
+ $el.after(errorSpan);
+ }
+ } else if (display === "block") {
+ // If block, add an error just after the el, set visibility:none on the
+ // el, and position the error to be on top of the el.
+ // Mark it with a unique ID and CSS class so we can remove it later.
+ $el.css("visibility", "hidden");
+ if (err.message !== "") {
+ var errorDiv = $("<div>").addClass(errClass).css("position", "absolute")
+ .css("top", el.offsetTop)
+ .css("left", el.offsetLeft)
+ // setting width can push out the page size, forcing otherwise
+ // unnecessary scrollbars to appear and making it impossible for
+ // the element to shrink; so use max-width instead
+ .css("maxWidth", el.offsetWidth)
+ .css("height", el.offsetHeight);
+ errorDiv.text(err.message);
+ $el.after(errorDiv);
+
+ // Really dumb way to keep the size/position of the error in sync with
+ // the parent element as the window is resized or whatever.
+ var intId = setInterval(function() {
+ if (!errorDiv[0].parentElement) {
+ clearInterval(intId);
+ return;
+ }
+ errorDiv
+ .css("top", el.offsetTop)
+ .css("left", el.offsetLeft)
+ .css("maxWidth", el.offsetWidth)
+ .css("height", el.offsetHeight);
+ }, 500);
+ }
+ }
+ },
+ clearError: function(el) {
+ var $el = $(el);
+ var display = $el.data("restore-display-mode");
+ $el.data("restore-display-mode", null);
+
+ if (display === "inline" || display === "inline-block") {
+ if (display)
+ $el.css("display", display);
+ $(el.nextSibling).filter(".htmlwidgets-error").remove();
+ } else if (display === "block"){
+ $el.css("visibility", "inherit");
+ $(el.nextSibling).filter(".htmlwidgets-error").remove();
+ }
+ },
+ sizing: {}
+ };
+
+ // Called by widget bindings to register a new type of widget. The definition
+ // object can contain the following properties:
+ // - name (required) - A string indicating the binding name, which will be
+ // used by default as the CSS classname to look for.
+ // - initialize (optional) - A function(el) that will be called once per
+ // widget element; if a value is returned, it will be passed as the third
+ // value to renderValue.
+ // - renderValue (required) - A function(el, data, initValue) that will be
+ // called with data. Static contexts will cause this to be called once per
+ // element; Shiny apps will cause this to be called multiple times per
+ // element, as the data changes.
+ window.HTMLWidgets.widget = function(definition) {
+ if (!definition.name) {
+ throw new Error("Widget must have a name");
+ }
+ if (!definition.type) {
+ throw new Error("Widget must have a type");
+ }
+ // Currently we only support output widgets
+ if (definition.type !== "output") {
+ throw new Error("Unrecognized widget type '" + definition.type + "'");
+ }
+ // TODO: Verify that .name is a valid CSS classname
+
+ // Support new-style instance-bound definitions. Old-style class-bound
+ // definitions have one widget "object" per widget per type/class of
+ // widget; the renderValue and resize methods on such widget objects
+ // take el and instance arguments, because the widget object can't
+ // store them. New-style instance-bound definitions have one widget
+ // object per widget instance; the definition that's passed in doesn't
+ // provide renderValue or resize methods at all, just the single method
+ // factory(el, width, height)
+ // which returns an object that has renderValue(x) and resize(w, h).
+ // This enables a far more natural programming style for the widget
+ // author, who can store per-instance state using either OO-style
+ // instance fields or functional-style closure variables (I guess this
+ // is in contrast to what can only be called C-style pseudo-OO which is
+ // what we required before).
+ if (definition.factory) {
+ definition = createLegacyDefinitionAdapter(definition);
+ }
+
+ if (!definition.renderValue) {
+ throw new Error("Widget must have a renderValue function");
+ }
+
+ // For static rendering (non-Shiny), use a simple widget registration
+ // scheme. We also use this scheme for Shiny apps/documents that also
+ // contain static widgets.
+ window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || [];
+ // Merge defaults into the definition; don't mutate the original definition.
+ var staticBinding = extend({}, defaults, definition);
+ overrideMethod(staticBinding, "find", function(superfunc) {
+ return function(scope) {
+ var results = superfunc(scope);
+ // Filter out Shiny outputs, we only want the static kind
+ return filterByClass(results, "html-widget-output", false);
+ };
+ });
+ window.HTMLWidgets.widgets.push(staticBinding);
+
+ if (shinyMode) {
+ // Shiny is running. Register the definition with an output binding.
+ // The definition itself will not be the output binding, instead
+ // we will make an output binding object that delegates to the
+ // definition. This is because we foolishly used the same method
+ // name (renderValue) for htmlwidgets definition and Shiny bindings
+ // but they actually have quite different semantics (the Shiny
+ // bindings receive data that includes lots of metadata that it
+ // strips off before calling htmlwidgets renderValue). We can't
+ // just ignore the difference because in some widgets it's helpful
+ // to call this.renderValue() from inside of resize(), and if
+ // we're not delegating, then that call will go to the Shiny
+ // version instead of the htmlwidgets version.
+
+ // Merge defaults with definition, without mutating either.
+ var bindingDef = extend({}, defaults, definition);
+
+ // This object will be our actual Shiny binding.
+ var shinyBinding = new Shiny.OutputBinding();
+
+ // With a few exceptions, we'll want to simply use the bindingDef's
+ // version of methods if they are available, otherwise fall back to
+ // Shiny's defaults. NOTE: If Shiny's output bindings gain additional
+ // methods in the future, and we want them to be overrideable by
+ // HTMLWidget binding definitions, then we'll need to add them to this
+ // list.
+ delegateMethod(shinyBinding, bindingDef, "getId");
+ delegateMethod(shinyBinding, bindingDef, "onValueChange");
+ delegateMethod(shinyBinding, bindingDef, "onValueError");
+ delegateMethod(shinyBinding, bindingDef, "renderError");
+ delegateMethod(shinyBinding, bindingDef, "clearError");
+ delegateMethod(shinyBinding, bindingDef, "showProgress");
+
+ // The find, renderValue, and resize are handled differently, because we
+ // want to actually decorate the behavior of the bindingDef methods.
+
+ shinyBinding.find = function(scope) {
+ var results = bindingDef.find(scope);
+
+ // Only return elements that are Shiny outputs, not static ones
+ var dynamicResults = results.filter(".html-widget-output");
+
+ // It's possible that whatever caused Shiny to think there might be
+ // new dynamic outputs, also caused there to be new static outputs.
+ // Since there might be lots of different htmlwidgets bindings, we
+ // schedule execution for later--no need to staticRender multiple
+ // times.
+ if (results.length !== dynamicResults.length)
+ scheduleStaticRender();
+
+ return dynamicResults;
+ };
+
+ // Wrap renderValue to handle initialization, which unfortunately isn't
+ // supported natively by Shiny at the time of this writing.
+
+ shinyBinding.renderValue = function(el, data) {
+ Shiny.renderDependencies(data.deps);
+ // Resolve strings marked as javascript literals to objects
+ if (!(data.evals instanceof Array)) data.evals = [data.evals];
+ for (var i = 0; data.evals && i < data.evals.length; i++) {
+ window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]);
+ }
+ if (!bindingDef.renderOnNullValue) {
+ if (data.x === null) {
+ el.style.visibility = "hidden";
+ return;
+ } else {
+ el.style.visibility = "inherit";
+ }
+ }
+ if (!elementData(el, "initialized")) {
+ initSizing(el);
+
+ elementData(el, "initialized", true);
+ if (bindingDef.initialize) {
+ var rect = el.getBoundingClientRect();
+ var result = bindingDef.initialize(el, rect.width, rect.height);
+ elementData(el, "init_result", result);
+ }
+ }
+ bindingDef.renderValue(el, data.x, elementData(el, "init_result"));
+ evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]);
+ };
+
+ // Only override resize if bindingDef implements it
+ if (bindingDef.resize) {
+ shinyBinding.resize = function(el, width, height) {
+ // Shiny can call resize before initialize/renderValue have been
+ // called, which doesn't make sense for widgets.
+ if (elementData(el, "initialized")) {
+ bindingDef.resize(el, width, height, elementData(el, "init_result"));
+ }
+ };
+ }
+
+ Shiny.outputBindings.register(shinyBinding, bindingDef.name);
+ }
+ };
+
+ var scheduleStaticRenderTimerId = null;
+ function scheduleStaticRender() {
+ if (!scheduleStaticRenderTimerId) {
+ scheduleStaticRenderTimerId = setTimeout(function() {
+ scheduleStaticRenderTimerId = null;
+ window.HTMLWidgets.staticRender();
+ }, 1);
+ }
+ }
+
+ // Render static widgets after the document finishes loading
+ // Statically render all elements that are of this widget's class
+ window.HTMLWidgets.staticRender = function() {
+ var bindings = window.HTMLWidgets.widgets || [];
+ forEach(bindings, function(binding) {
+ var matches = binding.find(document.documentElement);
+ forEach(matches, function(el) {
+ var sizeObj = initSizing(el, binding);
+
+ var getSize = function(el) {
+ if (sizeObj) {
+ return {w: sizeObj.getWidth(), h: sizeObj.getHeight()}
+ } else {
+ var rect = el.getBoundingClientRect();
+ return {w: rect.width, h: rect.height}
+ }
+ };
+
+ if (hasClass(el, "html-widget-static-bound"))
+ return;
+ el.className = el.className + " html-widget-static-bound";
+
+ var initResult;
+ if (binding.initialize) {
+ var size = getSize(el);
+ initResult = binding.initialize(el, size.w, size.h);
+ elementData(el, "init_result", initResult);
+ }
+
+ if (binding.resize) {
+ var lastSize = getSize(el);
+ var resizeHandler = function(e) {
+ var size = getSize(el);
+ if (size.w === 0 && size.h === 0)
+ return;
+ if (size.w === lastSize.w && size.h === lastSize.h)
+ return;
+ lastSize = size;
+ binding.resize(el, size.w, size.h, initResult);
+ };
+
+ on(window, "resize", resizeHandler);
+
+ // This is needed for cases where we're running in a Shiny
+ // app, but the widget itself is not a Shiny output, but
+ // rather a simple static widget. One example of this is
+ // an rmarkdown document that has runtime:shiny and widget
+ // that isn't in a render function. Shiny only knows to
+ // call resize handlers for Shiny outputs, not for static
+ // widgets, so we do it ourselves.
+ if (window.jQuery) {
+ window.jQuery(document).on(
+ "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets",
+ resizeHandler
+ );
+ window.jQuery(document).on(
+ "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets",
+ resizeHandler
+ );
+ }
+
+ // This is needed for the specific case of ioslides, which
+ // flips slides between display:none and display:block.
+ // Ideally we would not have to have ioslide-specific code
+ // here, but rather have ioslides raise a generic event,
+ // but the rmarkdown package just went to CRAN so the
+ // window to getting that fixed may be long.
+ if (window.addEventListener) {
+ // It's OK to limit this to window.addEventListener
+ // browsers because ioslides itself only supports
+ // such browsers.
+ on(document, "slideenter", resizeHandler);
+ on(document, "slideleave", resizeHandler);
+ }
+ }
+
+ var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']");
+ if (scriptData) {
+ var data = JSON.parse(scriptData.textContent || scriptData.text);
+ // Resolve strings marked as javascript literals to objects
+ if (!(data.evals instanceof Array)) data.evals = [data.evals];
+ for (var k = 0; data.evals && k < data.evals.length; k++) {
+ window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]);
+ }
+ binding.renderValue(el, data.x, initResult);
+ evalAndRun(data.jsHooks.render, initResult, [el, data.x]);
+ }
+ });
+ });
+
+ invokePostRenderHandlers();
+ }
+
+
+ function has_jQuery3() {
+ if (!window.jQuery) {
+ return false;
+ }
+ var $version = window.jQuery.fn.jquery;
+ var $major_version = parseInt($version.split(".")[0]);
+ return $major_version >= 3;
+ }
+
+ /*
+ / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's
+ / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now
+ / really means $(setTimeout(fn)).
+ / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous
+ /
+ / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny
+ / one tick later than it did before, which means staticRender() is
+ / called renderValue() earlier than (advanced) widget authors might be expecting.
+ / https://github.com/rstudio/shiny/issues/2630
+ /
+ / For a concrete example, leaflet has some methods (e.g., updateBounds)
+ / which reference Shiny methods registered in initShiny (e.g., setInputValue).
+ / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to
+ / delay execution of those methods (until Shiny methods are ready)
+ / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268
+ /
+ / Ideally widget authors wouldn't need to use this setTimeout() hack that
+ / leaflet uses to call Shiny methods on a staticRender(). In the long run,
+ / the logic initShiny should be broken up so that method registration happens
+ / right away, but binding happens later.
+ */
+ function maybeStaticRenderLater() {
+ if (shinyMode && has_jQuery3()) {
+ window.jQuery(window.HTMLWidgets.staticRender);
+ } else {
+ window.HTMLWidgets.staticRender();
+ }
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", function() {
+ document.removeEventListener("DOMContentLoaded", arguments.callee, false);
+ maybeStaticRenderLater();
+ }, false);
+ } else if (document.attachEvent) {
+ document.attachEvent("onreadystatechange", function() {
+ if (document.readyState === "complete") {
+ document.detachEvent("onreadystatechange", arguments.callee);
+ maybeStaticRenderLater();
+ }
+ });
+ }
+
+
+ window.HTMLWidgets.getAttachmentUrl = function(depname, key) {
+ // If no key, default to the first item
+ if (typeof(key) === "undefined")
+ key = 1;
+
+ var link = document.getElementById(depname + "-" + key + "-attachment");
+ if (!link) {
+ throw new Error("Attachment " + depname + "/" + key + " not found in document");
+ }
+ return link.getAttribute("href");
+ };
+
+ window.HTMLWidgets.dataframeToD3 = function(df) {
+ var names = [];
+ var length;
+ for (var name in df) {
+ if (df.hasOwnProperty(name))
+ names.push(name);
+ if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") {
+ throw new Error("All fields must be arrays");
+ } else if (typeof(length) !== "undefined" && length !== df[name].length) {
+ throw new Error("All fields must be arrays of the same length");
+ }
+ length = df[name].length;
+ }
+ var results = [];
+ var item;
+ for (var row = 0; row < length; row++) {
+ item = {};
+ for (var col = 0; col < names.length; col++) {
+ item[names[col]] = df[names[col]][row];
+ }
+ results.push(item);
+ }
+ return results;
+ };
+
+ window.HTMLWidgets.transposeArray2D = function(array) {
+ if (array.length === 0) return array;
+ var newArray = array[0].map(function(col, i) {
+ return array.map(function(row) {
+ return row[i]
+ })
+ });
+ return newArray;
+ };
+ // Split value at splitChar, but allow splitChar to be escaped
+ // using escapeChar. Any other characters escaped by escapeChar
+ // will be included as usual (including escapeChar itself).
+ function splitWithEscape(value, splitChar, escapeChar) {
+ var results = [];
+ var escapeMode = false;
+ var currentResult = "";
+ for (var pos = 0; pos < value.length; pos++) {
+ if (!escapeMode) {
+ if (value[pos] === splitChar) {
+ results.push(currentResult);
+ currentResult = "";
+ } else if (value[pos] === escapeChar) {
+ escapeMode = true;
+ } else {
+ currentResult += value[pos];
+ }
+ } else {
+ currentResult += value[pos];
+ escapeMode = false;
+ }
+ }
+ if (currentResult !== "") {
+ results.push(currentResult);
+ }
+ return results;
+ }
+ // Function authored by Yihui/JJ Allaire
+ window.HTMLWidgets.evaluateStringMember = function(o, member) {
+ var parts = splitWithEscape(member, '.', '\\');
+ for (var i = 0, l = parts.length; i < l; i++) {
+ var part = parts[i];
+ // part may be a character or 'numeric' member name
+ if (o !== null && typeof o === "object" && part in o) {
+ if (i == (l - 1)) { // if we are at the end of the line then evalulate
+ if (typeof o[part] === "string")
+ o[part] = tryEval(o[part]);
+ } else { // otherwise continue to next embedded object
+ o = o[part];
+ }
+ }
+ }
+ };
+
+ // Retrieve the HTMLWidget instance (i.e. the return value of an
+ // HTMLWidget binding's initialize() or factory() function)
+ // associated with an element, or null if none.
+ window.HTMLWidgets.getInstance = function(el) {
+ return elementData(el, "init_result");
+ };
+
+ // Finds the first element in the scope that matches the selector,
+ // and returns the HTMLWidget instance (i.e. the return value of
+ // an HTMLWidget binding's initialize() or factory() function)
+ // associated with that element, if any. If no element matches the
+ // selector, or the first matching element has no HTMLWidget
+ // instance associated with it, then null is returned.
+ //
+ // The scope argument is optional, and defaults to window.document.
+ window.HTMLWidgets.find = function(scope, selector) {
+ if (arguments.length == 1) {
+ selector = scope;
+ scope = document;
+ }
+
+ var el = scope.querySelector(selector);
+ if (el === null) {
+ return null;
+ } else {
+ return window.HTMLWidgets.getInstance(el);
+ }
+ };
+
+ // Finds all elements in the scope that match the selector, and
+ // returns the HTMLWidget instances (i.e. the return values of
+ // an HTMLWidget binding's initialize() or factory() function)
+ // associated with the elements, in an array. If elements that
+ // match the selector don't have an associated HTMLWidget
+ // instance, the returned array will contain nulls.
+ //
+ // The scope argument is optional, and defaults to window.document.
+ window.HTMLWidgets.findAll = function(scope, selector) {
+ if (arguments.length == 1) {
+ selector = scope;
+ scope = document;
+ }
+
+ var nodes = scope.querySelectorAll(selector);
+ var results = [];
+ for (var i = 0; i < nodes.length; i++) {
+ results.push(window.HTMLWidgets.getInstance(nodes[i]));
+ }
+ return results;
+ };
+
+ var postRenderHandlers = [];
+ function invokePostRenderHandlers() {
+ while (postRenderHandlers.length) {
+ var handler = postRenderHandlers.shift();
+ if (handler) {
+ handler();
+ }
+ }
+ }
+
+ // Register the given callback function to be invoked after the
+ // next time static widgets are rendered.
+ window.HTMLWidgets.addPostRenderHandler = function(callback) {
+ postRenderHandlers.push(callback);
+ };
+
+ // Takes a new-style instance-bound definition, and returns an
+ // old-style class-bound definition. This saves us from having
+ // to rewrite all the logic in this file to accomodate both
+ // types of definitions.
+ function createLegacyDefinitionAdapter(defn) {
+ var result = {
+ name: defn.name,
+ type: defn.type,
+ initialize: function(el, width, height) {
+ return defn.factory(el, width, height);
+ },
+ renderValue: function(el, x, instance) {
+ return instance.renderValue(x);
+ },
+ resize: function(el, width, height, instance) {
+ return instance.resize(width, height);
+ }
+ };
+
+ if (defn.find)
+ result.find = defn.find;
+ if (defn.renderError)
+ result.renderError = defn.renderError;
+ if (defn.clearError)
+ result.clearError = defn.clearError;
+
+ return result;
+ }
+})();
diff --git a/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js
new file mode 100644
index 00000000..fc6c299b
--- /dev/null
+++ b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js
@@ -0,0 +1,10881 @@
+/*!
+ * jQuery JavaScript Library v3.6.0
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2021-03-02T17:08Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+ return arr.flat.call( array );
+} : function( array ) {
+ return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML <object> elements
+ // (i.e., `typeof document.createElement( "object" ) === "function"`).
+ // We don't want to classify *any* DOM node as a function.
+ // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
+ // Plus for old WebKit, typeof returns "function" for HTML collections
+ // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
+ return typeof obj === "function" && typeof obj.nodeType !== "number" &&
+ typeof obj.item !== "function";
+ };
+
+
+var isWindow = function isWindow( obj ) {
+ return obj != null && obj === obj.window;
+ };
+
+
+var document = window.document;
+
+
+
+ var preservedScriptAttributes = {
+ type: true,
+ src: true,
+ nonce: true,
+ noModule: true
+ };
+
+ function DOMEval( code, node, doc ) {
+ doc = doc || document;
+
+ var i, val,
+ script = doc.createElement( "script" );
+
+ script.text = code;
+ if ( node ) {
+ for ( i in preservedScriptAttributes ) {
+
+ // Support: Firefox 64+, Edge 18+
+ // Some browsers don't support the "nonce" property on scripts.
+ // On the other hand, just using `getAttribute` is not enough as
+ // the `nonce` attribute is reset to an empty string whenever it
+ // becomes browsing-context connected.
+ // See https://github.com/whatwg/html/issues/2369
+ // See https://html.spec.whatwg.org/#nonce-attributes
+ // The `node.getAttribute` check was added for the sake of
+ // `jQuery.globalEval` so that it can fake a nonce-containing node
+ // via an object.
+ val = node[ i ] || node.getAttribute && node.getAttribute( i );
+ if ( val ) {
+ script.setAttribute( i, val );
+ }
+ }
+ }
+ doc.head.appendChild( script ).parentNode.removeChild( script );
+ }
+
+
+function toType( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+
+ // Support: Android <=2.3 only (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call( obj ) ] || "object" :
+ typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+ version = "3.6.0",
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init( selector, context );
+ };
+
+jQuery.fn = jQuery.prototype = {
+
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+
+ // Return all the elements in a clean array
+ if ( num == null ) {
+ return slice.call( this );
+ }
+
+ // Return just the one element from the set
+ return num < 0 ? this[ num + this.length ] : this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ each: function( callback ) {
+ return jQuery.each( this, callback );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map( this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ } ) );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ even: function() {
+ return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+ return ( i + 1 ) % 2;
+ } ) );
+ },
+
+ odd: function() {
+ return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+ return i % 2;
+ } ) );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor();
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[ 0 ] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !isFunction( target ) ) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+
+ // Only deal with non-null/undefined values
+ if ( ( options = arguments[ i ] ) != null ) {
+
+ // Extend the base object
+ for ( name in options ) {
+ copy = options[ name ];
+
+ // Prevent Object.prototype pollution
+ // Prevent never-ending loop
+ if ( name === "__proto__" || target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+ ( copyIsArray = Array.isArray( copy ) ) ) ) {
+ src = target[ name ];
+
+ // Ensure proper type for the source value
+ if ( copyIsArray && !Array.isArray( src ) ) {
+ clone = [];
+ } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+ clone = {};
+ } else {
+ clone = src;
+ }
+ copyIsArray = false;
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend( {
+
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ isPlainObject: function( obj ) {
+ var proto, Ctor;
+
+ // Detect obvious negatives
+ // Use toString instead of jQuery.type to catch host objects
+ if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+ return false;
+ }
+
+ proto = getProto( obj );
+
+ // Objects with no prototype (e.g., `Object.create( null )`) are plain
+ if ( !proto ) {
+ return true;
+ }
+
+ // Objects with prototype are plain iff they were constructed by a global Object function
+ Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+ return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ // Evaluates a script in a provided context; falls back to the global one
+ // if not specified.
+ globalEval: function( code, options, doc ) {
+ DOMEval( code, { nonce: options && options.nonce }, doc );
+ },
+
+ each: function( obj, callback ) {
+ var length, i = 0;
+
+ if ( isArrayLike( obj ) ) {
+ length = obj.length;
+ for ( ; i < length; i++ ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArrayLike( Object( arr ) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, invert ) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ callbackInverse = !callback( elems[ i ], i );
+ if ( callbackInverse !== callbackExpect ) {
+ matches.push( elems[ i ] );
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var length, value,
+ i = 0,
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArrayLike( elems ) ) {
+ length = elems.length;
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return flat( ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+ jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+ function( _i, name ) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+ } );
+
+function isArrayLike( obj ) {
+
+ // Support: real iOS 8.2 only (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = !!obj && "length" in obj && obj.length,
+ type = toType( obj );
+
+ if ( isFunction( obj ) || isWindow( obj ) ) {
+ return false;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.6
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2021-02-16
+ */
+( function( window ) {
+var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ nonnativeSelectorCache = createCache(),
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // Instance methods
+ hasOwn = ( {} ).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ pushNative = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+
+ // Use a stripped-down indexOf as it's faster than native
+ // https://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function( list, elem ) {
+ var i = 0,
+ len = list.length;
+ for ( ; i < len; i++ ) {
+ if ( list[ i ] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+ "ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+
+ // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+ identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+ "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+
+ // "Attribute values must be CSS identifiers [capture 5]
+ // or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+ whitespace + "*\\]",
+
+ pseudos = ":(" + identifier + ")(?:\\((" +
+
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+ whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+ "*" ),
+ rdescend = new RegExp( whitespace + "|>" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + identifier + ")" ),
+ "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+ "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+ whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+ whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace +
+ "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+ "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rhtml = /HTML$/i,
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+
+ // CSS escapes
+ // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+ funescape = function( escape, nonHex ) {
+ var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+ return nonHex ?
+
+ // Strip the backslash prefix from a non-hex escape sequence
+ nonHex :
+
+ // Replace a hexadecimal escape sequence with the encoded Unicode code point
+ // Support: IE <=11+
+ // For values outside the Basic Multilingual Plane (BMP), manually construct a
+ // surrogate pair
+ high < 0 ?
+ String.fromCharCode( high + 0x10000 ) :
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ },
+
+ // CSS string/identifier serialization
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
+ rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+ fcssescape = function( ch, asCodePoint ) {
+ if ( asCodePoint ) {
+
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+ if ( ch === "\0" ) {
+ return "\uFFFD";
+ }
+
+ // Control characters and (dependent upon position) numbers get escaped as code points
+ return ch.slice( 0, -1 ) + "\\" +
+ ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+ }
+
+ // Other potentially-special ASCII characters get backslash-escaped
+ return "\\" + ch;
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function() {
+ setDocument();
+ },
+
+ inDisabledFieldset = addCombinator(
+ function( elem ) {
+ return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+ },
+ { dir: "parentNode", next: "legend" }
+ );
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ ( arr = slice.call( preferredDoc.childNodes ) ),
+ preferredDoc.childNodes
+ );
+
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ // eslint-disable-next-line no-unused-expressions
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ pushNative.apply( target, slice.call( els ) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+
+ // Can't trust NodeList.length
+ while ( ( target[ j++ ] = els[ i++ ] ) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var m, i, elem, nid, match, groups, newSelector,
+ newContext = context && context.ownerDocument,
+
+ // nodeType defaults to 9, since context defaults to document
+ nodeType = context ? context.nodeType : 9;
+
+ results = results || [];
+
+ // Return early from calls with invalid selector or context
+ if ( typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+ return results;
+ }
+
+ // Try to shortcut find operations (as opposed to filters) in HTML documents
+ if ( !seed ) {
+ setDocument( context );
+ context = context || document;
+
+ if ( documentIsHTML ) {
+
+ // If the selector is sufficiently simple, try using a "get*By*" DOM method
+ // (excepting DocumentFragment context, where the methods don't exist)
+ if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
+
+ // ID selector
+ if ( ( m = match[ 1 ] ) ) {
+
+ // Document context
+ if ( nodeType === 9 ) {
+ if ( ( elem = context.getElementById( m ) ) ) {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+
+ // Element context
+ } else {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( newContext && ( elem = newContext.getElementById( m ) ) &&
+ contains( context, elem ) &&
+ elem.id === m ) {
+
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Type selector
+ } else if ( match[ 2 ] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Class selector
+ } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
+ context.getElementsByClassName ) {
+
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // Take advantage of querySelectorAll
+ if ( support.qsa &&
+ !nonnativeSelectorCache[ selector + " " ] &&
+ ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
+
+ // Support: IE 8 only
+ // Exclude object elements
+ ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
+
+ newSelector = selector;
+ newContext = context;
+
+ // qSA considers elements outside a scoping root when evaluating child or
+ // descendant combinators, which is not what we want.
+ // In such cases, we work around the behavior by prefixing every selector in the
+ // list with an ID selector referencing the scope context.
+ // The technique has to be used as well when a leading combinator is used
+ // as such selectors are not recognized by querySelectorAll.
+ // Thanks to Andrew Dupont for this technique.
+ if ( nodeType === 1 &&
+ ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
+
+ // Expand context for sibling selectors
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+ context;
+
+ // We can use :scope instead of the ID hack if the browser
+ // supports it & if we're not changing the context.
+ if ( newContext !== context || !support.scope ) {
+
+ // Capture the context ID, setting it first if necessary
+ if ( ( nid = context.getAttribute( "id" ) ) ) {
+ nid = nid.replace( rcssescape, fcssescape );
+ } else {
+ context.setAttribute( "id", ( nid = expando ) );
+ }
+ }
+
+ // Prefix every selector in the list
+ groups = tokenize( selector );
+ i = groups.length;
+ while ( i-- ) {
+ groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+ toSelector( groups[ i ] );
+ }
+ newSelector = groups.join( "," );
+ }
+
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch ( qsaError ) {
+ nonnativeSelectorCache( selector, true );
+ } finally {
+ if ( nid === expando ) {
+ context.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return ( cache[ key + " " ] = value );
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+ var el = document.createElement( "fieldset" );
+
+ try {
+ return !!fn( el );
+ } catch ( e ) {
+ return false;
+ } finally {
+
+ // Remove from its parent by default
+ if ( el.parentNode ) {
+ el.parentNode.removeChild( el );
+ }
+
+ // release memory in IE
+ el = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split( "|" ),
+ i = arr.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[ i ] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ a.sourceIndex - b.sourceIndex;
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( ( cur = cur.nextSibling ) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return ( name === "input" || name === "button" ) && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+ return function( elem ) {
+
+ // Only certain elements can match :enabled or :disabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+ if ( "form" in elem ) {
+
+ // Check for inherited disabledness on relevant non-disabled elements:
+ // * listed form-associated elements in a disabled fieldset
+ // https://html.spec.whatwg.org/multipage/forms.html#category-listed
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+ // * option elements in a disabled optgroup
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+ // All such elements have a "form" property.
+ if ( elem.parentNode && elem.disabled === false ) {
+
+ // Option elements defer to a parent optgroup if present
+ if ( "label" in elem ) {
+ if ( "label" in elem.parentNode ) {
+ return elem.parentNode.disabled === disabled;
+ } else {
+ return elem.disabled === disabled;
+ }
+ }
+
+ // Support: IE 6 - 11
+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+ return elem.isDisabled === disabled ||
+
+ // Where there is no isDisabled, check manually
+ /* jshint -W018 */
+ elem.isDisabled !== !disabled &&
+ inDisabledFieldset( elem ) === disabled;
+ }
+
+ return elem.disabled === disabled;
+
+ // Try to winnow out elements that can't be disabled before trusting the disabled property.
+ // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+ // even exist on them, let alone have a boolean value.
+ } else if ( "label" in elem ) {
+ return elem.disabled === disabled;
+ }
+
+ // Remaining elements are neither :enabled nor :disabled
+ return false;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction( function( argument ) {
+ argument = +argument;
+ return markFunction( function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+ seed[ j ] = !( matches[ j ] = seed[ j ] );
+ }
+ }
+ } );
+ } );
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ var namespace = elem && elem.namespaceURI,
+ docElem = elem && ( elem.ownerDocument || elem ).documentElement;
+
+ // Support: IE <=8
+ // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+ // https://bugs.jquery.com/ticket/4833
+ return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var hasCompare, subWindow,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // Return early if doc is invalid or already selected
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Update global variables
+ document = doc;
+ docElem = document.documentElement;
+ documentIsHTML = !isXML( document );
+
+ // Support: IE 9 - 11+, Edge 12 - 18+
+ // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( preferredDoc != document &&
+ ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
+
+ // Support: IE 11, Edge
+ if ( subWindow.addEventListener ) {
+ subWindow.addEventListener( "unload", unloadHandler, false );
+
+ // Support: IE 9 - 10 only
+ } else if ( subWindow.attachEvent ) {
+ subWindow.attachEvent( "onunload", unloadHandler );
+ }
+ }
+
+ // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+ // Safari 4 - 5 only, Opera <=11.6 - 12.x only
+ // IE/Edge & older browsers don't support the :scope pseudo-class.
+ // Support: Safari 6.0 only
+ // Safari 6.0 supports :scope but it's an alias of :root there.
+ support.scope = assert( function( el ) {
+ docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+ return typeof el.querySelectorAll !== "undefined" &&
+ !el.querySelectorAll( ":scope fieldset div" ).length;
+ } );
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert( function( el ) {
+ el.className = "i";
+ return !el.getAttribute( "className" );
+ } );
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert( function( el ) {
+ el.appendChild( document.createComment( "" ) );
+ return !el.getElementsByTagName( "*" ).length;
+ } );
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programmatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert( function( el ) {
+ docElem.appendChild( el ).id = expando;
+ return !document.getElementsByName || !document.getElementsByName( expando ).length;
+ } );
+
+ // ID filter and find
+ if ( support.getById ) {
+ Expr.filter[ "ID" ] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute( "id" ) === attrId;
+ };
+ };
+ Expr.find[ "ID" ] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var elem = context.getElementById( id );
+ return elem ? [ elem ] : [];
+ }
+ };
+ } else {
+ Expr.filter[ "ID" ] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== "undefined" &&
+ elem.getAttributeNode( "id" );
+ return node && node.value === attrId;
+ };
+ };
+
+ // Support: IE 6 - 7 only
+ // getElementById is not reliable as a find shortcut
+ Expr.find[ "ID" ] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var node, i, elems,
+ elem = context.getElementById( id );
+
+ if ( elem ) {
+
+ // Verify the id attribute
+ node = elem.getAttributeNode( "id" );
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+
+ // Fall back on getElementsByName
+ elems = context.getElementsByName( id );
+ i = 0;
+ while ( ( elem = elems[ i++ ] ) ) {
+ node = elem.getAttributeNode( "id" );
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+ }
+ }
+
+ return [];
+ }
+ };
+ }
+
+ // Tag
+ Expr.find[ "TAG" ] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( tag );
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if ( support.qsa ) {
+ return context.querySelectorAll( tag );
+ }
+ } :
+
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( ( elem = results[ i++ ] ) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See https://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert( function( el ) {
+
+ var input;
+
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // https://bugs.jquery.com/ticket/12359
+ docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+ "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+ "<option selected=''></option></select>";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !el.querySelectorAll( "[selected]" ).length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+ rbuggyQSA.push( "~=" );
+ }
+
+ // Support: IE 11+, Edge 15 - 18+
+ // IE 11/Edge don't find elements on a `[name='']` query in some cases.
+ // Adding a temporary attribute to the document before the selection works
+ // around the issue.
+ // Interestingly, IE 10 & older don't seem to have the issue.
+ input = document.createElement( "input" );
+ input.setAttribute( "name", "" );
+ el.appendChild( input );
+ if ( !el.querySelectorAll( "[name='']" ).length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+ whitespace + "*(?:''|\"\")" );
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !el.querySelectorAll( ":checked" ).length ) {
+ rbuggyQSA.push( ":checked" );
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibling-combinator selector` fails
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+ rbuggyQSA.push( ".#.+[+~]" );
+ }
+
+ // Support: Firefox <=3.6 - 5 only
+ // Old Firefox doesn't throw on a badly-escaped identifier.
+ el.querySelectorAll( "\\\f" );
+ rbuggyQSA.push( "[\\r\\n\\f]" );
+ } );
+
+ assert( function( el ) {
+ el.innerHTML = "<a href='' disabled='disabled'></a>" +
+ "<select disabled='disabled'><option/></select>";
+
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = document.createElement( "input" );
+ input.setAttribute( "type", "hidden" );
+ el.appendChild( input ).setAttribute( "name", "D" );
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if ( el.querySelectorAll( "[name=d]" ).length ) {
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Support: IE9-11+
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
+ docElem.appendChild( el ).disabled = true;
+ if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Support: Opera 10 - 11 only
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ el.querySelectorAll( "*,:x" );
+ rbuggyQSA.push( ",.*:" );
+ } );
+ }
+
+ if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector ) ) ) ) {
+
+ assert( function( el ) {
+
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( el, "*" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( el, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ } );
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+ // Element contains another
+ // Purposefully self-exclusive
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test( docElem.contains ) ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ) );
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( ( b = b.parentNode ) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if ( compare ) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition( b ) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if ( compare & 1 ||
+ ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
+
+ // Choose the first element that is related to our preferred document
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( a == document || a.ownerDocument == preferredDoc &&
+ contains( preferredDoc, a ) ) {
+ return -1;
+ }
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( b == document || b.ownerDocument == preferredDoc &&
+ contains( preferredDoc, b ) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function( a, b ) {
+
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Parentless nodes are either documents or disconnected
+ if ( !aup || !bup ) {
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ /* eslint-disable eqeqeq */
+ return a == document ? -1 :
+ b == document ? 1 :
+ /* eslint-enable eqeqeq */
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( ( cur = cur.parentNode ) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( ( cur = cur.parentNode ) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[ i ] === bp[ i ] ) {
+ i++;
+ }
+
+ return i ?
+
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[ i ], bp[ i ] ) :
+
+ // Otherwise nodes in our document sort first
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ /* eslint-disable eqeqeq */
+ ap[ i ] == preferredDoc ? -1 :
+ bp[ i ] == preferredDoc ? 1 :
+ /* eslint-enable eqeqeq */
+ 0;
+ };
+
+ return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ setDocument( elem );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ !nonnativeSelectorCache[ expr + " " ] &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch ( e ) {
+ nonnativeSelectorCache( expr, true );
+ }
+ }
+
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+
+ // Set document vars if needed
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( ( context.ownerDocument || context ) != document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+
+ // Set document vars if needed
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( ( elem.ownerDocument || elem ) != document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ ( val = elem.getAttributeNode( name ) ) && val.specified ?
+ val.value :
+ null;
+};
+
+Sizzle.escape = function( sel ) {
+ return ( sel + "" ).replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( ( elem = results[ i++ ] ) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+
+ // If no nodeType, this is expected to be an array
+ while ( ( node = elem[ i++ ] ) ) {
+
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[ 1 ] = match[ 1 ].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+ match[ 5 ] || "" ).replace( runescape, funescape );
+
+ if ( match[ 2 ] === "~=" ) {
+ match[ 3 ] = " " + match[ 3 ] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[ 1 ] = match[ 1 ].toLowerCase();
+
+ if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
+
+ // nth-* requires argument
+ if ( !match[ 3 ] ) {
+ Sizzle.error( match[ 0 ] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[ 4 ] = +( match[ 4 ] ?
+ match[ 5 ] + ( match[ 6 ] || 1 ) :
+ 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+ match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[ 3 ] ) {
+ Sizzle.error( match[ 0 ] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[ 6 ] && match[ 2 ];
+
+ if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[ 3 ] ) {
+ match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+
+ // Get excess from tokenize (recursively)
+ ( excess = tokenize( unquoted, true ) ) &&
+
+ // advance to the next closing parenthesis
+ ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
+
+ // excess is a negative index
+ match[ 0 ] = match[ 0 ].slice( 0, excess );
+ match[ 2 ] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() {
+ return true;
+ } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ ( pattern = new RegExp( "(^|" + whitespace +
+ ")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+ className, function( elem ) {
+ return pattern.test(
+ typeof elem.className === "string" && elem.className ||
+ typeof elem.getAttribute !== "undefined" &&
+ elem.getAttribute( "class" ) ||
+ ""
+ );
+ } );
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ /* eslint-disable max-len */
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ /* eslint-enable max-len */
+
+ };
+ },
+
+ "CHILD": function( type, what, _argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, _context, xml ) {
+ var cache, uniqueCache, outerCache, node, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType,
+ diff = false;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( ( node = node[ dir ] ) ) {
+ if ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) {
+
+ return false;
+ }
+ }
+
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+
+ // Seek `elem` from a previously-cached index
+
+ // ...in a gzip-friendly way
+ node = parent;
+ outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ ( outerCache[ node.uniqueID ] = {} );
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex && cache[ 2 ];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( ( node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ ( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ } else {
+
+ // Use previously-cached element index if available
+ if ( useCache ) {
+
+ // ...in a gzip-friendly way
+ node = elem;
+ outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ ( outerCache[ node.uniqueID ] = {} );
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex;
+ }
+
+ // xml :nth-child(...)
+ // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ if ( diff === false ) {
+
+ // Use the same loop as above to seek `elem` from the start
+ while ( ( node = ++nodeIndex && node && node[ dir ] ||
+ ( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+ if ( ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) &&
+ ++diff ) {
+
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ outerCache = node[ expando ] ||
+ ( node[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ ( outerCache[ node.uniqueID ] = {} );
+
+ uniqueCache[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction( function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf( seed, matched[ i ] );
+ seed[ idx ] = !( matches[ idx ] = matched[ i ] );
+ }
+ } ) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+
+ // Potentially complex pseudos
+ "not": markFunction( function( selector ) {
+
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction( function( seed, matches, _context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( ( elem = unmatched[ i ] ) ) {
+ seed[ i ] = !( matches[ i ] = elem );
+ }
+ }
+ } ) :
+ function( elem, _context, xml ) {
+ input[ 0 ] = elem;
+ matcher( input, null, xml, results );
+
+ // Don't keep the element (issue #299)
+ input[ 0 ] = null;
+ return !results.pop();
+ };
+ } ),
+
+ "has": markFunction( function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ } ),
+
+ "contains": markFunction( function( text ) {
+ text = text.replace( runescape, funescape );
+ return function( elem ) {
+ return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+ };
+ } ),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+
+ // lang value must be a valid identifier
+ if ( !ridentifier.test( lang || "" ) ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( ( elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
+ return false;
+ };
+ } ),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement &&
+ ( !document.hasFocus || document.hasFocus() ) &&
+ !!( elem.type || elem.href || ~elem.tabIndex );
+ },
+
+ // Boolean properties
+ "enabled": createDisabledPseudo( false ),
+ "disabled": createDisabledPseudo( true ),
+
+ "checked": function( elem ) {
+
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return ( nodeName === "input" && !!elem.checked ) ||
+ ( nodeName === "option" && !!elem.selected );
+ },
+
+ "selected": function( elem ) {
+
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ // eslint-disable-next-line no-unused-expressions
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeType < 6 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos[ "empty" ]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( ( attr = elem.getAttribute( "type" ) ) == null ||
+ attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo( function() {
+ return [ 0 ];
+ } ),
+
+ "last": createPositionalPseudo( function( _matchIndexes, length ) {
+ return [ length - 1 ];
+ } ),
+
+ "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ } ),
+
+ "even": createPositionalPseudo( function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } ),
+
+ "odd": createPositionalPseudo( function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } ),
+
+ "lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+ var i = argument < 0 ?
+ argument + length :
+ argument > length ?
+ length :
+ argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } ),
+
+ "gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } )
+ }
+};
+
+Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
+ if ( match ) {
+
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[ 0 ].length ) || soFar;
+ }
+ groups.push( ( tokens = [] ) );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( ( match = rcombinators.exec( soFar ) ) ) {
+ matched = match.shift();
+ tokens.push( {
+ value: matched,
+
+ // Cast descendant combinators to space
+ type: match[ 0 ].replace( rtrim, " " )
+ } );
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
+ ( match = preFilters[ type ]( match ) ) ) ) {
+ matched = match.shift();
+ tokens.push( {
+ value: matched,
+ type: type,
+ matches: match
+ } );
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[ i ].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ skip = combinator.next,
+ key = skip || dir,
+ checkNonElements = base && key === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( ( elem = elem[ dir ] ) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ return false;
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var oldCache, uniqueCache, outerCache,
+ newCache = [ dirruns, doneName ];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+ if ( xml ) {
+ while ( ( elem = elem[ dir ] ) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( ( elem = elem[ dir ] ) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || ( elem[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ elem.uniqueID ] ||
+ ( outerCache[ elem.uniqueID ] = {} );
+
+ if ( skip && skip === elem.nodeName.toLowerCase() ) {
+ elem = elem[ dir ] || elem;
+ } else if ( ( oldCache = uniqueCache[ key ] ) &&
+ oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return ( newCache[ 2 ] = oldCache[ 2 ] );
+ } else {
+
+ // Reuse newcache so results back-propagate to previous elements
+ uniqueCache[ key ] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[ i ]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[ 0 ];
+}
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[ i ], results );
+ }
+ return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( ( elem = unmatched[ i ] ) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction( function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts(
+ selector || "*",
+ context.nodeType ? [ context ] : context,
+ []
+ ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( ( elem = temp[ i ] ) ) {
+ matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( ( elem = matcherOut[ i ] ) ) {
+
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( ( matcherIn[ i ] = elem ) );
+ }
+ }
+ postFinder( null, ( matcherOut = [] ), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( ( elem = matcherOut[ i ] ) &&
+ ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
+
+ seed[ temp ] = !( results[ temp ] = elem );
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ } );
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[ 0 ].type ],
+ implicitRelative = leadingRelative || Expr.relative[ " " ],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ ( checkContext = context ).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
+ matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+ } else {
+ matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[ j ].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens
+ .slice( 0, i - 1 )
+ .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, outermost ) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
+
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
+ len = elems.length;
+
+ if ( outermost ) {
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ outermostContext = context == document || context || outermost;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+ for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( !context && elem.ownerDocument != document ) {
+ setDocument( elem );
+ xml = !documentIsHTML;
+ }
+ while ( ( matcher = elementMatchers[ j++ ] ) ) {
+ if ( matcher( elem, context || document, xml ) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+
+ // They will have gone through all possible matchers
+ if ( ( elem = !matcher && elem ) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // `i` is now the count of elements visited above, and adding it to `matchedCount`
+ // makes the latter nonnegative.
+ matchedCount += i;
+
+ // Apply set filters to unmatched elements
+ // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+ // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+ // no element matchers and no seed.
+ // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+ // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+ // numerically zero.
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( ( matcher = setMatchers[ j++ ] ) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
+ setMatched[ i ] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !match ) {
+ match = tokenize( selector );
+ }
+ i = match.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( match[ i ] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache(
+ selector,
+ matcherFromGroupMatchers( elementMatchers, setMatchers )
+ );
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize( ( selector = compiled.selector || selector ) );
+
+ results = results || [];
+
+ // Try to minimize operations if there is only one selector in the list and no seed
+ // (the latter of which guarantees us context)
+ if ( match.length === 1 ) {
+
+ // Reduce context if the leading compound selector is an ID
+ tokens = match[ 0 ] = match[ 0 ].slice( 0 );
+ if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
+
+ context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
+ .replace( runescape, funescape ), context ) || [] )[ 0 ];
+ if ( !context ) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if ( compiled ) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[ i ];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ ( type = token.type ) ] ) {
+ break;
+ }
+ if ( ( find = Expr.find[ type ] ) ) {
+
+ // Search, expanding context for leading sibling combinators
+ if ( ( seed = find(
+ token.matches[ 0 ].replace( runescape, funescape ),
+ rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
+ context
+ ) ) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile( selector, match ) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+ );
+ return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert( function( el ) {
+
+ // Should return 1, but returns 4 (following)
+ return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
+} );
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert( function( el ) {
+ el.innerHTML = "<a href='#'></a>";
+ return el.firstChild.getAttribute( "href" ) === "#";
+} ) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ } );
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert( function( el ) {
+ el.innerHTML = "<input/>";
+ el.firstChild.setAttribute( "value", "" );
+ return el.firstChild.getAttribute( "value" ) === "";
+} ) ) {
+ addHandle( "value", function( elem, _name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ } );
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert( function( el ) {
+ return el.getAttribute( "disabled" ) == null;
+} ) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return elem[ name ] === true ? name.toLowerCase() :
+ ( val = elem.getAttributeNode( name ) ) && val.specified ?
+ val.value :
+ null;
+ }
+ } );
+}
+
+return Sizzle;
+
+} )( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+};
+
+
+var siblings = function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+}
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ return !!qualifier.call( elem, i, elem ) !== not;
+ } );
+ }
+
+ // Single element
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ } );
+ }
+
+ // Arraylike of elements (jQuery, arguments, Array)
+ if ( typeof qualifier !== "string" ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+ } );
+ }
+
+ // Filtered directly for both simple and complex selectors
+ return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ if ( elems.length === 1 && elem.nodeType === 1 ) {
+ return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+ }
+
+ return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ } ) );
+};
+
+jQuery.fn.extend( {
+ find: function( selector ) {
+ var i, ret,
+ len = this.length,
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter( function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ } ) );
+ }
+
+ ret = this.pushStack( [] );
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+ },
+ filter: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], false ) );
+ },
+ not: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], true ) );
+ },
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ // Shortcut simple #id case for speed
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+ init = jQuery.fn.init = function( selector, context, root ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Method init() accepts an alternate rootjQuery
+ // so migrate can support jQuery.sub (gh-2101)
+ root = root || rootjQuery;
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector[ 0 ] === "<" &&
+ selector[ selector.length - 1 ] === ">" &&
+ selector.length >= 3 ) {
+
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && ( match[ 1 ] || !context ) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[ 1 ] ) {
+ context = context instanceof jQuery ? context[ 0 ] : context;
+
+ // Option to run scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge( this, jQuery.parseHTML(
+ match[ 1 ],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+
+ // Properties of context are called as methods if possible
+ if ( isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[ 2 ] );
+
+ if ( elem ) {
+
+ // Inject the element directly into the jQuery object
+ this[ 0 ] = elem;
+ this.length = 1;
+ }
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || root ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this[ 0 ] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( isFunction( selector ) ) {
+ return root.ready !== undefined ?
+ root.ready( selector ) :
+
+ // Execute immediately if ready is not present
+ selector( jQuery );
+ }
+
+ return jQuery.makeArray( selector, this );
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+ // Methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend( {
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter( function() {
+ var i = 0;
+ for ( ; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[ i ] ) ) {
+ return true;
+ }
+ }
+ } );
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ targets = typeof selectors !== "string" && jQuery( selectors );
+
+ // Positional selectors never match, since there's no _selection_ context
+ if ( !rneedsContext.test( selectors ) ) {
+ for ( ; i < l; i++ ) {
+ for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && ( targets ?
+ targets.index( cur ) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+ matched.push( cur );
+ break;
+ }
+ }
+ }
+ }
+
+ return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+ },
+
+ // Determine the position of an element within the set
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // Index in selector
+ if ( typeof elem === "string" ) {
+ return indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ add: function( selector, context ) {
+ return this.pushStack(
+ jQuery.uniqueSort(
+ jQuery.merge( this.get(), jQuery( selector, context ) )
+ )
+ );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ }
+} );
+
+function sibling( cur, dir ) {
+ while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+ return cur;
+}
+
+jQuery.each( {
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, _i, until ) {
+ return dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, _i, until ) {
+ return dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, _i, until ) {
+ return dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return siblings( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return siblings( elem.firstChild );
+ },
+ contents: function( elem ) {
+ if ( elem.contentDocument != null &&
+
+ // Support: IE 11+
+ // <object> elements with no `data` attribute has an object
+ // `contentDocument` with a `null` prototype.
+ getProto( elem.contentDocument ) ) {
+
+ return elem.contentDocument;
+ }
+
+ // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+ // Treat the template element as a regular one in browsers that
+ // don't support it.
+ if ( nodeName( elem, "template" ) ) {
+ elem = elem.content || elem;
+ }
+
+ return jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.uniqueSort( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+ var object = {};
+ jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ } );
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ createOptions( options ) :
+ jQuery.extend( {}, options );
+
+ var // Flag to know if list is currently firing
+ firing,
+
+ // Last fire value for non-forgettable lists
+ memory,
+
+ // Flag to know if list was already fired
+ fired,
+
+ // Flag to prevent firing
+ locked,
+
+ // Actual callback list
+ list = [],
+
+ // Queue of execution data for repeatable lists
+ queue = [],
+
+ // Index of currently firing callback (modified by add/remove as needed)
+ firingIndex = -1,
+
+ // Fire callbacks
+ fire = function() {
+
+ // Enforce single-firing
+ locked = locked || options.once;
+
+ // Execute callbacks for all pending executions,
+ // respecting firingIndex overrides and runtime changes
+ fired = firing = true;
+ for ( ; queue.length; firingIndex = -1 ) {
+ memory = queue.shift();
+ while ( ++firingIndex < list.length ) {
+
+ // Run callback and check for early termination
+ if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+ options.stopOnFalse ) {
+
+ // Jump to end and forget the data so .add doesn't re-fire
+ firingIndex = list.length;
+ memory = false;
+ }
+ }
+ }
+
+ // Forget the data if we're done with it
+ if ( !options.memory ) {
+ memory = false;
+ }
+
+ firing = false;
+
+ // Clean up if we're done firing for good
+ if ( locked ) {
+
+ // Keep an empty list if we have data for future add calls
+ if ( memory ) {
+ list = [];
+
+ // Otherwise, this object is spent
+ } else {
+ list = "";
+ }
+ }
+ },
+
+ // Actual Callbacks object
+ self = {
+
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+
+ // If we have memory from a past run, we should fire after adding
+ if ( memory && !firing ) {
+ firingIndex = list.length - 1;
+ queue.push( memory );
+ }
+
+ ( function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ if ( isFunction( arg ) ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+ // Inspect recursively
+ add( arg );
+ }
+ } );
+ } )( arguments );
+
+ if ( memory && !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Remove a callback from the list
+ remove: function() {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+
+ // Handle firing indexes
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ } );
+ return this;
+ },
+
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ?
+ jQuery.inArray( fn, list ) > -1 :
+ list.length > 0;
+ },
+
+ // Remove all callbacks from the list
+ empty: function() {
+ if ( list ) {
+ list = [];
+ }
+ return this;
+ },
+
+ // Disable .fire and .add
+ // Abort any current/pending executions
+ // Clear all callbacks and values
+ disable: function() {
+ locked = queue = [];
+ list = memory = "";
+ return this;
+ },
+ disabled: function() {
+ return !list;
+ },
+
+ // Disable .fire
+ // Also disable .add unless we have memory (since it would have no effect)
+ // Abort any pending executions
+ lock: function() {
+ locked = queue = [];
+ if ( !memory && !firing ) {
+ list = memory = "";
+ }
+ return this;
+ },
+ locked: function() {
+ return !!locked;
+ },
+
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( !locked ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ queue.push( args );
+ if ( !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+function Identity( v ) {
+ return v;
+}
+function Thrower( ex ) {
+ throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+ var method;
+
+ try {
+
+ // Check for promise aspect first to privilege synchronous behavior
+ if ( value && isFunction( ( method = value.promise ) ) ) {
+ method.call( value ).done( resolve ).fail( reject );
+
+ // Other thenables
+ } else if ( value && isFunction( ( method = value.then ) ) ) {
+ method.call( value, resolve, reject );
+
+ // Other non-thenables
+ } else {
+
+ // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+ // * false: [ value ].slice( 0 ) => resolve( value )
+ // * true: [ value ].slice( 1 ) => resolve()
+ resolve.apply( undefined, [ value ].slice( noValue ) );
+ }
+
+ // For Promises/A+, convert exceptions into rejections
+ // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+ // Deferred#then to conditionally suppress rejection.
+ } catch ( value ) {
+
+ // Support: Android 4.0 only
+ // Strict mode functions invoked without .call/.apply get global-object context
+ reject.apply( undefined, [ value ] );
+ }
+}
+
+jQuery.extend( {
+
+ Deferred: function( func ) {
+ var tuples = [
+
+ // action, add listener, callbacks,
+ // ... .then handlers, argument index, [final state]
+ [ "notify", "progress", jQuery.Callbacks( "memory" ),
+ jQuery.Callbacks( "memory" ), 2 ],
+ [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ "catch": function( fn ) {
+ return promise.then( null, fn );
+ },
+
+ // Keep pipe for back-compat
+ pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+
+ return jQuery.Deferred( function( newDefer ) {
+ jQuery.each( tuples, function( _i, tuple ) {
+
+ // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+ var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+ // deferred.progress(function() { bind to newDefer or newDefer.notify })
+ // deferred.done(function() { bind to newDefer or newDefer.resolve })
+ // deferred.fail(function() { bind to newDefer or newDefer.reject })
+ deferred[ tuple[ 1 ] ]( function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && isFunction( returned.promise ) ) {
+ returned.promise()
+ .progress( newDefer.notify )
+ .done( newDefer.resolve )
+ .fail( newDefer.reject );
+ } else {
+ newDefer[ tuple[ 0 ] + "With" ](
+ this,
+ fn ? [ returned ] : arguments
+ );
+ }
+ } );
+ } );
+ fns = null;
+ } ).promise();
+ },
+ then: function( onFulfilled, onRejected, onProgress ) {
+ var maxDepth = 0;
+ function resolve( depth, deferred, handler, special ) {
+ return function() {
+ var that = this,
+ args = arguments,
+ mightThrow = function() {
+ var returned, then;
+
+ // Support: Promises/A+ section 2.3.3.3.3
+ // https://promisesaplus.com/#point-59
+ // Ignore double-resolution attempts
+ if ( depth < maxDepth ) {
+ return;
+ }
+
+ returned = handler.apply( that, args );
+
+ // Support: Promises/A+ section 2.3.1
+ // https://promisesaplus.com/#point-48
+ if ( returned === deferred.promise() ) {
+ throw new TypeError( "Thenable self-resolution" );
+ }
+
+ // Support: Promises/A+ sections 2.3.3.1, 3.5
+ // https://promisesaplus.com/#point-54
+ // https://promisesaplus.com/#point-75
+ // Retrieve `then` only once
+ then = returned &&
+
+ // Support: Promises/A+ section 2.3.4
+ // https://promisesaplus.com/#point-64
+ // Only check objects and functions for thenability
+ ( typeof returned === "object" ||
+ typeof returned === "function" ) &&
+ returned.then;
+
+ // Handle a returned thenable
+ if ( isFunction( then ) ) {
+
+ // Special processors (notify) just wait for resolution
+ if ( special ) {
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special )
+ );
+
+ // Normal processors (resolve) also hook into progress
+ } else {
+
+ // ...and disregard older resolution values
+ maxDepth++;
+
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special ),
+ resolve( maxDepth, deferred, Identity,
+ deferred.notifyWith )
+ );
+ }
+
+ // Handle all other returned values
+ } else {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Identity ) {
+ that = undefined;
+ args = [ returned ];
+ }
+
+ // Process the value(s)
+ // Default process is resolve
+ ( special || deferred.resolveWith )( that, args );
+ }
+ },
+
+ // Only normal processors (resolve) catch and reject exceptions
+ process = special ?
+ mightThrow :
+ function() {
+ try {
+ mightThrow();
+ } catch ( e ) {
+
+ if ( jQuery.Deferred.exceptionHook ) {
+ jQuery.Deferred.exceptionHook( e,
+ process.stackTrace );
+ }
+
+ // Support: Promises/A+ section 2.3.3.3.4.1
+ // https://promisesaplus.com/#point-61
+ // Ignore post-resolution exceptions
+ if ( depth + 1 >= maxDepth ) {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Thrower ) {
+ that = undefined;
+ args = [ e ];
+ }
+
+ deferred.rejectWith( that, args );
+ }
+ }
+ };
+
+ // Support: Promises/A+ section 2.3.3.3.1
+ // https://promisesaplus.com/#point-57
+ // Re-resolve promises immediately to dodge false rejection from
+ // subsequent errors
+ if ( depth ) {
+ process();
+ } else {
+
+ // Call an optional hook to record the stack, in case of exception
+ // since it's otherwise lost when execution goes async
+ if ( jQuery.Deferred.getStackHook ) {
+ process.stackTrace = jQuery.Deferred.getStackHook();
+ }
+ window.setTimeout( process );
+ }
+ };
+ }
+
+ return jQuery.Deferred( function( newDefer ) {
+
+ // progress_handlers.add( ... )
+ tuples[ 0 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onProgress ) ?
+ onProgress :
+ Identity,
+ newDefer.notifyWith
+ )
+ );
+
+ // fulfilled_handlers.add( ... )
+ tuples[ 1 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onFulfilled ) ?
+ onFulfilled :
+ Identity
+ )
+ );
+
+ // rejected_handlers.add( ... )
+ tuples[ 2 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onRejected ) ?
+ onRejected :
+ Thrower
+ )
+ );
+ } ).promise();
+ },
+
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 5 ];
+
+ // promise.progress = list.add
+ // promise.done = list.add
+ // promise.fail = list.add
+ promise[ tuple[ 1 ] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(
+ function() {
+
+ // state = "resolved" (i.e., fulfilled)
+ // state = "rejected"
+ state = stateString;
+ },
+
+ // rejected_callbacks.disable
+ // fulfilled_callbacks.disable
+ tuples[ 3 - i ][ 2 ].disable,
+
+ // rejected_handlers.disable
+ // fulfilled_handlers.disable
+ tuples[ 3 - i ][ 3 ].disable,
+
+ // progress_callbacks.lock
+ tuples[ 0 ][ 2 ].lock,
+
+ // progress_handlers.lock
+ tuples[ 0 ][ 3 ].lock
+ );
+ }
+
+ // progress_handlers.fire
+ // fulfilled_handlers.fire
+ // rejected_handlers.fire
+ list.add( tuple[ 3 ].fire );
+
+ // deferred.notify = function() { deferred.notifyWith(...) }
+ // deferred.resolve = function() { deferred.resolveWith(...) }
+ // deferred.reject = function() { deferred.rejectWith(...) }
+ deferred[ tuple[ 0 ] ] = function() {
+ deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+ return this;
+ };
+
+ // deferred.notifyWith = list.fireWith
+ // deferred.resolveWith = list.fireWith
+ // deferred.rejectWith = list.fireWith
+ deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+ } );
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( singleValue ) {
+ var
+
+ // count of uncompleted subordinates
+ remaining = arguments.length,
+
+ // count of unprocessed arguments
+ i = remaining,
+
+ // subordinate fulfillment data
+ resolveContexts = Array( i ),
+ resolveValues = slice.call( arguments ),
+
+ // the primary Deferred
+ primary = jQuery.Deferred(),
+
+ // subordinate callback factory
+ updateFunc = function( i ) {
+ return function( value ) {
+ resolveContexts[ i ] = this;
+ resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+ if ( !( --remaining ) ) {
+ primary.resolveWith( resolveContexts, resolveValues );
+ }
+ };
+ };
+
+ // Single- and empty arguments are adopted like Promise.resolve
+ if ( remaining <= 1 ) {
+ adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
+ !remaining );
+
+ // Use .then() to unwrap secondary thenables (cf. gh-3000)
+ if ( primary.state() === "pending" ||
+ isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+ return primary.then();
+ }
+ }
+
+ // Multiple arguments are aggregated like Promise.all array elements
+ while ( i-- ) {
+ adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
+ }
+
+ return primary.promise();
+ }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+ // Support: IE 8 - 9 only
+ // Console exists when dev tools are open, which can happen at any time
+ if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+ window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+ }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+ window.setTimeout( function() {
+ throw error;
+ } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+ readyList
+ .then( fn )
+
+ // Wrap jQuery.readyException in a function so that the lookup
+ // happens at the time of error handling instead of callback
+ // registration.
+ .catch( function( error ) {
+ jQuery.readyException( error );
+ } );
+
+ return this;
+};
+
+jQuery.extend( {
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+ }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed );
+ window.removeEventListener( "load", completed );
+ jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+ ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ window.setTimeout( jQuery.ready );
+
+} else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ len = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( toType( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ access( elems, fn, i, key[ i ], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, _key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < len; i++ ) {
+ fn(
+ elems[ i ], key, raw ?
+ value :
+ value.call( elems[ i ], i, fn( elems[ i ], key ) )
+ );
+ }
+ }
+ }
+
+ if ( chainable ) {
+ return elems;
+ }
+
+ // Gets
+ if ( bulk ) {
+ return fn.call( elems );
+ }
+
+ return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( _all, letter ) {
+ return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+ cache: function( owner ) {
+
+ // Check if the owner object already has a cache
+ var value = owner[ this.expando ];
+
+ // If not, create one
+ if ( !value ) {
+ value = {};
+
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return an empty object.
+ if ( acceptData( owner ) ) {
+
+ // If it is a node unlikely to be stringify-ed or looped over
+ // use plain assignment
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = value;
+
+ // Otherwise secure it in a non-enumerable property
+ // configurable must be true to allow the property to be
+ // deleted when data is removed
+ } else {
+ Object.defineProperty( owner, this.expando, {
+ value: value,
+ configurable: true
+ } );
+ }
+ }
+ }
+
+ return value;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ cache = this.cache( owner );
+
+ // Handle: [ owner, key, value ] args
+ // Always use camelCase key (gh-2257)
+ if ( typeof data === "string" ) {
+ cache[ camelCase( data ) ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+
+ // Copy the properties one-by-one to the cache object
+ for ( prop in data ) {
+ cache[ camelCase( prop ) ] = data[ prop ];
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ return key === undefined ?
+ this.cache( owner ) :
+
+ // Always use camelCase key (gh-2257)
+ owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+ },
+ access: function( owner, key, value ) {
+
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+ return this.get( owner, key );
+ }
+
+ // When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i,
+ cache = owner[ this.expando ];
+
+ if ( cache === undefined ) {
+ return;
+ }
+
+ if ( key !== undefined ) {
+
+ // Support array or space separated string of keys
+ if ( Array.isArray( key ) ) {
+
+ // If key is an array of keys...
+ // We always set camelCase keys, so remove that.
+ key = key.map( camelCase );
+ } else {
+ key = camelCase( key );
+
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ key = key in cache ?
+ [ key ] :
+ ( key.match( rnothtmlwhite ) || [] );
+ }
+
+ i = key.length;
+
+ while ( i-- ) {
+ delete cache[ key[ i ] ];
+ }
+ }
+
+ // Remove the expando if there's no more data
+ if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+ // Support: Chrome <=35 - 45
+ // Webkit & Blink performance suffers when deleting properties
+ // from DOM nodes, so set to undefined instead
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = undefined;
+ } else {
+ delete owner[ this.expando ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ var cache = owner[ this.expando ];
+ return cache !== undefined && !jQuery.isEmptyObject( cache );
+ }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+ if ( data === "true" ) {
+ return true;
+ }
+
+ if ( data === "false" ) {
+ return false;
+ }
+
+ if ( data === "null" ) {
+ return null;
+ }
+
+ // Only convert to a number if it doesn't change the string
+ if ( data === +data + "" ) {
+ return +data;
+ }
+
+ if ( rbrace.test( data ) ) {
+ return JSON.parse( data );
+ }
+
+ return data;
+}
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = getData( data );
+ } catch ( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ dataUser.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend( {
+ hasData: function( elem ) {
+ return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return dataUser.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ dataUser.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to dataPriv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return dataPriv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ dataPriv.remove( elem, name );
+ }
+} );
+
+jQuery.fn.extend( {
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = dataUser.get( elem );
+
+ if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+ i = attrs.length;
+ while ( i-- ) {
+
+ // Support: IE 11 only
+ // The attrs elements can be null (#14894)
+ if ( attrs[ i ] ) {
+ name = attrs[ i ].name;
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = camelCase( name.slice( 5 ) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ }
+ dataPriv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each( function() {
+ dataUser.set( this, key );
+ } );
+ }
+
+ return access( this, function( value ) {
+ var data;
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+
+ // Attempt to get data from the cache
+ // The key will always be camelCased in Data
+ data = dataUser.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each( function() {
+
+ // We always store the camelCased key
+ dataUser.set( this, key, value );
+ } );
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each( function() {
+ dataUser.remove( this, key );
+ } );
+ }
+} );
+
+
+jQuery.extend( {
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = dataPriv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || Array.isArray( data ) ) {
+ queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // Clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+ empty: jQuery.Callbacks( "once memory" ).add( function() {
+ dataPriv.remove( elem, [ type + "queue", key ] );
+ } )
+ } );
+ }
+} );
+
+jQuery.fn.extend( {
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[ 0 ], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each( function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // Ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ dequeue: function( type ) {
+ return this.each( function() {
+ jQuery.dequeue( this, type );
+ } );
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while ( i-- ) {
+ tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+ var isAttached = function( elem ) {
+ return jQuery.contains( elem.ownerDocument, elem );
+ },
+ composed = { composed: true };
+
+ // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+ // Check attachment across shadow DOM boundaries when possible (gh-3504)
+ // Support: iOS 10.0-10.2 only
+ // Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+ // leading to errors. We need to check for `getRootNode`.
+ if ( documentElement.getRootNode ) {
+ isAttached = function( elem ) {
+ return jQuery.contains( elem.ownerDocument, elem ) ||
+ elem.getRootNode( composed ) === elem.ownerDocument;
+ };
+ }
+var isHiddenWithinTree = function( elem, el ) {
+
+ // isHiddenWithinTree might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+
+ // Inline style trumps all
+ return elem.style.display === "none" ||
+ elem.style.display === "" &&
+
+ // Otherwise, check computed style
+ // Support: Firefox <=43 - 45
+ // Disconnected elements can have computed display: none, so first confirm that elem is
+ // in the document.
+ isAttached( elem ) &&
+
+ jQuery.css( elem, "display" ) === "none";
+ };
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+ var adjusted, scale,
+ maxIterations = 20,
+ currentValue = tween ?
+ function() {
+ return tween.cur();
+ } :
+ function() {
+ return jQuery.css( elem, prop, "" );
+ },
+ initial = currentValue(),
+ unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ initialInUnit = elem.nodeType &&
+ ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+ rcssNum.exec( jQuery.css( elem, prop ) );
+
+ if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+ // Support: Firefox <=54
+ // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+ initial = initial / 2;
+
+ // Trust units reported by jQuery.css
+ unit = unit || initialInUnit[ 3 ];
+
+ // Iteratively approximate from a nonzero starting point
+ initialInUnit = +initial || 1;
+
+ while ( maxIterations-- ) {
+
+ // Evaluate and update our best guess (doubling guesses that zero out).
+ // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+ jQuery.style( elem, prop, initialInUnit + unit );
+ if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+ maxIterations = 0;
+ }
+ initialInUnit = initialInUnit / scale;
+
+ }
+
+ initialInUnit = initialInUnit * 2;
+ jQuery.style( elem, prop, initialInUnit + unit );
+
+ // Make sure we update the tween properties later on
+ valueParts = valueParts || [];
+ }
+
+ if ( valueParts ) {
+ initialInUnit = +initialInUnit || +initial || 0;
+
+ // Apply relative offset (+=/-=) if specified
+ adjusted = valueParts[ 1 ] ?
+ initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+ +valueParts[ 2 ];
+ if ( tween ) {
+ tween.unit = unit;
+ tween.start = initialInUnit;
+ tween.end = adjusted;
+ }
+ }
+ return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+ var temp,
+ doc = elem.ownerDocument,
+ nodeName = elem.nodeName,
+ display = defaultDisplayMap[ nodeName ];
+
+ if ( display ) {
+ return display;
+ }
+
+ temp = doc.body.appendChild( doc.createElement( nodeName ) );
+ display = jQuery.css( temp, "display" );
+
+ temp.parentNode.removeChild( temp );
+
+ if ( display === "none" ) {
+ display = "block";
+ }
+ defaultDisplayMap[ nodeName ] = display;
+
+ return display;
+}
+
+function showHide( elements, show ) {
+ var display, elem,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ // Determine new display value for elements that need to change
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ display = elem.style.display;
+ if ( show ) {
+
+ // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+ // check is required in this first loop unless we have a nonempty display value (either
+ // inline or about-to-be-restored)
+ if ( display === "none" ) {
+ values[ index ] = dataPriv.get( elem, "display" ) || null;
+ if ( !values[ index ] ) {
+ elem.style.display = "";
+ }
+ }
+ if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+ values[ index ] = getDefaultDisplay( elem );
+ }
+ } else {
+ if ( display !== "none" ) {
+ values[ index ] = "none";
+
+ // Remember what we're overwriting
+ dataPriv.set( elem, "display", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop to avoid constant reflow
+ for ( index = 0; index < length; index++ ) {
+ if ( values[ index ] != null ) {
+ elements[ index ].style.display = values[ index ];
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend( {
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each( function() {
+ if ( isHiddenWithinTree( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ } );
+ }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+( function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Android 4.0 - 4.3 only
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Android <=4.1 only
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE <=11 only
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+ // Support: IE <=9 only
+ // IE <=9 replaces <option> tags with their contents when inserted outside of
+ // the select element.
+ div.innerHTML = "<option></option>";
+ support.option = !!div.lastChild;
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+ // XHTML parsers do not magically insert elements in the
+ // same way that tag soup parsers do. So we cannot shorten
+ // this by omitting <tbody> or other required elements.
+ thead: [ 1, "<table>", "</table>" ],
+ col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+ _default: [ 0, "", "" ]
+};
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: IE <=9 only
+if ( !support.option ) {
+ wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
+
+function getAll( context, tag ) {
+
+ // Support: IE <=9 - 11 only
+ // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+ var ret;
+
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ ret = context.getElementsByTagName( tag || "*" );
+
+ } else if ( typeof context.querySelectorAll !== "undefined" ) {
+ ret = context.querySelectorAll( tag || "*" );
+
+ } else {
+ ret = [];
+ }
+
+ if ( tag === undefined || tag && nodeName( context, tag ) ) {
+ return jQuery.merge( [ context ], ret );
+ }
+
+ return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ dataPriv.set(
+ elems[ i ],
+ "globalEval",
+ !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+ var elem, tmp, tag, wrap, attached, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( toType( elem ) === "object" ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+ // Descend through wrappers to the right content
+ j = wrap[ 0 ];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ( ( elem = nodes[ i++ ] ) ) {
+
+ // Skip elements already in the context collection (trac-4087)
+ if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+ if ( ignored ) {
+ ignored.push( elem );
+ }
+ continue;
+ }
+
+ attached = isAttached( elem );
+
+ // Append to fragment
+ tmp = getAll( fragment.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( attached ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( ( elem = tmp[ j++ ] ) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ return fragment;
+}
+
+
+var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+ return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ on( elem, type, selector, data, types[ type ], one );
+ }
+ return elem;
+ }
+
+ if ( data == null && fn == null ) {
+
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return elem;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return elem.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.get( elem );
+
+ // Only attach events to objects that accept data
+ if ( !acceptData( elem ) ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Ensure that invalid selectors throw exceptions at attach time
+ // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+ if ( selector ) {
+ jQuery.find.matchesSelector( documentElement, selector );
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !( events = elemData.events ) ) {
+ events = elemData.events = Object.create( null );
+ }
+ if ( !( eventHandle = elemData.handle ) ) {
+ eventHandle = elemData.handle = function( e ) {
+
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend( {
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join( "." )
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !( handlers = events[ type ] ) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if ( !special.setup ||
+ special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+ if ( !elemData || !( events = elemData.events ) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[ 2 ] &&
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector ||
+ selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown ||
+ special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove data and the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ dataPriv.remove( elem, "handle events" );
+ }
+ },
+
+ dispatch: function( nativeEvent ) {
+
+ var i, j, ret, matched, handleObj, handlerQueue,
+ args = new Array( arguments.length ),
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( nativeEvent ),
+
+ handlers = (
+ dataPriv.get( this, "events" ) || Object.create( null )
+ )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[ 0 ] = event;
+
+ for ( i = 1; i < arguments.length; i++ ) {
+ args[ i ] = arguments[ i ];
+ }
+
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( ( handleObj = matched.handlers[ j++ ] ) &&
+ !event.isImmediatePropagationStopped() ) {
+
+ // If the event is namespaced, then each handler is only invoked if it is
+ // specially universal or its namespaces are a superset of the event's.
+ if ( !event.rnamespace || handleObj.namespace === false ||
+ event.rnamespace.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+ handleObj.handler ).apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( ( event.result = ret ) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var i, handleObj, sel, matchedHandlers, matchedSelectors,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ if ( delegateCount &&
+
+ // Support: IE <=9
+ // Black-hole SVG <use> instance trees (trac-13180)
+ cur.nodeType &&
+
+ // Support: Firefox <=42
+ // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+ // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+ // Support: IE 11 only
+ // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+ !( event.type === "click" && event.button >= 1 ) ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+ matchedHandlers = [];
+ matchedSelectors = {};
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matchedSelectors[ sel ] === undefined ) {
+ matchedSelectors[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) > -1 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matchedSelectors[ sel ] ) {
+ matchedHandlers.push( handleObj );
+ }
+ }
+ if ( matchedHandlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ cur = this;
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+ }
+
+ return handlerQueue;
+ },
+
+ addProp: function( name, hook ) {
+ Object.defineProperty( jQuery.Event.prototype, name, {
+ enumerable: true,
+ configurable: true,
+
+ get: isFunction( hook ) ?
+ function() {
+ if ( this.originalEvent ) {
+ return hook( this.originalEvent );
+ }
+ } :
+ function() {
+ if ( this.originalEvent ) {
+ return this.originalEvent[ name ];
+ }
+ },
+
+ set: function( value ) {
+ Object.defineProperty( this, name, {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: value
+ } );
+ }
+ } );
+ },
+
+ fix: function( originalEvent ) {
+ return originalEvent[ jQuery.expando ] ?
+ originalEvent :
+ new jQuery.Event( originalEvent );
+ },
+
+ special: {
+ load: {
+
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ click: {
+
+ // Utilize native event to ensure correct state for checkable inputs
+ setup: function( data ) {
+
+ // For mutual compressibility with _default, replace `this` access with a local var.
+ // `|| data` is dead code meant only to preserve the variable through minification.
+ var el = this || data;
+
+ // Claim the first handler
+ if ( rcheckableType.test( el.type ) &&
+ el.click && nodeName( el, "input" ) ) {
+
+ // dataPriv.set( el, "click", ... )
+ leverageNative( el, "click", returnTrue );
+ }
+
+ // Return false to allow normal processing in the caller
+ return false;
+ },
+ trigger: function( data ) {
+
+ // For mutual compressibility with _default, replace `this` access with a local var.
+ // `|| data` is dead code meant only to preserve the variable through minification.
+ var el = this || data;
+
+ // Force setup before triggering a click
+ if ( rcheckableType.test( el.type ) &&
+ el.click && nodeName( el, "input" ) ) {
+
+ leverageNative( el, "click" );
+ }
+
+ // Return non-false to allow normal event-path propagation
+ return true;
+ },
+
+ // For cross-browser consistency, suppress native .click() on links
+ // Also prevent it if we're currently inside a leveraged native-event stack
+ _default: function( event ) {
+ var target = event.target;
+ return rcheckableType.test( target.type ) &&
+ target.click && nodeName( target, "input" ) &&
+ dataPriv.get( target, "click" ) ||
+ nodeName( target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if ( event.result !== undefined && event.originalEvent ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ }
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+ // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+ if ( !expectSync ) {
+ if ( dataPriv.get( el, type ) === undefined ) {
+ jQuery.event.add( el, type, returnTrue );
+ }
+ return;
+ }
+
+ // Register the controller as a special universal handler for all event namespaces
+ dataPriv.set( el, type, false );
+ jQuery.event.add( el, type, {
+ namespace: false,
+ handler: function( event ) {
+ var notAsync, result,
+ saved = dataPriv.get( this, type );
+
+ if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+ // Interrupt processing of the outer synthetic .trigger()ed event
+ // Saved data should be false in such cases, but might be a leftover capture object
+ // from an async native handler (gh-4350)
+ if ( !saved.length ) {
+
+ // Store arguments for use when handling the inner native event
+ // There will always be at least one argument (an event object), so this array
+ // will not be confused with a leftover capture object.
+ saved = slice.call( arguments );
+ dataPriv.set( this, type, saved );
+
+ // Trigger the native event and capture its result
+ // Support: IE <=9 - 11+
+ // focus() and blur() are asynchronous
+ notAsync = expectSync( this, type );
+ this[ type ]();
+ result = dataPriv.get( this, type );
+ if ( saved !== result || notAsync ) {
+ dataPriv.set( this, type, false );
+ } else {
+ result = {};
+ }
+ if ( saved !== result ) {
+
+ // Cancel the outer synthetic event
+ event.stopImmediatePropagation();
+ event.preventDefault();
+
+ // Support: Chrome 86+
+ // In Chrome, if an element having a focusout handler is blurred by
+ // clicking outside of it, it invokes the handler synchronously. If
+ // that handler calls `.remove()` on the element, the data is cleared,
+ // leaving `result` undefined. We need to guard against this.
+ return result && result.value;
+ }
+
+ // If this is an inner synthetic event for an event with a bubbling surrogate
+ // (focus or blur), assume that the surrogate already propagated from triggering the
+ // native event and prevent that from happening again here.
+ // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+ // bubbling surrogate propagates *after* the non-bubbling base), but that seems
+ // less bad than duplication.
+ } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+ event.stopPropagation();
+ }
+
+ // If this is a native event triggered above, everything is now in order
+ // Fire an inner synthetic event with the original arguments
+ } else if ( saved.length ) {
+
+ // ...and capture the result
+ dataPriv.set( this, type, {
+ value: jQuery.event.trigger(
+
+ // Support: IE <=9 - 11+
+ // Extend with the prototype to reset the above stopImmediatePropagation()
+ jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+ saved.slice( 1 ),
+ this
+ )
+ } );
+
+ // Abort handling of the native event
+ event.stopImmediatePropagation();
+ }
+ }
+ } );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+ // This "if" is needed for plain objects
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle );
+ }
+};
+
+jQuery.Event = function( src, props ) {
+
+ // Allow instantiation without the 'new' keyword
+ if ( !( this instanceof jQuery.Event ) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+
+ // Support: Android <=2.3 only
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Create target properties
+ // Support: Safari <=6 - 7 only
+ // Target should not be a text node (#504, #13143)
+ this.target = ( src.target && src.target.nodeType === 3 ) ?
+ src.target.parentNode :
+ src.target;
+
+ this.currentTarget = src.currentTarget;
+ this.relatedTarget = src.relatedTarget;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || Date.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ constructor: jQuery.Event,
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+ isSimulated: false,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+ altKey: true,
+ bubbles: true,
+ cancelable: true,
+ changedTouches: true,
+ ctrlKey: true,
+ detail: true,
+ eventPhase: true,
+ metaKey: true,
+ pageX: true,
+ pageY: true,
+ shiftKey: true,
+ view: true,
+ "char": true,
+ code: true,
+ charCode: true,
+ key: true,
+ keyCode: true,
+ button: true,
+ buttons: true,
+ clientX: true,
+ clientY: true,
+ offsetX: true,
+ offsetY: true,
+ pointerId: true,
+ pointerType: true,
+ screenX: true,
+ screenY: true,
+ targetTouches: true,
+ toElement: true,
+ touches: true,
+ which: true
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+ jQuery.event.special[ type ] = {
+
+ // Utilize native event if possible so blur/focus sequence is correct
+ setup: function() {
+
+ // Claim the first handler
+ // dataPriv.set( this, "focus", ... )
+ // dataPriv.set( this, "blur", ... )
+ leverageNative( this, type, expectSync );
+
+ // Return false to allow normal processing in the caller
+ return false;
+ },
+ trigger: function() {
+
+ // Force setup before trigger
+ leverageNative( this, type );
+
+ // Return non-false to allow normal event-path propagation
+ return true;
+ },
+
+ // Suppress native focus or blur as it's already being fired
+ // in leverageNative.
+ _default: function() {
+ return true;
+ },
+
+ delegateType: delegateType
+ };
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mouseenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+} );
+
+jQuery.fn.extend( {
+
+ on: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn );
+ },
+ one: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ?
+ handleObj.origType + "." + handleObj.namespace :
+ handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each( function() {
+ jQuery.event.remove( this, types, fn, selector );
+ } );
+ }
+} );
+
+
+var
+
+ // Support: IE <=10 - 11, Edge 12 - 13 only
+ // In IE/Edge using regex groups here causes severe slowdowns.
+ // See https://connect.microsoft.com/IE/feedback/details/1736512/
+ rnoInnerhtml = /<script|<style|<link/i,
+
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+ if ( nodeName( elem, "table" ) &&
+ nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+ return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+ }
+
+ return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+ elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+ return elem;
+}
+function restoreScript( elem ) {
+ if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+ elem.type = elem.type.slice( 5 );
+ } else {
+ elem.removeAttribute( "type" );
+ }
+
+ return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+ var i, l, type, pdataOld, udataOld, udataCur, events;
+
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if ( dataPriv.hasData( src ) ) {
+ pdataOld = dataPriv.get( src );
+ events = pdataOld.events;
+
+ if ( events ) {
+ dataPriv.remove( dest, "handle events" );
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if ( dataUser.hasData( src ) ) {
+ udataOld = dataUser.access( src );
+ udataCur = jQuery.extend( {}, udataOld );
+
+ dataUser.set( dest, udataCur );
+ }
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+ // Flatten any nested arrays
+ args = flat( args );
+
+ var fragment, first, scripts, hasScripts, node, doc,
+ i = 0,
+ l = collection.length,
+ iNoClone = l - 1,
+ value = args[ 0 ],
+ valueIsFunction = isFunction( value );
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( valueIsFunction ||
+ ( l > 1 && typeof value === "string" &&
+ !support.checkClone && rchecked.test( value ) ) ) {
+ return collection.each( function( index ) {
+ var self = collection.eq( index );
+ if ( valueIsFunction ) {
+ args[ 0 ] = value.call( this, index, self.html() );
+ }
+ domManip( self, args, callback, ignored );
+ } );
+ }
+
+ if ( l ) {
+ fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ // Require either new content or an interest in ignored elements to invoke the callback
+ if ( first || ignored ) {
+ scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item
+ // instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for ( ; i < l; i++ ) {
+ node = fragment;
+
+ if ( i !== iNoClone ) {
+ node = jQuery.clone( node, true, true );
+
+ // Keep references to cloned scripts for later restoration
+ if ( hasScripts ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( scripts, getAll( node, "script" ) );
+ }
+ }
+
+ callback.call( collection[ i ], node, i );
+ }
+
+ if ( hasScripts ) {
+ doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map( scripts, restoreScript );
+
+ // Evaluate executable scripts on first document insertion
+ for ( i = 0; i < hasScripts; i++ ) {
+ node = scripts[ i ];
+ if ( rscriptType.test( node.type || "" ) &&
+ !dataPriv.access( node, "globalEval" ) &&
+ jQuery.contains( doc, node ) ) {
+
+ if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {
+
+ // Optional AJAX dependency, but won't run scripts if not present
+ if ( jQuery._evalUrl && !node.noModule ) {
+ jQuery._evalUrl( node.src, {
+ nonce: node.nonce || node.getAttribute( "nonce" )
+ }, doc );
+ }
+ } else {
+ DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return collection;
+}
+
+function remove( elem, selector, keepData ) {
+ var node,
+ nodes = selector ? jQuery.filter( selector, elem ) : elem,
+ i = 0;
+
+ for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+ if ( !keepData && node.nodeType === 1 ) {
+ jQuery.cleanData( getAll( node ) );
+ }
+
+ if ( node.parentNode ) {
+ if ( keepData && isAttached( node ) ) {
+ setGlobalEval( getAll( node, "script" ) );
+ }
+ node.parentNode.removeChild( node );
+ }
+ }
+
+ return elem;
+}
+
+jQuery.extend( {
+ htmlPrefilter: function( html ) {
+ return html;
+ },
+
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode( true ),
+ inPage = isAttached( elem );
+
+ // Fix IE cloning issues
+ if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+ !jQuery.isXMLDoc( elem ) ) {
+
+ // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll( clone );
+ srcElements = getAll( elem );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ fixInput( srcElements[ i ], destElements[ i ] );
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ if ( deepDataAndEvents ) {
+ srcElements = srcElements || getAll( elem );
+ destElements = destElements || getAll( clone );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ cleanData: function( elems ) {
+ var data, elem, type,
+ special = jQuery.event.special,
+ i = 0;
+
+ for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+ if ( acceptData( elem ) ) {
+ if ( ( data = elem[ dataPriv.expando ] ) ) {
+ if ( data.events ) {
+ for ( type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+
+ // Support: Chrome <=35 - 45+
+ // Assign undefined instead of using delete, see Data#remove
+ elem[ dataPriv.expando ] = undefined;
+ }
+ if ( elem[ dataUser.expando ] ) {
+
+ // Support: Chrome <=35 - 45+
+ // Assign undefined instead of using delete, see Data#remove
+ elem[ dataUser.expando ] = undefined;
+ }
+ }
+ }
+ }
+} );
+
+jQuery.fn.extend( {
+ detach: function( selector ) {
+ return remove( this, selector, true );
+ },
+
+ remove: function( selector ) {
+ return remove( this, selector );
+ },
+
+ text: function( value ) {
+ return access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().each( function() {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ this.textContent = value;
+ }
+ } );
+ }, null, value, arguments.length );
+ },
+
+ append: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.appendChild( elem );
+ }
+ } );
+ },
+
+ prepend: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.insertBefore( elem, target.firstChild );
+ }
+ } );
+ },
+
+ before: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this );
+ }
+ } );
+ },
+
+ after: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ }
+ } );
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; ( elem = this[ i ] ) != null; i++ ) {
+ if ( elem.nodeType === 1 ) {
+
+ // Prevent memory leaks
+ jQuery.cleanData( getAll( elem, false ) );
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function() {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ } );
+ },
+
+ html: function( value ) {
+ return access( this, function( value ) {
+ var elem = this[ 0 ] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined && elem.nodeType === 1 ) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+ value = jQuery.htmlPrefilter( value );
+
+ try {
+ for ( ; i < l; i++ ) {
+ elem = this[ i ] || {};
+
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem, false ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch ( e ) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function() {
+ var ignored = [];
+
+ // Make the changes, replacing each non-ignored context element with the new content
+ return domManip( this, arguments, function( elem ) {
+ var parent = this.parentNode;
+
+ if ( jQuery.inArray( this, ignored ) < 0 ) {
+ jQuery.cleanData( getAll( this ) );
+ if ( parent ) {
+ parent.replaceChild( elem, this );
+ }
+ }
+
+ // Force callback invocation
+ }, ignored );
+ }
+} );
+
+jQuery.each( {
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1,
+ i = 0;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone( true );
+ jQuery( insert[ i ] )[ original ]( elems );
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // .get() because push.apply(_, arraylike) throws on ancient WebKit
+ push.apply( ret, elems.get() );
+ }
+
+ return this.pushStack( ret );
+ };
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+ // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ var view = elem.ownerDocument.defaultView;
+
+ if ( !view || !view.opener ) {
+ view = window;
+ }
+
+ return view.getComputedStyle( elem );
+ };
+
+var swap = function( elem, options, callback ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+};
+
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+ // Executing both pixelPosition & boxSizingReliable tests require only one layout
+ // so they're executed at the same time to save the second computation.
+ function computeStyleTests() {
+
+ // This is a singleton, we need to execute it only once
+ if ( !div ) {
+ return;
+ }
+
+ container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+ "margin-top:1px;padding:0;border:0";
+ div.style.cssText =
+ "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+ "margin:auto;border:1px;padding:1px;" +
+ "width:60%;top:1%";
+ documentElement.appendChild( container ).appendChild( div );
+
+ var divStyle = window.getComputedStyle( div );
+ pixelPositionVal = divStyle.top !== "1%";
+
+ // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+ reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+ // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+ // Some styles come back with percentage values, even though they shouldn't
+ div.style.right = "60%";
+ pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+ // Support: IE 9 - 11 only
+ // Detect misreporting of content dimensions for box-sizing:border-box elements
+ boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+ // Support: IE 9 only
+ // Detect overflow:scroll screwiness (gh-3699)
+ // Support: Chrome <=64
+ // Don't get tricked when zoom affects offsetWidth (gh-4029)
+ div.style.position = "absolute";
+ scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
+
+ documentElement.removeChild( container );
+
+ // Nullify the div so it wouldn't be stored in the memory and
+ // it will also be a sign that checks already performed
+ div = null;
+ }
+
+ function roundPixelMeasures( measure ) {
+ return Math.round( parseFloat( measure ) );
+ }
+
+ var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+ reliableTrDimensionsVal, reliableMarginLeftVal,
+ container = document.createElement( "div" ),
+ div = document.createElement( "div" );
+
+ // Finish early in limited (non-browser) environments
+ if ( !div.style ) {
+ return;
+ }
+
+ // Support: IE <=9 - 11 only
+ // Style of cloned element affects source element cloned (#8908)
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ jQuery.extend( support, {
+ boxSizingReliable: function() {
+ computeStyleTests();
+ return boxSizingReliableVal;
+ },
+ pixelBoxStyles: function() {
+ computeStyleTests();
+ return pixelBoxStylesVal;
+ },
+ pixelPosition: function() {
+ computeStyleTests();
+ return pixelPositionVal;
+ },
+ reliableMarginLeft: function() {
+ computeStyleTests();
+ return reliableMarginLeftVal;
+ },
+ scrollboxSize: function() {
+ computeStyleTests();
+ return scrollboxSizeVal;
+ },
+
+ // Support: IE 9 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Behavior in IE 9 is more subtle than in newer versions & it passes
+ // some versions of this test; make sure not to make it pass there!
+ //
+ // Support: Firefox 70+
+ // Only Firefox includes border widths
+ // in computed dimensions. (gh-4529)
+ reliableTrDimensions: function() {
+ var table, tr, trChild, trStyle;
+ if ( reliableTrDimensionsVal == null ) {
+ table = document.createElement( "table" );
+ tr = document.createElement( "tr" );
+ trChild = document.createElement( "div" );
+
+ table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
+ tr.style.cssText = "border:1px solid";
+
+ // Support: Chrome 86+
+ // Height set through cssText does not get applied.
+ // Computed height then comes back as 0.
+ tr.style.height = "1px";
+ trChild.style.height = "9px";
+
+ // Support: Android 8 Chrome 86+
+ // In our bodyBackground.html iframe,
+ // display for all div elements is set to "inline",
+ // which causes a problem only in Android 8 Chrome 86.
+ // Ensuring the div is display: block
+ // gets around this issue.
+ trChild.style.display = "block";
+
+ documentElement
+ .appendChild( table )
+ .appendChild( tr )
+ .appendChild( trChild );
+
+ trStyle = window.getComputedStyle( tr );
+ reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
+ parseInt( trStyle.borderTopWidth, 10 ) +
+ parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
+
+ documentElement.removeChild( table );
+ }
+ return reliableTrDimensionsVal;
+ }
+ } );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+ var width, minWidth, maxWidth, ret,
+
+ // Support: Firefox 51+
+ // Retrieving style before computed somehow
+ // fixes an issue with getting wrong values
+ // on detached elements
+ style = elem.style;
+
+ computed = computed || getStyles( elem );
+
+ // getPropertyValue is needed for:
+ // .css('filter') (IE 9 only, #12537)
+ // .css('--customProperty) (#3144)
+ if ( computed ) {
+ ret = computed.getPropertyValue( name ) || computed[ name ];
+
+ if ( ret === "" && !isAttached( elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Android Browser returns percentage for some values,
+ // but width seems to be reliably pixels.
+ // This is against the CSSOM draft spec:
+ // https://drafts.csswg.org/cssom/#resolved-values
+ if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret !== undefined ?
+
+ // Support: IE <=9 - 11 only
+ // IE returns zIndex value as an integer.
+ ret + "" :
+ ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function() {
+ if ( conditionFn() ) {
+
+ // Hook not needed (or it's not possible to use it due
+ // to missing dependency), remove it.
+ delete this.get;
+ return;
+ }
+
+ // Hook needed; redefine it so that the support test is not executed again.
+ return ( this.get = hookFn ).apply( this, arguments );
+ }
+ };
+}
+
+
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+ emptyStyle = document.createElement( "div" ).style,
+ vendorProps = {};
+
+// Return a vendor-prefixed property or undefined
+function vendorPropName( name ) {
+
+ // Check for vendor prefixed names
+ var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in emptyStyle ) {
+ return name;
+ }
+ }
+}
+
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
+function finalPropName( name ) {
+ var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+ if ( final ) {
+ return final;
+ }
+ if ( name in emptyStyle ) {
+ return name;
+ }
+ return vendorProps[ name ] = vendorPropName( name ) || name;
+}
+
+
+var
+
+ // Swappable if display is none or starts with table
+ // except "table", "table-cell", or "table-caption"
+ // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rcustomProp = /^--/,
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ };
+
+function setPositiveNumber( _elem, value, subtract ) {
+
+ // Any relative (+/-) values have already been
+ // normalized at this point
+ var matches = rcssNum.exec( value );
+ return matches ?
+
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+ value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+ var i = dimension === "width" ? 1 : 0,
+ extra = 0,
+ delta = 0;
+
+ // Adjustment may not be necessary
+ if ( box === ( isBorderBox ? "border" : "content" ) ) {
+ return 0;
+ }
+
+ for ( ; i < 4; i += 2 ) {
+
+ // Both box models exclude margin
+ if ( box === "margin" ) {
+ delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+ }
+
+ // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+ if ( !isBorderBox ) {
+
+ // Add padding
+ delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+ // For "border" or "margin", add border
+ if ( box !== "padding" ) {
+ delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+ // But still keep track of it otherwise
+ } else {
+ extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+
+ // If we get here with a border-box (content + padding + border), we're seeking "content" or
+ // "padding" or "margin"
+ } else {
+
+ // For "content", subtract padding
+ if ( box === "content" ) {
+ delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+ }
+
+ // For "content" or "padding", subtract border
+ if ( box !== "margin" ) {
+ delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ }
+ }
+
+ // Account for positive content-box scroll gutter when requested by providing computedVal
+ if ( !isBorderBox && computedVal >= 0 ) {
+
+ // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+ // Assuming integer scroll gutter, subtract the rest and round down
+ delta += Math.max( 0, Math.ceil(
+ elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+ computedVal -
+ delta -
+ extra -
+ 0.5
+
+ // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+ // Use an explicit zero to avoid NaN (gh-3964)
+ ) ) || 0;
+ }
+
+ return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+ // Start with computed style
+ var styles = getStyles( elem ),
+
+ // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
+ // Fake content-box until we know it's needed to know the true value.
+ boxSizingNeeded = !support.boxSizingReliable() || extra,
+ isBorderBox = boxSizingNeeded &&
+ jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ valueIsBorderBox = isBorderBox,
+
+ val = curCSS( elem, dimension, styles ),
+ offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
+
+ // Support: Firefox <=54
+ // Return a confounding non-pixel value or feign ignorance, as appropriate.
+ if ( rnumnonpx.test( val ) ) {
+ if ( !extra ) {
+ return val;
+ }
+ val = "auto";
+ }
+
+
+ // Support: IE 9 - 11 only
+ // Use offsetWidth/offsetHeight for when box sizing is unreliable.
+ // In those cases, the computed value can be trusted to be border-box.
+ if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+ // Support: IE 10 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Interestingly, in some cases IE 9 doesn't suffer from this issue.
+ !support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+ // Fall back to offsetWidth/offsetHeight when value is "auto"
+ // This happens for inline elements with no explicit setting (gh-3571)
+ val === "auto" ||
+
+ // Support: Android <=4.1 - 4.3 only
+ // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+ !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+ // Make sure the element is visible & connected
+ elem.getClientRects().length ) {
+
+ isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+ // Where available, offsetWidth/offsetHeight approximate border box dimensions.
+ // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
+ // retrieved value as a content box dimension.
+ valueIsBorderBox = offsetProp in elem;
+ if ( valueIsBorderBox ) {
+ val = elem[ offsetProp ];
+ }
+ }
+
+ // Normalize "" and auto
+ val = parseFloat( val ) || 0;
+
+ // Adjust for the element's box model
+ return ( val +
+ boxModelAdjustment(
+ elem,
+ dimension,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles,
+
+ // Provide the current computed size to request scroll gutter calculation (gh-3589)
+ val
+ )
+ ) + "px";
+}
+
+jQuery.extend( {
+
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity" );
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "animationIterationCount": true,
+ "columnCount": true,
+ "fillOpacity": true,
+ "flexGrow": true,
+ "flexShrink": true,
+ "fontWeight": true,
+ "gridArea": true,
+ "gridColumn": true,
+ "gridColumnEnd": true,
+ "gridColumnStart": true,
+ "gridRow": true,
+ "gridRowEnd": true,
+ "gridRowStart": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {},
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = camelCase( name ),
+ isCustomProp = rcustomProp.test( name ),
+ style = elem.style;
+
+ // Make sure that we're working with the right name. We don't
+ // want to query the value if it is a CSS custom property
+ // since they are user-defined.
+ if ( !isCustomProp ) {
+ name = finalPropName( origName );
+ }
+
+ // Gets hook for the prefixed version, then unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // Convert "+=" or "-=" to relative numbers (#7345)
+ if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+ value = adjustCSS( elem, name, ret );
+
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that null and NaN values aren't set (#7116)
+ if ( value == null || value !== value ) {
+ return;
+ }
+
+ // If a number was passed in, add the unit (except for certain CSS properties)
+ // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
+ // "px" to a few hardcoded values.
+ if ( type === "number" && !isCustomProp ) {
+ value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+ }
+
+ // background-* props affect original clone's values
+ if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+ style[ name ] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !( "set" in hooks ) ||
+ ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+ if ( isCustomProp ) {
+ style.setProperty( name, value );
+ } else {
+ style[ name ] = value;
+ }
+ }
+
+ } else {
+
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks &&
+ ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra, styles ) {
+ var val, num, hooks,
+ origName = camelCase( name ),
+ isCustomProp = rcustomProp.test( name );
+
+ // Make sure that we're working with the right name. We don't
+ // want to modify the value if it is a CSS custom property
+ // since they are user-defined.
+ if ( !isCustomProp ) {
+ name = finalPropName( origName );
+ }
+
+ // Try prefixed name followed by the unprefixed name
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks ) {
+ val = hooks.get( elem, true, extra );
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if ( val === undefined ) {
+ val = curCSS( elem, name, styles );
+ }
+
+ // Convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Make numeric if forced or a qualifier was provided and val looks numeric
+ if ( extra === "" || extra ) {
+ num = parseFloat( val );
+ return extra === true || isFinite( num ) ? num || 0 : val;
+ }
+
+ return val;
+ }
+} );
+
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
+ jQuery.cssHooks[ dimension ] = {
+ get: function( elem, computed, extra ) {
+ if ( computed ) {
+
+ // Certain elements can have dimension info if we invisibly show them
+ // but it must have a current display style that would benefit
+ return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+ // Support: Safari 8+
+ // Table columns in Safari have non-zero offsetWidth & zero
+ // getBoundingClientRect().width unless display is changed.
+ // Support: IE <=11 only
+ // Running getBoundingClientRect on a disconnected node
+ // in IE throws an error.
+ ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+ swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, dimension, extra );
+ } ) :
+ getWidthOrHeight( elem, dimension, extra );
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ var matches,
+ styles = getStyles( elem ),
+
+ // Only read styles.position if the test has a chance to fail
+ // to avoid forcing a reflow.
+ scrollboxSizeBuggy = !support.scrollboxSize() &&
+ styles.position === "absolute",
+
+ // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
+ boxSizingNeeded = scrollboxSizeBuggy || extra,
+ isBorderBox = boxSizingNeeded &&
+ jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ subtract = extra ?
+ boxModelAdjustment(
+ elem,
+ dimension,
+ extra,
+ isBorderBox,
+ styles
+ ) :
+ 0;
+
+ // Account for unreliable border-box dimensions by comparing offset* to computed and
+ // faking a content-box to get border and padding (gh-3699)
+ if ( isBorderBox && scrollboxSizeBuggy ) {
+ subtract -= Math.ceil(
+ elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+ parseFloat( styles[ dimension ] ) -
+ boxModelAdjustment( elem, dimension, "border", false, styles ) -
+ 0.5
+ );
+ }
+
+ // Convert to pixels if value adjustment is needed
+ if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+ ( matches[ 3 ] || "px" ) !== "px" ) {
+
+ elem.style[ dimension ] = value;
+ value = jQuery.css( elem, dimension );
+ }
+
+ return setPositiveNumber( elem, value, subtract );
+ }
+ };
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+ function( elem, computed ) {
+ if ( computed ) {
+ return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+ elem.getBoundingClientRect().left -
+ swap( elem, { marginLeft: 0 }, function() {
+ return elem.getBoundingClientRect().left;
+ } )
+ ) + "px";
+ }
+ }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+ margin: "",
+ padding: "",
+ border: "Width"
+}, function( prefix, suffix ) {
+ jQuery.cssHooks[ prefix + suffix ] = {
+ expand: function( value ) {
+ var i = 0,
+ expanded = {},
+
+ // Assumes a single number if not a string
+ parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+ for ( ; i < 4; i++ ) {
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+ }
+
+ return expanded;
+ }
+ };
+
+ if ( prefix !== "margin" ) {
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+ }
+} );
+
+jQuery.fn.extend( {
+ css: function( name, value ) {
+ return access( this, function( elem, name, value ) {
+ var styles, len,
+ map = {},
+ i = 0;
+
+ if ( Array.isArray( name ) ) {
+ styles = getStyles( elem );
+ len = name.length;
+
+ for ( ; i < len; i++ ) {
+ map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ }
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+ return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+ constructor: Tween,
+ init: function( elem, options, prop, end, easing, unit ) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || jQuery.easing._default;
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[ this.prop ];
+
+ return hooks && hooks.get ?
+ hooks.get( this ) :
+ Tween.propHooks._default.get( this );
+ },
+ run: function( percent ) {
+ var eased,
+ hooks = Tween.propHooks[ this.prop ];
+
+ if ( this.options.duration ) {
+ this.pos = eased = jQuery.easing[ this.easing ](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ if ( hooks && hooks.set ) {
+ hooks.set( this );
+ } else {
+ Tween.propHooks._default.set( this );
+ }
+ return this;
+ }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+ _default: {
+ get: function( tween ) {
+ var result;
+
+ // Use a property on the element directly when it is not a DOM element,
+ // or when there is no matching style property that exists.
+ if ( tween.elem.nodeType !== 1 ||
+ tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+ return tween.elem[ tween.prop ];
+ }
+
+ // Passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails.
+ // Simple values such as "10px" are parsed to Float;
+ // complex values such as "rotate(1rad)" are returned as-is.
+ result = jQuery.css( tween.elem, tween.prop, "" );
+
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function( tween ) {
+
+ // Use step hook for back compat.
+ // Use cssHook if its there.
+ // Use .style if available and use plain properties where available.
+ if ( jQuery.fx.step[ tween.prop ] ) {
+ jQuery.fx.step[ tween.prop ]( tween );
+ } else if ( tween.elem.nodeType === 1 && (
+ jQuery.cssHooks[ tween.prop ] ||
+ tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
+ jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+ } else {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+ }
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function( tween ) {
+ if ( tween.elem.nodeType && tween.elem.parentNode ) {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+};
+
+jQuery.easing = {
+ linear: function( p ) {
+ return p;
+ },
+ swing: function( p ) {
+ return 0.5 - Math.cos( p * Math.PI ) / 2;
+ },
+ _default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+ fxNow, inProgress,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rrun = /queueHooks$/;
+
+function schedule() {
+ if ( inProgress ) {
+ if ( document.hidden === false && window.requestAnimationFrame ) {
+ window.requestAnimationFrame( schedule );
+ } else {
+ window.setTimeout( schedule, jQuery.fx.interval );
+ }
+
+ jQuery.fx.tick();
+ }
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ window.setTimeout( function() {
+ fxNow = undefined;
+ } );
+ return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+ var which,
+ i = 0,
+ attrs = { height: type };
+
+ // If we include width, step value is 1 to do all cssExpand values,
+ // otherwise step value is 2 to skip over Left and Right
+ includeWidth = includeWidth ? 1 : 0;
+ for ( ; i < 4; i += 2 - includeWidth ) {
+ which = cssExpand[ i ];
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+ }
+
+ if ( includeWidth ) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+}
+
+function createTween( value, prop, animation ) {
+ var tween,
+ collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+ index = 0,
+ length = collection.length;
+ for ( ; index < length; index++ ) {
+ if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+ // We're done with this property
+ return tween;
+ }
+ }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+ var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+ isBox = "width" in props || "height" in props,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHiddenWithinTree( elem ),
+ dataShow = dataPriv.get( elem, "fxshow" );
+
+ // Queue-skipping animations hijack the fx hooks
+ if ( !opts.queue ) {
+ hooks = jQuery._queueHooks( elem, "fx" );
+ if ( hooks.unqueued == null ) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if ( !hooks.unqueued ) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always( function() {
+
+ // Ensure the complete handler is called before this completes
+ anim.always( function() {
+ hooks.unqueued--;
+ if ( !jQuery.queue( elem, "fx" ).length ) {
+ hooks.empty.fire();
+ }
+ } );
+ } );
+ }
+
+ // Detect show/hide animations
+ for ( prop in props ) {
+ value = props[ prop ];
+ if ( rfxtypes.test( value ) ) {
+ delete props[ prop ];
+ toggle = toggle || value === "toggle";
+ if ( value === ( hidden ? "hide" : "show" ) ) {
+
+ // Pretend to be hidden if this is a "show" and
+ // there is still data from a stopped show/hide
+ if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+ hidden = true;
+
+ // Ignore all other no-op show/hide data
+ } else {
+ continue;
+ }
+ }
+ orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+ }
+ }
+
+ // Bail out if this is a no-op like .hide().hide()
+ propTween = !jQuery.isEmptyObject( props );
+ if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+ return;
+ }
+
+ // Restrict "overflow" and "display" styles during box animations
+ if ( isBox && elem.nodeType === 1 ) {
+
+ // Support: IE <=9 - 11, Edge 12 - 15
+ // Record all 3 overflow attributes because IE does not infer the shorthand
+ // from identically-valued overflowX and overflowY and Edge just mirrors
+ // the overflowX value there.
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+ // Identify a display type, preferring old show/hide data over the CSS cascade
+ restoreDisplay = dataShow && dataShow.display;
+ if ( restoreDisplay == null ) {
+ restoreDisplay = dataPriv.get( elem, "display" );
+ }
+ display = jQuery.css( elem, "display" );
+ if ( display === "none" ) {
+ if ( restoreDisplay ) {
+ display = restoreDisplay;
+ } else {
+
+ // Get nonempty value(s) by temporarily forcing visibility
+ showHide( [ elem ], true );
+ restoreDisplay = elem.style.display || restoreDisplay;
+ display = jQuery.css( elem, "display" );
+ showHide( [ elem ] );
+ }
+ }
+
+ // Animate inline elements as inline-block
+ if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+ if ( jQuery.css( elem, "float" ) === "none" ) {
+
+ // Restore the original display value at the end of pure show/hide animations
+ if ( !propTween ) {
+ anim.done( function() {
+ style.display = restoreDisplay;
+ } );
+ if ( restoreDisplay == null ) {
+ display = style.display;
+ restoreDisplay = display === "none" ? "" : display;
+ }
+ }
+ style.display = "inline-block";
+ }
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ anim.always( function() {
+ style.overflow = opts.overflow[ 0 ];
+ style.overflowX = opts.overflow[ 1 ];
+ style.overflowY = opts.overflow[ 2 ];
+ } );
+ }
+
+ // Implement show/hide animations
+ propTween = false;
+ for ( prop in orig ) {
+
+ // General show/hide setup for this element animation
+ if ( !propTween ) {
+ if ( dataShow ) {
+ if ( "hidden" in dataShow ) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+ }
+
+ // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+ if ( toggle ) {
+ dataShow.hidden = !hidden;
+ }
+
+ // Show elements before animating them
+ if ( hidden ) {
+ showHide( [ elem ], true );
+ }
+
+ /* eslint-disable no-loop-func */
+
+ anim.done( function() {
+
+ /* eslint-enable no-loop-func */
+
+ // The final step of a "hide" animation is actually hiding the element
+ if ( !hidden ) {
+ showHide( [ elem ] );
+ }
+ dataPriv.remove( elem, "fxshow" );
+ for ( prop in orig ) {
+ jQuery.style( elem, prop, orig[ prop ] );
+ }
+ } );
+ }
+
+ // Per-property setup
+ propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+ if ( !( prop in dataShow ) ) {
+ dataShow[ prop ] = propTween.start;
+ if ( hidden ) {
+ propTween.end = propTween.start;
+ propTween.start = 0;
+ }
+ }
+ }
+}
+
+function propFilter( props, specialEasing ) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for ( index in props ) {
+ name = camelCase( index );
+ easing = specialEasing[ name ];
+ value = props[ index ];
+ if ( Array.isArray( value ) ) {
+ easing = value[ 1 ];
+ value = props[ index ] = value[ 0 ];
+ }
+
+ if ( index !== name ) {
+ props[ name ] = value;
+ delete props[ index ];
+ }
+
+ hooks = jQuery.cssHooks[ name ];
+ if ( hooks && "expand" in hooks ) {
+ value = hooks.expand( value );
+ delete props[ name ];
+
+ // Not quite $.extend, this won't overwrite existing keys.
+ // Reusing 'index' because we have the correct "name"
+ for ( index in value ) {
+ if ( !( index in props ) ) {
+ props[ index ] = value[ index ];
+ specialEasing[ index ] = easing;
+ }
+ }
+ } else {
+ specialEasing[ name ] = easing;
+ }
+ }
+}
+
+function Animation( elem, properties, options ) {
+ var result,
+ stopped,
+ index = 0,
+ length = Animation.prefilters.length,
+ deferred = jQuery.Deferred().always( function() {
+
+ // Don't match elem in the :animated selector
+ delete tick.elem;
+ } ),
+ tick = function() {
+ if ( stopped ) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+ // Support: Android 2.3 only
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for ( ; index < length; index++ ) {
+ animation.tweens[ index ].run( percent );
+ }
+
+ deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+ // If there's more to do, yield
+ if ( percent < 1 && length ) {
+ return remaining;
+ }
+
+ // If this was an empty animation, synthesize a final progress notification
+ if ( !length ) {
+ deferred.notifyWith( elem, [ animation, 1, 0 ] );
+ }
+
+ // Resolve the animation and report its conclusion
+ deferred.resolveWith( elem, [ animation ] );
+ return false;
+ },
+ animation = deferred.promise( {
+ elem: elem,
+ props: jQuery.extend( {}, properties ),
+ opts: jQuery.extend( true, {
+ specialEasing: {},
+ easing: jQuery.easing._default
+ }, options ),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function( prop, end ) {
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
+ animation.tweens.push( tween );
+ return tween;
+ },
+ stop: function( gotoEnd ) {
+ var index = 0,
+
+ // If we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if ( stopped ) {
+ return this;
+ }
+ stopped = true;
+ for ( ; index < length; index++ ) {
+ animation.tweens[ index ].run( 1 );
+ }
+
+ // Resolve when we played the last frame; otherwise, reject
+ if ( gotoEnd ) {
+ deferred.notifyWith( elem, [ animation, 1, 0 ] );
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
+ } else {
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
+ }
+ return this;
+ }
+ } ),
+ props = animation.props;
+
+ propFilter( props, animation.opts.specialEasing );
+
+ for ( ; index < length; index++ ) {
+ result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+ if ( result ) {
+ if ( isFunction( result.stop ) ) {
+ jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+ result.stop.bind( result );
+ }
+ return result;
+ }
+ }
+
+ jQuery.map( props, createTween, animation );
+
+ if ( isFunction( animation.opts.start ) ) {
+ animation.opts.start.call( elem, animation );
+ }
+
+ // Attach callbacks from options
+ animation
+ .progress( animation.opts.progress )
+ .done( animation.opts.done, animation.opts.complete )
+ .fail( animation.opts.fail )
+ .always( animation.opts.always );
+
+ jQuery.fx.timer(
+ jQuery.extend( tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ } )
+ );
+
+ return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+ tweeners: {
+ "*": [ function( prop, value ) {
+ var tween = this.createTween( prop, value );
+ adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+ return tween;
+ } ]
+ },
+
+ tweener: function( props, callback ) {
+ if ( isFunction( props ) ) {
+ callback = props;
+ props = [ "*" ];
+ } else {
+ props = props.match( rnothtmlwhite );
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for ( ; index < length; index++ ) {
+ prop = props[ index ];
+ Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+ Animation.tweeners[ prop ].unshift( callback );
+ }
+ },
+
+ prefilters: [ defaultPrefilter ],
+
+ prefilter: function( callback, prepend ) {
+ if ( prepend ) {
+ Animation.prefilters.unshift( callback );
+ } else {
+ Animation.prefilters.push( callback );
+ }
+ }
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !isFunction( easing ) && easing
+ };
+
+ // Go to the end state if fx are off
+ if ( jQuery.fx.off ) {
+ opt.duration = 0;
+
+ } else {
+ if ( typeof opt.duration !== "number" ) {
+ if ( opt.duration in jQuery.fx.speeds ) {
+ opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+ } else {
+ opt.duration = jQuery.fx.speeds._default;
+ }
+ }
+ }
+
+ // Normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function() {
+ if ( isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ }
+ };
+
+ return opt;
+};
+
+jQuery.fn.extend( {
+ fadeTo: function( speed, to, easing, callback ) {
+
+ // Show any hidden elements after setting opacity to 0
+ return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+ // Animate to the value specified
+ .end().animate( { opacity: to }, speed, easing, callback );
+ },
+ animate: function( prop, speed, easing, callback ) {
+ var empty = jQuery.isEmptyObject( prop ),
+ optall = jQuery.speed( speed, easing, callback ),
+ doAnimation = function() {
+
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+ // Empty animations, or finishing resolves immediately
+ if ( empty || dataPriv.get( this, "finish" ) ) {
+ anim.stop( true );
+ }
+ };
+
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+ stop: function( type, clearQueue, gotoEnd ) {
+ var stopQueue = function( hooks ) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop( gotoEnd );
+ };
+
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each( function() {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = dataPriv.get( this );
+
+ if ( index ) {
+ if ( data[ index ] && data[ index ].stop ) {
+ stopQueue( data[ index ] );
+ }
+ } else {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+ stopQueue( data[ index ] );
+ }
+ }
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this &&
+ ( type == null || timers[ index ].queue === type ) ) {
+
+ timers[ index ].anim.stop( gotoEnd );
+ dequeue = false;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Start the next in the queue if the last step wasn't forced.
+ // Timers currently will call their complete callbacks, which
+ // will dequeue but only if they were gotoEnd.
+ if ( dequeue || !gotoEnd ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ finish: function( type ) {
+ if ( type !== false ) {
+ type = type || "fx";
+ }
+ return this.each( function() {
+ var index,
+ data = dataPriv.get( this ),
+ queue = data[ type + "queue" ],
+ hooks = data[ type + "queueHooks" ],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // Enable finishing flag on private data
+ data.finish = true;
+
+ // Empty the queue first
+ jQuery.queue( this, type, [] );
+
+ if ( hooks && hooks.stop ) {
+ hooks.stop.call( this, true );
+ }
+
+ // Look for any active animations, and finish them
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+ timers[ index ].anim.stop( true );
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Look for any animations in the old queue and finish them
+ for ( index = 0; index < length; index++ ) {
+ if ( queue[ index ] && queue[ index ].finish ) {
+ queue[ index ].finish.call( this );
+ }
+ }
+
+ // Turn off finishing flag
+ delete data.finish;
+ } );
+ }
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
+ var cssFn = jQuery.fn[ name ];
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply( this, arguments ) :
+ this.animate( genFx( name, true ), speed, easing, callback );
+ };
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+ slideDown: genFx( "show" ),
+ slideUp: genFx( "hide" ),
+ slideToggle: genFx( "toggle" ),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+ var timer,
+ i = 0,
+ timers = jQuery.timers;
+
+ fxNow = Date.now();
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+
+ // Run the timer and safely remove it when done (allowing for external removal)
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+ jQuery.timers.push( timer );
+ jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+ if ( inProgress ) {
+ return;
+ }
+
+ inProgress = true;
+ schedule();
+};
+
+jQuery.fx.stop = function() {
+ inProgress = null;
+};
+
+jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+
+ // Default speed
+ _default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = window.setTimeout( next, time );
+ hooks.stop = function() {
+ window.clearTimeout( timeout );
+ };
+ } );
+};
+
+
+( function() {
+ var input = document.createElement( "input" ),
+ select = document.createElement( "select" ),
+ opt = select.appendChild( document.createElement( "option" ) );
+
+ input.type = "checkbox";
+
+ // Support: Android <=4.3 only
+ // Default value for a checkbox should be "on"
+ support.checkOn = input.value !== "";
+
+ // Support: IE <=11 only
+ // Must access selectedIndex to make default options select
+ support.optSelected = opt.selected;
+
+ // Support: IE <=11 only
+ // An input loses its value after becoming a radio
+ input = document.createElement( "input" );
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+ attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+ attr: function( name, value ) {
+ return access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each( function() {
+ jQuery.removeAttr( this, name );
+ } );
+ }
+} );
+
+jQuery.extend( {
+ attr: function( elem, name, value ) {
+ var ret, hooks,
+ nType = elem.nodeType;
+
+ // Don't get/set attributes on text, comment and attribute nodes
+ if ( nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === "undefined" ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ // Attribute hooks are determined by the lowercase version
+ // Grab necessary hook if one is defined
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+ hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+ ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+ }
+
+ if ( value !== undefined ) {
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return;
+ }
+
+ if ( hooks && "set" in hooks &&
+ ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+ return ret;
+ }
+
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+ return ret;
+ }
+
+ ret = jQuery.find.attr( elem, name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ? undefined : ret;
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !support.radioValue && value === "radio" &&
+ nodeName( elem, "input" ) ) {
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var name,
+ i = 0,
+
+ // Attribute names can contain non-HTML whitespace characters
+ // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+ attrNames = value && value.match( rnothtmlwhite );
+
+ if ( attrNames && elem.nodeType === 1 ) {
+ while ( ( name = attrNames[ i++ ] ) ) {
+ elem.removeAttribute( name );
+ }
+ }
+ }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ elem.setAttribute( name, name );
+ }
+ return name;
+ }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
+ var getter = attrHandle[ name ] || jQuery.find.attr;
+
+ attrHandle[ name ] = function( elem, name, isXML ) {
+ var ret, handle,
+ lowercaseName = name.toLowerCase();
+
+ if ( !isXML ) {
+
+ // Avoid an infinite loop by temporarily removing this function from the getter
+ handle = attrHandle[ lowercaseName ];
+ attrHandle[ lowercaseName ] = ret;
+ ret = getter( elem, name, isXML ) != null ?
+ lowercaseName :
+ null;
+ attrHandle[ lowercaseName ] = handle;
+ }
+ return ret;
+ };
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+ rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+ prop: function( name, value ) {
+ return access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ return this.each( function() {
+ delete this[ jQuery.propFix[ name ] || name ];
+ } );
+ }
+} );
+
+jQuery.extend( {
+ prop: function( elem, name, value ) {
+ var ret, hooks,
+ nType = elem.nodeType;
+
+ // Don't get/set properties on text, comment and attribute nodes
+ if ( nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks &&
+ ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+ return ret;
+ }
+
+ return ( elem[ name ] = value );
+ }
+
+ if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+ return ret;
+ }
+
+ return elem[ name ];
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+
+ // Support: IE <=9 - 11 only
+ // elem.tabIndex doesn't always return the
+ // correct value when it hasn't been explicitly set
+ // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ // Use proper attribute retrieval(#12072)
+ var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+ if ( tabindex ) {
+ return parseInt( tabindex, 10 );
+ }
+
+ if (
+ rfocusable.test( elem.nodeName ) ||
+ rclickable.test( elem.nodeName ) &&
+ elem.href
+ ) {
+ return 0;
+ }
+
+ return -1;
+ }
+ }
+ },
+
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ }
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+
+ /* eslint no-unused-expressions: "off" */
+
+ var parent = elem.parentNode;
+ if ( parent && parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ return null;
+ },
+ set: function( elem ) {
+
+ /* eslint no-unused-expressions: "off" */
+
+ var parent = elem.parentNode;
+ if ( parent ) {
+ parent.selectedIndex;
+
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+ };
+}
+
+jQuery.each( [
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+], function() {
+ jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+ // Strip and collapse whitespace according to HTML spec
+ // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+ function stripAndCollapse( value ) {
+ var tokens = value.match( rnothtmlwhite ) || [];
+ return tokens.join( " " );
+ }
+
+
+function getClass( elem ) {
+ return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+ if ( Array.isArray( value ) ) {
+ return value;
+ }
+ if ( typeof value === "string" ) {
+ return value.match( rnothtmlwhite ) || [];
+ }
+ return [];
+}
+
+jQuery.fn.extend( {
+ addClass: function( value ) {
+ var classes, elem, cur, curValue, clazz, j, finalValue,
+ i = 0;
+
+ if ( isFunction( value ) ) {
+ return this.each( function( j ) {
+ jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+ } );
+ }
+
+ classes = classesToArray( value );
+
+ if ( classes.length ) {
+ while ( ( elem = this[ i++ ] ) ) {
+ curValue = getClass( elem );
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+ if ( cur ) {
+ j = 0;
+ while ( ( clazz = classes[ j++ ] ) ) {
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+ cur += clazz + " ";
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = stripAndCollapse( cur );
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classes, elem, cur, curValue, clazz, j, finalValue,
+ i = 0;
+
+ if ( isFunction( value ) ) {
+ return this.each( function( j ) {
+ jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+ } );
+ }
+
+ if ( !arguments.length ) {
+ return this.attr( "class", "" );
+ }
+
+ classes = classesToArray( value );
+
+ if ( classes.length ) {
+ while ( ( elem = this[ i++ ] ) ) {
+ curValue = getClass( elem );
+
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+ if ( cur ) {
+ j = 0;
+ while ( ( clazz = classes[ j++ ] ) ) {
+
+ // Remove *all* instances
+ while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+ cur = cur.replace( " " + clazz + " ", " " );
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = stripAndCollapse( cur );
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isValidValue = type === "string" || Array.isArray( value );
+
+ if ( typeof stateVal === "boolean" && isValidValue ) {
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
+ }
+
+ if ( isFunction( value ) ) {
+ return this.each( function( i ) {
+ jQuery( this ).toggleClass(
+ value.call( this, i, getClass( this ), stateVal ),
+ stateVal
+ );
+ } );
+ }
+
+ return this.each( function() {
+ var className, i, self, classNames;
+
+ if ( isValidValue ) {
+
+ // Toggle individual class names
+ i = 0;
+ self = jQuery( this );
+ classNames = classesToArray( value );
+
+ while ( ( className = classNames[ i++ ] ) ) {
+
+ // Check each className given, space separated list
+ if ( self.hasClass( className ) ) {
+ self.removeClass( className );
+ } else {
+ self.addClass( className );
+ }
+ }
+
+ // Toggle whole class name
+ } else if ( value === undefined || type === "boolean" ) {
+ className = getClass( this );
+ if ( className ) {
+
+ // Store className if set
+ dataPriv.set( this, "__className__", className );
+ }
+
+ // If the element has a class name or if we're passed `false`,
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ if ( this.setAttribute ) {
+ this.setAttribute( "class",
+ className || value === false ?
+ "" :
+ dataPriv.get( this, "__className__" ) || ""
+ );
+ }
+ }
+ } );
+ },
+
+ hasClass: function( selector ) {
+ var className, elem,
+ i = 0;
+
+ className = " " + selector + " ";
+ while ( ( elem = this[ i++ ] ) ) {
+ if ( elem.nodeType === 1 &&
+ ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+ val: function( value ) {
+ var hooks, ret, valueIsFunction,
+ elem = this[ 0 ];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] ||
+ jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks &&
+ "get" in hooks &&
+ ( ret = hooks.get( elem, "value" ) ) !== undefined
+ ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ // Handle most common string cases
+ if ( typeof ret === "string" ) {
+ return ret.replace( rreturn, "" );
+ }
+
+ // Handle cases where value is null/undef or number
+ return ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ valueIsFunction = isFunction( value );
+
+ return this.each( function( i ) {
+ var val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( valueIsFunction ) {
+ val = value.call( this, i, jQuery( this ).val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+
+ } else if ( typeof val === "number" ) {
+ val += "";
+
+ } else if ( Array.isArray( val ) ) {
+ val = jQuery.map( val, function( value ) {
+ return value == null ? "" : value + "";
+ } );
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ } );
+ }
+} );
+
+jQuery.extend( {
+ valHooks: {
+ option: {
+ get: function( elem ) {
+
+ var val = jQuery.find.attr( elem, "value" );
+ return val != null ?
+ val :
+
+ // Support: IE <=10 - 11 only
+ // option.text throws exceptions (#14686, #14858)
+ // Strip and collapse whitespace
+ // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+ stripAndCollapse( jQuery.text( elem ) );
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, option, i,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one",
+ values = one ? null : [],
+ max = one ? index + 1 : options.length;
+
+ if ( index < 0 ) {
+ i = max;
+
+ } else {
+ i = one ? index : 0;
+ }
+
+ // Loop through all the selected options
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // Support: IE <=9 only
+ // IE8-9 doesn't update selected after form reset (#2551)
+ if ( ( option.selected || i === index ) &&
+
+ // Don't return options that are disabled or in a disabled optgroup
+ !option.disabled &&
+ ( !option.parentNode.disabled ||
+ !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray( value ),
+ i = options.length;
+
+ while ( i-- ) {
+ option = options[ i ];
+
+ /* eslint-disable no-cond-assign */
+
+ if ( option.selected =
+ jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+ ) {
+ optionSet = true;
+ }
+
+ /* eslint-enable no-cond-assign */
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ set: function( elem, value ) {
+ if ( Array.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+ }
+ }
+ };
+ if ( !support.checkOn ) {
+ jQuery.valHooks[ this ].get = function( elem ) {
+ return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+ };
+ }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ stopPropagationCallback = function( e ) {
+ e.stopPropagation();
+ };
+
+jQuery.extend( jQuery.event, {
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+ eventPath = [ elem || document ],
+ type = hasOwn.call( event, "type" ) ? event.type : event,
+ namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+ cur = lastElement = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf( "." ) > -1 ) {
+
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split( "." );
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[ jQuery.expando ] ?
+ event :
+ new jQuery.Event( type, typeof event === "object" && event );
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join( "." );
+ event.rnamespace = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [ event ] :
+ jQuery.makeArray( data, [ event ] );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ if ( !rfocusMorph.test( bubbleType + type ) ) {
+ cur = cur.parentNode;
+ }
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push( cur );
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( tmp === ( elem.ownerDocument || document ) ) {
+ eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+ lastElement = cur;
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
+ dataPriv.get( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Native handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && handle.apply && acceptData( cur ) ) {
+ event.result = handle.apply( cur, data );
+ if ( event.result === false ) {
+ event.preventDefault();
+ }
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( ( !special._default ||
+ special._default.apply( eventPath.pop(), data ) === false ) &&
+ acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name as the event.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ ontype ];
+
+ if ( tmp ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+
+ if ( event.isPropagationStopped() ) {
+ lastElement.addEventListener( type, stopPropagationCallback );
+ }
+
+ elem[ type ]();
+
+ if ( event.isPropagationStopped() ) {
+ lastElement.removeEventListener( type, stopPropagationCallback );
+ }
+
+ jQuery.event.triggered = undefined;
+
+ if ( tmp ) {
+ elem[ ontype ] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ // Piggyback on a donor event to simulate a different one
+ // Used only for `focus(in | out)` events
+ simulate: function( type, elem, event ) {
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true
+ }
+ );
+
+ jQuery.event.trigger( e, null, elem );
+ }
+
+} );
+
+jQuery.fn.extend( {
+
+ trigger: function( type, data ) {
+ return this.each( function() {
+ jQuery.event.trigger( type, data, this );
+ } );
+ },
+ triggerHandler: function( type, data ) {
+ var elem = this[ 0 ];
+ if ( elem ) {
+ return jQuery.event.trigger( type, data, elem, true );
+ }
+ }
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+ jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler on the document while someone wants focusin/focusout
+ var handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+
+ // Handle: regular nodes (via `this.ownerDocument`), window
+ // (via `this.document`) & document (via `this`).
+ var doc = this.ownerDocument || this.document || this,
+ attaches = dataPriv.access( doc, fix );
+
+ if ( !attaches ) {
+ doc.addEventListener( orig, handler, true );
+ }
+ dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+ },
+ teardown: function() {
+ var doc = this.ownerDocument || this.document || this,
+ attaches = dataPriv.access( doc, fix ) - 1;
+
+ if ( !attaches ) {
+ doc.removeEventListener( orig, handler, true );
+ dataPriv.remove( doc, fix );
+
+ } else {
+ dataPriv.access( doc, fix, attaches );
+ }
+ }
+ };
+ } );
+}
+var location = window.location;
+
+var nonce = { guid: Date.now() };
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+ var xml, parserErrorElem;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE 9 - 11 only
+ // IE throws on parseFromString with invalid input.
+ try {
+ xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+ } catch ( e ) {}
+
+ parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
+ if ( !xml || parserErrorElem ) {
+ jQuery.error( "Invalid XML: " + (
+ parserErrorElem ?
+ jQuery.map( parserErrorElem.childNodes, function( el ) {
+ return el.textContent;
+ } ).join( "\n" ) :
+ data
+ ) );
+ }
+ return xml;
+};
+
+
+var
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+ var name;
+
+ if ( Array.isArray( obj ) ) {
+
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams(
+ prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+ v,
+ traditional,
+ add
+ );
+ }
+ } );
+
+ } else if ( !traditional && toType( obj ) === "object" ) {
+
+ // Serialize object item.
+ for ( name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+ var prefix,
+ s = [],
+ add = function( key, valueOrFunction ) {
+
+ // If value is a function, invoke it and use its return value
+ var value = isFunction( valueOrFunction ) ?
+ valueOrFunction() :
+ valueOrFunction;
+
+ s[ s.length ] = encodeURIComponent( key ) + "=" +
+ encodeURIComponent( value == null ? "" : value );
+ };
+
+ if ( a == null ) {
+ return "";
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ } );
+
+ } else {
+
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map( function() {
+
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop( this, "elements" );
+ return elements ? jQuery.makeArray( elements ) : this;
+ } ).filter( function() {
+ var type = this.type;
+
+ // Use .is( ":disabled" ) so that fieldset[disabled] works
+ return this.name && !jQuery( this ).is( ":disabled" ) &&
+ rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+ ( this.checked || !rcheckableType.test( type ) );
+ } ).map( function( _i, elem ) {
+ var val = jQuery( this ).val();
+
+ if ( val == null ) {
+ return null;
+ }
+
+ if ( Array.isArray( val ) ) {
+ return jQuery.map( val, function( val ) {
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ } );
+ }
+
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ } ).get();
+ }
+} );
+
+
+var
+ r20 = /%20/g,
+ rhash = /#.*$/,
+ rantiCache = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat( "*" ),
+
+ // Anchor tag for parsing the document origin
+ originAnchor = document.createElement( "a" );
+
+originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+ if ( isFunction( func ) ) {
+
+ // For each dataType in the dataTypeExpression
+ while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+ // Prepend if requested
+ if ( dataType[ 0 ] === "+" ) {
+ dataType = dataType.slice( 1 ) || "*";
+ ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+ // Otherwise append
+ } else {
+ ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+ }
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect( dataType ) {
+ var selected;
+ inspected[ dataType ] = true;
+ jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+ var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+ if ( typeof dataTypeOrTransport === "string" &&
+ !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+ options.dataTypes.unshift( dataTypeOrTransport );
+ inspect( dataTypeOrTransport );
+ return false;
+ } else if ( seekingTransport ) {
+ return !( selected = dataTypeOrTransport );
+ }
+ } );
+ return selected;
+ }
+
+ return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+
+ return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var ct, type, finalDataType, firstDataType,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while ( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if ( dataTypes[ 1 ] ) {
+ for ( conv in s.converters ) {
+ converters[ conv.toLowerCase() ] = s.converters[ conv ];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while ( current ) {
+
+ if ( s.responseFields[ current ] ) {
+ jqXHR[ s.responseFields[ current ] ] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if ( !prev && isSuccess && s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if ( current ) {
+
+ // There's only work to do if current dataType is non-auto
+ if ( current === "*" ) {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Seek a direct converter
+ conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+ // If none found, seek a pair
+ if ( !conv ) {
+ for ( conv2 in converters ) {
+
+ // If conv2 outputs current
+ tmp = conv2.split( " " );
+ if ( tmp[ 1 ] === current ) {
+
+ // If prev can be converted to accepted input
+ conv = converters[ prev + " " + tmp[ 0 ] ] ||
+ converters[ "* " + tmp[ 0 ] ];
+ if ( conv ) {
+
+ // Condense equivalence converters
+ if ( conv === true ) {
+ conv = converters[ conv2 ];
+
+ // Otherwise, insert the intermediate dataType
+ } else if ( converters[ conv2 ] !== true ) {
+ current = tmp[ 0 ];
+ dataTypes.unshift( tmp[ 1 ] );
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if ( conv !== true ) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if ( conv && s.throws ) {
+ response = conv( response );
+ } else {
+ try {
+ response = conv( response );
+ } catch ( e ) {
+ return {
+ state: "parsererror",
+ error: conv ? e : "No conversion from " + prev + " to " + current
+ };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: location.href,
+ type: "GET",
+ isLocal: rlocalProtocol.test( location.protocol ),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /\bxml\b/,
+ html: /\bhtml/,
+ json: /\bjson\b/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": JSON.parse,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+ // Extending ajaxSettings
+ ajaxExtend( jQuery.ajaxSettings, target );
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var transport,
+
+ // URL without anti-cache param
+ cacheURL,
+
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+
+ // timeout handle
+ timeoutTimer,
+
+ // Url cleanup var
+ urlAnchor,
+
+ // Request state (becomes false upon send and true upon completion)
+ completed,
+
+ // To know if global events are to be dispatched
+ fireGlobals,
+
+ // Loop variable
+ i,
+
+ // uncached part of the url
+ uncached,
+
+ // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+
+ // Callbacks context
+ callbackContext = s.context || s,
+
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context &&
+ ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery( callbackContext ) :
+ jQuery.event,
+
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks( "once memory" ),
+
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+
+ // Default abort message
+ strAbort = "canceled",
+
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( completed ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+ ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+ .concat( match[ 2 ] );
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() + " " ];
+ }
+ return match == null ? null : match.join( ", " );
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return completed ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( completed == null ) {
+ name = requestHeadersNames[ name.toLowerCase() ] =
+ requestHeadersNames[ name.toLowerCase() ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( completed == null ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function( map ) {
+ var code;
+ if ( map ) {
+ if ( completed ) {
+
+ // Execute the appropriate callbacks
+ jqXHR.always( map[ jqXHR.status ] );
+ } else {
+
+ // Lazy-add the new callbacks in a way that preserves old ones
+ for ( code in map ) {
+ statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+ }
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ var finalText = statusText || strAbort;
+ if ( transport ) {
+ transport.abort( finalText );
+ }
+ done( 0, finalText );
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise( jqXHR );
+
+ // Add protocol if not provided (prefilters might expect it)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || location.href ) + "" )
+ .replace( rprotocol, location.protocol + "//" );
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+ // A cross-domain request is in order when the origin doesn't match the current origin.
+ if ( s.crossDomain == null ) {
+ urlAnchor = document.createElement( "a" );
+
+ // Support: IE <=8 - 11, Edge 12 - 15
+ // IE throws exception on accessing the href property if url is malformed,
+ // e.g. http://example.com:80x/
+ try {
+ urlAnchor.href = s.url;
+
+ // Support: IE <=8 - 11 only
+ // Anchor's host property isn't correctly set when s.url is relative
+ urlAnchor.href = urlAnchor.href;
+ s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+ urlAnchor.protocol + "//" + urlAnchor.host;
+ } catch ( e ) {
+
+ // If there is an error parsing the URL, assume it is crossDomain,
+ // it can be rejected by the transport if it is invalid
+ s.crossDomain = true;
+ }
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefilter, stop there
+ if ( completed ) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+ fireGlobals = jQuery.event && s.global;
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ // Remove hash to simplify url manipulation
+ cacheURL = s.url.replace( rhash, "" );
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // Remember the hash so we can put it back
+ uncached = s.url.slice( cacheURL.length );
+
+ // If data is available and should be processed, append data to url
+ if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+ cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add or update anti-cache param if needed
+ if ( s.cache === false ) {
+ cacheURL = cacheURL.replace( rantiCache, "$1" );
+ uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+ uncached;
+ }
+
+ // Put hash and anti-cache on the URL that will be requested (gh-1732)
+ s.url = cacheURL + uncached;
+
+ // Change '%20' to '+' if this is encoded form body content (gh-2658)
+ } else if ( s.data && s.processData &&
+ ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+ s.data = s.data.replace( r20, "+" );
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+ }
+ if ( jQuery.etag[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+ s.accepts[ s.dataTypes[ 0 ] ] +
+ ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend &&
+ ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // Aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ completeDeferred.add( s.complete );
+ jqXHR.done( s.success );
+ jqXHR.fail( s.error );
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+
+ // If request was aborted inside ajaxSend, stop there
+ if ( completed ) {
+ return jqXHR;
+ }
+
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = window.setTimeout( function() {
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ completed = false;
+ transport.send( requestHeaders, done );
+ } catch ( e ) {
+
+ // Rethrow post-completion exceptions
+ if ( completed ) {
+ throw e;
+ }
+
+ // Propagate others as results
+ done( -1, e );
+ }
+ }
+
+ // Callback for when everything is done
+ function done( status, nativeStatusText, responses, headers ) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Ignore repeat invocations
+ if ( completed ) {
+ return;
+ }
+
+ completed = true;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ window.clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if ( responses ) {
+ response = ajaxHandleResponses( s, jqXHR, responses );
+ }
+
+ // Use a noop converter for missing script but not if jsonp
+ if ( !isSuccess &&
+ jQuery.inArray( "script", s.dataTypes ) > -1 &&
+ jQuery.inArray( "json", s.dataTypes ) < 0 ) {
+ s.converters[ "text script" ] = function() {};
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+ // If successful, handle type chaining
+ if ( isSuccess ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ modified = jqXHR.getResponseHeader( "Last-Modified" );
+ if ( modified ) {
+ jQuery.lastModified[ cacheURL ] = modified;
+ }
+ modified = jqXHR.getResponseHeader( "etag" );
+ if ( modified ) {
+ jQuery.etag[ cacheURL ] = modified;
+ }
+ }
+
+ // if no content
+ if ( status === 204 || s.type === "HEAD" ) {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if ( status === 304 ) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+
+ // Extract error from statusText and normalize for non-aborts
+ error = statusText;
+ if ( status || !statusText ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ }
+} );
+
+jQuery.each( [ "get", "post" ], function( _i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+
+ // Shift arguments if data argument was omitted
+ if ( isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ // The url can be an options object (which then must have .url)
+ return jQuery.ajax( jQuery.extend( {
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ }, jQuery.isPlainObject( url ) && url ) );
+ };
+} );
+
+jQuery.ajaxPrefilter( function( s ) {
+ var i;
+ for ( i in s.headers ) {
+ if ( i.toLowerCase() === "content-type" ) {
+ s.contentType = s.headers[ i ] || "";
+ }
+ }
+} );
+
+
+jQuery._evalUrl = function( url, options, doc ) {
+ return jQuery.ajax( {
+ url: url,
+
+ // Make this explicit, since user can override this through ajaxSetup (#11264)
+ type: "GET",
+ dataType: "script",
+ cache: true,
+ async: false,
+ global: false,
+
+ // Only evaluate the response if it is successful (gh-4126)
+ // dataFilter is not invoked for failure responses, so using it instead
+ // of the default converter is kludgy but it works.
+ converters: {
+ "text script": function() {}
+ },
+ dataFilter: function( response ) {
+ jQuery.globalEval( response, options, doc );
+ }
+ } );
+};
+
+
+jQuery.fn.extend( {
+ wrapAll: function( html ) {
+ var wrap;
+
+ if ( this[ 0 ] ) {
+ if ( isFunction( html ) ) {
+ html = html.call( this[ 0 ] );
+ }
+
+ // The elements to wrap the target around
+ wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+ if ( this[ 0 ].parentNode ) {
+ wrap.insertBefore( this[ 0 ] );
+ }
+
+ wrap.map( function() {
+ var elem = this;
+
+ while ( elem.firstElementChild ) {
+ elem = elem.firstElementChild;
+ }
+
+ return elem;
+ } ).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( isFunction( html ) ) {
+ return this.each( function( i ) {
+ jQuery( this ).wrapInner( html.call( this, i ) );
+ } );
+ }
+
+ return this.each( function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ } );
+ },
+
+ wrap: function( html ) {
+ var htmlIsFunction = isFunction( html );
+
+ return this.each( function( i ) {
+ jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+ } );
+ },
+
+ unwrap: function( selector ) {
+ this.parent( selector ).not( "body" ).each( function() {
+ jQuery( this ).replaceWith( this.childNodes );
+ } );
+ return this;
+ }
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+ return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+ return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+ // File protocol always yields status code 0, assume 200
+ 0: 200,
+
+ // Support: IE <=9 only
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+ var callback, errorCallback;
+
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( support.cors || xhrSupported && !options.crossDomain ) {
+ return {
+ send: function( headers, complete ) {
+ var i,
+ xhr = options.xhr();
+
+ xhr.open(
+ options.type,
+ options.url,
+ options.async,
+ options.username,
+ options.password
+ );
+
+ // Apply custom fields if provided
+ if ( options.xhrFields ) {
+ for ( i in options.xhrFields ) {
+ xhr[ i ] = options.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( options.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( options.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Set headers
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+
+ // Callback
+ callback = function( type ) {
+ return function() {
+ if ( callback ) {
+ callback = errorCallback = xhr.onload =
+ xhr.onerror = xhr.onabort = xhr.ontimeout =
+ xhr.onreadystatechange = null;
+
+ if ( type === "abort" ) {
+ xhr.abort();
+ } else if ( type === "error" ) {
+
+ // Support: IE <=9 only
+ // On a manual native abort, IE9 throws
+ // errors on any property access that is not readyState
+ if ( typeof xhr.status !== "number" ) {
+ complete( 0, "error" );
+ } else {
+ complete(
+
+ // File: protocol always yields status 0; see #8605, #14207
+ xhr.status,
+ xhr.statusText
+ );
+ }
+ } else {
+ complete(
+ xhrSuccessStatus[ xhr.status ] || xhr.status,
+ xhr.statusText,
+
+ // Support: IE <=9 only
+ // IE9 has no XHR2 but throws on binary (trac-11426)
+ // For XHR2 non-text, let the caller handle it (gh-2498)
+ ( xhr.responseType || "text" ) !== "text" ||
+ typeof xhr.responseText !== "string" ?
+ { binary: xhr.response } :
+ { text: xhr.responseText },
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+
+ // Listen to events
+ xhr.onload = callback();
+ errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+ // Support: IE 9 only
+ // Use onreadystatechange to replace onabort
+ // to handle uncaught aborts
+ if ( xhr.onabort !== undefined ) {
+ xhr.onabort = errorCallback;
+ } else {
+ xhr.onreadystatechange = function() {
+
+ // Check readyState before timeout as it changes
+ if ( xhr.readyState === 4 ) {
+
+ // Allow onerror to be called first,
+ // but that will not handle a native abort
+ // Also, save errorCallback to a variable
+ // as xhr.onerror cannot be accessed
+ window.setTimeout( function() {
+ if ( callback ) {
+ errorCallback();
+ }
+ } );
+ }
+ };
+ }
+
+ // Create the abort callback
+ callback = callback( "abort" );
+
+ try {
+
+ // Do send the request (this may raise an exception)
+ xhr.send( options.hasContent && options.data || null );
+ } catch ( e ) {
+
+ // #14683: Only rethrow if this hasn't been notified as an error yet
+ if ( callback ) {
+ throw e;
+ }
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+ if ( s.crossDomain ) {
+ s.contents.script = false;
+ }
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+ accepts: {
+ script: "text/javascript, application/javascript, " +
+ "application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /\b(?:java|ecma)script\b/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ }
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+ // This transport only deals with cross domain or forced-by-attrs requests
+ if ( s.crossDomain || s.scriptAttrs ) {
+ var script, callback;
+ return {
+ send: function( _, complete ) {
+ script = jQuery( "<script>" )
+ .attr( s.scriptAttrs || {} )
+ .prop( { charset: s.scriptCharset, src: s.url } )
+ .on( "load error", callback = function( evt ) {
+ script.remove();
+ callback = null;
+ if ( evt ) {
+ complete( evt.type === "error" ? 404 : 200, evt.type );
+ }
+ } );
+
+ // Use native DOM manipulation to avoid our domManip AJAX trickery
+ document.head.appendChild( script[ 0 ] );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+} );
+
+
+
+
+var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
+ this[ callback ] = true;
+ return callback;
+ }
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+ "url" :
+ typeof s.data === "string" &&
+ ( s.contentType || "" )
+ .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+ rjsonp.test( s.data ) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if ( jsonProp ) {
+ s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+ } else if ( s.jsonp !== false ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters[ "script json" ] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( callbackName + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // Force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Install callback
+ overwritten = window[ callbackName ];
+ window[ callbackName ] = function() {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always( function() {
+
+ // If previous value didn't exist - remove it
+ if ( overwritten === undefined ) {
+ jQuery( window ).removeProp( callbackName );
+
+ // Otherwise restore preexisting value
+ } else {
+ window[ callbackName ] = overwritten;
+ }
+
+ // Save back as free
+ if ( s[ callbackName ] ) {
+
+ // Make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // Save the callback name for future use
+ oldCallbacks.push( callbackName );
+ }
+
+ // Call if it was a function and we have a response
+ if ( responseContainer && isFunction( overwritten ) ) {
+ overwritten( responseContainer[ 0 ] );
+ }
+
+ responseContainer = overwritten = undefined;
+ } );
+
+ // Delegate to script
+ return "script";
+ }
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+ var body = document.implementation.createHTMLDocument( "" ).body;
+ body.innerHTML = "<form></form><form></form>";
+ return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+ if ( typeof data !== "string" ) {
+ return [];
+ }
+ if ( typeof context === "boolean" ) {
+ keepScripts = context;
+ context = false;
+ }
+
+ var base, parsed, scripts;
+
+ if ( !context ) {
+
+ // Stop scripts or inline event handlers from being executed immediately
+ // by using document.implementation
+ if ( support.createHTMLDocument ) {
+ context = document.implementation.createHTMLDocument( "" );
+
+ // Set the base href for the created document
+ // so any parsed elements with URLs
+ // are based on the document's URL (gh-2965)
+ base = context.createElement( "base" );
+ base.href = document.location.href;
+ context.head.appendChild( base );
+ } else {
+ context = document;
+ }
+ }
+
+ parsed = rsingleTag.exec( data );
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if ( parsed ) {
+ return [ context.createElement( parsed[ 1 ] ) ];
+ }
+
+ parsed = buildFragment( [ data ], context, scripts );
+
+ if ( scripts && scripts.length ) {
+ jQuery( scripts ).remove();
+ }
+
+ return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+ var selector, type, response,
+ self = this,
+ off = url.indexOf( " " );
+
+ if ( off > -1 ) {
+ selector = stripAndCollapse( url.slice( off ) );
+ url = url.slice( 0, off );
+ }
+
+ // If it's a function
+ if ( isFunction( params ) ) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( params && typeof params === "object" ) {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if ( self.length > 0 ) {
+ jQuery.ajax( {
+ url: url,
+
+ // If "type" variable is undefined, then "GET" method will be used.
+ // Make value of this field explicit since
+ // user can override it through ajaxSetup method
+ type: type || "GET",
+ dataType: "html",
+ data: params
+ } ).done( function( responseText ) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html( selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+ // Otherwise use the full result
+ responseText );
+
+ // If the request succeeds, this function gets "data", "status", "jqXHR"
+ // but they are ignored because response was set above.
+ // If it fails, this function gets "jqXHR", "status", "error"
+ } ).always( callback && function( jqXHR, status ) {
+ self.each( function() {
+ callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+ } );
+ } );
+ }
+
+ return this;
+};
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+ return jQuery.grep( jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ } ).length;
+};
+
+
+
+
+jQuery.offset = {
+ setOffset: function( elem, options, i ) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+ position = jQuery.css( elem, "position" ),
+ curElem = jQuery( elem ),
+ props = {};
+
+ // Set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css( elem, "top" );
+ curCSSLeft = jQuery.css( elem, "left" );
+ calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+ ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+ // Need to be able to calculate position if either
+ // top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( isFunction( options ) ) {
+
+ // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+ options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+jQuery.fn.extend( {
+
+ // offset() relates an element's border box to the document origin
+ offset: function( options ) {
+
+ // Preserve chaining for setter
+ if ( arguments.length ) {
+ return options === undefined ?
+ this :
+ this.each( function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ } );
+ }
+
+ var rect, win,
+ elem = this[ 0 ];
+
+ if ( !elem ) {
+ return;
+ }
+
+ // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+ // Support: IE <=11 only
+ // Running getBoundingClientRect on a
+ // disconnected node in IE throws an error
+ if ( !elem.getClientRects().length ) {
+ return { top: 0, left: 0 };
+ }
+
+ // Get document-relative position by adding viewport scroll to viewport-relative gBCR
+ rect = elem.getBoundingClientRect();
+ win = elem.ownerDocument.defaultView;
+ return {
+ top: rect.top + win.pageYOffset,
+ left: rect.left + win.pageXOffset
+ };
+ },
+
+ // position() relates an element's margin box to its offset parent's padding box
+ // This corresponds to the behavior of CSS absolute positioning
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset, doc,
+ elem = this[ 0 ],
+ parentOffset = { top: 0, left: 0 };
+
+ // position:fixed elements are offset from the viewport, which itself always has zero offset
+ if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+ // Assume position:fixed implies availability of getBoundingClientRect
+ offset = elem.getBoundingClientRect();
+
+ } else {
+ offset = this.offset();
+
+ // Account for the *real* offset parent, which can be the document or its root element
+ // when a statically positioned element is identified
+ doc = elem.ownerDocument;
+ offsetParent = elem.offsetParent || doc.documentElement;
+ while ( offsetParent &&
+ ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+ jQuery.css( offsetParent, "position" ) === "static" ) {
+
+ offsetParent = offsetParent.parentNode;
+ }
+ if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+ // Incorporate borders into its offset, since they are outside its content origin
+ parentOffset = jQuery( offsetParent ).offset();
+ parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+ parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+ }
+ }
+
+ // Subtract parent offsets and element margins
+ return {
+ top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+ left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+ };
+ },
+
+ // This method will return documentElement in the following cases:
+ // 1) For the element inside the iframe without offsetParent, this method will return
+ // documentElement of the parent window
+ // 2) For the hidden or detached element
+ // 3) For body or html element, i.e. in case of the html node - it will return itself
+ //
+ // but those exceptions were never presented as a real life use-cases
+ // and might be considered as more preferable results.
+ //
+ // This logic, however, is not guaranteed and can change at any point in the future
+ offsetParent: function() {
+ return this.map( function() {
+ var offsetParent = this.offsetParent;
+
+ while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ return offsetParent || documentElement;
+ } );
+ }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+ var top = "pageYOffset" === prop;
+
+ jQuery.fn[ method ] = function( val ) {
+ return access( this, function( elem, method, val ) {
+
+ // Coalesce documents and windows
+ var win;
+ if ( isWindow( elem ) ) {
+ win = elem;
+ } else if ( elem.nodeType === 9 ) {
+ win = elem.defaultView;
+ }
+
+ if ( val === undefined ) {
+ return win ? win[ prop ] : elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : win.pageXOffset,
+ top ? val : win.pageYOffset
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length );
+ };
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
+ jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+ function( elem, computed ) {
+ if ( computed ) {
+ computed = curCSS( elem, prop );
+
+ // If curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( computed ) ?
+ jQuery( elem ).position()[ prop ] + "px" :
+ computed;
+ }
+ }
+ );
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+ jQuery.each( {
+ padding: "inner" + name,
+ content: type,
+ "": "outer" + name
+ }, function( defaultExtra, funcName ) {
+
+ // Margin is only for outerHeight, outerWidth
+ jQuery.fn[ funcName ] = function( margin, value ) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return access( this, function( elem, type, value ) {
+ var doc;
+
+ if ( isWindow( elem ) ) {
+
+ // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+ return funcName.indexOf( "outer" ) === 0 ?
+ elem[ "inner" + name ] :
+ elem.document.documentElement[ "client" + name ];
+ }
+
+ // Get document width or height
+ if ( elem.nodeType === 9 ) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+ // whichever is greatest
+ return Math.max(
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
+ doc[ "client" + name ]
+ );
+ }
+
+ return value === undefined ?
+
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css( elem, type, extra ) :
+
+ // Set width or height on the element
+ jQuery.style( elem, type, value, extra );
+ }, type, chainable ? margin : undefined, chainable );
+ };
+ } );
+} );
+
+
+jQuery.each( [
+ "ajaxStart",
+ "ajaxStop",
+ "ajaxComplete",
+ "ajaxError",
+ "ajaxSuccess",
+ "ajaxSend"
+], function( _i, type ) {
+ jQuery.fn[ type ] = function( fn ) {
+ return this.on( type, fn );
+ };
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ?
+ this.off( selector, "**" ) :
+ this.off( types, selector || "**", fn );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+} );
+
+jQuery.each(
+ ( "blur focus focusin focusout resize scroll click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+ function( _i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+ }
+);
+
+
+
+
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+ var tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+ // As of jQuery 3.0, isNumeric is limited to
+ // strings and numbers (primitives or objects)
+ // that can be coerced to finite numbers (gh-2662)
+ var type = jQuery.type( obj );
+ return ( type === "number" || type === "string" ) &&
+
+ // parseFloat NaNs numeric-cast false positives ("")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ !isNaN( obj - parseFloat( obj ) );
+};
+
+jQuery.trim = function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+};
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+ define( "jquery", [], function() {
+ return jQuery;
+ } );
+}
+
+
+
+
+var
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === "undefined" ) {
+ window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js
new file mode 100644
index 00000000..c4c6022f
--- /dev/null
+++ b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map
new file mode 100644
index 00000000..7d86eb16
--- /dev/null
+++ b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery-3.6.0.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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","file":"jquery-3.6.0.min.js"} \ No newline at end of file

Contact - Imprint