[CHNOSZ-commits] r941 - in pkg/CHNOSZ: . R demo man

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Mon Dec 8 03:11:39 CET 2025


Author: jedick
Date: 2025-12-08 03:11:38 +0100 (Mon, 08 Dec 2025)
New Revision: 941

Added:
   pkg/CHNOSZ/demo/phosphorylate.R
Modified:
   pkg/CHNOSZ/DESCRIPTION
   pkg/CHNOSZ/NAMESPACE
   pkg/CHNOSZ/R/examples.R
   pkg/CHNOSZ/R/phosphorylate.R
   pkg/CHNOSZ/demo/00Index
   pkg/CHNOSZ/man/examples.Rd
   pkg/CHNOSZ/man/phosphorylate.Rd
Log:
Add phosphorylate demo (LaRowe and Dick, 2025)


Modified: pkg/CHNOSZ/DESCRIPTION
===================================================================
--- pkg/CHNOSZ/DESCRIPTION	2025-12-07 04:49:45 UTC (rev 940)
+++ pkg/CHNOSZ/DESCRIPTION	2025-12-08 02:11:38 UTC (rev 941)
@@ -1,6 +1,6 @@
-Date: 2025-12-07
+Date: 2025-12-08
 Package: CHNOSZ
-Version: 2.2.0-7
+Version: 2.2.0-8
 Title: Thermodynamic Calculations and Diagrams for Geochemistry
 Authors at R: c(
     person("Jeffrey", "Dick", , "j3ffdick at gmail.com", role = c("aut", "cre"),

Modified: pkg/CHNOSZ/NAMESPACE
===================================================================
--- pkg/CHNOSZ/NAMESPACE	2025-12-07 04:49:45 UTC (rev 940)
+++ pkg/CHNOSZ/NAMESPACE	2025-12-08 02:11:38 UTC (rev 941)
@@ -62,7 +62,7 @@
 # added 20220620
   "stack_mosaic",
 # added 20251207
-  "phosphorylate"
+  "phosphorylate", "phospho_plot"
 )
 
 # Load shared objects
@@ -75,7 +75,7 @@
   "contourLines", "col2rgb", "rgb", "adjustcolor")
 importFrom("graphics", "abline", "axTicks", "axis", "barplot", "box",
   "contour", "image", "legend", "lines", "mtext", "par", "plot",
-  "plot.new", "plot.window", "points", "rect", "text", "title")
+  "plot.new", "plot.window", "points", "rect", "text", "title", "layout")
 importFrom("stats", "D", "as.formula", "cor", "lm", "loess.smooth",
   "na.omit", "predict.lm", "qqline", "qqnorm", "sd", "splinefun",
   "uniroot", "median", "predict", "smooth.spline", "optimize", "formula")

Modified: pkg/CHNOSZ/R/examples.R
===================================================================
--- pkg/CHNOSZ/R/examples.R	2025-12-07 04:49:45 UTC (rev 940)
+++ pkg/CHNOSZ/R/examples.R	2025-12-08 02:11:38 UTC (rev 941)
@@ -35,7 +35,7 @@
   "mosaic", "copper", "arsenic", "solubility", "gold", "contour", "sphalerite", "minsol",
   "Shh", "saturation", "adenine", "DEW", "lambda", "potassium", "TCA", "aluminum",
   "AD", "comproportionation", "Pourbaix", "E_coli", "yttrium", "rank.affinity", "uranyl",
-  "sum_S", "MgATP", "rubisco_Zc"),
+  "sum_S", "MgATP", "rubisco_Zc", "phosphorylate"),
   save.png = FALSE) {
   # Run one or more demos from CHNOSZ with ask = FALSE, and return the value of the last one
   out <- NULL
@@ -45,8 +45,10 @@
     message(paste("demos: running '", which[i], "'", sep = ""))
     width <- 500
     height <- 500
+    pointsize <- 12
     if(which[i] == "comproportionation") width <- 600
-    if(save.png) png(paste(which[i], "%d.png", sep = ""), width = width, height = height, pointsize = 12)
+    if(which[i] == "phosphorylate") {width <- 800; height <- 600; pointsize <- 16}
+    if(save.png) png(paste(which[i], "%d.png", sep = ""), width = width, height = height, pointsize = pointsize)
     out <- demo(which[i], package = "CHNOSZ", character.only = TRUE, echo = FALSE, ask = FALSE)
     if(save.png) dev.off()
   }

