c2s(x, sep = " ")
s2c(x, sep = NULL, keep.sep = TRUE, n = NULL, move.sep = FALSE)
GHS(species = NULL, DG = NA, DH = NA, S = NA, T = thermo$opt$Tr)
can.be.numeric(x)
expand.formula(elements, makeup)
ZC(x)
eos.args(eos, property = NULL, T = NULL, P = NULL)
TP.args(T = NULL, P = NULL)
state.args(state = NULL)
protein.length(protein)
aminoacids(seq, nchar=1)
MP90.cp(T, protein)
dPdTtr(x)
Ttr(x, P = 1, dPdT = NULL)
thermo.plot.new(xlim, ylim, xlab, ylab, cex = par('cex'),
mar = NULL, lwd = par('lwd'), ticks = c(1,2,3,4),
mgp = c(1.2, 0.3, 0), cex.axis = par('cex'), col = par('col'),
yline = NULL, axs = "i")
thermo.postscript(file, family = 'Helvetica', width = 8,
height = 6, horizontal = FALSE)
thermo.axis(lab = 'x-axis', side = 1, line = 1.5, cex = par('cex'),
lwd = par('lwd'), T = NULL, col = par('col'))
axis.label(x, opt = NULL, do.state = TRUE, oldstyle = FALSE,
do.upper = FALSE, mol = 'mol')
describe(x = NULL, T = NULL, P = NULL, use.name = FALSE,
as.reaction = NULL, digits = 1)
basis.comp(basis)
label.plot(x, xfrac = 0.95, yfrac = 0.9, cex = 1, paren = TRUE,
adj = 1)
water.lines(xaxis = 'pH', yaxis = 'Eh', T = 298.15, P = 'Psat',
which = c('oxidation','reduction'), logaH2O = 0, lty = 2,
col = par('fg'), xpoints = NULL)
element(compound, property = c("mass","entropy"))
mod.obigt(species, ..., missingvalues = NA)
which.pmax(elts, na.rm = FALSE, pmin = FALSE)
nonideal(species, proptable, IS, T)
change(name, ...)
add.protein(file="protein.csv")
add.obigt(file="obigt.csv")
which.balance(species)
lsub(x, y)
lsum(x, y)
pprod(x, y)
psum(x)
mylapply(X, FUN, ...)
examples()
s2c
, c2s
, axis.label
), or object to be tested (can.be.numeric
), or numeric index of a mineral phase (dPdTtr
, Ttr
), or character object representing c2s
, s2c
).s2c
).s2c
.GHS
, or names of species to modify or add to the thermodynamic database (mod.obigt
), or names or indices of species for which to calculate nonideaTP.args
, lines.water
, describe
, MP90.cp
, nonideal
, GHS
).TP.args
).eos.args
, element
).GHS
).expand.formula
).makeup
.protein.length
).aminoacids
).Ttr
).thermo.plot.new
).plot.label
.thermo.postscript
),add.protein
,add.obigt
.axis.label
).describe
).basis.comp
).water.lines
).water.lines
, thermo.plot.new
, thermo.axis
).label.plot
).thermo.axis
).element
).mod.obigt
), or arguments to change
that are passed to mod.obigt
or mod.buffer
, or additional arguments for lappa
which.pmax
).nonideal
).change
).lapply
or mclapply
.lapply
or mclapply
.lsub
, lsum
) or numeric (pprod
).s2c
, c2s
and axis.label
return character values. Numeric returns are made by GHS
, protein.length
, dPdTtr
, Ttr
, ZC
, MP90.cp
and mod.obigt
. A list is return by eos.args
and TP.args
, and character is returned by state.args
. can.be.numeric
returns logical. aminoacids
returns character or dataframe. lsub
, lsum
and pprod
return lists. Functions with no (or unspecified) returns are thermo.plot.new
, thermo.postscript
, label.plot
and water.lines
.c2s
joins the elements of a character object into a character object of length $1$ (a string), and s2c
splits a string into elements of a character object of length $n+1$, where $n$ stands for the number of separators in the string. sep
gives the separator to insert between successive items c2s
or the separator(s) to find in a string (s2c
). The default value of sep
is a space (" ") in c2s
. The default value for sep
is NULL in s2c
, indicating a separator at every position of x
(the result in this case has length equal to nchar(x)
). Argument keep.sep
if TRUE
(the default) instructs s2c
to keep the separating values in the output, and move.sep
if TRUE
instructs s2c
to append the kept separators to the preceding items instead of prepending them to the following ones. The maximum length of the object returned by s2c
is determined by the argument named n
; the default value of NULL
indicates an unrestricted length. The *.args
functions are used to normalize user-input arguments; the names of states and properties are made lowercase (and substitute abbreviations in states). eos.args
returns a list with elements named props
, for all the properties available for the specified equations-of-state, prop
for the lower-case version of property
, and Prop
, for the upper-case (of first letter) version of property
. eos.args
produces an error if one of the property
s is not in the list of available properties. (See water
and subcrt
for the available properties for different species.) TP.args
forces T
and P
to equal length. This function also looks for the keyword Psat in the value of P
and substitutes calculated values of the saturation vapor pressure (see water
). state.args
makes its argument lowercase, then transforms a, c, g, and l to aq, gas, cr, and liq, respectively.
GHS
computes one of the standard molal Gibbs energy or enthalpy of formation from the elements (DG
, DH
) or entropy (S
) at 298.15 K and 1 bar from values of the other two. If the species
argument is present, it is used to calculate the entropies of the elements (Se
) using element
, otherwise Se
is set to zero. The equation in effect can be written as $DG = DH - T * DS$, where $DS = S - Se$ and $T$ denotes the reference temperature of 298.15 K. If two of DG
, DH
, and S
are provided, the value of the third is returned. If three are provided, the value of DG
in the arguments is ignored and the calculated value of DG
is returned. If none of DG
, DH
or S
are provided, the value of Se
is returned. If only one of the values is provided, an error results. Units of cal mol$^{-1}$ (DG
, DH
) and cal K$^{-1}$ mol$^{-1}$ (S
) are assumed. It T
is provided, it overrides the reference temperature which is used by default in the calculation.
can.be.numeric
returns a value of TRUE or FALSE for each element of x
.
expand.formula
converts a 1-column dataframe representing the elemental composition of a compound (see makeup
) to numeric vector, the element of which correspond to the elements
given in the argument. If any of these is not present in the makeup dataframe, its coefficient is set to zero. A non-zero coefficient of an element in the makeup dataframe does not appear in the output if that element is not one of elements
.
ZC
returns the nominal carbon oxidation state for the chemical formula represented by x
. (For discussion of nominal carbon oxidation state, see Hendrickson et al., 1970; Buvet, 1983.) If carbon is not present in the formula the result is NaN
.
The argument of protein.length
, if it is character, refers to the name of protein(s) (e.g., LYSC_CHICK) for which to calculate the length (number of amino acid residues). If the argument is numeric, it refers to the index of a protein species (value in thermo$species$ispecies
). For a numeric argument to work, the protein information must have been previously loaded into the species list (using info
).
aminoacids
takes a character argument containing a protein sequence and counts the number of occurrences of each type of amino acid. The output is a dataframe with 20 columns, each corresponding to an amino acid, ordered in the same way as thermo$proteins
. If the first argument is NULL
, return the one-letter abbreviations (for nchar
equal to 1) or the three-letter ones (if nchar
is equal to 3) or the names of the amino acids (if nchar
is NA) of twenty amino acids in the order used in thermo$proteins
.
MP90.cp
takes T
(one or more temperatures in $^{\circ}$C) and protein
(name of protein) and returns the heat capacity of the unfolded protein using values of heat capacities of the residues taken from Makhatadze and Privalov, 1990. Those authors provided values of heat capacity at six points between 5 and 125 $^{\circ}$C; this function interpolates (using splinefun
) values at other temperatures.
dPdTtr
returns values of (dP/dTtr), where Ttr represents the transition temperature, of the phase transition at the high-T stability limit of the x
th species in thermo$obigt
(no checking is done to verify that the species represents in fact one phase of a mineral with phase transitions). dPdTtr
takes account of the Clapeyron equation in the form of (dP/dTtr)=DS/DV, where DS and DV represent the changes in entropy and volume of phase transition, and are calculated using subcrt
at Ttr from the standard molal entropies and volumes of the two phases involved. Using values of dPdT
calculated using dPdTtr
or supplied in the arguments, Ttr
returns as a function of P
values of the upper transition temperature of the mineral phase represented by the x
th species.
thermo.plot.new
sets parameters for a new plot, creates a new plot using plot.new
, and adds ticks to the plot. thermo.postscript
calls postscript
with some custom parameters. Plot parameters (see par
) including cex
, mar
, lwd
, mgp
and axs
can be given, as well as a numeric vector in ticks
identifying which sides of the plot receive tick marks. yline
, if present, denotes the margin line (par('mgp')[1]
) where the y-axis name is plotted.
axis.label
returns an expression to be used for plotting an axis label, which may refer to a chemical activity or fugacity, temperature, or pressure. The first argument may be the name of one of the basis species (e.g., O2) or one of T, P, Eh, pH, pe or logK. An expression
is returned that may include italic and subscripted symbols, unless oldstyle
is TRUE
, when labels with a simpler format (e.g. O2 (log f)) are returned. The default value of NULL of opt
means to get the state from the value in thermo$opt$state
(if x
is the name of a basis species), or if x
is T or P to get the units of temperature or pressure from nuts
(which also refers to thermo$opt
). do.upper
, if TRUE
, tells the function to print the label using uppercase letters. mol
(default: mol) refers to the denominator of the units (default: molality). It is possible to write the labels differently, e.g. as specific units, by setting mol
to g
.
water.lines
plots lines representing the oxidation and reduction stability limits of water on yaxis
-xaxis
diagrams, where yaxis
can be Eh or O2, and xaxis
can be pH or T. which
controls which lines (oxidation, reduction, or both (the default)) are drawn, logaH2O
(default 0) denotes the logarithm of the activity of water, lty
(default 2) the line type, col
(default par('fg')
, the foreground color), and xpoints
an optional list of points on the x axis to which to restrict the plotting (default of NULL
refers to the axis limits).
label.plot
adds identifying text to the plot; the value given for x
is made into a label like (a). The location of the label is controlled by xfrac
and yfrac
(the fractional locations along the respective axes) as well as adj
(the text alignment parameter, see text
).
thermo.axis
is used to add axes and axis labels to plots, with some default style settings (rotation of numeric labels) and conversions between oxidation-reduction scales (called by thermo.plot.new
).
describe
generates a textual representation of the temperature, pressure, and logarithms of activities of the basis species, given in the arguments by x
(i.e. the dataframe in thermo$basis
) and T
and P
(given in Kelvin and bar and converted by the function to those specified by nuts
). The digits
argument tells to what decimal place the logarithms of activities should be rounded. If any of the supplied arguments is NULL its specification is not printed in the output; T and P, if present, are prepended to the basis summary. If x
instead is a dataframe representing a chemical reaction (as output by subcrt
and identified by having a column named coeff
), the function returns a textual summary of that reaction (i.e., showing reactants on the left, an equal sign, and products on the right; reactants and products are preceded by their reaction coefficient unless it is $1$). However, if only reactants or products can be found, or as.reaction
is set to FALSE, the names or formulas of the species are printed with their coefficients and interceding plus or minus signs, as approriate. Whether the names or formulas are printed is controlled by use.name
(FALSE
by default), a logical vector the length of which should correspond to the number of rows in x
(but is expanded to the right length if needed).
element
returns a dataframe of the mass and entropy of one or more elements or formulas given in compound
. The property
can be mass and/or entropy.
mod.obigt
changes one or more of the properties of one or more species or adds species to the thermodynamic database. These changes are lost if you reload the database by calling data(thermo)
or if you quit the Rsession without saving it. To modify the properties of species, give the names in the species
argument and supply other arguments: if one of these arguments is state
, species in those states will be updated. Additional arguments refer to the name of the property(s) to be updated and correspond to the column names of thermo$obigt
(the names of the properties are matched to any part of compound column names, such as z.T). The values provided should be in the units specifed in the documentation for the thermo
data object. To add species, supply the new names in species
and provide an argument named formula
with the corresponding chemical formulas. Additional arguments refer to any of the properties you wish to specify. Properties that are not specified are assigned the value of missingvalues
which is NA
by default (however if state
is missing it is set to the value of thermo$opt$state
). The values returned (invisible
-y) by mod.obigt
are the rownumbers of the affected species.
which.pmax
takes a list of equal-length numeric vectors (or objects that can be coerced to numeric) in elts
and returns the index of the vector holding the maximum value at each position. If na.rm
is TRUE
, values of NA
are removed; if pmin
is TRUE
the function finds locations of the minimum values instead.
nonideal
takes a list of dataframes (in proptable
) containing the standard molal properties of the identified species
. For those species whose charge (determined by the number of Z in their makeup
) is not equal to zero, the values of IS
are combined with Alberty's (2003) equation 3.6-1 (Debye-Huckel equation) and its derivatives, to calculate apparent molal properties at the specified ionic strength(s) and temperature(s). The lengths of IS
and T
supplied in the arguments should be equal to the number of rows of each dataframe in proptable
, or one to use single values throughout. The apparent molal properties that can be calculated include G
, H
, S
and Cp
; any columns in the dataframes of proptable
with other names are left untouched. If anything was calculated, a column named loggam
(logarithm of gamma, the activity coefficient) is appended to the dataframe of species properties.
change
is a wrapper function to mod.obigt
and mod.buffer
. The name
provided in the argument refers to the name or numeric index of the species to update or add using mod.obigt
, unless the name
begins with an underscore character, in which case the remaining part of the name (after the underscore) is passed to mod.buffer
. The arguments in ...
are sent without change to the subordinate function.
add.protein
and add.obigt
read data from the specified file
and add it to either thermo$protein
or thermo$obigt
, as appropriate. Both of these are functions are attempted, with the default file names, when
which.balance
returns, in order, which column(s) of species
all have non-zero values. It is used by diagram
and transfer
to determine a conservant (i.e. basis species that are conserved in transformation reactions) if none is supplied by the user.
lsub
subtracts the elements of list y
from the respective ones in list x
. lsum
sums the respective elements of lists x
and y
. pprod
multiplies each element of list x
by the respective numeric value in y
. psum
sums all elements of the list x
.
mylapply
passes the given arguments to lapply
, or to mclapply
if the X
is less than 20. mylapply
is used in affinity
(in calculations for proteins activated by the iprotein
argument), abundance
(in parallel operations on list elements), and aminoacids
and protein.length
(in counting amino acids in sequences and determining lengths of proteins).
examples
takes no arguments and runs all the examples in the package using example
(with ask
set to FALSE
).
Buvet, R., 1983. General criteria for the fulfillment of redox reactions, in Bioelectrochemistry I: Biological Redox Reactions, Milazzo, G. and Blank, M., eds., Plenum Press, New York, p. 15-50. Hendrickson, J. B., Cram, D. J., and Hammond, G. S., 1970. Organic Chemistry, 3rd ed., McGraw-Hill, New York, 1279 p.
Makhatadze, G. I. and Privalov, P. L., 1990. Heat capacity of proteins. 1. Partial molar heat capacity of individual amino acid residues in aqueous solution: Hydration effect, J. Mol. Biol., 213, 375-384.
paste
, substr
, tolower
, par
and text
. Functions in element
, makeup
, plot.new
and postscript
.data(thermo)
## string to character
s2c('hello world')
s2c('hello world',sep=' ',keep.sep=FALSE)
s2c('3.141592',sep=c('.','9'))
s2c('3.141592',sep=c('.','9'),move.sep=TRUE)
# character to string
c2s(aminoacids())
c2s(aminoacids(),sep='.')
## argument processing
eos.args('hkf',c('g','H','S','cP','V','kT','e'))
## produces an error:
eos.args('hkf',c('G','H','S','Cp','V','kT','E','Q'))
thermo$opt$water <- 'IAPWS' # needed for p and n in next line
eos.args('water',c('p','u','cv','psat','rho','n','q','x','y','epsilon'))
TP.args(c(273.15,373.15))
TP.args(c(273.15,373.15),'Psat')
TP.args(c(273.15,373.15),c(100,100,200,200))
state.args(c('AQ','GAS'))
state.args(c('a','l','liq'))
## converting among Gibbs, enthalpy, entropy
GHS('H') # entropy of H (element)
# calculate enthalpy of formation of arsenopyrite from the
# Gibbs energy of formation and entropy
GHS('FeAsS',DG=-33843,S=68.5)
# return the value of DG calculated from DH and S
# cf. -56687.71 from subcrt('water')
GHS('H2O',DH=-68316.76,S=16.7123)
## count specific elements in a formula
t <- makeup('H2O')
expand.formula(c('H','O'),t)
expand.formula(c('C','H','S'),t)
## count amino acids in a sequence
aminoacids('GGSGG')
aminoacids('WhatAmIMadeOf?')
## calculate protein length
protein.length('LYSC_CHICK')
# another way to do it
basis('CHNOS')
species('LYSC_CHICK')
protein.length(species()$ispecies)
## heat capacity as a function of temperature
## (Makhatadze & Privalov, 1990) units: J mol-1
MP90.cp(c(5,25,50,75,100,125),'LYSC_CHICK')
## properties of phase transitions
t <- info('enstatite')
# (dP/dT) of transitions
dPdTtr(t) # first transition
dPdTtr(t+1) # second transition
# temperature of transitions (Ttr) as a function of P
Ttr(t,P=c(1,10,100,1000))
Ttr(t,P=c(1,10,100,1000))
## nominal carbon oxidation states
ZC('CHNOSZ')
t <- info(info('LYSC_CHICK'))
ZC(t$formula)
## the stoichiometry of basis species
basis('CHNOS')
# in a made-up species
basis.comp('CHNOS')
# this one makes a warning because Z isn't
# in our basis
basis.comp('CHNOSZ')
## describing the basis species
basis('CHNOSe')
describe(thermo$basis)
describe(thermo$basis,T=NULL,P=NULL)
## mass and entropy of compounds of elements
element('CH4')
element(c('CH4','H2O'),'mass')
element('Z') # charge
# same mass, opposite energy as charge
element('Z-1') # electron
## modify/add species
info(t <- info('alanine','cr'))
mod.obigt('alanine',state='cr',G=0,H=0,S=0)
# now the values of G, H, and S are inconsistent
# with the elemental composition of alanine
info(t)
# add a species
mod.obigt('myname',formula='CHNOSZ',G=0,H=0)
info(t <- info('myname'))
# values of G, H, S as a function of T
# (without any equations of state parameters)
subcrt(t)
Run the code above in your browser using DataLab