wrap.py🔗
aimsprop.wrap
🔗
Functions🔗
unwrap_property(bundle: Bundle, key: str, period: float, N: int = 1, match_all: bool = False)
🔗
Unwrap a periodic property to be maximally continuous through time for each label.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
bundle |
Bundle |
the Bundle object to compute the property for (modified in place) |
required |
key |
str |
the name of the original property |
required |
period |
float |
the periodicity of the property |
required |
N |
int |
the number of images to try in +/- wings |
1 |
match_all |
bool |
whether to wrap all labels to same sign |
False |
Returns:
Type | Description |
---|---|
bundle |
reference to the input Bundle object. The property key is overwritten with the unwrapped property. |
Source code in aimsprop/wrap.py
def unwrap_property(
bundle: Bundle,
key: str,
period: float,
N: int = 1,
match_all: bool = False,
):
"""Unwrap a periodic property to be maximally continuous through time for
each label.
Params:
bundle: the Bundle object to compute the property for (modified in
place)
key: the name of the original property
period: the periodicity of the property
N: the number of images to try in +/- wings
match_all: whether to wrap all labels to same sign
Return:
bundle: reference to the input Bundle object. The
property key is overwritten with the unwrapped property.
"""
if match_all:
ref_frame = bundle.subset_by_label(bundle.labels[0]).frames[0]
else:
ref_frame = None
for label in bundle.labels:
frame_old = ref_frame
for frame in bundle.subset_by_label(label).frames:
if frame_old is None: # Property has just started
frame_old = frame
continue
prop_old = frame_old.properties[key]
prop = frame.properties[key]
vals = [prop + k * period for k in range(-N, +N + 1)]
frame.properties[key] = min(vals, key=lambda x: abs(x - prop_old))
frame_old = frame
return bundle