582 def __processFile(self):
583
584 for name in {PoolOpts.TTreeNames.DataHeader, PoolOpts.RNTupleNames.DataHeader}:
585 dhKey = self.poolFile.FindKey( name )
586 if dhKey:
587 obj = self.poolFile.
Get( name )
588 if isinstance(obj, self.ROOT.TTree):
589 nEntries = obj.GetEntries()
590 elif isRNTuple(obj):
591 try:
592 nEntries = self.ROOT.Experimental.RNTupleReader.Open(obj).GetNEntries()
593 except AttributeError:
594
595 nEntries = self.ROOT.RNTupleReader.Open(obj).GetNEntries()
596 else:
597 raise NotImplementedError(f"Keys of type {type(obj)!r} not supported")
598 break
599 else:
600 nEntries = 0
601
602 keys = []
603 containers = []
604 for k in self.poolFile.GetListOfKeys():
605 keyname = k.GetName()
606 obj = self.poolFile.
Get( keyname )
607 if isinstance(obj, self.ROOT.TTree):
608 containerName = obj.GetName()
609 nEntries = obj.GetEntries()
610 dirType = "T"
611 elif isRNTuple(obj):
612 try:
613 reader = self.ROOT.Experimental.RNTupleReader.Open(obj)
614 except AttributeError:
615
616 reader = self.ROOT.RNTupleReader.Open(obj)
617 containerName = reader.GetDescriptor().GetName()
618 nEntries = reader.GetNEntries()
619 dirType = "N"
620 else:
621 raise NotImplementedError(f"Keys of type {type(obj)!r} not supported")
622 if containerName not in containers:
623 keys.append(k)
624 containers.append(containerName)
625 pass
626 if keyname.startswith(PoolOpts.POOL_HEADER) and not keyname.endswith('Form'):
627 self.dataHeaderA[PoolOpts.augmentationName(keyname)] = \
628 PoolRecord("DataHeader", 0, 0, 0,
629 nEntries = nEntries,
630 dirType = dirType)
631
632 keys.sort (key = lambda x: x.GetName())
633 self.keys = keys
634 del containers
635
636 for k in keys:
637 obj = self.poolFile.
Get( k.GetName() )
638 if isinstance(obj, self.ROOT.TTree):
639 name = obj.GetName()
640 elif isRNTuple(obj):
641 try:
642 inspector = self.ROOT.Experimental.RNTupleInspector.Create(obj)
643 except AttributeError:
644 inspector = self.ROOT.RNTupleInspector.Create(obj)
645 name = inspector.GetDescriptor().GetName()
646
647 if PoolOpts.isDataHeader(name):
648 contName = "DataHeader"
649 if isinstance(obj, self.ROOT.TTree):
650 memSize = obj.GetTotBytes() / Units.kb
651 diskSize = obj.GetZipBytes() / Units.kb
652 memSizeNoZip = 0.0
653 if diskSize < 0.001:
654 memSizeNoZip = memSize
655 nEntries = obj.GetEntries()
656
658 dhBranchNames = [
659 br.GetName() for br in obj.GetListOfBranches()
660 if br.GetName().
count(
"DataHeader_p") > 0
661 ]
662 if len(dhBranchNames) == 1:
663 dhBranch = obj.GetBranch(dhBranchNames[0])
664 typeName = dhBranch.GetClassName()
665 if not typeName and (leaf := dhBranch.GetListOfLeaves().At(0)):
666 typeName = leaf.GetTypeName()
667 poolRecord = retrieveBranchInfos(
668 dhBranch,
669 PoolRecord( contName, 0., 0., 0.,
670 nEntries,
671 dirType = "T",
672 typeName = typeName ),
673 ident = " "
674 )
675 else:
676 poolRecord = PoolRecord(contName, memSize, diskSize, memSizeNoZip,
677 nEntries,
678 dirType = "T")
679
680 self.dataHeader = poolRecord
681 elif isRNTuple(obj):
682 diskSize = inspector.GetCompressedSize() / Units.kb
683 memSize = inspector.GetUncompressedSize() / Units.kb
684
685 memSizeNoZip = 0.0
686 if diskSize < 0.001:
687 memSizeNoZip = memSize
688 nEntries = inspector.GetDescriptor().GetNEntries()
689 poolRecord = PoolRecord(contName, memSize, diskSize, memSizeNoZip,
690 nEntries,
691 dirType = "N")
692 self.dataHeader = poolRecord
693 elif PoolOpts.isData(name):
694 if isinstance(obj, self.ROOT.TTree):
695 if not hasattr(obj, 'GetListOfBranches'):
696 continue
697 branches = obj.GetListOfBranches()
698 dirType = "T"
699 if name in (PoolOpts.EVENT_DATA, PoolOpts.META_DATA):
700 dirType = "B"
701 for branch in branches:
702 poolRecord = retrieveBranchInfos(
703 branch,
704 make_pool_record(branch, dirType),
705 ident = " "
706 )
707 poolRecord.augName = PoolOpts.augmentationName(name)
708 self.augNames.
add(poolRecord.augName)
709 self.data += [ poolRecord ]
710 elif isRNTuple(obj):
711 descriptor = inspector.GetDescriptor()
712 dirType = "N"
713 if name in {PoolOpts.RNTupleNames.EventData, PoolOpts.RNTupleNames.MetaData}:
714 dirType = "F"
715 fieldZeroId = descriptor.GetFieldZeroId()
716 for fieldDescriptor in descriptor.GetFieldIterable(fieldZeroId):
717 fieldId = fieldDescriptor.GetId()
718 fieldTreeInspector = inspector.GetFieldTreeInspector(fieldId)
719 diskSize = fieldTreeInspector.GetCompressedSize() / Units.kb
720 memSize = fieldTreeInspector.GetUncompressedSize() / Units.kb
721 typeName = fieldDescriptor.GetTypeName()
722 fieldName = fieldDescriptor.GetFieldName()
723 poolRecord = PoolRecord(fieldName, memSize, diskSize, memSize,
724 descriptor.GetNEntries(),
725 dirType=dirType,
726 typeName=typeName)
727 poolRecord.augName = PoolOpts.augmentationName(name)
728 self.augNames.
add(poolRecord.augName)
729 self.data += [ poolRecord ]
730
731
732 return
733
T * Get(TFile &f, const std::string &n, const std::string &dir="", const chainmap_t *chainmap=0, std::vector< std::string > *saved=0)
get a histogram given a path, and an optional initial directory if histogram is not found,...
bool add(const std::string &hname, TKey *tobj)
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string