ararpy 0.0.24__py3-none-any.whl → 0.1.1__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 +3 -5
- ararpy/calc/age.py +2 -2
- ararpy/calc/arr.py +25 -21
- ararpy/calc/basic.py +23 -0
- ararpy/calc/corr.py +32 -17
- ararpy/calc/err.py +9 -2
- ararpy/calc/jvalue.py +3 -2
- ararpy/calc/raw_funcs.py +1 -1
- ararpy/calc/regression.py +64 -4
- ararpy/examples/22WHA0433.age +0 -0
- ararpy/examples/22WHA0433.arr +0 -0
- ararpy/files/basic.py +2 -2
- ararpy/files/calc_file.py +1 -2
- ararpy/files/raw_file.py +238 -125
- ararpy/smp/__init__.py +1 -2
- ararpy/smp/basic.py +79 -12
- ararpy/smp/corr.py +97 -60
- ararpy/smp/diffusion_funcs.py +4745 -0
- ararpy/smp/export.py +287 -343
- ararpy/smp/initial.py +43 -20
- ararpy/smp/json.py +2 -2
- ararpy/smp/plots.py +151 -20
- ararpy/smp/raw.py +20 -14
- ararpy/smp/sample.py +43 -28
- ararpy/smp/style.py +5 -4
- ararpy/smp/table.py +66 -15
- ararpy/test.py +274 -13
- {ararpy-0.0.24.dist-info → ararpy-0.1.1.dist-info}/METADATA +1 -1
- ararpy-0.1.1.dist-info/RECORD +59 -0
- {ararpy-0.0.24.dist-info → ararpy-0.1.1.dist-info}/WHEEL +1 -1
- ararpy-0.0.24.dist-info/RECORD +0 -58
- {ararpy-0.0.24.dist-info → ararpy-0.1.1.dist-info}/LICENSE +0 -0
- {ararpy-0.0.24.dist-info → ararpy-0.1.1.dist-info}/top_level.txt +0 -0
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
42
|
-
blank_corrected[
|
|
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]
|
|
105
|
-
corrDecay39 = sample.TotalParam[105]
|
|
106
|
-
if corrDecay37
|
|
107
|
-
|
|
108
|
-
if corrDecay39
|
|
109
|
-
|
|
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]
|
|
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.
|
|
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]
|
|
152
|
-
set_negative_zero = sample.TotalParam[101]
|
|
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
|
|
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]
|
|
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]
|
|
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
|
-
|
|
198
|
-
|
|
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
|
-
|
|
243
|
-
sample.DegasValues[
|
|
244
|
-
sample.
|
|
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]
|
|
261
|
-
set_negative_zero = sample.TotalParam[101]
|
|
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
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
sample.
|
|
284
|
-
sample.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
510
|
+
yield res
|