Skip to content
Snippets Groups Projects
Commit 959f0716 authored by Tobias Hangleiter's avatar Tobias Hangleiter
Browse files

Smarter handling of defaults

parent 26cf6b50
No related branches found
No related tags found
1 merge request!20Bugfixes and small improvements
...@@ -629,14 +629,17 @@ class DAQSettings(dict): ...@@ -629,14 +629,17 @@ class DAQSettings(dict):
# user-set fs or df take precedence over noverlap # user-set fs or df take precedence over noverlap
if 'fs' in self and 'df' in self: if 'fs' in self and 'df' in self:
return ceil(self['fs'] / self['df']) return ceil(self['fs'] / self['df'])
if 'n_pts' in self and 'n_seg' in self: if 'n_pts' in self:
if 'noverlap' in self: if 'noverlap' in self and 'n_seg' in self:
return int((self['n_pts'] + (self['n_seg'] - 1) * self['noverlap']) return int((self['n_pts'] + (self['n_seg'] - 1) * self['noverlap'])
/ self['n_seg']) / self['n_seg'])
if default: if default:
n_seg = self.get('n_seg', self.DEFAULT_N_SEG)
if 'noverlap' not in self:
a, b = self.DEFAULT_NOVERLAP_MAPPING a, b = self.DEFAULT_NOVERLAP_MAPPING
return ceil((self['n_pts'] + (self['n_seg'] - 1) * b) return ceil((self['n_pts'] + (n_seg - 1) * b) / (n_seg - (n_seg - 1) / a))
/ (self['n_seg'] - (self['n_seg'] - 1) / a)) return int((self['n_pts'] + (n_seg - 1) * self['noverlap']) / n_seg)
# Could not infer from directly related quantities. Try with f_min/f_max and their defaults # Could not infer from directly related quantities. Try with f_min/f_max and their defaults
df = self.get('df', self.get('f_min', self.DEFAULT_DF if default else inf)) df = self.get('df', self.get('f_min', self.DEFAULT_DF if default else inf))
fs = self.get('fs', self.get('f_max', self.DEFAULT_FS / 2 if default else inf) * 2) fs = self.get('fs', self.get('f_max', self.DEFAULT_FS / 2 if default else inf) * 2)
...@@ -662,12 +665,13 @@ class DAQSettings(dict): ...@@ -662,12 +665,13 @@ class DAQSettings(dict):
return None return None
def _infer_n_seg(self, default: bool = False) -> int | None: def _infer_n_seg(self, default: bool = False) -> int | None:
if nperseg is not None and not isinf(n_pts):
# Maximize n_seg using the largest possible noverlap
noverlap = self.get('noverlap',
min(self._infer_noverlap() or inf, self._domain_noverlap.max()))
nperseg = self.get('nperseg') or self._infer_nperseg() nperseg = self.get('nperseg') or self._infer_nperseg()
n_pts = self.get('n_pts') or self._infer_n_pts() or self._domain_n_pts.max() n_pts = self.get('n_pts') or self._infer_n_pts() or self._domain_n_pts.max()
noverlap = self.get('noverlap') or self._infer_noverlap()
if default and nperseg is not None and not isinf(n_pts):
a, b = self.DEFAULT_NOVERLAP_MAPPING
noverlap = noverlap or nperseg // a + b
if nperseg is not None and not isinf(n_pts) and noverlap is not None:
return floor((n_pts - noverlap) / (nperseg - noverlap)) return floor((n_pts - noverlap) / (nperseg - noverlap))
if default: if default:
return self.DEFAULT_N_SEG return self.DEFAULT_N_SEG
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment