def test_sima(self): """ (BlockMethod) with SIMA strategy """ # NOTE: this test was brittle and failed non-deterministically with any # more than one source import sima.segment # construct the SIMA strategy simaStrategy = sima.segment.STICA(components=1) simaStrategy.append(sima.segment.SparseROIsFromMasks(min_size=20)) simaStrategy.append(sima.segment.SmoothROIBoundaries()) simaStrategy.append(sima.segment.MergeOverlapping(threshold=0.5)) tsc = ThunderContext(self.sc) data = tsc.makeExample('sources', dims=(60, 60), centers=[[20, 15]], noise=0.5, seed=42) # create and fit the thunder extraction strategy strategy = SourceExtraction('sima', simaStrategy=simaStrategy) model = strategy.fit(data, size=(30, 30)) assert(model.count == 1) # check that the one center is recovered ep = 1.5 assert(model[0].distance([20, 15]) < ep)
def test_sima(self): """ (BlockMethod) with SIMA strategy """ # NOTE: this test was brittle and failed non-deterministically with any # more than one source import sima.segment # construct the SIMA strategy simaStrategy = sima.segment.STICA(components=1) simaStrategy.append(sima.segment.SparseROIsFromMasks(min_size=20)) simaStrategy.append(sima.segment.SmoothROIBoundaries()) simaStrategy.append(sima.segment.MergeOverlapping(threshold=0.5)) tsc = ThunderContext(self.sc) data = tsc.makeExample('sources', dims=(60, 60), centers=[[20, 15]], noise=0.5, seed=42) # create and fit the thunder extraction strategy strategy = SourceExtraction('sima', simaStrategy=simaStrategy) model = strategy.fit(data, size=(30, 30)) assert (model.count == 1) # check that the one center is recovered ep = 1.5 assert (model[0].distance([20, 15]) < ep)
def run(data): """ Run a source extraction algorithm on an Images object Parameters ---------- data : thunder.rdds.images.Images The data the algorithm will be run on Returns ------- result : thunder.extraction.source.SourceModel Sources found by the algorithm as a SourceModel object """ from thunder import SourceExtraction method = SourceExtraction('localmax') result = method.fit(data) return result
def test_local_max(self): """ (FeatureMethod) localmax with defaults """ tsc = ThunderContext(self.sc) data = tsc.makeExample('sources', dims=[60, 60], centers=[[10, 10], [40, 40]], noise=0.0, seed=42) model = SourceExtraction('localmax').fit(data) # order is irrelevant, but one of these must be true cond1 = (model[0].distance([10, 10]) == 0) and (model[1].distance([40, 40]) == 0) cond2 = (model[0].distance([40, 40]) == 0) and (model[1].distance([10, 10]) == 0) assert(cond1 or cond2)
def test_nmf(self): """ (BlockMethod) nmf with defaults """ tsc = ThunderContext(self.sc) data = tsc.makeExample('sources', dims=(60, 60), centers=[[20, 20], [40, 40]], noise=0.1, seed=42) model = SourceExtraction('nmf', componentsPerBlock=1).fit(data, size=(30, 30)) # order is irrelevant, but one of these must be true ep = 0.50 cond1 = (model[0].distance([20, 20]) < ep) and (model[1].distance([40, 40]) < ep) cond2 = (model[0].distance([40, 40]) < ep) and (model[1].distance([20, 20]) < ep) assert(cond1 or cond2)
def test_sima(self): """ (BlockMethod) with SIMA strategy """ import sima.segment # construct the SIMA strategy simaStrategy = sima.segment.STICA(components=2) simaStrategy.append(sima.segment.SparseROIsFromMasks(min_size=20)) simaStrategy.append(sima.segment.SmoothROIBoundaries()) simaStrategy.append(sima.segment.MergeOverlapping(threshold=0.5)) tsc = ThunderContext(self.sc) data = tsc.makeExample('sources', dims=(60, 60), centers=[[20, 15], [40, 45]], noise=0.1, seed=42) # create and fit the thunder extraction strategy strategy = SourceExtraction('sima', simaStrategy=simaStrategy) model = strategy.fit(data, size=(30, 30)) # order is irrelevant, but one of these must be true ep = 1.5 cond1 = (model[0].distance([20, 15]) < ep) and (model[1].distance([40, 45]) < ep) cond2 = (model[1].distance([20, 15]) < ep) and (model[0].distance([40, 45]) < ep) assert(cond1 or cond2)
def loadSources(self, path): """ Load a file with sources from a local file system or S3. Parameters ---------- path : str Path to file, can be on a local file system or an S3 bucket Returns ------- A SourceModel See also -------- thunder.SourceExtraction """ from thunder import SourceExtraction blob = self.loadJSON(path) return SourceExtraction.deserialize(blob)