<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Earth Sci.</journal-id>
<journal-title>Frontiers in Earth Science</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Earth Sci.</abbrev-journal-title>
<issn pub-type="epub">2296-6463</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">1232256</article-id>
<article-id pub-id-type="doi">10.3389/feart.2023.1232256</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Earth Science</subject>
<subj-group>
<subject>Technology and Code</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>WebNORM: a web application for calculating normative mineralogy</article-title>
<alt-title alt-title-type="left-running-head">Buckle et al.</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/feart.2023.1232256">10.3389/feart.2023.1232256</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Buckle</surname>
<given-names>Tom</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2331118/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Williams</surname>
<given-names>Morgan</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2367036/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Nathwani</surname>
<given-names>Chetan L.</given-names>
</name>
<xref ref-type="aff" rid="aff3">
<sup>3</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2336000/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Hughes</surname>
<given-names>Hannah S. R.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1174012/overview"/>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>Camborne School of Mines</institution>, <institution>University of Exeter</institution>, <addr-line>Cornwall</addr-line>, <country>United Kingdom</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>CSIRO Mineral Resources</institution>, <addr-line>Kensington</addr-line>, <addr-line>WA</addr-line>, <country>Australia</country>
</aff>
<aff id="aff3">
<sup>3</sup>
<institution>Institute of Geochemistry and Petrology</institution>, <institution>Department of Earth Sciences</institution>, <institution>ETH Z&#xfc;rich</institution>, <addr-line>Z&#xfc;rich</addr-line>, <country>Switzerland</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1202094/overview">Ali Abedini</ext-link>, Urmia University, Iran</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2347440/overview">Rene&#xe9; Gonz&#xe1;lez-Guzm&#xe1;n</ext-link>, National Autonomous University of Mexico, Mexico</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/266721/overview">William F. McDonough</ext-link>, University of Maryland, United States</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Tom Buckle, <email>t.buckle@exeter.ac.uk</email>
</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>09</day>
<month>08</month>
<year>2023</year>
</pub-date>
<pub-date pub-type="collection">
<year>2023</year>
</pub-date>
<volume>11</volume>
<elocation-id>1232256</elocation-id>
<history>
<date date-type="received">
<day>31</day>
<month>05</month>
<year>2023</year>
</date>
<date date-type="accepted">
<day>25</day>
<month>07</month>
<year>2023</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2023 Buckle, Williams, Nathwani and Hughes.</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>Buckle, Williams, Nathwani and Hughes</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>Normative mineralogy is a valuable tool for interpreting the mineralogical composition of rocks based on their bulk rock geochemical data. Despite the development of various computational tools for normative mineralogy calculations, the accessibility and continued usage of many existing tools is limited by the use of older languages, licensing constraints, and restricted access to the source code. In this paper, we introduce a Python-based implementation of the normative mineralogy algorithm, which is accessible through a user-friendly web application <italic>webNORM</italic>, or as part of the <italic>pyrolite</italic> Python package. The algorithm uses major, minor, and trace element oxides as input and returns up to 31 normative minerals. It offers two methods for estimating the Fe<sub>2</sub>O<sub>3</sub>:FeO ratio. The web application offers a convenient interface for users without programming experience, while the <italic>pyrolite</italic> integration allows more advanced users to leverage the Python ecosystem for end-to-end geochemical data analysis. Comparison between our implementation of the normative calculation and previous implementations shows that our version is accurate and reliable. <italic>webNORM</italic> offers the geoscience community an accessible solution for calculating normative mineralogy. The algorithm and web application are open-source, and we encourage contributions and adaptations by the community for specific needs and improvements.</p>
</abstract>
<kwd-group>
<kwd>normative mineralogy</kwd>
<kwd>CIPW</kwd>
<kwd>mineralogy</kwd>
<kwd>web app</kwd>
<kwd>python</kwd>
</kwd-group>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Geochemistry</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Normative mineralogy is an idealised assemblage of minerals in a sample calculated from its bulk geochemical composition and typically an assumption on the specific order in which minerals form. The concept of calculating normative mineralogy for igneous rocks was first introduced by <xref ref-type="bibr" rid="B2">Cross et al. (1902)</xref>, with the commonly used acronym of &#x201c;CIPW&#x201d; normative mineralogy being derived from names of the authors on the paper. Several revisions and modifications have since been made to the method in an attempt to improve the accuracy (<xref ref-type="bibr" rid="B20">Washington, 1918</xref>; <xref ref-type="bibr" rid="B8">Kelsey, 1965</xref>), to simplify the computational procedure (<xref ref-type="bibr" rid="B13">Pruseth, 2009</xref>) and to make it applicable to estimate mineralogy for sedimentary or metamorphic rocks (<xref ref-type="bibr" rid="B6">Imbrie and Poldervaart, 1959</xref>; <xref ref-type="bibr" rid="B15">Rosen et al., 2004</xref>). The algorithmic nature of the normative calculation means that the procedure is well suited to implementation in computer code and there have been many such developments in a number of languages (<xref ref-type="bibr" rid="B16">Stuckless, 1983</xref>; <xref ref-type="bibr" rid="B1">Cohen and Ward, 1991</xref>; <xref ref-type="bibr" rid="B14">R&#xe4;is&#xe4;nen et al., 1995</xref>; <xref ref-type="bibr" rid="B18">Verma et al., 2002</xref>; <xref ref-type="bibr" rid="B17">Verma and Rivera-G&#xf3;mez, 2013</xref>; <xref ref-type="bibr" rid="B4">Gonz&#xe1;lez-Guzm&#xe1;n, 2016</xref>). These tools have provided geochemists a convenient way to easily calculate normative mineralogy, however some suffer a number of technical and accessibility shortfalls, including requiring a paid license, being written in older or outdated languages, being closed source with unmaintained code bases, or suffering performance issues particularly when being used on large datasets. Further to this, some require users to be familiar with working in code. Existing domain-focused software tools in the geochemistry and petrology space such as <italic>GeoPyTool</italic> (<xref ref-type="bibr" rid="B22">Yu et al., 2018</xref>), <italic>GCDKit</italic> (<xref ref-type="bibr" rid="B7">Janou&#x161;ek et al., 2006</xref>), and <italic>shinyNORRRM</italic> (<xref ref-type="bibr" rid="B3">Gonz&#xe1;lez-Guzm&#xe1;n et al., 2023</xref>) have embraced the use of graphical user interfaces (GUIs) to enhance user experience. Nevertheless, apart from <italic>GeoPyTool</italic>, these tools still require some understanding of the R programming language, as their installation and operation are managed via the R Console. <xref ref-type="bibr" rid="B3">Gonz&#xe1;lez-Guzm&#xe1;n et al. (2023)</xref> includes a comparative study on normative mineralogy outputs from these and other implementations, and showed that <italic>shinyNORRRM</italic> delivered the most consistent results.</p>
<p>Here we present a new implementation of the <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref> normative mineralogy algorithm written in Python, which may be used through a GUI in the form of a web application or in a coding environment with the Python package <italic>pyrolite</italic> (<xref ref-type="bibr" rid="B21">Williams et al., 2020</xref>). The algorithm requires 11 major element oxides as the minimum input, and can also accept a set of minor and trace element oxides. It returns a set of up to 31 normative minerals. Two methods for estimating the Fe<sub>2</sub>O<sub>3</sub>:FeO ratio are also included within the algorithm to account for the fact that geochemical analyses rarely provides both values and the ratio varies depending on the rocks composition.</p>
</sec>
<sec sec-type="methods" id="s2">
<title>2 Methods</title>
<sec id="s2-1">
<title>2.1 Algorithm and python implementation</title>
<p>The <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref> version of the normative mineralogy calculation was used as the basis for this work. Verma et al. made a number of revisions to previous normative calculations, including i) the inclusion of minor and trace elements; ii) correction of errors in formulae and molecular weights for apatite that had existed since <xref ref-type="bibr" rid="B2">Cross et al. (1902)</xref>; iii) inclusion of the concept of variable molecular weights to account for substitution of trace elements and calculation of free or unused oxides from remaining mass balance of elements. Their revisions resulted in very consistent results compared to previous calculations, with the absolute difference between the sum of the normative minerals and the bulk chemical analyses typically less than 0.002% (<xref ref-type="bibr" rid="B19">Verma et al., 2003</xref>). This version of the normative calculation was initially distributed as part of the &#x201c;Standard Igneous Norm and Volcanic Rock Classification System&#x201d; (SINCLAS) (<xref ref-type="bibr" rid="B18">Verma et al., 2002</xref>). Subsequently, <italic>IgRoCS</italic> incorporated the standard igneous norm procedure with some minor corrections to the normative calculation, and added the ability to process multiple samples in one run (<xref ref-type="bibr" rid="B17">Verma and Rivera-G&#xf3;mez, 2013</xref>).</p>
<p>Python is an interpreted high-level programming language which has become one of the most widely used and popular programming languages (<xref ref-type="bibr" rid="B12">Perez et al., 2011</xref>). Over multiple decades a large ecosystem of open-source third-party libraries has been developed, providing a vast range of functionality. Python also works cross-platform, allowing use within Mac, Windows or Linux operating systems. These factors made it a good choice for use in developing a new, easy to use implementation of the normative mineralogy algorithm.</p>
<p>The algorithm steps described by <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref> were translated to Python code and where possible, written to take advantage of the high performance of vectorized functions in <italic>NumPy</italic> (<xref ref-type="bibr" rid="B5">Harris et al., 2020</xref>). Our implementation requires the major oxides as a minimum (SiO<sub>2</sub>, TiO<sub>2</sub>, Al<sub>2</sub>O<sub>3</sub>, Fe<sub>2</sub>O<sub>3</sub>, FeO, MnO, MgO, CaO, Na<sub>2</sub>O, K<sub>2</sub>O, P<sub>2</sub>O<sub>5</sub> as weight percent), and optionally minor and trace elements (CO<sub>2</sub>, SO<sub>3</sub>, S, F, Cl, Ba, Co, Cr, Cs, Li, Ni, Rb, Sr, V, Zr as parts per million). The major oxides are first adjusted to 100% on anhydrous basis, and then a second adjustment to 100% including the minor and trace elements is performed, as per <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref>. Trace elements are added to certain major oxides and variable molecular weights calculated. A generalised overview of the algorithm is shown in <xref ref-type="fig" rid="F1">Figure 1</xref>. For further information on the specifics of the normative mineralogy algorithm we refer the reader to the details in <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref>. The code developed in this work also leverages many of the functions available within the geochemistry-focused Python package <italic>pyrolite</italic> (<xref ref-type="bibr" rid="B21">Williams et al., 2020</xref>), and the final algorithm has itself been included as a submodule function within the latest release of <italic>pyrolite</italic>.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>A simplified overview of the algorithm used in <italic>webNORM</italic>.</p>
</caption>
<graphic xlink:href="feart-11-1232256-g001.tif"/>
</fig>
<p>The web application utilises the Python based web framework library <italic>Streamlit</italic>, which is designed to allow for rapid development of web applications. In deploying the implementation as a web application, users are not required to install anything in order to access it (requiring only a modern web browser), updates for bugfixes and new features are easily distributed (users always have the most up to date version), and the maintenance burden for the developer is minimised.</p>
</sec>
<sec id="s2-2">
<title>2.2 Iron oxidation ratio</title>
<p>The majority of whole-rock geochemical analyses report the iron content of a sample as total Fe<sub>2</sub>O<sub>3</sub> or FeO depending on the method of analysis (XRF, ICP, etc.) and on the convention for the type of rocks analysed and the laboratory undertaking the analysis. However the normative mineralogy calculation requires both to be specified. <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref> discuss a number of different methods to apportion the total Fe to Fe<sub>2</sub>O<sub>3</sub> and FeO, and in <italic>IgRoCS</italic> (<xref ref-type="bibr" rid="B18">Verma et al., 2002</xref>) three methods are implemented: <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref>, <xref ref-type="bibr" rid="B10">Middlemost (1989)</xref> and a user defined adjustment for cases where the ratio is known (for example, based on an assumption of lithology or if a titration for Fe has been conducted to measure the ratio of Fe<sub>3</sub> &#x2b; to Fe<sub>2</sub> &#x2b;). The <xref ref-type="bibr" rid="B10">Middlemost (1989)</xref> method defines a Fe ratio based on the total alkali-silica (TAS) classification of each sample. The <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> method uses an adjustment based on the SiO<sub>2</sub>, Na<sub>2</sub>O, and K<sub>2</sub>O content of the sample, with separate formulas for volcanic (Eq. <xref ref-type="disp-formula" rid="e1">1</xref>) and plutonic (Equation <xref ref-type="disp-formula" rid="e2">2</xref>) rocks, though only the former is used in <italic>IgRoCS</italic>.<disp-formula id="e1">
<mml:math id="m1">
<mml:mfrac>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>O</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>F</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0.93</mml:mn>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.0042</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>i</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.022</mml:mn>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi>O</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(1)</label>
</disp-formula>
<disp-formula id="e2">
<mml:math id="m2">
<mml:mfrac>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>O</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>F</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0.88</mml:mn>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.0016</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>i</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.027</mml:mn>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi>O</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(2)</label>
</disp-formula>
</p>
<p>Both the <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> and <xref ref-type="bibr" rid="B10">Middlemost (1989)</xref> method have been implemented in this work, with an additional option in the web app to specify a column in the user&#x2019;s uploaded data that contains a specific Fe adjustment ratio for each sample or a fixed value for all samples.</p>
</sec>
<sec id="s2-3">
<title>2.3 Algorithm validation</title>
<p>To confirm that the algorithm is performing as expected, the output from <italic>webNORM</italic> was compared to the output from <italic>IgRoCS</italic>. A test dataset of 551 bulk rock geochemical samples with major oxide values is provided with the <italic>IgRoCS</italic> software and was used as the basis for our comparison. The Fe Adjustment was calculated using both the <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> and <xref ref-type="bibr" rid="B10">Middlemost (1989)</xref> methods for all samples. As <italic>IgRoCS</italic> only uses the volcanic variant (Equation <xref ref-type="disp-formula" rid="e1">1</xref>) of the <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> method, the plutonic variant could not be compared.</p>
<p>The <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> adjusted data was used for the input to the normative mineralogy calculations. Normative mineralogy was calculated in both <italic>IgRoCS</italic> and <italic>webNORM</italic> twice: initially with only the major element data, and subsequently incorporating major, minor, and trace elements. The normative algorithm as described by <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref> should result in a normative mineralogy that sums to within &#xb1;0.002% of 100%. Herein we use this as a general indicator that our implementation of the <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref> algorithm is performing as intended. For a number of samples, <italic>IgRoCS</italic> does not calculate the normative mineralogy where <italic>webNORM</italic> does, and these samples are excluded from the comparison.</p>
<p>A comparison of the normative sum between <italic>webNORM</italic> and <italic>shinyNORRRM</italic> (<xref ref-type="bibr" rid="B3">Gonz&#xe1;lez-Guzm&#xe1;n et al., 2023</xref>) was also made. Comparison of individual normative mineralogy between <italic>webNORM</italic> and <italic>shinyNORRRM</italic> proved difficult due to <italic>shinyNORRRM</italic> not including minor and trace elements when readjusting to 100%. A dataset of 7,019 samples provided with <italic>shinyNORRRM</italic> (&#x2018;Deccan.csv&#x2019;; <xref ref-type="bibr" rid="B3">Gonz&#xe1;lez-Guzm&#xe1;n et al. (2023)</xref>) was used for this comparison.</p>
</sec>
</sec>
<sec sec-type="results" id="s3">
<title>3 Results</title>
<sec id="s3-1">
<title>3.1 Fe adjustment</title>
<p>When using the <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> adjustment, the FeO and Fe<sub>2</sub>O<sub>3</sub> values from <italic>IgRoCS</italic> and <italic>webNORM</italic> show a very good agreement (<xref ref-type="fig" rid="F2">Figure 2</xref>). When rounded to 3 decimal places, only one sample had a difference of <inline-formula id="inf1">
<mml:math id="m3">
<mml:mo>&#x3c;</mml:mo>
</mml:math>
</inline-formula>0.002% for Fe<sub>2</sub>O<sub>3</sub>, and none for FeO. The maximum difference between the two calculations for Fe<sub>2</sub>O<sub>3</sub> was 0.003%.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Comparison between the <italic>IgRoCS</italic> and <italic>webNORM</italic> implementation of the Middlemost Fe Adjustment method. The red markers indicate samples where the relative error between greater than 1%.</p>
</caption>
<graphic xlink:href="feart-11-1232256-g002.tif"/>
</fig>
<p>For the <xref ref-type="bibr" rid="B10">Middlemost (1989)</xref> adjustment method, there were more discrepancies between <italic>IgRoCS</italic> and <italic>webNORM</italic> (<xref ref-type="fig" rid="F2">Figure 2</xref>). When rounded to 3 decimal places, 22 samples had a difference of <inline-formula id="inf2">
<mml:math id="m4">
<mml:mo>&#x3c;</mml:mo>
</mml:math>
</inline-formula>0.002% for both Fe<sub>2</sub>O<sub>3</sub> and FeO. The maximum difference for Fe<sub>2</sub>O<sub>3</sub> and FeO was 0.675% and 0.741% respectively. Further investigation showed that the samples that show the errors all fall close to the TAS class boundaries (<xref ref-type="fig" rid="F3">Figure 3</xref>).</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Test data plotted on the TAS diagram. Red X markers indicate samples with a relative error between <italic>webNORM</italic> and <italic>IgRoCS</italic> is greater than 1% for Fe<sub>2</sub>O<sub>3</sub>. Note that these samples fall on the boundaries between the TAS classes.</p>
</caption>
<graphic xlink:href="feart-11-1232256-g003.tif"/>
</fig>
</sec>
<sec id="s3-2">
<title>3.2 Normative mineralogy</title>
<p>When using the <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> Fe adjusted data with only major oxides as the input, the results from <italic>IgRoCS</italic> and <italic>webNORM</italic> generally show a good match. The results from <italic>webNORM</italic> show a very consistent normative sum, with 20 samples deviating from 100% by more than &#xb1;0.002%, and a minimum sum of 99.998% and a maximum of 100.003%. This is compared to 58 samples deviating from 100% by more than &#xb1;0.002% in the results from <italic>IgRoCS</italic>. For normative diopside, there is a notable discrepancy between <italic>IgRoCS</italic> and <italic>webNORM</italic> in 47 samples. When looking at the deviation from 100% in the normative sum for just these samples, all show a deviation of &#xb1;0.002% from 100% in the <italic>webNORM</italic> results compared to a mean of &#xb1;3.2% (with a maximum of &#xb1;56.7%) for <italic>IgRoCS</italic>.</p>
<p>When calculating normative mineralogy using major and trace elements (with the <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> Fe adjusted data), 28 samples show a normative sum deviating by more than &#xb1;0.002% (&#x2212;0.09% to &#x2b;0.003%) compared to 56 samples from <italic>IgRoCS</italic>. The previous issue with diopside still remains, and 120 samples show discrepancy between <italic>IgRoCS</italic> and <italic>webNORM</italic> of <inline-formula id="inf3">
<mml:math id="m5">
<mml:mo>&#x3e;</mml:mo>
</mml:math>
</inline-formula>0% in either corundum, apatite, anorthite or fluorite (<xref ref-type="fig" rid="F2">Figure 2</xref>).</p>
<p>The mean deviation of the normative sum from 100% is lower in the <italic>webNORM</italic> results compared to <italic>IgRoCS</italic> for the erroneous samples for apatite (&#xb1;0.033% vs &#xb1;0.691%), fluorite (&#xb1;0.092% vs &#xb1;1.418%) and anorthite (&#xb1;0.101% vs &#xb1;0.598%). For samples showing a discrepancy in normative corundum, the mean deviation of the normative sum from 100% is larger in <italic>webNORM</italic> (&#xb1;0.081%) than in <italic>IgRoCS</italic> (&#xb1;0.046%).</p>
<p>When comparing <italic>webNORM</italic> and <italic>shinyNORRRM</italic>, both show a very consistent normative sum that averages 100.000%. The standard deviation of the sum is marginally lower from <italic>shinyNORRRM</italic> (0.001% vs 0.003%). Out of the 7,019 samples tested, the normative sum is <inline-formula id="inf4">
<mml:math id="m6">
<mml:mo>&#x3e;</mml:mo>
<mml:mspace width="0.3333em"/>
<mml:mo>&#xb1;</mml:mo>
</mml:math>
</inline-formula>0.002% for 67 samples from <italic>shinyNORRRM</italic> compared to 107 from <italic>webNORM</italic>. The minimum and maximum deviation from 100% is &#x2212;0.004% and &#x2b;0.004% from <italic>shinyNORRRM</italic> compared to &#x2212;0.087% and &#x2b;0.003% from <italic>webNORM</italic>.</p>
</sec>
</sec>
<sec sec-type="discussion" id="s4">
<title>4 Discussion</title>
<p>The <italic>webNORM</italic> implementation provides an accurate and convenient means for calculating normative mineralogy, addressing several limitations of existing tools. In general, the outputs from <italic>webNORM</italic> closely match those from <italic>IgRoCS</italic>, suggesting that it accurately reproduces the <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref> normative algorithm.</p>
<p>The results show that the <xref ref-type="bibr" rid="B9">Le Maitre (1976)</xref> adjustment in <italic>webNORM</italic> is performing the same as in <italic>IgRoCS</italic>. The discrepancies in the calculation of the <xref ref-type="bibr" rid="B10">Middlemost (1989)</xref> Fe ratio occur in samples that plot near the TAS class boundaries (<xref ref-type="fig" rid="F3">Figure 3</xref>). The TAS classifications returned by pyrolite are found to be consistent with the boundaries defined by <xref ref-type="bibr" rid="B11">Middlemost (1994)</xref> and we are therefore satisfied that <italic>webNORM</italic> is calcuating the FeO:Fe<sub>2</sub>O<sub>3</sub> ratio correctly.</p>
<p>When using only major elements for calculations, <italic>webNORM</italic> performs well, with the primary discrepancy between <italic>webNORM</italic> and <italic>IgRoCS</italic> occurring in the normative diopside. Further investigation into the subdivision of diopside into clinoenstatite and clinoferrosilite reveals that their sum does not match the diopside value reported by <italic>IgRoCS</italic>. When the sum of clinoenstatite and clinoferrosilite from <italic>IgRoCS</italic> is used to compare with diopside from <italic>webNORM</italic>, we observe a perfect match. This along with the fact that the normative sum from <italic>webNORM</italic> is closer to 100% for samples where there is a discrepancy suggests that the issue lies with how <italic>IgRoCS</italic> is handling diopside vs clinoenstatite and clinoferrosilite.</p>
<p>Incorporating minor elements in the calculation reveals discrepancies in corundum, apatite, anorthite, and most noticeably fluorite, where for some samples <italic>webNORM</italic> reports normative fluorite when <italic>IgRoCS</italic> does not (<xref ref-type="fig" rid="F4">Figure 4</xref>). The source of this error is thought to begin with the calculation of apatite which is one of the first normative minerals to be calculated and has the potential to consume fluorine. After this, normative fluorite is calculated, which can consume CaO, so any error in the amount of normative fluorite (caused from an error in normative apatite consuming the available fluorine) will result in an incorrect amount of CaO remaining. Anorthite is the next normative mineral after fluroite to be determined in the algorithm that requires CaO. Further analysis of normative sums for samples containing normative fluorite reveals that the values from <italic>webNORM</italic> are closer to 100% (99.908%) compared to <italic>IgRoCS</italic> (101.297%). This suggests that the issue may lie with the <italic>IgRoCS</italic> implementation. Corundum is calculated in the same step as anorthite, and so whilst it would at first make sense to assume the errors are again carried through, in this case, the deviation of the normative sum from 100% is greater in the <italic>webNORM</italic> results. No obvious errors in the <italic>webNORM</italic> code can be found when referencing the algorithm steps in <xref ref-type="bibr" rid="B19">Verma et al. (2003)</xref>. The precision of the molecular masses that <italic>webNORM</italic> uses is higher than in <italic>IgRoCS</italic>, so it is possible that these slight variations could propagate through and cause some discrepancy, though it cannot account entirely for the difference.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Scatter plots for normative mineral percentages as calculated by <italic>webNORM</italic> (<italic>x</italic>-axis) and <italic>IgRoCS</italic> (<italic>y</italic>-axis), using the major, minor and trace element input data. Only minerals which showed a discrepancy between <italic>IgRoCS</italic> and <italic>webNORM</italic> are plotted. A 1:1 line is shown for reference. Red points show samples that deviate from the line by <inline-formula id="inf5">
<mml:math id="m7">
<mml:mo>&#x3e;</mml:mo>
</mml:math>
</inline-formula>0.01%.</p>
</caption>
<graphic xlink:href="feart-11-1232256-g004.tif"/>
</fig>
<p>The comparison of normative sums between <italic>webNORM</italic> and <italic>shinyNORRRM</italic> suggests good consistency. A minority of samples, only 107 out of 7,019 from <italic>webNORM</italic>, did not sum to 100% &#xb1;0.002% (maximum deviation of &#x2212;0.087%), compared to 67 samples from <italic>shinyNORRRM</italic> (maximum deviation of &#xb1;0.004%). The level of agreement between <italic>IgRoCS</italic> and <italic>shinyNORRRM</italic> (<xref ref-type="bibr" rid="B3">Gonz&#xe1;lez-Guzm&#xe1;n et al., 2023</xref>) is very good, although we do not know which Fe adjustment method was used and if minor and trace elements were included in the calculation.</p>
<p>Despite the marginal discrepancy in the sum from <italic>webNORM</italic> only existing for a very limited set of samples, it would be prudent to find the source of this minor error in future work. Given that the code is available and open to improvements, any modifications required can be easily implemented, enabling both Python and R users to access highly comparable implementations of the CIPW norm. The latest version of the normative algorithm would then be automatically updated in <italic>webNORM</italic>, underlining one of the benefits of using a web application.</p>
</sec>
<sec sec-type="conclusion" id="s5">
<title>5 Conclusion</title>
<p>
<italic>webNORM</italic> offers the geoscience community an accessible, open-source solution for calculating normative mineralogy for a large number of samples. Comparisons of the output from <italic>webNORM</italic> with the <italic>IgRoCS</italic> implementation gives confidence that the Fe adjustment methods and the normative algorithm is performing as intended. The web application provides a user-friendly interface, requiring only an up to date browser and needs no installation or user updates. The code for both the algorithm and the web application are open source, and improvements, contributions and adaptations for specific use cases are encouraged.</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s6">
<title>Data availability statement</title>
<p>The code for the web application is available at <ext-link ext-link-type="uri" xlink:href="https://github.com/bomtuckle/webNORM">https://github.com/bomtuckle/webNORM</ext-link>. The code for the normative mineralogy algorithm and the test dataset used in this study is available at <ext-link ext-link-type="uri" xlink:href="https://github.com/morganjwilliams/pyrolite">https://github.com/morganjwilliams/pyrolite</ext-link>. Documentation for pyrolite is available at <ext-link ext-link-type="uri" xlink:href="https://pyrolite.readthedocs.io">https://pyrolite.readthedocs.io</ext-link>.</p>
</sec>
<sec id="s7">
<title>Author contributions</title>
<p>TB: Conceptualisation (equal), investigation (lead), software (lead), writing&#x2014;original draft preparation (lead), validation (equal). MW: Conceptualisation (equal), investigation (supporting), validation (equal), software (supporting), writing&#x2014;review and editing (equal). CN: Conceptualisation (equal), investigation (supporting), validation (equal), software (supporting), writing&#x2014;review and editing (equal). HH: Supervision, writing&#x2014;review and editing (supporting). All authors contributed to the article and approved the submitted version.</p>
</sec>
<sec id="s8">
<title>Funding</title>
<p>A majority of this work has been undertaken by TB during his PhD that is funded by Anglo American Plc. The funder was not involved in the study design, collection, analysis, interpretation of data, the writing of this article or the decision to submit it for publication.</p>
</sec>
<ack>
<p>Thanks to Jens Andersen for encouraging the development of this paper, and to Chris Yeomans for his mentoring and reviews of initial drafts.</p>
</ack>
<sec sec-type="COI-statement" id="s9">
<title>Conflict of interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s10">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cohen</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Ward</surname>
<given-names>C. R.</given-names>
</name>
</person-group> (<year>1991</year>). <article-title>SEDNORM-a program to calculate a normative mineralogy for sedimentary rocks based on chemical analyses</article-title>. <source>Comput. Geosciences</source> <volume>17</volume>, <fpage>1235</fpage>&#x2013;<lpage>1253</lpage>. <pub-id pub-id-type="doi">10.1016/0098-3004(91)90026-A</pub-id>
</citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cross</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Iddings</surname>
<given-names>J. P.</given-names>
</name>
<name>
<surname>Pirsson</surname>
<given-names>L. V.</given-names>
</name>
<name>
<surname>Washington</surname>
<given-names>H. S.</given-names>
</name>
</person-group> (<year>1902</year>). <article-title>A quantitative chemico-mineralogical classification and nomenclature of igneous rocks</article-title>. <source>J. Geol.</source> <volume>10</volume>, <fpage>555</fpage>&#x2013;<lpage>690</lpage>. <pub-id pub-id-type="doi">10.1086/621030</pub-id>
</citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gonz&#xe1;lez-Guzm&#xe1;n</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Elizondo-Pacheco</surname>
<given-names>L. A.</given-names>
</name>
<name>
<surname>Gonz&#xe1;lez-Roque</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>S&#xe1;nchez-Torres</surname>
<given-names>C. E.</given-names>
</name>
<name>
<surname>C&#xe1;rdenas-Mu&#xf1;oz</surname>
<given-names>K. S.</given-names>
</name>
<etal/>
</person-group> (<year>2023</year>). <article-title>shinyNORRRM: A cross-platform software to calculate the CIPW norm</article-title>. <source>Math. Geosci.</source> <volume>55</volume>, <fpage>563</fpage>&#x2013;<lpage>577</lpage>. <pub-id pub-id-type="doi">10.1007/s11004-023-10052-2</pub-id>
</citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gonz&#xe1;lez-Guzm&#xe1;n</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Norrrm: A free software to calculate the CIPW norm</article-title>. <source>Open J. Geol.</source> <volume>6</volume>, <fpage>30</fpage>&#x2013;<lpage>38</lpage>. <pub-id pub-id-type="doi">10.4236/OJG.2016.61004</pub-id>
</citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Harris</surname>
<given-names>C. R.</given-names>
</name>
<name>
<surname>Millman</surname>
<given-names>K. J.</given-names>
</name>
<name>
<surname>van der Walt</surname>
<given-names>S. J.</given-names>
</name>
<name>
<surname>Gommers</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Virtanen</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Cournapeau</surname>
<given-names>D.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>Array programming with NumPy</article-title>. <source>Nature</source> <volume>585</volume> (<issue>7825</issue>), <fpage>357</fpage>&#x2013;<lpage>362</lpage>. <pub-id pub-id-type="doi">10.1038/s41586-020-2649-2</pub-id>
</citation>
</ref>
<ref id="B6">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Imbrie</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Poldervaart</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>1959</year>). <article-title>Mineral compositions calculated from chemical analyses of sedimentary rocks</article-title>. <source>J. Sediment. Res.</source> <volume>29</volume>, <fpage>588</fpage>&#x2013;<lpage>595</lpage>. <pub-id pub-id-type="doi">10.1306/74D709A2-2B21-11D7-8648000102C1865D</pub-id>
</citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Janou&#x161;ek</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Farrow</surname>
<given-names>C. M.</given-names>
</name>
<name>
<surname>Erban</surname>
<given-names>V.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>Interpretation of whole-rock geochemical data in igneous geochemistry: introducing geochemical data toolkit (GCDkit)</article-title>. <source>J. Petrology</source> <volume>47</volume>, <fpage>1255</fpage>&#x2013;<lpage>1259</lpage>. <pub-id pub-id-type="doi">10.1093/petrology/egl013</pub-id>
</citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kelsey</surname>
<given-names>C. H.</given-names>
</name>
</person-group> (<year>1965</year>). <article-title>Calculation of the C.I.P.W. norm</article-title>. <source>Mineralogical Mag. J. Mineralogical Soc.</source> <volume>34</volume>, <fpage>276</fpage>&#x2013;<lpage>282</lpage>. <pub-id pub-id-type="doi">10.1180/MINMAG.1965.034.268.23</pub-id>
</citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Le Maitre</surname>
<given-names>R. W.</given-names>
</name>
</person-group> (<year>1976</year>). <article-title>Some problems of the projection of chemical data into mineralogical classifications</article-title>. <source>Contributions Mineralogy Petrology</source> <volume>56</volume> (<issue>2</issue>), <fpage>181</fpage>&#x2013;<lpage>189</lpage>. <pub-id pub-id-type="doi">10.1007/BF00399603</pub-id>
</citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Middlemost</surname>
<given-names>E. A.</given-names>
</name>
</person-group> (<year>1989</year>). <article-title>Iron oxidation ratios, norms and the classification of volcanic rocks</article-title>. <source>Chem. Geol.</source> <volume>77</volume>, <fpage>19</fpage>&#x2013;<lpage>26</lpage>. <pub-id pub-id-type="doi">10.1016/0009-2541(89)90011-9</pub-id>
</citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Middlemost</surname>
<given-names>E. A.</given-names>
</name>
</person-group> (<year>1994</year>). <article-title>Naming materials in the magma/igneous rock system</article-title>. <source>Earth Sci. Rev.</source> <volume>37</volume>, <fpage>215</fpage>&#x2013;<lpage>224</lpage>. <pub-id pub-id-type="doi">10.1016/0012-8252(94)90029-9</pub-id>
</citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Perez</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Granger</surname>
<given-names>B. E.</given-names>
</name>
<name>
<surname>Hunter</surname>
<given-names>J. D.</given-names>
</name>
</person-group> (<year>2011</year>). <article-title>Python: an ecosystem for scientific computing</article-title>. <source>Comput. Sci. Eng.</source> <volume>13</volume>, <fpage>13</fpage>&#x2013;<lpage>21</lpage>. <pub-id pub-id-type="doi">10.1109/MCSE.2010.119</pub-id>
</citation>
</ref>
<ref id="B13">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pruseth</surname>
<given-names>K. L.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>Calculation of the CIPW norm: new formulas</article-title>. <source>J. Earth Syst. Sci.</source> <volume>118</volume>, <fpage>101</fpage>&#x2013;<lpage>113</lpage>. <pub-id pub-id-type="doi">10.1007/s12040-009-0010-0</pub-id>
</citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>R&#xe4;is&#xe4;nen</surname>
<given-names>M. L.</given-names>
</name>
<name>
<surname>Tarvainen</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Aatos</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>1995</year>). <article-title>Norma - a program to calculate a normative mineralogy for glacial tills and rocks from chemical analysis</article-title>. <source>GFF</source> <volume>117</volume>, <fpage>215</fpage>&#x2013;<lpage>224</lpage>. <pub-id pub-id-type="doi">10.1080/11035899509546219</pub-id>
</citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rosen</surname>
<given-names>O. M.</given-names>
</name>
<name>
<surname>Abbyasov</surname>
<given-names>A. A.</given-names>
</name>
<name>
<surname>Tipper</surname>
<given-names>J. C.</given-names>
</name>
</person-group> (<year>2004</year>). <article-title>Minlith - an experience-based algorithm for estimating the likely mineralogical compositions of sedimentary rocks from bulk chemical analyses</article-title>. <source>Comput. Geosciences</source> <volume>30</volume>, <fpage>647</fpage>&#x2013;<lpage>661</lpage>. <pub-id pub-id-type="doi">10.1016/j.cageo.2004.03.011</pub-id>
</citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Stuckless</surname>
<given-names>J. S.</given-names>
</name>
</person-group> (<year>1983</year>). <article-title>A program in Hewlett-Packard BASIC for calculation of CIPW normative minerals using HP-Series 80 computers and VISICALC electronic worksheet</article-title>. <comment>Tech. rep</comment>.</citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Verma</surname>
<given-names>S. P.</given-names>
</name>
<name>
<surname>Rivera-G&#xf3;mez</surname>
<given-names>M. A.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Computer programs for the classification and nomenclature of igneous rocks</article-title>. <source>Episodes J. Int. Geoscience</source> <volume>36</volume>, <fpage>115</fpage>&#x2013;<lpage>124</lpage>. <pub-id pub-id-type="doi">10.18814/EPIIUGS/2013/V36I2/005</pub-id>
</citation>
</ref>
<ref id="B18">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Verma</surname>
<given-names>S. P.</given-names>
</name>
<name>
<surname>Torres-Alvarado</surname>
<given-names>I. S.</given-names>
</name>
<name>
<surname>Sotelo-Rodr&#xed;guez</surname>
<given-names>Z. T.</given-names>
</name>
</person-group> (<year>2002</year>). <article-title>Sinclas: standard igneous norm and volcanic rock classification system</article-title>. <source>Comput. Geosciences</source> <volume>28</volume>, <fpage>711</fpage>&#x2013;<lpage>715</lpage>. <pub-id pub-id-type="doi">10.1016/S0098-3004(01)00087-5</pub-id>
</citation>
</ref>
<ref id="B19">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Verma</surname>
<given-names>S. P.</given-names>
</name>
<name>
<surname>Torres-Alvarado</surname>
<given-names>I. S.</given-names>
</name>
<name>
<surname>Velasco-Tapia</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2003</year>). <article-title>A revised CIPW norm</article-title>. <source>Schweiz. Mineral. Petrogr. Mittl.</source> <volume>83</volume>, <fpage>197</fpage>&#x2013;<lpage>216</lpage>. <pub-id pub-id-type="doi">10.5169/seals-63145</pub-id>
</citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Washington</surname>
<given-names>H. S.</given-names>
</name>
</person-group> (<year>1918</year>). <article-title>
<italic>Chemical Analyses of igneous rocks</italic>. Published from 1884 to 1913 inclusive. With a critical discussion of the character and use of analyses. By henry stephens Washington. U. S. Geological survey, professional paper 99, Washington, 1917</article-title>. <source>Science</source> <volume>47</volume>, <fpage>368</fpage>&#x2013;<lpage>370</lpage>. <pub-id pub-id-type="doi">10.1126/science.47.1215.368</pub-id>
</citation>
</ref>
<ref id="B21">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Williams</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Schoneveld</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Mao</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Klump</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Gosses</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Dalton</surname>
<given-names>H.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>pyrolite: python for geochemistry</article-title>. <source>J. Open Source Softw.</source> <volume>5</volume>, <fpage>2314</fpage>. <pub-id pub-id-type="doi">10.21105/joss.02314</pub-id>
</citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Yu</surname>
<given-names>Q.-Y.</given-names>
</name>
<name>
<surname>Bagas</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>P.-H.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>GeoPyTool: A cross-platform software solution for common geological calculations and plots</article-title>. <source>Geosci. Front.</source> <volume>10</volume>, <fpage>1437</fpage>&#x2013;<lpage>1447</lpage>. <pub-id pub-id-type="doi">10.1016/j.gsf.2018.08.001</pub-id>
</citation>
</ref>
</ref-list>
</back>
</article>