Hi,
In order to squeeze the last bit of speed out of
using ROOT, I need to understand the following points.
Could any ROOT guru give me some clues ?
Thanks.
(1) Suppose I have a branch br whose buffer size
is N=32000.
The data type in this branch is double.
(a) when calling br.GetEvent(0)
is it true that in the buffer,
we have 4000 (double) data points?
From that buffer with a pool of 4000 numbers,
ROOT then delivers the requested one into
the linked variable (set up by SetBranchAddress()).
(b) After (a),
when we call br.GetEvent(3000),
ROOT will NOT do disk I/O.
Is this correct??
(c) After (a),
if we do br.GetEvent(4015),
a disk I/O is certanly invoked.
Does the memory contain the entries
from 4015 to 8014 ??
(d) in (a) and (c),
the disk I/O process will involve
one data de-compression
for that block of data, right?
(2) Suppose we have two branches:
br1 : Int_t dim
br2 : Double_t d[dim]
Suppose the buffer size is N=32000.
We first allocate enough space, by knowing dim,
for the desired entry .
Then, for example,
br.GetEvent(0)
will extract the 'whole' array into the allocated space.
(a) how exactly is the process done?
I mean, does ROOT divide the task into small ones,
each of which involves only 32000 bytes.
ROOT does one disk i/o for 32000 bytes and puts the data
into the buffer,
does the data decompression,
and puts the resulting data into linked variable.
(b) is there any low level stuff so that I can
choose which part of the data in d[dim] is to
be extracted and decompressed ???
--hp
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:23 MET