Package: pyCHNOSZ
pyCHNOSZAuthor: Dr. Grayson Boyer, GEOPIG Lab, Arizona State UniversityCHNOSZis a package written byDr. Jeff Dickfor performing thermodynamic calculations in aqueous geochemistry and biogeochemistry. pyCHNOSZ is a wrapper for CHNOSZ that allows these calculations to be carried out in Python 3 Jupyter notebooks.FeaturesThe following CHNOSZ functions are supported in pyCHNOSZ:info- Search for chemical species by name or formula and retrieve their thermodynamic parameters.add_OBIGT- Add or overwrite species in the OBIGT thermodynamic database by supplying a comma separated value (csv) file with custom data.mod_OBIGT- Modify species in the OBIGT thermodynamic database. Optionally, supply a Pandas dataframe containing custom data.reset- reset data to default values.subcrt- Calculate standard state partial molal thermodynamic properties of reactions at elevated temperatures and pressures.basis- Define basis species of a chemical system.species- Define the species of interest in a system.equilibrate- Calculate equilibrium chemical activities of species from the affinities of formation of the species at unit activity.affinity- Calculate the chemical affinities of formation reactions of species.diagram- Plot equilibrium chemical activity (1-D speciation) or equal-activity (2-D predominance) diagrams as a function of chemical activities of basis species, temperature and/or pressure.RequirementsThis package must be installed into an environment with anRinstallation. Seethese instructionsfor installing R with Anaconda. Additionally, the CHNOSZ package for R must be installed (see instructions below).InstallationInstalling CHNOSZOpen an R session. Install the CHNOSZ package with:install.packages("CHNOSZ")Once CHNOSZ is installed you may quit the R session.Installing pyCHNOSZInstall pyCHNOSZ using pip:$ pip install pyCHNOSZUsageImport pyCHNOSZ in your python code with:importpyCHNOSZIn the following examples, pyCHNOSZ functions are imported with:frompyCHNOSZimportinfo,add_OBIGT,mod_OBIGT,reset,subcrtSearch for chemical speciesTheinfo()function can be used to look up chemical species by name or formula. If names or formulas are provided, database index integers are returned. A list of integers will look up chemical species by index and return a table of thermodynamic properties. See theinfo()function'soriginal documentationto learn more about what this function can do. A few examples are shown below.Look up the database index value of Fe+2:info("Fe+2")Look up multiple chemical species:info(["HCO3-","CH4"])Define chemical states:info(["HCO3-","CH4"],state=["aq","gas"])Search species by index values to look up their thermodynamic parameters.info([13,872])Nestinfofunctions to look up thermodynamic properties directly from names or formulas:info(info("Fe+2"))Look up and add a protein to the database:info("LYSC_CHICK")Add or replace thermodynamic data in the databaseSee the original R documentation foradd_OBIGT()andreset()for basic useage. A few examples are given below.Load the SUPCRT92 database.a=add_OBIGT("SUPCRT92")The variableais assigned a list of integers corresponding to the indices of chemical species that are added or replaced in the OBIGT thermodynamic database used by pyCHNOSZ.It is possible to add a custom table of thermodynamic parameters.a=add_OBIGT("my_custom_entries.csv")info(a)# confirm new entries have been addedThe entries ofmy_custom_entries.csvwould then be available for thermodynamic calculations withsubcrt(), for example.Reset thermodynamic database to its original configuration.reset()Modify values in the thermodynamic database withmod_OBIGT():mod_OBIGT("HCO3-",G=-140283.7,Cp=-9)info(info("HCO3-"))Calculate thermodynamic properties of reactionsSee theoriginal documentationforsubcrt(). Useage in pyCHNOSZ is the same, except python lists are used in place of R's vectors. The function produces a dictionary of results stored in pandas dataframes. An example is shown below for the reaction H2 (aq)+ 0.5 O2 (gas)= H2O(liq)at 30 and 50 degrees C and 100 bars pressure:subcrt(species=["H2","O2","H2O"],coeff=[-1.0,-0.5,1.0],state=["aq","gas","liq"],T=[30,50],P=100)Output is a python dictionary of dataframes:subcrt: 3 species at 2 values of T (ºC) and P (bar) (wet) [energy units: cal]

{'reaction':       coeff    name formula state  ispecies
 62     -1.0      H2      H2    aq      62.0
 2612   -0.5  oxygen      O2   gas    2612.0
 1       1.0   water     H2O   liq       1.0,
 'out':       T    P       rho       logK             G             H         S  \
 1  30.0  100  1.000017  43.855086 -60832.380282 -67420.887872 -21.89070   
 2  50.0  100  0.992305  40.834419 -60379.262657 -67882.530994 -23.36663   
 
           V         Cp  
 1 -7.494052 -24.126268  
 2 -8.259704 -20.941879  }More examples:For more examples, like plotting activity and predominance diagrams, check out thepyCHNOSZ demo notebook.