Skip to content

Commit 1bba98e

Browse files
committed
Fix - correctly use pages in RNtuple
When each column in the cluster spitted on the pages, one need to correctly detect page from which values should be extracted
1 parent 5694d9f commit 1bba98e

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

modules/rntuple.mjs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ async function readHeaderFooter(tuple) {
922922
});
923923
}
924924

925-
function readEntry(rntuple, fieldName, entryIndex) {
925+
function readEntry(rntuple, fieldName, clusterIndex, entryIndex) {
926926
const builder = rntuple.builder,
927927
field = builder.fieldDescriptors.find(f => f.fieldName === fieldName),
928928
columns = rntuple.fieldToColumns[fieldName];
@@ -932,16 +932,27 @@ function readEntry(rntuple, fieldName, entryIndex) {
932932
if (!columns)
933933
throw new Error(`No columns field ${fieldName}`);
934934

935+
936+
const pages = builder.pageLocations[clusterIndex]?.[columns[0].index]?.pages;
937+
if (!pages)
938+
throw new Error(`No pages found ${fieldName}`);
939+
940+
let pageid = 0;
941+
while ((pageid < pages.length - 1) && (entryIndex >= Number(pages[pageid].numElements))) {
942+
entryIndex -= Number(pages[pageid].numElements);
943+
pageid++;
944+
}
945+
935946
if (field.typeName === 'std::string') {
936947
// string extracted from two columns
937-
const offsets = rntuple._clusterData[columns[0].index][0],
938-
payload = rntuple._clusterData[columns[1].index][0],
948+
const offsets = rntuple._clusterData[columns[0].index][pageid],
949+
payload = rntuple._clusterData[columns[1].index][pageid],
939950
start = entryIndex === 0 ? 0 : Number(offsets[entryIndex - 1]),
940951
end = Number(offsets[entryIndex]);
941952
return payload.slice(start, end).join(''); // Convert to string
942953
}
943954
const values = rntuple._clusterData[columns[0].index];
944-
return values[0][entryIndex];
955+
return values[pageid][entryIndex];
945956
}
946957

947958
/** @summary Return field name for specified branch index
@@ -1066,7 +1077,7 @@ function readNextCluster(rntuple, selector) {
10661077
const fieldName = getSelectorFieldName(selector, b),
10671078
tgtName = selector.nameOfBranch(b);
10681079

1069-
selector.tgtobj[tgtName] = readEntry(rntuple, fieldName, i);
1080+
selector.tgtobj[tgtName] = readEntry(rntuple, fieldName, clusterIndex, i);
10701081
}
10711082
selector.Process(i);
10721083
}

0 commit comments

Comments
 (0)