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