diff --git a/src/rootfilespec/bootstrap/TList.py b/src/rootfilespec/bootstrap/TList.py index 7343c17..c2f90b4 100644 --- a/src/rootfilespec/bootstrap/TList.py +++ b/src/rootfilespec/bootstrap/TList.py @@ -46,14 +46,10 @@ def update_members(cls, members: Members, buffer: ReadBuffer): msg = f"Expected TObject but got {item!r}" raise ValueError(msg) # No idea why there is a null pad byte here - pad, buffer = buffer.consume(1) - if pad != b"\x00": - if pad == b"\x01": - # TODO: understand this case (e.g. uproot-issue-350.root) - (mystery,), buffer = buffer.unpack(">B") - else: - msg = f"Unexpected pad byte in TList: {pad!r}" - raise ValueError(msg) + (pad,), buffer = buffer.unpack(">B") + if pad != 0: + # TODO: understand this case (e.g. uproot-issue-350.root) + mystery, buffer = buffer.consume(pad) items.append(item) members["items"] = items return members, buffer diff --git a/src/rootfilespec/bootstrap/TObject.py b/src/rootfilespec/bootstrap/TObject.py index 15c42d5..04e9854 100644 --- a/src/rootfilespec/bootstrap/TObject.py +++ b/src/rootfilespec/bootstrap/TObject.py @@ -50,6 +50,17 @@ class TObjFlag(IntFlag): """TStreamerElement status bit or kInvalidObject""" kListOfRules = 0x4000 """The schema evolution rules stored at the end of the streamer info""" + kMysteryCanvas1 = 0x100000 + """Appears in some TCanvas objects, not sure what it means.""" + kMysteryCanvas2 = 0x200000 + """Appears in some TCanvas objects, not sure what it means.""" + kMysteryPad1 = 0x200 + """Appears in some TCanvas objects, not sure what it means.""" + kMysteryPad2 = 0x400 + """Appears in some TCanvas objects, not sure what it means.""" + kMysteryPad3 = 0x800 + """Appears in some TCanvas objects, not sure what it means.""" + # TODO: there are too many of these mystery bits, we should remove invalid bit checks # TODO: validate on initialization that no bits are set that are not defined in this class def __repr__(self): diff --git a/src/rootfilespec/bootstrap/__init__.py b/src/rootfilespec/bootstrap/__init__.py index 1667f3a..8aed44e 100644 --- a/src/rootfilespec/bootstrap/__init__.py +++ b/src/rootfilespec/bootstrap/__init__.py @@ -18,6 +18,7 @@ RooLinkedList, TAtt3D, TFormula, + TQObject, TVirtualIndex, Uninterpreted, ) @@ -75,6 +76,7 @@ "TNamed", "TObjArray", "TObject", + "TQObject", "TSeqCollection", "TStreamerBase", "TStreamerBasicPointer", diff --git a/src/rootfilespec/bootstrap/assumed.py b/src/rootfilespec/bootstrap/assumed.py index 6d9ae32..08f1b6a 100644 --- a/src/rootfilespec/bootstrap/assumed.py +++ b/src/rootfilespec/bootstrap/assumed.py @@ -140,3 +140,18 @@ def update_members(cls, members: Members, buffer: ReadBuffer): DICTIONARY["TFormula"] = TFormula + + +@serializable +class TQObject(ROOTSerializable): + """Qt object communication object for ROOT GUIs + + Nothing is serialized + """ + + @classmethod + def update_members(cls, members: Members, buffer: ReadBuffer): + return members, buffer + + +DICTIONARY["TQObject"] = TQObject