Modified: pkg/CHNOSZ/R/phosphorylate.R
===================================================================
--- pkg/CHNOSZ/R/phosphorylate.R	2025-12-07 04:49:45 UTC (rev 940)
+++ pkg/CHNOSZ/R/phosphorylate.R	2025-12-08 02:11:38 UTC (rev 941)
@@ -1,5 +1,7 @@
 # Calculate affinity of phosphorylation reactions taking account of speciation
 # 20251206 first version (extracted from sugars paper script) jmd
+# 20251208 add phospho_plot()
+
 phosphorylate <- function(reactant, P_source, loga_reactant = 0, loga_product = 0, loga_P_source = 0, loga_P_remainder = 0, const_pH = 7, ...) {
 
   # Affinity is calculated by summing:
@@ -7,6 +9,14 @@
   # 2) P_source + H2O = P_remainder + P (m2)
   # NOTE: reaction 2 is defined in reverse (to form H2O), then the opposite of the affinity is used for the sum
 
+  # P_source can be "P" (basic reaction) or "PP", "acetylphosphate", or "ATP" (extended reaction)
+  # Mapping from P_source -> P_remainder:
+  # P (H3PO4) -> H2O
+  # PP (H4P2O7) -> H3PO4
+  # acetylphosphate -> acetic acid
+  # ATP -> AMP
+  # NOTE: loga_P_remainder applies to all of these *except* H2O
+
   # Terminology:
   # Complex species are species that take multiple forms (e.g. ionization or oxidation states) depending on pH or other variables
   # A basic reaction has complex species that are valid basis species (independent components)
@@ -13,12 +23,12 @@
   # --> This is what mosaic() deals with
   # An extended reaction has complex species all of which cannot be used as basis species (they are non-independent)
   # However, the energetics of an extended reaction can be modeled as a sum of basic reactions
-  # --> This script has a function for this called extended_mosaic()
+  # --> This is what this function deals with
 
   # Examples:
+  # Complex species:    acetic acid = [acetic acid + acetate]
   # Basic reaction:     acetic acid + P = acetylphosphate + H2O
   # Extended reaction:  acetic acid + PP = acetylphosphate + P
-  # Complex species:    acetic acid = [acetic acid + acetate]
 
   ## Setup reaction 1
   if(reactant == "acetic acid") {
@@ -45,6 +55,16 @@
       c("H3PO4", "H2PO4-", "HPO4-2", "PO4-3"),
       c("H2AMP", "HAMP-", "AMP-2")
     )
+  } else if(reactant == "adenosine_for_RNA") {
+    # Basic reaction: adenosine + P = AMP + H2O
+    # To reproduce calculations from LaRowe and Dick (2025):
+    # PO4-3 is not included because monophosphate nucleotides can't have a -3 charge 20250426
+    # AMP-2 is not included because the repeating unit in RNA can't have this charge 20250424
+    basis(c("adenosine", "H3PO4", "H2AMP", "N2", "O2", "H+"))
+    bases <- list(
+      c("H3PO4", "H2PO4-", "HPO4-2"),
+      c("H2AMP", "HAMP-")
+    )
   } else if(reactant == "adenosine_to_cAMP") {
     # Basic reaction: adenosine + P = cAMP + H2O
     basis(c("adenosine", "H3PO4", "cyclic-HAMP", "N2", "O2", "H+"))
@@ -117,7 +137,7 @@
   basis(formula_reactant, loga_reactant)
 
   # Generate overall reaction
-  # Don't use species("acetylphosphate0"), because that reaction is just acetylphosphate0 = acetylphosphate0
+  # Don't use e.g. species("acetylphosphate0"), because that reaction is just acetylphosphate0 = acetylphosphate0
   # Instead, form H2O from the basis species to generate the overall reaction
   species("H2O")
 
@@ -187,4 +207,198 @@
   # Put together the output
   list(m1 = m1, m2 = m2, a12 = a12, P_reaction = P_reaction)
 
-}
+} # end of phosphorylate()
+
+# Define a function to make the plots for a given reaction
+phospho_plot <- function(reactant, P_source) {
+
+  # Reaction-independent settings (activities of species)
+  # The product (phosphorylated species)
+  loga_product <- -6
+  # The reactant: we will loop over these to make a series of plots
+  logas_reactant <- c(-6, -4, -2)
+
+  # For the RNA model described in LaRowe and Dick (2025), loga_P_source (H3PO4) is set to loga_reactant
+  # Otherwise, use constant values for loga_P_source and loga_P_remainder
+  if(reactant != "adenosine_for_RNA") {
+    loga_P_source <- -3
+    loga_P_remainder <- -3
+  }
+
+  # Plot settings
+  pH <- c(0, 12)
+  T <- c(0, 200)
+  P <- c(1, 5000)
+  res <- 50
+
+  # Define which contour levels to show
+  levels <- c(-1e6, seq(-100, -20, 10), seq(-15, 15, 5), seq(20, 100, 10), 1e6)
+  # Use solid lines for 10s and dashed lines for 5s
+  lty <- ifelse(levels %% 10 == 0, 1, 2)
+  # Use thick line for 0
+  lwd <- ifelse(levels == 0, 2, 1)
+  # Use shades of blue for exergonic, white for endergonic
+  # Take away the 2 lightest and 1 darkest shades for better readability
+  blues <- hcl.colors(14, "Blues")[2:12]
+  # Repeat colors so breaks at 5s don't change color
+  blues <- c(blues[1:9], rep(blues[10:11], each = 2))
+  col <- c(blues, rep("#FFFFFF", 13))
+
+  # Use the top row (panel 7) for the reaction label
+  top <- t(matrix(rep(7, 3)))
+  bottom <- matrix(1:6, nrow = 2, byrow = TRUE)
+  mat <- rbind(top, bottom)
+  layout(mat, heights = c(1, 8, 8))
+
+  # Loop over temperature and pressure for rows of figure
+  for(yvar in c("T", "P")) {
+
+    for(iloga in seq_along(logas_reactant)) {
+
+      # Get single reactant loga
+      loga_reactant <- logas_reactant[iloga]
+      if(reactant == "adenosine_for_RNA") {
+        # This is used to reproduce calculations from LaRowe and Dick (2025)
+        loga_P_source <- loga_reactant
+        # With H3PO4 as P_source there is no P_remainder, and this setting has no effect
+        loga_P_remainder <- NA
+      }
+
+      # Perform calculations and define diagram settings for temperature or pressure
+      if(yvar == "T") {
+        # Calculate affinity of forming product from predominant basis species as a function of pH and temperature
+        result <- phosphorylate(reactant, P_source, loga_reactant, loga_product, loga_P_source, loga_P_remainder, pH = c(pH, res), T = c(T, res))
+        # Method for labeling contour lines
+        method <- "flattest"
+        # Legend placement, space, and expression
+        legend.x <- "topright"
+        legend.space <- "   "
+        legend.expr <- as.expression(quote(italic(P)[SAT]))
+        # Label offset (0 for a-c)
+        dlab <- 0
+      }
+      if(yvar == "P") {
+        # Use P_source=P_source to avoid argument collision with 'P' (pressure)
+        result <- phosphorylate(reactant, P_source=P_source, loga_reactant, loga_product, loga_P_source, loga_P_remainder, pH = c(pH, res), P = c(P, res))
+        method <- "edge"
+        legend.x <- "bottomright"
+        legend.space <- "      "
+        legend.expr <- as.expression(quote(25~degree~C))
+        # Label offset (3 for d-f)
+        dlab <- 3
+      }
+
+      # Use basic mosaic output to get the plotting variables
+      a <- result$m1$A.species
+      # The next line is a workaround for y-axis mislabeled as log a ΣP
+      # (sum of P activity in different basis species - but we want P(bar)) 20250422
+      a$basis <- a$basis[colnames(a$basis) != "P"]
+      # Start with blank diagram
+      diagram(a, names = NA)
+
+      # Get temperature values in Kelvin
+      TK <- convert(a$vals$T, "K")
+      if(yvar == "P") {
+         # Label tick mark for 1 bar
+         axis(2, at = 1)
+         # Use constant T for yvar == "P"
+         TK <- convert(25, "K")
+      }
+
+      # The affinity of the overall reaction as a function of pH (rows) and T (columns)
+      A <- result$a12
+      # Convert dimensionless affinity (A/2.303RT) to delta G (kJ / mol)
+      # For temperature values to be applied correctly, we need to transpose
+      # to get T into the rows of A (i.e., the first indexed dimension),
+      # then transpose again to get back to the plot dimensions
+      # For yvar == "P" this has no effect because TK is a scalar
+      G.J <- t(convert(t(A), "G", T = TK))
+      G.kJ <- G.J / 1000
+      # Add color image
+      image(a$vals$pH, a$vals[[yvar]], G.kJ, col = col, breaks = levels, add = TRUE)
+      # Add contour lines
+      contour(a$vals$pH, a$vals[[yvar]], G.kJ, levels = levels, labcex = 0.9, add = TRUE, method = method, lty = lty, lwd = lwd)
+
+      # Replot tick marks
+      thermo.axis()
+      # Add legend
+      legend(legend.x, legend.space, bg = "white")
+      legend(legend.x, legend.expr, bty = "n")
+      # Replot border
+      box()
+      # Add title - use e.g. adenosine instead of adenosine_to_AMP
+      short_reactant <- strsplit(reactant, "_")[[1]][1]
+      main <- bquote(log~italic(a)[.(short_reactant)]==.(loga_reactant))
+      title(main, cex.main = 1.3)
+      # Add panel label - outside x range
+      label.figure(letters[iloga + dlab], cex = 1.6, xfrac = 0.03)
+
+    }
+
+  }
+
+  # Put together a data frame for describe.reaction()
+  # Use the first three basis species for the basic reaction: reactant, H3PO4, product
+  coeff <- -as.numeric(species()[1:3])
+  # For cAMP, double the reaction to consume one H3PO4
+  if(reactant == "adenosine_to_cAMP") coeff <- coeff * 2
+  formula <- names(species())[1:3]
+  # For getting the name, use ispecies rather than formula (to avoid mixing up glucose and fructose)
+  name <- info(basis()$ispecies[1:3])$name
+  # Add H2O
+  coeff <- c(coeff, 1)
+  formula <- c(formula, "H2O")
+  name <- c(name, "water")
+  if(P_source != "P") {
+    # For extended reactions, replace H3PO4 and H2O with P_source and P_remainder
+    # Do names first
+    name[formula == "H3PO4"] <- info(info(names(result$P_reaction)[1]))$name
+    name[formula == "H2O"] <- info(info(names(result$P_reaction)[2]))$name
+    # Then formulas
+    formula[formula == "H3PO4"] <- names(result$P_reaction)[1]
+    formula[formula == "H2O"] <- names(result$P_reaction)[2]
+  }
+  # Use ionized forms for names
+  name[name == "H3PO4"] <- "Pi"
+  name[name == "H4P2O7"] <- "PP"
+  name[name == "acetylphosphate0"] <- "acetylphosphate"
+  name[name == "acetic acid"] <- "acetate"
+  name[name == "H2AMP"] <- "AMP"
+  name[name == "H3ADP"] <- "ADP"
+  name[name == "H4ATP"] <- "ATP"
+  name[name == "H2UMP"] <- "UMP"
+  name[name == "cyclic-HAMP"] <- "cyclic-AMP"
+  name[name == "pyruvic acid"] <- "pyruvate"
+  # Construct data frame
+  reaction <- data.frame(coeff, formula, name)
+  # Use names except for inorganic species
+  use.name <- c(TRUE, TRUE, TRUE, TRUE)
+  use.name[formula == "H2O"] <- FALSE
+  # Uncomment these to use formulas instead of Pi and PP
+  #use.name[formula == "H3PO4"] <- FALSE
+  #use.name[formula == "H2P4O7"] <- FALSE
+  iname <- which(use.name)
+  ## Change minus signs to short hyphens
+  #for(i in iname) reaction$name[i] <- hyphen.in.pdf(reaction$name[i])
+  # Get expression for reaction 
+  reaction_expr <- describe.reaction(reaction, iname = iname)
+  # Add reaction to plot
+  opar <- par(mar = c(0, 0, 0, 0))
+  plot.new()
+  text(0.5, 0.5, reaction_expr, cex = 1.4)
+  par(opar)
+
+  # After we're done with the plot, calculate standard transformed Gibbs energy (ΔG°') at pH 7
+  result <- phosphorylate(reactant, P_source, const_pH = 7)
+  # The affinity of the overall reaction
+  A <- result$a12
+  # Convert to Delta G
+  TK <- convert(25, "K")
+  G.J <- convert(A, "G", T = TK)
+  G.kJ <- G.J / 1000
+  print(paste("DeltaG0' at 25 degC and pH = 7 (kJ/mol):", round(G.kJ, 3)))
+  # Return the calculated value
+  G.kJ
+
+} # end of phospho_plot()
+

