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.
@@ -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 dr2_popov(f, ti, ar, sar, ln=True):
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=0.85)[1](fi) for fi in f]
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] < 0.85:
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] < 0.85:
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 dtr2, logdr2, wt
4570
+ return dr2, logdr2, wt
4651
4571
 
4652
4572
 
4653
- def dr2_lovera(f, ti, ar, sar, ln=True):
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
- xlogd = logdr2 = np.log(dr2) if ln else np.log10(dr2)
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, xlogd, wt
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
- xlogd = logdr2 = np.log(dr2) if ln else np.log10(dr2)
4789
- wt = sxlogd = np.abs(sdr2 / dr2) if ln else np.abs(sdr2 / dr2) / np.log(10)
4790
- return dr2, xlogd, wt
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):