* GaryBader - What is the definition of a group in Cytoscape? Is it just a set? If so, what things can be in the set? Is this correct? "A group is a set of one or more nodes (CyNode) and zero or more edges (CyEdge) that connect nodes in the group. A group can be treated as a node (CyNode) itself by being the source or target of an edge." I said one or more nodes because I assume it doesn't make sense for a group to have zero nodes - is that true? Maybe there is a case for a group to have zero nodes. This is different than the hyperedge, which is a set of two or more nodes. The hyperedge cannot contain other edges and cannot be treated as a node itself. (I'm assuming that it doesn't make sense to create a hyperedge with 0 or 1 nodes). * IlianaAvila - In the interfaces I created, the word {{{group}}} is always closely tied to the relationship between a subnetwork and its containing network: * {{{GroupManager.addGroupToNetwork(network, subnetwork)}}}: record the fact that {{{subnetwork}}} is a group in {{{network}}} * {{{GroupingStrategy.group(network, subnetwork)}}}: depict {{{subnetwork}}} as a group in {{{network}}} The reason why I don't simply call a {{{group}}} a {{{subnetwork}}} or a {{{network}}} is because the word {{{group}}} suggests that the nodes and edges contained in it are held together by a special relationship that other subnetworks in the containing network don't have. So, the word {{{group}}} could also be seen as an adjective for {{{subnetwork}}}: a {{{grouped subnetwork}}} is a subnetwork that has been deemed to be a special subnetwork (because its nodes and/or edges are related to each other in some special way) in the containing network. Does that make sense? I hope so... * MikeSmoot: I understand your point, but I worry that we're conflating the user experience with the programmer experience when deciding these terms. It is reasonable to me that a cytoscape user would want to see dialog boxes or menu items presented in terms of groups. From the user perspective there is something special about a particular subnetwork so it seems reasonable to refer to a group as something different than a subnetwork. However, from a programmers perspective, is the terminology necessary? Is there any distinction that a programmer sees between a subnetwork and a group? * IlianaAvila - What alternative term could we use from a programmers perspective? If we use {{{subnetwork}}}, how would our interface and method names look? And, are these clear to a novice Cytoscape programmer that is trying to group subnetworks? Here is an attempt to use {{{subnetwork}}}: * {{{SubnetworkManager.tagSubnetwork(CyNetwork net, CyNetwork subnet); SubnetworkManager.getTaggedSubnetworks(CyNetwork net);}}} * {{{SubnetworkVisualizer}}}: visualize subnetworks (interface) * {{{SubnetworkModeler}}}: change the model to represent a subnetwork (interface) <
> would the interface make more sense if the methods looked like this?: * {{{GroupManager.markSubnetworkAsGroup(network,subnetwork)}}} * {{{GroupingStrategy.groupSubnetwork(network, subnetwork)}}} * MikeSmoot: Yes! (Assuming that we stick with the grouping terminology (see my note above) and assuming that we really aren't adding new nodes and edges to a network.) * IlianaAvila - Done. I revised the API to use these new method names. <
> * GaryBader - Can a group be used as a CyNode? Can I create a CyEdge that has a group as a source or target? * IlianaAvila - You should be able to. To depict a group as a {{{CyNode}}} you use the {{{COLLAPSING_STRATEGY}}}. Then, there needs to be a way of the user obtaining the {{{CyNode}}} that represents the group. This could be done in a number of ways. One of them could be changing the returned object of the {{{GroupingStrategy.group(network,subnetwork)}}} method from a boolean to an {{{Object}}} that the user should cast to the appropriate type. * That sounds like a nice feature to allow the group to be a node or not. When you are using a compound graph, the group is always a node (as we require for BioPAX mapping). It would be better if there was a specific method for this type of operation, since it would be common for those users using a compound graph. Also, if the group was a node, then there would have to be a CyNode created in the model, where this would not be the case for a non-node group, which could just be created in the view. However, this may be too complex and we may always want the group to be a CyNode (created in model and view). The model/view separation is still not clear to me - are there some use cases that require a model, but no view (or vice versa)?