589 for name
in {PoolOpts.TTreeNames.DataHeader, PoolOpts.RNTupleNames.DataHeader}:
590 dhKey = self.
poolFile.FindKey( name )
593 if isinstance(obj, self.
ROOT.TTree):
594 nEntries = obj.GetEntries()
597 nEntries = self.
ROOT.Experimental.RNTupleReader.Open(obj).GetNEntries()
598 except AttributeError:
600 nEntries = self.
ROOT.RNTupleReader.Open(obj).GetNEntries()
602 raise NotImplementedError(f
"Keys of type {type(obj)!r} not supported")
609 for k
in self.
poolFile.GetListOfKeys():
610 keyname = k.GetName()
612 if isinstance(obj, self.
ROOT.TTree):
613 containerName = obj.GetName()
614 nEntries = obj.GetEntries()
618 reader = self.
ROOT.Experimental.RNTupleReader.Open(obj)
619 except AttributeError:
621 reader = self.
ROOT.RNTupleReader.Open(obj)
622 containerName = reader.GetDescriptor().GetName()
623 nEntries = reader.GetNEntries()
626 raise NotImplementedError(f
"Keys of type {type(obj)!r} not supported")
627 if containerName
not in containers:
629 containers.append(containerName)
631 if keyname.startswith(PoolOpts.POOL_HEADER)
and not keyname.endswith(
'Form'):
632 self.
dataHeaderA[PoolOpts.augmentationName(keyname)] = \
637 keys.sort (key =
lambda x: x.GetName())
643 if isinstance(obj, self.
ROOT.TTree):
647 inspector = self.
ROOT.Experimental.RNTupleInspector.Create(obj)
648 except AttributeError:
649 inspector = self.
ROOT.RNTupleInspector.Create(obj)
650 name = inspector.GetDescriptor().GetName()
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
659 memSizeNoZip = memSize
660 nEntries = obj.GetEntries()
664 br.GetName()
for br
in obj.GetListOfBranches()
665 if br.GetName().
count(
"DataHeader_p") > 0
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()
677 typeName = typeName ),
681 poolRecord =
PoolRecord(contName, memSize, diskSize, memSizeNoZip,
687 diskSize = inspector.GetCompressedSize() / Units.kb
688 memSize = inspector.GetUncompressedSize() / Units.kb
692 memSizeNoZip = memSize
693 nEntries = inspector.GetDescriptor().GetNEntries()
694 poolRecord =
PoolRecord(contName, memSize, diskSize, memSizeNoZip,
698 elif PoolOpts.isData(name):
699 if isinstance(obj, self.
ROOT.TTree):
700 if not hasattr(obj,
'GetListOfBranches'):
702 branches = obj.GetListOfBranches()
704 if name
in (PoolOpts.EVENT_DATA, PoolOpts.META_DATA):
706 for branch
in branches:
712 poolRecord.augName = PoolOpts.augmentationName(name)
714 self.
data += [ poolRecord ]
716 descriptor = inspector.GetDescriptor()
718 if name
in {PoolOpts.RNTupleNames.EventData, PoolOpts.RNTupleNames.MetaData}:
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(),
732 poolRecord.augName = PoolOpts.augmentationName(name)
734 self.
data += [ poolRecord ]
747 def checkFile(self, sorting = PoolRecord.Sorter.DiskSize):
757 if sorting
in PoolRecord.Sorter.allowedValues():
759 data.sort(key = operator.attrgetter(sorting) )
761 def _get_val(x, dflt=-999.):
762 if PoolOpts.FAST_MODE:
766 totMemSize = _get_val(self.
dataHeader.memSize, dflt=0.)
769 def _safe_div(num,den):
777 print(PoolOpts.HDR_FORMAT % (
"Mem Size",
"Disk Size",
"Size/Evt",
778 "MissZip/Mem",
"items",
779 "(X) Container Name (X=Tree|Branch)" ))
782 print(PoolOpts.ROW_FORMAT % (
786 _get_val (_safe_div(self.
dataHeader.memSizeNoZip,
796 totMemSize += 0.
if PoolOpts.FAST_MODE
else d.memSize
797 totDiskSize += d.diskSize
798 memSizeNoZip = d.memSizeNoZip/d.memSize
if d.memSize != 0.
else 0.
800 totMemSizeA[aug] = totMemSizeA.get(aug,0.) + d.memSize
801 totDiskSizeA[aug] = totDiskSizeA.get(aug,0.) + d.diskSize
803 print(PoolOpts.ROW_FORMAT % (
804 _get_val (d.memSize),
806 _safe_div(d.diskSize, float(self.
dataHeader.nEntries)),
807 _get_val (memSizeNoZip),
809 "("+d.dirType+
") "+d.name
817 print(PoolOpts.ROW_FORMAT % (
818 totMemSizeA[a], totDiskSizeA[a],
819 _safe_div(totDiskSizeA[a], float(self.
dataHeaderA[a].nEntries)),
822 "Aug Stream: " + (
'MAIN' if a==
'' else a)
825 print(PoolOpts.ROW_FORMAT % (
826 totMemSize, totDiskSize,
827 _safe_div(totDiskSize, float(self.
dataHeader.nEntries)),
829 "TOTAL (POOL containers)"
832 if PoolOpts.FAST_MODE:
833 print(
"::: warning: FAST_MODE was enabled: some columns' content ",)
834 print(
"is meaningless...")
840 print(
"Can't perform a detailedDump with a shelve file as input !")
843 if bufferName
is None:
844 bufferName =
"/dev/stdout"
845 out = open( bufferName,
"w" )
847 save_stdout_fileno = os.dup (sys.stdout.fileno())
848 os.dup2( out.fileno(), sys.stdout.fileno() )
850 out.write(
"#" * 80 + os.linesep )
851 out.write(
"## detailed dump" + os.linesep )
854 for key
in self.
keys:
856 name = tree.GetName()
858 if PoolOpts.isDataHeader(name)
or \
859 PoolOpts.isData(name):
861 print (
"=== [%s] ===" % name, file=sys.stderr)
863 except Exception
as err:
864 print (
"Caught:",err, file=sys.stderr)
865 print (sys.exc_info()[0], file=sys.stderr)
866 print (sys.exc_info()[1], file=sys.stderr)
870 out.write(
"#" * 80 + os.linesep )
872 out.write(
"#" * 80 + os.linesep )