Skip to content

Commit 41b293d

Browse files
committed
Build with TLeafG fix
1 parent b2e83b0 commit 41b293d

3 files changed

Lines changed: 80 additions & 72 deletions

File tree

build/jsroot.js

Lines changed: 78 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const version_id = 'dev',
1414

1515
/** @summary version date
1616
* @desc Release date in format day/month/year like '14/04/2022' */
17-
version_date = '16/02/2026',
17+
version_date = '17/02/2026',
1818

1919
/** @summary version id and date
2020
* @desc Produced by concatenation of {@link version_id} and {@link version_date}
@@ -127242,6 +127242,7 @@ async function treeProcess(tree, selector, args) {
127242127242
case 'TLeafS': datakind = leaf.fIsUnsigned ? kUShort : kShort; break;
127243127243
case 'TLeafI': datakind = leaf.fIsUnsigned ? kUInt : kInt; break;
127244127244
case 'TLeafL': datakind = leaf.fIsUnsigned ? kULong64 : kLong64; break;
127245+
case 'TLeafG': datakind = leaf.fIsUnsigned ? kULong : kLong; break;
127245127246
case 'TLeafC': datakind = kTString; break;
127246127247
default: return null;
127247127248
}
@@ -177671,13 +177672,9 @@ class RNTupleDescriptorBuilder {
177671177672
return;
177672177673

177673177674
const reader = new RBufferReader(header_blob),
177674-
177675177675
payloadStart = reader.offset,
177676177676
// Read the envelope metadata
177677-
{
177678-
envelopeLength
177679-
} = this._readEnvelopeMetadata(reader),
177680-
177677+
{ envelopeLength } = this._readEnvelopeMetadata(reader),
177681177678
// Seek to end of envelope to get checksum
177682177679
checksumPos = payloadStart + envelopeLength - 8,
177683177680
currentPos = reader.offset;
@@ -177708,7 +177705,6 @@ class RNTupleDescriptorBuilder {
177708177705
// Read the envelope metadata
177709177706
this._readEnvelopeMetadata(reader);
177710177707

177711-
177712177708
// Feature flag(32 bits)
177713177709
this._readFeatureFlags(reader);
177714177710
// Header checksum (64-bit xxhash3)
@@ -177730,7 +177726,6 @@ class RNTupleDescriptorBuilder {
177730177726

177731177727
_readEnvelopeMetadata(reader) {
177732177728
const typeAndLength = reader.readU64(),
177733-
177734177729
// Envelope metadata
177735177730
// The 16 bits are the envelope type ID, and the 48 bits are the envelope length
177736177731
envelopeType = Number(typeAndLength & 0xFFFFn),
@@ -177791,7 +177786,6 @@ class RNTupleDescriptorBuilder {
177791177786
parentFieldId = reader.readU32(),
177792177787
structRole = reader.readU16(),
177793177788
flags = reader.readU16(),
177794-
177795177789
fieldName = reader.readString(),
177796177790
typeName = reader.readString(),
177797177791
typeAlias = reader.readString(),
@@ -177809,7 +177803,6 @@ class RNTupleDescriptorBuilder {
177809177803
if (flags & kFlagHasTypeChecksum)
177810177804
checksum = reader.readU32();
177811177805

177812-
177813177806
fieldDescriptors.push({
177814177807
fieldVersion,
177815177808
typeVersion,
@@ -177915,7 +177908,6 @@ class RNTupleDescriptorBuilder {
177915177908
throw new Error('Extra type info frame is not a list frame, which is required.');
177916177909

177917177910
const entryCount = reader.readU32(),
177918-
177919177911
extraTypeInfo = [];
177920177912
for (let i = 0; i < entryCount; ++i) {
177921177913
const recordStart = BigInt(reader.offset),
@@ -177963,10 +177955,7 @@ class RNTupleDescriptorBuilder {
177963177955
throw new Error('Non-standard locators (T=1) not supported yet');
177964177956
const size = sizeAndType,
177965177957
offset = reader.readU64(); // 8 bytes: offset
177966-
return {
177967-
size,
177968-
offset
177969-
};
177958+
return { size, offset };
177970177959
}
177971177960

177972177961
deserializePageList(page_list_blob) {
@@ -178101,15 +178090,15 @@ class RNTupleDescriptorBuilder {
178101178090
async function readHeaderFooter(tuple) {
178102178091
// if already read - return immediately, make possible to call several times
178103178092
if (tuple?.builder)
178104-
return true;
178093+
return tuple.builder;
178105178094

178106-
if (!tuple.$file)
178107-
return false;
178095+
if (!tuple?.$file)
178096+
return null;
178108178097

178109178098
// request header and footer buffers from the file
178110178099
return tuple.$file.readBuffer([tuple.fSeekHeader, tuple.fNBytesHeader, tuple.fSeekFooter, tuple.fNBytesFooter]).then(blobs => {
178111178100
if (blobs?.length !== 2)
178112-
return false;
178101+
throw new Error('Failure reading header or footer blobs');
178113178102

178114178103
// Handle both compressed and uncompressed cases
178115178104
const processBlob = (blob, uncompressedSize) => {
@@ -178122,47 +178111,47 @@ async function readHeaderFooter(tuple) {
178122178111
return Promise.all([
178123178112
processBlob(blobs[0], tuple.fLenHeader),
178124178113
processBlob(blobs[1], tuple.fLenFooter)
178125-
]).then(unzip_blobs => {
178126-
const [header_blob, footer_blob] = unzip_blobs;
178127-
if (!header_blob || !footer_blob)
178128-
return false;
178129-
178130-
tuple.builder = new RNTupleDescriptorBuilder;
178131-
tuple.builder.deserializeHeader(header_blob);
178132-
tuple.builder.deserializeFooter(footer_blob);
178133-
178134-
// Deserialize Page List
178135-
const group = tuple.builder.clusterGroups?.[0];
178136-
if (!group || !group.pageListLocator)
178137-
throw new Error('No valid cluster group or page list locator found');
178138-
178139-
const offset = Number(group.pageListLocator.offset),
178140-
size = Number(group.pageListLocator.size),
178141-
uncompressedSize = Number(group.pageListLength);
178142-
178143-
return tuple.$file.readBuffer([offset, size]).then(page_list_blob => {
178144-
if (!(page_list_blob instanceof DataView))
178145-
throw new Error(`Expected DataView from readBuffer, got ${Object.prototype.toString.call(page_list_blob)}`);
178146-
178147-
// Check if page list data is uncompressed
178148-
if (page_list_blob.byteLength === uncompressedSize) {
178149-
// Data is uncompressed, use directly
178150-
tuple.builder.deserializePageList(page_list_blob);
178151-
return true;
178152-
}
178153-
// Attempt to decompress the page list
178154-
return R__unzip(page_list_blob, uncompressedSize).then(unzipped_blob => {
178155-
if (!(unzipped_blob instanceof DataView))
178156-
throw new Error(`Unzipped page list is not a DataView, got ${Object.prototype.toString.call(unzipped_blob)}`);
178157-
178158-
tuple.builder.deserializePageList(unzipped_blob);
178159-
return true;
178160-
});
178161-
});
178162-
});
178114+
]);
178115+
}).then(unzip_blobs => {
178116+
const [header_blob, footer_blob] = unzip_blobs;
178117+
if (!header_blob || !footer_blob)
178118+
throw new Error('Failure when uncompress header and footer blobs');
178119+
178120+
tuple.builder = new RNTupleDescriptorBuilder;
178121+
tuple.builder.deserializeHeader(header_blob);
178122+
tuple.builder.deserializeFooter(footer_blob);
178123+
178124+
// Deserialize Page List
178125+
const group = tuple.builder.clusterGroups?.[0];
178126+
if (!group || !group.pageListLocator)
178127+
throw new Error('No valid cluster group or page list locator found');
178128+
178129+
const offset = Number(group.pageListLocator.offset),
178130+
size = Number(group.pageListLocator.size);
178131+
178132+
return tuple.$file.readBuffer([offset, size]);
178133+
}).then(page_list_blob => {
178134+
if (!(page_list_blob instanceof DataView))
178135+
throw new Error(`Expected DataView from readBuffer, got ${Object.prototype.toString.call(page_list_blob)}`);
178136+
178137+
const group = tuple.builder.clusterGroups?.[0],
178138+
uncompressedSize = Number(group.pageListLength);
178139+
178140+
// Check if page list data is uncompressed
178141+
if (page_list_blob.byteLength === uncompressedSize)
178142+
return page_list_blob;
178143+
178144+
// Attempt to decompress the page list
178145+
return R__unzip(page_list_blob, uncompressedSize);
178146+
}).then(unzipped_blob => {
178147+
if (!(unzipped_blob instanceof DataView))
178148+
throw new Error(`Unzipped page list is not a DataView, got ${Object.prototype.toString.call(unzipped_blob)}`);
178149+
178150+
tuple.builder.deserializePageList(unzipped_blob);
178151+
return tuple.builder;
178163178152
}).catch(err => {
178164178153
console.error('Error during readHeaderFooter execution:', err);
178165-
throw err;
178154+
return null;
178166178155
});
178167178156
}
178168178157

@@ -178210,6 +178199,8 @@ class ReaderItem {
178210178199
}
178211178200
}
178212178201

178202+
reset_extras() {}
178203+
178213178204
shift_o(sz) {
178214178205
this.o += sz;
178215178206
while ((this.o >= this.view_len) && this.view_len) {
@@ -178451,6 +178442,10 @@ class StringReaderItem extends ReaderItem {
178451178442
this.off0 = 0;
178452178443
}
178453178444

178445+
reset_extras() {
178446+
this.off0 = 0;
178447+
}
178448+
178454178449
func(tgtobj) {
178455178450
const tmp = {};
178456178451
this.items[0].func(tmp);
@@ -178510,6 +178505,10 @@ class CollectionReaderItem extends ReaderItem {
178510178505
items[1].set_not_simple();
178511178506
}
178512178507

178508+
reset_extras() {
178509+
this.off0 = 0;
178510+
}
178511+
178513178512
func(tgtobj) {
178514178513
const arr = [], tmp = {};
178515178514
this.items[0].func(tmp);
@@ -178611,20 +178610,27 @@ async function rntupleProcess(rntuple, selector, args = {}) {
178611178610
};
178612178611

178613178612
function readNextPortion(inc_cluster) {
178614-
if (inc_cluster) {
178615-
handle.current_cluster++;
178616-
handle.current_cluster_first_entry = handle.current_cluster_last_entry;
178617-
}
178613+
let do_again = true, numClusterEntries, locations;
178618178614

178619-
const locations = rntuple.builder.pageLocations[handle.current_cluster];
178620-
if (!locations) {
178621-
selector.Terminate(true);
178622-
return selector;
178623-
}
178615+
while (do_again) {
178616+
if (inc_cluster) {
178617+
handle.current_cluster++;
178618+
handle.current_cluster_first_entry = handle.current_cluster_last_entry;
178619+
}
178620+
178621+
locations = rntuple.builder.pageLocations[handle.current_cluster];
178622+
if (!locations) {
178623+
selector.Terminate(true);
178624+
return selector;
178625+
}
178624178626

178625-
const numClusterEntries = rntuple.builder.clusterSummaries[handle.current_cluster].numEntries;
178627+
numClusterEntries = rntuple.builder.clusterSummaries[handle.current_cluster].numEntries;
178626178628

178627-
handle.current_cluster_last_entry = handle.current_cluster_first_entry + numClusterEntries;
178629+
handle.current_cluster_last_entry = handle.current_cluster_first_entry + numClusterEntries;
178630+
178631+
do_again = inc_cluster && handle.process_entries &&
178632+
(handle.process_entries[handle.process_entries_indx] >= handle.current_cluster_last_entry);
178633+
}
178628178634

178629178635
// calculate entries which can be extracted from the cluster
178630178636
let emin, emax;
@@ -178651,8 +178657,9 @@ async function rntupleProcess(rntuple, selector, args = {}) {
178651178657
}).then(unzipBlobs => {
178652178658
unzipBlobs.map((rawblob, idx) => itemsToRead[idx].reconstructBlob(rawblob, pagesToRead[idx]));
178653178659

178654-
for (let indx = 0; indx < handle.columns.length; ++indx)
178655-
handle.columns[indx].init_o();
178660+
// reset reading pointer after all buffers are there
178661+
handle.columns.forEach(item => item.init_o());
178662+
handle.arr.forEach(item => item.reset_extras());
178656178663

178657178664
let skip_entries = handle.current_entry - handle.current_cluster_first_entry;
178658178665

changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
1. Introduce `settings.ServerTimeout` global timeout for THttpServer operations
2121
1. Let set custom color palette with `setColorPalette` function
2222
1. Fix - paint frame border mode/size from TCanvas
23+
1. Fix - add TLeafG support to TTree #397
2324

2425

2526
## Changes in 7.10.2

modules/core.mjs

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

77
/** @summary version date
88
* @desc Release date in format day/month/year like '14/04/2022' */
9-
version_date = '16/02/2026',
9+
version_date = '17/02/2026',
1010

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

0 commit comments

Comments
 (0)