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/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, len(sample.SequenceName)])
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
- print(traceback.format_exc())
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
- # sample.DegasValues[22:24] = ar39ca if corrDecasCa else [[0] * n, [0] * n]
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
- v3 = [cl36_cl38_p[0][i] * (1 - np.exp(-1 * decay_const[0][i] * stand_time_year[i])) for i in
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
- s3 = [pow((cl36_cl38_p[1][i] * (1 - np.exp(-1 * decay_const[0][i] * stand_time_year[i]))) ** 2 +
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
- s3 = [calc.err.div((1, 0), (v3[i], s3[i])) for i in range(len(s3))]
250
- v3 = [1 / v3[i] for i in range(len(v3))]
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
- ar38cl[1] = [calc.err.mul((ar36cl[0][i], ar36cl[1][i]), (v3[i], s3[i])) for i in range(len(ar36cl[0]))]
267
-
268
- # Negative number set to zero
269
- ar36cl[0] = [0 if i < 0 and set_negative_zero else i for i in ar36cl[0]]
270
- # force 36ArCl to zero if 36Ar - 36ArCa - 36Cl < 0
271
- ar36cl[0] = [0 if ar36acl[0][i] - item < 0 and set_negative_zero else item
272
- for i, item in enumerate(ar36cl[0])]
273
-
274
- ar38cl[0] = [ar36cl[0][i] * v3[i] for i in range(len(ar36cl[0]))]
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
- n = len(ar36acl[0])
279
- ar36cl = np.zeros([2, n])
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] = [item if item >= 0 else 0 for item in 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(*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:
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], *sample.DegasValues[24:26], *sample.DegasValues[10:12])
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], *sample.DegasValues[10:12], *sample.DegasValues[24:26])
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], *sample.DegasValues[24:26], *sample.DegasValues[20:22])
382
- except:
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