Moved gromacs module from mdevaluate to pygmx
This commit is contained in:
37
pygmx/gromacs/logarithmic.pyx
Normal file
37
pygmx/gromacs/logarithmic.pyx
Normal file
@@ -0,0 +1,37 @@
|
||||
from libc.math cimport floor, ceil, fabs, log10
|
||||
|
||||
def is_log_step(long long step, long long per_decade):
|
||||
|
||||
# The first step will never be written
|
||||
if step == 0:
|
||||
return True
|
||||
|
||||
if step == 1:
|
||||
return True
|
||||
|
||||
|
||||
cdef double log_step = log10(step)
|
||||
cdef double log_next = log10(step+1)
|
||||
cdef double log_prev = log10(step-1)
|
||||
cdef long long decade = int(log10(step))
|
||||
|
||||
# Idea: Is there a number x = decade + n / per_decade
|
||||
# with 0 <= n < per_decade where
|
||||
# | log_step - x | <= | log_prev - x |
|
||||
# | log_step - x | < | log_next - x |
|
||||
|
||||
# Calculate the closest numbers
|
||||
|
||||
cdef double n_smaller = floor((log_step - decade) * per_decade);
|
||||
cdef double n_larger = ceil((log_step - decade) * per_decade);
|
||||
|
||||
cdef double prev_dist = fabs(log_prev-decade-n_smaller/per_decade);
|
||||
cdef double dist_to_smaller = fabs(log_step-decade-n_smaller/per_decade);
|
||||
|
||||
cdef double next_dist = fabs(log_next-decade-n_larger/per_decade);
|
||||
cdef double dist_to_larger = fabs(log_step-decade-n_larger/per_decade);
|
||||
|
||||
if dist_to_larger < next_dist or dist_to_smaller <= prev_dist:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
Reference in New Issue
Block a user