ararpy 0.0.24__py3-none-any.whl → 0.1.11__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,11 +25,10 @@ from .sample import Sample
25
25
  def corr_blank(sample: Sample):
26
26
  """Blank Correction"""
27
27
  corrBlank = sample.TotalParam[102][0]
28
- set_negative_zero = sample.TotalParam[101][0]
29
- if not corrBlank:
30
- sample.BlankCorrected = copy.deepcopy(sample.SampleIntercept)
31
- sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
32
- return
28
+ # if not corrBlank:
29
+ # sample.BlankCorrected = copy.deepcopy(sample.SampleIntercept)
30
+ # sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
31
+ # return
33
32
  blank_corrected = [[]] * 10
34
33
  try:
35
34
  for i in range(5):
@@ -38,8 +37,10 @@ def corr_blank(sample: Sample):
38
37
  except Exception as e:
39
38
  print(traceback.format_exc())
40
39
  raise ValueError('Blank correction error')
41
- if set_negative_zero:
42
- blank_corrected[0] = [i if i >= 0 else 0 for i in blank_corrected[0]]
40
+ 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])]
43
44
  sample.BlankCorrected = blank_corrected
44
45
  sample.CorrectedValues = copy.deepcopy(sample.BlankCorrected)
45
46
 
@@ -58,13 +59,15 @@ def corr_massdiscr(sample: Sample):
58
59
  mdf_corrected = [[]] * 10
59
60
  try:
60
61
  for i in range(5):
62
+ if len(sample.BlankCorrected[i * 2:2 + i * 2]) == 0:
63
+ raise ValueError("sample.BlankCorrected is empty.")
61
64
  mdf_corrected[i * 2:2 + i * 2] = calc.corr.discr(
62
65
  *sample.BlankCorrected[i * 2:2 + i * 2],
63
66
  *sample.TotalParam[69:71], m=MASS[i * 2], m40=MASS[8], isRelative=True,
64
67
  method=sample.TotalParam[100][0])
65
68
  except Exception as e:
66
69
  print(traceback.format_exc())
67
- raise ValueError('Mass discrimination correction error')
70
+ raise ValueError(f'Mass discrimination correction error: {e}')
68
71
  sample.MassDiscrCorrected = mdf_corrected
69
72
  sample.CorrectedValues = copy.deepcopy(sample.MassDiscrCorrected)
70
73
 
@@ -101,12 +104,12 @@ def corr_decay(sample: Sample):
101
104
  print(traceback.format_exc())
102
105
  raise ValueError('Decay correction correction error')
103
106
 
104
- corrDecay37 = sample.TotalParam[104][0]
105
- corrDecay39 = sample.TotalParam[105][0]
106
- if corrDecay37:
107
- sample.CorrectedValues[2:4] = copy.deepcopy(decay_corrected[2:4])
108
- if corrDecay39:
109
- sample.CorrectedValues[6:8] = copy.deepcopy(decay_corrected[6:8])
107
+ corrDecay37 = sample.TotalParam[104]
108
+ corrDecay39 = sample.TotalParam[105]
109
+ sample.CorrectedValues[2] = [val if corrDecay37[idx] else 0 for idx, val in enumerate(decay_corrected[2])]
110
+ sample.CorrectedValues[3] = [val if corrDecay37[idx] else 0 for idx, val in enumerate(decay_corrected[3])]
111
+ sample.CorrectedValues[6] = [val if corrDecay39[idx] else 0 for idx, val in enumerate(decay_corrected[6])]
112
+ sample.CorrectedValues[7] = [val if corrDecay39[idx] else 0 for idx, val in enumerate(decay_corrected[7])]
110
113
 
111
114
 
112
115
  # =======================
@@ -122,17 +125,23 @@ def calc_degas_ca(sample: Sample):
122
125
  -------
123
126
 