Modified: pkg/CHNOSZ/demo/00Index
===================================================================
--- pkg/CHNOSZ/demo/00Index	2025-12-07 04:49:45 UTC (rev 940)
+++ pkg/CHNOSZ/demo/00Index	2025-12-08 02:11:38 UTC (rev 941)
@@ -35,3 +35,4 @@
 uranyl          Total (carbonate|sulfate)-pH diagrams for uranyl species
 MgATP           Speciation of ATP with H+ and Mg+2
 rubisco_Zc      Zc of Rubisco vs optimal growth temperature
+phosphorylate   Phosphorylation model for Gibbs energy of nucleotide polymerization into RNA

Added: pkg/CHNOSZ/demo/phosphorylate.R
===================================================================
--- pkg/CHNOSZ/demo/phosphorylate.R	                        (rev 0)
+++ pkg/CHNOSZ/demo/phosphorylate.R	2025-12-08 02:11:38 UTC (rev 941)
@@ -0,0 +1,12 @@
+# CHNOSZ/demo/phosphorylate.R
+
+# Make T-pH and P-pH diagrams for Gibbs energy of phosphorylation reactions,
+# using mosaic() to account for pH-dependent speciation 20251207
+
+# Figure based on LaRowe and Dick (2025) doi:10.1029/2025JG009095
+
+# adenosine_for_RNA uses only protonated species (i.e., no AMP-2 or PO4-3)
+# to model RNA formation from monophosphate nucleotides
+
+phospho_plot("adenosine_for_RNA", "P")
+title(sub = "Only protonated species to model RNA formation (LaRowe and Dick, 2025)", line = 2.2, xpd = NA)

