-
Notifications
You must be signed in to change notification settings - Fork 0
/
utogig.Rmd
161 lines (133 loc) · 6.77 KB
/
utogig.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
---
title: "Using thermodynamics to obtain geochemical information from genomes (2023)"
output:
rmarkdown::html_vignette:
mathjax: null
vignette: >
%\VignetteIndexEntry{Using thermodynamics to obtain geochemical information from genomes (2023)}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
bibliography: JMDplots.bib
csl: elementa.csl
link-citations: true
---
<style>
/* https://gomakethings.com/how-to-break-an-image-out-of-its-parent-container-with-css/ */
@media (min-width: 700px) {
.full-width {
left: 50%;
margin-left: -50vw;
margin-right: -50vw;
max-width: 100vw;
position: relative;
right: 50%;
width: 100vw;
}
}
@media (min-width: 900px) {
.full-width {
left: 50vw; /* fallback if needed */
left: calc(50vw - 100px);
width: 900px;
position: relative;
}
}
</style>
```{r setup, include=FALSE}
library(knitr)
# Use pngquant to reduce size of PNG images
knit_hooks$set(pngquant = hook_pngquant)
pngquant <- "--speed=1 --quality=0-25"
# In case pngquant isn't available
if (!nzchar(Sys.which("pngquant"))) pngquant <- NULL
```
```{r options, include=FALSE}
options(width = 80)
```
```{r HTML, include=FALSE}
Zc <- "<i>Z</i><sub>C</sub>"
logaH2 <- "log<i>a</i><sub>H<sub>2</sub></sub>"
logfH2 <- "log<i>f</i><sub>H<sub>2</sub></sub>"
logfO2 <- "log<i>f</i><sub>O<sub>2</sub></sub>"
pH2 <- "<i>p</i><sub>H<sub>2</sub></sub>"
```
This vignette runs the code to make the plots from the following paper:
> Dick JM, Boyer GM, Canovas PA III, Shock EL. 2023. Using thermodynamics to obtain geochemical information from genomes. *Geobiology* **21**(2): 262--273 doi: [10.1111/gbi.12532](https://doi.org/10.1111/gbi.12532)
[Click here](https://onlinelibrary.wiley.com/share/author/Q9GIUWDD4K8NQ4IDJK4C?target=10.1111/gbi.12532) for full-text access to a view-only version of the paper.
On 2024-01-09, Figure 4 was modified from the original publication to show *percentages* of average affinity rankings of groups.
This does not change the crossover points of the lines (on the *x* axis), but does make the absolute positions of the lines (on the *y* axis) not depend on the number of genomes in each group.
This vignette was compiled on `r Sys.Date()` with **[JMDplots](https://github.com/jedick/JMDplots)** `r packageDescription("JMDplots")$Version` and **[CHNOSZ](http://chnosz.net)** `r packageDescription("CHNOSZ")$Version`.
```{r library, message = FALSE}
library(JMDplots)
```
## Chemical analysis of reference proteomes of methanogens reveals adaptation to redox conditions (Figure 1)
```{r utogig1, message = FALSE, out.width='100%', fig.width = 12, fig.height = 8, out.extra = 'class="full-width"', pngquant = pngquant}
utogig1()
```
**Data sources:** Hierarchical clustering tree of methanogenesis genes [@LL18]; `r Zc` calculated for reference proteomes [@DT23] based on RefSeq protein sequences [@OWB+16]. See Table S1 in the paper's Supplementary Information for references for optimal growth temperature (*T*~opt~).
## Relative stabilities of organic compounds depend on redox conditions (Figure 2)
```{r utogig2, message = FALSE, out.width='100%', fig.width = 7, fig.height = 6, pngquant = pngquant, dpi = 100}
utogig2()
```
**Data sources:** List of organic compounds from @SC10 and TCA cycle metabolites from @CS16. See Table 1 in the paper for references for thermodynamic data.
## Thermodynamic model for methanogen niche structure (Figure 3)
```{r utogig3, message = FALSE, out.width='100%', fig.width = 7, fig.height = 5, out.extra = 'class="full-width"', pngquant = "--speed=1 --quality=25-50", dpi = 100}
utogig3()
```
**Data sources:** Lost City *T* and H~2~ concentration [@KKF+05], Rainbow vent fluid mixing model [@SC10], methanogenic and non-methanogenic sediments [@LG88].
## Chemical and thermodynamic analysis of evolutionary divergence along redox gradients (Figure 4)
```{r utogig4, message = FALSE, out.width='100%', fig.width = 9, fig.height = 5, out.extra = 'class="full-width"', dpi = 100}
Table_S6 <- utogig4()
```
**Data sources:** Methanogens [@LL18], Nif-bearing organisms [@PCF+18], Thaumarchaeota [@RFH+19]. Amino acid compositions are from RefSeq proteomes (methanogens and Nif-bearing organisms) or NCBI and IMG genomes (Thaumarchaeota).
## Parametric and non-parametric tests of comparisons in Figure 4 (Table S6)
- **p_Tukey**: One-way ANOVA followed by Tukey's Honest Significant Difference test.
- **p_Dunn**: Kruskal-Wallis test followed by Dunn's test with Bonferroni correction for multiple comparisons.
```{r Table_S6, message = FALSE, out.width='100%', fig.width = 9, fig.height = 5, out.extra = 'class="full-width"', dpi = 100}
kable(Table_S6, row.names = FALSE, digits = 99, format.args = list(scientific = TRUE))
```
## Comparison of `r Zc` of proteomes predicted by Glimmer and downloaded from NCBI (Figure S1)
```{r utogigS1, out.width='60%', fig.align='center', fig.width = 4, fig.height = 4, pngquant = pngquant}
utogigS1()
```
## Association between redox gradients and `r Zc` of proteins and lipids in alkaline Yellowstone hot springs (Figure S2)
```{r utogigS2, out.width='80%', fig.align='center', fig.width = 8.5, fig.height = 4, pngquant = pngquant}
utogigS2()
```
**Data sources:** Proteins [@DS13] and lipids [@BSS+20].
## Relative stabilities of organic compounds at lower activity (Figure S3)
```{r utogigS3, message = FALSE, out.width='100%', fig.align='center', fig.width = 7, fig.height = 3.5, pngquant = pngquant}
utogig2(logact = -6)
```
## `r logaH2`-*T* plots for different organic compound classes (Figure S4)
```{r utogigS4, out.width='80%', fig.align='center', fig.width = 6, fig.height = 8, pngquant = pngquant}
utogigS4()
```
## Convert `r logaH2` to Eh
```{r utogig_logaH2_Eh, message = FALSE}
logaH2_15 <- -15
pH <- 7
(logK1 <- subcrt(c("H2", "H+", "e-"), c(-1, 2, 2), T = 25)$out$logK)
pe <- (- logK1 - 2 * pH - logaH2_15) / 2
Eh <- convert(pe, "Eh")
print(paste0("Given logaH2 = ", logaH2_15, " and pH = ", pH, ", Eh = ", round(1000 * Eh), " mV at equilibrium"))
```
## Convert `r pH2` to `r logaH2`
```{r utogig_pH2_logaH2, message = FALSE}
(logK2 <- subcrt(c("H2", "hydrogen"), c(-1, 1), T = 25)$out$logK)
# pH2 = 10^-2
logpH2 <- -2
print(paste0("Given logpH2 = ", logpH2, ", logaH2 = ", round(logpH2 - logK2, 1), " at equilibrium"))
# 0.55 ppmv H2
logpH2 <- log10(0.55e-6)
print(paste0("Given logpH2 = ", round(logpH2, 2), ", logaH2 = ", round(logpH2 - logK2, 1), " at equilibrium"))
```
## Convert `r logaH2` to `r logfH2` and `r logfO2`
```{r utogig_logaH2_logf, message = FALSE}
(logK3 <- subcrt(c("H2O", "oxygen", "hydrogen"), c(-1, 0.5, 1), T = 25)$out$logK)
logfH2 <- logaH2_15 + logK2
logfO2 <- 2 * (logK3 - logfH2)
print(paste0("Given logaH2 = ", logaH2_15, ", logfH2 = ", round(logfH2, 1), " at equilibrium"))
print(paste0("Given logaH2 = ", logaH2_15, ", logfO2 = ", round(logfO2, 1), " at equilibrium"))
```
## References