ararpy 0.1.12__py3-none-any.whl → 0.1.14__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.
- ararpy/argon_diffusion_simulator/__init__.py +12 -0
- ararpy/argon_diffusion_simulator/main.py +542 -0
- ararpy/calc/arr.py +2 -1
- ararpy/calc/basic.py +36 -14
- ararpy/calc/corr.py +7 -34
- ararpy/calc/plot.py +3 -3
- ararpy/calc/raw_funcs.py +4 -2
- ararpy/calc/regression.py +3 -6
- ararpy/calc/spectra.py +3 -1
- ararpy/files/calc_file.py +1 -1
- ararpy/files/raw_file.py +84 -82
- ararpy/smp/EXPORT_TO_PDF_DATA_PROPERTIES.py +95 -0
- ararpy/smp/basic.py +6 -5
- ararpy/smp/calculation.py +2 -2
- ararpy/smp/corr.py +107 -77
- ararpy/smp/diffusion_funcs.py +282 -123
- ararpy/smp/export.py +927 -264
- ararpy/smp/json.py +7 -0
- ararpy/smp/plots.py +10 -8
- ararpy/smp/raw.py +9 -2
- ararpy/smp/sample.py +32 -23
- {ararpy-0.1.12.dist-info → ararpy-0.1.14.dist-info}/METADATA +10 -2
- {ararpy-0.1.12.dist-info → ararpy-0.1.14.dist-info}/RECORD +26 -23
- {ararpy-0.1.12.dist-info → ararpy-0.1.14.dist-info}/WHEEL +1 -1
- {ararpy-0.1.12.dist-info → ararpy-0.1.14.dist-info}/LICENSE +0 -0
- {ararpy-0.1.12.dist-info → ararpy-0.1.14.dist-info}/top_level.txt +0 -0
ararpy/smp/corr.py
CHANGED
|
@@ -20,54 +20,53 @@ from .sample import Sample
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
# =======================
|
|
23
|
-
# Corr
|
|
23
|
+
# Corr Gain
|
|
24
24
|
# =======================
|
|
25
|
-
def
|
|
25
|
+
def corr_gain(sample: Sample):
|
|
26
26
|
"""Blank Correction"""
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
# sample.BlankCorrected = copy.deepcopy(sample.SampleIntercept)
|
|
30
|
-
# sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
|
|
31
|
-
# return
|
|
32
|
-
blank_corrected = [[]] * 10
|
|
27
|
+
corrGain = True
|
|
28
|
+
gain_corrected = np.zeros([10, len(sample.SequenceName)])
|
|
33
29
|
try:
|
|
34
30
|
for i in range(5):
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
f, sf = np.array(sample.TotalParam[126 + i * 2:128 + i * 2])
|
|
32
|
+
sf = f * sf / 100
|
|
33
|
+
gain_corrected[i * 2:2 + i * 2] = calc.corr.gain(*sample.SampleIntercept[i * 2:2 + i * 2], f, sf)
|
|
37
34
|
except Exception as e:
|
|
35
|
+
print(f"Gain correction failed")
|
|
38
36
|
print(traceback.format_exc())
|
|
39
|
-
|
|
37
|
+
return
|
|
40
38
|
for i in range(0, 10, 2):
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
sample.BlankCorrected = blank_corrected
|
|
45
|
-
sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
|
|
39
|
+
gain_corrected[i] = [gain_corrected[i][index] if corrGain else j for index, j in enumerate(sample.SampleIntercept[i])]
|
|
40
|
+
gain_corrected[i + 1] = [gain_corrected[i + 1][index] if corrGain else j for index, j in enumerate(sample.SampleIntercept[i + 1])]
|
|
41
|
+
sample.CorrectedValues = copy.deepcopy(gain_corrected)
|
|
46
42
|
|
|
47
43
|
|
|
48
44
|
# =======================
|
|
49
45
|
# Corr Blank
|
|
50
46
|
# =======================
|
|
51
|
-
def
|
|
47
|
+
def corr_blank(sample: Sample):
|
|
52
48
|
"""Blank Correction"""
|
|
53
|
-
|
|
54
|
-
# if not corrBlank:
|
|
55
|
-
# sample.BlankCorrected = copy.deepcopy(sample.SampleIntercept)
|
|
56
|
-
# sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
|
|
57
|
-
# return
|
|
58
|
-
gain_corrected = [[]] * 10
|
|
49
|
+
blank_corrected = np.zeros([10, len(sample.SequenceName)])
|
|
59
50
|
try:
|
|
60
51
|
for i in range(5):
|
|
61
|
-
|
|
62
|
-
|
|
52
|
+
b, sb = copy.deepcopy(sample.BlankIntercept[i * 2: i * 2 + 2])
|
|
53
|
+
f, sf = np.array(sample.TotalParam[126 + i * 2:128 + i * 2])
|
|
54
|
+
sf = f * sf / 100
|
|
55
|
+
_ = calc.corr.gain(*sample.BlankIntercept[i * 2:2 + i * 2], f, sf)
|
|
56
|
+
for index in range(len(sample.BlankIntercept[i * 2])):
|
|
57
|
+
if sample.TotalParam[111][index]: # use same parameters to correct blank intercepts
|
|
58
|
+
b[index] = _[0][index]
|
|
59
|
+
sb[index] = _[1][index]
|
|
60
|
+
blank_corrected[i * 2:2 + i * 2] = calc.corr.blank(
|
|
61
|
+
*sample.CorrectedValues[i * 2:2 + i * 2], b, sb)
|
|
63
62
|
except Exception as e:
|
|
64
|
-
print(f"Gain correction failed")
|
|
65
63
|
print(traceback.format_exc())
|
|
66
|
-
|
|
64
|
+
raise ValueError('Blank correction error')
|
|
67
65
|
for i in range(0, 10, 2):
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
blank_corrected[i] = [blank_corrected[i][index] if sample.TotalParam[102][index] else j for index, j in enumerate(sample.CorrectedValues[i])]
|
|
67
|
+
blank_corrected[i + 1] = [blank_corrected[i + 1][index] if sample.TotalParam[102][index] else j for index, j in enumerate(sample.CorrectedValues[i + 1])]
|
|
68
|
+
blank_corrected[i] = [0 if j < 0 and sample.TotalParam[101][index] else j for index, j in enumerate(blank_corrected[i])]
|
|
69
|
+
sample.BlankCorrected = blank_corrected
|
|
71
70
|
sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
|
|
72
71
|
|
|
73
72
|
|
|
@@ -82,7 +81,7 @@ def corr_massdiscr(sample: Sample):
|
|
|
82
81
|
sample.CorrectedValues = copy.deepcopy(sample.MassDiscrCorrected)
|
|
83
82
|
return
|
|
84
83
|
MASS = sample.TotalParam[71:81]
|
|
85
|
-
mdf_corrected = [
|
|
84
|
+
mdf_corrected = np.zeros([10, len(sample.SequenceName)])
|
|
86
85
|
try:
|
|
87
86
|
for i in range(5):
|
|
88
87
|
if len(sample.BlankCorrected[i * 2:2 + i * 2]) == 0:
|
|
@@ -111,7 +110,7 @@ def corr_decay(sample: Sample):
|
|
|
111
110
|
-------
|
|
112
111
|
|
|
113
112
|
"""
|
|
114
|
-
decay_corrected = [
|
|
113
|
+
decay_corrected = np.zeros([10, len(sample.SequenceName)])
|
|
115
114
|
try:
|
|
116
115
|
irradiation_cycles = [list(filter(None, re.split(r'[DS]', each_step))) for each_step in sample.TotalParam[27]]
|
|
117
116
|
t1 = [re.findall(r"\d+", i) for i in sample.TotalParam[31]] # t1: experimental times
|
|
@@ -265,7 +264,6 @@ def calc_degas_cl(sample: Sample):
|
|
|
265
264
|
# 38ArCl
|
|
266
265
|
ar38cl = [[], []]
|
|
267
266
|
ar38cl[1] = [calc.err.mul((ar36cl[0][i], ar36cl[1][i]), (v3[i], s3[i])) for i in range(len(ar36cl[0]))]
|
|
268
|
-
ar38cl[0] = [ar36cl[0][i] * v3[i] for i in range(len(ar36cl[0]))]
|
|
269
267
|
|
|
270
268
|
# Negative number set to zero
|
|
271
269
|
ar36cl[0] = [0 if i < 0 and set_negative_zero else i for i in ar36cl[0]]
|
|
@@ -273,11 +271,13 @@ def calc_degas_cl(sample: Sample):
|
|
|
273
271
|
ar36cl[0] = [0 if ar36acl[0][i] - item < 0 and set_negative_zero else item
|
|
274
272
|
for i, item in enumerate(ar36cl[0])]
|
|
275
273
|
|
|
274
|
+
ar38cl[0] = [ar36cl[0][i] * v3[i] for i in range(len(ar36cl[0]))]
|
|
275
|
+
|
|
276
276
|
except Exception as e:
|
|
277
277
|
print('Error in corr Cl: {}, lines: {}'.format(e, e.__traceback__.tb_lineno))
|
|
278
278
|
n = len(ar36acl[0])
|
|
279
|
-
ar36cl = [
|
|
280
|
-
ar38cl = [
|
|
279
|
+
ar36cl = np.zeros([2, n])
|
|
280
|
+
ar38cl = np.zeros([2, n])
|
|
281
281
|
|
|
282
282
|
# sample.DegasValues[6:8] = ar36cl
|
|
283
283
|
# sample.DegasValues[10:12] = ar38cl
|
|
@@ -357,6 +357,57 @@ def calc_degas_r(sample: Sample):
|
|
|
357
357
|
# =======================
|
|
358
358
|
# Calc ratio
|
|
359
359
|
# =======================
|
|
360
|
+
def calc_nor_inv_isochrons(sample: Sample):
|
|
361
|
+
n = len(sample.SequenceName)
|
|
362
|
+
try:
|
|
363
|
+
isochron_1 = calc.isochron.get_data(*sample.DegasValues[20:22], *calc.arr.sub(
|
|
364
|
+
sample.CorrectedValues[8:10], sample.DegasValues[30:32]), *sample.DegasValues[0:2])
|
|
365
|
+
isochron_2 = calc.isochron.get_data(*sample.DegasValues[20:22], *sample.DegasValues[0:2], *calc.arr.sub(
|
|
366
|
+
sample.CorrectedValues[8:10], sample.DegasValues[30:32]))
|
|
367
|
+
except:
|
|
368
|
+
return np.zeros([5, n]), np.zeros([5, n])
|
|
369
|
+
else:
|
|
370
|
+
return isochron_1, isochron_2
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def calc_cl_isochrons(sample: Sample):
|
|
374
|
+
n = len(sample.SequenceName)
|
|
375
|
+
try:
|
|
376
|
+
isochron_3 = calc.isochron.get_data(
|
|
377
|
+
*sample.DegasValues[20:22], *sample.DegasValues[24:26], *sample.DegasValues[10:12])
|
|
378
|
+
isochron_4 = calc.isochron.get_data(
|
|
379
|
+
*sample.DegasValues[20:22], *sample.DegasValues[10:12], *sample.DegasValues[24:26])
|
|
380
|
+
isochron_5 = calc.isochron.get_data(
|
|
381
|
+
*sample.DegasValues[10:12], *sample.DegasValues[24:26], *sample.DegasValues[20:22])
|
|
382
|
+
except:
|
|
383
|
+
return np.zeros([5, n]), np.zeros([5, n]), np.zeros([5, n])
|
|
384
|
+
else:
|
|
385
|
+
return isochron_3, isochron_4, isochron_5
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
def calc_3D_isochrons(sample: Sample):
|
|
389
|
+
n = len(sample.SequenceName)
|
|
390
|
+
try:
|
|
391
|
+
# === Ar values ===
|
|
392
|
+
# 3D ratio, 36Ar(a+cl)/40Ar(a+r), 38Ar(a+cl)/40Ar(a+r), 39Ar(k)/40Ar(a+r),
|
|
393
|
+
ar40ar = calc.arr.sub(sample.CorrectedValues[8:10], sample.DegasValues[30:32])
|
|
394
|
+
# 36Ar deduct Ca, that is sum of 36Ara and 36ArCl (and also 36Arc)
|
|
395
|
+
ar36acl = calc.arr.sub(sample.CorrectedValues[0:2], sample.DegasValues[4:6])
|
|
396
|
+
# 38Ar deduct K and Ca, that is sum of 38Ara and 38ArCl (and also 38Arc)
|
|
397
|
+
ar38acl = calc.arr.sub(calc.arr.sub(sample.CorrectedValues[4:6], sample.DegasValues[16:18]),
|
|
398
|
+
sample.DegasValues[18:20])
|
|
399
|
+
# 38ArCl
|
|
400
|
+
ar38cl = sample.DegasValues[10:12]
|
|
401
|
+
# 39ArK
|
|
402
|
+
ar39k = sample.DegasValues[20:22]
|
|
403
|
+
# isochron_6 = calc.isochron.get_3d_data(*ar36acl, *ar38acl, *ar40ar, *ar39k)
|
|
404
|
+
isochron_6 = calc.isochron.get_3d_data(*ar36acl, *ar38acl, *ar39k, *ar40ar) # Points on the plot will be more disperse than the above
|
|
405
|
+
except:
|
|
406
|
+
return np.zeros([9, n])
|
|
407
|
+
else:
|
|
408
|
+
return isochron_6
|
|
409
|
+
|
|
410
|
+
|
|
360
411
|
def calc_ratio(sample: Sample, monte_carlo: bool = False):
|
|
361
412
|
""" Calculate isochron ratio data, 40Arr/39ArK, Ar40r percentage,
|
|
362
413
|
Ar39K released percentage, Ca/K
|
|
@@ -372,57 +423,36 @@ def calc_ratio(sample: Sample, monte_carlo: bool = False):
|
|
|
372
423
|
ar40r_percent = [item / sample.CorrectedValues[8][index] * 100 if sample.CorrectedValues[8][index] != 0 else 0
|
|
373
424
|
for index, item in enumerate(sample.DegasValues[24])]
|
|
374
425
|
sum_ar39k = sum(sample.DegasValues[20])
|
|
375
|
-
ar39k_percent = [item / sum_ar39k * 100 if sum_ar39k != 0 else 0 for item in sample.DegasValues[20]]
|
|
376
426
|
sum_ar36a = sum(sample.DegasValues[ 0])
|
|
377
|
-
ar36a_percent = [item / sum_ar36a * 100 if sum_ar36a != 0 else 0 for item in sample.DegasValues[ 0]]
|
|
378
|
-
ar40rar39k = calc.arr.mul_factor(
|
|
379
|
-
sample.DegasValues[24:26], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False),
|
|
380
|
-
isRelative=False)
|
|
381
|
-
ar40aar36a = calc.arr.mul_factor(
|
|
382
|
-
sample.DegasValues[26:28], calc.arr.rec_factor(sample.DegasValues[0:2], isRelative=False),
|
|
383
|
-
isRelative=False)
|
|
384
427
|
CaK = calc.arr.mul_factor(calc.arr.mul_factor(
|
|
385
428
|
sample.DegasValues[8:10], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False)),
|
|
386
429
|
calc.arr.rec_factor(sample.TotalParam[20:22], isRelative=True))
|
|
387
|
-
isochron_1 = calc.isochron.get_data(*sample.DegasValues[20:22], *calc.arr.sub(
|
|
388
|
-
sample.CorrectedValues[8:10], sample.DegasValues[30:32]), *sample.DegasValues[0:2])
|
|
389
|
-
isochron_2 = calc.isochron.get_data(*sample.DegasValues[20:22], *sample.DegasValues[0:2], *calc.arr.sub(
|
|
390
|
-
sample.CorrectedValues[8:10], sample.DegasValues[30:32]))
|
|
391
|
-
isochron_3 = calc.isochron.get_data(
|
|
392
|
-
*sample.DegasValues[20:22], *sample.DegasValues[24:26], *sample.DegasValues[10:12])
|
|
393
|
-
isochron_4 = calc.isochron.get_data(
|
|
394
|
-
*sample.DegasValues[20:22], *sample.DegasValues[10:12], *sample.DegasValues[24:26])
|
|
395
|
-
isochron_5 = calc.isochron.get_data(
|
|
396
|
-
*sample.DegasValues[10:12], *sample.DegasValues[24:26], *sample.DegasValues[20:22])
|
|
397
430
|
|
|
398
431
|
# assignation
|
|
399
|
-
|
|
432
|
+
if sample.Info.sample.type == "Air":
|
|
433
|
+
ar40aar36a = calc.arr.mul_factor(
|
|
434
|
+
sample.DegasValues[26:28], calc.arr.rec_factor(sample.DegasValues[0:2], isRelative=False),
|
|
435
|
+
isRelative=False)
|
|
436
|
+
ar36a_percent = [item / sum_ar36a * 100 if sum_ar36a != 0 else 0 for item in sample.DegasValues[0]]
|
|
437
|
+
sample.ApparentAgeValues[0:2] = ar40aar36a
|
|
438
|
+
sample.ApparentAgeValues[7] = ar36a_percent
|
|
439
|
+
else:
|
|
440
|
+
ar40rar39k = calc.arr.mul_factor(
|
|
441
|
+
sample.DegasValues[24:26], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False),
|
|
442
|
+
isRelative=False)
|
|
443
|
+
ar39k_percent = [item / sum_ar39k * 100 if sum_ar39k != 0 else 0 for item in sample.DegasValues[20]]
|
|
444
|
+
sample.ApparentAgeValues[0:2] = ar40rar39k
|
|
445
|
+
sample.ApparentAgeValues[7] = ar39k_percent
|
|
446
|
+
|
|
400
447
|
sample.ApparentAgeValues[6] = ar40r_percent
|
|
401
|
-
sample.
|
|
402
|
-
|
|
403
|
-
sample.IsochronValues[0:5] =
|
|
404
|
-
sample.IsochronValues[
|
|
405
|
-
|
|
406
|
-
sample.IsochronValues[18:23] = isochron_4
|
|
407
|
-
sample.IsochronValues[24:29] = isochron_5
|
|
448
|
+
sample.PublishValues[7:11] = copy.deepcopy([*sample.ApparentAgeValues[6:8], *CaK])
|
|
449
|
+
|
|
450
|
+
sample.IsochronValues[0:5], sample.IsochronValues[6:11] = calc_nor_inv_isochrons(sample)
|
|
451
|
+
sample.IsochronValues[12:17], sample.IsochronValues[18:23], sample.IsochronValues[24:29] = \
|
|
452
|
+
calc_cl_isochrons(sample)
|
|
408
453
|
|
|
409
454
|
# === Cl-Atm-Correlation Plot ===
|
|
410
|
-
|
|
411
|
-
# 3D ratio, 36Ar(a+cl)/40Ar(a+r), 38Ar(a+cl)/40Ar(a+r), 39Ar(k)/40Ar(a+r),
|
|
412
|
-
ar40ar = calc.arr.sub(sample.CorrectedValues[8:10], sample.DegasValues[30:32])
|
|
413
|
-
# 36Ar deduct Ca, that is sum of 36Ara and 36ArCl (and also 36Arc)
|
|
414
|
-
ar36acl = calc.arr.sub(sample.CorrectedValues[0:2], sample.DegasValues[4:6])
|
|
415
|
-
# 38Ar deduct K and Ca, that is sum of 38Ara and 38ArCl (and also 38Arc)
|
|
416
|
-
ar38acl = calc.arr.sub(calc.arr.sub(sample.CorrectedValues[4:6], sample.DegasValues[16:18]),
|
|
417
|
-
sample.DegasValues[18:20])
|
|
418
|
-
# 38ArCl
|
|
419
|
-
ar38cl = sample.DegasValues[10:12]
|
|
420
|
-
# 39ArK
|
|
421
|
-
ar39k = sample.DegasValues[20:22]
|
|
422
|
-
# isochron_6 = calc.isochron.get_3d_data(*ar36acl, *ar38acl, *ar40ar, *ar39k)
|
|
423
|
-
isochron_6 = calc.isochron.get_3d_data(*ar36acl, *ar38acl, *ar39k,
|
|
424
|
-
*ar40ar) # Points on the plot will be more disperse than the above
|
|
425
|
-
sample.IsochronValues[30:39] = isochron_6
|
|
455
|
+
sample.IsochronValues[30:39] = calc_3D_isochrons(sample)
|
|
426
456
|
|
|
427
457
|
# Turner 1988 3D cake mix plots
|
|
428
458
|
# ar40 = sample.CorrectedValues[8:10] # ar40 = atm + r + k
|