Source code for alphatwirl.delphes.TClonesArrayWrap

# Tai Sakuma <tai.sakuma@gmail.com>

import collections

##__________________________________________________________________||
[docs]class TClonesArrayWrap(collections.Sequence): """wrap TClonesArray for fast access" (under development. not used) """ def __init__(self, tclonesarray): self.tclonesarray = tclonesarray self.name = self.tclonesarray.GetName() self.max_length = tclonesarray.GetSize() self.extracted_length = 0 self.list = [ ] def _GetEntries(self): ## return self.tclonesarray.GetEntries() # very slow return self.tclonesarray.GetEntriesFast() # faster but still very slow def __getitem__(self, i): nentries = self._GetEntries() if i >= nentries: raise IndexError('the index is out of range: {}[{}]'.format(self.name, i)) if self.extracted_length < nentries: ## print self.extracted_length, nentries self.list[self.extracted_length:] = [self.tclonesarray.At(i) for i in range(self.extracted_length, nentries)] self.extracted_length = nentries return self.list[i] def __len__(self): return self.tclonesarray.GetEntriesFast()
##__________________________________________________________________||