124
127
  """
125
- corrDecasCa = sample.TotalParam[106][0]
126
- n = len(sample.CorrectedValues[2])
128
+ corrDecasCa = sample.TotalParam[106]
129
+ # n = len(sample.CorrectedValues[2])
127
130
  ar37ca = sample.CorrectedValues[2:4]
128
131
  ar39ca = calc.arr.mul_factor(ar37ca, sample.TotalParam[8:10], isRelative=True)
129
132
  ar38ca = calc.arr.mul_factor(ar37ca, sample.TotalParam[10:12], isRelative=True)
130
133
  ar36ca = calc.arr.mul_factor(ar37ca, sample.TotalParam[12:14], isRelative=True)
131
- sample.DegasValues[8:10] = ar37ca
132
- sample.DegasValues[22:24] = ar39ca if corrDecasCa else [[0] * n, [0] * n]
133
- sample.DegasValues[18:20] = ar38ca if corrDecasCa else [[0] * n, [0] * n]
134
- sample.DegasValues[4:6] = ar36ca if corrDecasCa else [[0] * n, [0] * n]
135
- sample.PublishValues[1] = ar37ca[0]
134
+ sample.DegasValues[8:10] = copy.deepcopy(ar37ca)
135
+ # sample.DegasValues[22:24] = ar39ca if corrDecasCa else [[0] * n, [0] * n]
136
+ # sample.DegasValues[18:20] = ar38ca if corrDecasCa else [[0] * n, [0] * n]
137
+ # sample.DegasValues[4:6] = ar36ca if corrDecasCa else [[0] * n, [0] * n]
138
+ sample.DegasValues[ 4] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar36ca[0])]
139
+ sample.DegasValues[ 5] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar36ca[1])]
140
+ sample.DegasValues[18] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar38ca[0])]
141
+ sample.DegasValues[19] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar38ca[1])]
142
+ sample.DegasValues[22] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar39ca[0])]
143
+ sample.DegasValues[23] = [val if corrDecasCa[idx] else 0 for idx, val in enumerate(ar39ca[1])]
144
+ sample.PublishValues[1] = copy.deepcopy(ar37ca[0])
136
145
 
137
146
 
138
147
  # =======================
@@ -148,18 +157,22 @@ def calc_degas_k(sample: Sample):
148
157
  -------
149
158
 
150
159
  """
151
- corrDecasK = sample.TotalParam[107][0]
152
- set_negative_zero = sample.TotalParam[101][0]
153
- n = len(sample.CorrectedValues[6])
160
+ corrDecasK = sample.TotalParam[107]
161
+ set_negative_zero = sample.TotalParam[101]
162
+ # n = len(sample.CorrectedValues[6])
154
163
  ar39k = calc.arr.sub(sample.CorrectedValues[6:8], sample.DegasValues[22:24])
155
- ar39k[0] = [0 if i < 0 and set_negative_zero else i for i in ar39k[0]]
164
+ ar39k[0] = [0 if val < 0 and set_negative_zero[idx] else val for idx, val in enumerate(ar39k[0])]
156
165
  ar40k = calc.arr.mul_factor(ar39k, sample.TotalParam[14:16], isRelative=True)
157
166
  ar38k = calc.arr.mul_factor(ar39k, sample.TotalParam[16:18], isRelative=True)
158
167
 
159
- sample.PublishValues[3] = ar39k[0]
160
- sample.DegasValues[20:22] = ar39k
161
- sample.DegasValues[30:32] = ar40k if corrDecasK else [[0] * n, [0] * n]
162
- sample.DegasValues[16:18] = ar38k if corrDecasK else [[0] * n, [0] * n]
168
+ sample.PublishValues[3] = copy.deepcopy(ar39k[0])
169
+ sample.DegasValues[20:22] = copy.deepcopy(ar39k)
170
+ # sample.DegasValues[30:32] = ar40k if corrDecasK else [[0] * n, [0] * n]
171
+ # sample.DegasValues[16:18] = ar38k if corrDecasK else [[0] * n, [0] * n]
172
+ sample.DegasValues[16] = [val if corrDecasK[idx] else 0 for idx, val in enumerate(ar38k[0])]
173
+ sample.DegasValues[17] = [val if corrDecasK[idx] else 0 for idx, val in enumerate(ar38k[1])]
174
+ sample.DegasValues[30] = [val if corrDecasK[idx] else 0 for idx, val in enumerate(ar40k[0])]
175
+ sample.DegasValues[31] = [val if corrDecasK[idx] else 0 for idx, val in enumerate(ar40k[1])]
163
176
 
