started vortrag & deps, added results of simulation

This commit is contained in:
Stefan Dresselhaus
2018-06-25 21:59:56 +02:00
parent c731a0f131
commit 6795c93f99
299 changed files with 137776 additions and 1 deletions

16
vortrag/Makefile Normal file
View File

@ -0,0 +1,16 @@
.PHONY: pdf
INPUT = vortrag.md
all: slides
slides: $(INPUT)
pandoc -f markdown+smart+emoji -t revealjs \
--template ./template.html \
--incremental \
--indented-code-classes=haskell \
--section-divs \
-o chemodiversity.html $(INPUT)
serve: chemodiversity.html
python3 -m http.server 8080

1
vortrag/MathJax Symbolic link
View File

@ -0,0 +1 @@
../MathJax/

413
vortrag/chemodiversity.html Normal file
View File

@ -0,0 +1,413 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>
Chemodiversity: A short overview of this project
</title>
<link rel="stylesheet" href="/reveal.js/css/reveal.css">
<!-- My solarized Theme (derived from reveal's solarized.css) -->
<link rel="stylesheet" href="/css/solarized_plus.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '/reveal.js/css/print/pdf.css' : '/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!-- MathJax config -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
jax: ["input/TeX","output/HTML-CSS"],
TeX: {
Macros: {
R: "{\\mathrm{{I}\\kern-.15em{R}}}",
laplace: "{\\Delta}",
grad: "{\\nabla}",
T: "^{\\mathsf{T}}",
abs: ['\\left\\lvert #1 \\right\\rvert', 1],
norm: ['\\left\\Vert #1 \\right\\Vert', 1],
iprod: ['\\left\\langle #1 \\right\\rangle', 1],
vec: ['\\mathbf{#1}', 1],
mat: ['\\mathbf{#1}', 1],
set: ['\\mathcal{#1}', 1],
func: ['\\mathrm{#1}', 1],
trans: ['{#1}\\mkern-1mu^{\\mathsf{T}}', 1],
matrix: ['\\begin{bmatrix} #1 \\end{bmatrix}', 1],
vector: ['\\begin{pmatrix} #1 \\end{pmatrix}', 1],
of: ['\\mkern{-2mu}\\left( #1 \\right\)', 1]
}
},
"HTML-CSS": {
styles: {
".reveal section .MathJax_Display": { margin: "0.5em 0em" }
},
scale: 95
}
});
</script>
</head>
<body>
<!-- here come the slides -->
<div class="reveal">
<div class="slides">
<!-- Title slide -->
<section class="white-on-blue">
<div class="title"> Chemodiversity </div>
<div class="subtitle"> A short overview of this project </div>
<div class="author"> Stefan Dresselhaus </div>
<div class="affiliation"> Theoretic Biology Group<br> Bielefeld University </div>
</section>
<!-- Table of Contents -->
<!-- all the slides from markdown document: DO NOT INDENT THE body LINE!!! -->
<section class="slide level1">
<section id="what-is-chemodiversity" class="level2">
<h2>What is chemodiversity?</h2>
<ul>
<li class="fragment">It was observed, that many plants seem to produce many compounds with no obvious purpose</li>
<li class="fragment">Using resources to produce such compounds (instead of i.e. growing) should yield a fitness-disadvantage</li>
<li class="fragment">one expects evolution to eliminate such behavior</li>
</ul>
</section>
<section id="question-why-is-this-behavior-observed" class="level2">
<h2>Question: Why is this behavior observed?</h2>
<ul>
<li class="fragment">Are these compounds necessary for some unresearched reason?
<ul>
<li class="fragment">unknown environmental effects?</li>
<li class="fragment">unknown intermediate products for necessary defenses?</li>
<li class="fragment">speculative diversity because they could be useful after genetic mutations?</li>
</ul></li>
</ul>
</section>
<section id="screening-hypothesis" class="level2">
<h2>Screening Hypothesis</h2>
<ul>
<li class="fragment">First suggested by Jones &amp; Firn (<a href="https://doi.org/10.1098/rstb.1991.0077">1991</a>)</li>
<li class="fragment">new (random) compounds are rarely biologically active</li>
<li class="fragment">plants have a higher chance finding an active compound if they diversify</li>
<li class="fragment">many (inactive) compounds are sustained for a while because they may be precursors to biologically active substances</li>
</ul>
<div class="fragment">
<p>There are indications for and against this hypothesis by <a href="https://nph.onlinelibrary.wiley.com/doi/full/10.1111/nph.12526#nph12526-bib-0093">various groups</a>.</p>
</div>
</section>
</section>
<section id="setting-up-a-simulation" class="slide level1">
<h1>Setting up a simulation</h1>
<blockquote>
<p>If you wish to make apple pie from scratch, you must first create the universe<br />
- Carl Sagan</p>
</blockquote>
</section>
<section class="slide level1">
<section id="defining-chemistry" class="level2">
<h2>Defining Chemistry</h2>
<ul>
<li class="fragment">First of all we define the chemistry of our environment, so we know all possible interactions and can manipulate them at will.</li>
<li class="fragment">We differentiate between <strong><code class="sourceCode haskell"><span class="dt">Substrate</span></code></strong> and <strong><code class="sourceCode haskell"><span class="dt">Products</span></code></strong>:
<ul>
<li class="fragment"><strong><code class="sourceCode haskell"><span class="dt">Substrate</span></code></strong> can just be used (i.e. real substrates if the whole metabolism should be simulated, <strong><code class="sourceCode haskell"><span class="dt">PPM</span></code></strong><sup>[1]</sup> in our simplified case)</li>
<li class="fragment"><strong><code class="sourceCode haskell"><span class="dt">Products</span></code></strong> are nodes in our chemistry environment.</li>
</ul></li>
<li class="fragment"><p>In Code:</p>
<pre class="sourceCode haskell" id="cb1"><code class="sourceCode haskell"><div class="sourceLine" id="cb1-1" data-line-number="1"><span class="kw">data</span> <span class="dt">Compound</span> <span class="fu">=</span> <span class="dt">Substrate</span> <span class="dt">Nutrient</span></div>
<div class="sourceLine" id="cb1-2" data-line-number="2"> <span class="fu">|</span> <span class="dt">Produced</span> <span class="dt">Component</span></div>
<div class="sourceLine" id="cb1-3" data-line-number="3"> <span class="fu">|</span> <span class="dt">GenericCompound</span> <span class="dt">Int</span></div></code></pre>
<div class="footer">
<p><sup>[1]</sup>: plants primary metabolism</p>
</div></li>
</ul>
</section>
<section id="usage-in-the-current-model" class="level2">
<h2>Usage in the current Model</h2>
<ul>
<li class="fragment">The Model used for evaluation just has one <code class="sourceCode haskell"><span class="dt">Substrate</span></code>:<br />
<code class="sourceCode haskell"><span class="dt">PPM</span></code> with a fixed Amount to account for effects of sucking primary-metabolism-products out of the primary metabolic cycle</li>
<li class="fragment">This is used to simulate i.e. worse growth, fertility and other things affecting the fitness of a plant.</li>
<li class="fragment">We are not using named Compounds, but restrict to generic <code class="sourceCode haskell"><span class="dt">Compound</span> <span class="dv">1</span></code>, <code class="sourceCode haskell"><span class="dt">Compound</span> <span class="dv">2</span></code></li>
<li class="fragment">Not done, but worth exploring:
<ul>
<li class="fragment">Take a “real-world” snapshot of Nutrients and Compounds and recreate them</li>
<li class="fragment">See if the simulation follows the real world</li>
</ul></li>
</ul>
</section>
<section id="defining-a-metabolism" class="level2">
<h2>Defining a Metabolism</h2>
<ul>
<li class="fragment">We define <strong><code class="sourceCode haskell"><span class="dt">Enzyme</span></code>s</strong> as
<ul>
<li class="fragment">having a recipe for a chemical reaction</li>
<li class="fragment">are reversible</li>
<li class="fragment">may have dependencies on catalysts to be present</li>
<li class="fragment">may have higher dominance over other enzymes with the same reaction</li>
</ul></li>
<li class="fragment">Input can be <code class="sourceCode haskell"><span class="dt">Substrate</span></code> and/or <code class="sourceCode haskell"><span class="dt">Products</span></code></li>
<li class="fragment">Outputs can only be <code class="sourceCode haskell"><span class="dt">Products</span></code></li>
<li class="fragment"><span class="math inline"></span> This makes them to Edges in a graph combining the chemical compounds</li>
</ul>
</section>
<section id="usage-in-the-current-model-1" class="level2">
<h2>Usage in the current Model</h2>
<ul>
<li class="fragment"><code class="sourceCode haskell"><span class="dt">Enzyme</span></code>s all
<ul>
<li class="fragment">only map <code class="sourceCode haskell"><span class="dv">1</span></code> input to <code class="sourceCode haskell"><span class="dv">1</span></code> Output with a production rate of <code class="sourceCode haskell"><span class="dv">1</span></code> per <code class="sourceCode haskell"><span class="dt">Enzyme</span></code><br />
(i.e. <code class="sourceCode haskell"><span class="fu">-</span><span class="dv">1</span> <span class="dt">Compound</span> <span class="dv">2</span> <span class="ot">-&gt;</span> <span class="fu">+</span><span class="dv">1</span> <span class="dt">Compound</span> <span class="dv">5</span></code>)</li>
<li class="fragment">are equally dominant</li>
<li class="fragment">need no catalysts</li>
</ul></li>
</ul>
</section>
<section id="defining-predators" class="level2">
<h2>Defining Predators</h2>
<ul>
<li class="fragment"><strong><code class="sourceCode haskell"><span class="dt">Predator</span></code>s</strong> consist of
<ul>
<li class="fragment">a list of <code class="sourceCode haskell"><span class="dt">Compound</span></code>s that can kill them</li>
<li class="fragment">a fitness impact (<span class="math inline">[0..1]</span>) as the probability of killing the plant</li>
<li class="fragment">an expected number of attacks per generation</li>
<li class="fragment">a probability (<span class="math inline">[0..1]</span>) of appearing in a single generation</li>
</ul></li>
<li class="fragment"><code class="sourceCode haskell"><span class="dt">Predator</span></code> need not necessary be biologically motivated
<ul>
<li class="fragment">i.e. rare, nearly devastating attacks (floods, droughts, …) with realistic probabilities</li>
</ul></li>
</ul>
</section>
<section id="example-environment" class="level2">
<h2>Example Environment</h2>
<div class="columns">
<div class="column" style="width:37%;">
<ul>
<li class="fragment">The complete environment now consists of
<ul>
<li class="fragment"><code class="sourceCode haskell"><span class="dt">Compound</span></code>s:<br />
<img data-src="img/compound_example.png" style="vertical-align:middle" /></li>
<li class="fragment"><code class="sourceCode haskell"><span class="dt">Enzyme</span></code>s:<br />
<img data-src="img/enzyme_example.png" style="vertical-align:middle" /></li>
<li class="fragment"><code class="sourceCode haskell"><span class="dt">Predator</span></code>s:<br />
<img data-src="img/predator_example.png" style="vertical-align:middle" /></li>
</ul></li>
</ul>
</div><div class="column fragment" style="width:63%;">
<figure>
<img data-src="img/environment.tree.png" alt="Our default test-environment" style="width:75.0%" /><figcaption>Our default test-environment</figcaption>
</figure>
<p>Additional rules:</p>
<ul>
<li class="fragment">Every “subtree” from the marked <code class="sourceCode haskell"><span class="dt">PPM</span></code> is treated as a separate species (fungi, animals, …)<br />
<span class="math inline"></span> Every predator can only be affected by toxins in the same part of the tree</li>
<li class="fragment">Trees can be automatically generated in a decent manner to search for environmens where specific effects may arise</li>
</ul>
</div>
</div>
<aside class="notes">
<p>CTRL+Click for zoom!</p>
<ul>
<li>All starts at PPM (Plant Primary Metabolism)</li>
<li>Red = Toxic</li>
<li>Blue = Predators</li>
</ul>
</aside>
</section>
</section>
<section class="slide level1">
<section id="plants" class="level2">
<h2>Plants</h2>
<p>A plant consists of …</p>
</section>
<section id="metabolism-simulation" class="level2">
<h2>Metabolism simulation</h2>
<p>Compounds are created foo..</p>
</section>
<section id="fitness" class="level2">
<h2>Fitness</h2>
<ul>
<li class="fragment">Static costs of enzymes</li>
<li class="fragment">Cost of active enzymes</li>
</ul>
</section>
<section id="attacker" class="level2">
<h2>Attacker</h2>
<ul>
<li class="fragment">Rate of attack ~&gt; Paper, Formulas</li>
<li class="fragment">Defenses
<ul>
<li class="fragment">single plant</li>
<li class="fragment">automimicry</li>
</ul></li>
</ul>
</section>
<section id="haploid-mating" class="level2">
<h2>Haploid mating</h2>
<ul>
<li class="fragment">fixed population-size (100)</li>
<li class="fragment"><span class="math inline">$p(\textrm{reproduction}) = \frac{\textrm{plant-fitness}}{\textrm{total fitness in population}}$</span></li>
<li class="fragment">Gene
<ul>
<li class="fragment">mutation</li>
<li class="fragment">duplication</li>
<li class="fragment">deletion</li>
<li class="fragment">addition</li>
<li class="fragment">activation-noise</li>
</ul></li>
</ul>
</section>
</section>
<section class="slide level1">
<section id="simulations" class="level2">
<h2>Simulations</h2>
<p>Parameters tested</p>
<ul>
<li class="fragment">x</li>
<li class="fragment">y</li>
<li class="fragment">z</li>
</ul>
</section>
</section>
<section id="results" class="slide level1">
<h1>Results</h1>
<blockquote>
<p>It doesnt matter how beautiful your theory is, it doesnt matter how smart you are. If it doesnt agree with experiment, its wrong.<br />
- Richard P. Feynman</p>
</blockquote>
</section>
<section class="slide level1">
</section>
</div>
</div>
<script src="/reveal.js/lib/js/head.min.js"></script>
<script src="/reveal.js/js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
// reveal settings
controls: false,
progress: false,
slideNumber: true,
history: true,
center: false,
transition: 'none',
viewDistance: 2, // otherwise videos start early
width: 1280,
height: 1024,
minScale: 0.2,
maxScale: 5, // if this threshold is reached, the chalkboard drawing will be wrongly positioned. hence large threshold!
pdfMaxPagesPerSlide: 1, // slides are cropped on one page for PDF export
// use local mathjax installation
math: { mathjax: '/MathJax/MathJax.js', config: 'TeX-AMS_HTML-full' },
// setup reveal-menu
menu: {
side: 'right',
numbers: false,
titleSelector: 'h1, h2',
hideMissingTitles: false,
markers: false,
custom: false,
themes: false,
transitions: false,
openButton: false,
openSlideNumber: true,
keyboard: true
},
// setup charts
chart: {
defaults: {
global: {
"defaultFontFamily": "Lato",
"defaultFontColor": "black",
"defaultFontSize": 20,
title: {
"fontFamily": "Lato",
"fontSize": 30,
},
legend: {
"position": "bottom"
}
},
},
line: {
backgroundColor: [ "rgba(42,157,223,.1)", "rgba(245,159,0,.1)", "rgba(182,200,40,.1)" ],
borderColor: [ "rgba(42,157,223,1)", "rgba(245,159,0,1)", "rgba(182,200,40,1)" ],
},
bar: {
backgroundColor: [ "rgba(42,157,223,.8)", "rgba(245,159,0,.8)", "rgba(182,200,40,.8)" ],
borderColor: [ "rgba(42,157,223,1)", "rgba(245,159,0,1)", "rgba(182,200,40,1)" ]
},
pie: {
backgroundColor: [ ["rgba(0,0,0,.8)" , "rgba(220,20,20,.8)", "rgba(20,220,20,.8)", "rgba(220,220,20,.8)", "rgba(20,20,220,.8)"] ]},
radar: {
borderColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ]
}
},
// keyboard shortcuts
keyboard: {
40: function() { Reveal.next(); }, // up: next slide
38: function() { Reveal.prev(); }, // down: prev slide
},
// load plugins
dependencies: [
{ src: '/reveal.js/plugin/math/math.js' },
{ src: '/reveal.js/plugin/notes/notes.js', async: true },
{ src: '/reveal.js-menu/menu.js' },
{ src: '/reveal.js-plugins/chart/Chart.min.js' },
{ src: '/reveal.js-plugins/chart/csv2chart.js' },
{ src: '/js/zoom.js', async: true },
]
});
</script>
</body>
</html>

