The stringApp is implemented in Java utilizing the Cytoscape 3.6 App API. The app has two main functions: (1) to serve as a bridge between Cytoscape and the web service APIs of STRING and the related databases, and (2) to provide visualizations resembling the ones on the STRING web server as well as additional features like the side panel and enrichment visualizations. These two functions work together to bring much of the richness of the STRING website into Cytoscape, which then allows the network and all associated data to be analyzed with Cytoscape and its hundreds of other apps. For instance, the clusterMaker2 app
4 can be very useful for clustering STRING networks, as shown in the use case below.
The bridge functionality of the stringApp uses several RESTful
11 web service APIs to query the databases and retrieve networks. In case of protein and protein/compound queries, the app first resolves the entered query terms to the internal database identifiers using the standard STRING and STITCH API. For disease queries, it instead contacts the API of the DISEASES database twice, first to resolve the entered disease name to a disease identifier, and second to retrieve the list of proteins associated with the disease. For all three types of queries, stringApp provides the user with the ability to manually resolve any ambiguous names. The handling of PubMed queries was described in the previous section. Irrespective of the type of query, these steps result in a list of nodes, for which stringApp retrieves all node and edge data by calling the web service API of the dedicated PostgreSQL database. The latter API is also used to retrieve any node or edge data required when expanding an existing network, lowering the confidence cutoff, or adding additional nodes to a network.
The stringApp retrieves functional enrichment analysis results for a whole STRING network or a selected subset of it by sending a request to the STRING enrichment API. The results are stored and shown in a Cytoscape table called STRING Enrichment, which lists all enriched terms along with their gene counts, corresponding FDR values, and gene sets. Since the list of enriched terms can become very long, especially for large networks, the app allows the user to filter the enrichment results to show terms from any combination of six term categories as well as to eliminate redundant terms, which represent similar sets of genes.
The redundancy filtering takes the list of enriched terms sorted by FDR value and removes the terms that are too similar to any of the previous, better scoring terms that were not themselves removed (also referred to as the Hobohm 1 method
12 (link)). The similarity between two terms is measured by the Jaccard index of the sets of genes annotated by the two terms. A term is added to the filtered list only if it has Jaccard similarity less than the user-specified redundancy cutoff to any other term already in the filtered list.
To retain the look and feel of STRING networks, the stringApp adds a new
STRING Visual Style to the already existing set of Cytoscape styles. This style enables the glass ball effect and the optional visualization of the protein or compound structures within the nodes. These visual properties can be enabled or disabled by the user from the stringApp menu. The initial node colors are assigned arbitrarily by the app but can be easily substituted by a node color mapping of any node attribute. In addition to the node visual properties, the STRING style also includes a mapping of the interaction confidence scores to edge color and thickness.
Doncheva N.T., Morris J.H., Gorodkin J, & Jensen L.J. (2018). Cytoscape StringApp: Network Analysis and Visualization of Proteomics Data. Journal of proteome research, 18(2), 623-632.