164
177
 
165
178
  # =======================
@@ -175,12 +188,12 @@ def calc_degas_cl(sample: Sample):
175
188
  -------
176
189
 
177
190
  """
178
- corrDecasCl = sample.TotalParam[108][0]
191
+ corrDecasCl = sample.TotalParam[108]
179
192
  decay_const = sample.TotalParam[46:48]
180
193
  cl36_cl38_p = sample.TotalParam[56:58]
181
194
  ar38ar36 = sample.TotalParam[4:6]
182
195
  stand_time_year = sample.TotalParam[32]
183
- set_negative_zero = sample.TotalParam[101][0]
196
+ set_negative_zero = sample.TotalParam[101]
184
197
  # ============
185
198
  decay_const[1] = [decay_const[0][i] * decay_const[1][i] / 100 for i in
186
199
  range(len(decay_const[0]))] # convert to absolute error
@@ -194,8 +207,8 @@ def calc_degas_cl(sample: Sample):
194
207
  # 38Ar deduct K and Ca, that is sum of 38Ara and 38ArCl
195
208
  ar38acl = calc.arr.sub(calc.arr.sub(
196
209
  sample.CorrectedValues[4:6], sample.DegasValues[16:18]), sample.DegasValues[18:20])
197
- if set_negative_zero:
198
- for index, item in enumerate(ar36acl[0]):
210
+ for index, item in enumerate(ar36acl[0]):
211
+ if set_negative_zero[index]:
199
212
  if item < 0:
200
213
  ar36acl[0][index] = 0
201
214
  if ar38acl[0][index] < 0:
@@ -239,9 +252,14 @@ def calc_degas_cl(sample: Sample):
239
252
  n = len(ar36acl[0])
240
253
  ar36cl = [[0] * n, [0] * n]
241
254
  ar38cl = [[0] * n, [0] * n]
242
- sample.DegasValues[6:8] = ar36cl
243
- sample.DegasValues[10:12] = ar38cl
244
- sample.PublishValues[2] = ar38cl[0]
255
+
256
+ # sample.DegasValues[6:8] = ar36cl
257
+ # sample.DegasValues[10:12] = ar38cl
258
+ sample.PublishValues[2] = copy.deepcopy(ar38cl[0])
259
+ sample.DegasValues[ 6] = [val if corrDecasCl[idx] else 0 for idx, val in enumerate(ar36cl[0])]
260
+ sample.DegasValues[ 7] = [val if corrDecasCl[idx] else 0 for idx, val in enumerate(ar36cl[1])]
261
+ sample.DegasValues[10] = [val if corrDecasCl[idx] else 0 for idx, val in enumerate(ar38cl[0])]
262
+ sample.DegasValues[11] = [val if corrDecasCl[idx] else 0 for idx, val in enumerate(ar38cl[1])]
245
263
 
246
264
 
247
265
  # =======================
@@ -257,31 +275,37 @@ def calc_degas_atm(sample: Sample):
257
275
  -------
258
276
 
259
277
  """
260
- corrDecasAtm = sample.TotalParam[109][0]
261
- set_negative_zero = sample.TotalParam[101][0]
262
- n = len(sample.CorrectedValues[0])
278
+ corrDecasAtm = sample.TotalParam[109]
279
+ set_negative_zero = sample.TotalParam[101]
280
+ # n = len(sample.CorrectedValues[0])
263
281
  # 36Ar deduct Ca, that is sum of 36Ara and 36ArCl
264
282
  ar36acl = calc.arr.sub(sample.CorrectedValues[0:2], sample.DegasValues[4:6])
265
- if set_negative_zero:
266
- ar36acl[0] = [i if i >= 0 else 0 for i in ar36acl[0]]
283
+ ar36acl[0] = [0 if val < 0 and set_negative_zero[idx] else val for idx, val in enumerate(ar36acl[0])]
267
284
  # 38Ar deduct K and Ca, that is sum of 38Ara and 38ArCl
