311 def __init__ (self, file, use_proxy = True, use_hash = False):
312 """Create a root unpickler.
313FILE should be a Root TFile.
314"""
315 self.__use_proxy = use_proxy
316 self.__file = file
317 self.__io = Read_Wrapper()
318 pickle.Unpickler.__init__ (self, self.__io)
319
320 self.__n = 0
321 xsave.add (file)
322
323 if use_hash:
324 htab = {}
325 ctab = {}
326 for k in file.GetListOfKeys():
327 nm = k.GetName()
328 cy = k.GetCycle()
329 htab[(nm,cy)] = k
330 if cy > ctab.get(nm,0):
331 ctab[nm] = cy
332 htab[(nm,9999)] = k
333 file._htab = htab
334 oget = file.Get
335 def xget (nm0):
336 nm = nm0
337 ipos = nm.find (';')
338 if ipos >= 0:
339 cy = nm[ipos+1]
340 if cy == '*':
341 cy = 10000
342 else:
343 cy = int(cy)
344 nm = nm[:ipos-1]
345 else:
346 cy = 9999
347 ret = htab.get ((nm,cy), None)
348 if not ret:
349 print ("did't find", nm, cy, len(htab))
350 return oget (nm0)
351
352 ret = ret.ReadObj()
353
354 return ret
355 file.Get = xget
356 return
357
358