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