ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatAlgos/python/tools/circuitry.py
Revision: 1.1.1.1 (vendor branch)
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/x-python
Branch: ANA
CVS Tags: start
Changes since 1.1: +0 -0 lines
Log Message:
version CMSSW_2_2_10

File Contents

# Content
1 def plotSequences(seq,filename):
2 from sys import stderr, argv
3 from os import popen
4 from os.path import basename
5 from re import sub;
6 import FWCore.ParameterSet.Config as cms
7 stderr.write("Writing plot to %s\n" % (filename,))
8 dot = popen("dot -Tpng > %s" % (filename,), "w")
9 dot.write("digraph G { \n rankdir=\"LR\" \n")
10 class visitor(object):
11 def __init__(self,seq,dot):
12 self._dot = dot
13 self._stack = []
14 self._seq = seq.label()
15 self._dot.write( "%s [ shape=rect style=filled fillcolor=%s label=\"%s\" ]" % (self._seq,'orange',self._seq) + "\n" )
16 def seq(self, seq):
17 self._stack.append(self._seq)
18 self._seq = seq.label()
19 def enter(self,v):
20 if isinstance(v, cms.Sequence):
21 self._dot.write( "%s [ shape=rect style=filled fillcolor=%s label=\"%s\" ]" % (v.label(),'orange',v.label()) + "\n" )
22 self.dep(v)
23 self.seq(v)
24 if isinstance(v, (cms.EDProducer, cms.EDFilter, cms.EDAnalyzer)):
25 self._dot.write( "%s [ shape=rect style=filled fillcolor=%s label=\"%s\" ]" % (v.label(),'green',v.label()) + "\n" )
26 self.dep(v)
27 def leave(self,v):
28 if isinstance(v, cms.Sequence):
29 self._seq = self._stack.pop()
30 def dep(self,v):
31 self._dot.write("%s -> %s" %(v.label(), self._seq) +"\n")
32 seq.visit(visitor(seq,dot))
33 dot.write("}\n")
34 dot.close()
35
36 def plotModuleInputs(seq,filename,printOuter=True,printLinkNames=True):
37 from sys import stderr, argv
38 from os import popen
39 from os.path import basename
40 from re import sub;
41 import FWCore.ParameterSet.Config as cms
42 stderr.write("Writing plot to %s\n" % (filename,))
43 dot = popen("dot -Tpng > %s" % (filename,), "w")
44 #dot = open("%s.dot" % (filename,), "w")
45 dot.write("digraph G { \n rankdir=\"LR\" \n")
46 deps = {}; alls = {}
47 modules = []
48 class visitor(object):
49 def enter(self,v):
50 if isinstance(v, (cms.EDProducer, cms.EDFilter, cms.EDAnalyzer)):
51 modules.append(v)
52 def leave(self,v):
53 pass
54 def greptags(ps,basename=""):
55 ret = []
56 for pn, pv in ps.parameters_().items():
57 type = pv.configTypeName()
58 if type == 'InputTag' : ret.append( (basename+pn, pv.configValue()) )
59 elif type == 'VInputTag' : ret += [ ("%s%s[%d]"%(basename,pn,i+1),v.configValue()) for i,v in enumerate(pv.value()) ]
60 elif type == 'PSet' : ret += greptags(pv, basename+pn+'.')
61 elif type == 'VPset' :
62 for r1 in [greptags(pvi, basename+pn+'.') for pvi in pv.value()]: ret += r1
63 return ret
64 def escapeParValue(name): return sub(r":.*","", name)
65 seq.visit(visitor())
66 for m in modules:
67 dot.write( "%s [ shape=rect style=filled fillcolor=%s label=\"%s\" ]" % (m.label(),'green',m.label()) + "\n")
68 tags = greptags(m)
69 #stderr.write("Tags for %s: %s\n" % (m.label(), tags))
70 deps[m.label()] = tags;
71 if not alls.has_key(m.label()): alls[m.label()]=True
72 for (tn,tv) in tags:
73 tve = escapeParValue(tv)
74 if not alls.has_key(tve): alls[tve]=True
75 names = deps.keys();
76 if printOuter: names = alls.keys()
77 done = {}
78 for n in names:
79 ne = escapeParValue(n)
80 if not deps.has_key(ne):
81 dot.write( "%s [ shape=rect style=filled fillcolor=%s label=\"%s\" ]" % (ne,'yellow',ne) + "\n")
82 else:
83 for tn,tv in deps[ne]:
84 tve = escapeParValue(tv)
85 if printOuter or deps.has_key(tve):
86 style = ""
87 if printLinkNames: style = " [label=\"%s\" ]" %(tn,)
88 dot.write( "%s -> %s%s\n"%(tve,ne,style))
89 dot.write("}\n")
90 dot.close()
91
92