Source code for pipeline.hsd.heuristics.fragmentation

import pipeline.infrastructure as infrastructure
import pipeline.infrastructure.api as api

LOG = infrastructure.get_logger(__name__)


[docs]class FragmentationHeuristics(api.Heuristic): """ Determine fragmentation from given total number of channels, edge channels to be dropped, and polynomial order for baseline fit. """ MaxOrder = 9 MaxFragmentation = 3 MinChannels = 512
[docs] def calculate(self, polyorder, nchan, edge, modification=0): """ Determine fragmentation from given total number of channels, edge channels to be dropped, and polynomial order for baseline fit. Inputs: polyorder -- polynomial order for baseline fit nchan -- number of channels edge -- edge channels to be dropped given by tuple, (left, right) modification -- modification factor for polyorder Returns: fragment -- fragmentation parameter num_segment -- number of segments segment_polyorder -- polynomial order for baseline fit of segments """ _polyorder = polyorder + modification _nchan = nchan - sum(edge) fragment = int(min(_polyorder // self.MaxOrder + 1, max(_nchan // self.MinChannels, 1))) fragment = min(fragment, self.MaxFragmentation) num_segment = fragment * 2 - 1 segment_polyorder = min(int(_polyorder // fragment) + fragment - 1, self.MaxOrder) return (fragment, num_segment, segment_polyorder)