Commit b09d24c1 authored by Christian Arnold's avatar Christian Arnold
Browse files

GRaNIEdev: Important bugfix for enrichment analyses: Introduced a regression...

GRaNIEdev: Important bugfix for enrichment analyses: Introduced a regression in 0.14 that is fixed now. Thanks to Nila for reporting it
parent 8770eb71
Pipeline #28126 passed with stage
in 11 seconds
Package: GRaNIEdev Package: GRaNIE
Title: GRaNIE: Reconstruction cell type specific gene regulatory networks including enhancers using chromatin accessibility and RNA-seq data Title: GRaNIE: Reconstruction cell type specific gene regulatory networks including enhancers using chromatin accessibility and RNA-seq data
Version: 0.14.0 Version: 0.14.3
Encoding: UTF-8 Encoding: UTF-8
Authors@R: c(person("Christian", "Arnold", email = Authors@R: c(person("Christian", "Arnold", email =
"christian.arnold@embl.de", role = c("cre","aut")), "christian.arnold@embl.de", role = c("cre","aut")),
person("Judith", "Zaugg", email = person("Judith", "Zaugg", email =
"judith.zaugg@embl.de", role = c("aut")), "judith.zaugg@embl.de", role = c("aut")),
person("Rim", "Moussa", email = person("Rim", "Moussa", email =
"rim.moussa01@gmail.com", role = "ctb"), "rim.moussa01@gmail.com", role = "aut"),
person("Armando", "Reyes-Palomares", email = person("Armando", "Reyes-Palomares", email =
"armandorp@gmail.com", role = "ctb"), "armandorp@gmail.com", role = "ctb"),
person("Giovanni", "Palla", email = person("Giovanni", "Palla", email =
......
<!-- # GRaNIE 0.9-0.14 (2021-12-13)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-->
# GRaNIEdev Changelog and News
## GRaNIEdev 0.9 - 0.14 (2021-12-13) ## Major changes
### Major changes
- major overhaul and continuous work on peak-gene QC plots - major overhaul and continuous work on peak-gene QC plots
- the *filterData* functions has now more filter parameters, such as filtering for CV. Also, all filters uniformly have a *min* and *max* filter. - the *filterData* functions has now more filter parameters, such as filtering for CV. Also, all filters uniformly have a *min* and *max* filter.
...@@ -13,67 +8,63 @@ ...@@ -13,67 +8,63 @@
- handling of edge cases and rare events in various functions - handling of edge cases and rare events in various functions
- packages have been renamed to *GRaNIE* as basename (before: *GRN*) - packages have been renamed to *GRaNIE* as basename (before: *GRN*)
### Bug fixes ## Bug fixes
- various minor bug fixes - various minor bug fixes
### Minor changes ## Minor changes
- changed the object structure slightly and moved some gene and peak annotation data (such as mean, CV) to the appropriate annotation slot - changed the object structure slightly and moved some gene and peak annotation data (such as mean, CV) to the appropriate annotation slot
## GRaNIEdev 0.8 (2021-05-07) # GRaNIE 0.8 (2021-05-07)
### Major changes ## Major changes
- improved PCA plotting, PCA plots are now produced for both raw and normalized data - improved PCA plotting, PCA plots are now produced for both raw and normalized data
- new filters for the function *filterGRaNIEAndConnectGenes* (*peak_gene.maxDistance*) as well as more flexibility how to adjust the peak-gene raw p-values for multiple testing (including the possibility to use IHW - experimental) - new filters for the function *filterGRaNIEAndConnectGenes* (*peak_gene.maxDistance*) as well as more flexibility how to adjust the peak-gene raw p-values for multiple testing (including the possibility to use IHW - experimental)
- new function *plotDiagnosticPlots_TFPeaks* for plotting (this function was previously called only internally, but is now properly exported), in analogy to *plotDiagnosticPlots_peakGene* - new function *plotDiagnosticPlots_TFPeaks* for plotting (this function was previously called only internally, but is now properly exported), in analogy to *plotDiagnosticPlots_peakGene*
### Bug fixes ## Bug fixes
- various minor bug fixes (PCA plotting, compatibility when providing pre-normalized data) - various minor bug fixes (PCA plotting, compatibility when providing pre-normalized data)
### Minor changes ## Minor changes
- changed the object structure slightly and cleaned the config slot, for example - changed the object structure slightly and cleaned the config slot, for example
- some functions have been added / renamed to make the workflow more clear and streamlined, see Vignette for details - some functions have been added / renamed to make the workflow more clear and streamlined, see Vignette for details
- some default parameters changed - some default parameters changed
## GRaNIEdev 0.7 (2021-03-12) # GRaNIE 0.7 (2021-03-12)
### Major changes ## Major changes
- improved PCA plotting, also works for pre-normalized counts now when provided as input originally - improved PCA plotting, also works for pre-normalized counts now when provided as input originally
- more flexibility for data normalization - more flexibility for data normalization
- homogenized wordings, function calls and workflow clarity, removed unnecessary warnings when plotting peak-gene diagnostic plots, added more R help documentation - homogenized wordings, function calls and workflow clarity, removed unnecessary warnings when plotting peak-gene diagnostic plots, added more R help documentation
- added IHW (Independent Hypothesis Weighting) as a multiple testing procedure for peak-gene p-values in addition to now allowing all methods that are supported by p.adjust - added IHW (Independent Hypothesis Weighting) as a multiple testing procedure for peak-gene p-values in addition to now allowing all methods that are supported by p.adjust
### Bug fixes ## Bug fixes
- various minor bug fixes - various minor bug fixes
### Minor changes ## Minor changes
<!-- # GRaNIE 0.6 (2021-02-09)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-->
## GRaNIEdev 0.6 (2021-02-09)
### Major changes ## Major changes
- significant speed improvements for the peak-FDR calculations and subsequent plotting - significant speed improvements for the peak-FDR calculations and subsequent plotting
- TF-peak diagnostic plots now also show negatively correlated TF-peak statistics irrespective of whether they have been filtered out in the object / pipeline. This may be useful for diagnostic purposes to check whether excluding them is a sensible choice and to confirm the numbers are low - TF-peak diagnostic plots now also show negatively correlated TF-peak statistics irrespective of whether they have been filtered out in the object / pipeline. This may be useful for diagnostic purposes to check whether excluding them is a sensible choice and to confirm the numbers are low
### Bug fixes ## Bug fixes
- Numbers for connections per correlation bin in the TF-peak diagnostic plots were wrong as they did not correctly differentiate between the different connection types in case multiple ones had been specified (e.g., expression and TF activity). This has been fixed. - Numbers for connections per correlation bin in the TF-peak diagnostic plots were wrong as they did not correctly differentiate between the different connection types in case multiple ones had been specified (e.g., expression and TF activity). This has been fixed.
### Minor changes ## Minor changes
<!-- # GRaNIE 0.5 (2021-02-02)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-->
## GRaNIEdev 0.5 (2021-02-02)
first published package version first published package version
...@@ -4387,6 +4387,7 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"), ...@@ -4387,6 +4387,7 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"),
mapping = mapping) mapping = mapping)
GRN@stats[["Enrichment"]][["general"]] = general.enrichment GRN@stats[["Enrichment"]][["general"]] = general.enrichment
futile.logger::flog.info(paste0("Results stored in GRN@stats[[\"Enrichment\"]][[\"general\"]]"))
} else { } else {
...@@ -4394,7 +4395,7 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"), ...@@ -4394,7 +4395,7 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"),
} }
.printExecutionTime(start) .printExecutionTime(start, prefix = "")
GRN GRN
} }
...@@ -4459,14 +4460,15 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"), ...@@ -4459,14 +4460,15 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"),
result.list = list() result.list = list()
# Construct a named vector with 0 or 1, 1 means in the foreground, 0 only in background
geneList = factor(as.integer(unique(background) %in% unique(foreground))) geneList = factor(as.integer(unique(background) %in% unique(foreground)))
names(geneList) = unique(background) names(geneList) = unique(background)
for (ontology_cur in ontology){ for (ontology_cur in ontology){
if (length(geneList == 0)) { if (length(geneList) == 0) {
futile.logger::flog.warn(paste0("No enrichment found for ", ontology_cur, "."))
result.tbl = NULL result.tbl = NULL
} else { } else {
...@@ -4485,6 +4487,14 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"), ...@@ -4485,6 +4487,14 @@ calculateGeneralEnrichment <- function(GRN, ontology = c("BP", "MF"),
result.tbl = unique(topGO::GenTable(data, pval = result, orderBy = "pval", numChar = 1000, result.tbl = unique(topGO::GenTable(data, pval = result, orderBy = "pval", numChar = 1000,
topNodes = length(topGO::score(result))) ) topNodes = length(topGO::score(result))) )
result.tbl$GeneRatio = result.tbl$Significant / length(unique(foreground)) result.tbl$GeneRatio = result.tbl$Significant / length(unique(foreground))
# Summmarize results
futile.logger::flog.info(paste0(" Enrichment calculation finished for ontology ", ontology_cur, ". Checked ", nrow(result.tbl), " terms"))
for (pvalueThres in c(0.01, 0.05, 0.1, 0.2)) {
dataCur = dplyr::filter(result.tbl, pval <= pvalueThres)
futile.logger::flog.info(paste0(" Number of terms for which p-value <= ", pvalueThres, ": ", nrow(dataCur)))
}
} }
...@@ -4702,6 +4712,8 @@ calculateCommunitiesEnrichment <- function(GRN, ...@@ -4702,6 +4712,8 @@ calculateCommunitiesEnrichment <- function(GRN,
} }
} }
futile.logger::flog.info(paste0("Results stored in GRN@stats[[\"Enrichment\"]][[\"byCommunity\"]]"))
.printExecutionTime(start) .printExecutionTime(start)
GRN GRN
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
The companion packages *GRaNIE* (**G**ene **R**egul**a**tory **N**etwork **I**nference including **E**nhancers) and *GRaNPA* (**G**ene **R**egul**a**tory **N**etwork **P**erformace **A**nalysis) are currently under active development. If you have questions, please do not hesitate to contact us (see below). The companion packages *GRaNIE* (**G**ene **R**egul**a**tory **N**etwork **I**nference including **E**nhancers) and *GRaNPA* (**G**ene **R**egul**a**tory **N**etwork **P**erformace **A**nalysis) are currently under active development. If you have questions, please do not hesitate to contact us (see below).
This page describes *GRaNIE*. For *GRaNPA*, please visit [this page](https://git.embl.de/grp-zaugg/GRaNPA). This page describes *GRaNIE*. For *GRaNPA*, please visit [this page](https://grp-zaugg.embl-community.io/GRaNPA).
### Summary ### Summary
......
<!-- Generated by pkgdown: do not edit by hand -->
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <!-- Generated by pkgdown: do not edit by hand --><html lang="en">
<head> <head>
<meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page not found (404) • GRaNIE</title>
<title>Page not found (404) • GRaNIEdev</title> <!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script><!-- Bootstrap --><link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.4.0/flatly/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="bootstrap-toc.css">
<script src="bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous">
<!-- jquery --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script> <!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="pkgdown.css" rel="stylesheet">
<!-- Bootstrap --> <script src="pkgdown.js"></script><meta property="og:title" content="Page not found (404)">
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.4.0/flatly/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous" /> <!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script>
<!-- bootstrap-toc -->
<link rel="stylesheet" href="bootstrap-toc.css">
<script src="bootstrap-toc.js"></script>
<!-- Font Awesome icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous" />
<!-- clipboard.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script>
<!-- headroom.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
<!-- pkgdown -->
<link href="pkgdown.css" rel="stylesheet">
<script src="pkgdown.js"></script>
<meta property="og:title" content="Page not found (404)" />
<!-- mathjax -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]--> <![endif]--><!-- Global site tag (gtag.js) - Google Analytics --><script async src="https://www.googletagmanager.com/gtag/js?id=G-530L9SXFM1"></script><script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-530L9SXFM1"></script>
<script>
window.dataLayer = window.dataLayer || []; window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);} function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('js', new Date());
gtag('config', 'G-530L9SXFM1'); gtag('config', 'G-530L9SXFM1');
</script> </script>
</head>
<body data-spy="scroll" data-target="#toc">
</head>
<body data-spy="scroll" data-target="#toc">
<div class="container template-title-body"> <div class="container template-title-body">
<header> <header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container"> <div class="container">
<div class="navbar-header"> <div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
...@@ -80,14 +37,14 @@ ...@@ -80,14 +37,14 @@
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<span class="navbar-brand"> <span class="navbar-brand">
<a class="navbar-link" href="index.html">GRaNIEdev</a> <a class="navbar-link" href="index.html">GRaNIE</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.14.0</span> <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.14.3</span>
</span> </span>
</div> </div>
<div id="navbar" class="navbar-collapse collapse"> <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li> <li>
<a href="index.html"></a> <a href="index.html"></a>
</li> </li>
<li> <li>
...@@ -100,7 +57,7 @@ ...@@ -100,7 +57,7 @@
<span class="caret"></span> <span class="caret"></span>
</a> </a>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li> <li>
<a href="articles/quickStart.html">Getting Started</a> <a href="articles/quickStart.html">Getting Started</a>
</li> </li>
<li> <li>
...@@ -118,19 +75,17 @@ ...@@ -118,19 +75,17 @@
<a href="news/index.html">Changelog &amp; News</a> <a href="news/index.html">Changelog &amp; News</a>
</li> </li>
</ul> </ul>
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right"></ul>
</div>
</ul> <!--/.nav-collapse -->
</div>
</div><!--/.nav-collapse --> <!--/.container -->
</div><!--/.container --> </div>
</div><!--/.navbar --> <!--/.navbar -->
</header>
<div class="row"> </header><div class="row">
<div class="contents col-md-9"> <div class="contents col-md-9">
<div class="page-header"> <div class="page-header">
<h1>Page not found (404)</h1> <h1>Page not found (404)</h1>
...@@ -141,31 +96,31 @@ Content not found. Please use links in the navbar. ...@@ -141,31 +96,31 @@ Content not found. Please use links in the navbar.
</div> </div>
<div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar"> <div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
<nav id="toc" data-toggle="toc" class="sticky-top"> <nav id="toc" data-toggle="toc" class="sticky-top"><h2 data-toc-skip>Contents</h2>
<h2 data-toc-skip>Contents</h2>
</nav> </nav>
</div> </div>
</div> </div>
<footer> <footer><div class="copyright">
<div class="copyright"> <p></p>
<p>Developed by Christian Arnold, Rim Moussa.</p> <p>Developed by Christian Arnold, Judith Zaugg, Rim Moussa.</p>
</div> </div>
<div class="pkgdown"> <div class="pkgdown">
<p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.6.1.</p> <p></p>
<p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.1.</p>
</div> </div>
</footer> </footer>
</div> </div>
</body>
</html>
</body>
</html>
<!-- Generated by pkgdown: do not edit by hand -->
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Articles • GRaNIE</title><!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script><!-- Bootstrap --><link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.4.0/flatly/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="../bootstrap-toc.css"><script src="../bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet"><script src="../pkgdown.js"></script><meta property="og:title" content="Articles"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Articles • GRaNIEdev</title>
<!-- jquery -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<!-- Bootstrap -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.4.0/flatly/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script>
<!-- bootstrap-toc -->
<link rel="stylesheet" href="../bootstrap-toc.css">
<script src="../bootstrap-toc.js"></script>
<!-- Font Awesome icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous" />
<!-- clipboard.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script>
<!-- headroom.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
<!-- pkgdown -->
<link href="../pkgdown.css" rel="stylesheet">
<script src="../pkgdown.js"></script>
<meta property="og:title" content="Articles" />
<!-- mathjax -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]--> <![endif]--><!-- Global site tag (gtag.js) - Google Analytics --><script async src="https://www.googletagmanager.com/gtag/js?id=G-530L9SXFM1"></script><script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-530L9SXFM1"></script>
<script>
window.dataLayer = window.dataLayer || []; window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);} function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('js', new Date());
gtag('config', 'G-530L9SXFM1'); gtag('config', 'G-530L9SXFM1');
</script> </script></head><body data-spy="scroll" data-target="#toc">
</head>
<body data-spy="scroll" data-target="#toc">
<div class="container template-article-index"> <div class="container template-article-index">
<header> <header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container"> <div class="container">
<div class="navbar-header"> <div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
...@@ -80,14 +22,13 @@ ...@@ -80,14 +22,13 @@
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<span class="navbar-brand"> <span class="navbar-brand">
<a class="navbar-link" href="../index.html">GRaNIEdev</a> <a class="navbar-link" href="../index.html">GRaNIE</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.14.0</span> <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="">0.14.3</span>
</span> </span>
</div> </div>
<div id="navbar" class="navbar-collapse collapse"> <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav"><li>
<li>
<a href="../index.html"></a> <a href="../index.html"></a>
</li> </li>
<li> <li>
...@@ -99,8 +40,7 @@ ...@@ -99,8 +40,7 @@