Author: ruschein
Date: 2009-12-21 10:43:33 -0800 (Mon, 21 Dec 2009)
New Revision: 18797

Modified:
   cytoscape/trunk/testData/NNFData/generate_multi_level_networks
Log:
Fixed and tested.

Modified: cytoscape/trunk/testData/NNFData/generate_multi_level_networks
===================================================================
--- cytoscape/trunk/testData/NNFData/generate_multi_level_networks      
2009-12-19 01:00:03 UTC (rev 18796)
+++ cytoscape/trunk/testData/NNFData/generate_multi_level_networks      
2009-12-21 18:43:33 UTC (rev 18797)
@@ -2,7 +2,7 @@
 """
 Program for generating multi-level nested network files.
 """
-from sets import Set
+#from sets import Set
 from random import randint
 import sys, os, math
 
@@ -38,23 +38,25 @@
 
 
 # Returns the approx. no of nodes 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):
+def CalcApproxNetworkSize(levels, link_factor, object_count):
+    def f(n):
+        return (1.0 + link_factor) * math.pow(n, levels + 1.0) - (1.0 + 
link_factor + object_count) * n + object_count
+    def f_prime(n):
+        return (1.0 + link_factor) * (levels + 1.0) * math.pow(n, levels) - 
1.0 - link_factor - object_count
+    def root(k, x): # k-th root of x
         return math.pow(x, 1.0 / k)
     
     # Use Newton-Raphson to find the root of f()
-    x = root(levels, object_count) # initial approximation
+    no_of_nodes_per_network = root(levels, object_count) # initial 
approximation
     iteration_count = 10
-    for i in range(0, iteration_count):
-        x = x - f(x) / f_prime(x)
+    max_rel_error   = 1.0e-10
+    while True:
+        old_no_of_nodes_per_network = no_of_nodes_per_network
+        no_of_nodes_per_network = no_of_nodes_per_network - 
f(no_of_nodes_per_network) / f_prime(no_of_nodes_per_network)
+        if math.fabs(old_no_of_nodes_per_network - no_of_nodes_per_network) < 
max_rel_error:
+            return no_of_nodes_per_network
 
-    return x
 
-
 # Command-line argument processing.  Returns the triple (levels, object_count, 
link_factor).
 def ProcessArgs(argv):
     if len(argv) != 4:
@@ -78,8 +80,7 @@
 
 (levels, object_count, link_factor) = ProcessArgs(sys.argv)
 
-approx_total_node_count = object_count / (1.0 + link_factor)
-nodes_per_network       = CalcApproxNetworkSize(levels, 
approx_total_node_count)
+nodes_per_network       = CalcApproxNetworkSize(levels, link_factor, 
object_count)
 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.
@@ -98,13 +99,13 @@
     if level > 1:
         print # Output a blank line.
 
-    print "# Starting level " + str(level)
+#    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)
+#        GenerateNetwork(network_name, node_name_prefix, nodes_per_network, 
edges_per_network)
         actual_object_count += nodes_per_network + edges_per_network
 
     no_of_networks *= nodes_per_network

--

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