== HyperEdge Linking Strategies == This document considers the behavior of linking one !HyperEdge to another (one of the Nodes in one !HyperEdge is the !ConnectorNode of another !HyperEdge). The following discussion assumes three !CyNetworks ''net1'', ''net2'', and ''net3''. ''net1'' contains !HyperEdge ''he1''. ''net2'' contains !HyperEdge ''he2''. and ''net3'' contains ''he1'' and ''he2''. Here are three possible approaches to linking !HyperEdges: 1. Restrict connections to one !CyNetwork In this scheme, !HyperEdges can only be connected if they exist in one !CyNetwork. Attempting to connect !HyperEdges that exist in multiple or different Networks would throw an exception. Also, once linked no attempt can be made to add either !HyperEdge to another !CyNetwork. In our example, this approach would throw an exception. Instead, ''he1'' and ''he2'' would have to only exist in ''net3''. If you want connected !HyperEdges to exist in multiple !CyNetworks, the !HyperEdges would have to be copied. This is a "wait and see" strategy since it follows expected behavior within one !CyNetwork and should be backwards compatible with any future multi-network approach that is decided. For the Cytoscape 2.5 release, we have initially chosen this approach. 1. Tight sharing of connections In this approach, once two !HyperEdges are connected, they ''both'' exist in the same !CyNetworks. In our example, this means that after connection, ''he1'' and ''he2'' would exist in ''net1'', ''net2'', and ''net3''. This approach is the most consistent with regular sharing of !HyperEdges, but may not be intuitively obvious--!HyperEdges will just spring into being within other !CyNetworks. Another issue is what should happen when an attempt is made to remove one of the !HyperEdges from an existing !CyNetwork--should the other attached !HyperEdge also be removed (e.g., if we remove ''he1'' from ''net1'', should ''he2'' be removed from ''net1'')? 1. Always copy when connecting In this approach, connected !HyperEdges are never shared. So, in our example, ''he1'' and ''he2'' are copied and connected within ''he3''. Thus, there would be four !HyperEdges--''he1'' in ''net1'', ''he2'' in ''net2'', ''he1p'' and ''he2p'' in ''net3'' (''he1'' and ''he2'' would be removed from ''net3''). Care must be taken to copy all "regular" !CyEdges that connected to the ''he1'' and ''he2'' !ConnectorNode within ''he3''. These would be copied to the corresponding ''he1p'' and ''he2p'' !ConnectorNodes.