ararpy 0.1.14__py3-none-any.whl → 0.1.17__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 +1 -1
- ararpy/calc/age.py +9 -8
- ararpy/calc/basic.py +30 -1
- ararpy/calc/corr.py +35 -22
- ararpy/calc/regression.py +4 -3
- ararpy/files/calc_file.py +24 -15
- ararpy/smp/basic.py +50 -12
- ararpy/smp/corr.py +8 -6
- ararpy/smp/diffusion_funcs.py +73 -99
- ararpy/smp/export.py +216 -86
- ararpy/smp/initial.py +34 -20
- ararpy/smp/plots.py +11 -10
- ararpy/smp/sample.py +14 -9
- ararpy/smp/style.py +13 -5
- ararpy/smp/table.py +19 -21
- ararpy/{argon_diffusion_simulator → thermo}/__init__.py +1 -1
- ararpy/thermo/arrhenius.py +15 -0
- ararpy/{argon_diffusion_simulator/main.py → thermo/atomic_level_random_walk.py} +95 -6
- ararpy/thermo/basic.py +306 -0
- {ararpy-0.1.14.dist-info → ararpy-0.1.17.dist-info}/METADATA +17 -3
- {ararpy-0.1.14.dist-info → ararpy-0.1.17.dist-info}/RECORD +24 -22
- {ararpy-0.1.14.dist-info → ararpy-0.1.17.dist-info}/WHEEL +1 -1
- {ararpy-0.1.14.dist-info → ararpy-0.1.17.dist-info/licenses}/LICENSE +0 -0
- {ararpy-0.1.14.dist-info → ararpy-0.1.17.dist-info}/top_level.txt +0 -0
ararpy/smp/diffusion_funcs.py
CHANGED
|
@@ -15,12 +15,11 @@
|
|
|
15
15
|
import os
|
|
16
16
|
import shutil
|
|
17
17
|
import numpy as np
|
|
18
|
+
|
|
19
|
+
from ..thermo.basic import fit
|
|
20
|
+
|
|
18
21
|
np.set_printoptions(precision=18, threshold=10000, linewidth=np.inf)
|
|
19
22
|
import math
|
|
20
|
-
import random
|
|
21
|
-
import scipy.stats as stats
|
|
22
|
-
from scipy.interpolate import griddata
|
|
23
|
-
from scipy.special import comb
|
|
24
23
|
from datetime import datetime as dt
|
|
25
24
|
import re
|
|
26
25
|
import time
|
|
@@ -4146,88 +4145,6 @@ class Ran1Generator:
|
|
|
4146
4145
|
return ran1
|
|
4147
4146
|
|
|
4148
4147
|
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
def fit(x, y, sigx, sigy, ndata=None):
|
|
4152
|
-
|
|
4153
|
-
print(f"{x = }")
|
|
4154
|
-
print(f"{y = }")
|
|
4155
|
-
print(f"{sigx = }")
|
|
4156
|
-
print(f"{sigy = }")
|
|
4157
|
-
|
|
4158
|
-
if ndata is None:
|
|
4159
|
-
ndata = len(x)
|
|
4160
|
-
nd = 20
|
|
4161
|
-
imax = 20
|
|
4162
|
-
xerr = 0.001
|
|
4163
|
-
wt = []
|
|
4164
|
-
r = 0.
|
|
4165
|
-
a = 0
|
|
4166
|
-
b = -1.
|
|
4167
|
-
siga = 0
|
|
4168
|
-
sigb = 0
|
|
4169
|
-
chi2 = 0
|
|
4170
|
-
q = 0
|
|
4171
|
-
iter = 0
|
|
4172
|
-
|
|
4173
|
-
while iter <= imax:
|
|
4174
|
-
sx = 0.
|
|
4175
|
-
sy = 0.
|
|
4176
|
-
st2 = 0.
|
|
4177
|
-
st3 = 0.
|
|
4178
|
-
ss = 0.
|
|
4179
|
-
b0 = b
|
|
4180
|
-
|
|
4181
|
-
for i in range(ndata):
|
|
4182
|
-
wt.append(0)
|
|
4183
|
-
wt[i] = 1. / (sigy[i] ** 2 + b ** 2 * sigx[i] ** 2 - 2 * r * sigx[i] * sigy[i])
|
|
4184
|
-
ss = ss + wt[i]
|
|
4185
|
-
sx = sx + x[i] * wt[i]
|
|
4186
|
-
sy = sy + y[i] * wt[i]
|
|
4187
|
-
|
|
4188
|
-
# print(f"{x[i] = }, {y[i] = }, {wt[i] = }")
|
|
4189
|
-
|
|
4190
|
-
sxoss = sx / ss
|
|
4191
|
-
syoss = sy / ss
|
|
4192
|
-
|
|
4193
|
-
for i in range(ndata):
|
|
4194
|
-
t1 = (x[i] - sxoss) * sigy[i] ** 2
|
|
4195
|
-
t2 = (y[i] - syoss) * sigx[i] ** 2 * b
|
|
4196
|
-
t3 = sigx[i] * sigy[i] * r
|
|
4197
|
-
st2 = st2 + wt[i] ** 2 * (y[i] - syoss) * (t1 + t2 - t3 * (y[i] - syoss))
|
|
4198
|
-
st3 = st3 + wt[i] ** 2 * (x[i] - sxoss) * (t1 + t2 - b * t3 * (x[i] - sxoss))
|
|
4199
|
-
|
|
4200
|
-
b = st2 / st3
|
|
4201
|
-
iter = iter + 1
|
|
4202
|
-
|
|
4203
|
-
# print(f"{sxoss = }, {syoss = }, {b = }, {abs(b0 - b) = }")
|
|
4204
|
-
|
|
4205
|
-
if abs(b0 - b) > xerr:
|
|
4206
|
-
continue
|
|
4207
|
-
|
|
4208
|
-
a = (syoss - sxoss * b)
|
|
4209
|
-
# print(f"{a = }, {b = }")
|
|
4210
|
-
sgt1 = 0.
|
|
4211
|
-
sgt2 = 0.
|
|
4212
|
-
|
|
4213
|
-
for i in range(ndata):
|
|
4214
|
-
sgt1 = sgt1 + wt[i] * (x[i] - sxoss) ** 2
|
|
4215
|
-
sgt2 = sgt2 + wt[i] * x[i] ** 2
|
|
4216
|
-
|
|
4217
|
-
sigb = (1. / sgt1) ** 0.5
|
|
4218
|
-
siga = sigb * (sgt2 / ss) ** 0.5
|
|
4219
|
-
chi2 = 0.
|
|
4220
|
-
|
|
4221
|
-
for i in range(ndata):
|
|
4222
|
-
chi2 = chi2 + wt[i] * (y[i] - a - b * x[i]) ** 2
|
|
4223
|
-
|
|
4224
|
-
q = gammq(0.5 * (ndata - 2), 0.5 * chi2)
|
|
4225
|
-
|
|
4226
|
-
if abs(b0 - b) <= xerr:
|
|
4227
|
-
break
|
|
4228
|
-
|
|
4229
|
-
return a, b, siga, sigb, chi2, q
|
|
4230
|
-
|
|
4231
4148
|
def gammq(a, x):
|
|
4232
4149
|
if x < 0 or a <= 0:
|
|
4233
4150
|
raise ValueError("ERROR(GAMMQ): x < 0 or a <= 0")
|
|
@@ -4575,7 +4492,7 @@ def run_agemon_dll(sample: Sample, source_dll_path: str, loc: str, data, max_age
|
|
|
4575
4492
|
return
|
|
4576
4493
|
|
|
4577
4494
|
|
|
4578
|
-
def
|
|
4495
|
+
def dr2_sphere(f, ti, ar, sar, ln=True, bp=0.85):
|
|
4579
4496
|
"""
|
|
4580
4497
|
|
|
4581
4498
|
Used in Popov 2020. It is related to the sphere model.
|
|
@@ -4585,6 +4502,10 @@ def dr2_popov(f, ti, ar, sar, ln=True):
|
|
|
4585
4502
|
----------
|
|
4586
4503
|
f: cumulative 39Ar released, array
|
|
4587
4504
|
ti: heating time, array
|
|
4505
|
+
ar:
|
|
4506
|
+
sar:
|
|
4507
|
+
ln:
|
|
4508
|
+
bp:
|
|
4588
4509
|
|
|
4589
4510
|
Returns
|
|
4590
4511
|
-------
|
|
@@ -4612,9 +4533,8 @@ def dr2_popov(f, ti, ar, sar, ln=True):
|
|
|
4612
4533
|
|
|
4613
4534
|
# Popov 2020, sphere model
|
|
4614
4535
|
model = geometric_model(geo='sphere')
|
|
4615
|
-
dtr2 = [model(bp=
|
|
4616
|
-
dr2 = [(dtr2[i] - (dtr2[i - 1] if i > 0 else 0)) / ti[i] for i in range(len(dtr2))]
|
|
4617
|
-
dr2[-1] = math.log((1 - f[-2]) / (1 - f[-1])) / pi ** 2 / ti[-1]
|
|
4536
|
+
dtr2 = [model(bp=bp)[1](fi) for fi in f]
|
|
4537
|
+
dr2 = np.array([(dtr2[i] - (dtr2[i - 1] if i > 0 else 0)) / ti[i] for i in range(len(dtr2))])
|
|
4618
4538
|
|
|
4619
4539
|
# =IF(M5<85,((-SUM(H5:$H$35)/3/SUM($H$4:$H$35)^2/SQRT(1-PI()/3*SUM($H$4:H4)/SUM($H$4:$H$35))/(D5*60)+SUM(H6:$H$35)/3/SUM($H$4:$H$35)^2/SQRT(1-PI()/3*SUM($H$4:H5)/SUM($H$4:$H$35))/(D5*60)+H5/3/SUM($H$4:$H$35)^2/(D5*60))^2),0)
|
|
4620
4540
|
sar_lt = np.zeros(n) # 偏导数
|
|
@@ -4624,7 +4544,7 @@ def dr2_popov(f, ti, ar, sar, ln=True):
|
|
|
4624
4544
|
sdr2 = np.zeros(n)
|
|
4625
4545
|
for i in range(n):
|
|
4626
4546
|
if i == 0:
|
|
4627
|
-
if f[i] <
|
|
4547
|
+
if f[i] < bp:
|
|
4628
4548
|
sar_lt[i] = 0
|
|
4629
4549
|
sar_eq[i] = ((1 / math.sqrt(1 - pi * f[i] / 3) - 1) / (3 * ti[i])) * ((sum(ar) - ar[i] - sum(ar[:i])) / sum(ar) ** 2)
|
|
4630
4550
|
sar_gt[i] = ((1 / math.sqrt(1 - pi * f[i] / 3) - 1) / (3 * ti[i])) * ((0 - ar[i] - sum(ar[:i])) / sum(ar) ** 2)
|
|
@@ -4633,7 +4553,7 @@ def dr2_popov(f, ti, ar, sar, ln=True):
|
|
|
4633
4553
|
sar_eq[i] = (1 / (pi ** 2 * ti[i] * (f[i] - 1))) * ((sum(ar) - ar[i] - sum(ar[:i])) / sum(ar) ** 2)
|
|
4634
4554
|
sar_gt[i] = (1 / (pi ** 2 * ti[i] * (f[i] - 1))) * ((0 - ar[i] - sum(ar[:i])) / sum(ar) ** 2)
|
|
4635
4555
|
else:
|
|
4636
|
-
if f[i] <
|
|
4556
|
+
if f[i] < bp:
|
|
4637
4557
|
sar_lt[i] = ((1 / math.sqrt(1 - pi * f[i] / 3) - 1) / (3 * ti[i])) * ((sum(ar) - ar[i] - sum(ar[:i])) / sum(ar) ** 2) - ((1 / math.sqrt(1 - pi * f[i-1] / 3) - 1) / (3 * ti[i])) * ((sum(ar) - ar[i-1] - sum(ar[:i-1])) / sum(ar) ** 2)
|
|
4638
4558
|
sar_eq[i] = ((1 / math.sqrt(1 - pi * f[i] / 3) - 1) / (3 * ti[i])) * ((sum(ar) - ar[i] - sum(ar[:i])) / sum(ar) ** 2) - ((1 / math.sqrt(1 - pi * f[i-1] / 3) - 1) / (3 * ti[i])) * ((0 - ar[i-1] - sum(ar[:i-1])) / sum(ar) ** 2)
|
|
4639
4559
|
sar_gt[i] = ((1 / math.sqrt(1 - pi * f[i] / 3) - 1) / (3 * ti[i])) * ((0 - ar[i] - sum(ar[:i])) / sum(ar) ** 2) - ((1 / math.sqrt(1 - pi * f[i-1] / 3) - 1) / (3 * ti[i])) * ((0 - ar[i-1] - sum(ar[:i-1])) / sum(ar) ** 2)
|
|
@@ -4647,10 +4567,10 @@ def dr2_popov(f, ti, ar, sar, ln=True):
|
|
|
4647
4567
|
logdr2 = np.log(dr2) if ln else np.log10(dr2)
|
|
4648
4568
|
wt = np.abs(sdr2 / dr2) if ln else np.abs(sdr2 / dr2) / np.log(10)
|
|
4649
4569
|
|
|
4650
|
-
return
|
|
4570
|
+
return dr2, logdr2, wt
|
|
4651
4571
|
|
|
4652
4572
|
|
|
4653
|
-
def
|
|
4573
|
+
def dr2_plane(f, ti, ar, sar, ln=True):
|
|
4654
4574
|
"""
|
|
4655
4575
|
|
|
4656
4576
|
Plane sheet model
|
|
@@ -4733,7 +4653,7 @@ def dr2_lovera(f, ti, ar, sar, ln=True):
|
|
|
4733
4653
|
# wt = np.abs(sdr2 / dr2)
|
|
4734
4654
|
# wt = errcal(f, ti, ar, sar)
|
|
4735
4655
|
|
|
4736
|
-
|
|
4656
|
+
logdr2 = np.log(dr2) if ln else np.log10(dr2)
|
|
4737
4657
|
#ee = 1 / np.log(10)
|
|
4738
4658
|
ee = 0.4342944819
|
|
4739
4659
|
wt = np.abs(sdr2 / dr2) if ln else np.abs(sdr2 / dr2) * ee
|
|
@@ -4746,7 +4666,61 @@ def dr2_lovera(f, ti, ar, sar, ln=True):
|
|
|
4746
4666
|
### errcal(f, ti, ar, sar)和这里的计算有非常少的差异,但这样的差异足以导致迭代次数变化,但不一定导致agemon结果有大的差异
|
|
4747
4667
|
"""
|
|
4748
4668
|
|
|
4749
|
-
return dr2,
|
|
4669
|
+
return dr2, logdr2, wt
|
|
4670
|
+
|
|
4671
|
+
|
|
4672
|
+
def dr2_thern(f, ti, ar, sar, ln=True):
|
|
4673
|
+
"""
|
|
4674
|
+
|
|
4675
|
+
Plane sheet model
|
|
4676
|
+
|
|
4677
|
+
Parameters
|
|
4678
|
+
----------
|
|
4679
|
+
f
|
|
4680
|
+
ti
|
|
4681
|
+
ar
|
|
4682
|
+
sar
|
|
4683
|
+
ln
|
|
4684
|
+
|
|
4685
|
+
Returns
|
|
4686
|
+
-------
|
|
4687
|
+
|
|
4688
|
+
"""
|
|
4689
|
+
|
|
4690
|
+
f = np.array(f)
|
|
4691
|
+
ti = np.array(ti)
|
|
4692
|
+
# ti = np.cumsum(ti)
|
|
4693
|
+
n = min(len(f), len(ti))
|
|
4694
|
+
ar = np.array(ar)
|
|
4695
|
+
# f = ar / sum(ar)
|
|
4696
|
+
sar = np.array(sar)
|
|
4697
|
+
sar2 = sar ** 2
|
|
4698
|
+
ti = ti * 60 # in seconds
|
|
4699
|
+
sti = [90 for i in range(n)]
|
|
4700
|
+
|
|
4701
|
+
# sf = sqrt(b ** 2 * siga ** 2 + a ** 2 * sigb ** 2) / (a + b) ** 2
|
|
4702
|
+
# sf = [math.sqrt(sar[i + 1:].sum() ** 2 * (sar[:i + 1] ** 2).sum() + ar[:i + 1].sum() ** 2 * (sar[i + 1:] ** 2).sum()) / ar.sum() ** 2 for i in range(len(ar) - 1)]
|
|
4703
|
+
# sf.append(0)
|
|
4704
|
+
|
|
4705
|
+
f = np.where(f >= 1, 0.9999999999999999, f)
|
|
4706
|
+
|
|
4707
|
+
dtr2 = np.where(f > 0.85, -np.log(math.pi ** 2 * (1 - f) / 6) / (math.pi ** 2),
|
|
4708
|
+
2 / math.pi * (1 - np.sqrt(1 - math.pi * f / 3)) - f / 3)
|
|
4709
|
+
|
|
4710
|
+
# dr2 = np.array([v / ti[i] if i == 0 else (dtr2[i] - dtr2[i-1]) / ti[i] for i, v in enumerate(dtr2)])
|
|
4711
|
+
dr2 = dtr2 / ti
|
|
4712
|
+
|
|
4713
|
+
xlogd = np.log(dr2) if ln else np.log10(dr2)
|
|
4714
|
+
sdr2 = np.ones(len(dr2))
|
|
4715
|
+
ee = 0.4342944819
|
|
4716
|
+
wt = np.abs(sdr2 / dr2) if ln else np.abs(sdr2 / dr2) * ee
|
|
4717
|
+
|
|
4718
|
+
# dr2, xlogd, wt = dr2_sphere(f, ti, ar, sar, ln, bp=0.85)
|
|
4719
|
+
r2 = 0.01 ** 2
|
|
4720
|
+
d = dr2 * r2
|
|
4721
|
+
logd = np.log(d)
|
|
4722
|
+
|
|
4723
|
+
return d, logd, wt
|
|
4750
4724
|
|
|
4751
4725
|
|
|
4752
4726
|
def dr2_yang(f, ti, ar, sar, ln=True):
|
|
@@ -4785,9 +4759,9 @@ def dr2_yang(f, ti, ar, sar, ln=True):
|
|
|
4785
4759
|
dr2 = dtr2 / ti
|
|
4786
4760
|
sdr2 = np.array([math.sqrt((1 / ti[i]) ** 2 * sdtr2[i] ** 2 + dtr2[i] ** 2 / ti[i] ** 4 * sti[i] ** 2) for i in range(n)])
|
|
4787
4761
|
|
|
4788
|
-
|
|
4789
|
-
wt =
|
|
4790
|
-
return dr2,
|
|
4762
|
+
logdr2 = np.log(dr2) if ln else np.log10(dr2)
|
|
4763
|
+
wt = np.abs(sdr2 / dr2) if ln else np.abs(sdr2 / dr2) / np.log(10)
|
|
4764
|
+
return dr2, logdr2, wt
|
|
4791
4765
|
|
|
4792
4766
|
|
|
4793
4767
|
def errcal(f, ti, ar, sar):
|