Skip to content

Commit 1814da6

Browse files
committed
feat: added calculate_tr and caculate_rdf
1 parent 098fcb7 commit 1814da6

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

changelog.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1+
## 2.2.2 (upcoming)
2+
3+
### New features
4+
5+
- added calculate_rdf and calculate_tr functions to the transform module
6+
17
## 2.2.1 (2025/07/21)
28

39
### Bugfixes
410

511
- when optimizing the density, the lorch modififcation function is applied in accordance with the calculation configuration. This means, that it is applied before the chi-square calculation.
612

7-
813
## 2.2.0 (2025/07/21)
914

1015
### New features

glassure/transform.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,3 +217,35 @@ def calculate_gr(fr_pattern: Pattern, atomic_density: float) -> Pattern:
217217
r_safe = np.where(r == 0, 1e-10, r)
218218
g_r = 1 + f_r / (4.0 * np.pi * r_safe * atomic_density)
219219
return Pattern(r, g_r)
220+
221+
222+
def calculate_rdf(gr_pattern: Pattern, atomic_density: float) -> Pattern:
223+
"""
224+
Calculates a RDF pattern from a given g(r) pattern and the atomic density
225+
226+
RDF = 4 * pi * r^2 * g(r) * rho
227+
228+
:param gr_pattern: g(r) pattern
229+
:param atomic_density: atomic density in atoms/A^3
230+
231+
:return: RDF pattern
232+
"""
233+
r, g_r = gr_pattern.data
234+
rdf = 4 * np.pi * r**2 * g_r * atomic_density
235+
return Pattern(r, rdf)
236+
237+
238+
def calculate_tr(gr_pattern: Pattern, atomic_density: float) -> Pattern:
239+
"""
240+
Calculates a transfer function from a given g(r) pattern and the atomic density
241+
242+
T(r) = 4 * pi * r * g(r) * rho = RDF/r
243+
244+
:param gr_pattern: g(r) pattern
245+
:param atomic_density: atomic density in atoms/A^3
246+
247+
:return: transfer function
248+
"""
249+
r, g_r = gr_pattern.data
250+
tr = 4 * np.pi * r * g_r * atomic_density
251+
return Pattern(r, tr)

tests/test_transform.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
calculate_sq,
1717
calculate_fr,
1818
calculate_gr,
19+
calculate_rdf,
1920
calculate_sq_from_fr,
21+
calculate_rdf,
22+
calculate_tr,
2023
)
2124

2225
from . import unittest_data_path
@@ -186,3 +189,20 @@ def test_calculate_fr_then_sq_and_fr(sq):
186189
sq_from_fr = calculate_sq_from_fr(fr, sq.x, method="fft")
187190
fr_from_sq = calculate_fr(sq_from_fr)
188191
assert np.allclose(fr.y, fr_from_sq.y, atol=0.2)
192+
193+
194+
def test_calculate_rdf(sq, atomic_density):
195+
fr = calculate_fr(sq)
196+
gr = calculate_gr(fr, atomic_density)
197+
198+
rdf = calculate_rdf(gr, atomic_density)
199+
200+
assert np.allclose(rdf.y, 4 * np.pi * gr.x**2 * atomic_density * gr.y, atol=0.2)
201+
202+
203+
def test_calculate_tr(sq, atomic_density):
204+
fr = calculate_fr(sq)
205+
gr = calculate_gr(fr, atomic_density)
206+
rdf = calculate_rdf(gr, atomic_density)
207+
tr = calculate_tr(gr, atomic_density)
208+
assert np.allclose(tr.y, rdf.y / gr.x, atol=0.2)

0 commit comments

Comments
 (0)