550 for name
in {PoolOpts.TTreeNames.DataHeader, PoolOpts.RNTupleNames.DataHeader}:
551 dhKey = self.
poolFile.FindKey( name )
554 if isinstance(obj, self.
ROOT.TTree):
555 nEntries = obj.GetEntries()
558 nEntries = self.
ROOT.Experimental.RNTupleReader.Open(obj).GetNEntries()
559 except AttributeError:
561 nEntries = self.
ROOT.RNTupleReader.Open(obj).GetNEntries()
563 raise NotImplementedError(f
"Keys of type {type(obj)!r} not supported")
570 for k
in self.
poolFile.GetListOfKeys():
571 keyname = k.GetName()
573 if isinstance(obj, self.
ROOT.TTree):
574 containerName = obj.GetName()
575 nEntries = obj.GetEntries()
579 reader = self.
ROOT.Experimental.RNTupleReader.Open(obj)
580 except AttributeError:
582 reader = self.
ROOT.RNTupleReader.Open(obj)
583 containerName = reader.GetDescriptor().GetName()
584 nEntries = reader.GetNEntries()
587 raise NotImplementedError(f
"Keys of type {type(obj)!r} not supported")
588 if containerName
not in containers:
590 containers.append(containerName)
592 if keyname.startswith(PoolOpts.POOL_HEADER)
and not keyname.endswith(
'Form'):
593 self.
dataHeaderA[PoolOpts.augmentationName(keyname)] = \
598 keys.sort (key =
lambda x: x.GetName())
604 if isinstance(obj, self.
ROOT.TTree):
608 inspector = self.
ROOT.Experimental.RNTupleInspector.Create(obj)
609 except AttributeError:
610 inspector = self.
ROOT.RNTupleInspector.Create(obj)
611 name = inspector.GetDescriptor().GetName()
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
620 memSizeNoZip = memSize
621 nEntries = obj.GetEntries()
625 br.GetName()
for br
in obj.GetListOfBranches()
626 if br.GetName().
count(
"DataHeader_p") > 0
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()
638 typeName = typeName ),
642 poolRecord =
PoolRecord(contName, memSize, diskSize, memSizeNoZip,
648 diskSize = inspector.GetCompressedSize() / Units.kb
649 memSize = inspector.GetUncompressedSize() / Units.kb
653 memSizeNoZip = memSize
654 nEntries = inspector.GetDescriptor().GetNEntries()
655 poolRecord =
PoolRecord(contName, memSize, diskSize, memSizeNoZip,
659 elif PoolOpts.isData(name):
660 if isinstance(obj, self.
ROOT.TTree):
661 if not hasattr(obj,
'GetListOfBranches'):
663 branches = obj.GetListOfBranches()
665 if name
in (PoolOpts.EVENT_DATA, PoolOpts.META_DATA):
667 for branch
in branches:
673 poolRecord.augName = PoolOpts.augmentationName(name)
675 self.
data += [ poolRecord ]
677 descriptor = inspector.GetDescriptor()
679 if name
in {PoolOpts.RNTupleNames.EventData, PoolOpts.RNTupleNames.MetaData}:
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(),
693 poolRecord.augName = PoolOpts.augmentationName(name)
695 self.
data += [ poolRecord ]
708 def checkFile(self, sorting = PoolRecord.Sorter.DiskSize):
718 if sorting
in PoolRecord.Sorter.allowedValues():
720 data.sort(key = operator.attrgetter(sorting) )
722 def _get_val(x, dflt=-999.):
723 if PoolOpts.FAST_MODE:
727 totMemSize = _get_val(self.
dataHeader.memSize, dflt=0.)
730 def _safe_div(num,den):
738 print(PoolOpts.HDR_FORMAT % (
"Mem Size",
"Disk Size",
"Size/Evt",
739 "MissZip/Mem",
"items",
740 "(X) Container Name (X=Tree|Branch)" ))
743 print(PoolOpts.ROW_FORMAT % (
747 _get_val (_safe_div(self.
dataHeader.memSizeNoZip,
757 totMemSize += 0.
if PoolOpts.FAST_MODE
else d.memSize
758 totDiskSize += d.diskSize
759 memSizeNoZip = d.memSizeNoZip/d.memSize
if d.memSize != 0.
else 0.
761 totMemSizeA[aug] = totMemSizeA.get(aug,0.) + d.memSize
762 totDiskSizeA[aug] = totDiskSizeA.get(aug,0.) + d.diskSize
764 print(PoolOpts.ROW_FORMAT % (
765 _get_val (d.memSize),
767 _safe_div(d.diskSize, float(self.
dataHeader.nEntries)),
768 _get_val (memSizeNoZip),
770 "("+d.dirType+
") "+d.name
778 print(PoolOpts.ROW_FORMAT % (
779 totMemSizeA[a], totDiskSizeA[a],
780 _safe_div(totDiskSizeA[a], float(self.
dataHeaderA[a].nEntries)),
783 "Aug Stream: " + (
'MAIN' if a==
'' else a)
786 print(PoolOpts.ROW_FORMAT % (
787 totMemSize, totDiskSize,
788 _safe_div(totDiskSize, float(self.
dataHeader.nEntries)),
790 "TOTAL (POOL containers)"
793 if PoolOpts.FAST_MODE:
794 print(
"::: warning: FAST_MODE was enabled: some columns' content ",)
795 print(
"is meaningless...")
801 print(
"Can't perform a detailedDump with a shelve file as input !")
804 if bufferName
is None:
805 bufferName =
"/dev/stdout"
806 out = open( bufferName,
"w" )
808 save_stdout_fileno = os.dup (sys.stdout.fileno())
809 os.dup2( out.fileno(), sys.stdout.fileno() )
811 out.write(
"#" * 80 + os.linesep )
812 out.write(
"## detailed dump" + os.linesep )
815 for key
in self.
keys:
817 name = tree.GetName()
819 if PoolOpts.isDataHeader(name)
or \
820 PoolOpts.isData(name):
822 print (
"=== [%s] ===" % name, file=sys.stderr)
824 except Exception
as err:
825 print (
"Caught:",err, file=sys.stderr)
826 print (sys.exc_info()[0], file=sys.stderr)
827 print (sys.exc_info()[1], file=sys.stderr)
831 out.write(
"#" * 80 + os.linesep )
833 out.write(
"#" * 80 + os.linesep )