def test_target_assignment_point_in_poly_2d_points_outside_of_cells(): """Create a set of intensities where no points fall into cells""" n = 10 diagonal_intensities, regions = bifurcated_regions(n) diagonal_intensities[ Indices.X.value] += 50 # now all x-values lie outside cell regions ta = TargetAssignment.PointInPoly2D() assigned_intensities = ta.run(diagonal_intensities, regions) assert np.array_equal(assigned_intensities[Features.CELL_ID].values, np.full(n, fill_value=None, dtype=object))
def test_target_assignment_point_in_poly_2d_all_points_in_cells(): """Create a set of intensities where all points lie inside the defined cell regions""" diagonal_intensities, regions = bifurcated_regions(10) ta = TargetAssignment.PointInPoly2D() assigned_intensities = ta.run(diagonal_intensities, regions) target_counts = pd.Series(*np.unique( assigned_intensities[Features.CELL_ID], return_counts=True)[::-1]) assert target_counts[0] == 5 assert target_counts[1] == 5
def iss_pipeline(fov, codebook): primary_image = fov.primary_image # register the raw images registration = Registration.FourierShiftRegistration( upsampling=1000, reference_stack=fov['dots'] ) registered = registration.run(primary_image, in_place=False) # filter raw data masking_radius = 15 filt = Filter.WhiteTophat(masking_radius, is_volume=False) filtered = filt.run(registered, verbose=True, in_place=False) # detect spots using laplacian of gaussians approach p = SpotFinder.GaussianSpotDetector( min_sigma=1, max_sigma=10, num_sigma=30, threshold=0.01, measurement_type='mean', ) blobs_image = fov['dots'].max_proj(Indices.ROUND, Indices.Z) intensities = p.run(filtered, blobs_image=blobs_image) # decode the pixel traces using the codebook decoded = codebook.decode_per_round_max(intensities) # segment cells seg = Segmentation.Watershed( dapi_threshold=.16, input_threshold=.22, min_distance=57, ) regions = seg.run(primary_image, fov['nuclei']) # assign spots to cells ta = TargetAssignment.PointInPoly2D() assigned = ta.run(decoded, regions) return assigned, regions