<> === About this document === This is an official Request for Comment (RFC) for a '''Cytoscape Quick Find Feature'''. For details on RFCs in general, check out the [[http://www.answers.com/main/ntquery?method=4&dsid=2222&dekey=Request+for+Comments&gwp=8&curtab=2222_1&linktext=Request%20for%20Comments|Wikipedia Entry: Request for Comments (RFCs)]] === Status === {*} This RFC is now officially '''__closed to public comment__''', as Quick Find is now part of Cytoscape 2.4. I am, however taking feature requests for the next version of Quick Find, to be included in Cytoscape 2.5 (see below). === Cytoscape 2.5 Feature Requests (add your ideas below) === * From Kei: I demonstrated your Quick Find plugin today to our lab members. They are very impressed by the interactive filtering by numerical values. I got one suggestion for the feature. When user filters nodes with numerical values, the boundary values are shown as a popup (tooltip?), and it will disappear after user stop clicking on the range select slider. Is it possible to display boundary values always on the both sides of slider? === Proposal === This RFC proposes a new Cytoscape Quick Find feature for Cytoscape 2.4. The goal of the feature is to enable Cytoscape users to quickly find nodes, and select them in the network view. The feature will be based loosely on [[http://www.google.com/webhp?complete=1&hl=en|Google Suggest]]. In Google Suggest, a user types a few characters, and Google automatically provides matching search terms which begin with these characters. Along the same lines, a Cytoscape users will type a few characters into a text box, and Cytoscape will automatically provide matching nodes which begin with these characters. The user can then select one of these matching terms, and the nodes will be automatically selected in the network view. Here is a screenshot of my current prototype in action: {{attachment:quick_find.png}} By default, Quick Find will automatically index nodes based on Semantics.CANONICAL_NAME, and matching nodes will automatically be selected in the network view. For more advanced users, the Quick Find feature will also support the following: * Users can configure Quick Find to index nodes based on any attribute. Attributes of type COMPLEX will not be supported. Quick Find will work with all Cytoscape plugins, so long as those plugins use Cy{{{}}}Attributes to store attribute values. === Implementation Plan === A prototype, available as a Cytoscape Plugin is available at: http://cbio.mskcc.org/~cerami/quick_find/ The working prototype supports the following features: * By default, users search by CANONICAL_NAME. * Users can configure the Quick Find index to work with any attribute. Attributes of type COMPLEX are not supported. Items to be added soon: * ['''DONE'''] Test on very large networks (see performance stats below). * ['''DONE'''] Add support for network destroyed event. * ['''DONE'''] Add support for network selected event. * ['''DONE'''] By default, index nodes by node.getIdentifier(), and hide Semantics.CANONICAL_NAME. * Keyboard shortcut. * Modify the default Cytoscape icons, so that the Quick Find search box fits in the default size window. This is now an RFC of its own. See [[CytoscapeIcons|RFC 15]]: New Icon Set for Cytoscape 2.4 * Integrate changes to Task framework, e.g. add delay to pop up box. * Add support for text description of Cy{{{}}}Attributes. * Add support for hidden Cy{{{}}}Attributes. === Biological Use Cases Addressed === Quick Find addresses numerous biological use cases: * Quickly find a single node, even if you do not know its exact name. For example, a user may wish to find the node named: "TGF-Beta". Using the current Cytoscape find feature, you must know the exact name of the node or enter a regular expression. With Quick Find, you simply start typing: "TGF", and Cytoscape will present all possible matches. * Quickly find all nodes which match a specific attribute value. For example, a user may load a BioPAX network, and wish to view only those nodes which are located in the nucleus. === Deferred Items === None defined yet. === Required Changes to the Core === /!\ In order for the Quick Find feature to always fit within the main Cytoscape tool bar, we will need to shrink the tool bar icons. The following changes are not required, but would be very nice to have: * Support for human readable descriptions of attributes in the Cy{{{}}}Attributes API. * Support for hidden attributes in the Cy{{{}}}Attributes API. Hidden attributes would be not displayed to the user via the regular attribute browser, nor would they be accessible for quick find indexing. === Open Issues === None defined yet. === Backward Compatibility === As this is a new feature, there are no backward compatibility issues. === Peformance Stats === The following section will contain details regarding the performance of Quick Find. All experiments below were conducted on a Dual 1.42 GHz Power PC G4, with 2GB of RAM and Mac OS X 10.4.6. '''Time to index various networks''' (Note that indexing occurs in a background daemon thread, and is not directly observable by the user). BINDhuman.sif: 19,462 nodes, 30,779 edges. Time to index by CANONICAL_NAME. Conducted three trials. * 408 ms * 300 ms * 307 ms BINDyeast.sif: 23,505 nodes, 60,457 edges. Time to index by CANONICAL_NAME. Conducted three trials. * 305 ms * 304 ms * 379 ms Random.sif: 63,141 nodes, 50,000 edges. Time to index by CANONICAL_NAME. Conducted three trials. * 627 ms * 674 ms * 616 ms '''Time to query various networks''' BINDhuman.sif: 19,462 nodes, 30,779 edges. * Find all nodes beginning with "A": 11 ms * Find all nodes beginning with "B": 5 ms * Find all nodes beginning with "C": 14 ms * Find all nodes beginning with "AB": 1 ms Random.sif: 63,141 nodes, 50,000 edges. * Find all nodes beginning with "1": 29 ms * Find all nodes beginning with "10": 3 ms * Find all nodes beginning with "100": < 1 ms === Comments === EthanCerami, 07/05/2006 - This is a sample comment to get things started. Blah, blah, blah... MikeSmoot, 7/5/06 - This is a very cool idea. Some thoughts: * Why not index everything instead of just nodes? What about edges, attributes, etc. ? I can imagine a dropdown menu appearing with sections for nodes that match, edges that match, etc., in a manner similar to Spotlight on a mac. * A lot of this functionality already exists in a very similar form in the '''Select''' menu, we should make sure that the code doesn't duplicate any functionality. * Likewise, '''Cytopanel 3''' has a lot of search functionality and we should make sure we're not duplicating anything. * Would it make sense to put the search box in a tab in the browser pane or even replace cytopanel 3? * I think a single search box will be a significant interface improvement over the various menus and dialogs that exist now. GaryBader 7/5/6 - Also agree on the coolness of this plugin :) - do we need the find button? It seems that you could do without it to save some space. I guess it would be required if new users can't figure out what it does. In that case, maybe the background of the text input box (or default text) could say "Find...". Also, if we decide we need the button, a finesse feature would be to have the choice to hide the find button for advanced users - most web browsers and office apps have a feature similar to that to help manage the space taken up by toolbar buttons.