5 def getEdges(nodeList, shorten=False):
8 for nodeEntry in nodeList:
10 (node1, node2, count) = nodeEntry.strip().split("\t")
16 node1 = node1.split("_")[1]
21 node2 = node2.split("_")[1]
25 node1Detail = (node1, int(count))
26 node2Detail = (node2, int(count))
28 if node2Detail not in edgeDict[node1]:
29 edgeDict[node1].append(node2Detail)
31 edgeDict[node1] = [node2Detail]
34 if node1Detail not in edgeDict[node2]:
35 edgeDict[node2].append(node1Detail)
37 edgeDict[node2] = [node1Detail]
42 def getEdgesFromFile(inFileName, shorten=False):
44 infile = open(inFileName)
45 edgeDict = getEdges(infile, shorten)
51 def getOutputLine(currentNode, node, nodeCount):
53 outputLine = '\t"%s" -- "%s" [ label = "%d", penwidth=%d, color="red", constraint=false] ; \n' % (currentNode, node, nodeCount, nodeCount)
55 outputLine = '\t"%s" -- "%s" [ label = "%d", color="red", constraint=false] ; \n' % (currentNode, node, nodeCount)
60 infilename = sys.argv[1]
61 outprefix = sys.argv[2]
64 if "-shorten" in sys.argv:
67 edgeDict = getEdgesFromFile(infilename, shorten)
69 nodeList = edgeDict.keys()
77 outstat = open("%s.stats" % outprefix,"w")
78 outstat.write("#gID\tnodes\tedges\tweight\n")
80 def visitNodes(currentNode):
81 if currentNode in seenNodeDict:
84 seenNodeDict[currentNode] = []
85 for (node, nodeCount) in edgeDict[currentNode]:
86 nodePair = [node, currentNode]
88 if str(nodePair) not in seenEdgeDict:
89 if node not in currentNodeList:
90 currentNodeList.append(node)
92 outputLine = getOutputLine(currentNode, node, nodeCount)
93 currentEdgeList.append(outputLine)
94 seenEdgeDict[str(nodePair)] = 0
95 localCount[0] += nodeCount
101 print "getting trees"
102 for node in nodeList:
103 if node not in seenNodeDict:
104 currentNodeList = [node]
107 outfile = open("%s.%s.gv" % (outprefix, node), "w")
108 treeList.append(node)
109 outfile.write("graph g%s {\n" % node)
111 currentNodeList.sort()
112 outfile.write('subgraph G0 {\n\t"%s" ' % currentNodeList[0])
113 for anode in currentNodeList[1:]:
114 outfile.write('-- "%s" ' % anode)
116 outfile.write(" [ weight = 100 ] ;\n\tordering = out ;\n}\n")
117 for line in currentEdgeList:
122 outstat.write("%s\t%d\t%d\t%d\n" % (node, len(currentNodeList), len(currentEdgeList), localCount[0]))
124 print "generating pngs"
125 for node in treeList:
126 output = os.popen("dot -Tpng %s.%s.gv > %s.%s.png" % (outprefix, node, outprefix, node))