268
285
  # ar38acl = calc.arr.sub()(
269
286
  # calc.arr.sub()(sample.CorrectedValues[2:4], sample.DegasValues[16:18]), sample.DegasValues[18:20])
270
287
  # 36ArAir
271
288
  ar36a = calc.arr.sub(ar36acl, sample.DegasValues[6:8])
272
289
  # If ar36acl - ar36cl < 0, let ar36a = ar36 - ar36ca
273
- if set_negative_zero:
274
- ar36a[0] = [item if item >= 0 else ar36acl[index] for index, item in enumerate(ar36a[0])]
275
- # 38ArAir
276
- ar38a = calc.arr.mul_factor(ar36a, sample.TotalParam[4:6], isRelative=True)
277
- print(sample.TotalParam[4:6])
278
- # 40ArAir
279
- ar40a = calc.arr.mul_factor(ar36a, sample.TotalParam[0:2], isRelative=True)
280
- print(sample.TotalParam[0:2])
281
- sample.DegasValues[0:2] = ar36a
282
- sample.DegasValues[12:14] = ar38a if corrDecasAtm else [[0] * n, [0] * n]
283
- sample.DegasValues[26:28] = ar40a if corrDecasAtm else [[0] * n, [0] * n]
284
- sample.PublishValues[0] = ar36a[0]
290
+ ar36a[0] = [ar36acl[index] if item < 0 and set_negative_zero[index] else item for index, item in enumerate(ar36a[0])]
291
+ if sample.Info.sample.type == "Air":
292
+ ar38a = copy.deepcopy(sample.CorrectedValues[4:6])
293
+ ar40a = copy.deepcopy(sample.CorrectedValues[8:10])
294
+ else:
295
+ # 38ArAir
296
+ ar38a = calc.arr.mul_factor(ar36a, sample.TotalParam[4:6], isRelative=True)
297
+ # 40ArAir
298
+ ar40a = calc.arr.mul_factor(ar36a, sample.TotalParam[0:2], isRelative=True)
299
+
300
+ sample.PublishValues[0] = copy.deepcopy(ar36a[0])
301
+ # sample.DegasValues[12:14] = ar38a if corrDecasAtm else [[0] * n, [0] * n]
302
+ # sample.DegasValues[26:28] = ar40a if corrDecasAtm else [[0] * n, [0] * n]
303
+ sample.DegasValues[ 0] = [val if corrDecasAtm[idx] else 0 for idx, val in enumerate(ar36a[0])]
304
+ sample.DegasValues[ 1] = [val if corrDecasAtm[idx] else 0 for idx, val in enumerate(ar36a[1])]
305
+ sample.DegasValues[12] = [val if corrDecasAtm[idx] else 0 for idx, val in enumerate(ar38a[0])]
306
+ sample.DegasValues[13] = [val if corrDecasAtm[idx] else 0 for idx, val in enumerate(ar38a[1])]
307
+ sample.DegasValues[26] = [val if corrDecasAtm[idx] else 0 for idx, val in enumerate(ar40a[0])]
308
+ sample.DegasValues[27] = [val if corrDecasAtm[idx] else 0 for idx, val in enumerate(ar40a[1])]
285
309
 
286
310
 
287
311
  # =======================
@@ -300,8 +324,8 @@ def calc_degas_r(sample: Sample):
300
324
  ar40ar = calc.arr.sub(sample.CorrectedValues[8:10], sample.DegasValues[30:32])
301
325
  ar40r = calc.arr.sub(ar40ar, sample.DegasValues[26:28])
302
326
  ar40r[0] = [item if item >= 0 else 0 for item in ar40r[0]]
303
- sample.DegasValues[24:26] = ar40r
304
- sample.PublishValues[4] = ar40r[0]
327
+ sample.DegasValues[24:26] = copy.deepcopy(ar40r)
328
+ sample.PublishValues[4] = copy.deepcopy(ar40r[0])
305
329
 
306
330
 
307
331
  # =======================
@@ -323,9 +347,14 @@ def calc_ratio(sample: Sample, monte_carlo: bool = False):
323
347
  for index, item in enumerate(sample.DegasValues[24])]
