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/smp/corr.py CHANGED
@@ -20,54 +20,45 @@ from .sample import Sample
20
20
 
21
21
 
22
22
  # =======================
23
- # Corr Blank
23
+ # Corr Gain
24
24
  # =======================
25
- def corr_blank(sample: Sample):
25
+ def corr_gain(sample: Sample):
26
26
  """Blank Correction"""
27
- corrBlank = sample.TotalParam[102][0]
28
- # if not corrBlank:
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
- blank_corrected[i * 2:2 + i * 2] = calc.corr.blank(
36
- *sample.SampleIntercept[i * 2:2 + i * 2], *sample.BlankIntercept[i * 2:2 + i * 2])
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
- raise ValueError('Blank correction error')
37
+ return
40
38
  for i in range(0, 10, 2):
41
- blank_corrected[i] = [blank_corrected[i][index] if sample.TotalParam[102][index] else j for index, j in enumerate(sample.SampleIntercept[i])]
42
- blank_corrected[i + 1] = [blank_corrected[i + 1][index] if sample.TotalParam[102][index] else j for index, j in enumerate(sample.SampleIntercept[i + 1])]
43
- blank_corrected[i] = [0 if j < 0 and sample.TotalParam[101][index] else j for index, j in enumerate(blank_corrected[i])]
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 corr_gain(sample: Sample):
47
+ def corr_blank(sample: Sample):
52
48
  """Blank Correction"""
53
- corrGain = True
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
- gain_corrected[i * 2:2 + i * 2] = calc.corr.gain(
62
- *sample.BlankCorrected[i * 2:2 + i * 2], *sample.TotalParam[126 + i * 2:128 + i * 2])
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
- return
56
+ raise ValueError('Blank correction error')
67
57
  for i in range(0, 10, 2):
68
- gain_corrected[i] = [gain_corrected[i][index] if corrGain else j for index, j in enumerate(sample.BlankCorrected[i])]
69
- gain_corrected[i + 1] = [gain_corrected[i + 1][index] if corrGain else j for index, j in enumerate(sample.BlankCorrected[i + 1])]
70
- sample.BlankCorrected = copy.deepcopy(gain_corrected)
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 = [[]] * 10
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 = [[]] * 10
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 = [[0] * n, [0] * n]
280
- ar38cl = [[0] * n, [0] * n]
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
- sample.ApparentAgeValues[0:2] = ar40aar36a if sample.Info.sample.type == "Air" else ar40rar39k
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.ApparentAgeValues[7] = ar36a_percent if sample.Info.sample.type == "Air" else ar39k_percent
402
- sample.PublishValues[7:11] = [ar40r_percent, ar39k_percent, *CaK]
403
- sample.IsochronValues[0:5] = isochron_1
404
- sample.IsochronValues[6:11] = isochron_2
405
- sample.IsochronValues[12:17] = isochron_3
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
- # === Ar values ===
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