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

# User Rev Content
1 hegner 1.1 """Python helper tools for CMS FWLite
2    
3     benedikt.hegner@cern.ch
4    
5     """
6 hegner 1.4 import re
7     import ROOT
8     import exceptions
9 cplager 1.21 import sys
10 hegner 1.1 ### define tab completion
11     try:
12 hegner 1.19 import readline #cmscompleter
13 hegner 1.1 readline.parse_and_bind('tab: complete')
14     except:
15     print 'WARNING: Could not load tab completion'
16    
17    
18 hegner 1.10 # for adding iterators at runtime
19     import iterators
20    
21    
22 hegner 1.1 ### 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 hegner 1.9 raise cmserror("Looping of %s failed" %container)
33 hegner 1.1
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 hegner 1.4
43 hegner 1.6 # 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 hegner 1.4
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 hegner 1.13 #buffer = eval ('ROOT.'+reColons.sub(".",reOpenTemplate.sub("(ROOT.",reCloseTemplate.sub(")",branchType.GetName())))+'()')
57     buffer = ROOT.MakeRootClass(branchType.GetName()) ()
58 hegner 1.17 if( branch.GetName()[-1] != '.') and (branch.GetName()!="EventAuxiliary"):
59 hegner 1.4 branch.SetAddress(buffer)
60     else:
61     branch.SetAddress(ROOT.AddressOf(buffer))
62     return buffer
63    
64 hegner 1.9
65 hegner 1.4 class EventTree(object):
66 cplager 1.21 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 hegner 1.8 if isinstance(obj, ROOT.TTree):
70     self._tree = obj
71     elif isinstance(obj, ROOT.TFile):
72 cplager 1.20 self._tree = obj.Get(treeName)
73 hegner 1.8 elif isinstance(obj, str):
74 cplager 1.20 self._tree = ROOT.TFile.Open(obj).Get(treeName)
75 hegner 1.8 else:
76 hegner 1.9 raise cmserror("EventTree accepts only TTrees, TFiles and filenames")
77 hegner 1.8 self._usedBranches = dict()
78     self._index = -1
79     self._aliases = self._tree.GetListOfAliases()
80 hegner 1.4 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 hegner 1.11 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 hegner 1.12 if "edm::Wrapper" in typeString:
96     typeString = typeString.replace("<edm::Wrapper","")
97     typeString = typeString.rstrip(">")
98 hegner 1.11 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 hegner 1.5 def getListOfAliases(self):
107     return self._aliases
108 hegner 1.18 def SetAlias (self, alias, fullName):
109     self.tree().SetAlias(alias, fullName)
110 hegner 1.9 def index(self):
111     return self._index
112 hegner 1.4 def tree(self):
113     return self._tree
114     def __setBranchIndicies(self):
115     for branch in self._usedBranches.itervalues():
116     branch.setIndex(self._index)
117 hegner 1.9 def __getattr__(self, name):
118 hegner 1.15 return self.branch(name)
119 hegner 1.4 def __getitem__(self,key):
120     if key <0 or key > self._tree.GetEntries():
121     raise IndexError
122     self._index = key
123     self.__setBranchIndicies()
124 hegner 1.16 self._tree.GetEntry(self._index,0)
125     return Event(self)
126 hegner 1.4 def __iter__(self):
127 hegner 1.14 # 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 hegner 1.4 for entry in xrange(self._tree.GetEntries()):
134     self._index = entry
135     self.__setBranchIndicies()
136 hegner 1.7 self._tree.GetEntry(self._index,0)
137 hegner 1.10 yield Event(self) # TODO: don't return a new object but update the old one
138 hegner 1.7
139 hegner 1.4
140 hegner 1.10 class Event(object):
141     def __init__(self, eventTree):
142     self._eventTree = eventTree
143    
144 hegner 1.13 def getProduct(self, name):
145 hegner 1.10 return iterators.addIterator(self._eventTree.branch(name)())
146    
147     def __getattr__(self, name):
148     return iterators.addIterator(self._eventTree.branch(name)())
149    
150    
151 hegner 1.4 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 hegner 1.9
173 hegner 1.4 class cmserror(exceptions.StandardError):
174     def __init__(self, message):
175 hegner 1.9 length = len(message)+7 #7=len("ERROR: ")
176     print "="*length
177 hegner 1.4 print "ERROR:", message
178 hegner 1.9 print "="*length