pypsbuilder 2.5.1__py3-none-any.whl

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.
pypsbuilder/tcinit.py ADDED
@@ -0,0 +1,992 @@
1
+ """THERMOCALC API classes.
2
+
3
+ This module contain function to initialize working directory. It will
4
+ download the latest 3.5 version of THERMOCALC and appropriate dataset
5
+ and ax file according to user selection
6
+
7
+ """
8
+
9
+ # author: Ondrej Lexa
10
+ # website: https://github.com/ondrolexa/pypsbuilder
11
+
12
+ from pathlib import Path
13
+ import platform
14
+ from io import BytesIO
15
+ import shutil
16
+ from urllib.request import urlopen
17
+ from zipfile import ZipFile
18
+ import unicodedata
19
+ import string
20
+
21
+ # recent files
22
+ set_urls = {
23
+ "metapelite": "https://hpxeosandthermocalc.files.wordpress.com/2022/01/tc-thermoinput-metapelite-2022-01-23.zip",
24
+ "metabasite": "https://hpxeosandthermocalc.files.wordpress.com/2022/01/tc-thermoinput-metabasite-2022-01-30.zip",
25
+ "igneous": "https://hpxeosandthermocalc.files.wordpress.com/2022/01/tc-thermoinput-igneous-2022-01-23.zip",
26
+ }
27
+
28
+ exe_urls = {
29
+ "linux": "https://hpxeosandthermocalc.files.wordpress.com/2020/12/tc350beta-linux-bundle.zip",
30
+ "win": "https://hpxeosandthermocalc.files.wordpress.com/2020/12/tc350-win-bundle.zip",
31
+ "mac": "https://hpxeosandthermocalc.files.wordpress.com/2020/12/tc350beta-mac-bundle.zip",
32
+ "macasi": "https://hpxeosandthermocalc.files.wordpress.com/2020/12/tc350beta-macasi-bundle.zip",
33
+ }
34
+
35
+
36
+ def tcprojinit():
37
+ cwd = Path.cwd()
38
+ dir_needed = True
39
+ while dir_needed:
40
+ dest_tmp = input(f"Enter project directory [{cwd}]: ")
41
+ if dest_tmp == "":
42
+ dest = cwd
43
+ else:
44
+ dest = Path(dest_tmp)
45
+ if dest.is_dir():
46
+ if not any(dest.iterdir()):
47
+ dir_needed = False
48
+ else:
49
+ print(f"ERROR: {dest} is not empty...")
50
+ else:
51
+ print(f"ERROR: {dest} is not valid directory...")
52
+
53
+ projname_needed = True
54
+ whitelist = f"_{string.ascii_letters}{string.digits}"
55
+ while projname_needed:
56
+ projname = input("Enter name of the project (max 8 chars) [project]: ")
57
+ if projname == "":
58
+ projname = "project"
59
+ # replace spaces
60
+ projname = projname.replace(" ", "_")
61
+ # keep only valid ascii chars
62
+ projname = (
63
+ unicodedata.normalize("NFKD", projname).encode("ASCII", "ignore").decode()
64
+ )
65
+ # keep only whitelisted chars
66
+ projname = "".join(c for c in projname if c in whitelist)
67
+ if len(projname) < 1:
68
+ print("ERROR: project name may not be empty")
69
+ elif len(projname) > 8:
70
+ print("ERROR: project name may not be longer than 8 characters")
71
+ else:
72
+ projname_needed = False
73
+
74
+ set_needed = True
75
+ sets = {1: "metapelite", 2: "metabasite", 3: "igneous"}
76
+ while set_needed:
77
+ print("Choose THEMOCALC input set")
78
+ for k in sets:
79
+ print(f" {k}. {sets[k]} set")
80
+ try:
81
+ n = input("Which set? [1]: ")
82
+ if n == "":
83
+ n = "1"
84
+ if int(n) in [1, 2, 3]:
85
+ set_needed = False
86
+ except ValueError:
87
+ print("ERROR: enter 1, 2 or 3")
88
+ tcset = sets[int(n)]
89
+
90
+ if tcset == "metapelite":
91
+ ds = "62"
92
+ systems = {1: "mp50MnNCKFMASHTO", 2: "mp50NCKFMASHTO", 3: "mp50KFMASH"}
93
+ system_needed = True
94
+ while system_needed:
95
+ print("Choose system for metapelite set")
96
+ for k in systems:
97
+ print(f" {k}. {systems[k]}")
98
+ try:
99
+ v = input("Which system? [1]: ")
100
+ if v == "":
101
+ v = "1"
102
+ if int(v) in [1, 2, 3]:
103
+ system_needed = False
104
+ except ValueError:
105
+ print("ERROR: enter 1, 2 or 3")
106
+ system = systems[int(v)]
107
+ guesses = metapelite_guesses[system]
108
+ elif tcset == "metabasite":
109
+ ds = "62"
110
+ system = "mb50NCKFMASHTO"
111
+ guesses = metabasite_guesses[system]
112
+ else:
113
+ ds = "633"
114
+ systems = {1: "ig50NCKFMASHTOCr", 2: "ig50NCKFMASTOCr"}
115
+ system_needed = True
116
+ while system_needed:
117
+ print("Choose system for igneous set")
118
+ for k in systems:
119
+ print(f" {k}. {systems[k]}")
120
+ try:
121
+ v = input("Which system? [1]: ")
122
+ if v == "":
123
+ v = "1"
124
+ if int(v) in [1, 2]:
125
+ system_needed = False
126
+ except ValueError:
127
+ print("ERROR: enter 1 or 2")
128
+ system = systems[int(v)]
129
+ guesses = igneous_guesses[system]
130
+
131
+ # create prefs file
132
+ with open(dest / "tc-prefs.txt", "w") as f:
133
+ content = string.Template(tcpref_tmpl).substitute(dataset=ds, project=projname)[
134
+ 1:
135
+ ]
136
+ f.write(content)
137
+
138
+ # download executable
139
+ comp = platform.system()
140
+ if comp == "Linux":
141
+ with urlopen(exe_urls["linux"]) as zip:
142
+ with ZipFile(BytesIO(zip.read())) as zfile:
143
+ source = zfile.open("tc350beta-linux-bundle/tc350beta")
144
+ target = open(dest / "tc350beta", "wb")
145
+ with source, target:
146
+ shutil.copyfileobj(source, target)
147
+ Path(dest / "tc350beta").chmod(33261)
148
+ elif comp == "Windows":
149
+ with urlopen(exe_urls["win"]) as zip:
150
+ with ZipFile(BytesIO(zip.read())) as zfile:
151
+ source = zfile.open("tc350-win-bundle/tc350beta.exe")
152
+ target = open(dest / "tc350beta.exe", "wb")
153
+ with source, target:
154
+ shutil.copyfileobj(source, target)
155
+ Path(dest / "tc350beta.exe").chmod(33261)
156
+ elif comp == "Darwin":
157
+ proc = platform.processor()
158
+ if proc == "x86_64":
159
+ with urlopen(exe_urls["mac"]) as zip:
160
+ with ZipFile(BytesIO(zip.read())) as zfile:
161
+ source = zfile.open("tc350beta-bundle/tc350beta")
162
+ target = open(dest / "tc350beta", "wb")
163
+ with source, target:
164
+ shutil.copyfileobj(source, target)
165
+ Path(dest / "tc350beta").chmod(33261)
166
+ elif proc == "arm":
167
+ with urlopen(exe_urls["macasi"]) as zip:
168
+ with ZipFile(BytesIO(zip.read())) as zfile:
169
+ source = zfile.open("tc350beta-macASi-bundle/tc350si")
170
+ target = open(dest / "tc350si", "wb")
171
+ with source, target:
172
+ shutil.copyfileobj(source, target)
173
+ Path(dest / "tc350si").chmod(33261)
174
+ else:
175
+ raise AttributeError(f"Unsupported MacOS {proc} processor")
176
+ else:
177
+ raise AttributeError(f"Unsupported {comp} platform")
178
+
179
+ # download set
180
+ tcset_url = set_urls[tcset]
181
+ prefix = tcset_url.split("/")[-1].split(".")[0]
182
+ with urlopen(tcset_url) as zip:
183
+ with ZipFile(BytesIO(zip.read())) as zfile:
184
+ with zfile.open(f"{prefix}/samecoding_and_starting_guesses.txt") as f:
185
+ scsg = f.readlines()
186
+ scsg = [s.decode("mac-roman") for s in scsg]
187
+ samecoding = "".join([ln for ln in scsg if ln.startswith("samecoding")])
188
+ source = zfile.open(f"{prefix}/tc-ds{ds}.txt")
189
+ target = open(dest / f"tc-ds{ds}.txt", "wb")
190
+ with source, target:
191
+ shutil.copyfileobj(source, target)
192
+ source = zfile.open(f"{prefix}/tc-{system}.txt")
193
+ target = open(dest / f"tc-{system}.txt", "wb")
194
+ with source, target:
195
+ shutil.copyfileobj(source, target)
196
+
197
+ # create project file
198
+ with open(dest / f"tc-{projname}.txt", "w") as f:
199
+ content = string.Template(tcprj_tmpl).substitute(
200
+ system=system, project=projname, samecoding=samecoding, guesses=guesses
201
+ )[1:]
202
+ f.write(content)
203
+
204
+
205
+ tcpref_tmpl = """
206
+ setpagewidth 700
207
+ dataset $dataset
208
+ scriptfile $project
209
+ calcmode 1
210
+ *
211
+ """
212
+
213
+ metapelite_guesses = {
214
+ "mp50KFMASH": """
215
+ % --------------------------------------------------------
216
+ % Starting guesses in KFMASH
217
+ % for g liq mu bi opx sa cd st chl ctd sp1
218
+ % --------------------------------------------------------
219
+
220
+ xyzguess x(g) 0.828230
221
+
222
+ xyzguess q(liq) 0.361210
223
+ xyzguess fsp(liq) 0.298204
224
+ xyzguess ol(liq) 0.0452697
225
+ xyzguess x(liq) 0.811725
226
+ xyzguess h2o(liq) 0.273973
227
+
228
+ xyzguess x(mu) 0.424480
229
+ xyzguess y(mu) 0.855215 range 0.000 2.000
230
+
231
+ xyzguess x(bi) 0.515248
232
+ xyzguess y(bi) 0.181294
233
+ xyzguess Q(bi) 0.135847
234
+
235
+ xyzguess x(opx) 0.725005
236
+ xyzguess y(opx) 0.157290 range 0.000 2.000
237
+ xyzguess Q(opx) 0.258819
238
+
239
+ xyzguess x(sa) 0.1
240
+ xyzguess y(sa) 0.3
241
+ xyzguess Q(sa) 0.05 range -1 1
242
+
243
+ xyzguess x(cd) 0.529141
244
+ xyzguess h(cd) 0.259128
245
+
246
+ xyzguess x(st) 0.9
247
+
248
+ xyzguess x(chl) 0.412420
249
+ xyzguess y(chl) 0.610079
250
+ xyzguess QAl(chl) 0.389713 range -1.000 1.000
251
+ xyzguess Q1(chl) 0.0751369 range -1.000 1.000
252
+ xyzguess Q4(chl) 0.0641869 range -1.000 1.000
253
+
254
+ xyzguess x(ctd) 0.88
255
+
256
+ xyzguess x(sp1) 0.9
257
+ """,
258
+ "mp50NCKFMASHTO": """
259
+ % --------------------------------------------------------
260
+ % Starting guesses in NCKFMASHTO
261
+ % for g liq pl ksp ep ma mu pa bi opx sa cd st chl ctd sp mt ilmm hemm ilm hem mt1
262
+ % --------------------------------------------------------
263
+
264
+ xyzguess x(g) 0.833575
265
+ xyzguess z(g) 0.0735303
266
+ xyzguess f(g) 0.0524207
267
+
268
+ xyzguess q(L) 0.260829
269
+ xyzguess fsp(L) 0.332998
270
+ xyzguess na(L) 0.267890
271
+ xyzguess an(L) 0.0124108
272
+ xyzguess ol(L) 0.00460699
273
+ xyzguess x(L) 0.799969
274
+ xyzguess h2o(L) 0.376568
275
+
276
+ xyzguess ca(pl4tr) 0.410144
277
+ xyzguess k(pl4tr) 0.0182303
278
+
279
+ xyzguess na(k4tr) 0.159152
280
+ xyzguess ca(k4tr) 0.00450582
281
+
282
+ xyzguess f(ep) 0.379418
283
+ xyzguess Q(ep) 0.346850 range 0.000 0.500
284
+
285
+ xyzguess x(ma) 0.6
286
+ xyzguess y(ma) 0.96
287
+ xyzguess f(ma) 0.001
288
+ xyzguess n(ma) 0.05
289
+ xyzguess c(ma) 0.94
290
+
291
+ xyzguess x(mu) 0.501982
292
+ xyzguess y(mu) 0.839614
293
+ xyzguess f(mu) 0.0172093
294
+ xyzguess n(mu) 0.144000
295
+ xyzguess c(mu) 0.00179401
296
+
297
+ xyzguess x(pa) 0.501982
298
+ xyzguess y(pa) 0.998030
299
+ xyzguess f(pa) 0.00182412
300
+ xyzguess n(pa) 0.945628
301
+ xyzguess c(pa) 0.0116010
302
+
303
+ xyzguess x(bi) 0.698859
304
+ xyzguess y(bi) 0.268818
305
+ xyzguess f(bi) 0.158096
306
+ xyzguess t(bi) 0.0981352
307
+ xyzguess Q(bi) 0.0683120
308
+
309
+ xyzguess x(opx) 0.811609
310
+ xyzguess y(opx) 0.128377 range 0.000 2.000
311
+ xyzguess f(opx) 0.01
312
+ xyzguess c(opx) 0.01
313
+ xyzguess Q(opx) 0.216433
314
+
315
+ xyzguess x(sa) 0.1
316
+ xyzguess y(sa) 0.3
317
+ xyzguess f(sa) 0.05
318
+ xyzguess Q(sa) 0.05 range -1 1
319
+
320
+ xyzguess x(cd) 0.480790
321
+ xyzguess h(cd) 0.427693
322
+
323
+ xyzguess x(st) 0.88
324
+ xyzguess f(st) 0.05
325
+ xyzguess t(st) 0.04
326
+
327
+ xyzguess x(chl) 0.551609
328
+ xyzguess y(chl) 0.328449
329
+ xyzguess f(chl) 0.418479
330
+ xyzguess QAl(chl) 0.253018 range -1.000 1.000
331
+ xyzguess Q1(chl) 0.123137 range -1.000 1.000
332
+ xyzguess Q4(chl) 0.121632 range -1.000 1.000
333
+
334
+ xyzguess x(ctd) 0.990857
335
+ xyzguess f(ctd) 0.01
336
+
337
+ xyzguess x(sp) 0.6
338
+ xyzguess y(sp) 0.95
339
+ xyzguess z(sp) 0.01
340
+
341
+ xyzguess x(mt) 0.85
342
+ xyzguess y(mt) 0.05
343
+ xyzguess z(mt) 0.01
344
+
345
+ xyzguess i(ilmm) 0.890349
346
+ xyzguess g(ilmm) 0.0148847
347
+ xyzguess Q(ilmm) 0.828083 range -1.000 1.000
348
+
349
+ xyzguess i(hemm) 0.380640
350
+ xyzguess g(hemm) 0.00296953
351
+ xyzguess Q(hemm) -0.0102634 range -0.300 0.300
352
+
353
+ xyzguess x(ilm) 0.80
354
+ xyzguess Q(ilm) 0.8 range -0.99 0.99
355
+
356
+ xyzguess x(hem) 0.20
357
+ xyzguess Q(hem) 0.8 range -0.99 0.99
358
+
359
+ xyzguess x(mt1) 0.683170
360
+ xyzguess Q(mt1) 0.727847
361
+ """,
362
+ "mp50MnNCKFMASHTO": """
363
+ % --------------------------------------------------------
364
+ % Starting guesses in MnNCKFMASHTO
365
+ % for g liq pl ksp ep ma mu pa bi opx sa cd st chl ctd sp mt ilmm hemm ilm hem mt1
366
+ % --------------------------------------------------------
367
+
368
+
369
+ xyzguess x(g) 0.824169
370
+ xyzguess z(g) 0.0317199
371
+ xyzguess m(g) 0.118530
372
+ xyzguess f(g) 0.0260643
373
+
374
+ xyzguess q(L) 0.173460
375
+ xyzguess fsp(L) 0.311414
376
+ xyzguess na(L) 0.443405
377
+ xyzguess an(L) 0.00913561
378
+ xyzguess ol(L) 0.00192499
379
+ xyzguess x(L) 0.746571
380
+ xyzguess h2o(L) 0.485792
381
+
382
+ xyzguess ca(pl) 0.377110
383
+ xyzguess k(pl) 0.0370401
384
+
385
+ xyzguess na(ksp) 0.227897
386
+ xyzguess ca(ksp) 0.0114380
387
+
388
+ xyzguess f(ep) 0.379418
389
+ xyzguess Q(ep) 0.346850 range 0.000 0.500
390
+
391
+ xyzguess x(ma) 0.6
392
+ xyzguess y(ma) 0.96
393
+ xyzguess f(ma) 0.001
394
+ xyzguess n(ma) 0.05
395
+ xyzguess c(ma) 0.94
396
+
397
+ xyzguess x(mu) 0.501982
398
+ xyzguess y(mu) 0.839614
399
+ xyzguess f(mu) 0.0172093
400
+ xyzguess n(mu) 0.144000
401
+ xyzguess c(mu) 0.00179401
402
+
403
+ xyzguess x(pa) 0.501982
404
+ xyzguess y(pa) 0.998030
405
+ xyzguess f(pa) 0.00182412
406
+ xyzguess n(pa) 0.945628
407
+ xyzguess c(pa) 0.0116010
408
+
409
+ xyzguess x(bi) 0.607873
410
+ xyzguess m(bi) 0.00462747
411
+ xyzguess y(bi) 0.264120
412
+ xyzguess f(bi) 0.132141
413
+ xyzguess t(bi) 0.140166
414
+ xyzguess Q(bi) 0.0850578
415
+
416
+ xyzguess x(opx) 0.811609
417
+ xyzguess m(opx) 0.001
418
+ xyzguess y(opx) 0.128377 range 0.000 2.000
419
+ xyzguess f(opx) 0.01
420
+ xyzguess c(opx) 0.01
421
+ xyzguess Q(opx) 0.216433
422
+
423
+ xyzguess x(sa) 0.1
424
+ xyzguess y(sa) 0.3
425
+ xyzguess f(sa) 0.05
426
+ xyzguess Q(sa) 0.05 range -1 1
427
+
428
+ xyzguess x(cd) 0.407167
429
+ xyzguess m(cd) 0.0213095
430
+ xyzguess h(cd) 0.597164
431
+
432
+ xyzguess x(st) 0.88
433
+ xyzguess m(st) 0.02
434
+ xyzguess f(st) 0.05
435
+ xyzguess t(st) 0.04
436
+
437
+ xyzguess x(chl) 0.551609
438
+ xyzguess y(chl) 0.328449
439
+ xyzguess f(chl) 0.418479
440
+ xyzguess m(chl) 0.00762984
441
+ xyzguess QAl(chl) 0.253018 range -1.000 1.000
442
+ xyzguess Q1(chl) 0.123137 range -1.000 1.000
443
+ xyzguess Q4(chl) 0.121632 range -1.000 1.000
444
+
445
+ xyzguess x(ctd) 0.990857
446
+ xyzguess m(ctd) 0.001
447
+ xyzguess f(ctd) 0.01
448
+
449
+ xyzguess x(sp) 0.6
450
+ xyzguess y(sp) 0.95
451
+ xyzguess z(sp) 0.01
452
+
453
+ xyzguess x(mt) 0.85
454
+ xyzguess y(mt) 0.05
455
+ xyzguess z(mt) 0.01
456
+
457
+ xyzguess i(ilmm) 0.858568
458
+ xyzguess g(ilmm) 0.0294376
459
+ xyzguess m(ilmm) 0.0323075
460
+ xyzguess Q(ilmm) 0.691587 range -1.000 1.000
461
+
462
+ xyzguess i(hemm) 0.380640
463
+ xyzguess g(hemm) 0.00296953
464
+ xyzguess m(hemm) 0.0305831
465
+ xyzguess Q(hemm) -0.0102634 range -0.300 0.300
466
+
467
+ xyzguess x(ilm) 0.80
468
+ xyzguess Q(ilm) 0.8 range -0.99 0.99
469
+
470
+ xyzguess x(hem) 0.20
471
+ xyzguess Q(hem) 0.8 range -0.99 0.99
472
+
473
+ xyzguess x(mt1) 0.632160
474
+ xyzguess Q(mt1) 0.564334
475
+ """,
476
+ }
477
+
478
+ metabasite_guesses = {
479
+ "mb50NCKFMASHTO": """
480
+ % -------------------
481
+ xyzguess q(L) 0.151242
482
+ xyzguess fsp(L) 0.248743
483
+ xyzguess na(L) 0.807843
484
+ xyzguess wo(L) 0.0684231
485
+ xyzguess sil(L) 0.0655694
486
+ xyzguess ol(L) 0.0316206
487
+ xyzguess x(L) 0.768652
488
+ xyzguess yan(L) 0.0528953
489
+ % -------------------
490
+ xyzguess x(hb) 0.413657
491
+ xyzguess y(hb) 0.605749
492
+ xyzguess z(hb) 0.403086
493
+ xyzguess a(hb) 0.378213
494
+ xyzguess k(hb) 0.0242954
495
+ xyzguess c(hb) 0.587566
496
+ xyzguess f(hb) 0.0973952
497
+ xyzguess t(hb) 0.0102669
498
+ xyzguess Q1(hb) -0.0247639 range -1.000 1.000
499
+ xyzguess Q2(hb) 0.146095 range -1.000 1.000
500
+ % -------------------
501
+ xyzguess x(act) 0.326601
502
+ xyzguess y(act) 0.179241
503
+ xyzguess z(act) 0.235348
504
+ xyzguess a(act) 0.0871526
505
+ xyzguess k(act) 0.0294549
506
+ xyzguess c(act) 0.755176
507
+ xyzguess f(act) 0.0417267
508
+ xyzguess t(act) 0.00311795
509
+ xyzguess Q1(act) -0.0378596 range -1.000 1.000
510
+ xyzguess Q2(act) 0.0801985 range -1.000 1.000
511
+ % -------------------
512
+ xyzguess x(gl) 0.429246
513
+ xyzguess y(gl) 0.754475
514
+ xyzguess z(gl) 0.884454
515
+ xyzguess a(gl) 0.0919829
516
+ xyzguess k(gl) 0.0275627
517
+ xyzguess c(gl) 0.113398
518
+ xyzguess f(gl) 0.100787
519
+ xyzguess t(gl) 0.00965433
520
+ xyzguess Q1(gl) -0.00997847 range -1.000 1.000
521
+ xyzguess Q2(gl) 0.118435 range -1.000 1.000
522
+ % -------------------
523
+ xyzguess x(aug) 0.471978
524
+ xyzguess y(aug) 0.0971420
525
+ xyzguess f(aug) 0.102416
526
+ xyzguess z(aug) 0.832303
527
+ xyzguess j(aug) 0.0361891
528
+ xyzguess Qfm(aug) 0.523857 range 0.000 2.000
529
+ xyzguess Qal(aug) 0.0920156
530
+ % -------------------
531
+ xyzguess x(dio) 0.331989
532
+ xyzguess j(dio) 0.222852
533
+ xyzguess f(dio) 0.327043
534
+ xyzguess Q(dio) 0.0512517 range -0.500 0.500
535
+ xyzguess Qaf(dio) 0.0122242 range -0.500 0.500 % less than f j
536
+ xyzguess Qfm(dio) -0.118441 range -0.500 0.500
537
+ % -------------------
538
+ xyzguess x(o) 0.300730
539
+ xyzguess j(o) 0.461012
540
+ xyzguess f(o) 0.377487
541
+ xyzguess Q(o) 0.336513 range -0.500 0.500
542
+ xyzguess Qaf(o) 0.113305 range -0.500 0.500 % less than f j
543
+ xyzguess Qfm(o) -0.0578233 range -0.500 0.500
544
+ % -------------------
545
+ xyzguess x(jd) 0.45
546
+ xyzguess j(jd) 0.86
547
+ xyzguess f(jd) 0.01
548
+ xyzguess Q(jd) 0.04 range -0.500 0.500
549
+ xyzguess Qaf(jd) 0.001 range -0.500 0.500 % less than f j
550
+ xyzguess Qfm(jd) 0.1 range -0.500 0.500
551
+ % -------------------
552
+ xyzguess x(opx) 0.539535
553
+ xyzguess y(opx) 0.0502431
554
+ xyzguess f(opx) 0.0226851
555
+ xyzguess c(opx) 0.0486599
556
+ xyzguess Q(opx) 0.387159
557
+ % -------------------
558
+ xyzguess x(g) 0.790028
559
+ xyzguess z(g) 0.354536
560
+ xyzguess f(g) 0.0339621
561
+ % -------------------
562
+ xyzguess x(ol) 0.15
563
+ % -------------------
564
+ xyzguess na(k4tr) 0.1
565
+ xyzguess ca(k4tr) 0.004
566
+ % -------------------
567
+ xyzguess ca(pl4tr) 0.557700
568
+ xyzguess k(pl4tr) 0.00702782
569
+ % -------------------
570
+ xyzguess ca(abc) 0.001
571
+ % -------------------
572
+ xyzguess x(sp) 0.4
573
+ xyzguess y(sp) 0.95
574
+ xyzguess z(sp) 0.01
575
+ % -------------------
576
+ xyzguess x(mt) 0.85
577
+ xyzguess y(mt) 0.09
578
+ xyzguess z(mt) 0.14
579
+ % -------------------
580
+ xyzguess x(ilm) 0.846768
581
+ xyzguess Q(ilm) 0.72 range -0.990 0.990
582
+ % -------------------
583
+ xyzguess x(hem) 0.1
584
+ xyzguess Q(hem) 0.01 range -0.990 0.990
585
+ % -------------------
586
+ xyzguess i(ilmm) 0.843297
587
+ xyzguess g(ilmm) 0.0194365
588
+ xyzguess Q(ilmm) 0.771192 range -0.990 0.990
589
+ % -------------------
590
+ xyzguess i(hemm) 0.489714
591
+ xyzguess g(hemm) 0.0151609
592
+ xyzguess Q(hemm) 0.000215607 range -0.050 0.050
593
+ % -------------------
594
+ xyzguess f(ep) 0.189427
595
+ xyzguess Q(ep) 0.182107 range 0.000 0.500
596
+ % -------------------
597
+ xyzguess x(bi) 0.371956
598
+ xyzguess y(bi) 0.0260159
599
+ xyzguess f(bi) 0.0131769
600
+ xyzguess t(bi) 0.0519677
601
+ xyzguess Q(bi) 0.173733 range -1.0 1.0
602
+ % -------------------
603
+ xyzguess x(mu) 0.275719
604
+ xyzguess y(mu) 0.334730
605
+ xyzguess f(mu) 0.0164856
606
+ xyzguess n(mu) 0.00226622
607
+ xyzguess c(mu) 3.36760e-5
608
+ % -------------------
609
+ xyzguess x(chl) 0.275349
610
+ xyzguess y(chl) 0.451480
611
+ xyzguess f(chl) 0.123838
612
+ xyzguess QAl(chl) 0.424591 range -1.000 1.000
613
+ xyzguess Q1(chl) 0.0859470 range -1.000 1.000
614
+ xyzguess Q4(chl) 0.0245983 range -1.000 1.000
615
+ % -------------------
616
+ """
617
+ }
618
+
619
+ igneous_guesses = {
620
+ "ig50NCKFMASHTOCr": """
621
+ % silicate melt, hydrous (NCKFMASHTOCr)
622
+ xyzguess wo(L) 0.107216
623
+ xyzguess sl(L) 0.0873506
624
+ xyzguess fo(L) 0.0142023
625
+ xyzguess fa(L) 0.0109878
626
+ xyzguess jd(L) 0.151907
627
+ xyzguess hm(L) 0.00154624
628
+ xyzguess ek(L) 9.81910e-6
629
+ xyzguess ti(L) 0.00413534
630
+ xyzguess kj(L) 0.0368694
631
+ xyzguess yct(L) 0.0885231
632
+ xyzguess h2o(L) 0.219727
633
+
634
+ % aqueous fluid with dissolved silicates
635
+ xyzguess wo(fl) 0.000103865
636
+ xyzguess sl(fl) 5.87807e-5
637
+ xyzguess fo(fl) 1.41812e-8
638
+ xyzguess fa(fl) 3.11791e-8
639
+ xyzguess jd(fl) 0.000862050
640
+ xyzguess hm(fl) 0.000159068
641
+ xyzguess ek(fl) 3.29610e-7
642
+ xyzguess ti(fl) 0.000162396
643
+ xyzguess kj(fl) 0.00562408
644
+ xyzguess h2o(fl) 0.985936
645
+
646
+ % plagioclase
647
+ xyzguess ca(pl4tr) 0.8
648
+ xyzguess k(pl4tr) 0.0116338
649
+
650
+ % olivine
651
+ xyzguess x(ol) 0.102434
652
+ xyzguess c(ol) 0.00275804
653
+ xyzguess Q(ol) 0.000156353
654
+
655
+ % orthopyroxene
656
+ xyzguess x(opx) 0.0956777
657
+ xyzguess y(opx) 0.182193 range 0.000 2.000
658
+ xyzguess c(opx) 0.0489271
659
+ xyzguess Q(opx) -0.0475598 range -1.000 1.000
660
+ xyzguess f(opx) 0.0177886
661
+ xyzguess t(opx) 0.00823030
662
+ xyzguess cr(opx) 0.0205952
663
+ xyzguess j(opx) 0.00906326
664
+
665
+ % clinopyroxene
666
+ xyzguess x(cpx) 0.0964208
667
+ xyzguess y(cpx) 0.0825558 range 0.000 2.000
668
+ xyzguess o(cpx) 0.219892
669
+ xyzguess n(cpx) 0.118338
670
+ xyzguess Q(cpx) -0.0282419 range -1.000 1.000
671
+ xyzguess f(cpx) 0.0209603
672
+ xyzguess cr(cpx) 0.0154784
673
+ xyzguess t(cpx) 0.0127859
674
+ xyzguess k(cpx) 0.00527429
675
+
676
+ % pigeonite
677
+ xyzguess x(pig) 0.124
678
+ xyzguess y(pig) 0.112 range 0.000 2.000
679
+ xyzguess o(pig) 0.888
680
+ xyzguess n(pig) 0.028
681
+ xyzguess Q(pig) -0.0115 range -1.000 1.000
682
+ xyzguess f(pig) 0.004
683
+ xyzguess cr(pig) 0.001
684
+ xyzguess t(pig) 0.148
685
+ xyzguess k(pig) 0.001
686
+
687
+ % spinel
688
+ xyzguess x(spn) 0.144990
689
+ xyzguess y(spn) 0.0139965
690
+ xyzguess c(spn) 0.0451070
691
+ xyzguess t(spn) 0.0110937
692
+ xyzguess Q1(spn) 0.503697
693
+ xyzguess Q2(spn) 0.0807768
694
+ xyzguess Q3(spn) 0.0218537
695
+
696
+ % K-feldspar
697
+ xyzguess na(k4tr) 0.1
698
+ xyzguess ca(k4tr) 0.004
699
+
700
+ % muscovite
701
+ xyzguess x(mu) 0.275719
702
+ xyzguess y(mu) 0.334730
703
+ xyzguess f(mu) 0.0164856
704
+ xyzguess n(mu) 0.00226622
705
+ xyzguess c(mu) 3.36760e-5
706
+
707
+ % biotite
708
+ xyzguess x(bi) 0.457528
709
+ xyzguess y(bi) 0.0772161
710
+ xyzguess f(bi) 0.0158764
711
+ xyzguess t(bi) 0.119336
712
+ xyzguess Q(bi) 0.228603
713
+
714
+ % garnet
715
+ xyzguess x(g) 0.455851
716
+ xyzguess c(g) 0.286243
717
+ xyzguess f(g) 0.00253871
718
+ xyzguess cr(g) 0.000841005
719
+ xyzguess t(g) 0.0113394
720
+
721
+ % epidote
722
+ xyzguess f(ep) 0.189427
723
+ xyzguess Q(ep) 0.182107 range 0.000 0.500
724
+
725
+ % cordierite
726
+ xyzguess x(cd) 0.3
727
+ xyzguess h(cd) 0.7
728
+
729
+ % Al-spinel
730
+ xyzguess x(spn) 0.14499
731
+ xyzguess y(spn) 0.01398
732
+ xyzguess c(spn) 0.04504
733
+ xyzguess t(spn) 0.01114
734
+ xyzguess Q1(spn) 0.50372 range -1 1
735
+ xyzguess Q2(spn) 0.08077 range -1 1
736
+ xyzguess Q3(spn) 0.02183 range -1 1
737
+
738
+ % Cr-spinel
739
+ xyzguess x(cm) 0.2
740
+ xyzguess y(cm) 0.1
741
+ xyzguess c(cm) 0.8
742
+ xyzguess t(cm) 0.05
743
+ xyzguess Q1(cm) 0.05 range -1 1
744
+ xyzguess Q2(cm) 0.05 range -1 1
745
+ xyzguess Q3(cm) 0.05 range -1 1
746
+
747
+ % magnetite
748
+ xyzguess x(mt) 0.8
749
+ xyzguess y(mt) 0.55
750
+ xyzguess c(mt) 0.2
751
+ xyzguess t(mt) 0.01
752
+ xyzguess Q1(mt) 0.33 range -1 1
753
+ xyzguess Q2(mt) 0.14 range -1 1
754
+ xyzguess Q3(mt) 0.25 range -1 1
755
+
756
+ % hornblende
757
+ xyzguess x(hb) 0.355436
758
+ xyzguess y(hb) 0.393748
759
+ xyzguess z(hb) 0.0255955
760
+ xyzguess a(hb) 0.476446
761
+ xyzguess k(hb) 0.0647451
762
+ xyzguess c(hb) 0.924162
763
+ xyzguess f(hb) 0.103286
764
+ xyzguess t(hb) 0.0360617
765
+ xyzguess Q1(hb) -0.0186478 range -1.000 1.000
766
+ xyzguess Q2(hb) 0.111970 range -1.000 1.000
767
+
768
+ % ilmenite
769
+ xyzguess x(ilm) 0.913364
770
+ xyzguess Q(ilm) 0.627896 range -0.990 0.990
771
+
772
+ % --------------------------------------------------------
773
+ """,
774
+ "ig50NCKFMASTOCr": """
775
+ % silicate melt, dry (NCKFMASTOCr)
776
+ xyzguess wo(L) 0.228033
777
+ xyzguess sl(L) 0.123908
778
+ xyzguess fo(L) 0.383275
779
+ xyzguess fa(L) 0.0784050
780
+ xyzguess jd(L) 0.0408634
781
+ xyzguess hm(L) 0.0156940
782
+ xyzguess ek(L) 0.0178215
783
+ xyzguess ti(L) 0.00817432
784
+ xyzguess kj(L) 0.00163650
785
+ xyzguess yct(L) 0.000695507
786
+
787
+ % aqueous fluid with dissolved silicates
788
+ xyzguess wo(fl) 0.000103865
789
+ xyzguess sl(fl) 5.87807e-5
790
+ xyzguess fo(fl) 1.41812e-8
791
+ xyzguess fa(fl) 3.11791e-8
792
+ xyzguess jd(fl) 0.000862050
793
+ xyzguess hm(fl) 0.000159068
794
+ xyzguess ek(fl) 3.29610e-7
795
+ xyzguess ti(fl) 0.000162396
796
+ xyzguess kj(fl) 0.00562408
797
+ xyzguess h2o(fl) 0.985936
798
+
799
+ % plagioclase
800
+ xyzguess ca(pl4tr) 0.8
801
+ xyzguess k(pl4tr) 0.0116338
802
+
803
+ % olivine
804
+ xyzguess x(ol) 0.102434
805
+ xyzguess c(ol) 0.00275804
806
+ xyzguess Q(ol) 0.000156353
807
+
808
+ % orthopyroxene
809
+ xyzguess x(opx) 0.0956777
810
+ xyzguess y(opx) 0.182193 range 0.000 2.000
811
+ xyzguess c(opx) 0.0489271
812
+ xyzguess Q(opx) -0.0475598 range -1.000 1.000
813
+ xyzguess f(opx) 0.0177886
814
+ xyzguess t(opx) 0.00823030
815
+ xyzguess cr(opx) 0.0205952
816
+ xyzguess j(opx) 0.00906326
817
+
818
+ % clinopyroxene
819
+ xyzguess x(cpx) 0.0964208
820
+ xyzguess y(cpx) 0.0825558 range 0.000 2.000
821
+ xyzguess o(cpx) 0.219892
822
+ xyzguess n(cpx) 0.118338
823
+ xyzguess Q(cpx) -0.0282419 range -1.000 1.000
824
+ xyzguess f(cpx) 0.0209603
825
+ xyzguess cr(cpx) 0.0154784
826
+ xyzguess t(cpx) 0.0127859
827
+ xyzguess k(cpx) 0.00527429
828
+
829
+ % pigeonite
830
+ xyzguess x(pig) 0.124
831
+ xyzguess y(pig) 0.112 range 0.000 2.000
832
+ xyzguess o(pig) 0.888
833
+ xyzguess n(pig) 0.028
834
+ xyzguess Q(pig) -0.0115 range -1.000 1.000
835
+ xyzguess f(pig) 0.004
836
+ xyzguess cr(pig) 0.001
837
+ xyzguess t(pig) 0.148
838
+ xyzguess k(pig) 0.001
839
+
840
+ % spinel
841
+ xyzguess x(spn) 0.144990
842
+ xyzguess y(spn) 0.0139965
843
+ xyzguess c(spn) 0.0451070
844
+ xyzguess t(spn) 0.0110937
845
+ xyzguess Q1(spn) 0.503697
846
+ xyzguess Q2(spn) 0.0807768
847
+ xyzguess Q3(spn) 0.0218537
848
+
849
+ % K-feldspar
850
+ xyzguess na(k4tr) 0.1
851
+ xyzguess ca(k4tr) 0.004
852
+
853
+ % muscovite
854
+ xyzguess x(mu) 0.275719
855
+ xyzguess y(mu) 0.334730
856
+ xyzguess f(mu) 0.0164856
857
+ xyzguess n(mu) 0.00226622
858
+ xyzguess c(mu) 3.36760e-5
859
+
860
+ % biotite
861
+ xyzguess x(bi) 0.457528
862
+ xyzguess y(bi) 0.0772161
863
+ xyzguess f(bi) 0.0158764
864
+ xyzguess t(bi) 0.119336
865
+ xyzguess Q(bi) 0.228603
866
+
867
+ % garnet
868
+ xyzguess x(g) 0.455851
869
+ xyzguess c(g) 0.286243
870
+ xyzguess f(g) 0.00253871
871
+ xyzguess cr(g) 0.000841005
872
+ xyzguess t(g) 0.0113394
873
+
874
+ % epidote
875
+ xyzguess f(ep) 0.189427
876
+ xyzguess Q(ep) 0.182107 range 0.000 0.500
877
+
878
+ % cordierite
879
+ xyzguess x(cd) 0.3
880
+ xyzguess h(cd) 0.7
881
+
882
+ % Al-spinel
883
+ xyzguess x(spn) 0.14499
884
+ xyzguess y(spn) 0.01398
885
+ xyzguess c(spn) 0.04504
886
+ xyzguess t(spn) 0.01114
887
+ xyzguess Q1(spn) 0.50372 range -1 1
888
+ xyzguess Q2(spn) 0.08077 range -1 1
889
+ xyzguess Q3(spn) 0.02183 range -1 1
890
+
891
+ % Cr-spinel
892
+ xyzguess x(cm) 0.2
893
+ xyzguess y(cm) 0.1
894
+ xyzguess c(cm) 0.8
895
+ xyzguess t(cm) 0.05
896
+ xyzguess Q1(cm) 0.05 range -1 1
897
+ xyzguess Q2(cm) 0.05 range -1 1
898
+ xyzguess Q3(cm) 0.05 range -1 1
899
+
900
+ % magnetite
901
+ xyzguess x(mt) 0.8
902
+ xyzguess y(mt) 0.55
903
+ xyzguess c(mt) 0.2
904
+ xyzguess t(mt) 0.01
905
+ xyzguess Q1(mt) 0.33 range -1 1
906
+ xyzguess Q2(mt) 0.14 range -1 1
907
+ xyzguess Q3(mt) 0.25 range -1 1
908
+
909
+ % hornblende
910
+ xyzguess x(hb) 0.355436
911
+ xyzguess y(hb) 0.393748
912
+ xyzguess z(hb) 0.0255955
913
+ xyzguess a(hb) 0.476446
914
+ xyzguess k(hb) 0.0647451
915
+ xyzguess c(hb) 0.924162
916
+ xyzguess f(hb) 0.103286
917
+ xyzguess t(hb) 0.0360617
918
+ xyzguess Q1(hb) -0.0186478 range -1.000 1.000
919
+ xyzguess Q2(hb) 0.111970 range -1.000 1.000
920
+
921
+ % ilmenite
922
+ xyzguess x(ilm) 0.913364
923
+ xyzguess Q(ilm) 0.627896 range -0.990 0.990
924
+
925
+ % --------------------------------------------------------
926
+ """,
927
+ }
928
+
929
+ tcprj_tmpl = """
930
+ % ==================================================================
931
+ % Scriptfile for $project
932
+ %
933
+ % Use "%" for commenting (nothing is read between % and the line ending).
934
+ % No lines are read after the "*" character.
935
+ % ==================================================================
936
+
937
+ axfile $system
938
+
939
+ autoexit
940
+
941
+ % ============
942
+ % which phases
943
+ % ============
944
+
945
+ inexcess no
946
+ omit no
947
+ tozero no
948
+
949
+ % ================
950
+ % which conditions
951
+ % ================
952
+
953
+ diagramPT 2 10 350 800
954
+
955
+ % ================
956
+ % psbuilder blocks
957
+ % ================
958
+
959
+ %{PSBCALC-BEGIN}
960
+ calcP 11 15 0.08
961
+ calcT 370 425
962
+ calctatp yes
963
+ with bi ab pa sph mu g ep
964
+ zeromodeisopleth ab
965
+ %{PSBCALC-END}
966
+
967
+ % =====================
968
+ % pseudosection-related
969
+ % =====================
970
+
971
+ pseudosection
972
+
973
+ %{PSBBULK-BEGIN}
974
+ bulk H2O SiO2 Al2O3 CaO MgO FeOt K2O Na2O TiO2 MnO O
975
+ bulk 100.00 71.13 11.61 1.39 4.65 5.78 2.68 1.99 0.67 0.10 0.01
976
+ %{PSBBULK-END}
977
+
978
+ % ============
979
+ % set up x-eos
980
+ % ============
981
+ $samecoding
982
+
983
+ % ==========================
984
+ % ptbuilder starting guesses
985
+ % ==========================
986
+
987
+ %{PSBGUESS-BEGIN}
988
+ %{PSBGUESS-END}
989
+ $guesses
990
+
991
+ *
992
+ """