@@ -12,7 +12,7 @@ const version_id = 'dev',
12
12
13
13
/** @summary version date
14
14
* @desc Release date in format day/month/year like '14/04/2022' */
15
- version_date = '28/05 /2025',
15
+ version_date = '2/06 /2025',
16
16
17
17
/** @summary version id and date
18
18
* @desc Produced by concatenation of {@link version_id} and {@link version_date}
@@ -117459,6 +117459,11 @@ CustomStreamers = {
117459
117459
func(buf, obj) { obj.$kind = 'TTree'; obj.$file = buf.fFile; }
117460
117460
},
117461
117461
117462
+ 'ROOT::RNTuple': {
117463
+ name: '$file',
117464
+ func(buf, obj) { obj.$kind = 'ROOT::RNTuple'; obj.$file = buf.fFile; }
117465
+ },
117466
+
117462
117467
RooRealVar(buf, obj) {
117463
117468
const v = buf.last_read_version;
117464
117469
buf.classStreamer(obj, 'RooAbsRealLValue');
@@ -162310,6 +162315,7 @@ drawFuncs = { lst: [
162310
162315
{ name: clTBranchFunc, icon: 'img_leaf_method', draw: () => import_tree().then(h => h.drawTree), opt: ';dump', noinspect: true },
162311
162316
{ 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 },
162312
162317
{ 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) },
162313
162319
{ name: clTList, icon: 'img_list', draw: () => import_h().then(h => h.drawList), get_expand: () => import_h().then(h => h.listHierarchy), dflt: 'expand' },
162314
162320
{ name: clTHashList, sameas: clTList },
162315
162321
{ name: clTObjArray, sameas: clTList },
@@ -175221,6 +175227,94 @@ __proto__: null,
175221
175227
TASImagePainter: TASImagePainter
175222
175228
});
175223
175229
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
+
175224
175318
const kNormal = 1, /* kLessTraffic = 2, */ kOffline = 3;
175225
175319
175226
175320
class RObjectPainter extends ObjectPainter {
0 commit comments