Modified: pkg/CHNOSZ/man/examples.Rd
===================================================================
--- pkg/CHNOSZ/man/examples.Rd	2025-12-07 04:49:45 UTC (rev 940)
+++ pkg/CHNOSZ/man/examples.Rd	2025-12-08 02:11:38 UTC (rev 941)
@@ -19,7 +19,7 @@
     "contour", "sphalerite", "minsol", "Shh", "saturation",
     "adenine", "DEW", "lambda", "potassium", "TCA", "aluminum", "AD",
     "comproportionation", "Pourbaix", "E_coli", "yttrium", "rank.affinity",
-    "uranyl", "sum_S", "MgATP", "rubisco_Zc"),
+    "uranyl", "sum_S", "MgATP", "rubisco_Zc", "phosphorylate"),
     save.png = FALSE)
 }
 
@@ -69,6 +69,7 @@
     \item{sum_S}{Summed molality of S species and solubility contours for iron and gold (Skirrow and Walshe, 2002)}
     \item{MgATP}{Speciation of ATP with H+ and Mg+2 (Alberty, 2003)}
     \item{rubisco_Zc}{Zc of Rubisco vs optimal growth temperature}
+    \item{phosphorylate}{Phosphorylation model for Gibbs energy of nucleotide polymerization into RNA (LaRowe and Dick, 2025)}
   }
 
 For either function, if \code{save.png} is TRUE, the plots are saved in \code{\link{png}} files whose names begin with the names of the help topics or demos.
