Skip to content

Linking desktop PyQt with the layers backend #16

@cudmore

Description

@cudmore

Here are some ideas on the needed functions in the backend layer API so we can get up and running with it in the desktop PyQt app.

For a viewer, all we need is point and line dataframes.

Moving on to editing, we need a few more functions that are probably in the API and we can conform to what is already there.

Let me know what you think @Suhayb-A and @jtle00

import enum
import pandas as pd

class layerTypes(enum.Enum):
    # image = 'image'
    points = 'points'
    lines = 'lines'
    roi = 'roi'

class addToLayerAPI():

    def getPointAnnotations(self) -> pd.DataFrame:
        """Get the current point annotations as a pandas DataFrame.
        
        Notes
        -----
        The dataframe should have
         - One row per point
         - Columns names corresponding to columns in the original csv file.
        """
        pass

    def getLineAnnotations(self) -> pd.DataFrame:
        """Get the current line annotation as a pandas DataFrame.

        Notes
        -----
        The dataframe should have
         - One row per point in the tracing
         - Columns names corresponding to columns in the original csv file.
        """

    def getROIs(self, spineID : int) -> dict:
        """Get the x and y spine ROIs for the specified spine.
        
        Returns
        -------
        dict with the following keys:
            "xSpineRoi": list of x coordinates in the spine ROI
            "ySpineRoi": list of y coordinates in the spine ROI
            "xSegmentRoi": ...
            "ySegmentRoi": ...
            "xBackgroundSpineRoi": ...
            "yBackgroundSpineRoiRoi": ...
            "xBackgroundSegmentRoi": ...
            "yBackgroundSegmentRoi": ...
        """
    #
    # editing points
    # each time we call an edit (mutate) function, the backend point/line dataframe should be updated
    #    
    
    def addPoint(self, x : int, y : int, z : int, roiType):
        """Add a point annotation.
        """

    def addSpine(self, x : int, y : int, z : int, segmentID : int):
        """Add a spine point annotation.
        """

    def deletePoint(self, layerType : layerTypes, idx : int):
        """Delete a point/line annotation.
        """

    def setValue(self, layerType : layerTypes, pnt : int, col : str, value):
        """Set a property (column name) of an individual line/point annotation.
        """

    #
    # editing/tracing line segments
    #    
    # COMING SOON, API might need a few more functions

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions