internal String8 rntuple_description(Arena *arena, const RNTuple &anchor) { String8 desc = push_str8f(arena, "version %u.%u.%u.%u", anchor.GetVersionEpoch(), anchor.GetVersionMajor(), anchor.GetVersionMinor(), anchor.GetVersionPatch()); return desc; } internal RNTuple_Info get_rntuple_info(Arena *arena, const char *fname, const char *ntpl_name) { RNTuple_Info info = {}; // Open the TFile TFile *tfile = TFile::Open(fname, "READ"); if (!tfile) { fprintf(stderr, "Failed to open TFile.\n"); return info; } defer { delete tfile; }; // Get the RNTuple information const RNTuple *anchor = tfile->Get(ntpl_name); if (anchor) { info.anchor = *anchor; info.header.start = anchor->GetSeekHeader(); info.header.len = anchor->GetNBytesHeader(); info.footer.start = anchor->GetSeekFooter(); info.footer.len = anchor->GetNBytesFooter(); } else { fprintf(stderr, "RNTuple '%s' not found in %s.\n", ntpl_name, fname); } return info; }