ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatAlgos/python/tools/circuitry.py
Revision: 1.1
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/x-python
Branch: MAIN
Branch point for: ANA
Log Message:
Initial revision

File Contents

# User Rev Content
1 dgele 1.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