This is a list of features that have been discussed for future inclusion into Cytoscape. This list is prioritized each year at the [[Cytoscape Retreat]] and a [[http://cytoscape.org/roadmap.php|Roadmap]] is created to estimate a year of Cytoscape development. === User Interface Features === 1. Move the network view using a hand icon 1. Most recently used file and directory saving available via the File menu that persists between sessions. 1. Layout a subset of a network for all layout algorithms. 1. Snap to grid option for positioning of nodes 1. Ability to specify initial network view when loading a network e.g. size, center, initial layout (could be part of a project file or preferences) 1. Ability to switch between tabbed/external/internal frame modes while Cytoscape is running. 1. Linked networks in "internal window mode": In internal window mode, when user selects nodes in one network, other networks should have option to have the identical nodes selected there too. 1. Operating specific shortcut keys. Currently Cytoscape shortcuts are more suited for Windows and Linux and don't work very well on the Mac. E.g. on the Mac, the command key instead of the ctrl key should be used. Also, some F keys interfere with normal Mac operation. 1. Allow selection of multiple networks in network list panel (CytoPanel 1). * Clicking on one item selects it and deselects all others * While holding the CTRL key, clicking on a * deselected item selects it * selected item deselects it * While holding the SHIFT key, clicking on a * deselected item selects all the items between the current and the previously selected one (if any) * selected item ... is a bit too complicated to explain 1. Ability to see the console in an optional java window for debugging purposes. 1. Change "center of zooming." Currently, zoom in/out function moves view to the center of the window. It is useful if we can zoom into selected objects by mouse wheel. 1. Get rid of the Attribute Modification dialog in the attribute browser. Instead, provide spreadsheet like functionality that allows new attributes to be created that are functions of filters or other attributes. 1. User should be able to select nodes connected to currently selected edges and select edges connected to currently selected nodes. 1. When selecting a node in the network view, the browser should automatically switch to the Node Attribute tab. When selected an edge in the network view, the browser should automatically switch to the Edge Attribute tab. When both nodes and edges are selected, do nothing. 1. Allow toggling between displaying multiple edges between the same nodes and not. 1. Provide a way to change the distance multiple edges are separated by. 1. Select multiple nodes/edges and apply some visualization to that node/edge. One approach would be to set a bypass value for all selected nodes/edges. Another would be to create a new attribute from the selection that could then be used by the VizMapper. 1. Allow multiple visual bypass attributes to be set at once (for a single node/edge). I would approach this by replacing the bypass menu with a popup dialog that provides the same list, just doesn't close when finished. 1. Zoom out to display all of current network should account for edges. This means that in addition to looking at node positions, we'd need to look at edge handle positions as well when determining the extents of a network. Perhaps if the edge handles were kept in an RTree as well, this wouldn't be too horrific. 1. Select self loops 1. select graph components with a given number of nodes with a certain attribute e.g. active vs. inactive nodes. Find a cluster with a at least 5 actives. 1. quickfind and filter should be able to hide/show in addition to select/deselect. 1. Cytoscape feature in vizmapper – Show a histogram for attribute values in the vizmapper so you can choose colors more intelligently i.e. choose primary colors for the most frequent values - or better yet, have a coloring scheme that does this automatically. 1. Evaluate all dialog boxes to see how space can be saved when working on a 1024x768 screen resolution. Some dialog boxes are too large for this size. === Core Features === 1. Multiple node attributes viewed per node 1. We need a [[generic_preferences_system]] for all the various user preferences that we are setting up. 1. Cut/paste into other applications - clipboard: Cytoscape retreat feature request: Cut and paste should work within Cytoscape and between Cytoscape and external applications. E.g. user cuts .sif file from Excel to Cytoscape, or user copies network into Adobe Photoshop and it becomes an image. 1. Standard algorithm package for graphs e.g. shortest path, etc. 1. Better support for undirected graphs. Issue: when creating edge attributes with programs outside of Cytoscape, the edge attributes must be created in both directions (duplicating all information) in order to guarantee matching up with the edges in Cytoscape. 1. Option to turn off requirement for X display: headless mode - could be useful for running plugins to do analysis without running Cytoscape application. 1. [[Future_Cytoscape_Features/Metanode_core_API_support_with_GUI|/Metanode core API support with GUI]]: We should allow users to collapse and expand nodes (expose the metanode API via a GUI). This will be especially useful for dealing with set information from e.g. copurification experiments. 1. Node x,y coordinates as attributes: Node coordinates could be stored as node attributes and the vizmapper could be used to place nodes on the canvas based on attributes (e.g. north,south or nucleus/cytoplasm, etc.). This would make it easier for people to define node positions using attribute files. 1. [[Network_specific_node_and_edge_attributes]] 1. Consider allowing multiple identical edges. The use case is combining multiple ppi networks and then evaluating the overlap of the networks based on the number of identical edges. === Visual mapper === 1. Map background color for labels 1. Map filter results to specific visual attributes e.g. the nodes that a filter would select could be colored red. 1. Ability to map expressions (e.g. Boolean expressions) of multiple graph attributes to a single visual attribute. E.g. 2 independent edge attributes could be mapped automatically to 4 edge colors. 1. Node and edge text should have the option of being wrapped and (left/right/center/full) justified. 1. Should be able to show attributes over time - maybe using Iliana's movie plugin. 1. Make automatic text label color feature controllable by user 1. Ability to map based on non-linear scales e.g. log scale 1. Ability to show alternate attributes if one attribute value is not available. This would be useful for displaying gene names and IDs as node labels. Sometimes the gene name is not available and you want to display a database ID. === Filters === 1. Option to do case insensitive searching 1. SQL style filtering for hardcore users? === Layouts === 1. K-partite graph layout (based on discrete attributes). Attributes are used to place nodes (more strict node placement than BioLayout) 1. Layout algorithm to minimise edge crossovers and enforce a minimum distance between nodes - for visual clarity 1. Graph merge to retain node layout for one or both graphs 1. Layouts should fire an event when they're finished. The object should contain the name of the layout and any parameters used, so that the layout can be recreated by third parties. 1. Make Hierarchical Layout attribute aware. It would be nice if either node attributes or edge attributes could be used to separate things in the hierarchy. For example node attributes could be used to cluster things first, or perhaps establish horizontal order. Edge attributes could be used to determine edge length to provide more vertical separation. === Preferences === 1. Default initial layout 1. Ability to choose initial visual style 1. Option to lay out small networks (set size) on load === Plugin ideas === 1. There should be support for versioning Cytoscape networks. Maybe just have an interface for CVS. 1. Need easy access to interactions, pathways, functional annotation from within Cytoscape. 1. Species bundles: species specific annotation bundles like GenMAPP has 1. Pathway walking: e.g. 1) A user has some interactions in Cytoscape she has pulled from say CPATH. Then for a particular node(gene/protein/compound) then want to pull from the database all the other interactions of that node and add these to the currently displayed network. This allows her to walk(explore) along a potential pathway. e.g. 2)Display the number of interactions of a node on that node. (so users will know whether to walk in that direction) 1. Add SBML export support to go with the SBML import. 1. It would be useful to have a feature where you can compare two or more graphs to see if any overlap (i. e. nodes) occurs. Currently GraphMerge merges two or more graphs but it would be useful to see where the union of that overlap occurs. Perhaps you could colour the nodes to reflect overlaps, for example node from graph A could be red, graph B blue and overlaps could be purple. However, I'm not sure how colouring would work when you have more than two graphs! 1. Import some of PSI-MI network file header as network metadata/attributes. PSI-MI files have some useful information in their headers, but currently everything is ignored. 1. Linkout should be configurable such that it can query based on a user specifiable attribute, rather than just node label or node identifier. There are often situations where users would like to query based on something different than what is visible. 1. Full identifier resolution system that recognizes many different database identifiers and their mappings. One use case would be to support merging of networks and BioPAX documents even if the nodes didn't have the same identifiers. [[http://baderlab.org/IdentifierMapping|A list of general use cases]] === Refactoring Tasks === 1. Refactor GML loading === Documentation === 1. Publish thorough memory benchmarks for network size in terms of nodes, edges, memory consumption and load time, so that people know the limits of Cytoscape. == Finished! == 1. Graph layout manager: we should have a way of managing different layouts for the same network. This would make the GML (or other input file) view of the layout independent from the layout that the user selects. This would probably be similar to the visual style manager. 1. Zoom in/out by mouse roller (just like [[http://maps.google.com/|Google Maps]]). 1. Illustrator-like network manipulation features - Shift-dragging a node should restrict its movement to a horizontal or vertical axis only. When a node is selected, arrow keys should move the node incrementally up/down/right/left. 1. View options for dealing with multiple edges between nodes: User should be able to decide how multiple edges between nodes are represented in the view e.g. either straight lines like '=' or curved like '()'. 1. General evaluation of user interface consistency. 1. Cytoscape should tell the user when plugins fail to load (perhaps as part of a plugin management console) 1. Make sure that menu items are enabled/disabled at the appropriate times. 1. Filters should have human readable names, not the jumble of regular expressions we have now. 1. Plugin manager system: a dialog box that lists available plugins and has a checkbox next to each one so the user can load and unload (and also activate/inactivate - not the same thing as load/unload) plugins at will. The Protege tool has something like what we need, except theirs manages tabs (which can come from plugins) 1. Control of visual attributes for individual nodes and edges: A general solution for this that does not interfere with the vizmapper should be implemented. Custom visualization on nodes and edges should be able to be managed like visual styles or layouts. The user could have a number of custom node or edge visual annotations and these should be able to be saved from session to session. There should be an option to allow the vizmapper to override these or not. 1. Graph attribute manager: user should be able to load/unload attribute sets via the GUI 1. Slider bar attribute selection: The user should be able to select nodes or edges that are above a threshold (selected by the slider bar) for any numeric node or edge attribute (selected by the user). This is Quickfind. 1. [[Future_Cytoscape_Features/Undo_manager_feature|/Undo manager feature]]: Undo/redo for all actions. 1. More organization for plugins. E.g. allow plugins to be organized into directories within a plugin directory, to allow plugins with many external libraries to better organize themselves in the filesystem. 1. Ability to mark an attribute as locked/immutable/protected so that it can't be edited in the node browser. The CyAttributes key, ID, could be copied to an ID a ttribute that is locked and this would allow it to be searched by e.g. the filters plugin. 1. Ability to mark an attribute as hidden so that it would not be shown in the attribute browser by default. A show advanced attributes action could be created to show even these if the user requests it. 1. Provide a mechanism for plugins to save their state in a session file. 1. The new rendering engine allows for transparent colors (alpha blending). If we ever want to allow this, then things are ok, however if this is not something we want, then we should consider removing the alpha blending because of the tremendous hoops that get jumped through to render things like arrows. The problem is that when transparency is turned on, graphical objects that are the same color overlap to form a darker color. That means that shapes can't overlap, which means that every tiny little triangle or circle needs to be rendered invidually. This makes the code ''really'' ugly and hard to maintain. 1. Map to font color for nodes and edges 1. The "Seed Mapping with Random Colors" button in DiscreteMappers works well, but is very slow. This is a function of how the ValueDisplayer objects are updated when a new color is selected. Rather than updating and existing ValueDisplayer, an entirely new one is created and the old one is replaced. This works, but is slow. One possible refactoring would be to add a listener to ValueDisplayer that updates the color for a given event. I dunno. In any case, ValueDisplayer should probably be separated into separate classes (one for Color, one for Integers, etc.) since the current class is long and unruly. 1. Implement BioLayout (force-directed layout where attributes are used in the force calculation) 1. Refactor the Layout API so that it is easy to use layouts from plugins 1. Option for layout algorithms to ignore hidden or unselected nodes and edges 1. Ability to lock some node positions and just layout unlocked nodes 1. For some layout algorithms, add parameter to controll distances between nodes. ("density" of nodes in clusters). 1. Make multiple edges respect the straighten/curved flag. 1. Consider making multiple edge anchors user editable. 1. Refactor visual mapper 1. Make sure web start is fully supported 1. Refactor Cytoscape initialization and exiting to make sure all logic is correct for file and configuration loading/saving 1. Clear out libraries in lib directory that are not in use (goal, save space in distribution) 1. Clean up unit tests 1. [[Future_Cytoscape_Features/Simple_graph_statistics|/Simple graph statistics]] such as node connectivity distribution, avg. shortest path + export to Excel. Power law analysis (does network connectivity distribution follow a power law?) (!NetworkAnalyzer) 1. Network set operations: intersect, union, difference. The network is a set of edges. The edge identity functions must be able to handle node name synonyms as are currently found in biological gene names. Use case: load up two yeast protein interaction networks from two different sources and find common interactions. Also could create a union of the networks. If the same protein has different names in each network, this would be resolved using protein name synonym lookup. 1. Cellular Location information dispayed in the view: User should be able to overlay a picture of a prokaryotic or eukaryotic cell onto the view and lay the network out in a location aware manner so that nuclear proteins are in the nucleus. (Cerebral) == No Longer Applicable == 1. Add a text field in the Scale dialog that displays the precise scaling factor. Possibly allow users to update this directly. 1. Ideas for the VizMapper dialog: * You can't see a list of all the visual styles without having to click on the popup box. Instead a JList should be there to provide a list of styles. Most programs (like GNOME's theme manager) give a list of themes to choose from, rather than forcing the user to click on the popup box to select a theme. The VizMapper dialog is small. Expanding the size of the dialog, giving to space to fit a list of styles, would make the interface less cumbersome. * The Close button is not necessary. The window manager already provides a button to close the window, why is another button necessary?