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.