548 def __processFile(self):
549
550 for name in {PoolOpts.TTreeNames.DataHeader, PoolOpts.RNTupleNames.DataHeader}:
551 dhKey = self.poolFile.FindKey( name )
552 if dhKey:
553 obj = self.poolFile.
Get( name )
554 if isinstance(obj, self.ROOT.TTree):
555 nEntries = obj.GetEntries()
556 elif isRNTuple(obj):
557 try:
558 nEntries = self.ROOT.Experimental.RNTupleReader.Open(obj).GetNEntries()
559 except AttributeError:
560
561 nEntries = self.ROOT.RNTupleReader.Open(obj).GetNEntries()
562 else:
563 raise NotImplementedError(f"Keys of type {type(obj)!r} not supported")
564 break
565 else:
566 nEntries = 0
567
568 keys = []
569 containers = []
570 for k in self.poolFile.GetListOfKeys():
571 keyname = k.GetName()
572 obj = self.poolFile.
Get( keyname )
573 if isinstance(obj, self.ROOT.TTree):
574 containerName = obj.GetName()
575 nEntries = obj.GetEntries()
576 dirType = "T"
577 elif isRNTuple(obj):
578 try:
579 reader = self.ROOT.Experimental.RNTupleReader.Open(obj)
580 except AttributeError:
581
582 reader = self.ROOT.RNTupleReader.Open(obj)
583 containerName = reader.GetDescriptor().GetName()
584 nEntries = reader.GetNEntries()
585 dirType = "N"
586 else:
587 raise NotImplementedError(f"Keys of type {type(obj)!r} not supported")
588 if containerName not in containers:
589 keys.append(k)
590 containers.append(containerName)
591 pass
592 if keyname.startswith(PoolOpts.POOL_HEADER) and not keyname.endswith('Form'):
593 self.dataHeaderA[PoolOpts.augmentationName(keyname)] = \
594 PoolRecord("DataHeader", 0, 0, 0,
595 nEntries = nEntries,
596 dirType = dirType)
597
598 keys.sort (key = lambda x: x.GetName())
599 self.keys = keys
600 del containers
601
602 for k in keys:
603 obj = self.poolFile.
Get( k.GetName() )
604 if isinstance(obj, self.ROOT.TTree):
605 name = obj.GetName()
606 elif isRNTuple(obj):
607 try:
608 inspector = self.ROOT.Experimental.RNTupleInspector.Create(obj)
609 except AttributeError:
610 inspector = self.ROOT.RNTupleInspector.Create(obj)
611 name = inspector.GetDescriptor().GetName()
612
613 if PoolOpts.isDataHeader(name):
614 contName = "DataHeader"
615 if isinstance(obj, self.ROOT.TTree):
616 memSize = obj.GetTotBytes() / Units.kb
617 diskSize = obj.GetZipBytes() / Units.kb
618 memSizeNoZip = 0.0
619 if diskSize < 0.001:
620 memSizeNoZip = memSize
621 nEntries = obj.GetEntries()
622
624 dhBranchNames = [
625 br.GetName() for br in obj.GetListOfBranches()
626 if br.GetName().
count(
"DataHeader_p") > 0
627 ]
628 if len(dhBranchNames) == 1:
629 dhBranch = obj.GetBranch(dhBranchNames[0])
630 typeName = dhBranch.GetClassName()
631 if not typeName and (leaf := dhBranch.GetListOfLeaves().At(0)):
632 typeName = leaf.GetTypeName()
633 poolRecord = retrieveBranchInfos(
634 dhBranch,
635 PoolRecord( contName, 0., 0., 0.,
636 nEntries,
637 dirType = "T",
638 typeName = typeName ),
639 ident = " "
640 )
641 else:
642 poolRecord = PoolRecord(contName, memSize, diskSize, memSizeNoZip,
643 nEntries,
644 dirType = "T")
645
646 self.dataHeader = poolRecord
647 elif isRNTuple(obj):
648 diskSize = inspector.GetCompressedSize() / Units.kb
649 memSize = inspector.GetUncompressedSize() / Units.kb
650
651 memSizeNoZip = 0.0
652 if diskSize < 0.001:
653 memSizeNoZip = memSize
654 nEntries = inspector.GetDescriptor().GetNEntries()
655 poolRecord = PoolRecord(contName, memSize, diskSize, memSizeNoZip,
656 nEntries,
657 dirType = "N")
658 self.dataHeader = poolRecord
659 elif PoolOpts.isData(name):
660 if isinstance(obj, self.ROOT.TTree):
661 if not hasattr(obj, 'GetListOfBranches'):
662 continue
663 branches = obj.GetListOfBranches()
664 dirType = "T"
665 if name in (PoolOpts.EVENT_DATA, PoolOpts.META_DATA):
666 dirType = "B"
667 for branch in branches:
668 poolRecord = retrieveBranchInfos(
669 branch,
670 make_pool_record(branch, dirType),
671 ident = " "
672 )
673 poolRecord.augName = PoolOpts.augmentationName(name)
674 self.augNames.
add(poolRecord.augName)
675 self.data += [ poolRecord ]
676 elif isRNTuple(obj):
677 descriptor = inspector.GetDescriptor()
678 dirType = "N"
679 if name in {PoolOpts.RNTupleNames.EventData, PoolOpts.RNTupleNames.MetaData}:
680 dirType = "F"
681 fieldZeroId = descriptor.GetFieldZeroId()
682 for fieldDescriptor in descriptor.GetFieldIterable(fieldZeroId):
683 fieldId = fieldDescriptor.GetId()
684 fieldTreeInspector = inspector.GetFieldTreeInspector(fieldId)
685 diskSize = fieldTreeInspector.GetCompressedSize() / Units.kb
686 memSize = fieldTreeInspector.GetUncompressedSize() / Units.kb
687 typeName = fieldDescriptor.GetTypeName()
688 fieldName = fieldDescriptor.GetFieldName()
689 poolRecord = PoolRecord(fieldName, memSize, diskSize, memSize,
690 descriptor.GetNEntries(),
691 dirType=dirType,
692 typeName=typeName)
693 poolRecord.augName = PoolOpts.augmentationName(name)
694 self.augNames.
add(poolRecord.augName)
695 self.data += [ poolRecord ]
696
697
698 return
699
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