View File

@ -0,0 +1,650 @@
/**
* Solarized Light theme for reveal.js.
* Author: Achim Staebler
*/
@import url(../reveal.js/lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* Solarized colors by Ethan Schoonover
*/
html * {
color-profile: sRGB;
rendering-intent: auto; }
/*********************************************
* GLOBAL STYLES
*********************************************/
body {
background: #fdf6e3;
background-color: #fdf6e3; }
.reveal {
font-family: "Lato", sans-serif;
font-size: 36px;
font-weight: normal;
color: #657b83; }
::selection {
color: #fff;
background: #d33682;
text-shadow: none; }
::-moz-selection {
color: #fff;
background: #d33682;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #586e75;
font-family: "League Gothic", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase;
text-shadow: none;
word-wrap: break-word; }
.reveal h1 {
font-size: 1.5em; }
.reveal h2 {
font-size: 1.3em; }
.reveal h3 {
font-size: 1.1em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 15px;
font-style: italic;
background: rgba(88, 110, 117, 0.1);
box-shadow: inset 0px 0px 10px 2px rgba(0, 0, 0, 0.5); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/*********************************************
* LINKS
*********************************************/
.reveal a {
color: #586e75;
text-decoration: none;
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #78b9e6;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #1a6091; }
/*********************************************
* IMAGES
*********************************************/
.reveal section img {
margin: 15px 0px;
background: rgba(255, 255, 255, 0.12);
border: 0px solid #657b83;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
border-color: #586e75;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls {
color: #586e75; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2);
color: #586e75; }
.reveal .progress span {
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********
* Own additions
*********/
.reveal sup, .reveal sub {
font-size: 60%;
}
/*********************************************
* ADD: TITLE SLIDE
*********************************************/
.white-on-blue {
color: #fdf6e3;
background-color: #586e75;
}
.reveal .title {
margin: 30px 0 0 0;
font-weight: bold;
font-style: normal;
font-size: 1.5em;
text-align: center;
}
.reveal .subtitle {
margin: 10px 0 0 0;
font-weight: normal;
font-style: italic;
font-size: 1.3em;
text-align: center;
}
.reveal .author {
margin: 50px 0 0 0;
font-weight: normal;
font-style: normal;
font-size: 1.0em;
text-align: center;
}
.reveal .affiliation {
margin: 10px 0 30px 0;
font-weight: normal;
font-style: normal;
font-size: 1.0em;
text-align: center;
}
/*********************************************
* ADD: SECTIONS
*********************************************/
.reveal .section-title h1 {
/* white on blue */
color: #fdf6e3;
background-color: #586e75;
/* large top margin -> vertical centering */
margin: 100px auto;
padding: 50px;
/* large bold font */
font-weight: bold;
font-style: normal;
font-size: 1.5em;
}
/*********************************************
* ADD: FRAGMENT ANIMATION
*********************************************/
.fragment.current-visible.visible:not(.current-fragment) {
display: none;
height:0px;
line-height: 0px;
font-size: 0px;
}
/*********************************************
* ADD: Quiz
*********************************************/
.reveal .slides > section {
counter-reset: wwm-counter;
}
.reveal .answer {
display: inline-block;
position: relative;
width: 400px;
text-align: left;
margin: 20px;
border: 3px solid #586e75;
border-radius: 20px;
padding: 20px;
font-weight: normal;
color: black;
}
.reveal .answer:before {
content: counter(wwm-counter, upper-latin) ": ";
counter-increment: wwm-counter;
margin-right: 0.5em;
font-weight: bold;
}
.reveal .tooltip {
visibility: hidden;
max-width: 390px;
top: 100%;
background-color: grey;
color: #fdf6e3;
text-align: center;
padding: 5px;
border-radius: 6px;
position: absolute;
z-index: 1;
font-size: 0.5em;
}
.reveal .show-wrong {
background-color: #ffaaaa;
border: 3px solid red;
}
.reveal .show-right {
background-color: #aaffaa;
border: 3px solid green;
}
.reveal .show-wrong:hover .tooltip, .reveal .show-right:hover .tooltip {
visibility: visible;
}
/*********************************************
* ADD: COMMENT BUBBLES
*********************************************/
.reveal .bubble {
color: #fdf6e3;
background-color: #586e75;
padding:10px;
border-radius:5px;
box-shadow: 0px 0px 30px 0px rgba(0,0,0,0.35);
}
.reveal .comment {
color: #fdf6e3;
background-color: #586e75;
position:absolute;
padding:10px;
border-radius:5px;
font-size: 0.5em;
box-shadow: 0px 0px 30px 0px rgba(0,0,0,0.35);
}
.reveal .comment-left {
color: #fdf6e3;
background-color: #586e75;
position:absolute;
padding:5px;
font-size: 80%;
border-radius:20px 20px 0px 20px;
box-shadow: 0px 0px 30px 0px rgba(0,0,0,0.35);
}
.reveal .comment-right {
color: #fdf6e3;
background-color: #586e75;
position:absolute;
padding:5px;
font-size: 80%;
border-radius:20px 20px 20px 0px;
box-shadow: 0px 0px 30px 0px rgba(0,0,0,0.35);
}
.reveal .comment-big {
color: #fdf6e3;
background-color: #586e75;
padding:10px;
border-radius:5px;
box-shadow: 0px 0px 30px 0px rgba(0,0,0,0.35);
}
/*********************************************
* ADD: FOOTER COMMENTS
* either us footer tag or class
*********************************************/
.reveal footer, .reveal .footer {
position: absolute;
text-align: center;
margin: auto;
padding: 5px;
font-size: 0.5em;
left: 100px;
width: 724px;
top: 750px;
}
/*********************************************
* ADD: GENERIC HIGHLIGHT
*********************************************/
.reveal .highlight {
background-color: #fdfbaa;
}
/*********************************************
* ADD: margin: auto
*********************************************/
.reveal .automargin {
margin: 10px auto;
}
/*********************************************
* ADD: ADD SHADOWS (e.g. to images)
*********************************************/
.reveal .shadow {
box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.25);
}
.reveal table p {
margin: 0px;
}
.reveal .neg80 {
margin-top: -80px;
}
.reveal .neg60 {
margin-top: -60px;
}
/* class for aligning divs in a row */
.reveal .ilb {
display: inline-block;
vertical-align: top;
}
/*********************************************
* ADD: MathJax equation should get some
vertical distance to text before them
*********************************************/
.reveal .MathJax_Display {
margin-top: 0.5em;
}
/*********************************************
* ADD: Source Highlighting from Pandoc
*********************************************/
code {
white-space: pre-wrap;
}
span.smallcaps {
font-variant: small-caps;
}
div.line-block {
white-space: pre-line;
}
div.column {
display: inline-block;
vertical-align: top;
width: 50%;
}
div.sourceLine,
a.sourceLine {
display: inline-block;
min-height: 1.25em;
}
a.sourceLine {
pointer-events: none;
color: inherit;
text-decoration: inherit;
}
.sourceCode {
overflow: visible;
}
code.sourceCode {
white-space: pre;
}
@media print {
code.sourceCode {
white-space: pre-wrap;
}
div.sourceLine,
a.sourceLine {
text-indent: -1em;
padding-left: 1em;
}
}
pre.numberSource div.sourceLine,
.numberSource a.sourceLine {
position: relative;
}
pre.numberSource div.sourceLine::before,
.numberSource a.sourceLine::before {
content: attr(data-line-number);
position: absolute;
left: -5em;
text-align: right;
vertical-align: baseline;
border: none;
pointer-events: all;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
padding: 0 4px;
width: 4em;
}
pre.numberSource {
margin-left: 3em;
border-left: 1px solid #aaaaaa;
color: #aaaaaa;
padding-left: 4px;
}
@media screen {
a.sourceLine::before {
text-decoration: underline;
color: initial;
}
}
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.bn { color: #40a070; } /* BaseN */
code span.fl { color: #40a070; } /* Float */
code span.ch { color: #4070a0; } /* Char */
code span.st { color: #4070a0; } /* String */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.ot { color: #007020; } /* Other */
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.fu { color: #06287e; } /* Function */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code span.cn { color: #880000; } /* Constant */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.ss { color: #bb6688; } /* SpecialString */
code span.im { } /* Import */
code span.va { color: #19177c; } /* Variable */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.op { color: #666666; } /* Operator */
code span.bu { } /* BuiltIn */
code span.ex { } /* Extension */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.at { color: #7d9029; } /* Attribute */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */

View File

@ -0,0 +1,6 @@
digraph compound {
"Magic Dust";
"Toxin" [style=filled, fillcolor="0,1,0.9"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

View File

@ -0,0 +1,6 @@
digraph compound {
"Magic Dust" -> "Toxin" [label="Enzyme ",len=2];
"Toxin" [style=filled, fillcolor="0,1,0.9"];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@ -0,0 +1,8 @@
digraph compound {
"Magic Dust" -> "Toxin" [label="Enzyme ",len=2];
"Toxin" [style=filled, fillcolor="0,1,0.9"];
"Predator" [style=filled, fillcolor="0.66,0.1,0.9"];
"Predator" -> "Toxin" [label="is killed by", len=2];
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

155
vortrag/js/zoom.js Normal file
View File

@ -0,0 +1,155 @@
//
// Based on zoom.js plugin of reveal.js
// modified to correctly handle reveal's scaling
// to react on dblclick
// to remove (unused) panning code
//
/*!
* zoom.js 0.3 (modified for use with reveal.js)
* http://lab.hakim.se/zoom-js
* MIT licensed
*
* Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se
*/
var RevealZoom = window.RevealZoom || (function(){
// The current zoom level (scale)
var level = 1;
// The easing that will be applied when we zoom in/out
document.body.style.transition = 'transform 0.8s ease';
document.body.style.OTransition = '-o-transform 0.8s ease';
document.body.style.msTransition = '-ms-transform 0.8s ease';
document.body.style.MozTransition = '-moz-transform 0.8s ease';
document.body.style.WebkitTransition = '-webkit-transform 0.8s ease';
/**
* Applies the CSS required to zoom in, prefers the use of CSS3
* transforms but falls back on zoom for IE.
*
* @param {Object} rect
* @param {Number} scale
*/
function magnify( rect, scale ) {
// Ensure a width/height is set
rect.width = rect.width || 1;
rect.height = rect.height || 1;
// Center the rect within the zoomed viewport
rect.x -= ( window.innerWidth - ( rect.width * scale ) ) / 2;
rect.y -= ( window.innerHeight - ( rect.height * scale ) ) / 2;
// Reset
if( scale === 1 )
{
document.body.style.transform = '';
document.body.style.OTransform = '';
document.body.style.msTransform = '';
document.body.style.MozTransform = '';
document.body.style.WebkitTransform = '';
}
// Scale
else
{
var origin = '0px 0px';
var transform = 'translate('+ -rect.x +'px,'+ -rect.y +'px) scale('+ scale +')';
document.body.style.transformOrigin = origin;
document.body.style.OTransformOrigin = origin;
document.body.style.msTransformOrigin = origin;
document.body.style.MozTransformOrigin = origin;
document.body.style.WebkitTransformOrigin = origin;
document.body.style.transform = transform;
document.body.style.OTransform = transform;
document.body.style.msTransform = transform;
document.body.style.MozTransform = transform;
document.body.style.WebkitTransform = transform;
}
level = scale;
}
// zoom to element on double click
document.querySelector( '.reveal .slides' ).addEventListener( 'dblclick', function( event ) {
event.preventDefault();
zoomTo(event.target);
});
// un-show answers on slide-change
Reveal.addEventListener( 'slidechanged', function() {
if( level !== 1 )
{
zoomOut();
}
});
/**
* Zooms in on an HTML element.
*
* @param element: HTML element to zoom in on
*/
function zoomTo( element )
{
// Due to an implementation limitation we can't zoom in
// to another element without zooming out first
if( level !== 1 )
{
zoomOut();
}
else
{
// Space around the zoomed in element to leave on screen
var padding = 20;
var bounds = element.getBoundingClientRect();
// are slides zoomed up, and is this done using CSS zoom?
// then incorporate this zoom!
var zoom = document.querySelector( '.reveal .slides' ).style.zoom;
var scale = (zoom < 1) ? 1 : zoom;
var options = {
x: Math.round( bounds.left * scale - padding ),
y: Math.round( bounds.top * scale - padding ),
width: Math.round( bounds.width * scale + ( padding * 2 ) ),
height: Math.round( bounds.height * scale + ( padding * 2 ) )
};
options.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 );
if( options.scale > 1 )
{
options.x *= options.scale;
options.y *= options.scale;
magnify( options, options.scale );
}
}
}
// zoom out to normal scale
function zoomOut()
{
magnify( { x: 0, y: 0 }, 1 );
level = 1;
}
return this;
})();

View File

@ -0,0 +1 @@
\renewenvironment{Shaded} {\footnotesize} {}

1
vortrag/reveal.js Symbolic link
View File

@ -0,0 +1 @@
../reveal.js/

1
vortrag/reveal.js-menu Symbolic link
View File

@ -0,0 +1 @@
../reveal.js-menu/

1
vortrag/reveal.js-plugins Symbolic link
View File

@ -0,0 +1 @@
../reveal.js-plugins/

211
vortrag/template.html Normal file
View File

@ -0,0 +1,211 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
$if(title)$
<title>
$title$$if(subtitle)$: $subtitle$ $endif$
</title>
$endif$
<link rel="stylesheet" href="/reveal.js/css/reveal.css">
<!-- My solarized Theme (derived from reveal's solarized.css) -->
<link rel="stylesheet" href="/css/solarized_plus.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '/reveal.js/css/print/pdf.css' : '/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!-- MathJax config -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
jax: ["input/TeX","output/HTML-CSS"],
TeX: {
Macros: {
R: "{\\mathrm{{I}\\kern-.15em{R}}}",
laplace: "{\\Delta}",
grad: "{\\nabla}",
T: "^{\\mathsf{T}}",
abs: ['\\left\\lvert #1 \\right\\rvert', 1],
norm: ['\\left\\Vert #1 \\right\\Vert', 1],
iprod: ['\\left\\langle #1 \\right\\rangle', 1],
vec: ['\\mathbf{#1}', 1],
mat: ['\\mathbf{#1}', 1],
set: ['\\mathcal{#1}', 1],
func: ['\\mathrm{#1}', 1],
trans: ['{#1}\\mkern-1mu^{\\mathsf{T}}', 1],
matrix: ['\\begin{bmatrix} #1 \\end{bmatrix}', 1],
vector: ['\\begin{pmatrix} #1 \\end{pmatrix}', 1],
of: ['\\mkern{-2mu}\\left( #1 \\right\)', 1]
}
},
"HTML-CSS": {
styles: {
".reveal section .MathJax_Display": { margin: "0.5em 0em" }
},
scale: 95
}
});
</script>
</head>
<body>
<!-- here come the slides -->
<div class="reveal">
<div class="slides">
<!-- Title slide -->
$if(title)$
<section class="white-on-blue">
<div class="title"> $title$ </div>
$if(subtitle)$
<div class="subtitle"> $subtitle$ </div>
$endif$
$if(author)$
<div class="author"> $author$ </div>
$if(affiliation)$
<div class="affiliation"> $affiliation$ </div>
$endif$
$endif$
</section>
$endif$
<!-- Table of Contents -->
$if(toc)$
<section>
<h2>Outline</h2>
<nav id="$idprefix$TOC">
$toc$
</nav>
</section>
$endif$
<!-- all the slides from markdown document: DO NOT INDENT THE body LINE!!! -->
$body$
</div>
</div>
<script src="/reveal.js/lib/js/head.min.js"></script>
<script src="/reveal.js/js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
// reveal settings
controls: false,
progress: false,
slideNumber: true,
history: true,
center: false,
transition: 'none',
viewDistance: 2, // otherwise videos start early
width: 1280,
height: 1024,
minScale: 0.2,
maxScale: 5, // if this threshold is reached, the chalkboard drawing will be wrongly positioned. hence large threshold!
pdfMaxPagesPerSlide: 1, // slides are cropped on one page for PDF export
// use local mathjax installation
math: { mathjax: '/MathJax/MathJax.js', config: 'TeX-AMS_HTML-full' },
// setup reveal-menu
menu: {
side: 'right',
numbers: false,
titleSelector: 'h1, h2',
hideMissingTitles: false,
markers: false,
custom: false,
themes: false,
transitions: false,
openButton: false,
openSlideNumber: true,
keyboard: true
},
// setup charts
chart: {
defaults: {
global: {
"defaultFontFamily": "Lato",
"defaultFontColor": "black",
"defaultFontSize": 20,
title: {
"fontFamily": "Lato",
"fontSize": 30,
},
legend: {
"position": "bottom"
}
},
},
line: {
backgroundColor: [ "rgba(42,157,223,.1)", "rgba(245,159,0,.1)", "rgba(182,200,40,.1)" ],
borderColor: [ "rgba(42,157,223,1)", "rgba(245,159,0,1)", "rgba(182,200,40,1)" ],
},
bar: {
backgroundColor: [ "rgba(42,157,223,.8)", "rgba(245,159,0,.8)", "rgba(182,200,40,.8)" ],
borderColor: [ "rgba(42,157,223,1)", "rgba(245,159,0,1)", "rgba(182,200,40,1)" ]
},
pie: {
backgroundColor: [ ["rgba(0,0,0,.8)" , "rgba(220,20,20,.8)", "rgba(20,220,20,.8)", "rgba(220,220,20,.8)", "rgba(20,20,220,.8)"] ]},
radar: {
borderColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ]
}
},
// keyboard shortcuts
keyboard: {
40: function() { Reveal.next(); }, // up: next slide
38: function() { Reveal.prev(); }, // down: prev slide
},
// load plugins
dependencies: [
{ src: '/reveal.js/plugin/math/math.js' },
{ src: '/reveal.js/plugin/notes/notes.js', async: true },
{ src: '/reveal.js-menu/menu.js' },
{ src: '/reveal.js-plugins/chart/Chart.min.js' },
{ src: '/reveal.js-plugins/chart/csv2chart.js' },
{ src: '/js/zoom.js', async: true },
]
});
</script>
</body>
</html>

255
vortrag/vortrag.md Normal file
View File

@ -0,0 +1,255 @@
---
title: Chemodiversity
subtitle: A short overview of this project
author: Stefan Dresselhaus
license: BSD
affiliation: Theoretic Biology Group<br>
Bielefeld University
abstract: Attempt to find indications for chemodiversity in the plant secondary metabolism according to the screening hypothesis
date: \today
papersize: a4
fontsize: 10pt
documentclass: scrartcl
margin: 0.2
slideNumber: true
...
What is chemodiversity?
-----------------------
- It was observed, that many plants seem to produce many compounds with no
obvious purpose
- Using resources to produce such compounds (instead of i.e. growing) should
yield a fitness-disadvantage
- one expects evolution to eliminate such behavior
Question: Why is this behavior observed?
--------------------------------
- Are these compounds necessary for some unresearched reason?
- unknown environmental effects?
- unknown intermediate products for necessary defenses?
- speculative diversity because they could be useful after genetic mutations?
Screening Hypothesis
--------------------
- First suggested by Jones & Firn ([1991](https://doi.org/10.1098/rstb.1991.0077))
- new (random) compounds are rarely biologically active
- plants have a higher chance finding an active compound if they diversify
- many (inactive) compounds are sustained for a while because they may be
precursors to biologically active substances
. . .
There are indications for and against this hypothesis by [various groups](https://nph.onlinelibrary.wiley.com/doi/full/10.1111/nph.12526#nph12526-bib-0093).
--------------------------------------------------------------------------------
Setting up a simulation
=======================
>If you wish to make apple pie from scratch, you must first create the universe
> - Carl Sagan
--------------------------------------------------------------------------------
Defining Chemistry
------------------
- First of all we define the chemistry of our environment, so we know all possible
interactions and can manipulate them at will.
- We differentiate between **`Substrate`{.haskell}** and
**`Products`{.haskell}**:
- **`Substrate`{.haskell
}** can just be used (i.e. real substrates if the whole metabolism
should be simulated, **`PPM`{.haskell}**^[1]^ in our simplified case)
- **`Products`{.haskell
}** are nodes in our chemistry environment.
- In Code:
```haskell
data Compound = Substrate Nutrient
| Produced Component
| GenericCompound Int
```
::: footer
^[1]^: plants primary metabolism
:::
Usage in the current Model
--------------------------
- The Model used for evaluation just has one `Substrate`{.haskell}:
`PPM`{.haskell} with a fixed Amount to account for effects of sucking
primary-metabolism-products out of the primary metabolic cycle
- This is used to simulate i.e. worse growth, fertility and other things
affecting the fitness of a plant.
- We are not using named Compounds, but restrict to generic `Compound
1`{.haskell},
`Compound 2`{.haskell} ...
- Not done, but worth exploring:
- Take a "real-world" snapshot of Nutrients and Compounds and recreate them
- See if the simulation follows the real world
Defining a Metabolism
---------------------
- We define **`Enzyme`{.haskell}s** as
- having a recipe for a chemical reaction
- are reversible
- may have dependencies on catalysts to be present
- may have higher dominance over other enzymes with the same reaction
- Input can be `Substrate`{.haskell} and/or `Products`{.haskell}
- Outputs can only be `Products`{.haskell}
- $\Rightarrow$ This makes them to Edges in a graph combining the chemical
compounds
Usage in the current Model
--------------------------
- `Enzyme`{.haskell}s all
- only map `1`{.haskell} input to `1`{.haskell} Output with a production rate of `1`{.haskell} per `Enzyme`{.haskell}
(i.e. `-1 Compound 2 -> +1 Compound 5`{.haskell})
- are equally dominant
- need no catalysts
Defining Predators
------------------
- **`Predator`{.haskell}s** consist of
- a list of `Compound`{.haskell}s that can kill them
- a fitness impact ($[0..1]$) as the probability of killing the plant
- an expected number of attacks per generation
- a probability ($[0..1]$) of appearing in a single generation
- `Predator`{.haskell} need not necessary be biologically motivated
- i.e. rare, nearly devastating attacks (floods, droughts, ...) with realistic
probabilities
Example Environment
-------------------
:::::::::::::: {.columns}
::: {.column width=37%}
- The complete environment now consists of
- `Compound`{.haskell}s:
![](img/compound_example.png){style="vertical-align:middle"}
- `Enzyme`{.haskell}s:
![](img/enzyme_example.png){style="vertical-align:middle"}
- `Predator`{.haskell}s:
![](img/predator_example.png){style="vertical-align:middle"}
:::
::: {.column width=63% .fragment}
![Our default test-environment](img/environment.tree.png){width=75%}
Additional rules:
- Every "subtree" from the marked `PPM`{.haskell} is treated as a separate
species (fungi, animals, ...)
$\Rightarrow$ Every predator can only be affected by toxins in the same part of the tree
- Trees can be automatically generated in a decent manner to search for
environmens where specific effects may arise
:::
::::::::::::::
::::: notes :::::
CTRL+Click for zoom!
- All starts at PPM (Plant Primary Metabolism)
- Red = Toxic
- Blue = Predators
::::
--------------------------------------------------------------------------------
Plants
------
A plant consists of
...
Metabolism simulation
---------------------
Compounds are created foo..
Fitness
-------
- Static costs of enzymes
- Cost of active enzymes
Attacker
--------
- Rate of attack ~> Paper, Formulas
- Defenses
- single plant
- automimicry
Haploid mating
--------------
- fixed population-size (100)
- $p(\textrm{reproduction}) = \frac{\textrm{plant-fitness}}{\textrm{total fitness in population}}$
- Gene
- mutation
- duplication
- deletion
- addition
- activation-noise
--------------------------------------------------------------------------------
Simulations
-----------
Parameters tested
- x
- y
- z
--------------------------------------------------------------------------------
Results
=======
>It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong.
> - Richard P. Feynman
--------------------------------------------------------------------------------