Evolvo, Latin for I unfurl or I draw out, is a system for navigating very large networks. The problem with large networks is that they cannot be visualized given the limitations of modern commodity hardware. Even if they could be visualized, it would be nearly impossible for an individual to make sense of a massive and complex network. By composing a network into tiers that are gradually expanded by the user, large networks can become viable. The user first loads the top-most tier, then gradually drills down into lower tiers of the network by expanding individual nodes. If the user finds that a node that was expanded is not useful, the user can collapse the node and move on to another portion of the network.
Evolvo cannot be used for any large, complex network. It can only be used for networks that can be organized into tiers or layers.
Here's an example from proteomics. Let's say there's a network whose nodes are proteins and edges represent significant similarity between two proteins. This network has hundreds of thousands of nodes and millions of edges. Highly similar proteins are grouped together into families. Families, in turn, can be grouped together into superfamilies. At the other end of the spectrum, some protein nodes can be decomposed into domains. This network can be organized into tiers: superfamilies, families, proteins, and domains. This network is well-suited for Evolvo. The user would first see the superfamilies and their relationships first. The user can expand a specific superfamily to see its constituting families. The user could also expand another superfamily and get another set of families. If relationships exist between these two groups of families, Evolvo will show them. The user can drill down into families and get proteins and domains.
Evolvo follows a client-server model. The server offers pieces of the network based on user requests. The client visualizes the network and issues requests to the server when the user wants to see a different portion of the network. How the server retrieves pieces of the network is irrelevant to the client. The client communicates with the server by HTTP, and all requests and network responses are in JSON.
Included in this repository is an example server (srv-example) and a client app for Cytoscape (EvolvoApp).
-
Install Leiningen, which is like Maven for Clojure projects. Leiningen can be installed with Homebrew:
brew install leiningen
-
In the
srv-example
directory, start the server:lein run
The server should now be running. You can ensure that it's running with curl
:
curl http://localhost:8000
You should then be getting some JSON back.
-
In the
EvolvoApp
directory, type:mvn clean install
-
Copy the EvolvoApp jar to CytoscapeConfiguration:
cp target/EvolvoApp-0.1.jar ~/CytoscapeConfiguration/3/apps/installed/
-
After starting Cytoscape, go to the menu bar and select Apps > Evolvo: Open Network. At the URL prompt, enter
http://localhost:8000/replace
orhttp://localhost:8000/augment
. Click OK. -
Right click on a node, and choose Apps > Evolvo: Expand. Choose Apps > Evolvo: Collapse to do the reverse.