@@ -129,6 +130,8 @@
 
 LaRowe, D. E. and Amend, J. P. (2016) The energetics of anabolism in natural settings. \emph{ISME J.} \bold{10}, 1285--1295. \doi{10.1038/ismej.2015.227}
 
+LaRowe, D. E. and Dick, J. M. (2025) Physicochemical constraints on the abiotic polymerization of nucleotides into RNA. \emph{JGR Biogeosci.} \bold{130}, e2025JG009095. \doi{10.1029/2025JG009095}
+
 Lowe, A. R., Cox, J. S. and Tremaine, P. R. (2017) Thermodynamics of aqueous adenine: Standard partial molar volumes and heat capacities of adenine, adeninium chloride, and sodium adeninate from \emph{T} = 278.15 K to 393.15 K. \emph{J. Chem. Thermodyn.} \bold{112}, 129--145. \doi{10.1016/j.jct.2017.04.005}
 
 Lu, P. and Zhu, C. (2011) Arsenic Eh--pH diagrams at 25\degC and 1 bar. \emph{Environ. Earth Sci.} \bold{62}, 1673--1683. \doi{10.1007/s12665-010-0652-x}

Modified: pkg/CHNOSZ/man/phosphorylate.Rd
===================================================================
--- pkg/CHNOSZ/man/phosphorylate.Rd	2025-12-07 04:49:45 UTC (rev 940)
+++ pkg/CHNOSZ/man/phosphorylate.Rd	2025-12-08 02:11:38 UTC (rev 941)
@@ -1,5 +1,6 @@
 \name{phosphorylate}
 \alias{phosphorylate}
