Author: ruschein
Date: 2009-12-18 15:58:01 -0800 (Fri, 18 Dec 2009)
New Revision: 18793

Added:
   cytoscape/trunk/testData/NNFData/generate_multi_level_networks
Log:
First seemingly functional version.

Added: cytoscape/trunk/testData/NNFData/generate_multi_level_networks
===================================================================
--- cytoscape/trunk/testData/NNFData/generate_multi_level_networks              
                (rev 0)
+++ cytoscape/trunk/testData/NNFData/generate_multi_level_networks      
2009-12-18 23:58:01 UTC (rev 18793)
@@ -0,0 +1,113 @@
+#! /usr/bin/env python
+"""
+Program for generating random multi-level nested network files.
+"""
+from sets import Set
+from random import randint
+import sys, os, math
+
+
+def printf(format, *args):
+    print str(format) % args,
+
+
+def GenerateNetwork(network_name, node_prefix, no_of_nodes, no_of_links):
+    used_nodes = Set()
+    for i in range(0, no_of_links):
+        distinct = False
+        while not distinct:
+            end_point1 = randint(1, no_of_nodes)
+            end_point2 = randint(1, no_of_nodes)
+            distinct = end_point1 != end_point2
+        printf("%s %s%1d pp %s%1d\n", network_name, node_prefix, end_point1, 
node_prefix, end_point2)
+        used_nodes.add(end_point1)
+        used_nodes.add(end_point2)
+
+    for node_ID in range(1, no_of_nodes + 1):
+        if node_ID not in used_nodes:
+            printf("%s %s%1d\n", network_name, node_prefix, node_ID)
+
+
+def Usage():
+    print "usage: " + sys.argv[0] + " levels object_count link_factor > 
NNF_file"
+    print "\twhere levels is the number of network levels."
+    print "\twhere object_count is the approximate total number of nodes and 
edges in all the networks."
+    print "\twhere link_factor will be used to determine the number of links 
within a network.  The number of links created will be 
Round(size(network)*link_factor)"
+
+    sys.exit(1)
+
+
+# Returns the approx. sum of nodes and edges per network.
+def CalcApproxNetworkSize(levels, object_count):
+    def f(x):
+        return math.pow(x, levels + 1) - (object_count + 1) * x + object_count
+    def f_prime(x):
+        return (levels + 1) * math.pow(x, levels) - object_count - 1
+    def root(k, x):
+        return math.pow(x, 1.0 / k)
+    
+    # Use Newton-Raphson to find the root of f()
+    x = root(levels, object_count) # initial approximation
+    iteration_count = 10
+    for i in range(0, iteration_count):
+        x = x - f(x) / f_prime(x)
+
+    return x
+
+
+# Command-line argument processing.  Returns the triple (levels, object_count, 
link_factor).
+def ProcessArgs(argv):
+    if len(argv) != 4:
+        Usage()
+    try:
+        levels       = int(argv[1])
+        object_count = int(argv[2])
+        link_factor  = float(argv[3])
+    except ValueError:
+        Usage()
+
+    if levels < 1 or object_count < 1 or link_factor < 0.0:
+        Usage()
+
+    return (levels, object_count, link_factor)
+
+
+#
+# Start of main program.
+#
+
+(levels, object_count, link_factor) = ProcessArgs(sys.argv)
+
+approx_no_of_objects_per_network = CalcApproxNetworkSize(levels, object_count)
+nodes_per_network                = approx_no_of_objects_per_network / (1.0 + 
link_factor)
+edges_per_network                = nodes_per_network * link_factor
+nodes_per_network                = int(nodes_per_network + 0.5) # Round to 
nearest integer.
+edges_per_network                = int(edges_per_network + 0.5) # Round to 
nearest integer.
+individual_network_size          = nodes_per_network + edges_per_network
+
+# Create a header comment for the output file:
+print "# Generated with " + sys.argv[0]
+print "# levels               = " + str(levels)
+print "# approx. object_count = " + str(object_count)
+print "# link_factor          = " + str(link_factor)
+print "# nodes_per_network    = " + str(nodes_per_network)
+print "# edges_per_network    = " + str(edges_per_network)
+
+no_of_networks = 1 # The number of networks on a level.
+for level in range(1, levels + 1):
+    if level > 1:
+        print # Output a blank line.
+
+    print "# Starting level " + str(level)
+
+    network_name_prefix = "L" + str(level) + "_"
+    for network in range(1, no_of_networks + 1):
+        network_name = network_name_prefix + str(network)
+        node_name_prefix = "L" + str(level + 1) + "_"
+        GenerateNetwork(network_name, node_name_prefix, nodes_per_network, 
edges_per_network)
+
+    no_of_networks *= individual_network_size
+
+
+    
+        


Property changes on: 
cytoscape/trunk/testData/NNFData/generate_multi_level_networks
___________________________________________________________________
Added: svn:executable
   + *

--

You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.


Reply via email to