ararpy 0.1.12__py3-none-any.whl → 0.1.13__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/calc/arr.py +2 -1
- ararpy/calc/basic.py +36 -14
- ararpy/calc/corr.py +3 -30
- ararpy/calc/raw_funcs.py +2 -2
- ararpy/calc/regression.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 +99 -77
- ararpy/smp/diffusion_funcs.py +248 -111
- ararpy/smp/export.py +445 -28
- ararpy/smp/raw.py +9 -2
- ararpy/smp/sample.py +25 -19
- {ararpy-0.1.12.dist-info → ararpy-0.1.13.dist-info}/METADATA +1 -1
- {ararpy-0.1.12.dist-info → ararpy-0.1.13.dist-info}/RECORD +20 -19
- {ararpy-0.1.12.dist-info → ararpy-0.1.13.dist-info}/WHEEL +1 -1
- {ararpy-0.1.12.dist-info → ararpy-0.1.13.dist-info}/LICENSE +0 -0
- {ararpy-0.1.12.dist-info → ararpy-0.1.13.dist-info}/top_level.txt +0 -0
ararpy/smp/corr.py
CHANGED
|
@@ -20,54 +20,45 @@ 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
|
-
*sample.
|
|
52
|
+
blank_corrected[i * 2:2 + i * 2] = calc.corr.blank(
|
|
53
|
+
*sample.CorrectedValues[i * 2:2 + i * 2], *sample.BlankIntercept[i * 2:2 + i * 2])
|
|
63
54
|
except Exception as e:
|
|
64
|
-
print(f"Gain correction failed")
|
|
65
55
|
print(traceback.format_exc())
|
|
66
|
-
|
|
56
|
+
raise ValueError('Blank correction error')
|
|
67
57
|
for i in range(0, 10, 2):
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
58
|
+
blank_corrected[i] = [blank_corrected[i][index] if sample.TotalParam[102][index] else j for index, j in enumerate(sample.CorrectedValues[i])]
|
|
59
|
+
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])]
|
|
60
|
+
blank_corrected[i] = [0 if j < 0 and sample.TotalParam[101][index] else j for index, j in enumerate(blank_corrected[i])]
|
|
61
|
+
sample.BlankCorrected = blank_corrected
|
|
71
62
|
sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
|
|
72
63
|
|
|
73
64
|
|
|
@@ -82,7 +73,7 @@ def corr_massdiscr(sample: Sample):
|
|
|
82
73
|
sample.CorrectedValues = copy.deepcopy(sample.MassDiscrCorrected)
|
|
83
74
|
return
|
|
84
75
|
MASS = sample.TotalParam[71:81]
|
|
85
|
-
mdf_corrected = [
|
|
76
|
+
mdf_corrected = np.zeros([10, len(sample.SequenceName)])
|
|
86
77
|
try:
|
|
87
78
|
for i in range(5):
|
|
88
79
|
if len(sample.BlankCorrected[i * 2:2 + i * 2]) == 0:
|
|
@@ -111,7 +102,7 @@ def corr_decay(sample: Sample):
|
|
|
111
102
|
-------
|
|
112
103
|
|
|
113
104
|
"""
|
|
114
|
-
decay_corrected = [
|
|
105
|
+
decay_corrected = np.zeros([10, len(sample.SequenceName)])
|
|
115
106
|
try:
|
|
116
107
|
irradiation_cycles = [list(filter(None, re.split(r'[DS]', each_step))) for each_step in sample.TotalParam[27]]
|
|
117
108
|
t1 = [re.findall(r"\d+", i) for i in sample.TotalParam[31]] # t1: experimental times
|
|
@@ -265,7 +256,6 @@ def calc_degas_cl(sample: Sample):
|
|
|
265
256
|
# 38ArCl
|
|
266
257
|
ar38cl = [[], []]
|
|
267
258
|
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
259
|
|
|
270
260
|
# Negative number set to zero
|
|
271
261
|
ar36cl[0] = [0 if i < 0 and set_negative_zero else i for i in ar36cl[0]]
|
|
@@ -273,11 +263,13 @@ def calc_degas_cl(sample: Sample):
|
|
|
273
263
|
ar36cl[0] = [0 if ar36acl[0][i] - item < 0 and set_negative_zero else item
|
|
274
264
|
for i, item in enumerate(ar36cl[0])]
|
|
275
265
|
|
|
266
|
+
ar38cl[0] = [ar36cl[0][i] * v3[i] for i in range(len(ar36cl[0]))]
|
|
267
|
+
|
|
276
268
|
except Exception as e:
|
|
277
269
|
print('Error in corr Cl: {}, lines: {}'.format(e, e.__traceback__.tb_lineno))
|
|
278
270
|
n = len(ar36acl[0])
|
|
279
|
-
ar36cl = [
|
|
280
|
-
ar38cl = [
|
|
271
|
+
ar36cl = np.zeros([2, n])
|
|
272
|
+
ar38cl = np.zeros([2, n])
|
|
281
273
|
|
|
282
274
|
# sample.DegasValues[6:8] = ar36cl
|
|
283
275
|
# sample.DegasValues[10:12] = ar38cl
|
|
@@ -357,6 +349,57 @@ def calc_degas_r(sample: Sample):
|
|
|
357
349
|
# =======================
|
|
358
350
|
# Calc ratio
|
|
359
351
|
# =======================
|
|
352
|
+
def calc_nor_inv_isochrons(sample: Sample):
|
|
353
|
+
n = len(sample.SequenceName)
|
|
354
|
+
try:
|
|
355
|
+
isochron_1 = calc.isochron.get_data(*sample.DegasValues[20:22], *calc.arr.sub(
|
|
356
|
+
sample.CorrectedValues[8:10], sample.DegasValues[30:32]), *sample.DegasValues[0:2])
|
|
357
|
+
isochron_2 = calc.isochron.get_data(*sample.DegasValues[20:22], *sample.DegasValues[0:2], *calc.arr.sub(
|
|
358
|
+
sample.CorrectedValues[8:10], sample.DegasValues[30:32]))
|
|
359
|
+
except:
|
|
360
|
+
return np.zeros([5, n]), np.zeros([5, n])
|
|
361
|
+
else:
|
|
362
|
+
return isochron_1, isochron_2
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def calc_cl_isochrons(sample: Sample):
|
|
366
|
+
n = len(sample.SequenceName)
|
|
367
|
+
try:
|
|
368
|
+
isochron_3 = calc.isochron.get_data(
|
|
369
|
+
*sample.DegasValues[20:22], *sample.DegasValues[24:26], *sample.DegasValues[10:12])
|
|
370
|
+
isochron_4 = calc.isochron.get_data(
|
|
371
|
+
*sample.DegasValues[20:22], *sample.DegasValues[10:12], *sample.DegasValues[24:26])
|
|
372
|
+
isochron_5 = calc.isochron.get_data(
|
|
373
|
+
*sample.DegasValues[10:12], *sample.DegasValues[24:26], *sample.DegasValues[20:22])
|
|
374
|
+
except:
|
|
375
|
+
return np.zeros([5, n]), np.zeros([5, n]), np.zeros([5, n])
|
|
376
|
+
else:
|
|
377
|
+
return isochron_3, isochron_4, isochron_5
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
def calc_3D_isochrons(sample: Sample):
|
|
381
|
+
n = len(sample.SequenceName)
|
|
382
|
+
try:
|
|
383
|
+
# === Ar values ===
|
|
384
|
+
# 3D ratio, 36Ar(a+cl)/40Ar(a+r), 38Ar(a+cl)/40Ar(a+r), 39Ar(k)/40Ar(a+r),
|
|
385
|
+
ar40ar = calc.arr.sub(sample.CorrectedValues[8:10], sample.DegasValues[30:32])
|
|
386
|
+
# 36Ar deduct Ca, that is sum of 36Ara and 36ArCl (and also 36Arc)
|
|
387
|
+
ar36acl = calc.arr.sub(sample.CorrectedValues[0:2], sample.DegasValues[4:6])
|
|
388
|
+
# 38Ar deduct K and Ca, that is sum of 38Ara and 38ArCl (and also 38Arc)
|
|
389
|
+
ar38acl = calc.arr.sub(calc.arr.sub(sample.CorrectedValues[4:6], sample.DegasValues[16:18]),
|
|
390
|
+
sample.DegasValues[18:20])
|
|
391
|
+
# 38ArCl
|
|
392
|
+
ar38cl = sample.DegasValues[10:12]
|
|
393
|
+
# 39ArK
|
|
394
|
+
ar39k = sample.DegasValues[20:22]
|
|
395
|
+
# isochron_6 = calc.isochron.get_3d_data(*ar36acl, *ar38acl, *ar40ar, *ar39k)
|
|
396
|
+
isochron_6 = calc.isochron.get_3d_data(*ar36acl, *ar38acl, *ar39k, *ar40ar) # Points on the plot will be more disperse than the above
|
|
397
|
+
except:
|
|
398
|
+
return np.zeros([9, n])
|
|
399
|
+
else:
|
|
400
|
+
return isochron_6
|
|
401
|
+
|
|
402
|
+
|
|
360
403
|
def calc_ratio(sample: Sample, monte_carlo: bool = False):
|
|
361
404
|
""" Calculate isochron ratio data, 40Arr/39ArK, Ar40r percentage,
|
|
362
405
|
Ar39K released percentage, Ca/K
|
|
@@ -372,57 +415,36 @@ def calc_ratio(sample: Sample, monte_carlo: bool = False):
|
|
|
372
415
|
ar40r_percent = [item / sample.CorrectedValues[8][index] * 100 if sample.CorrectedValues[8][index] != 0 else 0
|
|
373
416
|
for index, item in enumerate(sample.DegasValues[24])]
|
|
374
417
|
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
418
|
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
419
|
CaK = calc.arr.mul_factor(calc.arr.mul_factor(
|
|
385
420
|
sample.DegasValues[8:10], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False)),
|
|
386
421
|
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
422
|
|
|
398
423
|
# assignation
|
|
399
|
-
|
|
424
|
+
if sample.Info.sample.type == "Air":
|
|
425
|
+
ar40aar36a = calc.arr.mul_factor(
|
|
426
|
+
sample.DegasValues[26:28], calc.arr.rec_factor(sample.DegasValues[0:2], isRelative=False),
|
|
427
|
+
isRelative=False)
|
|
428
|
+
ar36a_percent = [item / sum_ar36a * 100 if sum_ar36a != 0 else 0 for item in sample.DegasValues[0]]
|
|
429
|
+
sample.ApparentAgeValues[0:2] = ar40aar36a
|
|
430
|
+
sample.ApparentAgeValues[7] = ar36a_percent
|
|
431
|
+
else:
|
|
432
|
+
ar40rar39k = calc.arr.mul_factor(
|
|
433
|
+
sample.DegasValues[24:26], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False),
|
|
434
|
+
isRelative=False)
|
|
435
|
+
ar39k_percent = [item / sum_ar39k * 100 if sum_ar39k != 0 else 0 for item in sample.DegasValues[20]]
|
|
436
|
+
sample.ApparentAgeValues[0:2] = ar40rar39k
|
|
437
|
+
sample.ApparentAgeValues[7] = ar39k_percent
|
|
438
|
+
|
|
400
439
|
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
|
|
440
|
+
sample.PublishValues[7:11] = copy.deepcopy([*sample.ApparentAgeValues[6:8], *CaK])
|
|
441
|
+
|
|
442
|
+
sample.IsochronValues[0:5], sample.IsochronValues[6:11] = calc_nor_inv_isochrons(sample)
|
|
443
|
+
sample.IsochronValues[12:17], sample.IsochronValues[18:23], sample.IsochronValues[24:29] = \
|
|
444
|
+
calc_cl_isochrons(sample)
|
|
408
445
|
|
|
409
446
|
# === 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
|
|
447
|
+
sample.IsochronValues[30:39] = calc_3D_isochrons(sample)
|
|
426
448
|
|
|
427
449
|
# Turner 1988 3D cake mix plots
|
|
428
450
|
# ar40 = sample.CorrectedValues[8:10] # ar40 = atm + r + k
|