584 for name
in {PoolOpts.TTreeNames.DataHeader, PoolOpts.RNTupleNames.DataHeader}:
585 dhKey = self.
poolFile.FindKey( name )
588 if isinstance(obj, self.
ROOT.TTree):
589 nEntries = obj.GetEntries()
592 nEntries = self.
ROOT.Experimental.RNTupleReader.Open(obj).GetNEntries()
593 except AttributeError:
595 nEntries = self.
ROOT.RNTupleReader.Open(obj).GetNEntries()
597 raise NotImplementedError(f
"Keys of type {type(obj)!r} not supported")
604 for k
in self.
poolFile.GetListOfKeys():
605 keyname = k.GetName()
607 if isinstance(obj, self.
ROOT.TTree):
608 containerName = obj.GetName()
609 nEntries = obj.GetEntries()
613 reader = self.
ROOT.Experimental.RNTupleReader.Open(obj)
614 except AttributeError:
616 reader = self.
ROOT.RNTupleReader.Open(obj)
617 containerName = reader.GetDescriptor().GetName()
618 nEntries = reader.GetNEntries()
621 raise NotImplementedError(f
"Keys of type {type(obj)!r} not supported")
622 if containerName
not in containers:
624 containers.append(containerName)
626 if keyname.startswith(PoolOpts.POOL_HEADER)
and not keyname.endswith(
'Form'):
627 self.
dataHeaderA[PoolOpts.augmentationName(keyname)] = \
632 keys.sort (key =
lambda x: x.GetName())
638 if isinstance(obj, self.
ROOT.TTree):
642 inspector = self.
ROOT.Experimental.RNTupleInspector.Create(obj)
643 except AttributeError:
644 inspector = self.
ROOT.RNTupleInspector.Create(obj)
645 name = inspector.GetDescriptor().GetName()
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
654 memSizeNoZip = memSize
655 nEntries = obj.GetEntries()
659 br.GetName()
for br
in obj.GetListOfBranches()
660 if br.GetName().
count(
"DataHeader_p") > 0
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()
672 typeName = typeName ),
676 poolRecord =
PoolRecord(contName, memSize, diskSize, memSizeNoZip,
682 diskSize = inspector.GetCompressedSize() / Units.kb
683 memSize = inspector.GetUncompressedSize() / Units.kb
687 memSizeNoZip = memSize
688 nEntries = inspector.GetDescriptor().GetNEntries()
689 poolRecord =
PoolRecord(contName, memSize, diskSize, memSizeNoZip,
693 elif PoolOpts.isData(name):
694 if isinstance(obj, self.
ROOT.TTree):
695 if not hasattr(obj,
'GetListOfBranches'):
697 branches = obj.GetListOfBranches()
699 if name
in (PoolOpts.EVENT_DATA, PoolOpts.META_DATA):
701 for branch
in branches:
707 poolRecord.augName = PoolOpts.augmentationName(name)
709 self.
data += [ poolRecord ]
711 descriptor = inspector.GetDescriptor()
713 if name
in {PoolOpts.RNTupleNames.EventData, PoolOpts.RNTupleNames.MetaData}:
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(),
727 poolRecord.augName = PoolOpts.augmentationName(name)
729 self.
data += [ poolRecord ]
742 def checkFile(self, sorting = PoolRecord.Sorter.DiskSize):
752 if sorting
in PoolRecord.Sorter.allowedValues():
754 data.sort(key = operator.attrgetter(sorting) )
756 def _get_val(x, dflt=-999.):
757 if PoolOpts.FAST_MODE:
761 totMemSize = _get_val(self.
dataHeader.memSize, dflt=0.)
764 def _safe_div(num,den):
772 print(PoolOpts.HDR_FORMAT % (
"Mem Size",
"Disk Size",
"Size/Evt",
773 "MissZip/Mem",
"items",
774 "(X) Container Name (X=Tree|Branch)" ))
777 print(PoolOpts.ROW_FORMAT % (
781 _get_val (_safe_div(self.
dataHeader.memSizeNoZip,
791 totMemSize += 0.
if PoolOpts.FAST_MODE
else d.memSize
792 totDiskSize += d.diskSize
793 memSizeNoZip = d.memSizeNoZip/d.memSize
if d.memSize != 0.
else 0.
795 totMemSizeA[aug] = totMemSizeA.get(aug,0.) + d.memSize
796 totDiskSizeA[aug] = totDiskSizeA.get(aug,0.) + d.diskSize
798 print(PoolOpts.ROW_FORMAT % (
799 _get_val (d.memSize),
801 _safe_div(d.diskSize, float(self.
dataHeader.nEntries)),
802 _get_val (memSizeNoZip),
804 "("+d.dirType+
") "+d.name
812 print(PoolOpts.ROW_FORMAT % (
813 totMemSizeA[a], totDiskSizeA[a],
814 _safe_div(totDiskSizeA[a], float(self.
dataHeaderA[a].nEntries)),
817 "Aug Stream: " + (
'MAIN' if a==
'' else a)
820 print(PoolOpts.ROW_FORMAT % (
821 totMemSize, totDiskSize,
822 _safe_div(totDiskSize, float(self.
dataHeader.nEntries)),
824 "TOTAL (POOL containers)"
827 if PoolOpts.FAST_MODE:
828 print(
"::: warning: FAST_MODE was enabled: some columns' content ",)
829 print(
"is meaningless...")
835 print(
"Can't perform a detailedDump with a shelve file as input !")
838 if bufferName
is None:
839 bufferName =
"/dev/stdout"
840 out = open( bufferName,
"w" )
842 save_stdout_fileno = os.dup (sys.stdout.fileno())
843 os.dup2( out.fileno(), sys.stdout.fileno() )
845 out.write(
"#" * 80 + os.linesep )
846 out.write(
"## detailed dump" + os.linesep )
849 for key
in self.
keys:
851 name = tree.GetName()
853 if PoolOpts.isDataHeader(name)
or \
854 PoolOpts.isData(name):
856 print (
"=== [%s] ===" % name, file=sys.stderr)
858 except Exception
as err:
859 print (
"Caught:",err, file=sys.stderr)
860 print (sys.exc_info()[0], file=sys.stderr)
861 print (sys.exc_info()[1], file=sys.stderr)
865 out.write(
"#" * 80 + os.linesep )
867 out.write(
"#" * 80 + os.linesep )