@@ -12,7 +12,7 @@ const version_id = 'dev',
1212
1313/** @summary version date
1414 * @desc Release date in format day/month/year like '14/04/2022' */
15- version_date = '28/05 /2025',
15+ version_date = '2/06 /2025',
1616
1717/** @summary version id and date
1818 * @desc Produced by concatenation of {@link version_id} and {@link version_date}
@@ -117459,6 +117459,11 @@ CustomStreamers = {
117459117459 func(buf, obj) { obj.$kind = 'TTree'; obj.$file = buf.fFile; }
117460117460 },
117461117461
117462+ 'ROOT::RNTuple': {
117463+ name: '$file',
117464+ func(buf, obj) { obj.$kind = 'ROOT::RNTuple'; obj.$file = buf.fFile; }
117465+ },
117466+
117462117467 RooRealVar(buf, obj) {
117463117468 const v = buf.last_read_version;
117464117469 buf.classStreamer(obj, 'RooAbsRealLValue');
@@ -162310,6 +162315,7 @@ drawFuncs = { lst: [
162310162315 { name: clTBranchFunc, icon: 'img_leaf_method', draw: () => import_tree().then(h => h.drawTree), opt: ';dump', noinspect: true },
162311162316 { name: /^TBranch/, icon: 'img_branch', draw: () => import_tree().then(h => h.drawTree), dflt: 'expand', opt: ';dump', ctrl: 'dump', shift: kInspect, ignore_online: true, always_draw: true },
162312162317 { name: /^TLeaf/, icon: 'img_leaf', noexpand: true, draw: () => import_tree().then(h => h.drawTree), opt: ';dump', ctrl: 'dump', ignore_online: true, always_draw: true },
162318+ { name: 'ROOT::RNTuple', icon: 'img_tree', get_expand: () => Promise.resolve().then(function () { return rntuple; }).then(h => h.tupleHierarchy) },
162313162319 { name: clTList, icon: 'img_list', draw: () => import_h().then(h => h.drawList), get_expand: () => import_h().then(h => h.listHierarchy), dflt: 'expand' },
162314162320 { name: clTHashList, sameas: clTList },
162315162321 { name: clTObjArray, sameas: clTList },
@@ -175221,6 +175227,94 @@ __proto__: null,
175221175227TASImagePainter: TASImagePainter
175222175228});
175223175229
175230+ class RNTupleDescriptorBuilder {
175231+
175232+ deserializeHeader(header_blob) {
175233+ if (!header_blob)
175234+ return;
175235+
175236+ this.xxhash3 = 1234;
175237+ this.featuresFlags = [];
175238+ this.name = 'rntuple';
175239+ this.description = 'description';
175240+ // this.deserializeSchemaDescription ...
175241+ }
175242+
175243+ deserializeFooter(footer_blob) {
175244+ if (!footer_blob)
175245+ return;
175246+ this.xxhash3 = 1234;
175247+ }
175248+
175249+ }
175250+
175251+ /** @summary Very preliminary function to read header/footer from RNTuple
175252+ * @private */
175253+ async function readHeaderFooter(tuple) {
175254+ if (!tuple.$file)
175255+ return false;
175256+
175257+ // request header and footer buffers from the file
175258+ return tuple.$file.readBuffer([tuple.fSeekHeader, tuple.fNBytesHeader, tuple.fSeekFooter, tuple.fNBytesFooter]).then(blobs => {
175259+ if (blobs?.length !== 2)
175260+ return false;
175261+
175262+ // unzip both buffers
175263+ return Promise.all([
175264+ R__unzip(blobs[0], tuple.fLenHeader),
175265+ R__unzip(blobs[1], tuple.fLenFooter)
175266+ ]).then(unzip_blobs => {
175267+ const header_blob = unzip_blobs[0],
175268+ footer_blob = unzip_blobs[1];
175269+ if (!header_blob || !footer_blob)
175270+ return false;
175271+
175272+ // create builder description and decode it - dummy for the moment
175273+
175274+ tuple.builder = new RNTupleDescriptorBuilder;
175275+
175276+ tuple.builder.deserializeHeader(header_blob);
175277+
175278+ tuple.builder.deserializeFooter(footer_blob);
175279+
175280+ return true;
175281+ });
175282+ });
175283+ }
175284+
175285+
175286+ /** @summary Create hierarchy of ROOT::RNTuple object
175287+ * @desc Used by hierarchy painter to explore sub-elements
175288+ * @private */
175289+ async function tupleHierarchy(tuple_node, tuple) {
175290+ tuple_node._childs = [];
175291+ // tuple_node._tuple = tuple; // set reference, will be used later by RNTuple::Draw
175292+
175293+ return readHeaderFooter(tuple).then(res => {
175294+ if (!res)
175295+ return res;
175296+
175297+ // just show which objects belongs to hierarchy
175298+ // one need to fill list of items from tuple.builder ... object
175299+ for (let k = 0; k < 3; ++k) {
175300+ tuple_node._childs.push({
175301+ _name: `dummy${k}`,
175302+ _kind: 'ROOT::SomeBranchName',
175303+ _title: `Any title for dummy${k}`,
175304+ _obj: null
175305+ });
175306+ }
175307+
175308+ return true;
175309+ });
175310+ }
175311+
175312+ var rntuple = /*#__PURE__*/Object.freeze({
175313+ __proto__: null,
175314+ readHeaderFooter: readHeaderFooter,
175315+ tupleHierarchy: tupleHierarchy
175316+ });
175317+
175224175318const kNormal = 1, /* kLessTraffic = 2, */ kOffline = 3;
175225175319
175226175320class RObjectPainter extends ObjectPainter {
0 commit comments