324
348
  sum_ar39k = sum(sample.DegasValues[20])
325
349
  ar39k_percent = [item / sum_ar39k * 100 if sum_ar39k != 0 else 0 for item in sample.DegasValues[20]]
350
+ sum_ar36a = sum(sample.DegasValues[ 0])
351
+ ar36a_percent = [item / sum_ar36a * 100 if sum_ar36a != 0 else 0 for item in sample.DegasValues[ 0]]
326
352
  ar40rar39k = calc.arr.mul_factor(
327
353
  sample.DegasValues[24:26], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False),
328
354
  isRelative=False)
355
+ ar40aar36a = calc.arr.mul_factor(
356
+ sample.DegasValues[26:28], calc.arr.rec_factor(sample.DegasValues[0:2], isRelative=False),
357
+ isRelative=False)
329
358
  CaK = calc.arr.mul_factor(calc.arr.mul_factor(
330
359
  sample.DegasValues[8:10], calc.arr.rec_factor(sample.DegasValues[20:22], isRelative=False)),
331
360
  calc.arr.rec_factor(sample.TotalParam[20:22], isRelative=True))
@@ -341,8 +370,9 @@ def calc_ratio(sample: Sample, monte_carlo: bool = False):
341
370
  *sample.DegasValues[10:12], *sample.DegasValues[24:26], *sample.DegasValues[20:22])
342
371
 
343
372
  # assignation
344
- sample.ApparentAgeValues[0:2] = ar40rar39k
345
- sample.ApparentAgeValues[6:8] = [ar40r_percent, ar39k_percent]
373
+ sample.ApparentAgeValues[0:2] = ar40aar36a if sample.Info.sample.type == "Air" else ar40rar39k
374
+ sample.ApparentAgeValues[6] = ar40r_percent
375
+ sample.ApparentAgeValues[7] = ar36a_percent if sample.Info.sample.type == "Air" else ar39k_percent
346
376
  sample.PublishValues[7:11] = [ar40r_percent, ar39k_percent, *CaK]
347
377
  sample.IsochronValues[0:5] = isochron_1
348
378
  sample.IsochronValues[6:11] = isochron_2
@@ -379,9 +409,16 @@ def calc_ratio(sample: Sample, monte_carlo: bool = False):
379
409
  if monte_carlo:
380
410
  res = monte_carlo_f(sample=sample)
381
411
  # where to display simulation results
382
- age, sage = calc.arr.transpose(list(res)) # res is a generator for [age, sage]
412
+ res = calc.arr.transpose(list(res)) # res is a generator for [age, sage, ...]
413
+ age, sage = res[:2]
383
414
  sample.ApparentAgeValues[1] = sage
384
415
 
416
+ # isochron data
417
+ isochron_1 = res[2:7]
418
+ isochron_2 = res[7:12]
419
+ sample.IsochronValues[0:5] = isochron_1
420
+ sample.IsochronValues[6:11] = isochron_2
421
+
385
422
 
386
423
  def monte_carlo_f(sample: Sample):
387
424
  """
@@ -456,7 +493,7 @@ def monte_carlo_f(sample: Sample):
456
493
 
457
494
  print(f"Monte Carlo Simulation For sequence {i + 1}")
458
495
 
459
- F = calc.corr.Monte_Carlo_F(
496
+ res = calc.corr.Monte_Carlo_F(
460
497
  ar40m=ar40m[i], ar39m=ar39m[i], ar38m=ar38m[i], ar37m=ar37m[i], ar36m=ar36m[i],
461
498
  ar40b=ar40b[i], ar39b=ar39b[i], ar38b=ar38b[i], ar37b=ar37b[i], ar36b=ar36b[i],
462
499
  M40=M40[i], M39=M39[i], M38=M38[i], M37=M37[i], M36=M36[i],
@@ -470,4 +507,4 @@ def monte_carlo_f(sample: Sample):
470
507
  MDF=MDF[i], stand_time_year=stand_time_year[i]
471
508
  )
472
509
 
473
- yield F
510
+ yield res