pyrolite 0.0.14__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__init__.py +10 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/_version.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/alteration.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/classification.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/compositions.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/geochem.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/melts.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/norm.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/normalisation.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/plot.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/_version.py +21 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/alteration.py +66 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/classification.py +222 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__init__.py +9 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/aggregate.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/codata.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/impute.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/renorm.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/aggregate.py +391 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/codata.py +266 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/impute.py +82 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/renorm.py +40 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/compositions.py +524 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_CFB_Dataset_List.csv +42 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_Convergent_Dataset_List.csv +42 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OBFB_Dataset_List.csv +5 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OIB_Dataset_List.csv +49 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OceanicPlateau_Dataset_List.csv +18 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/contents.json +1 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-35.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/env.py +1063 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ba.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Bs.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.F.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O3.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Pc.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ph.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.R.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S3.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U1.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U2.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U3.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.modelfields +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.nan.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.none.modelfield +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/aphanitic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/gabbroic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/peralkalinity.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/phaneritic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/ultramafic.clsf.gz +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/CH_PalmeONeill2014.csv +95 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DDMM_WorkmanHart2005.csv +105 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DMM_WorkmanHart2005.csv +105 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DM_SaltersStrake2004.csv +95 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/EDMM_WorkmanHart2005.csv +105 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/PM_PalmeONeill2014.csv +95 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/timescale/geotimescale_spans.csv +180 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/geochem.py +821 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/melts.py +92 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__init__.py +10 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/db.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/ions.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/mineral.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/sites.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/db.py +88 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/ions.py +78 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/mineral.py +587 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/sites.py +134 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/norm.py +224 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/normalisation.py +204 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/plot.py +514 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__init__.py +13 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/__init__.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/database.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/env.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/general.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/georoc.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/math.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/melts.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multip.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multiprocessing.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/pd.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/plot.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/skl.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/spatial.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/text.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/time.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/wfs.cpython-36.pyc +0 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/database.py +88 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/env.py +81 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/general.py +266 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/georoc.py +444 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/math.py +371 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/melts.py +397 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multip.py +29 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multiprocessing.py +29 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/pd.py +214 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/plot.py +345 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/skl.py +847 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/spatial.py +91 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/text.py +207 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/time.py +224 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/wfs.py +10 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/PKG-INFO +61 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/SOURCES.txt +83 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/dependency_links.txt +1 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/requires.txt +47 -0
- ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import os, sys
|
|
2
|
+
import re
|
|
3
|
+
import pandas as pd
|
|
4
|
+
import logging
|
|
5
|
+
from .util.melts import *
|
|
6
|
+
from .util.pd import to_frame
|
|
7
|
+
from pyrolite.geochem import common_oxides, common_elements
|
|
8
|
+
from pyrolite.util.melts import MELTS_Env
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class MeltsSystem:
|
|
16
|
+
|
|
17
|
+
def __init__(self, composition):
|
|
18
|
+
|
|
19
|
+
self.composition = composition
|
|
20
|
+
self.liquid = None
|
|
21
|
+
self.solid = None
|
|
22
|
+
self.potentialSolid = None
|
|
23
|
+
self.parameters = None
|
|
24
|
+
|
|
25
|
+
def equilirate(self):
|
|
26
|
+
method = 'equilibrate'
|
|
27
|
+
|
|
28
|
+
def findLiquidus(self):
|
|
29
|
+
method = 'findLiquidus'
|
|
30
|
+
|
|
31
|
+
def findWetLiquidus(self):
|
|
32
|
+
method = 'findWetLiquidus'
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def from_melts_cstr(composition_str):
|
|
37
|
+
"""Parses melts composition strings to dictionaries."""
|
|
38
|
+
regex = r"""(?P<el>[a-zA-Z'^.]+)(?P<num>[^a-zA-Z]+)"""
|
|
39
|
+
result = re.findall(regex, composition_str)
|
|
40
|
+
convert_element = lambda s: re.sub(r"""[\']+""",
|
|
41
|
+
str(s.count("""'"""))+'+',
|
|
42
|
+
s)
|
|
43
|
+
return {convert_element(el): float(val) for (el, val) in result}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def to_meltsfiles(df, linesep=os.linesep, **kwargs):
|
|
47
|
+
"""
|
|
48
|
+
Creates a number of melts files from a dataframe.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
# Type checking such that series will be passed directly to MELTSfiles
|
|
52
|
+
if isinstance(df, pd.DataFrame):
|
|
53
|
+
for ix in range(df.index.size):
|
|
54
|
+
to_meltsfile(df.iloc[ix, :])
|
|
55
|
+
elif isinstance(df, pd.Series):
|
|
56
|
+
to_meltsfile(src, **kwargs)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def to_meltsfile(ser, linesep=os.linesep, **kwargs):
|
|
60
|
+
lines = []
|
|
61
|
+
# majors --> SiO2 45.7
|
|
62
|
+
# output majors to Wt% values, may need to reorder them for MELTS..
|
|
63
|
+
majors = [i for i in ser.index if i in common_oxides()]
|
|
64
|
+
for k, v in zip(majors, ser[majors].values):
|
|
65
|
+
if not pd.isnull(v): # no NaN data in MELTS files
|
|
66
|
+
lines.append('Initial Composition: {} {}'.format(k, v))
|
|
67
|
+
|
|
68
|
+
# traces --> Initial Trace: Sm 0.2
|
|
69
|
+
|
|
70
|
+
# output traces to ppm values
|
|
71
|
+
traces = [i for i in ser.index if i in common_elements()]
|
|
72
|
+
for k, v in zip(traces, ser[traces].values):
|
|
73
|
+
if not pd.isnull(v): # no NaN data in MELTS files
|
|
74
|
+
lines.append('Initial Trace: {} {}'.format(k, v))
|
|
75
|
+
# output valid kwargs
|
|
76
|
+
valid = ['Mode',
|
|
77
|
+
'Temperature',
|
|
78
|
+
'Pressure',
|
|
79
|
+
'dp/dt',
|
|
80
|
+
'log fo2 Path',
|
|
81
|
+
'Log fO2 Delta']
|
|
82
|
+
|
|
83
|
+
# potentially pass these as tuples (start, stop, increment)
|
|
84
|
+
# temperature, pressure --> Initial Temperature: 1500.0
|
|
85
|
+
# temperature, pressure --> Final Temperature: 2000.0
|
|
86
|
+
# temperature, pressure --> Increment Temperature: 3.00
|
|
87
|
+
|
|
88
|
+
# dp/dt: 0.00
|
|
89
|
+
# log fo2 Path: None
|
|
90
|
+
# Log fO2 Delta: 0.0
|
|
91
|
+
# Mode: Fractionate Solids
|
|
92
|
+
return linesep.join(lines)
|
ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/__init__.cpython-36.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/mineral.cpython-36.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import periodictable as pt
|
|
2
|
+
from .mineral import *
|
|
3
|
+
from .sites import *
|
|
4
|
+
# %% Generic Mineral Group Templates ---------------------------------------------------
|
|
5
|
+
OLIVINE = MineralTemplate(
|
|
6
|
+
"olivine",
|
|
7
|
+
MX(
|
|
8
|
+
"M1",
|
|
9
|
+
affinities={
|
|
10
|
+
"Mg{2+}": 0,
|
|
11
|
+
"Fe{2+}": 1,
|
|
12
|
+
"Mn{2+}": 2,
|
|
13
|
+
"Li{+}": 3,
|
|
14
|
+
"Ca{2+}": 4,
|
|
15
|
+
"Na{+}": 5,
|
|
16
|
+
},
|
|
17
|
+
),
|
|
18
|
+
MX(
|
|
19
|
+
"M2",
|
|
20
|
+
affinities={
|
|
21
|
+
"Al{3+}": 0,
|
|
22
|
+
"Fe{3+}": 1,
|
|
23
|
+
"Ti{4+}": 2,
|
|
24
|
+
"Cr{3+}": 3,
|
|
25
|
+
"V{3+}": 4,
|
|
26
|
+
"Ti{3+}": 5,
|
|
27
|
+
"Zr{4+}": 6,
|
|
28
|
+
"Sc{3+}": 7,
|
|
29
|
+
"Zn{2+}": 8,
|
|
30
|
+
"Mg{2+}": 9,
|
|
31
|
+
"Fe{2+}": 10,
|
|
32
|
+
"Mn{2+}": 11,
|
|
33
|
+
},
|
|
34
|
+
),
|
|
35
|
+
TX(),
|
|
36
|
+
*[OX()] * 2,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
PYROXENE = MineralTemplate(
|
|
40
|
+
"pyroxene",
|
|
41
|
+
MX(
|
|
42
|
+
"M1",
|
|
43
|
+
affinities={
|
|
44
|
+
"Mg{2+}": 0,
|
|
45
|
+
"Fe{2+}": 1,
|
|
46
|
+
"Mn{2+}": 2,
|
|
47
|
+
"Li{+}": 3,
|
|
48
|
+
"Ca{2+}": 4,
|
|
49
|
+
"Na{+}": 5,
|
|
50
|
+
},
|
|
51
|
+
),
|
|
52
|
+
MX(
|
|
53
|
+
"M2",
|
|
54
|
+
affinities={
|
|
55
|
+
"Al{3+}": 0,
|
|
56
|
+
"Fe{3+}": 1,
|
|
57
|
+
"Ti{4+}": 2,
|
|
58
|
+
"Cr{3+}": 3,
|
|
59
|
+
"V{3+}": 4,
|
|
60
|
+
"Ti{3+}": 5,
|
|
61
|
+
"Zr{4+}": 6,
|
|
62
|
+
"Sc{3+}": 7,
|
|
63
|
+
"Zn{2+}": 8,
|
|
64
|
+
"Mg{2+}": 9,
|
|
65
|
+
"Fe{2+}": 10,
|
|
66
|
+
"Mn{2+}": 11,
|
|
67
|
+
},
|
|
68
|
+
),
|
|
69
|
+
*[TX()] * 2,
|
|
70
|
+
*[OX()] * 6,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
Mineral("forsterite", OLIVINE, pt.formula("Mg2SiO4"))
|
|
74
|
+
Mineral("fayalite", OLIVINE, pt.formula("Fe2SiO4"))
|
|
75
|
+
Mineral("tephroite", OLIVINE, pt.formula("Mn2SiO4"))
|
|
76
|
+
Mineral("liebenbergite", OLIVINE, pt.formula("Ni1.5Mg0.5SiO4"))
|
|
77
|
+
|
|
78
|
+
Mineral("enstatite", PYROXENE, pt.formula("Mg2Si2O6"))
|
|
79
|
+
Mineral("ferrosilite", PYROXENE, pt.formula("Fe2Si2O6"))
|
|
80
|
+
Mineral("diopside", PYROXENE, pt.formula("CaMgSi2O6"))
|
|
81
|
+
Mineral("hedenbergite", PYROXENE, pt.formula("CaFeSi2O6"))
|
|
82
|
+
Mineral("johannsenite", PYROXENE, pt.formula("CaMnSi2O6"))
|
|
83
|
+
Mineral("esseneite", PYROXENE, pt.formula("Ca Al Fe{3+} SiO6"))
|
|
84
|
+
Mineral("jadeite", PYROXENE, pt.formula("NaAlSi2O6"))
|
|
85
|
+
Mineral("aegirine", PYROXENE, pt.formula("NaFe{3+}Si2O6"))
|
|
86
|
+
Mineral("namansilite", PYROXENE, pt.formula("NaMn{3+}Si2O6"))
|
|
87
|
+
Mineral("kosmochlor", PYROXENE, pt.formula("NaCrSi2O6"))
|
|
88
|
+
Mineral("spodumene", PYROXENE, pt.formula("LiAlSi2O6"))
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import periodictable as pt
|
|
2
|
+
from periodictable.core import Element
|
|
3
|
+
from periodictable.formulas import Formula
|
|
4
|
+
from collections import defaultdict
|
|
5
|
+
import logging
|
|
6
|
+
|
|
7
|
+
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
__default_charges__ = defaultdict(lambda: None)
|
|
11
|
+
__default_charges__.update(
|
|
12
|
+
dict(
|
|
13
|
+
H=1,
|
|
14
|
+
Li=1,
|
|
15
|
+
Be=1,
|
|
16
|
+
B=3,
|
|
17
|
+
C=4,
|
|
18
|
+
O=-2,
|
|
19
|
+
F=-1,
|
|
20
|
+
Na=1,
|
|
21
|
+
Mg=2,
|
|
22
|
+
Al=3,
|
|
23
|
+
Si=4,
|
|
24
|
+
P=3,
|
|
25
|
+
Cl=-1,
|
|
26
|
+
K=1,
|
|
27
|
+
Ca=2,
|
|
28
|
+
Sc=3,
|
|
29
|
+
Ti=4,
|
|
30
|
+
V=3,
|
|
31
|
+
Cr=3,
|
|
32
|
+
Mn=2,
|
|
33
|
+
Fe=2,
|
|
34
|
+
Co=2,
|
|
35
|
+
Ni=2,
|
|
36
|
+
Cu=2,
|
|
37
|
+
Zn=2,
|
|
38
|
+
Br=-1,
|
|
39
|
+
Rb=1,
|
|
40
|
+
Sr=2,
|
|
41
|
+
Y=3,
|
|
42
|
+
Zr=4,
|
|
43
|
+
Nb=5,
|
|
44
|
+
Sn=4,
|
|
45
|
+
I=-1,
|
|
46
|
+
Cs=1,
|
|
47
|
+
Ba=2,
|
|
48
|
+
La=3,
|
|
49
|
+
Ce=3,
|
|
50
|
+
Pr=3,
|
|
51
|
+
Nd=3,
|
|
52
|
+
Sm=3,
|
|
53
|
+
Eu=3,
|
|
54
|
+
Gd=3,
|
|
55
|
+
Tb=3,
|
|
56
|
+
Dy=3,
|
|
57
|
+
Ho=3,
|
|
58
|
+
Er=3,
|
|
59
|
+
Tm=3,
|
|
60
|
+
Yb=3,
|
|
61
|
+
Lu=3,
|
|
62
|
+
Hf=4,
|
|
63
|
+
Pb=2,
|
|
64
|
+
Th=4,
|
|
65
|
+
U=4,
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Monkey patching for default charges
|
|
70
|
+
|
|
71
|
+
Element.default_charge = 0
|
|
72
|
+
Formula.default_charge = property(
|
|
73
|
+
lambda self: sum([m * a.default_charge for a, m in self.atoms.items()])
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
for el, c in __default_charges__.items():
|
|
77
|
+
getattr(pt, el).default_charge = c
|
|
78
|
+
assert isinstance(getattr(pt, el), Element)
|