ararpy 0.1.18__py3-none-any.whl → 0.1.20__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/__init__.py +4 -2
- ararpy/calc/age.py +2 -1
- ararpy/calc/arr.py +16 -6
- ararpy/calc/corr.py +9 -7
- ararpy/calc/jvalue.py +1 -1
- ararpy/calc/plot.py +5 -2
- ararpy/files/calc_file.py +2 -5
- ararpy/files/raw_file.py +3 -4
- ararpy/files/xls.py +1 -2
- ararpy/smp/basic.py +119 -70
- ararpy/smp/corr.py +69 -51
- ararpy/smp/export.py +223 -250
- ararpy/smp/initial.py +49 -18
- ararpy/smp/plots.py +129 -92
- ararpy/smp/sample.py +56 -17
- ararpy/smp/style.py +23 -16
- {ararpy-0.1.18.dist-info → ararpy-0.1.20.dist-info}/METADATA +1 -1
- {ararpy-0.1.18.dist-info → ararpy-0.1.20.dist-info}/RECORD +21 -21
- {ararpy-0.1.18.dist-info → ararpy-0.1.20.dist-info}/WHEEL +1 -1
- {ararpy-0.1.18.dist-info → ararpy-0.1.20.dist-info}/licenses/LICENSE +0 -0
- {ararpy-0.1.18.dist-info → ararpy-0.1.20.dist-info}/top_level.txt +0 -0
ararpy/smp/corr.py
CHANGED
|
@@ -25,16 +25,15 @@ from .sample import Sample
|
|
|
25
25
|
def corr_gain(sample: Sample):
|
|
26
26
|
"""Blank Correction"""
|
|
27
27
|
corrGain = True
|
|
28
|
-
gain_corrected = np.zeros([10,
|
|
28
|
+
gain_corrected = np.zeros([10, sample.Info.experiment.step_num])
|
|
29
29
|
try:
|
|
30
30
|
for i in range(5):
|
|
31
31
|
f, sf = np.array(sample.TotalParam[126 + i * 2:128 + i * 2])
|
|
32
32
|
sf = f * sf / 100
|
|
33
33
|
gain_corrected[i * 2:2 + i * 2] = calc.corr.gain(*sample.SampleIntercept[i * 2:2 + i * 2], f, sf)
|
|
34
|
-
except Exception as e:
|
|
35
|
-
print(f"Gain correction failed")
|
|
36
|
-
|
|
37
|
-
return
|
|
34
|
+
except (Exception, BaseException) as e:
|
|
35
|
+
print(f"Gain correction failed: \n{traceback.format_exc()}")
|
|
36
|
+
raise
|
|
38
37
|
for i in range(0, 10, 2):
|
|
39
38
|
gain_corrected[i] = [gain_corrected[i][index] if corrGain else j for index, j in enumerate(sample.SampleIntercept[i])]
|
|
40
39
|
gain_corrected[i + 1] = [gain_corrected[i + 1][index] if corrGain else j for index, j in enumerate(sample.SampleIntercept[i + 1])]
|
|
@@ -156,15 +155,12 @@ def calc_degas_ca(sample: Sample):
|
|
|
156
155
|
ar39ca = calc.arr.mul_factor(ar37ca, sample.TotalParam[8:10], isRelative=True)
|
|
157
156
|
ar38ca = calc.arr.mul_factor(ar37ca, sample.TotalParam[10:12], isRelative=True)
|
|
158
157
|
ar36ca = calc.arr.mul_factor(ar37ca, sample.TotalParam[12:14], isRelative=True)
|
|
159
|
-
sample.DegasValues[8:10] = copy.deepcopy(ar37ca)
|
|
160
|
-
|
|
161
|
-
# sample.DegasValues[18:20] = ar38ca if corrDecasCa else [[0] * n, [0] * n]
|
|
162
|
-
# sample.DegasValues[4:6] = ar36ca if corrDecasCa else [[0] * n, [0] * n]
|
|
163
|
-
sample.DegasValues[ 4] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar36ca[0])]
|
|
158
|
+
sample.DegasValues[8:10] = copy.deepcopy(ar37ca) # 37Ca
|
|
159
|
+
sample.DegasValues[ 4] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar36ca[0])] # 36Ca
|
|
164
160
|
sample.DegasValues[ 5] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar36ca[1])]
|
|
165
|
-
sample.DegasValues[18] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar38ca[0])]
|
|
161
|
+
sample.DegasValues[18] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar38ca[0])] # 38Ca
|
|
166
162
|
sample.DegasValues[19] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar38ca[1])]
|
|
167
|
-
sample.DegasValues[22] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar39ca[0])]
|
|
163
|
+
sample.DegasValues[22] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar39ca[0])] # 39Ca
|
|
168
164
|
sample.DegasValues[23] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar39ca[1])]
|
|
169
165
|
sample.PublishValues[1] = copy.deepcopy(ar37ca[0])
|
|
170
166
|
|
|
@@ -241,43 +237,51 @@ def calc_degas_cl(sample: Sample):
|
|
|
241
237
|
try:
|
|
242
238
|
if not corrDecasCl:
|
|
243
239
|
raise ValueError("Do not apply degas chlorine")
|
|
244
|
-
|
|
240
|
+
vDecay = [cl36_cl38_p[0][i] * (1 - np.exp(-1 * decay_const[0][i] * stand_time_year[i])) for i in
|
|
245
241
|
range(len(stand_time_year))]
|
|
246
|
-
|
|
242
|
+
sDecay = [pow((cl36_cl38_p[1][i] * (1 - np.exp(-1 * decay_const[0][i] * stand_time_year[i]))) ** 2 +
|
|
247
243
|
(cl36_cl38_p[0][i] * stand_time_year[i] * (np.exp(-1 * decay_const[0][i] * stand_time_year[i])) *
|
|
248
244
|
decay_const[1][i]) ** 2, 0.5) for i in range(len(stand_time_year))]
|
|
249
|
-
|
|
250
|
-
|
|
245
|
+
sDecay = [calc.err.div((1, 0), (vDecay[i], sDecay[i])) for i in range(len(sDecay))]
|
|
246
|
+
vDecay = [1 / vDecay[i] for i in range(len(vDecay))]
|
|
247
|
+
|
|
251
248
|
# 36ArCl
|
|
252
249
|
ar36cl = [[], []]
|
|
253
|
-
ar36cl[0] = [(ar36acl[0][i] * ar38ar36[0][i] - ar38acl[0][i]) / (ar38ar36[0][i] - v3[i])
|
|
254
|
-
for i in range(len(ar36acl[0]))]
|
|
255
|
-
s1 = [(ar36acl[1][i] * ar38ar36[0][i] / (ar38ar36[0][i] - v3[i])) ** 2 for i in range(len(ar36cl[0]))]
|
|
256
|
-
s2 = [(ar38acl[1][i] / (ar38ar36[0][i] - v3[i])) ** 2 for i in range(len(ar36cl[0]))]
|
|
257
|
-
s3 = [(s3[i] * (ar36acl[0][i] * ar38ar36[0][i] - ar38acl[0][i]) / (ar38ar36[0][i] - v3[i]) ** 2) ** 2
|
|
258
|
-
for i in range(len(ar36cl[0]))]
|
|
259
|
-
s4 = [(ar36acl[0][i] / (ar38ar36[0][i] - v3[i]) -
|
|
260
|
-
(ar36acl[0][i] * ar38ar36[0][i] - ar38acl[0][i]) / (ar38ar36[0][i] - v3[i]) ** 2) ** 2 *
|
|
261
|
-
(ar38ar36[1][i]) ** 2 for i in range(len(ar36cl[0]))]
|
|
262
|
-
ar36cl[1] = [pow(s1[i] + s2[i] + s3[i] + s4[i], 0.5) for i in range(len(ar36cl[0]))]
|
|
263
|
-
|
|
264
250
|
# 38ArCl
|
|
265
251
|
ar38cl = [[], []]
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
252
|
+
for i in range(len(vDecay)):
|
|
253
|
+
a1 = sample.CorrectedValues[0][i]; s1 = sample.CorrectedValues[1][i]
|
|
254
|
+
a2 = sample.DegasValues[4][i]; s2 = sample.DegasValues[5][i];
|
|
255
|
+
a3 = sample.DegasValues[16][i]; s3 = sample.DegasValues[17][i]
|
|
256
|
+
a4 = sample.DegasValues[18][i]; s4 = sample.DegasValues[19][i]
|
|
257
|
+
a5 = sample.CorrectedValues[4][i]; s5 = sample.CorrectedValues[5][i]
|
|
258
|
+
a6 = vDecay[i]; s6 = sDecay[i]
|
|
259
|
+
a7 = ar38ar36[0][i]; s7 = ar38ar36[1][i]
|
|
260
|
+
|
|
261
|
+
d1 = 1 / (1 - a6 / a7)
|
|
262
|
+
d2 = - 1 / (1 - a6 / a7)
|
|
263
|
+
d3 = 1 / (a7 - a6)
|
|
264
|
+
d4 = 1 / (a7 - a6)
|
|
265
|
+
d5 = - 1 / (a7 - a6)
|
|
266
|
+
d6 = (a1 - a2 + (a3 + a4) / a7 - a5 / a7) / a7 / (1 - a6 / a7) ** 2
|
|
267
|
+
d7 = -(a1 - a2) * (a6) / (a7 - a6) ** 2 - (a3 + a4 - a5) / (a7 - a6) ** 2
|
|
268
|
+
|
|
269
|
+
v1 = (a1 - a2 + (a3 + a4) / a7 - a5 / a7) / (1 - a6 / a7)
|
|
270
|
+
s1 = (d1**2*s1**2 + d2**2*s2**2 + d3**2*s3**2 + d4**2*s4**2+ d5**2*s5**2 + d6**2*s6**2 + d7**2*s7**2) ** .5
|
|
271
|
+
s2 = calc.err.mul((v1, s1), (vDecay[i], sDecay[i]))
|
|
272
|
+
v1 = 0 if (ar36acl[0][i] - v1 < 0 or v1 < 0) and set_negative_zero[i] else v1
|
|
273
|
+
v2 = v1 * vDecay[i]
|
|
274
|
+
|
|
275
|
+
# Note: Ar36Cl uncertainty is differen with ArArCALC. All calculation was conducted separately considering they are independent
|
|
276
|
+
# s1 = calc.err.div((a1 - a2 + (a3 + a4) / a7 - a5 / a7, calc.err.add(s1, s2, calc.err.div((a3 + a4, calc.err.add(s3, s4)), (a7, s7)), calc.err.div((a5, s5), (a7, s7)))), (1 - a6 / a7, calc.err.div((a6, s6), (a7, s7))))
|
|
277
|
+
|
|
278
|
+
ar36cl[0].append(v1); ar36cl[1].append(s1)
|
|
279
|
+
ar38cl[0].append(v2); ar38cl[1].append(s2)
|
|
275
280
|
|
|
276
281
|
except Exception as e:
|
|
277
282
|
print('Error in corr Cl: {}, lines: {}'.format(e, e.__traceback__.tb_lineno))
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
ar38cl = np.zeros([2, n])
|
|
283
|
+
ar36cl = np.zeros([2, len(ar36acl[0])])
|
|
284
|
+
ar38cl = np.zeros([2, len(ar36acl[0])])
|
|
281
285
|
|
|
282
286
|
# sample.DegasValues[6:8] = ar36cl
|
|
283
287
|
# sample.DegasValues[10:12] = ar38cl
|
|
@@ -349,7 +353,7 @@ def calc_degas_r(sample: Sample):
|
|
|
349
353
|
"""
|
|
350
354
|
ar40ar = calc.arr.sub(sample.CorrectedValues[8:10], sample.DegasValues[30:32])
|
|
351
355
|
ar40r = calc.arr.sub(ar40ar, sample.DegasValues[26:28])
|
|
352
|
-
ar40r[0] = [
|
|
356
|
+
ar40r[0] = [0 if item < 0 and sample.TotalParam[101][index] else item for index, item in enumerate(ar40r[0])]
|
|
353
357
|
sample.DegasValues[24:26] = copy.deepcopy(ar40r)
|
|
354
358
|
sample.PublishValues[4] = copy.deepcopy(ar40r[0])
|
|
355
359
|
|
|
@@ -360,11 +364,16 @@ def calc_degas_r(sample: Sample):
|
|
|
360
364
|
def calc_nor_inv_isochrons(sample: Sample):
|
|
361
365
|
n = len(sample.SequenceName)
|
|
362
366
|
try:
|
|
363
|
-
isochron_1 = calc.isochron.get_data(
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
sample.
|
|
367
|
-
|
|
367
|
+
isochron_1 = calc.isochron.get_data(
|
|
368
|
+
*calc.arr.mul(sample.DegasValues[20:22], sample.NormalizeFactor),
|
|
369
|
+
*calc.arr.sub(sample.CorrectedValues[8:10], sample.DegasValues[30:32]),
|
|
370
|
+
*sample.DegasValues[0:2]
|
|
371
|
+
)
|
|
372
|
+
isochron_2 = calc.isochron.get_data(
|
|
373
|
+
*calc.arr.mul(sample.DegasValues[20:22], sample.NormalizeFactor),
|
|
374
|
+
*sample.DegasValues[0:2],
|
|
375
|
+
*calc.arr.sub(sample.CorrectedValues[8:10], sample.DegasValues[30:32]))
|
|
376
|
+
except (BaseException, Exception):
|
|
368
377
|
return np.zeros([5, n]), np.zeros([5, n])
|
|
369
378
|
else:
|
|
370
379
|
return isochron_1, isochron_2
|
|
@@ -374,12 +383,18 @@ def calc_cl_isochrons(sample: Sample):
|
|
|
374
383
|
n = len(sample.SequenceName)
|
|
375
384
|
try:
|
|
376
385
|
isochron_3 = calc.isochron.get_data(
|
|
377
|
-
*sample.DegasValues[20:22],
|
|
386
|
+
*calc.arr.mul(sample.DegasValues[20:22], sample.NormalizeFactor),
|
|
387
|
+
*sample.DegasValues[24:26],
|
|
388
|
+
*calc.arr.mul(sample.DegasValues[10:12], sample.NormalizeFactor))
|
|
378
389
|
isochron_4 = calc.isochron.get_data(
|
|
379
|
-
*sample.DegasValues[20:22],
|
|
390
|
+
*calc.arr.mul(sample.DegasValues[20:22], sample.NormalizeFactor),
|
|
391
|
+
*calc.arr.mul(sample.DegasValues[10:12], sample.NormalizeFactor),
|
|
392
|
+
*sample.DegasValues[24:26])
|
|
380
393
|
isochron_5 = calc.isochron.get_data(
|
|
381
|
-
*sample.DegasValues[10:12],
|
|
382
|
-
|
|
394
|
+
*calc.arr.mul(sample.DegasValues[10:12], sample.NormalizeFactor),
|
|
395
|
+
*sample.DegasValues[24:26],
|
|
396
|
+
*calc.arr.mul(sample.DegasValues[20:22], sample.NormalizeFactor))
|
|
397
|
+
except (BaseException, Exception):
|
|
383
398
|
return np.zeros([5, n]), np.zeros([5, n]), np.zeros([5, n])
|
|
384
399
|
else:
|
|
385
400
|
return isochron_3, isochron_4, isochron_5
|
|
@@ -422,7 +437,6 @@ def calc_ratio(sample: Sample, monte_carlo: bool = False):
|
|
|
422
437
|
"""
|
|
423
438
|
ar40r_percent = [item / sample.CorrectedValues[8][index] * 100 if sample.CorrectedValues[8][index] != 0 else 0
|
|
424
439
|
for index, item in enumerate(sample.DegasValues[24])]
|
|
425
|
-
sum_ar39k = sum(sample.DegasValues[20])
|
|
426
440
|
sum_ar36a = sum(sample.DegasValues[ 0])
|
|
427
441
|
CaK = calc.arr.mul_factor(calc.arr.mul_factor(
|
|
428
442
|
sample.DegasValues[8:10], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False)),
|
|
@@ -437,10 +451,12 @@ def calc_ratio(sample: Sample, monte_carlo: bool = False):
|
|
|
437
451
|
sample.ApparentAgeValues[0:2] = ar40aar36a
|
|
438
452
|
sample.ApparentAgeValues[7] = ar36a_percent
|
|
439
453
|
else:
|
|
454
|
+
ar39k, sar39k = calc.arr.mul(sample.DegasValues[20:22], sample.NormalizeFactor)
|
|
455
|
+
sum_ar39k = sum(ar39k)
|
|
456
|
+
ar39k_percent = [item / sum_ar39k * 100 if sum_ar39k != 0 else 0 for item in ar39k]
|
|
440
457
|
ar40rar39k = calc.arr.mul_factor(
|
|
441
458
|
sample.DegasValues[24:26], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False),
|
|
442
459
|
isRelative=False)
|
|
443
|
-
ar39k_percent = [item / sum_ar39k * 100 if sum_ar39k != 0 else 0 for item in sample.DegasValues[20]]
|
|
444
460
|
sample.ApparentAgeValues[0:2] = ar40rar39k
|
|
445
461
|
sample.ApparentAgeValues[7] = ar39k_percent
|
|
446
462
|
|
|
@@ -529,6 +545,7 @@ def monte_carlo_f(sample: Sample):
|
|
|
529
545
|
R36v38clp = np.transpose(sample.TotalParam[56:58])
|
|
530
546
|
|
|
531
547
|
stand_time_year = np.transpose(sample.TotalParam[32])
|
|
548
|
+
JNFactor = sample.NormalizeFactor
|
|
532
549
|
|
|
533
550
|
irradiation_cycles = [list(filter(None, re.split(r'[DS]', each_step))) for each_step in sample.TotalParam[27]]
|
|
534
551
|
t1 = [re.findall(r"\d+", i) for i in sample.TotalParam[31]] # t1: experimental times
|
|
@@ -562,6 +579,7 @@ def monte_carlo_f(sample: Sample):
|
|
|
562
579
|
L37ar=L37ar[i], L39ar=L39ar[i], L36cl=L36cl[i],
|
|
563
580
|
MDFunc=None,
|
|
564
581
|
MDF=MDF[i], stand_time_year=stand_time_year[i],
|
|
582
|
+
JNFactor=JNFactor,
|
|
565
583
|
blank_gain_corr=sample.TotalParam[111][i]
|
|
566
584
|
)
|
|
567
585
|
|