4 def getEdges(nodeList, shorten=False):
7 for nodeEntry in nodeList:
9 (node1, node2, count) = nodeEntry.strip().split("\t")
15 node1 = node1.split("_")[1]
20 node2 = node2.split("_")[1]
24 node1Detail = (node1, int(count))
25 node2Detail = (node2, int(count))
27 if node2Detail not in edgeDict[node1]:
28 edgeDict[node1].append(node2Detail)
30 edgeDict[node1] = [node2Detail]
33 if node1Detail not in edgeDict[node2]:
34 edgeDict[node2].append(node1Detail)
36 edgeDict[node2] = [node1Detail]
41 def getEdgesFromFile(inFileName, shorten=False):
43 infile = open(inFileName)
44 edgeDict = getEdges(infile, shorten)
50 def getOutputLine(currentNode, node, nodeCount):
52 outputLine = '\t"%s" -- "%s" [ label = "%d", penwidth=%d, color="red", constraint=false] ; \n' % (currentNode, node, nodeCount, nodeCount)
54 outputLine = '\t"%s" -- "%s" [ label = "%d", color="red", constraint=false] ; \n' % (currentNode, node, nodeCount)
59 infilename = sys.argv[1]
60 outprefix = sys.argv[2]
63 if "-shorten" in sys.argv:
66 edgeDict = getEdgesFromFile(infilename, shorten)
68 nodeList = edgeDict.keys()
76 outstat = open("%s.stats" % outprefix,"w")
77 outstat.write("#gID\tnodes\tedges\tweight\n")
79 def visitNodes(currentNode):
80 if currentNode in seenNodeDict:
83 seenNodeDict[currentNode] = []
84 for (node, nodeCount) in edgeDict[currentNode]:
85 nodePair = [node, currentNode]
87 if str(nodePair) not in seenEdgeDict:
88 if node not in currentNodeList:
89 currentNodeList.append(node)
91 outputLine = getOutputLine(currentNode, node, nodeCount)
92 currentEdgeList.append(outputLine)
93 seenEdgeDict[str(nodePair)] = 0
94 localCount[0] += nodeCount
100 print "getting trees"
101 for node in nodeList:
102 if node not in seenNodeDict:
103 currentNodeList = [node]
106 outfile = open("%s.%s.gv" % (outprefix, node), "w")
107 treeList.append(node)
108 outfile.write("graph g%s {\n" % node)
110 currentNodeList.sort()
111 outfile.write('subgraph G0 {\n\t"%s" ' % currentNodeList[0])
112 for anode in currentNodeList[1:]:
113 outfile.write('-- "%s" ' % anode)
115 outfile.write(" [ weight = 100 ] ;\n\tordering = out ;\n}\n")
116 for line in currentEdgeList:
121 outstat.write("%s\t%d\t%d\t%d\n" % (node, len(currentNodeList), len(currentEdgeList), localCount[0]))
123 print "generating pngs"
124 for node in treeList:
125 output = os.popen("dot -Tpng %s.%s.gv > %s.%s.png" % (outprefix, node, outprefix, node))