Skip to content

Commit 9f3c735

Browse files
committed
Build with preliminary rntuple support
1 parent 086ac5c commit 9f3c735

File tree

2 files changed

+96
-2
lines changed

2 files changed

+96
-2
lines changed

build/jsroot.js

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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,
175221175227
TASImagePainter: 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+
175224175318
const kNormal = 1, /* kLessTraffic = 2, */ kOffline = 3;
175225175319

175226175320
class RObjectPainter extends ObjectPainter {

modules/core.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const version_id = 'dev',
44

55
/** @summary version date
66
* @desc Release date in format day/month/year like '14/04/2022' */
7-
version_date = '28/05/2025',
7+
version_date = '2/06/2025',
88

99
/** @summary version id and date
1010
* @desc Produced by concatenation of {@link version_id} and {@link version_date}

0 commit comments

Comments
 (0)