Source code for ddd_pylib.tracking._trackpy_strategy
from ._base_tracking_strategy import BaseTrackingStrategy
import trackpy as tp
import pandas as pd
[docs]
class TrackpyStrategy(BaseTrackingStrategy):
def __init__(self):
super().__init__()
tp.quiet(True)
self._adaptiveStop = 0.01
self._adaptiveStep = 0.75
[docs]
def getAdaptiveStop(self) -> float:
return self._adaptiveStop
[docs]
def setAdaptiveStop(self, stop: float):
if stop <= 0:
raise ValueError("Adaptive stop must be positive.")
self._adaptiveStop = stop
[docs]
def getAdaptiveStep(self) -> float:
return self._adaptiveStep
[docs]
def setAdaptiveStep(self, step: float):
if step <= 0 or step >= 1:
raise ValueError("Adaptive step must be between 0 and 1.")
self._adaptiveStep = step
def _linkTracks(self) -> pd.DataFrame:
d = self.getDetections()
predictor = tp.predict.NearestVelocityPredict()
pos_columns = [a for a in ['Z', 'Y', 'X'] if a in d.columns]
linked = predictor.link_df(
d,
search_range=self._searchingDistance,
memory=self._getUncalibratedMemory(),
pos_columns=pos_columns,
t_column='T',
adaptive_stop=self._adaptiveStop,
adaptive_step=self._adaptiveStep
)
d["track_id"] = linked["particle"].astype(int) + 1
return d