ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/CMSSW/PhysicsTools/PythonAnalysis/python/cmstools.py
Revision: 1.21
Committed: Wed Jun 16 08:04:14 2010 UTC (14 years, 10 months ago) by cplager
Content type: text/x-python
Branch: MAIN
CVS Tags: CMSSW_6_2_0, CMSSW_6_2_0_pre7_TS133806, CMSSW_5_3_11_patch3, CMSSW_6_1_2_SLHC6_patch1, CMSSW_5_3_11_patch2, CMSSW_5_3_11_patch1, CMSSW_6_2_0_pre8, CMSSW_6_1_2_SLHC6, CMSSW_4_1_8_patch13, CMSSW_6_1_2_SLHC5, CMSSW_5_3_11, CMSSW_6_2_0_pre7_TS132947, CMSSW_4_4_5_patch3, CMSSW_6_2_0_pre7_g496p02, CMSSW_6_2_0_pre7, CMSSW_5_3_10_patch2, CMSSW_6_1_2_SLHC4_patch1, CMSSW_6_1_2_SLHC4, CMSSW_6_1_2_SLHC2_patch3, CMSSW_6_2_0_pre6_patch1, CMSSW_6_1_2_SLHC2_patch2, CMSSW_6_2_0_pre6, CMSSW_5_3_10_patch1, CMSSW_6_1_2_SLHC3, CMSSW_6_1_2_SLHC2_patch1, CMSSW_4_1_8_patch11, CMSSW_5_3_10, CMSSW_6_1_2_SLHC2, CMSSW_6_2_0_pre5slc6, CMSSW_5_3_9_patch3, CMSSW_6_1_2_SLHC1, CMSSW_6_2_0_pre5, CMSSW_6_1_X_2012-12-19-0200, CMSSW_6_0_X_2012-08-07-0200, CMSSW_5_2_X_2012-05-03-0200, CMSSW_5_2_X_2012-03-08-0200, CMSSW_5_0_X_2011-12-18-0200, CMSSW_4_4_X_2011-06-09-0400, CMSSW_5_3_9_patch2, CMSSW_6_1_2, CMSSW_6_2_0_pre4, CMSSW_5_3_9_patch1, CMSSW_6_2_0_pre3, CMSSW_6_1_1_SLHCphase2tk1, CMSSW_5_3_9, CMSSW_6_1_1_SLHCphase1tk1, CMSSW_5_2_9, CMSSW_6_2_0_pre2, CMSSW_6_1_1, CMSSW_5_3_8_patch3, CMSSW_5_3_7_patch6, CMSSW_6_2_0_pre1, CMSSW_5_3_8_patch2, CMSSW_5_3_8_patch1, CMSSW_5_3_8, CMSSW_5_3_8_HI_patch2, CMSSW_5_3_7_patch5, CMSSW_5_3_8_HI_patch1, CMSSW_5_2_6_patch2, CMSSW_6_1_0, CMSSW_5_3_8_HI, CMSSW_5_3_7_patch4, CMSSW_5_3_7_patch3, CMSSW_6_0_1_PostLS1v2_patch4, CMSSW_6_1_0_pre8, CMSSW_5_3_7_25nspatch1, CMSSW_5_3_7_patch2, CMSSW_6_1_0_pre7_TS127013, CMSSW_6_0_1_PostLS1v2_patch3, CMSSW_6_1_0_pre7, CMSSW_5_3_7_patch1, CMSSW_6_1_0_pre6_TS126203_TS126341_patch1, CMSSW_5_3_7_alcapatch1, CMSSW_6_1_0_pre6g496cand01, CMSSW_5_3_7, CMSSW_6_0_1_PostLS1v2_patch2, CMSSW_6_0_1_PostLS1v2_patch1, CMSSW_6_1_0_pre6_TS126203_TS126341, CMSSW_6_1_0_pre6, CMSSW_6_0_1_PostLS1v2, CMSSW_4_4_5_patch2, CMSSW_5_3_6_patch1, CMSSW_5_2_8, CMSSW_6_1_0_pre5, CMSSW_6_0_1_PostLS1v1, CMSSW_5_2_7_hltpatch2, CMSSW_5_3_4_TC125616patch1, CMSSW_6_0_1, CMSSW_5_3_4_patch2, CMSSW_6_1_0_pre3_TS124729, CMSSW_6_1_0_pre4, CMSSW_5_3_5, CMSSW_5_3_3_patch3, CMSSW_5_3_4_patch1, CMSSW_6_1_0_pre3, CMSSW_4_4_5_patch1, CMSSW_5_2_7, CMSSW_5_3_4, CMSSW_5_3_2_patch5, CMSSW_6_1_0_pre2, CMSSW_5_3_4_cand2, CMSSW_5_3_4_cand1_patch1, CMSSW_6_0_0_patch1, CMSSW_6_0_0_SLHCtkpre1, CMSSW_6_1_0_pre1, CMSSW_5_3_4_cand1, CMSSW_6_0_0_TS123272, CMSSW_5_2_6_patch1, CMSSW_6_0_0, CMSSW_4_4_5, CMSSW_5_3_3_patch2, CMSSW_4_2_8_SLHChcal6, CMSSW_5_3_3, CMSSW_5_3_3_patch1, CMSSW_6_0_0_pre11, CMSSW_6_0_0_pre10, CMSSW_4_2_8_SLHChcal5, CMSSW_6_0_0_pre9, CMSSW_4_2_8_SLHCstd2_patch2, CMSSW_4_2_8_SLHCtk3_patch2, CMSSW_4_2_8_SLHChcal2_patch3, CMSSW_5_3_2_patch4, CMSSW_6_0_0_pre8, CMSSW_4_2_8_SLHCstd2_patch1, CMSSW_4_2_8_SLHCtk3_patch1, CMSSW_4_2_8_SLHChcal4_patch4, CMSSW_5_3_3_cand1, CMSSW_5_3_2_patch2, CMSSW_5_3_2_metpatch1, CMSSW_5_2_6_hltpatch1, CMSSW_4_2_8_SLHChcal4_patch3, CMSSW_6_0_0_pre7py273, CMSSW_5_2_6, CMSSW_5_3_2_patch1, CMSSW_4_2_8_SLHChcal4_patch2, CMSSW_4_2_8_SLHChcal4_patch1, CMSSW_5_3_2, CMSSW_6_0_0_pre7, CMSSW_5_2_4_hltpatch4, CMSSW_6_0_0_pre6g495p01, CMSSW_5_2_5_patch3, CMSSW_5_2_5_patch2, CMSSW_6_0_0_pre6, CMSSW_5_3_1, CMSSW_4_1_8_patch10, CMSSW_5_2_5_ecalpatch1, CMSSW_6_0_0_pre5, CMSSW_5_3_0_patch1, CMSSW_4_2_8_SLHChcal4, CMSSW_4_2_8_SLHCtk3, CMSSW_5_2_5, CMSSW_5_2_5_patch1, CMSSW_4_2_9_HLT1_bphpatch4, CMSSW_sm120515a, CMSSW_4_2_8_SLHCstd2, CMSSW_5_3_0, CMSSW_6_0_0_pre4, CMSSW_5_2_4_hltpatch2, CMSSW_4_2_9_HLT1_bphpatch3, CMSSW_6_0_X, CMSSW_5_2_5_cand1, CMSSW_4_2_8_SLHC2_patch2, CMSSW_4_2_8_SLHCtk_patch2, CMSSW_4_2_8_SLHChcal2_patch2, CMSSW_5_2_4_patch4, CMSSW_6_0_0_pre3, CMSSW_5_2_4_patch3, CMSSW_4_2_8_SLHCtk2, CMSSW_5_2_4_patch2, CMSSW_4_2_8_SLHChcal3, CMSSW_4_2_8_SLHCstd, CMSSW_5_2_4_patch1, CMSSW_5_2_4, CMSSW_5_2_3_patch4, CMSSW_4_2_8_SLHC2_patch1, CMSSW_4_2_8_SLHCtk_patch1, CMSSW_4_2_8_SLHChcal2_patch1, CMSSW_4_2_9_HLT1_bphpatch2, CMSSW_5_2_3_patch3, CMSSW_4_2_9_HLT1_bphpatch1, CMSSW_6_0_0_pre2, CMSSW_5_2_3_patch2, CMSSW_5_2_3_patch1, CMSSW_5_2_3, CMSSW_6_0_0_pre1, CMSSW_5_1_3, CMSSW_5_2_2, CMSSW_5_2_1, CMSSW_4_4_4, CMSSW_5_1_2_patch1, CMSSW_5_2_0, CMSSW_5_1_1_patch3, CMSSW_5_2_0_pre5_TS117504, CMSSW_5_1_2, CMSSW_5_2_0_pre6, CMSSW_5_1_1_patch2, CMSSW_4_4_3_patch1, CMSSW_5_1_1_patch1, CMSSW_5_2_0_pre5, CMSSW_5_1_1, CMSSW_5_0_1_patch3, CMSSW_4_1_8_patch8, CMSSW_5_0_1_patch2, CMSSW_5_2_0_pre4, CMSSW_4_2_8_SLHCtk, CMSSW_5_0_1_patch1, CMSSW_5_2_0_pre3HLT, CMSSW_4_2_8_p7rootfix, CMSSW_5_2_0_pre3, CMSSW_5_0_1, CMSSW_5_2_0_pre2_TS113282, CMSSW_4_4_3, CMSSW_5_0_0_patch1, CMSSW_5_2_0_pre2, CMSSW_5_2_0_pre1, CMSSW_5_1_0_pre2, CMSSW_5_1_0_pre1, CMSSW_4_1_8_patch7, CMSSW_4_4_2_patch10, CMSSW_5_0_0, CMSSW_4_2_8_SLHChcal, CMSSW_4_4_2_patch9, CMSSW_4_4_2_patch8, CMSSW_4_1_8_patch6, CMSSW_5_0_0_pre7, CMSSW_4_2_8_SLHC1, CMSSW_4_2_8_SLHC2, CMSSW_5_0_0_pre6g494, CMSSW_4_4_2_patch7, CMSSW_4_1_8_patch5, CMSSW_5_0_0_pre6, CMSSW_4_4_2_patch6, CMSSW_4_1_8_patch4, CMSSW_5_0_0_pre5_root532rc1, CMSSW_4_4_2_patch5, CMSSW_4_4_2_patch4, CMSSW_4_4_2_patch3, CMSSW_4_2_3_SLHC4_patch1, CMSSW_4_4_2_patch2, CMSSW_5_0_0_pre5, CMSSW_4_4_2_patch1, V00-05-04, CMSSW_4_4_2, CMSSW_5_0_0_pre4, CMSSW_4_4_0_patch4, CMSSW_4_2_8_patch7, CMSSW_5_0_0_pre3, CMSSW_4_4_1, CMSSW_5_0_0_pre2, CMSSW_4_4_0_patch3, CMSSW_4_2_8_patch6, CMSSW_4_4_0_patch2, CMSSW_4_2_9_HLT2_hltpatch1, CMSSW_4_2_9_HLT1_hltpatch2, CMSSW_4_4_0_patch1, CMSSW_4_2_8_patch5, CMSSW_4_2_9_HLT3, CMSSW_5_0_0_pre1, CMSSW_4_4_0, CMSSW_4_2_9_HLT2, CMSSW_4_2_8_patch4, CMSSW_4_2_9_HLT1_patch1, CMSSW_4_4_0_pre10, CMSSW_4_1_8_patch1, CMSSW_4_2_8_patch3, CMSSW_4_4_0_pre9, CMSSW_4_1_8, V00-05-03, CMSSW_4_2_8_patch2, CMSSW_4_2_9_HLT1, CMSSW_4_2_9_HLT, CMSSW_4_4_0_pre8, CMSSW_4_2_7_hltpatch3, CMSSW_4_1_7_patch3, CMSSW_4_2_8_patch1, CMSSW_4_4_0_pre7_g494p02, CMSSW_4_1_7_patch2, CMSSW_4_4_0_pre7, CMSSW_4_4_0_pre6, CMSSW_4_2_8, CMSSW_4_2_7_hltpatch2, CMSSW_4_2_3_SLHC4, CMSSW_4_2_3_SLHC2, CMSSW_4_2_7_hltpatch1, CMSSW_4_2_5_hltpatch1, CMSSW_4_2_7_patch2, CMSSW_4_4_0_pre5, CMSSW_4_2_7_patch1, CMSSW_4_2_7, CMSSW_4_1_7_patch1, CMSSW_4_4_0_pre4, CMSSW_4_3_0_dqmpatch2, CMSSW_4_2_6, CMSSW_4_4_0_pre3, CMSSW_4_3_0_dqmpatch1, CMSSW_4_3_0, CMSSW_4_4_0_pre2, CMSSW_4_2_4_patch2, CMSSW_4_2_4_hltpatch1, CMSSW_4_2_5, CMSSW_4_1_7, logger_cbern_19Jun11-09h37m04s, CMSSW_4_4_0_pre1, CMSSW_4_3_0_pre6_dqmIO, CMSSW_4_3_0_pre7, CMSSW_4_2_4_patch1, CMSSW_4_2_3_SLHC3, CMSSW_4_2_4, CMSSW_4_1_6_patch1, CMSSW_4_2_3_patch5, CMSSW_4_2_3_patch4, CMSSW_4_3_0_pre6, CMSSW_4_2_3_patch3, V00-05-02, CMSSW_4_2_3_patch2, CMSSW_4_3_0_pre5, CMSSW_4_2_3_patch1, CMSSW_4_2_3_SLHC_pre1, CMSSW_4_1_6, CMSSW_4_2_2_patch2, CMSSW_4_2_3, CMSSW_4_2_2_patch1, CMSSW_4_3_0_pre4, CMSSW_4_2_1_patch2, CMSSW_4_2_2_SLHC_pre1, CMSSW_4_1_4_patch4, CMSSW_4_2_2, CMSSW_4_1_5, CMSSW_4_1_4_patch3, CMSSW_4_2_1_patch1, CMSSW_4_3_0_pre3, CMSSW_4_2_1, CMSSW_4_1_4_patch2, CMSSW_4_1_4_patch1, CMSSW_4_1_4, CMSSW_4_2_0, CMSSW_4_3_0_pre2, CMSSW_4_3_0_pre1, CMSSW_4_1_3_patch2, CMSSW_4_2_0_pre8, CMSSW_4_1_3, CMSSW_4_1_2, CMSSW_4_1_2_patch1, CMSSW_3_11_3, CMSSW_4_2_0_pre7, CMSSW_3_11_2, CMSSW_4_2_0_pre6, CMSSW_3_11_1_hltpatch1, CMSSW_3_11_1_hclpatch1, CMSSW_3_11_1_patch3, CMSSW_3_9_9_patch1, CMSSW_3_9_9, CMSSW_4_2_0_pre5, CMSSW_4_2_0_pre4, CMSSW_3_11_1_patch1, CMSSW_4_2_0_pre3, CMSSW_3_11_1, CMSSW_3_9_8_patch2, CMSSW_4_2_0_pre2, CMSSW_3_9_8_patch1, CMSSW_3_9_8, CMSSW_4_2_0_pre1, CMSSW_3_11_0, CMSSW_3_10_1, CMSSW_3_11_0_pre4, CMSSW_3_11_0_pre5, CMSSW_3_11_0_pre3, CMSSW_3_11_0_pre2, CMSSW_3_9_7, CMSSW_3_10_0, CMSSW_3_9_6, CMSSW_3_8_7_patch1, CMSSW_3_11_0_pre1, CMSSW_3_10_0_pre9, CMSSW_3_9_5_patch2, CMSSW_3_10_0_pre8, CMSSW_3_10_0_pre7g494c1, CMSSW_3_9_5_patch1, CMSSW_3_10_0_pre7, CMSSW_3_8_7, CMSSW_3_9_5, CMSSW_3_10_0_pre6, CMSSW_3_9_4, CMSSW_3_10_0_pre5, CMSSW_3_9_3, CMSSW_3_9_2_patch5, CMSSW_3_10_0_pre4, CMSSW_3_9_2_patch4, CMSSW_3_9_2_patch3, CMSSW_3_9_2_patch2, CMSSW_3_9_2_patch1, CMSSW_3_9_2, CMSSW_3_10_0_pre3, CMSSW_3_9_1_patch1, CMSSW_3_9_1, CMSSW_3_10_0_pre2, CMSSW_3_10_0_pre1, CMSSW_3_9_0, V00-05-01, CMSSW_3_9_0_pre7, CMSSW_3_9_0_pre6, V00-05-00, CMSSW_3_9_0_pre5, CMSSW_3_9_0_pre4, CMSSW_3_9_0_pre3, CMSSW_3_9_0_pre2, CMSSW_3_9_0_pre1, V00-04-00, HEAD
Changes since 1.20: +4 -1 lines
Log Message:
added deprecation warning to cmstools.py