+\alias{phospho_plot}
 \title{Calculate affinity of phosphorylation reactions with pH-dependent speciation}
 \description{
   Calculate the affinity and Gibbs energy of phosphorylation reactions accounting for pH-dependent speciation of reactants, products, and phosphate sources using the mosaic approach.
@@ -8,12 +9,13 @@
 \usage{
 phosphorylate(reactant, P_source, loga_reactant = 0, loga_product = 0, 
                 loga_P_source = 0, loga_P_remainder = 0, const_pH = 7, ...)
+phospho_plot(reactant, P_source)
 }
 \arguments{
   \item{reactant}{
     character, the compound to be phosphorylated.
     Options include \code{"acetic acid"}, \code{"glycerol"}, \code{"adenosine_to_AMP"}, \code{"adenosine_to_cAMP"},
-    \code{"ribose"}, \code{"uridine"}, \code{"AMP"}, \code{"ADP"}, \code{"glucose"}, or \code{"pyruvic acid"}.}
+    \code{"adenosine_for_RNA"}, \code{"ribose"}, \code{"uridine"}, \code{"AMP"}, \code{"ADP"}, \code{"glucose"}, or \code{"pyruvic acid"}.}
   \item{P_source}{
     character, the source of phosphate.
     Use \code{"P"} for basic reactions with inorganic phosphate,
@@ -29,6 +31,7 @@
 }
 
 \details{
+
   This function calculates the affinity of phosphorylation reactions by summing the affinities of component reactions
   while accounting for pH-dependent speciation of all complex species (reactants, products, and phosphate forms).
   Complex species are those that exist in multiple ionization states depending on pH.
@@ -51,7 +54,15 @@
   then call this function with \code{P_source} as a named argument to avoid conflicting assignments due to partial argument matching.
   
   The function returns affinity values that can be converted to standard transformed Gibbs energy using \code{\link{convert}}.
+
+  \code{phospho_plot} creates a set of \T-pH and \P-pH plots showing Gibbs energy of phosphorylation reactions (contour labels are kJ/mol).
+  It uses \code{loga_P_source = loga_P_remainder = -3}, \code{loga_product = -6}, and \code{loga_reactant} equal to -6, -4, and -2.
+  However, if \code{reactant} is \samp{adenosine_for_RNA}, then \code{loga_P_source} is made equal to \code{loga_reactant} in each plot.
+  The \samp{adenosine_for_RNA} reactant uses only protonated species (i.e., no AMP\S{-2} or PO\s{4}\S{-3})
+  to model RNA formation from monophosphate nucleotides as described in LaRowe and Dick (2025).
+
 }
+
 \section{Warning}{
   This function depends on thermodynamic data for phosphorylated species that have not yet been added to OBIGT (2025-12-07).
   The data for glucose-6-phosphate used in the examples are provisional and are known to produce inaccurate results for the Gibbs energy of phosphorylation
@@ -72,7 +83,6 @@
 }
 
 \examples{
-\dontshow{data(thermo)}
 # Calculate standard transformed Gibbs energy (DeltaG°') for 
 # glucose + ATP = glucose-6-phosphate + ADP at pH 7, 25 °C
 
@@ -81,8 +91,8 @@
 mod.OBIGT("glucose-6-phosphate-1", formula = "C6H12O9P-", G = -1800590)
 # Alberty (2003) doesn't have DeltaG° for neutral glucose-6-phosphate,
 # so we calculate it from pKa1 = 1.5 (Degani and Halmann, 1966)
-DG0_G6P <- -1800590 + convert(1.5, "G")
-mod.OBIGT("glucose-6-phosphate", formula = "C6H13O9P", G = DG0_G6P)
+G_G6P <- -1800590 + convert(1.5, "G")
+mod.OBIGT("glucose-6-phosphate", formula = "C6H13O9P", G = G_G6P)
 
 # Calculate affinity at pH 7 with unit activities (loga = 0)
 result <- phosphorylate("glucose", "ATP", const_pH = 7)
@@ -116,6 +126,9 @@
 
   Degani C and Halmann M. (1966) Solvolysis of phosphoric acid esters. Hydrolysis of glucose 6-phosphate. Kinetic and tracer studies.
   \emph{J Am Chem Soc} \bold{88}:4075-4082. \doi{10.1021/ja00969a033}
+
+  LaRowe DE and Dick JM (2025) Physicochemical constraints on the abiotic polymerization of nucleotides into RNA.
+  \emph{JGR Biogeosci} \bold{130}:e2025JG009095. \doi{10.1029/2025JG009095}
 }
 
 \concept{Thermodynamic calculations}



More information about the CHNOSZ-commits mailing list