File Contents

# Content
1 """Python helper tools for CMS FWLite
2
3 benedikt.hegner@cern.ch
4
5 """
6 import re
7 import ROOT
8 import exceptions
9 import sys
10 ### define tab completion
11 try:
12 import readline #cmscompleter
13 readline.parse_and_bind('tab: complete')
14 except:
15 print 'WARNING: Could not load tab completion'
16
17
18 # for adding iterators at runtime
19 import iterators
20
21
22 ### workaround iterator generators for ROOT classes
23 def all(container):
24
25 # loop over ROOT::TTree and similar
26 if hasattr(container,'GetEntries'):
27 try:
28 entries = container.GetEntries()
29 for entry in xrange(entries):
30 yield entry
31 except:
32 raise cmserror("Looping of %s failed" %container)
33
34 # loop over std::vectors and similar
35 elif hasattr(container, 'size'):
36 try:
37 entries = container.size()
38 for entry in xrange(entries):
39 yield container[entry]
40 except:
41 pass
42
43 # loop over containers with begin and end iterators
44 def loop(begin, end):
45 """Convert a pair of C++ iterators into a python generator"""
46 while (begin != end):
47 yield begin.__deref__() #*b
48 begin.__preinc__() #++b
49
50 ### auto branch types (Chris Jones)
51 def createBranchBuffer(branch):
52 reColons = re.compile(r'::')
53 reCloseTemplate =re.compile(r'>')
54 reOpenTemplate =re.compile(r'<')
55 branchType = ROOT.branchToClass(branch)
56 #buffer = eval ('ROOT.'+reColons.sub(".",reOpenTemplate.sub("(ROOT.",reCloseTemplate.sub(")",branchType.GetName())))+'()')
57 buffer = ROOT.MakeRootClass(branchType.GetName()) ()
58 if( branch.GetName()[-1] != '.') and (branch.GetName()!="EventAuxiliary"):
59 branch.SetAddress(buffer)
60 else:
61 branch.SetAddress(ROOT.AddressOf(buffer))
62 return buffer
63
64
65 class EventTree(object):
66 def __init__(self,obj):
67 sys.stderr.write ("WARNING: This package has been deprecated and will be removed in the near future.\nPlease switch to using FWLite.Python (https://twiki.cern.ch/twiki/bin/viewauth/CMS/WorkBookFWLitePython)\n")
68 treeName = 'Events'
69 if isinstance(obj, ROOT.TTree):
70 self._tree = obj
71 elif isinstance(obj, ROOT.TFile):
72 self._tree = obj.Get(treeName)
73 elif isinstance(obj, str):
74 self._tree = ROOT.TFile.Open(obj).Get(treeName)
75 else:
76 raise cmserror("EventTree accepts only TTrees, TFiles and filenames")
77 self._usedBranches = dict()
78 self._index = -1
79 self._aliases = self._tree.GetListOfAliases()
80 def branch(self,name):
81 # support for aliases
82 alias = self._tree.GetAlias(name)
83 if alias != '': name = alias
84 # access the branch in ttree
85 if name in self._usedBranches:
86 return self._usedBranches[name]
87 self._usedBranches[name]=EventBranch(self,name)
88 return self._usedBranches[name]
89 def cppCode(self, name):
90 """C++ code for accessing the product inside the full framework"""
91 alias = self._tree.GetAlias(name)
92 if alias != '': name = alias
93 tmpBranch = self._tree.GetBranch(name)
94 typeString = ROOT.branchToClass(tmpBranch).GetName()
95 if "edm::Wrapper" in typeString:
96 typeString = typeString.replace("<edm::Wrapper","")
97 typeString = typeString.rstrip(">")
98 nameParts = name.split("_")
99 if nameParts[2] == "":
100 cppCode = 'edm::Handle<%s > dummy;\nevent.getByLabel("%s", dummy);'\
101 %(typeString, nameParts[1])
102 else:
103 cppCode = 'edm::Handle<%s > dummy;\nevent.getByLabel("%s", "%s", dummy);'\
104 %(typeString, nameParts[1], nameParts[2])
105 return cppCode
106 def getListOfAliases(self):
107 return self._aliases
108 def SetAlias (self, alias, fullName):
109 self.tree().SetAlias(alias, fullName)
110 def index(self):
111 return self._index
112 def tree(self):
113 return self._tree
114 def __setBranchIndicies(self):
115 for branch in self._usedBranches.itervalues():
116 branch.setIndex(self._index)
117 def __getattr__(self, name):
118 return self.branch(name)
119 def __getitem__(self,key):
120 if key <0 or key > self._tree.GetEntries():
121 raise IndexError
122 self._index = key
123 self.__setBranchIndicies()
124 self._tree.GetEntry(self._index,0)
125 return Event(self)
126 def __iter__(self):
127 # flushing/initializing the root buffers
128 entry = 0
129 self._index = entry
130 self.__setBranchIndicies()
131 self._tree.GetEntry(self._index,0)
132 # the real loop
133 for entry in xrange(self._tree.GetEntries()):
134 self._index = entry
135 self.__setBranchIndicies()
136 self._tree.GetEntry(self._index,0)
137 yield Event(self) # TODO: don't return a new object but update the old one
138
139
140 class Event(object):
141 def __init__(self, eventTree):
142 self._eventTree = eventTree
143
144 def getProduct(self, name):
145 return iterators.addIterator(self._eventTree.branch(name)())
146
147 def __getattr__(self, name):
148 return iterators.addIterator(self._eventTree.branch(name)())
149
150
151 class EventBranch(object):
152 def __init__(self,parent,name):
153 self._branch = parent.tree().GetBranch(name)
154 if self._branch == None:
155 raise cmserror("Unknown branch "+name)
156 self._buffer = createBranchBuffer(self._branch)
157 self._index = parent.index()
158 self._readData = False
159 def setIndex(self,index):
160 self._index = index
161 self._readData = False
162 def __readData(self):
163 self._branch.GetEntry(self._index)
164 self._readData = True
165
166 # replace this by __getattr__ to allow branch.attr instead of branch().attr
167 def __call__(self):
168 if not self._readData:
169 self.__readData()
170 return self._buffer
171
172
173 class cmserror(exceptions.StandardError):
174 def __init__(self, message):
175 length = len(message)+7 #7=len("ERROR: ")
176 print "="*length
177 print "ERROR:", message
178 print "="*length